From 64d7c8d72179f746750c559c3ffa0c02c099971c Mon Sep 17 00:00:00 2001 From: Erol Suleyman Date: Sun, 27 Nov 2016 15:35:10 +0100 Subject: [PATCH 001/504] test --- fundamentals/exercises.md | 1 + 1 file changed, 1 insertion(+) diff --git a/fundamentals/exercises.md b/fundamentals/exercises.md index a3c07ec8e..982880216 100644 --- a/fundamentals/exercises.md +++ b/fundamentals/exercises.md @@ -1,5 +1,6 @@ # JavaScript fundamentals - exercices + ### Given the following code: ```js From ddacc150c089f50c81348be949a4fcfd33b05b90 Mon Sep 17 00:00:00 2001 From: Joost Lubach Date: Sun, 27 Nov 2016 15:39:15 +0100 Subject: [PATCH 002/504] removing & ignoring node_modules --- .../ci-info/.npmignore => .gitignore} | 0 .../bug-challenge-es6/node_modules/.bin/acorn | 1 - .../node_modules/.bin/babylon | 1 - .../bug-challenge-es6/node_modules/.bin/cdl | 1 - .../bug-challenge-es6/node_modules/.bin/errno | 1 - .../node_modules/.bin/escodegen | 1 - .../node_modules/.bin/esgenerate | 1 - .../node_modules/.bin/esparse | 1 - .../node_modules/.bin/esvalidate | 1 - .../node_modules/.bin/handlebars | 1 - .../node_modules/.bin/har-validator | 1 - .../node_modules/.bin/istanbul | 1 - .../bug-challenge-es6/node_modules/.bin/jest | 1 - .../node_modules/.bin/jest-runtime | 1 - .../node_modules/.bin/js-yaml | 1 - .../bug-challenge-es6/node_modules/.bin/jsesc | 1 - .../bug-challenge-es6/node_modules/.bin/json5 | 1 - .../node_modules/.bin/loose-envify | 1 - .../node_modules/.bin/marked | 1 - .../node_modules/.bin/mkdirp | 1 - .../bug-challenge-es6/node_modules/.bin/nopt | 1 - .../node_modules/.bin/notify | 1 - .../node_modules/.bin/regjsparser | 1 - .../node_modules/.bin/rimraf | 1 - .../bug-challenge-es6/node_modules/.bin/sane | 1 - .../node_modules/.bin/semver | 1 - .../node_modules/.bin/sshpk-conv | 1 - .../node_modules/.bin/sshpk-sign | 1 - .../node_modules/.bin/sshpk-verify | 1 - .../node_modules/.bin/uglifyjs | 1 - .../bug-challenge-es6/node_modules/.bin/uuid | 1 - .../bug-challenge-es6/node_modules/.bin/which | 1 - .../node_modules/abab/CHANGELOG.md | 11 - .../node_modules/abab/README.md | 52 - .../node_modules/abab/index.js | 9 - .../node_modules/abab/lib/atob.js | 109 - .../node_modules/abab/lib/btoa.js | 65 - .../node_modules/abab/package.json | 98 - .../node_modules/abbrev/LICENSE | 15 - .../node_modules/abbrev/README.md | 23 - .../node_modules/abbrev/abbrev.js | 62 - .../node_modules/abbrev/package.json | 82 - .../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 | 92 - .../node_modules/acorn/.editorconfig | 7 - .../node_modules/acorn/.gitattributes | 1 - .../node_modules/acorn/.npmignore | 3 - .../node_modules/acorn/.tern-project | 6 - .../node_modules/acorn/.travis.yml | 6 - .../node_modules/acorn/AUTHORS | 43 - .../node_modules/acorn/LICENSE | 19 - .../node_modules/acorn/README.md | 396 - .../node_modules/acorn/bin/acorn | 71 - .../node_modules/acorn/bin/build-acorn.js | 82 - .../acorn/bin/generate-identifier-regex.js | 47 - .../node_modules/acorn/bin/update_authors.sh | 6 - .../node_modules/acorn/dist/.keep | 0 .../node_modules/acorn/dist/acorn.js | 3340 --- .../node_modules/acorn/dist/acorn_loose.js | 1300 -- .../node_modules/acorn/dist/walk.js | 377 - .../node_modules/acorn/package.json | 214 - .../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 - .../node_modules/acorn/src/lval.js | 215 - .../node_modules/acorn/src/node.js | 50 - .../node_modules/acorn/src/options.js | 121 - .../node_modules/acorn/src/parseutil.js | 102 - .../node_modules/acorn/src/state.js | 104 - .../node_modules/acorn/src/statement.js | 626 - .../node_modules/acorn/src/tokencontext.js | 109 - .../node_modules/acorn/src/tokenize.js | 682 - .../node_modules/acorn/src/tokentype.js | 147 - .../node_modules/acorn/src/util.js | 9 - .../node_modules/acorn/src/walk/index.js | 340 - .../node_modules/acorn/src/whitespace.js | 12 - .../node_modules/align-text/LICENSE | 21 - .../node_modules/align-text/README.md | 236 - .../node_modules/align-text/index.js | 52 - .../node_modules/align-text/package.json | 109 - .../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 | 79 - .../node_modules/ansi-escapes/index.js | 106 - .../node_modules/ansi-escapes/license | 21 - .../node_modules/ansi-escapes/package.json | 110 - .../node_modules/ansi-escapes/readme.md | 176 - .../node_modules/ansi-regex/index.js | 4 - .../node_modules/ansi-regex/license | 21 - .../node_modules/ansi-regex/package.json | 113 - .../node_modules/ansi-regex/readme.md | 31 - .../node_modules/ansi-styles/index.js | 65 - .../node_modules/ansi-styles/license | 21 - .../node_modules/ansi-styles/package.json | 106 - .../node_modules/ansi-styles/readme.md | 86 - .../node_modules/ansicolors/.npmignore | 15 - .../node_modules/ansicolors/.travis.yml | 4 - .../node_modules/ansicolors/LICENSE | 23 - .../node_modules/ansicolors/README.md | 42 - .../node_modules/ansicolors/ansicolors.js | 55 - .../node_modules/ansicolors/package.json | 77 - .../ansicolors/test/ansicolors.js | 55 - .../node_modules/append-transform/index.js | 93 - .../node_modules/append-transform/license | 21 - .../append-transform/package.json | 99 - .../node_modules/append-transform/readme.md | 72 - .../node_modules/argparse/CHANGELOG.md | 179 - .../node_modules/argparse/LICENSE | 21 - .../node_modules/argparse/README.md | 253 - .../node_modules/argparse/index.js | 3 - .../node_modules/argparse/lib/action.js | 146 - .../argparse/lib/action/append.js | 53 - .../argparse/lib/action/append/constant.js | 47 - .../node_modules/argparse/lib/action/count.js | 40 - .../node_modules/argparse/lib/action/help.js | 47 - .../node_modules/argparse/lib/action/store.js | 50 - .../argparse/lib/action/store/constant.js | 43 - .../argparse/lib/action/store/false.js | 27 - .../argparse/lib/action/store/true.js | 26 - .../argparse/lib/action/subparsers.js | 149 - .../argparse/lib/action/version.js | 47 - .../argparse/lib/action_container.js | 482 - .../node_modules/argparse/lib/argparse.js | 14 - .../argparse/lib/argument/error.js | 50 - .../argparse/lib/argument/exclusive.js | 54 - .../argparse/lib/argument/group.js | 75 - .../argparse/lib/argument_parser.js | 1161 -- .../node_modules/argparse/lib/const.js | 21 - .../argparse/lib/help/added_formatters.js | 87 - .../argparse/lib/help/formatter.js | 795 - .../node_modules/argparse/lib/namespace.js | 76 - .../node_modules/argparse/lib/utils.js | 57 - .../node_modules/argparse/package.json | 97 - .../node_modules/arr-diff/LICENSE | 21 - .../node_modules/arr-diff/README.md | 74 - .../node_modules/arr-diff/index.js | 58 - .../node_modules/arr-diff/package.json | 111 - .../node_modules/arr-flatten/LICENSE | 21 - .../node_modules/arr-flatten/README.md | 73 - .../node_modules/arr-flatten/index.js | 27 - .../node_modules/arr-flatten/package.json | 100 - .../node_modules/array-differ/index.js | 7 - .../node_modules/array-differ/package.json | 87 - .../node_modules/array-differ/readme.md | 41 - .../node_modules/array-equal/.npmignore | 1 - .../node_modules/array-equal/LICENSE | 22 - .../node_modules/array-equal/README.md | 11 - .../node_modules/array-equal/component.json | 10 - .../node_modules/array-equal/index.js | 9 - .../node_modules/array-equal/package.json | 67 - .../node_modules/array-union/index.js | 6 - .../node_modules/array-union/license | 21 - .../node_modules/array-union/package.json | 99 - .../node_modules/array-union/readme.md | 28 - .../node_modules/array-uniq/index.js | 62 - .../node_modules/array-uniq/license | 21 - .../node_modules/array-uniq/package.json | 97 - .../node_modules/array-uniq/readme.md | 30 - .../node_modules/array-unique/LICENSE | 21 - .../node_modules/array-unique/README.md | 51 - .../node_modules/array-unique/index.js | 28 - .../node_modules/array-unique/package.json | 86 - .../node_modules/arrify/index.js | 8 - .../node_modules/arrify/license | 21 - .../node_modules/arrify/package.json | 89 - .../node_modules/arrify/readme.md | 36 - .../node_modules/asn1/.npmignore | 2 - .../node_modules/asn1/.travis.yml | 4 - .../node_modules/asn1/LICENSE | 19 - .../node_modules/asn1/README.md | 50 - .../node_modules/asn1/lib/ber/errors.js | 13 - .../node_modules/asn1/lib/ber/index.js | 27 - .../node_modules/asn1/lib/ber/reader.js | 261 - .../node_modules/asn1/lib/ber/types.js | 36 - .../node_modules/asn1/lib/ber/writer.js | 316 - .../node_modules/asn1/lib/index.js | 20 - .../node_modules/asn1/package.json | 90 - .../node_modules/asn1/tst/ber/reader.test.js | 208 - .../node_modules/asn1/tst/ber/writer.test.js | 370 - .../node_modules/assert-plus/AUTHORS | 6 - .../node_modules/assert-plus/CHANGES.md | 8 - .../node_modules/assert-plus/README.md | 155 - .../node_modules/assert-plus/assert.js | 206 - .../node_modules/assert-plus/package.json | 107 - .../node_modules/async/CHANGELOG.md | 125 - .../node_modules/async/LICENSE | 19 - .../node_modules/async/README.md | 1877 -- .../node_modules/async/dist/async.js | 1265 -- .../node_modules/async/dist/async.min.js | 2 - .../node_modules/async/lib/async.js | 1265 -- .../node_modules/async/package.json | 152 - .../node_modules/asynckit/LICENSE | 21 - .../node_modules/asynckit/README.md | 233 - .../node_modules/asynckit/bench.js | 76 - .../node_modules/asynckit/index.js | 6 - .../node_modules/asynckit/lib/abort.js | 29 - .../node_modules/asynckit/lib/async.js | 34 - .../node_modules/asynckit/lib/defer.js | 26 - .../node_modules/asynckit/lib/iterate.js | 75 - .../asynckit/lib/readable_asynckit.js | 91 - .../asynckit/lib/readable_parallel.js | 25 - .../asynckit/lib/readable_serial.js | 25 - .../asynckit/lib/readable_serial_ordered.js | 29 - .../node_modules/asynckit/lib/state.js | 37 - .../node_modules/asynckit/lib/streamify.js | 141 - .../node_modules/asynckit/lib/terminator.js | 29 - .../node_modules/asynckit/package.json | 118 - .../node_modules/asynckit/parallel.js | 43 - .../node_modules/asynckit/serial.js | 17 - .../node_modules/asynckit/serialOrdered.js | 75 - .../node_modules/asynckit/stream.js | 21 - .../node_modules/aws-sign2/LICENSE | 55 - .../node_modules/aws-sign2/README.md | 4 - .../node_modules/aws-sign2/index.js | 212 - .../node_modules/aws-sign2/package.json | 73 - .../node_modules/aws4/.npmignore | 4 - .../node_modules/aws4/.tern-port | 1 - .../node_modules/aws4/.travis.yml | 5 - .../node_modules/aws4/LICENSE | 19 - .../node_modules/aws4/README.md | 523 - .../node_modules/aws4/aws4.js | 323 - .../node_modules/aws4/lru.js | 96 - .../node_modules/aws4/package.json | 132 - .../node_modules/babel-code-frame/.npmignore | 3 - .../node_modules/babel-code-frame/README.md | 42 - .../babel-code-frame/lib/index.js | 135 - .../babel-code-frame/package.json | 95 - .../node_modules/babel-core/README.md | 24 - .../node_modules/babel-core/index.js | 1 - .../babel-core/lib/api/browser.js | 190 - .../node_modules/babel-core/lib/api/node.js | 139 - .../babel-core/lib/helpers/merge.js | 46 - .../babel-core/lib/helpers/normalize-ast.js | 23 - .../babel-core/lib/helpers/resolve.js | 46 - .../node_modules/babel-core/lib/store.js | 55 - .../lib/tools/build-external-helpers.js | 105 - .../lib/transformation/file/index.js | 747 - .../lib/transformation/file/logger.js | 72 - .../lib/transformation/file/metadata.js | 178 - .../file/options/build-config-chain.js | 215 - .../lib/transformation/file/options/config.js | 211 - .../lib/transformation/file/options/index.js | 38 - .../file/options/option-manager.js | 389 - .../transformation/file/options/parsers.js | 33 - .../transformation/file/options/removed.js | 50 - .../internal-plugins/block-hoist.js | 45 - .../internal-plugins/shadow-functions.js | 132 - .../babel-core/lib/transformation/pipeline.js | 81 - .../lib/transformation/plugin-pass.js | 71 - .../babel-core/lib/transformation/plugin.js | 163 - .../node_modules/babel-core/lib/util.js | 192 - .../node_modules/babel-core/package.json | 130 - .../node_modules/babel-core/register.js | 3 - .../node_modules/babel-generator/README.md | 85 - .../babel-generator/lib/buffer.js | 185 - .../babel-generator/lib/generators/base.js | 59 - .../babel-generator/lib/generators/classes.js | 96 - .../lib/generators/expressions.js | 240 - .../babel-generator/lib/generators/flow.js | 411 - .../babel-generator/lib/generators/jsx.js | 116 - .../babel-generator/lib/generators/methods.js | 111 - .../babel-generator/lib/generators/modules.js | 184 - .../lib/generators/statements.js | 317 - .../lib/generators/template-literals.js | 33 - .../babel-generator/lib/generators/types.js | 158 - .../node_modules/babel-generator/lib/index.js | 168 - .../babel-generator/lib/node/index.js | 146 - .../babel-generator/lib/node/parentheses.js | 250 - .../babel-generator/lib/node/whitespace.js | 164 - .../babel-generator/lib/printer.js | 555 - .../babel-generator/lib/source-map.js | 77 - .../babel-generator/lib/whitespace.js | 95 - .../node_modules/babel-generator/package.json | 105 - .../.npmignore | 3 - .../babel-helper-bindify-decorators/README.md | 5 - .../lib/index.js | 59 - .../package.json | 89 - .../.npmignore | 3 - .../README.md | 5 - .../lib/index.js | 65 - .../package.json | 89 - .../babel-helper-call-delegate/.npmignore | 3 - .../babel-helper-call-delegate/README.md | 5 - .../babel-helper-call-delegate/lib/index.js | 72 - .../babel-helper-call-delegate/package.json | 90 - .../babel-helper-define-map/.npmignore | 3 - .../babel-helper-define-map/README.md | 5 - .../babel-helper-define-map/lib/index.js | 155 - .../babel-helper-define-map/package.json | 92 - .../.npmignore | 3 - .../README.md | 5 - .../lib/index.js | 72 - .../package.json | 89 - .../babel-helper-explode-class/.npmignore | 3 - .../babel-helper-explode-class/README.md | 5 - .../babel-helper-explode-class/lib/index.js | 93 - .../babel-helper-explode-class/package.json | 90 - .../babel-helper-function-name/.npmignore | 3 - .../babel-helper-function-name/README.md | 5 - .../babel-helper-function-name/lib/index.js | 133 - .../babel-helper-function-name/package.json | 95 - .../.npmignore | 3 - .../babel-helper-get-function-arity/README.md | 5 - .../lib/index.js | 22 - .../package.json | 89 - .../babel-helper-hoist-variables/.npmignore | 3 - .../babel-helper-hoist-variables/README.md | 5 - .../babel-helper-hoist-variables/lib/index.js | 71 - .../babel-helper-hoist-variables/package.json | 89 - .../.npmignore | 3 - .../README.md | 5 - .../lib/index.js | 19 - .../package.json | 89 - .../babel-helper-regex/.npmignore | 3 - .../node_modules/babel-helper-regex/README.md | 5 - .../babel-helper-regex/lib/index.js | 28 - .../babel-helper-regex/package.json | 90 - .../.npmignore | 3 - .../README.md | 5 - .../lib/for-await.js | 89 - .../lib/index.js | 166 - .../package.json | 92 - .../babel-helper-replace-supers/.npmignore | 3 - .../babel-helper-replace-supers/README.md | 5 - .../babel-helper-replace-supers/lib/index.js | 228 - .../babel-helper-replace-supers/package.json | 93 - .../node_modules/babel-helpers/.npmignore | 3 - .../node_modules/babel-helpers/README.md | 21 - .../node_modules/babel-helpers/lib/helpers.js | 76 - .../node_modules/babel-helpers/lib/index.js | 31 - .../node_modules/babel-helpers/package.json | 93 - .../node_modules/babel-jest/.npmignore | 3 - .../node_modules/babel-jest/README.md | 13 - .../node_modules/babel-jest/build/index.js | 97 - .../node_modules/babel-jest/package.json | 89 - .../node_modules/babel-messages/.npmignore | 3 - .../node_modules/babel-messages/README.md | 18 - .../node_modules/babel-messages/lib/index.js | 105 - .../node_modules/babel-messages/package.json | 94 - .../.npmignore | 4 - .../README.md | 39 - .../lib/index.js | 47 - .../package.json | 92 - .../babel-plugin-istanbul/CHANGELOG.md | 101 - .../babel-plugin-istanbul/LICENSE | 27 - .../babel-plugin-istanbul/README.md | 93 - .../babel-plugin-istanbul/lib/index.js | 72 - .../babel-plugin-istanbul/package.json | 128 - .../babel-plugin-jest-hoist/.npmignore | 3 - .../babel-plugin-jest-hoist/README.md | 35 - .../babel-plugin-jest-hoist/build/index.js | 168 - .../babel-plugin-jest-hoist/package.json | 87 - .../.npmignore | 3 - .../README.md | 35 - .../lib/index.js | 13 - .../package.json | 88 - .../.npmignore | 3 - .../README.md | 35 - .../lib/index.js | 13 - .../package.json | 88 - .../.npmignore | 3 - .../README.md | 35 - .../lib/index.js | 13 - .../package.json | 88 - .../.npmignore | 3 - .../README.md | 35 - .../lib/index.js | 13 - .../package.json | 88 - .../babel-plugin-syntax-decorators/.npmignore | 3 - .../babel-plugin-syntax-decorators/README.md | 35 - .../lib/index.js | 13 - .../package.json | 88 - .../.npmignore | 3 - .../README.md | 35 - .../lib/index.js | 13 - .../package.json | 68 - .../.npmignore | 3 - .../README.md | 35 - .../lib/index.js | 13 - .../package.json | 88 - .../.npmignore | 3 - .../README.md | 35 - .../lib/index.js | 13 - .../package.json | 88 - .../.npmignore | 3 - .../README.md | 35 - .../lib/index.js | 13 - .../package.json | 88 - .../.npmignore | 3 - .../README.md | 35 - .../lib/index.js | 13 - .../package.json | 90 - .../arrow-function/actual.js | 1 - .../arrow-function/expected.js | 1 - .../trailing-function-commas/call/actual.js | 4 - .../trailing-function-commas/call/expected.js | 1 - .../declaration/actual.js | 8 - .../declaration/expected.js | 3 - .../new-expression/actual.js | 1 - .../new-expression/expected.js | 1 - .../trailing-function-commas/options.json | 3 - .../test/index.js | 1 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 44 - .../package.json | 74 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 27 - .../package.json | 94 - .../.npmignore | 4 - .../README.md | 33 - .../lib/index.js | 93 - .../package.json | 94 - .../.npmignore | 4 - .../README.md | 46 - .../lib/index.js | 252 - .../package.json | 95 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 194 - .../package.json | 97 - .../.npmignore | 4 - .../README.md | 43 - .../lib/index.js | 35 - .../package.json | 92 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 67 - .../package.json | 92 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 622 - .../lib/tdz.js | 97 - .../package.json | 96 - .../.npmignore | 4 - .../README.md | 45 - .../lib/index.js | 68 - .../lib/lib/memoise-decorators.js | 59 - .../lib/loose.js | 74 - .../lib/vanilla.js | 559 - .../package.json | 100 - .../.npmignore | 4 - .../README.md | 45 - .../lib/index.js | 227 - .../package.json | 94 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 554 - .../package.json | 92 - .../.npmignore | 3 - .../README.md | 40 - .../lib/index.js | 101 - .../package.json | 93 - .../.npmignore | 4 - .../README.md | 45 - .../lib/index.js | 190 - .../package.json | 92 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 35 - .../package.json | 94 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 28 - .../package.json | 92 - .../.npmignore | 3 - .../README.md | 33 - .../lib/index.js | 137 - .../package.json | 95 - .../.npmignore | 4 - .../README.md | 43 - .../lib/index.js | 511 - .../package.json | 96 - .../.npmignore | 3 - .../README.md | 44 - .../lib/index.js | 395 - .../package.json | 95 - .../.npmignore | 3 - .../README.md | 178 - .../lib/index.js | 127 - .../package.json | 94 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 87 - .../package.json | 93 - .../.npmignore | 4 - .../README.md | 35 - .../lib/default.js | 163 - .../lib/destructuring.js | 34 - .../lib/index.js | 56 - .../lib/rest.js | 255 - .../package.json | 97 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 35 - .../package.json | 93 - .../.npmignore | 4 - .../README.md | 45 - .../lib/index.js | 159 - .../package.json | 92 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 32 - .../package.json | 94 - .../.npmignore | 4 - .../README.md | 46 - .../lib/index.js | 139 - .../package.json | 92 - .../.npmignore | 3 - .../README.md | 33 - .../lib/index.js | 59 - .../package.json | 92 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 31 - .../package.json | 94 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 28 - .../package.json | 94 - .../.npmignore | 4 - .../README.md | 35 - .../lib/index.js | 49 - .../package.json | 93 - .../.npmignore | 4 - .../README.md | 63 - .../lib/index.js | 301 - .../package.json | 93 - .../.npmignore | 2 - .../.test/async.es6.js | 493 - .../.test/tests.es6.js | 2560 --- .../LICENSE | 14 - .../PATENTS | 33 - .../README.md | 46 - .../lib/emit.js | 834 - .../lib/hoist.js | 115 - .../lib/index.js | 9 - .../lib/leap.js | 171 - .../lib/meta.js | 93 - .../lib/util.js | 19 - .../lib/visit.js | 214 - .../package.json | 96 - .../src/emit.js | 1184 -- .../src/hoist.js | 150 - .../src/index.js | 13 - .../src/leap.js | 174 - .../src/meta.js | 103 - .../src/util.js | 23 - .../src/visit.js | 269 - .../.npmignore | 3 - .../README.md | 50 - .../lib/index.js | 49 - .../package.json | 93 - .../babel-preset-es2015/.npmignore | 3 - .../babel-preset-es2015/README.md | 54 - .../babel-preset-es2015/lib/index.js | 140 - .../babel-preset-es2015/package.json | 118 - .../node_modules/babel-preset-jest/.npmignore | 3 - .../node_modules/babel-preset-jest/README.md | 35 - .../node_modules/babel-preset-jest/index.js | 13 - .../babel-preset-jest/package.json | 87 - .../babel-preset-stage-1/.npmignore | 3 - .../babel-preset-stage-1/README.md | 35 - .../babel-preset-stage-1/lib/index.js | 23 - .../babel-preset-stage-1/package.json | 90 - .../babel-preset-stage-2/.npmignore | 3 - .../babel-preset-stage-2/README.md | 35 - .../babel-preset-stage-2/lib/index.js | 27 - .../babel-preset-stage-2/package.json | 95 - .../babel-preset-stage-3/.npmignore | 3 - .../babel-preset-stage-3/README.md | 35 - .../babel-preset-stage-3/lib/index.js | 30 - .../babel-preset-stage-3/package.json | 96 - .../node_modules/babel-register/.npmignore | 3 - .../node_modules/babel-register/README.md | 19 - .../babel-register/lib/browser.js | 7 - .../node_modules/babel-register/lib/cache.js | 65 - .../node_modules/babel-register/lib/node.js | 178 - .../node_modules/babel-register/package.json | 98 - .../node_modules/babel-runtime/.npmignore | 2 - .../node_modules/babel-runtime/README.md | 2 - .../node_modules/babel-runtime/core-js.js | 4 - .../babel-runtime/core-js/array/concat.js | 1 - .../core-js/array/copy-within.js | 1 - .../babel-runtime/core-js/array/entries.js | 1 - .../babel-runtime/core-js/array/every.js | 1 - .../babel-runtime/core-js/array/fill.js | 1 - .../babel-runtime/core-js/array/filter.js | 1 - .../babel-runtime/core-js/array/find-index.js | 1 - .../babel-runtime/core-js/array/find.js | 1 - .../babel-runtime/core-js/array/for-each.js | 1 - .../babel-runtime/core-js/array/from.js | 1 - .../babel-runtime/core-js/array/includes.js | 1 - .../babel-runtime/core-js/array/index-of.js | 1 - .../babel-runtime/core-js/array/join.js | 1 - .../babel-runtime/core-js/array/keys.js | 1 - .../core-js/array/last-index-of.js | 1 - .../babel-runtime/core-js/array/map.js | 1 - .../babel-runtime/core-js/array/of.js | 1 - .../babel-runtime/core-js/array/pop.js | 1 - .../babel-runtime/core-js/array/push.js | 1 - .../core-js/array/reduce-right.js | 1 - .../babel-runtime/core-js/array/reduce.js | 1 - .../babel-runtime/core-js/array/reverse.js | 1 - .../babel-runtime/core-js/array/shift.js | 1 - .../babel-runtime/core-js/array/slice.js | 1 - .../babel-runtime/core-js/array/some.js | 1 - .../babel-runtime/core-js/array/sort.js | 1 - .../babel-runtime/core-js/array/splice.js | 1 - .../babel-runtime/core-js/array/unshift.js | 1 - .../babel-runtime/core-js/array/values.js | 1 - .../babel-runtime/core-js/asap.js | 1 - .../babel-runtime/core-js/clear-immediate.js | 1 - .../babel-runtime/core-js/error/is-error.js | 1 - .../babel-runtime/core-js/get-iterator.js | 1 - .../babel-runtime/core-js/is-iterable.js | 1 - .../babel-runtime/core-js/json/stringify.js | 1 - .../node_modules/babel-runtime/core-js/map.js | 1 - .../babel-runtime/core-js/math/acosh.js | 1 - .../babel-runtime/core-js/math/asinh.js | 1 - .../babel-runtime/core-js/math/atanh.js | 1 - .../babel-runtime/core-js/math/cbrt.js | 1 - .../babel-runtime/core-js/math/clz32.js | 1 - .../babel-runtime/core-js/math/cosh.js | 1 - .../babel-runtime/core-js/math/expm1.js | 1 - .../babel-runtime/core-js/math/fround.js | 1 - .../babel-runtime/core-js/math/hypot.js | 1 - .../babel-runtime/core-js/math/iaddh.js | 1 - .../babel-runtime/core-js/math/imul.js | 1 - .../babel-runtime/core-js/math/imulh.js | 1 - .../babel-runtime/core-js/math/isubh.js | 1 - .../babel-runtime/core-js/math/log10.js | 1 - .../babel-runtime/core-js/math/log1p.js | 1 - .../babel-runtime/core-js/math/log2.js | 1 - .../babel-runtime/core-js/math/sign.js | 1 - .../babel-runtime/core-js/math/sinh.js | 1 - .../babel-runtime/core-js/math/tanh.js | 1 - .../babel-runtime/core-js/math/trunc.js | 1 - .../babel-runtime/core-js/math/umulh.js | 1 - .../babel-runtime/core-js/number/epsilon.js | 1 - .../babel-runtime/core-js/number/is-finite.js | 1 - .../core-js/number/is-integer.js | 1 - .../babel-runtime/core-js/number/is-nan.js | 1 - .../core-js/number/is-safe-integer.js | 1 - .../core-js/number/max-safe-integer.js | 1 - .../core-js/number/min-safe-integer.js | 1 - .../core-js/number/parse-float.js | 1 - .../babel-runtime/core-js/number/parse-int.js | 1 - .../babel-runtime/core-js/object/assign.js | 1 - .../babel-runtime/core-js/object/create.js | 1 - .../core-js/object/define-properties.js | 1 - .../core-js/object/define-property.js | 1 - .../babel-runtime/core-js/object/entries.js | 1 - .../babel-runtime/core-js/object/freeze.js | 1 - .../object/get-own-property-descriptor.js | 1 - .../object/get-own-property-descriptors.js | 1 - .../core-js/object/get-own-property-names.js | 1 - .../object/get-own-property-symbols.js | 1 - .../core-js/object/get-prototype-of.js | 1 - .../core-js/object/is-extensible.js | 1 - .../babel-runtime/core-js/object/is-frozen.js | 1 - .../babel-runtime/core-js/object/is-sealed.js | 1 - .../babel-runtime/core-js/object/is.js | 1 - .../babel-runtime/core-js/object/keys.js | 1 - .../core-js/object/prevent-extensions.js | 1 - .../babel-runtime/core-js/object/seal.js | 1 - .../core-js/object/set-prototype-of.js | 1 - .../babel-runtime/core-js/object/values.js | 1 - .../babel-runtime/core-js/observable.js | 1 - .../babel-runtime/core-js/promise.js | 1 - .../babel-runtime/core-js/reflect/apply.js | 1 - .../core-js/reflect/construct.js | 1 - .../core-js/reflect/define-metadata.js | 1 - .../core-js/reflect/define-property.js | 1 - .../core-js/reflect/delete-metadata.js | 1 - .../core-js/reflect/delete-property.js | 1 - .../core-js/reflect/enumerate.js | 1 - .../core-js/reflect/get-metadata-keys.js | 1 - .../core-js/reflect/get-metadata.js | 1 - .../core-js/reflect/get-own-metadata-keys.js | 1 - .../core-js/reflect/get-own-metadata.js | 1 - .../reflect/get-own-property-descriptor.js | 1 - .../core-js/reflect/get-prototype-of.js | 1 - .../babel-runtime/core-js/reflect/get.js | 1 - .../core-js/reflect/has-metadata.js | 1 - .../core-js/reflect/has-own-metadata.js | 1 - .../babel-runtime/core-js/reflect/has.js | 1 - .../core-js/reflect/is-extensible.js | 1 - .../babel-runtime/core-js/reflect/metadata.js | 1 - .../babel-runtime/core-js/reflect/own-keys.js | 1 - .../core-js/reflect/prevent-extensions.js | 1 - .../core-js/reflect/set-prototype-of.js | 1 - .../babel-runtime/core-js/reflect/set.js | 1 - .../babel-runtime/core-js/regexp/escape.js | 1 - .../babel-runtime/core-js/set-immediate.js | 1 - .../node_modules/babel-runtime/core-js/set.js | 1 - .../babel-runtime/core-js/string/at.js | 1 - .../core-js/string/code-point-at.js | 1 - .../babel-runtime/core-js/string/ends-with.js | 1 - .../core-js/string/from-code-point.js | 1 - .../babel-runtime/core-js/string/includes.js | 1 - .../babel-runtime/core-js/string/match-all.js | 1 - .../babel-runtime/core-js/string/pad-end.js | 1 - .../babel-runtime/core-js/string/pad-left.js | 1 - .../babel-runtime/core-js/string/pad-right.js | 1 - .../babel-runtime/core-js/string/pad-start.js | 1 - .../babel-runtime/core-js/string/raw.js | 1 - .../babel-runtime/core-js/string/repeat.js | 1 - .../core-js/string/starts-with.js | 1 - .../babel-runtime/core-js/string/trim-end.js | 1 - .../babel-runtime/core-js/string/trim-left.js | 1 - .../core-js/string/trim-right.js | 1 - .../core-js/string/trim-start.js | 1 - .../babel-runtime/core-js/string/trim.js | 1 - .../babel-runtime/core-js/symbol.js | 1 - .../core-js/symbol/async-iterator.js | 1 - .../babel-runtime/core-js/symbol/for.js | 1 - .../core-js/symbol/has-instance.js | 1 - .../core-js/symbol/is-concat-spreadable.js | 1 - .../babel-runtime/core-js/symbol/iterator.js | 1 - .../babel-runtime/core-js/symbol/key-for.js | 1 - .../babel-runtime/core-js/symbol/match.js | 1 - .../core-js/symbol/observable.js | 1 - .../babel-runtime/core-js/symbol/replace.js | 1 - .../babel-runtime/core-js/symbol/search.js | 1 - .../babel-runtime/core-js/symbol/species.js | 1 - .../babel-runtime/core-js/symbol/split.js | 1 - .../core-js/symbol/to-primitive.js | 1 - .../core-js/symbol/to-string-tag.js | 1 - .../core-js/symbol/unscopables.js | 1 - .../babel-runtime/core-js/system/global.js | 1 - .../babel-runtime/core-js/weak-map.js | 1 - .../babel-runtime/core-js/weak-set.js | 1 - .../helpers/_async-generator-delegate.js | 1 - .../babel-runtime/helpers/_async-generator.js | 1 - .../babel-runtime/helpers/_async-iterator.js | 1 - .../helpers/_async-to-generator.js | 1 - .../helpers/_class-call-check.js | 1 - .../babel-runtime/helpers/_create-class.js | 1 - .../babel-runtime/helpers/_defaults.js | 1 - .../helpers/_define-enumerable-properties.js | 1 - .../babel-runtime/helpers/_define-property.js | 1 - .../babel-runtime/helpers/_extends.js | 1 - .../babel-runtime/helpers/_get.js | 1 - .../babel-runtime/helpers/_inherits.js | 1 - .../babel-runtime/helpers/_instanceof.js | 1 - .../helpers/_interop-require-default.js | 1 - .../helpers/_interop-require-wildcard.js | 1 - .../babel-runtime/helpers/_jsx.js | 1 - .../babel-runtime/helpers/_new-arrow-check.js | 1 - .../helpers/_object-destructuring-empty.js | 1 - .../helpers/_object-without-properties.js | 1 - .../helpers/_possible-constructor-return.js | 1 - .../babel-runtime/helpers/_self-global.js | 1 - .../babel-runtime/helpers/_set.js | 1 - .../helpers/_sliced-to-array-loose.js | 1 - .../babel-runtime/helpers/_sliced-to-array.js | 1 - .../helpers/_tagged-template-literal-loose.js | 1 - .../helpers/_tagged-template-literal.js | 1 - .../babel-runtime/helpers/_temporal-ref.js | 1 - .../helpers/_temporal-undefined.js | 1 - .../babel-runtime/helpers/_to-array.js | 1 - .../helpers/_to-consumable-array.js | 1 - .../babel-runtime/helpers/_typeof.js | 1 - .../helpers/async-generator-delegate.js | 1 - .../babel-runtime/helpers/async-generator.js | 1 - .../babel-runtime/helpers/async-iterator.js | 1 - .../helpers/async-to-generator.js | 1 - .../babel-runtime/helpers/asyncGenerator.js | 130 - .../helpers/asyncGeneratorDelegate.js | 69 - .../babel-runtime/helpers/asyncIterator.js | 36 - .../babel-runtime/helpers/asyncToGenerator.js | 38 - .../babel-runtime/helpers/class-call-check.js | 1 - .../babel-runtime/helpers/classCallCheck.js | 9 - .../babel-runtime/helpers/create-class.js | 1 - .../babel-runtime/helpers/createClass.js | 27 - .../babel-runtime/helpers/defaults.js | 32 - .../helpers/define-enumerable-properties.js | 1 - .../babel-runtime/helpers/define-property.js | 1 - .../helpers/defineEnumerableProperties.js | 20 - .../babel-runtime/helpers/defineProperty.js | 24 - .../babel-runtime/helpers/extends.js | 23 - .../node_modules/babel-runtime/helpers/get.js | 38 - .../babel-runtime/helpers/inherits.js | 33 - .../babel-runtime/helpers/instanceof.js | 21 - .../helpers/interop-require-default.js | 1 - .../helpers/interop-require-wildcard.js | 1 - .../helpers/interopRequireDefault.js | 9 - .../helpers/interopRequireWildcard.js | 20 - .../node_modules/babel-runtime/helpers/jsx.js | 56 - .../babel-runtime/helpers/new-arrow-check.js | 1 - .../babel-runtime/helpers/newArrowCheck.js | 9 - .../helpers/object-destructuring-empty.js | 1 - .../helpers/object-without-properties.js | 1 - .../helpers/objectDestructuringEmpty.js | 7 - .../helpers/objectWithoutProperties.js | 15 - .../helpers/possible-constructor-return.js | 1 - .../helpers/possibleConstructorReturn.js | 17 - .../babel-runtime/helpers/self-global.js | 1 - .../babel-runtime/helpers/selfGlobal.js | 4 - .../node_modules/babel-runtime/helpers/set.js | 35 - .../helpers/sliced-to-array-loose.js | 1 - .../babel-runtime/helpers/sliced-to-array.js | 1 - .../babel-runtime/helpers/slicedToArray.js | 51 - .../helpers/slicedToArrayLoose.js | 31 - .../helpers/tagged-template-literal-loose.js | 1 - .../helpers/tagged-template-literal.js | 1 - .../helpers/taggedTemplateLiteral.js | 21 - .../helpers/taggedTemplateLiteralLoose.js | 8 - .../babel-runtime/helpers/temporal-ref.js | 1 - .../helpers/temporal-undefined.js | 1 - .../babel-runtime/helpers/temporalRef.js | 11 - .../helpers/temporalUndefined.js | 4 - .../babel-runtime/helpers/to-array.js | 1 - .../helpers/to-consumable-array.js | 1 - .../babel-runtime/helpers/toArray.js | 13 - .../helpers/toConsumableArray.js | 21 - .../babel-runtime/helpers/typeof.js | 21 - .../node_modules/babel-runtime/package.json | 97 - .../babel-runtime/regenerator/index.js | 1 - .../node_modules/babel-template/.npmignore | 3 - .../node_modules/babel-template/README.md | 64 - .../node_modules/babel-template/lib/index.js | 143 - .../node_modules/babel-template/package.json | 98 - .../node_modules/babel-traverse/.npmignore | 3 - .../node_modules/babel-traverse/README.md | 1 - .../node_modules/babel-traverse/lib/cache.js | 30 - .../babel-traverse/lib/context.js | 200 - .../node_modules/babel-traverse/lib/hub.js | 19 - .../node_modules/babel-traverse/lib/index.js | 165 - .../babel-traverse/lib/path/ancestry.js | 238 - .../babel-traverse/lib/path/comments.js | 45 - .../babel-traverse/lib/path/context.js | 281 - .../babel-traverse/lib/path/conversion.js | 47 - .../babel-traverse/lib/path/evaluation.js | 394 - .../babel-traverse/lib/path/family.js | 165 - .../babel-traverse/lib/path/index.js | 242 - .../lib/path/inference/index.js | 142 - .../lib/path/inference/inferer-reference.js | 187 - .../lib/path/inference/inferers.js | 195 - .../babel-traverse/lib/path/introspection.js | 400 - .../babel-traverse/lib/path/lib/hoister.js | 180 - .../lib/path/lib/removal-hooks.js | 48 - .../lib/path/lib/virtual-types.js | 139 - .../babel-traverse/lib/path/modification.js | 264 - .../babel-traverse/lib/path/removal.js | 72 - .../babel-traverse/lib/path/replacement.js | 262 - .../babel-traverse/lib/scope/binding.js | 82 - .../babel-traverse/lib/scope/index.js | 1099 - .../babel-traverse/lib/scope/lib/renamer.js | 145 - .../babel-traverse/lib/visitors.js | 341 - .../node_modules/babel-traverse/package.json | 102 - .../node_modules/babel-types/.npmignore | 3 - .../node_modules/babel-types/README.md | 1243 -- .../node_modules/babel-types/lib/constants.js | 38 - .../babel-types/lib/converters.js | 346 - .../babel-types/lib/definitions/core.js | 701 - .../babel-types/lib/definitions/es2015.js | 351 - .../lib/definitions/experimental.js | 99 - .../babel-types/lib/definitions/flow.js | 261 - .../babel-types/lib/definitions/index.js | 249 - .../babel-types/lib/definitions/init.js | 15 - .../babel-types/lib/definitions/jsx.js | 137 - .../babel-types/lib/definitions/misc.js | 21 - .../node_modules/babel-types/lib/flow.js | 108 - .../node_modules/babel-types/lib/index.js | 839 - .../node_modules/babel-types/lib/react.js | 80 - .../babel-types/lib/retrievers.js | 115 - .../babel-types/lib/validators.js | 263 - .../node_modules/babel-types/package.json | 101 - .../node_modules/babylon/CHANGELOG.md | 693 - .../node_modules/babylon/LICENSE | 19 - .../node_modules/babylon/README.md | 122 - .../node_modules/babylon/bin/babylon.js | 16 - .../babylon/bin/generate-identifier-regex.js | 62 - .../node_modules/babylon/lib/index.js | 6470 ------ .../node_modules/babylon/package.json | 278 - .../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 | 102 - .../node_modules/bcrypt-pbkdf/README.md | 39 - .../node_modules/bcrypt-pbkdf/index.js | 559 - .../node_modules/bcrypt-pbkdf/package.json | 64 - .../node_modules/boom/.npmignore | 18 - .../node_modules/boom/.travis.yml | 8 - .../node_modules/boom/CONTRIBUTING.md | 1 - .../node_modules/boom/LICENSE | 28 - .../node_modules/boom/README.md | 652 - .../node_modules/boom/images/boom.png | Bin 29479 -> 0 bytes .../node_modules/boom/lib/index.js | 318 - .../node_modules/boom/package.json | 90 - .../node_modules/boom/test/index.js | 654 - .../node_modules/brace-expansion/README.md | 122 - .../node_modules/brace-expansion/index.js | 201 - .../node_modules/brace-expansion/package.json | 104 - .../node_modules/braces/LICENSE | 21 - .../node_modules/braces/README.md | 248 - .../node_modules/braces/index.js | 399 - .../node_modules/braces/package.json | 149 - .../node_modules/browser-resolve/LICENSE | 21 - .../node_modules/browser-resolve/empty.js | 0 .../node_modules/browser-resolve/index.js | 343 - .../node_modules/browser-resolve/package.json | 92 - .../node_modules/bser/README.md | 81 - .../node_modules/bser/index.js | 578 - .../node_modules/bser/package.json | 85 - .../node_modules/bser/test/bser.js | 74 - .../builtin-modules/builtin-modules.json | 35 - .../node_modules/builtin-modules/index.js | 10 - .../node_modules/builtin-modules/license | 21 - .../node_modules/builtin-modules/package.json | 96 - .../node_modules/builtin-modules/readme.md | 41 - .../node_modules/builtin-modules/static.js | 2 - .../node_modules/callsites/index.js | 8 - .../node_modules/callsites/license | 21 - .../node_modules/callsites/package.json | 100 - .../node_modules/callsites/readme.md | 46 - .../node_modules/camelcase/index.js | 27 - .../node_modules/camelcase/license | 21 - .../node_modules/camelcase/package.json | 94 - .../node_modules/camelcase/readme.md | 56 - .../node_modules/cardinal/.npmignore | 1 - .../node_modules/cardinal/.travis.yml | 5 - .../node_modules/cardinal/LICENSE | 23 - .../node_modules/cardinal/README.md | 127 - .../node_modules/cardinal/bin/cdl.js | 74 - .../node_modules/cardinal/cardinal.js | 5 - .../cardinal/examples/.cardinalrc | 3 - .../node_modules/cardinal/examples/README.md | 7 - .../cardinal/examples/highlight-json.js | 10 - .../highlight-self-hide-semicolons.js | 22 - .../cardinal/examples/highlight-self.js | 16 - .../cardinal/examples/highlight-string.js | 14 - .../node_modules/cardinal/lib/highlight.js | 76 - .../cardinal/lib/highlightFile.js | 23 - .../cardinal/lib/highlightFileSync.js | 8 - .../node_modules/cardinal/package.json | 98 - .../node_modules/cardinal/settings.js | 51 - .../test/cardinal-highlight-block-comment.js | 25 - .../test/cardinal-highlight-diff-spike.js | 95 - .../test/cardinal-highlight-file-async.js | 50 - .../test/cardinal-highlight-file-sync.js | 45 - .../test/cardinal-highlight-git-diff.js | 3 - .../cardinal-highlight-json-file-async.js | 22 - .../test/cardinal-highlight-json-file-sync.js | 20 - .../cardinal/test/cardinal-highlight-json.js | 39 - .../test/cardinal-highlight-string.js | 68 - .../cardinal/test/cardinal-smoke.js | 44 - .../cardinal/test/fixtures/block-comment.js | 14 - .../cardinal/test/fixtures/custom.js | 144 - .../cardinal/test/fixtures/foo-with-errors.js | 3 - .../cardinal/test/fixtures/foo.js | 3 - .../cardinal/test/fixtures/git-diff.txt | 78 - .../cardinal/test/fixtures/json.json | 1 - .../cardinal/test/fixtures/svn-diff.txt | 23 - .../node_modules/cardinal/test/settings.js | 77 - .../node_modules/cardinal/test/themes.js | 22 - .../node_modules/cardinal/themes/README.md | 31 - .../node_modules/cardinal/themes/default.js | 163 - .../node_modules/cardinal/themes/empty.js | 159 - .../cardinal/themes/hide-semicolons.js | 165 - .../node_modules/cardinal/themes/jq.js | 167 - .../cardinal/themes/tomorrow-night.js | 177 - .../node_modules/cardinal/utl.js | 11 - .../node_modules/caseless/LICENSE | 28 - .../node_modules/caseless/README.md | 45 - .../node_modules/caseless/index.js | 66 - .../node_modules/caseless/package.json | 88 - .../node_modules/caseless/test.js | 40 - .../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 | 113 - .../node_modules/center-align/utils.js | 40 - .../node_modules/chalk/index.js | 116 - .../node_modules/chalk/license | 21 - .../node_modules/chalk/package.json | 132 - .../node_modules/chalk/readme.md | 213 - .../node_modules/ci-info/.travis.yml | 7 - .../node_modules/ci-info/LICENSE | 21 - .../node_modules/ci-info/README.md | 98 - .../node_modules/ci-info/index.js | 47 - .../node_modules/ci-info/package.json | 91 - .../node_modules/ci-info/test.js | 81 - .../node_modules/cli-table/README.md | 177 - .../node_modules/cli-table/lib/index.js | 298 - .../node_modules/cli-table/lib/utils.js | 84 - .../node_modules/cli-table/package.json | 93 - .../node_modules/cli-usage/.npmignore | 2 - .../node_modules/cli-usage/README.md | 57 - .../node_modules/cli-usage/example/custom.js | 5 - .../node_modules/cli-usage/example/default.js | 3 - .../node_modules/cli-usage/example/usage.md | 6 - .../node_modules/cli-usage/index.js | 59 - .../node_modules/cli-usage/package.json | 79 - .../node_modules/cli-usage/tests.js | 24 - .../node_modules/cliui/.coveralls.yml | 1 - .../node_modules/cliui/.npmignore | 2 - .../node_modules/cliui/.travis.yml | 7 - .../node_modules/cliui/LICENSE.txt | 14 - .../node_modules/cliui/README.md | 104 - .../node_modules/cliui/index.js | 273 - .../cliui/node_modules/wordwrap/.npmignore | 1 - .../node_modules/wordwrap/README.markdown | 70 - .../node_modules/wordwrap/example/center.js | 10 - .../node_modules/wordwrap/example/meat.js | 3 - .../cliui/node_modules/wordwrap/index.js | 76 - .../cliui/node_modules/wordwrap/package.json | 86 - .../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 | 114 - .../node_modules/cliui/test/cliui.js | 349 - .../node_modules/clone/.npmignore | 1 - .../node_modules/clone/.travis.yml | 3 - .../node_modules/clone/LICENSE | 18 - .../node_modules/clone/README.md | 126 - .../node_modules/clone/clone.js | 160 - .../node_modules/clone/package.json | 158 - .../node_modules/clone/test-apart-ctx.html | 22 - .../node_modules/clone/test.html | 148 - .../node_modules/clone/test.js | 372 - .../node_modules/code-point-at/index.js | 32 - .../node_modules/code-point-at/license | 21 - .../node_modules/code-point-at/package.json | 98 - .../node_modules/code-point-at/readme.md | 32 - .../node_modules/colors/.travis.yml | 6 - .../node_modules/colors/MIT-LICENSE.txt | 23 - .../node_modules/colors/ReadMe.md | 167 - .../colors/examples/normal-usage.js | 74 - .../colors/examples/safe-string.js | 76 - .../node_modules/colors/lib/colors.js | 176 - .../node_modules/colors/lib/custom/trap.js | 45 - .../node_modules/colors/lib/custom/zalgo.js | 104 - .../colors/lib/extendStringPrototype.js | 118 - .../node_modules/colors/lib/index.js | 12 - .../node_modules/colors/lib/maps/america.js | 12 - .../node_modules/colors/lib/maps/rainbow.js | 13 - .../node_modules/colors/lib/maps/random.js | 8 - .../node_modules/colors/lib/maps/zebra.js | 5 - .../node_modules/colors/lib/styles.js | 77 - .../colors/lib/system/supports-colors.js | 61 - .../node_modules/colors/package.json | 79 - .../node_modules/colors/safe.js | 9 - .../colors/screenshots/colors.png | Bin 79787 -> 0 bytes .../node_modules/colors/tests/basic-test.js | 50 - .../node_modules/colors/tests/safe-test.js | 45 - .../colors/themes/generic-logging.js | 12 - .../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 | 93 - .../node_modules/commander/History.md | 261 - .../node_modules/commander/LICENSE | 22 - .../node_modules/commander/Readme.md | 351 - .../node_modules/commander/index.js | 1110 - .../node_modules/commander/package.json | 96 - .../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 | 109 - .../node_modules/concat-map/test/map.js | 39 - .../content-type-parser/LICENSE.txt | 19 - .../content-type-parser/README.md | 60 - .../lib/content-type-parser.js | 103 - .../content-type-parser/package.json | 88 - .../convert-source-map/.npmignore | 16 - .../convert-source-map/.travis.yml | 5 - .../node_modules/convert-source-map/LICENSE | 23 - .../node_modules/convert-source-map/README.md | 129 - .../example/comment-to-json.js | 15 - .../node_modules/convert-source-map/index.js | 161 - .../convert-source-map/package.json | 91 - .../convert-source-map/test/comment-regex.js | 138 - .../test/convert-source-map.js | 213 - .../map-file-comment-double-slash.css | 14 - .../test/fixtures/map-file-comment-inline.css | 14 - .../test/fixtures/map-file-comment.css | 14 - .../test/fixtures/map-file-comment.css.map | 6 - .../test/map-file-comment.js | 70 - .../node_modules/core-js/CHANGELOG.md | 561 - .../node_modules/core-js/Gruntfile.js | 2 - .../node_modules/core-js/LICENSE | 19 - .../node_modules/core-js/bower.json | 47 - .../node_modules/core-js/build/Gruntfile.ls | 84 - .../node_modules/core-js/build/build.ls | 62 - .../node_modules/core-js/build/config.js | 259 - .../node_modules/core-js/build/index.js | 104 - .../node_modules/core-js/client/core.js | 7613 ------- .../node_modules/core-js/client/core.min.js | 10 - .../core-js/client/core.min.js.map | 1 - .../node_modules/core-js/client/library.js | 7136 ------- .../core-js/client/library.min.js | 10 - .../core-js/client/library.min.js.map | 1 - .../node_modules/core-js/client/shim.js | 7258 ------- .../node_modules/core-js/client/shim.min.js | 10 - .../core-js/client/shim.min.js.map | 1 - .../node_modules/core-js/core/_.js | 2 - .../node_modules/core-js/core/delay.js | 2 - .../node_modules/core-js/core/dict.js | 2 - .../node_modules/core-js/core/function.js | 2 - .../node_modules/core-js/core/index.js | 15 - .../node_modules/core-js/core/number.js | 2 - .../node_modules/core-js/core/object.js | 5 - .../node_modules/core-js/core/regexp.js | 2 - .../node_modules/core-js/core/string.js | 3 - .../node_modules/core-js/es5/index.js | 37 - .../node_modules/core-js/es6/array.js | 23 - .../node_modules/core-js/es6/date.js | 6 - .../node_modules/core-js/es6/function.js | 4 - .../node_modules/core-js/es6/index.js | 138 - .../node_modules/core-js/es6/map.js | 5 - .../node_modules/core-js/es6/math.js | 18 - .../node_modules/core-js/es6/number.js | 13 - .../node_modules/core-js/es6/object.js | 20 - .../node_modules/core-js/es6/parse-float.js | 2 - .../node_modules/core-js/es6/parse-int.js | 2 - .../node_modules/core-js/es6/promise.js | 5 - .../node_modules/core-js/es6/reflect.js | 15 - .../node_modules/core-js/es6/regexp.js | 8 - .../node_modules/core-js/es6/set.js | 5 - .../node_modules/core-js/es6/string.js | 27 - .../node_modules/core-js/es6/symbol.js | 3 - .../node_modules/core-js/es6/typed.js | 13 - .../node_modules/core-js/es6/weak-map.js | 4 - .../node_modules/core-js/es6/weak-set.js | 4 - .../node_modules/core-js/es7/array.js | 2 - .../node_modules/core-js/es7/asap.js | 2 - .../node_modules/core-js/es7/error.js | 2 - .../node_modules/core-js/es7/index.js | 36 - .../node_modules/core-js/es7/map.js | 2 - .../node_modules/core-js/es7/math.js | 5 - .../node_modules/core-js/es7/object.js | 8 - .../node_modules/core-js/es7/observable.js | 7 - .../node_modules/core-js/es7/reflect.js | 10 - .../node_modules/core-js/es7/set.js | 2 - .../node_modules/core-js/es7/string.js | 7 - .../node_modules/core-js/es7/symbol.js | 3 - .../node_modules/core-js/es7/system.js | 2 - .../node_modules/core-js/fn/_.js | 2 - .../node_modules/core-js/fn/array/concat.js | 4 - .../core-js/fn/array/copy-within.js | 2 - .../node_modules/core-js/fn/array/entries.js | 2 - .../node_modules/core-js/fn/array/every.js | 2 - .../node_modules/core-js/fn/array/fill.js | 2 - .../node_modules/core-js/fn/array/filter.js | 2 - .../core-js/fn/array/find-index.js | 2 - .../node_modules/core-js/fn/array/find.js | 2 - .../node_modules/core-js/fn/array/for-each.js | 2 - .../node_modules/core-js/fn/array/from.js | 3 - .../node_modules/core-js/fn/array/includes.js | 2 - .../node_modules/core-js/fn/array/index-of.js | 2 - .../node_modules/core-js/fn/array/index.js | 24 - .../node_modules/core-js/fn/array/is-array.js | 2 - .../node_modules/core-js/fn/array/iterator.js | 2 - .../node_modules/core-js/fn/array/join.js | 2 - .../node_modules/core-js/fn/array/keys.js | 2 - .../core-js/fn/array/last-index-of.js | 2 - .../node_modules/core-js/fn/array/map.js | 2 - .../node_modules/core-js/fn/array/of.js | 2 - .../node_modules/core-js/fn/array/pop.js | 4 - .../node_modules/core-js/fn/array/push.js | 4 - .../core-js/fn/array/reduce-right.js | 2 - .../node_modules/core-js/fn/array/reduce.js | 2 - .../node_modules/core-js/fn/array/reverse.js | 4 - .../node_modules/core-js/fn/array/shift.js | 4 - .../node_modules/core-js/fn/array/slice.js | 2 - .../node_modules/core-js/fn/array/some.js | 2 - .../node_modules/core-js/fn/array/sort.js | 2 - .../node_modules/core-js/fn/array/splice.js | 4 - .../node_modules/core-js/fn/array/unshift.js | 4 - .../node_modules/core-js/fn/array/values.js | 2 - .../core-js/fn/array/virtual/copy-within.js | 2 - .../core-js/fn/array/virtual/entries.js | 2 - .../core-js/fn/array/virtual/every.js | 2 - .../core-js/fn/array/virtual/fill.js | 2 - .../core-js/fn/array/virtual/filter.js | 2 - .../core-js/fn/array/virtual/find-index.js | 2 - .../core-js/fn/array/virtual/find.js | 2 - .../core-js/fn/array/virtual/for-each.js | 2 - .../core-js/fn/array/virtual/includes.js | 2 - .../core-js/fn/array/virtual/index-of.js | 2 - .../core-js/fn/array/virtual/index.js | 20 - .../core-js/fn/array/virtual/iterator.js | 2 - .../core-js/fn/array/virtual/join.js | 2 - .../core-js/fn/array/virtual/keys.js | 2 - .../core-js/fn/array/virtual/last-index-of.js | 2 - .../core-js/fn/array/virtual/map.js | 2 - .../core-js/fn/array/virtual/reduce-right.js | 2 - .../core-js/fn/array/virtual/reduce.js | 2 - .../core-js/fn/array/virtual/slice.js | 2 - .../core-js/fn/array/virtual/some.js | 2 - .../core-js/fn/array/virtual/sort.js | 2 - .../core-js/fn/array/virtual/values.js | 2 - .../node_modules/core-js/fn/asap.js | 2 - .../core-js/fn/clear-immediate.js | 2 - .../node_modules/core-js/fn/date/index.js | 6 - .../node_modules/core-js/fn/date/now.js | 2 - .../core-js/fn/date/to-iso-string.js | 3 - .../node_modules/core-js/fn/date/to-json.js | 2 - .../core-js/fn/date/to-primitive.js | 5 - .../node_modules/core-js/fn/date/to-string.js | 5 - .../node_modules/core-js/fn/delay.js | 2 - .../node_modules/core-js/fn/dict.js | 2 - .../core-js/fn/dom-collections/index.js | 8 - .../core-js/fn/dom-collections/iterator.js | 2 - .../node_modules/core-js/fn/error/index.js | 2 - .../node_modules/core-js/fn/error/is-error.js | 2 - .../node_modules/core-js/fn/function/bind.js | 2 - .../core-js/fn/function/has-instance.js | 2 - .../node_modules/core-js/fn/function/index.js | 5 - .../node_modules/core-js/fn/function/name.js | 1 - .../node_modules/core-js/fn/function/part.js | 2 - .../core-js/fn/function/virtual/bind.js | 2 - .../core-js/fn/function/virtual/index.js | 3 - .../core-js/fn/function/virtual/part.js | 2 - .../core-js/fn/get-iterator-method.js | 3 - .../node_modules/core-js/fn/get-iterator.js | 3 - .../node_modules/core-js/fn/is-iterable.js | 3 - .../node_modules/core-js/fn/json/index.js | 2 - .../node_modules/core-js/fn/json/stringify.js | 5 - .../node_modules/core-js/fn/map.js | 6 - .../node_modules/core-js/fn/math/acosh.js | 2 - .../node_modules/core-js/fn/math/asinh.js | 2 - .../node_modules/core-js/fn/math/atanh.js | 2 - .../node_modules/core-js/fn/math/cbrt.js | 2 - .../node_modules/core-js/fn/math/clz32.js | 2 - .../node_modules/core-js/fn/math/cosh.js | 2 - .../node_modules/core-js/fn/math/expm1.js | 2 - .../node_modules/core-js/fn/math/fround.js | 2 - .../node_modules/core-js/fn/math/hypot.js | 2 - .../node_modules/core-js/fn/math/iaddh.js | 2 - .../node_modules/core-js/fn/math/imul.js | 2 - .../node_modules/core-js/fn/math/imulh.js | 2 - .../node_modules/core-js/fn/math/index.js | 22 - .../node_modules/core-js/fn/math/isubh.js | 2 - .../node_modules/core-js/fn/math/log10.js | 2 - .../node_modules/core-js/fn/math/log1p.js | 2 - .../node_modules/core-js/fn/math/log2.js | 2 - .../node_modules/core-js/fn/math/sign.js | 2 - .../node_modules/core-js/fn/math/sinh.js | 2 - .../node_modules/core-js/fn/math/tanh.js | 2 - .../node_modules/core-js/fn/math/trunc.js | 2 - .../node_modules/core-js/fn/math/umulh.js | 2 - .../core-js/fn/number/constructor.js | 2 - .../node_modules/core-js/fn/number/epsilon.js | 2 - .../node_modules/core-js/fn/number/index.js | 14 - .../core-js/fn/number/is-finite.js | 2 - .../core-js/fn/number/is-integer.js | 2 - .../node_modules/core-js/fn/number/is-nan.js | 2 - .../core-js/fn/number/is-safe-integer.js | 2 - .../core-js/fn/number/iterator.js | 5 - .../core-js/fn/number/max-safe-integer.js | 2 - .../core-js/fn/number/min-safe-integer.js | 2 - .../core-js/fn/number/parse-float.js | 2 - .../core-js/fn/number/parse-int.js | 2 - .../core-js/fn/number/to-fixed.js | 2 - .../core-js/fn/number/to-precision.js | 2 - .../core-js/fn/number/virtual/index.js | 4 - .../core-js/fn/number/virtual/iterator.js | 2 - .../core-js/fn/number/virtual/to-fixed.js | 2 - .../core-js/fn/number/virtual/to-precision.js | 2 - .../node_modules/core-js/fn/object/assign.js | 2 - .../node_modules/core-js/fn/object/classof.js | 2 - .../node_modules/core-js/fn/object/create.js | 5 - .../core-js/fn/object/define-getter.js | 2 - .../core-js/fn/object/define-properties.js | 5 - .../core-js/fn/object/define-property.js | 5 - .../core-js/fn/object/define-setter.js | 2 - .../node_modules/core-js/fn/object/define.js | 2 - .../node_modules/core-js/fn/object/entries.js | 2 - .../node_modules/core-js/fn/object/freeze.js | 2 - .../fn/object/get-own-property-descriptor.js | 5 - .../fn/object/get-own-property-descriptors.js | 2 - .../fn/object/get-own-property-names.js | 5 - .../fn/object/get-own-property-symbols.js | 2 - .../core-js/fn/object/get-prototype-of.js | 2 - .../node_modules/core-js/fn/object/index.js | 30 - .../core-js/fn/object/is-extensible.js | 2 - .../core-js/fn/object/is-frozen.js | 2 - .../core-js/fn/object/is-object.js | 2 - .../core-js/fn/object/is-sealed.js | 2 - .../node_modules/core-js/fn/object/is.js | 2 - .../node_modules/core-js/fn/object/keys.js | 2 - .../core-js/fn/object/lookup-getter.js | 2 - .../core-js/fn/object/lookup-setter.js | 2 - .../node_modules/core-js/fn/object/make.js | 2 - .../core-js/fn/object/prevent-extensions.js | 2 - .../node_modules/core-js/fn/object/seal.js | 2 - .../core-js/fn/object/set-prototype-of.js | 2 - .../node_modules/core-js/fn/object/values.js | 2 - .../node_modules/core-js/fn/observable.js | 7 - .../node_modules/core-js/fn/parse-float.js | 2 - .../node_modules/core-js/fn/parse-int.js | 2 - .../node_modules/core-js/fn/promise.js | 5 - .../node_modules/core-js/fn/reflect/apply.js | 2 - .../core-js/fn/reflect/construct.js | 2 - .../core-js/fn/reflect/define-metadata.js | 2 - .../core-js/fn/reflect/define-property.js | 2 - .../core-js/fn/reflect/delete-metadata.js | 2 - .../core-js/fn/reflect/delete-property.js | 2 - .../core-js/fn/reflect/enumerate.js | 2 - .../core-js/fn/reflect/get-metadata-keys.js | 2 - .../core-js/fn/reflect/get-metadata.js | 2 - .../fn/reflect/get-own-metadata-keys.js | 2 - .../core-js/fn/reflect/get-own-metadata.js | 2 - .../fn/reflect/get-own-property-descriptor.js | 2 - .../core-js/fn/reflect/get-prototype-of.js | 2 - .../node_modules/core-js/fn/reflect/get.js | 2 - .../core-js/fn/reflect/has-metadata.js | 2 - .../core-js/fn/reflect/has-own-metadata.js | 2 - .../node_modules/core-js/fn/reflect/has.js | 2 - .../node_modules/core-js/fn/reflect/index.js | 24 - .../core-js/fn/reflect/is-extensible.js | 2 - .../core-js/fn/reflect/metadata.js | 2 - .../core-js/fn/reflect/own-keys.js | 2 - .../core-js/fn/reflect/prevent-extensions.js | 2 - .../core-js/fn/reflect/set-prototype-of.js | 2 - .../node_modules/core-js/fn/reflect/set.js | 2 - .../core-js/fn/regexp/constructor.js | 2 - .../node_modules/core-js/fn/regexp/escape.js | 2 - .../node_modules/core-js/fn/regexp/flags.js | 5 - .../node_modules/core-js/fn/regexp/index.js | 9 - .../node_modules/core-js/fn/regexp/match.js | 5 - .../node_modules/core-js/fn/regexp/replace.js | 5 - .../node_modules/core-js/fn/regexp/search.js | 5 - .../node_modules/core-js/fn/regexp/split.js | 5 - .../core-js/fn/regexp/to-string.js | 5 - .../node_modules/core-js/fn/set-immediate.js | 2 - .../node_modules/core-js/fn/set-interval.js | 2 - .../node_modules/core-js/fn/set-timeout.js | 2 - .../node_modules/core-js/fn/set.js | 6 - .../node_modules/core-js/fn/string/anchor.js | 2 - .../node_modules/core-js/fn/string/at.js | 2 - .../node_modules/core-js/fn/string/big.js | 2 - .../node_modules/core-js/fn/string/blink.js | 2 - .../node_modules/core-js/fn/string/bold.js | 2 - .../core-js/fn/string/code-point-at.js | 2 - .../core-js/fn/string/ends-with.js | 2 - .../core-js/fn/string/escape-html.js | 2 - .../node_modules/core-js/fn/string/fixed.js | 2 - .../core-js/fn/string/fontcolor.js | 2 - .../core-js/fn/string/fontsize.js | 2 - .../core-js/fn/string/from-code-point.js | 2 - .../core-js/fn/string/includes.js | 2 - .../node_modules/core-js/fn/string/index.js | 35 - .../node_modules/core-js/fn/string/italics.js | 2 - .../core-js/fn/string/iterator.js | 5 - .../node_modules/core-js/fn/string/link.js | 2 - .../core-js/fn/string/match-all.js | 2 - .../node_modules/core-js/fn/string/pad-end.js | 2 - .../core-js/fn/string/pad-start.js | 2 - .../node_modules/core-js/fn/string/raw.js | 2 - .../node_modules/core-js/fn/string/repeat.js | 2 - .../node_modules/core-js/fn/string/small.js | 2 - .../core-js/fn/string/starts-with.js | 2 - .../node_modules/core-js/fn/string/strike.js | 2 - .../node_modules/core-js/fn/string/sub.js | 2 - .../node_modules/core-js/fn/string/sup.js | 2 - .../core-js/fn/string/trim-end.js | 2 - .../core-js/fn/string/trim-left.js | 2 - .../core-js/fn/string/trim-right.js | 2 - .../core-js/fn/string/trim-start.js | 2 - .../node_modules/core-js/fn/string/trim.js | 2 - .../core-js/fn/string/unescape-html.js | 2 - .../core-js/fn/string/virtual/anchor.js | 2 - .../core-js/fn/string/virtual/at.js | 2 - .../core-js/fn/string/virtual/big.js | 2 - .../core-js/fn/string/virtual/blink.js | 2 - .../core-js/fn/string/virtual/bold.js | 2 - .../fn/string/virtual/code-point-at.js | 2 - .../core-js/fn/string/virtual/ends-with.js | 2 - .../core-js/fn/string/virtual/escape-html.js | 2 - .../core-js/fn/string/virtual/fixed.js | 2 - .../core-js/fn/string/virtual/fontcolor.js | 2 - .../core-js/fn/string/virtual/fontsize.js | 2 - .../core-js/fn/string/virtual/includes.js | 2 - .../core-js/fn/string/virtual/index.js | 33 - .../core-js/fn/string/virtual/italics.js | 2 - .../core-js/fn/string/virtual/iterator.js | 2 - .../core-js/fn/string/virtual/link.js | 2 - .../core-js/fn/string/virtual/match-all.js | 2 - .../core-js/fn/string/virtual/pad-end.js | 2 - .../core-js/fn/string/virtual/pad-start.js | 2 - .../core-js/fn/string/virtual/repeat.js | 2 - .../core-js/fn/string/virtual/small.js | 2 - .../core-js/fn/string/virtual/starts-with.js | 2 - .../core-js/fn/string/virtual/strike.js | 2 - .../core-js/fn/string/virtual/sub.js | 2 - .../core-js/fn/string/virtual/sup.js | 2 - .../core-js/fn/string/virtual/trim-end.js | 2 - .../core-js/fn/string/virtual/trim-left.js | 2 - .../core-js/fn/string/virtual/trim-right.js | 2 - .../core-js/fn/string/virtual/trim-start.js | 2 - .../core-js/fn/string/virtual/trim.js | 2 - .../fn/string/virtual/unescape-html.js | 2 - .../core-js/fn/symbol/async-iterator.js | 2 - .../node_modules/core-js/fn/symbol/for.js | 2 - .../core-js/fn/symbol/has-instance.js | 2 - .../node_modules/core-js/fn/symbol/index.js | 5 - .../core-js/fn/symbol/is-concat-spreadable.js | 1 - .../core-js/fn/symbol/iterator.js | 3 - .../node_modules/core-js/fn/symbol/key-for.js | 2 - .../node_modules/core-js/fn/symbol/match.js | 2 - .../core-js/fn/symbol/observable.js | 2 - .../node_modules/core-js/fn/symbol/replace.js | 2 - .../node_modules/core-js/fn/symbol/search.js | 2 - .../node_modules/core-js/fn/symbol/species.js | 1 - .../node_modules/core-js/fn/symbol/split.js | 2 - .../core-js/fn/symbol/to-primitive.js | 1 - .../core-js/fn/symbol/to-string-tag.js | 2 - .../core-js/fn/symbol/unscopables.js | 1 - .../node_modules/core-js/fn/system/global.js | 2 - .../node_modules/core-js/fn/system/index.js | 2 - .../core-js/fn/typed/array-buffer.js | 3 - .../core-js/fn/typed/data-view.js | 3 - .../core-js/fn/typed/float32-array.js | 2 - .../core-js/fn/typed/float64-array.js | 2 - .../node_modules/core-js/fn/typed/index.js | 13 - .../core-js/fn/typed/int16-array.js | 2 - .../core-js/fn/typed/int32-array.js | 2 - .../core-js/fn/typed/int8-array.js | 2 - .../core-js/fn/typed/uint16-array.js | 2 - .../core-js/fn/typed/uint32-array.js | 2 - .../core-js/fn/typed/uint8-array.js | 2 - .../core-js/fn/typed/uint8-clamped-array.js | 2 - .../node_modules/core-js/fn/weak-map.js | 4 - .../node_modules/core-js/fn/weak-set.js | 4 - .../node_modules/core-js/index.js | 16 - .../node_modules/core-js/library/core/_.js | 2 - .../core-js/library/core/delay.js | 2 - .../node_modules/core-js/library/core/dict.js | 2 - .../core-js/library/core/function.js | 2 - .../core-js/library/core/index.js | 15 - .../core-js/library/core/number.js | 2 - .../core-js/library/core/object.js | 5 - .../core-js/library/core/regexp.js | 2 - .../core-js/library/core/string.js | 3 - .../node_modules/core-js/library/es5/index.js | 37 - .../node_modules/core-js/library/es6/array.js | 23 - .../node_modules/core-js/library/es6/date.js | 6 - .../core-js/library/es6/function.js | 4 - .../node_modules/core-js/library/es6/index.js | 138 - .../node_modules/core-js/library/es6/map.js | 5 - .../node_modules/core-js/library/es6/math.js | 18 - .../core-js/library/es6/number.js | 13 - .../core-js/library/es6/object.js | 20 - .../core-js/library/es6/parse-float.js | 2 - .../core-js/library/es6/parse-int.js | 2 - .../core-js/library/es6/promise.js | 5 - .../core-js/library/es6/reflect.js | 15 - .../core-js/library/es6/regexp.js | 8 - .../node_modules/core-js/library/es6/set.js | 5 - .../core-js/library/es6/string.js | 27 - .../core-js/library/es6/symbol.js | 3 - .../node_modules/core-js/library/es6/typed.js | 13 - .../core-js/library/es6/weak-map.js | 4 - .../core-js/library/es6/weak-set.js | 4 - .../node_modules/core-js/library/es7/array.js | 2 - .../node_modules/core-js/library/es7/asap.js | 2 - .../node_modules/core-js/library/es7/error.js | 2 - .../node_modules/core-js/library/es7/index.js | 36 - .../node_modules/core-js/library/es7/map.js | 2 - .../node_modules/core-js/library/es7/math.js | 5 - .../core-js/library/es7/object.js | 8 - .../core-js/library/es7/observable.js | 7 - .../core-js/library/es7/reflect.js | 10 - .../node_modules/core-js/library/es7/set.js | 2 - .../core-js/library/es7/string.js | 7 - .../core-js/library/es7/symbol.js | 3 - .../core-js/library/es7/system.js | 2 - .../node_modules/core-js/library/fn/_.js | 2 - .../core-js/library/fn/array/concat.js | 4 - .../core-js/library/fn/array/copy-within.js | 2 - .../core-js/library/fn/array/entries.js | 2 - .../core-js/library/fn/array/every.js | 2 - .../core-js/library/fn/array/fill.js | 2 - .../core-js/library/fn/array/filter.js | 2 - .../core-js/library/fn/array/find-index.js | 2 - .../core-js/library/fn/array/find.js | 2 - .../core-js/library/fn/array/for-each.js | 2 - .../core-js/library/fn/array/from.js | 3 - .../core-js/library/fn/array/includes.js | 2 - .../core-js/library/fn/array/index-of.js | 2 - .../core-js/library/fn/array/index.js | 24 - .../core-js/library/fn/array/is-array.js | 2 - .../core-js/library/fn/array/iterator.js | 2 - .../core-js/library/fn/array/join.js | 2 - .../core-js/library/fn/array/keys.js | 2 - .../core-js/library/fn/array/last-index-of.js | 2 - .../core-js/library/fn/array/map.js | 2 - .../core-js/library/fn/array/of.js | 2 - .../core-js/library/fn/array/pop.js | 4 - .../core-js/library/fn/array/push.js | 4 - .../core-js/library/fn/array/reduce-right.js | 2 - .../core-js/library/fn/array/reduce.js | 2 - .../core-js/library/fn/array/reverse.js | 4 - .../core-js/library/fn/array/shift.js | 4 - .../core-js/library/fn/array/slice.js | 2 - .../core-js/library/fn/array/some.js | 2 - .../core-js/library/fn/array/sort.js | 2 - .../core-js/library/fn/array/splice.js | 4 - .../core-js/library/fn/array/unshift.js | 4 - .../core-js/library/fn/array/values.js | 2 - .../library/fn/array/virtual/copy-within.js | 2 - .../library/fn/array/virtual/entries.js | 2 - .../core-js/library/fn/array/virtual/every.js | 2 - .../core-js/library/fn/array/virtual/fill.js | 2 - .../library/fn/array/virtual/filter.js | 2 - .../library/fn/array/virtual/find-index.js | 2 - .../core-js/library/fn/array/virtual/find.js | 2 - .../library/fn/array/virtual/for-each.js | 2 - .../library/fn/array/virtual/includes.js | 2 - .../library/fn/array/virtual/index-of.js | 2 - .../core-js/library/fn/array/virtual/index.js | 20 - .../library/fn/array/virtual/iterator.js | 2 - .../core-js/library/fn/array/virtual/join.js | 2 - .../core-js/library/fn/array/virtual/keys.js | 2 - .../library/fn/array/virtual/last-index-of.js | 2 - .../core-js/library/fn/array/virtual/map.js | 2 - .../library/fn/array/virtual/reduce-right.js | 2 - .../library/fn/array/virtual/reduce.js | 2 - .../core-js/library/fn/array/virtual/slice.js | 2 - .../core-js/library/fn/array/virtual/some.js | 2 - .../core-js/library/fn/array/virtual/sort.js | 2 - .../library/fn/array/virtual/values.js | 2 - .../node_modules/core-js/library/fn/asap.js | 2 - .../core-js/library/fn/clear-immediate.js | 2 - .../core-js/library/fn/date/index.js | 6 - .../core-js/library/fn/date/now.js | 2 - .../core-js/library/fn/date/to-iso-string.js | 3 - .../core-js/library/fn/date/to-json.js | 2 - .../core-js/library/fn/date/to-primitive.js | 5 - .../core-js/library/fn/date/to-string.js | 5 - .../node_modules/core-js/library/fn/delay.js | 2 - .../node_modules/core-js/library/fn/dict.js | 2 - .../library/fn/dom-collections/index.js | 8 - .../library/fn/dom-collections/iterator.js | 2 - .../core-js/library/fn/error/index.js | 2 - .../core-js/library/fn/error/is-error.js | 2 - .../core-js/library/fn/function/bind.js | 2 - .../library/fn/function/has-instance.js | 2 - .../core-js/library/fn/function/index.js | 5 - .../core-js/library/fn/function/name.js | 1 - .../core-js/library/fn/function/part.js | 2 - .../library/fn/function/virtual/bind.js | 2 - .../library/fn/function/virtual/index.js | 3 - .../library/fn/function/virtual/part.js | 2 - .../core-js/library/fn/get-iterator-method.js | 3 - .../core-js/library/fn/get-iterator.js | 3 - .../core-js/library/fn/is-iterable.js | 3 - .../core-js/library/fn/json/index.js | 2 - .../core-js/library/fn/json/stringify.js | 5 - .../node_modules/core-js/library/fn/map.js | 6 - .../core-js/library/fn/math/acosh.js | 2 - .../core-js/library/fn/math/asinh.js | 2 - .../core-js/library/fn/math/atanh.js | 2 - .../core-js/library/fn/math/cbrt.js | 2 - .../core-js/library/fn/math/clz32.js | 2 - .../core-js/library/fn/math/cosh.js | 2 - .../core-js/library/fn/math/expm1.js | 2 - .../core-js/library/fn/math/fround.js | 2 - .../core-js/library/fn/math/hypot.js | 2 - .../core-js/library/fn/math/iaddh.js | 2 - .../core-js/library/fn/math/imul.js | 2 - .../core-js/library/fn/math/imulh.js | 2 - .../core-js/library/fn/math/index.js | 22 - .../core-js/library/fn/math/isubh.js | 2 - .../core-js/library/fn/math/log10.js | 2 - .../core-js/library/fn/math/log1p.js | 2 - .../core-js/library/fn/math/log2.js | 2 - .../core-js/library/fn/math/sign.js | 2 - .../core-js/library/fn/math/sinh.js | 2 - .../core-js/library/fn/math/tanh.js | 2 - .../core-js/library/fn/math/trunc.js | 2 - .../core-js/library/fn/math/umulh.js | 2 - .../core-js/library/fn/number/constructor.js | 2 - .../core-js/library/fn/number/epsilon.js | 2 - .../core-js/library/fn/number/index.js | 14 - .../core-js/library/fn/number/is-finite.js | 2 - .../core-js/library/fn/number/is-integer.js | 2 - .../core-js/library/fn/number/is-nan.js | 2 - .../library/fn/number/is-safe-integer.js | 2 - .../core-js/library/fn/number/iterator.js | 5 - .../library/fn/number/max-safe-integer.js | 2 - .../library/fn/number/min-safe-integer.js | 2 - .../core-js/library/fn/number/parse-float.js | 2 - .../core-js/library/fn/number/parse-int.js | 2 - .../core-js/library/fn/number/to-fixed.js | 2 - .../core-js/library/fn/number/to-precision.js | 2 - .../library/fn/number/virtual/index.js | 4 - .../library/fn/number/virtual/iterator.js | 2 - .../library/fn/number/virtual/to-fixed.js | 2 - .../library/fn/number/virtual/to-precision.js | 2 - .../core-js/library/fn/object/assign.js | 2 - .../core-js/library/fn/object/classof.js | 2 - .../core-js/library/fn/object/create.js | 5 - .../library/fn/object/define-getter.js | 2 - .../library/fn/object/define-properties.js | 5 - .../library/fn/object/define-property.js | 5 - .../library/fn/object/define-setter.js | 2 - .../core-js/library/fn/object/define.js | 2 - .../core-js/library/fn/object/entries.js | 2 - .../core-js/library/fn/object/freeze.js | 2 - .../fn/object/get-own-property-descriptor.js | 5 - .../fn/object/get-own-property-descriptors.js | 2 - .../fn/object/get-own-property-names.js | 5 - .../fn/object/get-own-property-symbols.js | 2 - .../library/fn/object/get-prototype-of.js | 2 - .../core-js/library/fn/object/index.js | 30 - .../library/fn/object/is-extensible.js | 2 - .../core-js/library/fn/object/is-frozen.js | 2 - .../core-js/library/fn/object/is-object.js | 2 - .../core-js/library/fn/object/is-sealed.js | 2 - .../core-js/library/fn/object/is.js | 2 - .../core-js/library/fn/object/keys.js | 2 - .../library/fn/object/lookup-getter.js | 2 - .../library/fn/object/lookup-setter.js | 2 - .../core-js/library/fn/object/make.js | 2 - .../library/fn/object/prevent-extensions.js | 2 - .../core-js/library/fn/object/seal.js | 2 - .../library/fn/object/set-prototype-of.js | 2 - .../core-js/library/fn/object/values.js | 2 - .../core-js/library/fn/observable.js | 7 - .../core-js/library/fn/parse-float.js | 2 - .../core-js/library/fn/parse-int.js | 2 - .../core-js/library/fn/promise.js | 5 - .../core-js/library/fn/reflect/apply.js | 2 - .../core-js/library/fn/reflect/construct.js | 2 - .../library/fn/reflect/define-metadata.js | 2 - .../library/fn/reflect/define-property.js | 2 - .../library/fn/reflect/delete-metadata.js | 2 - .../library/fn/reflect/delete-property.js | 2 - .../core-js/library/fn/reflect/enumerate.js | 2 - .../library/fn/reflect/get-metadata-keys.js | 2 - .../library/fn/reflect/get-metadata.js | 2 - .../fn/reflect/get-own-metadata-keys.js | 2 - .../library/fn/reflect/get-own-metadata.js | 2 - .../fn/reflect/get-own-property-descriptor.js | 2 - .../library/fn/reflect/get-prototype-of.js | 2 - .../core-js/library/fn/reflect/get.js | 2 - .../library/fn/reflect/has-metadata.js | 2 - .../library/fn/reflect/has-own-metadata.js | 2 - .../core-js/library/fn/reflect/has.js | 2 - .../core-js/library/fn/reflect/index.js | 24 - .../library/fn/reflect/is-extensible.js | 2 - .../core-js/library/fn/reflect/metadata.js | 2 - .../core-js/library/fn/reflect/own-keys.js | 2 - .../library/fn/reflect/prevent-extensions.js | 2 - .../library/fn/reflect/set-prototype-of.js | 2 - .../core-js/library/fn/reflect/set.js | 2 - .../core-js/library/fn/regexp/constructor.js | 2 - .../core-js/library/fn/regexp/escape.js | 2 - .../core-js/library/fn/regexp/flags.js | 5 - .../core-js/library/fn/regexp/index.js | 9 - .../core-js/library/fn/regexp/match.js | 5 - .../core-js/library/fn/regexp/replace.js | 5 - .../core-js/library/fn/regexp/search.js | 5 - .../core-js/library/fn/regexp/split.js | 5 - .../core-js/library/fn/regexp/to-string.js | 5 - .../core-js/library/fn/set-immediate.js | 2 - .../core-js/library/fn/set-interval.js | 2 - .../core-js/library/fn/set-timeout.js | 2 - .../node_modules/core-js/library/fn/set.js | 6 - .../core-js/library/fn/string/anchor.js | 2 - .../core-js/library/fn/string/at.js | 2 - .../core-js/library/fn/string/big.js | 2 - .../core-js/library/fn/string/blink.js | 2 - .../core-js/library/fn/string/bold.js | 2 - .../library/fn/string/code-point-at.js | 2 - .../core-js/library/fn/string/ends-with.js | 2 - .../core-js/library/fn/string/escape-html.js | 2 - .../core-js/library/fn/string/fixed.js | 2 - .../core-js/library/fn/string/fontcolor.js | 2 - .../core-js/library/fn/string/fontsize.js | 2 - .../library/fn/string/from-code-point.js | 2 - .../core-js/library/fn/string/includes.js | 2 - .../core-js/library/fn/string/index.js | 35 - .../core-js/library/fn/string/italics.js | 2 - .../core-js/library/fn/string/iterator.js | 5 - .../core-js/library/fn/string/link.js | 2 - .../core-js/library/fn/string/match-all.js | 2 - .../core-js/library/fn/string/pad-end.js | 2 - .../core-js/library/fn/string/pad-start.js | 2 - .../core-js/library/fn/string/raw.js | 2 - .../core-js/library/fn/string/repeat.js | 2 - .../core-js/library/fn/string/small.js | 2 - .../core-js/library/fn/string/starts-with.js | 2 - .../core-js/library/fn/string/strike.js | 2 - .../core-js/library/fn/string/sub.js | 2 - .../core-js/library/fn/string/sup.js | 2 - .../core-js/library/fn/string/trim-end.js | 2 - .../core-js/library/fn/string/trim-left.js | 2 - .../core-js/library/fn/string/trim-right.js | 2 - .../core-js/library/fn/string/trim-start.js | 2 - .../core-js/library/fn/string/trim.js | 2 - .../library/fn/string/unescape-html.js | 2 - .../library/fn/string/virtual/anchor.js | 2 - .../core-js/library/fn/string/virtual/at.js | 2 - .../core-js/library/fn/string/virtual/big.js | 2 - .../library/fn/string/virtual/blink.js | 2 - .../core-js/library/fn/string/virtual/bold.js | 2 - .../fn/string/virtual/code-point-at.js | 2 - .../library/fn/string/virtual/ends-with.js | 2 - .../library/fn/string/virtual/escape-html.js | 2 - .../library/fn/string/virtual/fixed.js | 2 - .../library/fn/string/virtual/fontcolor.js | 2 - .../library/fn/string/virtual/fontsize.js | 2 - .../library/fn/string/virtual/includes.js | 2 - .../library/fn/string/virtual/index.js | 33 - .../library/fn/string/virtual/italics.js | 2 - .../library/fn/string/virtual/iterator.js | 2 - .../core-js/library/fn/string/virtual/link.js | 2 - .../library/fn/string/virtual/match-all.js | 2 - .../library/fn/string/virtual/pad-end.js | 2 - .../library/fn/string/virtual/pad-start.js | 2 - .../library/fn/string/virtual/repeat.js | 2 - .../library/fn/string/virtual/small.js | 2 - .../library/fn/string/virtual/starts-with.js | 2 - .../library/fn/string/virtual/strike.js | 2 - .../core-js/library/fn/string/virtual/sub.js | 2 - .../core-js/library/fn/string/virtual/sup.js | 2 - .../library/fn/string/virtual/trim-end.js | 2 - .../library/fn/string/virtual/trim-left.js | 2 - .../library/fn/string/virtual/trim-right.js | 2 - .../library/fn/string/virtual/trim-start.js | 2 - .../core-js/library/fn/string/virtual/trim.js | 2 - .../fn/string/virtual/unescape-html.js | 2 - .../library/fn/symbol/async-iterator.js | 2 - .../core-js/library/fn/symbol/for.js | 2 - .../core-js/library/fn/symbol/has-instance.js | 2 - .../core-js/library/fn/symbol/index.js | 5 - .../library/fn/symbol/is-concat-spreadable.js | 1 - .../core-js/library/fn/symbol/iterator.js | 3 - .../core-js/library/fn/symbol/key-for.js | 2 - .../core-js/library/fn/symbol/match.js | 2 - .../core-js/library/fn/symbol/observable.js | 2 - .../core-js/library/fn/symbol/replace.js | 2 - .../core-js/library/fn/symbol/search.js | 2 - .../core-js/library/fn/symbol/species.js | 1 - .../core-js/library/fn/symbol/split.js | 2 - .../core-js/library/fn/symbol/to-primitive.js | 1 - .../library/fn/symbol/to-string-tag.js | 2 - .../core-js/library/fn/symbol/unscopables.js | 1 - .../core-js/library/fn/system/global.js | 2 - .../core-js/library/fn/system/index.js | 2 - .../core-js/library/fn/typed/array-buffer.js | 3 - .../core-js/library/fn/typed/data-view.js | 3 - .../core-js/library/fn/typed/float32-array.js | 2 - .../core-js/library/fn/typed/float64-array.js | 2 - .../core-js/library/fn/typed/index.js | 13 - .../core-js/library/fn/typed/int16-array.js | 2 - .../core-js/library/fn/typed/int32-array.js | 2 - .../core-js/library/fn/typed/int8-array.js | 2 - .../core-js/library/fn/typed/uint16-array.js | 2 - .../core-js/library/fn/typed/uint32-array.js | 2 - .../core-js/library/fn/typed/uint8-array.js | 2 - .../library/fn/typed/uint8-clamped-array.js | 2 - .../core-js/library/fn/weak-map.js | 4 - .../core-js/library/fn/weak-set.js | 4 - .../node_modules/core-js/library/index.js | 16 - .../core-js/library/modules/_a-function.js | 4 - .../library/modules/_a-number-value.js | 5 - .../library/modules/_add-to-unscopables.js | 1 - .../core-js/library/modules/_an-instance.js | 5 - .../core-js/library/modules/_an-object.js | 5 - .../library/modules/_array-copy-within.js | 26 - .../core-js/library/modules/_array-fill.js | 15 - .../library/modules/_array-from-iterable.js | 7 - .../library/modules/_array-includes.js | 21 - .../core-js/library/modules/_array-methods.js | 44 - .../core-js/library/modules/_array-reduce.js | 28 - .../modules/_array-species-constructor.js | 16 - .../library/modules/_array-species-create.js | 6 - .../core-js/library/modules/_bind.js | 24 - .../core-js/library/modules/_classof.js | 23 - .../core-js/library/modules/_cof.js | 5 - .../library/modules/_collection-strong.js | 142 - .../library/modules/_collection-to-json.js | 9 - .../library/modules/_collection-weak.js | 83 - .../core-js/library/modules/_collection.js | 59 - .../core-js/library/modules/_core.js | 2 - .../library/modules/_create-property.js | 8 - .../core-js/library/modules/_ctx.js | 20 - .../library/modules/_date-to-primitive.js | 9 - .../core-js/library/modules/_defined.js | 5 - .../core-js/library/modules/_descriptors.js | 4 - .../core-js/library/modules/_dom-create.js | 7 - .../core-js/library/modules/_entry-virtual.js | 5 - .../core-js/library/modules/_enum-bug-keys.js | 4 - .../core-js/library/modules/_enum-keys.js | 15 - .../core-js/library/modules/_export.js | 61 - .../library/modules/_fails-is-regexp.js | 12 - .../core-js/library/modules/_fails.js | 7 - .../core-js/library/modules/_fix-re-wks.js | 28 - .../core-js/library/modules/_flags.js | 13 - .../core-js/library/modules/_for-of.js | 25 - .../core-js/library/modules/_global.js | 4 - .../core-js/library/modules/_has.js | 4 - .../core-js/library/modules/_hide.js | 8 - .../core-js/library/modules/_html.js | 1 - .../library/modules/_ie8-dom-define.js | 3 - .../library/modules/_inherit-if-required.js | 8 - .../core-js/library/modules/_invoke.js | 16 - .../core-js/library/modules/_iobject.js | 5 - .../core-js/library/modules/_is-array-iter.js | 8 - .../core-js/library/modules/_is-array.js | 5 - .../core-js/library/modules/_is-integer.js | 6 - .../core-js/library/modules/_is-object.js | 3 - .../core-js/library/modules/_is-regexp.js | 8 - .../core-js/library/modules/_iter-call.js | 12 - .../core-js/library/modules/_iter-create.js | 13 - .../core-js/library/modules/_iter-define.js | 70 - .../core-js/library/modules/_iter-detect.js | 21 - .../core-js/library/modules/_iter-step.js | 3 - .../core-js/library/modules/_iterators.js | 1 - .../core-js/library/modules/_keyof.js | 10 - .../core-js/library/modules/_library.js | 1 - .../core-js/library/modules/_math-expm1.js | 10 - .../core-js/library/modules/_math-log1p.js | 4 - .../core-js/library/modules/_math-sign.js | 4 - .../core-js/library/modules/_meta.js | 53 - .../core-js/library/modules/_metadata.js | 51 - .../core-js/library/modules/_microtask.js | 68 - .../core-js/library/modules/_object-assign.js | 33 - .../core-js/library/modules/_object-create.js | 41 - .../core-js/library/modules/_object-define.js | 12 - .../core-js/library/modules/_object-dp.js | 16 - .../core-js/library/modules/_object-dps.js | 13 - .../library/modules/_object-forced-pam.js | 7 - .../core-js/library/modules/_object-gopd.js | 16 - .../library/modules/_object-gopn-ext.js | 19 - .../core-js/library/modules/_object-gopn.js | 7 - .../core-js/library/modules/_object-gops.js | 1 - .../core-js/library/modules/_object-gpo.js | 13 - .../library/modules/_object-keys-internal.js | 17 - .../core-js/library/modules/_object-keys.js | 7 - .../core-js/library/modules/_object-pie.js | 1 - .../core-js/library/modules/_object-sap.js | 10 - .../library/modules/_object-to-array.js | 16 - .../core-js/library/modules/_own-keys.js | 10 - .../core-js/library/modules/_parse-float.js | 8 - .../core-js/library/modules/_parse-int.js | 9 - .../core-js/library/modules/_partial.js | 23 - .../core-js/library/modules/_path.js | 1 - .../core-js/library/modules/_property-desc.js | 8 - .../core-js/library/modules/_redefine-all.js | 7 - .../core-js/library/modules/_redefine.js | 1 - .../core-js/library/modules/_replacer.js | 8 - .../core-js/library/modules/_same-value.js | 4 - .../core-js/library/modules/_set-proto.js | 25 - .../core-js/library/modules/_set-species.js | 14 - .../library/modules/_set-to-string-tag.js | 7 - .../core-js/library/modules/_shared-key.js | 5 - .../core-js/library/modules/_shared.js | 6 - .../library/modules/_species-constructor.js | 8 - .../core-js/library/modules/_strict-method.js | 7 - .../core-js/library/modules/_string-at.js | 17 - .../library/modules/_string-context.js | 8 - .../core-js/library/modules/_string-html.js | 19 - .../core-js/library/modules/_string-pad.js | 16 - .../core-js/library/modules/_string-repeat.js | 12 - .../core-js/library/modules/_string-trim.js | 30 - .../core-js/library/modules/_string-ws.js | 2 - .../core-js/library/modules/_task.js | 75 - .../core-js/library/modules/_to-index.js | 7 - .../core-js/library/modules/_to-integer.js | 6 - .../core-js/library/modules/_to-iobject.js | 6 - .../core-js/library/modules/_to-length.js | 6 - .../core-js/library/modules/_to-object.js | 5 - .../core-js/library/modules/_to-primitive.js | 12 - .../core-js/library/modules/_typed-array.js | 479 - .../core-js/library/modules/_typed-buffer.js | 273 - .../core-js/library/modules/_typed.js | 26 - .../core-js/library/modules/_uid.js | 5 - .../core-js/library/modules/_wks-define.js | 9 - .../core-js/library/modules/_wks-ext.js | 1 - .../core-js/library/modules/_wks.js | 11 - .../core-js/library/modules/core.delay.js | 12 - .../core-js/library/modules/core.dict.js | 155 - .../library/modules/core.function.part.js | 7 - .../modules/core.get-iterator-method.js | 8 - .../library/modules/core.get-iterator.js | 7 - .../library/modules/core.is-iterable.js | 9 - .../library/modules/core.number.iterator.js | 9 - .../library/modules/core.object.classof.js | 3 - .../library/modules/core.object.define.js | 4 - .../library/modules/core.object.is-object.js | 3 - .../library/modules/core.object.make.js | 9 - .../library/modules/core.regexp.escape.js | 5 - .../modules/core.string.escape-html.js | 11 - .../modules/core.string.unescape-html.js | 11 - .../core-js/library/modules/es5.js | 35 - .../library/modules/es6.array.copy-within.js | 6 - .../library/modules/es6.array.every.js | 10 - .../core-js/library/modules/es6.array.fill.js | 6 - .../library/modules/es6.array.filter.js | 10 - .../library/modules/es6.array.find-index.js | 14 - .../core-js/library/modules/es6.array.find.js | 14 - .../library/modules/es6.array.for-each.js | 11 - .../core-js/library/modules/es6.array.from.js | 37 - .../library/modules/es6.array.index-of.js | 15 - .../library/modules/es6.array.is-array.js | 4 - .../library/modules/es6.array.iterator.js | 34 - .../core-js/library/modules/es6.array.join.js | 12 - .../modules/es6.array.last-index-of.js | 22 - .../core-js/library/modules/es6.array.map.js | 10 - .../core-js/library/modules/es6.array.of.js | 19 - .../library/modules/es6.array.reduce-right.js | 10 - .../library/modules/es6.array.reduce.js | 10 - .../library/modules/es6.array.slice.js | 28 - .../core-js/library/modules/es6.array.some.js | 10 - .../core-js/library/modules/es6.array.sort.js | 23 - .../library/modules/es6.array.species.js | 1 - .../core-js/library/modules/es6.date.now.js | 4 - .../library/modules/es6.date.to-iso-string.js | 28 - .../library/modules/es6.date.to-json.js | 14 - .../library/modules/es6.date.to-primitive.js | 0 .../library/modules/es6.date.to-string.js | 0 .../library/modules/es6.function.bind.js | 4 - .../modules/es6.function.has-instance.js | 13 - .../library/modules/es6.function.name.js | 0 .../core-js/library/modules/es6.map.js | 17 - .../core-js/library/modules/es6.math.acosh.js | 18 - .../core-js/library/modules/es6.math.asinh.js | 10 - .../core-js/library/modules/es6.math.atanh.js | 10 - .../core-js/library/modules/es6.math.cbrt.js | 9 - .../core-js/library/modules/es6.math.clz32.js | 8 - .../core-js/library/modules/es6.math.cosh.js | 9 - .../core-js/library/modules/es6.math.expm1.js | 5 - .../library/modules/es6.math.fround.js | 26 - .../core-js/library/modules/es6.math.hypot.js | 25 - .../core-js/library/modules/es6.math.imul.js | 17 - .../core-js/library/modules/es6.math.log10.js | 8 - .../core-js/library/modules/es6.math.log1p.js | 4 - .../core-js/library/modules/es6.math.log2.js | 8 - .../core-js/library/modules/es6.math.sign.js | 4 - .../core-js/library/modules/es6.math.sinh.js | 15 - .../core-js/library/modules/es6.math.tanh.js | 12 - .../core-js/library/modules/es6.math.trunc.js | 8 - .../library/modules/es6.number.constructor.js | 0 .../library/modules/es6.number.epsilon.js | 4 - .../library/modules/es6.number.is-finite.js | 9 - .../library/modules/es6.number.is-integer.js | 4 - .../library/modules/es6.number.is-nan.js | 8 - .../modules/es6.number.is-safe-integer.js | 10 - .../modules/es6.number.max-safe-integer.js | 4 - .../modules/es6.number.min-safe-integer.js | 4 - .../library/modules/es6.number.parse-float.js | 4 - .../library/modules/es6.number.parse-int.js | 4 - .../library/modules/es6.number.to-fixed.js | 113 - .../modules/es6.number.to-precision.js | 18 - .../library/modules/es6.object.assign.js | 4 - .../library/modules/es6.object.create.js | 3 - .../modules/es6.object.define-properties.js | 3 - .../modules/es6.object.define-property.js | 3 - .../library/modules/es6.object.freeze.js | 9 - .../es6.object.get-own-property-descriptor.js | 9 - .../es6.object.get-own-property-names.js | 4 - .../modules/es6.object.get-prototype-of.js | 9 - .../modules/es6.object.is-extensible.js | 8 - .../library/modules/es6.object.is-frozen.js | 8 - .../library/modules/es6.object.is-sealed.js | 8 - .../core-js/library/modules/es6.object.is.js | 3 - .../library/modules/es6.object.keys.js | 9 - .../modules/es6.object.prevent-extensions.js | 9 - .../library/modules/es6.object.seal.js | 9 - .../modules/es6.object.set-prototype-of.js | 3 - .../library/modules/es6.object.to-string.js | 0 .../library/modules/es6.parse-float.js | 4 - .../core-js/library/modules/es6.parse-int.js | 4 - .../core-js/library/modules/es6.promise.js | 299 - .../library/modules/es6.reflect.apply.js | 16 - .../library/modules/es6.reflect.construct.js | 47 - .../modules/es6.reflect.define-property.js | 22 - .../modules/es6.reflect.delete-property.js | 11 - .../library/modules/es6.reflect.enumerate.js | 26 - ...es6.reflect.get-own-property-descriptor.js | 10 - .../modules/es6.reflect.get-prototype-of.js | 10 - .../library/modules/es6.reflect.get.js | 21 - .../library/modules/es6.reflect.has.js | 8 - .../modules/es6.reflect.is-extensible.js | 11 - .../library/modules/es6.reflect.own-keys.js | 4 - .../modules/es6.reflect.prevent-extensions.js | 16 - .../modules/es6.reflect.set-prototype-of.js | 15 - .../library/modules/es6.reflect.set.js | 31 - .../library/modules/es6.regexp.constructor.js | 1 - .../library/modules/es6.regexp.flags.js | 0 .../library/modules/es6.regexp.match.js | 0 .../library/modules/es6.regexp.replace.js | 0 .../library/modules/es6.regexp.search.js | 0 .../library/modules/es6.regexp.split.js | 0 .../library/modules/es6.regexp.to-string.js | 0 .../core-js/library/modules/es6.set.js | 12 - .../library/modules/es6.string.anchor.js | 7 - .../core-js/library/modules/es6.string.big.js | 7 - .../library/modules/es6.string.blink.js | 7 - .../library/modules/es6.string.bold.js | 7 - .../modules/es6.string.code-point-at.js | 9 - .../library/modules/es6.string.ends-with.js | 20 - .../library/modules/es6.string.fixed.js | 7 - .../library/modules/es6.string.fontcolor.js | 7 - .../library/modules/es6.string.fontsize.js | 7 - .../modules/es6.string.from-code-point.js | 23 - .../library/modules/es6.string.includes.js | 12 - .../library/modules/es6.string.italics.js | 7 - .../library/modules/es6.string.iterator.js | 17 - .../library/modules/es6.string.link.js | 7 - .../core-js/library/modules/es6.string.raw.js | 18 - .../library/modules/es6.string.repeat.js | 6 - .../library/modules/es6.string.small.js | 7 - .../library/modules/es6.string.starts-with.js | 18 - .../library/modules/es6.string.strike.js | 7 - .../core-js/library/modules/es6.string.sub.js | 7 - .../core-js/library/modules/es6.string.sup.js | 7 - .../library/modules/es6.string.trim.js | 7 - .../core-js/library/modules/es6.symbol.js | 235 - .../library/modules/es6.typed.array-buffer.js | 46 - .../library/modules/es6.typed.data-view.js | 4 - .../modules/es6.typed.float32-array.js | 5 - .../modules/es6.typed.float64-array.js | 5 - .../library/modules/es6.typed.int16-array.js | 5 - .../library/modules/es6.typed.int32-array.js | 5 - .../library/modules/es6.typed.int8-array.js | 5 - .../library/modules/es6.typed.uint16-array.js | 5 - .../library/modules/es6.typed.uint32-array.js | 5 - .../library/modules/es6.typed.uint8-array.js | 5 - .../modules/es6.typed.uint8-clamped-array.js | 5 - .../core-js/library/modules/es6.weak-map.js | 56 - .../core-js/library/modules/es6.weak-set.js | 12 - .../library/modules/es7.array.includes.js | 12 - .../core-js/library/modules/es7.asap.js | 12 - .../library/modules/es7.error.is-error.js | 9 - .../library/modules/es7.map.to-json.js | 4 - .../core-js/library/modules/es7.math.iaddh.js | 11 - .../core-js/library/modules/es7.math.imulh.js | 16 - .../core-js/library/modules/es7.math.isubh.js | 11 - .../core-js/library/modules/es7.math.umulh.js | 16 - .../modules/es7.object.define-getter.js | 12 - .../modules/es7.object.define-setter.js | 12 - .../library/modules/es7.object.entries.js | 9 - .../modules/es7.object.enumerable-entries.js | 12 - .../modules/es7.object.enumerable-keys.js | 12 - .../modules/es7.object.enumerable-values.js | 12 - ...es7.object.get-own-property-descriptors.js | 19 - .../modules/es7.object.lookup-getter.js | 18 - .../modules/es7.object.lookup-setter.js | 18 - .../library/modules/es7.object.values.js | 9 - .../core-js/library/modules/es7.observable.js | 199 - .../modules/es7.reflect.define-metadata.js | 8 - .../modules/es7.reflect.delete-metadata.js | 15 - .../modules/es7.reflect.get-metadata-keys.js | 19 - .../modules/es7.reflect.get-metadata.js | 17 - .../es7.reflect.get-own-metadata-keys.js | 8 - .../modules/es7.reflect.get-own-metadata.js | 9 - .../modules/es7.reflect.has-metadata.js | 16 - .../modules/es7.reflect.has-own-metadata.js | 9 - .../library/modules/es7.reflect.metadata.js | 15 - .../library/modules/es7.set.to-json.js | 4 - .../core-js/library/modules/es7.string.at.js | 10 - .../library/modules/es7.string.match-all.js | 30 - .../library/modules/es7.string.pad-end.js | 10 - .../library/modules/es7.string.pad-start.js | 10 - .../library/modules/es7.string.trim-left.js | 7 - .../library/modules/es7.string.trim-right.js | 7 - .../modules/es7.symbol.async-iterator.js | 1 - .../library/modules/es7.symbol.observable.js | 1 - .../library/modules/es7.system.global.js | 4 - .../library/modules/web.dom.iterable.js | 13 - .../core-js/library/modules/web.immediate.js | 6 - .../core-js/library/modules/web.timers.js | 20 - .../node_modules/core-js/library/shim.js | 176 - .../node_modules/core-js/library/stage/0.js | 10 - .../node_modules/core-js/library/stage/1.js | 6 - .../node_modules/core-js/library/stage/2.js | 3 - .../node_modules/core-js/library/stage/3.js | 4 - .../node_modules/core-js/library/stage/4.js | 8 - .../core-js/library/stage/index.js | 1 - .../node_modules/core-js/library/stage/pre.js | 10 - .../core-js/library/web/dom-collections.js | 2 - .../core-js/library/web/immediate.js | 2 - .../node_modules/core-js/library/web/index.js | 4 - .../core-js/library/web/timers.js | 2 - .../core-js/modules/_a-function.js | 4 - .../core-js/modules/_a-number-value.js | 5 - .../core-js/modules/_add-to-unscopables.js | 7 - .../core-js/modules/_an-instance.js | 5 - .../core-js/modules/_an-object.js | 5 - .../core-js/modules/_array-copy-within.js | 26 - .../core-js/modules/_array-fill.js | 15 - .../core-js/modules/_array-from-iterable.js | 7 - .../core-js/modules/_array-includes.js | 21 - .../core-js/modules/_array-methods.js | 44 - .../core-js/modules/_array-reduce.js | 28 - .../modules/_array-species-constructor.js | 16 - .../core-js/modules/_array-species-create.js | 6 - .../node_modules/core-js/modules/_bind.js | 24 - .../node_modules/core-js/modules/_classof.js | 23 - .../node_modules/core-js/modules/_cof.js | 5 - .../core-js/modules/_collection-strong.js | 142 - .../core-js/modules/_collection-to-json.js | 9 - .../core-js/modules/_collection-weak.js | 83 - .../core-js/modules/_collection.js | 85 - .../node_modules/core-js/modules/_core.js | 2 - .../core-js/modules/_create-property.js | 8 - .../node_modules/core-js/modules/_ctx.js | 20 - .../core-js/modules/_date-to-primitive.js | 9 - .../node_modules/core-js/modules/_defined.js | 5 - .../core-js/modules/_descriptors.js | 4 - .../core-js/modules/_dom-create.js | 7 - .../core-js/modules/_entry-virtual.js | 5 - .../core-js/modules/_enum-bug-keys.js | 4 - .../core-js/modules/_enum-keys.js | 15 - .../node_modules/core-js/modules/_export.js | 43 - .../core-js/modules/_fails-is-regexp.js | 12 - .../node_modules/core-js/modules/_fails.js | 7 - .../core-js/modules/_fix-re-wks.js | 28 - .../node_modules/core-js/modules/_flags.js | 13 - .../node_modules/core-js/modules/_for-of.js | 25 - .../node_modules/core-js/modules/_global.js | 4 - .../node_modules/core-js/modules/_has.js | 4 - .../node_modules/core-js/modules/_hide.js | 8 - .../node_modules/core-js/modules/_html.js | 1 - .../core-js/modules/_ie8-dom-define.js | 3 - .../core-js/modules/_inherit-if-required.js | 8 - .../node_modules/core-js/modules/_invoke.js | 16 - .../node_modules/core-js/modules/_iobject.js | 5 - .../core-js/modules/_is-array-iter.js | 8 - .../node_modules/core-js/modules/_is-array.js | 5 - .../core-js/modules/_is-integer.js | 6 - .../core-js/modules/_is-object.js | 3 - .../core-js/modules/_is-regexp.js | 8 - .../core-js/modules/_iter-call.js | 12 - .../core-js/modules/_iter-create.js | 13 - .../core-js/modules/_iter-define.js | 70 - .../core-js/modules/_iter-detect.js | 21 - .../core-js/modules/_iter-step.js | 3 - .../core-js/modules/_iterators.js | 1 - .../node_modules/core-js/modules/_keyof.js | 10 - .../node_modules/core-js/modules/_library.js | 1 - .../core-js/modules/_math-expm1.js | 10 - .../core-js/modules/_math-log1p.js | 4 - .../core-js/modules/_math-sign.js | 4 - .../node_modules/core-js/modules/_meta.js | 53 - .../node_modules/core-js/modules/_metadata.js | 51 - .../core-js/modules/_microtask.js | 68 - .../core-js/modules/_object-assign.js | 33 - .../core-js/modules/_object-create.js | 41 - .../core-js/modules/_object-define.js | 12 - .../core-js/modules/_object-dp.js | 16 - .../core-js/modules/_object-dps.js | 13 - .../core-js/modules/_object-forced-pam.js | 7 - .../core-js/modules/_object-gopd.js | 16 - .../core-js/modules/_object-gopn-ext.js | 19 - .../core-js/modules/_object-gopn.js | 7 - .../core-js/modules/_object-gops.js | 1 - .../core-js/modules/_object-gpo.js | 13 - .../core-js/modules/_object-keys-internal.js | 17 - .../core-js/modules/_object-keys.js | 7 - .../core-js/modules/_object-pie.js | 1 - .../core-js/modules/_object-sap.js | 10 - .../core-js/modules/_object-to-array.js | 16 - .../node_modules/core-js/modules/_own-keys.js | 10 - .../core-js/modules/_parse-float.js | 8 - .../core-js/modules/_parse-int.js | 9 - .../node_modules/core-js/modules/_partial.js | 23 - .../node_modules/core-js/modules/_path.js | 1 - .../core-js/modules/_property-desc.js | 8 - .../core-js/modules/_redefine-all.js | 5 - .../node_modules/core-js/modules/_redefine.js | 32 - .../node_modules/core-js/modules/_replacer.js | 8 - .../core-js/modules/_same-value.js | 4 - .../core-js/modules/_set-proto.js | 25 - .../core-js/modules/_set-species.js | 13 - .../core-js/modules/_set-to-string-tag.js | 7 - .../core-js/modules/_shared-key.js | 5 - .../node_modules/core-js/modules/_shared.js | 6 - .../core-js/modules/_species-constructor.js | 8 - .../core-js/modules/_strict-method.js | 7 - .../core-js/modules/_string-at.js | 17 - .../core-js/modules/_string-context.js | 8 - .../core-js/modules/_string-html.js | 19 - .../core-js/modules/_string-pad.js | 16 - .../core-js/modules/_string-repeat.js | 12 - .../core-js/modules/_string-trim.js | 30 - .../core-js/modules/_string-ws.js | 2 - .../node_modules/core-js/modules/_task.js | 75 - .../node_modules/core-js/modules/_to-index.js | 7 - .../core-js/modules/_to-integer.js | 6 - .../core-js/modules/_to-iobject.js | 6 - .../core-js/modules/_to-length.js | 6 - .../core-js/modules/_to-object.js | 5 - .../core-js/modules/_to-primitive.js | 12 - .../core-js/modules/_typed-array.js | 479 - .../core-js/modules/_typed-buffer.js | 273 - .../node_modules/core-js/modules/_typed.js | 26 - .../node_modules/core-js/modules/_uid.js | 5 - .../core-js/modules/_wks-define.js | 9 - .../node_modules/core-js/modules/_wks-ext.js | 1 - .../node_modules/core-js/modules/_wks.js | 11 - .../core-js/modules/core.delay.js | 12 - .../node_modules/core-js/modules/core.dict.js | 155 - .../core-js/modules/core.function.part.js | 7 - .../modules/core.get-iterator-method.js | 8 - .../core-js/modules/core.get-iterator.js | 7 - .../core-js/modules/core.is-iterable.js | 9 - .../core-js/modules/core.number.iterator.js | 9 - .../core-js/modules/core.object.classof.js | 3 - .../core-js/modules/core.object.define.js | 4 - .../core-js/modules/core.object.is-object.js | 3 - .../core-js/modules/core.object.make.js | 9 - .../core-js/modules/core.regexp.escape.js | 5 - .../modules/core.string.escape-html.js | 11 - .../modules/core.string.unescape-html.js | 11 - .../node_modules/core-js/modules/es5.js | 35 - .../core-js/modules/es6.array.copy-within.js | 6 - .../core-js/modules/es6.array.every.js | 10 - .../core-js/modules/es6.array.fill.js | 6 - .../core-js/modules/es6.array.filter.js | 10 - .../core-js/modules/es6.array.find-index.js | 14 - .../core-js/modules/es6.array.find.js | 14 - .../core-js/modules/es6.array.for-each.js | 11 - .../core-js/modules/es6.array.from.js | 37 - .../core-js/modules/es6.array.index-of.js | 15 - .../core-js/modules/es6.array.is-array.js | 4 - .../core-js/modules/es6.array.iterator.js | 34 - .../core-js/modules/es6.array.join.js | 12 - .../modules/es6.array.last-index-of.js | 22 - .../core-js/modules/es6.array.map.js | 10 - .../core-js/modules/es6.array.of.js | 19 - .../core-js/modules/es6.array.reduce-right.js | 10 - .../core-js/modules/es6.array.reduce.js | 10 - .../core-js/modules/es6.array.slice.js | 28 - .../core-js/modules/es6.array.some.js | 10 - .../core-js/modules/es6.array.sort.js | 23 - .../core-js/modules/es6.array.species.js | 1 - .../core-js/modules/es6.date.now.js | 4 - .../core-js/modules/es6.date.to-iso-string.js | 28 - .../core-js/modules/es6.date.to-json.js | 14 - .../core-js/modules/es6.date.to-primitive.js | 4 - .../core-js/modules/es6.date.to-string.js | 11 - .../core-js/modules/es6.function.bind.js | 4 - .../modules/es6.function.has-instance.js | 13 - .../core-js/modules/es6.function.name.js | 25 - .../node_modules/core-js/modules/es6.map.js | 17 - .../core-js/modules/es6.math.acosh.js | 18 - .../core-js/modules/es6.math.asinh.js | 10 - .../core-js/modules/es6.math.atanh.js | 10 - .../core-js/modules/es6.math.cbrt.js | 9 - .../core-js/modules/es6.math.clz32.js | 8 - .../core-js/modules/es6.math.cosh.js | 9 - .../core-js/modules/es6.math.expm1.js | 5 - .../core-js/modules/es6.math.fround.js | 26 - .../core-js/modules/es6.math.hypot.js | 25 - .../core-js/modules/es6.math.imul.js | 17 - .../core-js/modules/es6.math.log10.js | 8 - .../core-js/modules/es6.math.log1p.js | 4 - .../core-js/modules/es6.math.log2.js | 8 - .../core-js/modules/es6.math.sign.js | 4 - .../core-js/modules/es6.math.sinh.js | 15 - .../core-js/modules/es6.math.tanh.js | 12 - .../core-js/modules/es6.math.trunc.js | 8 - .../core-js/modules/es6.number.constructor.js | 69 - .../core-js/modules/es6.number.epsilon.js | 4 - .../core-js/modules/es6.number.is-finite.js | 9 - .../core-js/modules/es6.number.is-integer.js | 4 - .../core-js/modules/es6.number.is-nan.js | 8 - .../modules/es6.number.is-safe-integer.js | 10 - .../modules/es6.number.max-safe-integer.js | 4 - .../modules/es6.number.min-safe-integer.js | 4 - .../core-js/modules/es6.number.parse-float.js | 4 - .../core-js/modules/es6.number.parse-int.js | 4 - .../core-js/modules/es6.number.to-fixed.js | 113 - .../modules/es6.number.to-precision.js | 18 - .../core-js/modules/es6.object.assign.js | 4 - .../core-js/modules/es6.object.create.js | 3 - .../modules/es6.object.define-properties.js | 3 - .../modules/es6.object.define-property.js | 3 - .../core-js/modules/es6.object.freeze.js | 9 - .../es6.object.get-own-property-descriptor.js | 9 - .../es6.object.get-own-property-names.js | 4 - .../modules/es6.object.get-prototype-of.js | 9 - .../modules/es6.object.is-extensible.js | 8 - .../core-js/modules/es6.object.is-frozen.js | 8 - .../core-js/modules/es6.object.is-sealed.js | 8 - .../core-js/modules/es6.object.is.js | 3 - .../core-js/modules/es6.object.keys.js | 9 - .../modules/es6.object.prevent-extensions.js | 9 - .../core-js/modules/es6.object.seal.js | 9 - .../modules/es6.object.set-prototype-of.js | 3 - .../core-js/modules/es6.object.to-string.js | 10 - .../core-js/modules/es6.parse-float.js | 4 - .../core-js/modules/es6.parse-int.js | 4 - .../core-js/modules/es6.promise.js | 299 - .../core-js/modules/es6.reflect.apply.js | 16 - .../core-js/modules/es6.reflect.construct.js | 47 - .../modules/es6.reflect.define-property.js | 22 - .../modules/es6.reflect.delete-property.js | 11 - .../core-js/modules/es6.reflect.enumerate.js | 26 - ...es6.reflect.get-own-property-descriptor.js | 10 - .../modules/es6.reflect.get-prototype-of.js | 10 - .../core-js/modules/es6.reflect.get.js | 21 - .../core-js/modules/es6.reflect.has.js | 8 - .../modules/es6.reflect.is-extensible.js | 11 - .../core-js/modules/es6.reflect.own-keys.js | 4 - .../modules/es6.reflect.prevent-extensions.js | 16 - .../modules/es6.reflect.set-prototype-of.js | 15 - .../core-js/modules/es6.reflect.set.js | 31 - .../core-js/modules/es6.regexp.constructor.js | 43 - .../core-js/modules/es6.regexp.flags.js | 5 - .../core-js/modules/es6.regexp.match.js | 10 - .../core-js/modules/es6.regexp.replace.js | 12 - .../core-js/modules/es6.regexp.search.js | 10 - .../core-js/modules/es6.regexp.split.js | 70 - .../core-js/modules/es6.regexp.to-string.js | 25 - .../node_modules/core-js/modules/es6.set.js | 12 - .../core-js/modules/es6.string.anchor.js | 7 - .../core-js/modules/es6.string.big.js | 7 - .../core-js/modules/es6.string.blink.js | 7 - .../core-js/modules/es6.string.bold.js | 7 - .../modules/es6.string.code-point-at.js | 9 - .../core-js/modules/es6.string.ends-with.js | 20 - .../core-js/modules/es6.string.fixed.js | 7 - .../core-js/modules/es6.string.fontcolor.js | 7 - .../core-js/modules/es6.string.fontsize.js | 7 - .../modules/es6.string.from-code-point.js | 23 - .../core-js/modules/es6.string.includes.js | 12 - .../core-js/modules/es6.string.italics.js | 7 - .../core-js/modules/es6.string.iterator.js | 17 - .../core-js/modules/es6.string.link.js | 7 - .../core-js/modules/es6.string.raw.js | 18 - .../core-js/modules/es6.string.repeat.js | 6 - .../core-js/modules/es6.string.small.js | 7 - .../core-js/modules/es6.string.starts-with.js | 18 - .../core-js/modules/es6.string.strike.js | 7 - .../core-js/modules/es6.string.sub.js | 7 - .../core-js/modules/es6.string.sup.js | 7 - .../core-js/modules/es6.string.trim.js | 7 - .../core-js/modules/es6.symbol.js | 235 - .../core-js/modules/es6.typed.array-buffer.js | 46 - .../core-js/modules/es6.typed.data-view.js | 4 - .../modules/es6.typed.float32-array.js | 5 - .../modules/es6.typed.float64-array.js | 5 - .../core-js/modules/es6.typed.int16-array.js | 5 - .../core-js/modules/es6.typed.int32-array.js | 5 - .../core-js/modules/es6.typed.int8-array.js | 5 - .../core-js/modules/es6.typed.uint16-array.js | 5 - .../core-js/modules/es6.typed.uint32-array.js | 5 - .../core-js/modules/es6.typed.uint8-array.js | 5 - .../modules/es6.typed.uint8-clamped-array.js | 5 - .../core-js/modules/es6.weak-map.js | 56 - .../core-js/modules/es6.weak-set.js | 12 - .../core-js/modules/es7.array.includes.js | 12 - .../node_modules/core-js/modules/es7.asap.js | 12 - .../core-js/modules/es7.error.is-error.js | 9 - .../core-js/modules/es7.map.to-json.js | 4 - .../core-js/modules/es7.math.iaddh.js | 11 - .../core-js/modules/es7.math.imulh.js | 16 - .../core-js/modules/es7.math.isubh.js | 11 - .../core-js/modules/es7.math.umulh.js | 16 - .../modules/es7.object.define-getter.js | 12 - .../modules/es7.object.define-setter.js | 12 - .../core-js/modules/es7.object.entries.js | 9 - .../modules/es7.object.enumerable-entries.js | 12 - .../modules/es7.object.enumerable-keys.js | 12 - .../modules/es7.object.enumerable-values.js | 12 - ...es7.object.get-own-property-descriptors.js | 19 - .../modules/es7.object.lookup-getter.js | 18 - .../modules/es7.object.lookup-setter.js | 18 - .../core-js/modules/es7.object.values.js | 9 - .../core-js/modules/es7.observable.js | 199 - .../modules/es7.reflect.define-metadata.js | 8 - .../modules/es7.reflect.delete-metadata.js | 15 - .../modules/es7.reflect.get-metadata-keys.js | 19 - .../modules/es7.reflect.get-metadata.js | 17 - .../es7.reflect.get-own-metadata-keys.js | 8 - .../modules/es7.reflect.get-own-metadata.js | 9 - .../modules/es7.reflect.has-metadata.js | 16 - .../modules/es7.reflect.has-own-metadata.js | 9 - .../core-js/modules/es7.reflect.metadata.js | 15 - .../core-js/modules/es7.set.to-json.js | 4 - .../core-js/modules/es7.string.at.js | 10 - .../core-js/modules/es7.string.match-all.js | 30 - .../core-js/modules/es7.string.pad-end.js | 10 - .../core-js/modules/es7.string.pad-start.js | 10 - .../core-js/modules/es7.string.trim-left.js | 7 - .../core-js/modules/es7.string.trim-right.js | 7 - .../modules/es7.symbol.async-iterator.js | 1 - .../core-js/modules/es7.symbol.observable.js | 1 - .../core-js/modules/es7.system.global.js | 4 - .../modules/library/_add-to-unscopables.js | 1 - .../core-js/modules/library/_collection.js | 59 - .../core-js/modules/library/_export.js | 61 - .../core-js/modules/library/_library.js | 1 - .../core-js/modules/library/_path.js | 1 - .../core-js/modules/library/_redefine-all.js | 7 - .../core-js/modules/library/_redefine.js | 1 - .../core-js/modules/library/_set-species.js | 14 - .../modules/library/es6.date.to-primitive.js | 0 .../modules/library/es6.date.to-string.js | 0 .../modules/library/es6.function.name.js | 0 .../modules/library/es6.number.constructor.js | 0 .../modules/library/es6.object.to-string.js | 0 .../modules/library/es6.regexp.constructor.js | 1 - .../modules/library/es6.regexp.flags.js | 0 .../modules/library/es6.regexp.match.js | 0 .../modules/library/es6.regexp.replace.js | 0 .../modules/library/es6.regexp.search.js | 0 .../modules/library/es6.regexp.split.js | 0 .../modules/library/es6.regexp.to-string.js | 0 .../modules/library/web.dom.iterable.js | 13 - .../core-js/modules/web.dom.iterable.js | 22 - .../core-js/modules/web.immediate.js | 6 - .../core-js/modules/web.timers.js | 20 - .../node_modules/core-js/package.json | 127 - .../node_modules/core-js/shim.js | 176 - .../node_modules/core-js/stage/0.js | 10 - .../node_modules/core-js/stage/1.js | 6 - .../node_modules/core-js/stage/2.js | 3 - .../node_modules/core-js/stage/3.js | 4 - .../node_modules/core-js/stage/4.js | 8 - .../node_modules/core-js/stage/index.js | 1 - .../node_modules/core-js/stage/pre.js | 10 - .../core-js/web/dom-collections.js | 2 - .../node_modules/core-js/web/immediate.js | 2 - .../node_modules/core-js/web/index.js | 4 - .../node_modules/core-js/web/timers.js | 2 - .../node_modules/cryptiles/.npmignore | 18 - .../node_modules/cryptiles/.travis.yml | 8 - .../node_modules/cryptiles/LICENSE | 28 - .../node_modules/cryptiles/README.md | 16 - .../node_modules/cryptiles/lib/index.js | 68 - .../node_modules/cryptiles/package.json | 86 - .../node_modules/cryptiles/test/index.js | 102 - .../node_modules/cssom/LICENSE.txt | 20 - .../node_modules/cssom/README.mdown | 69 - .../node_modules/cssom/lib/CSSDocumentRule.js | 39 - .../node_modules/cssom/lib/CSSFontFaceRule.js | 36 - .../node_modules/cssom/lib/CSSImportRule.js | 132 - .../node_modules/cssom/lib/CSSKeyframeRule.js | 37 - .../cssom/lib/CSSKeyframesRule.js | 39 - .../node_modules/cssom/lib/CSSMediaRule.js | 41 - .../node_modules/cssom/lib/CSSRule.js | 43 - .../cssom/lib/CSSStyleDeclaration.js | 148 - .../node_modules/cssom/lib/CSSStyleRule.js | 190 - .../node_modules/cssom/lib/CSSStyleSheet.js | 88 - .../node_modules/cssom/lib/CSSValue.js | 43 - .../cssom/lib/CSSValueExpression.js | 344 - .../node_modules/cssom/lib/MatcherList.js | 62 - .../node_modules/cssom/lib/MediaList.js | 61 - .../node_modules/cssom/lib/StyleSheet.js | 17 - .../node_modules/cssom/lib/clone.js | 76 - .../node_modules/cssom/lib/index.js | 19 - .../node_modules/cssom/lib/parse.js | 381 - .../node_modules/cssom/package.json | 88 - .../node_modules/cssstyle/.npmignore | 1 - .../node_modules/cssstyle/MIT-LICENSE.txt | 20 - .../node_modules/cssstyle/README.md | 27 - .../cssstyle/lib/CSSStyleDeclaration.js | 233 - .../node_modules/cssstyle/lib/parsers.js | 670 - .../node_modules/cssstyle/lib/properties.js | 5858 ------ .../lib/properties/alignmentBaseline.js | 12 - .../cssstyle/lib/properties/azimuth.js | 65 - .../cssstyle/lib/properties/background.js | 24 - .../lib/properties/backgroundAttachment.js | 22 - .../cssstyle/lib/properties/backgroundClip.js | 12 - .../lib/properties/backgroundColor.js | 33 - .../lib/properties/backgroundImage.js | 29 - .../lib/properties/backgroundOrigin.js | 12 - .../lib/properties/backgroundPosition.js | 56 - .../lib/properties/backgroundPositionX.js | 12 - .../lib/properties/backgroundPositionY.js | 12 - .../lib/properties/backgroundRepeat.js | 25 - .../lib/properties/backgroundRepeatX.js | 12 - .../lib/properties/backgroundRepeatY.js | 12 - .../cssstyle/lib/properties/backgroundSize.js | 12 - .../cssstyle/lib/properties/baselineShift.js | 12 - .../cssstyle/lib/properties/border.js | 49 - .../cssstyle/lib/properties/borderBottom.js | 23 - .../lib/properties/borderBottomColor.js | 16 - .../lib/properties/borderBottomLeftRadius.js | 12 - .../lib/properties/borderBottomRightRadius.js | 12 - .../lib/properties/borderBottomStyle.js | 21 - .../lib/properties/borderBottomWidth.js | 16 - .../cssstyle/lib/properties/borderCollapse.js | 25 - .../cssstyle/lib/properties/borderColor.js | 28 - .../cssstyle/lib/properties/borderImage.js | 12 - .../lib/properties/borderImageOutset.js | 12 - .../lib/properties/borderImageRepeat.js | 12 - .../lib/properties/borderImageSlice.js | 12 - .../lib/properties/borderImageSource.js | 12 - .../lib/properties/borderImageWidth.js | 12 - .../cssstyle/lib/properties/borderLeft.js | 23 - .../lib/properties/borderLeftColor.js | 16 - .../lib/properties/borderLeftStyle.js | 21 - .../lib/properties/borderLeftWidth.js | 16 - .../cssstyle/lib/properties/borderRadius.js | 12 - .../cssstyle/lib/properties/borderRight.js | 23 - .../lib/properties/borderRightColor.js | 16 - .../lib/properties/borderRightStyle.js | 21 - .../lib/properties/borderRightWidth.js | 16 - .../cssstyle/lib/properties/borderSpacing.js | 42 - .../cssstyle/lib/properties/borderStyle.js | 27 - .../cssstyle/lib/properties/borderTop.js | 22 - .../cssstyle/lib/properties/borderTopColor.js | 16 - .../lib/properties/borderTopLeftRadius.js | 12 - .../lib/properties/borderTopRightRadius.js | 12 - .../cssstyle/lib/properties/borderTopStyle.js | 21 - .../cssstyle/lib/properties/borderTopWidth.js | 17 - .../cssstyle/lib/properties/borderWidth.js | 47 - .../cssstyle/lib/properties/bottom.js | 14 - .../cssstyle/lib/properties/boxShadow.js | 12 - .../cssstyle/lib/properties/boxSizing.js | 12 - .../cssstyle/lib/properties/captionSide.js | 12 - .../cssstyle/lib/properties/clear.js | 16 - .../cssstyle/lib/properties/clip.js | 49 - .../cssstyle/lib/properties/color.js | 14 - .../lib/properties/colorInterpolation.js | 12 - .../properties/colorInterpolationFilters.js | 12 - .../cssstyle/lib/properties/colorProfile.js | 12 - .../cssstyle/lib/properties/colorRendering.js | 12 - .../cssstyle/lib/properties/content.js | 12 - .../lib/properties/counterIncrement.js | 12 - .../cssstyle/lib/properties/counterReset.js | 12 - .../cssstyle/lib/properties/cssFloat.js | 12 - .../cssstyle/lib/properties/cue.js | 12 - .../cssstyle/lib/properties/cueAfter.js | 12 - .../cssstyle/lib/properties/cueBefore.js | 12 - .../cssstyle/lib/properties/cursor.js | 12 - .../cssstyle/lib/properties/direction.js | 12 - .../cssstyle/lib/properties/display.js | 12 - .../lib/properties/dominantBaseline.js | 12 - .../cssstyle/lib/properties/elevation.js | 12 - .../cssstyle/lib/properties/emptyCells.js | 12 - .../lib/properties/enableBackground.js | 12 - .../cssstyle/lib/properties/fill.js | 12 - .../cssstyle/lib/properties/fillOpacity.js | 12 - .../cssstyle/lib/properties/fillRule.js | 12 - .../cssstyle/lib/properties/filter.js | 12 - .../cssstyle/lib/properties/floodColor.js | 14 - .../cssstyle/lib/properties/floodOpacity.js | 12 - .../cssstyle/lib/properties/font.js | 40 - .../cssstyle/lib/properties/fontFamily.js | 33 - .../cssstyle/lib/properties/fontSize.js | 25 - .../cssstyle/lib/properties/fontSizeAdjust.js | 12 - .../cssstyle/lib/properties/fontStretch.js | 12 - .../cssstyle/lib/properties/fontStyle.js | 18 - .../cssstyle/lib/properties/fontVariant.js | 18 - .../cssstyle/lib/properties/fontWeight.js | 18 - .../properties/glyphOrientationHorizontal.js | 12 - .../properties/glyphOrientationVertical.js | 12 - .../cssstyle/lib/properties/height.js | 24 - .../cssstyle/lib/properties/imageRendering.js | 12 - .../cssstyle/lib/properties/kerning.js | 12 - .../cssstyle/lib/properties/left.js | 14 - .../cssstyle/lib/properties/letterSpacing.js | 12 - .../cssstyle/lib/properties/lightingColor.js | 14 - .../cssstyle/lib/properties/lineHeight.js | 21 - .../cssstyle/lib/properties/listStyle.js | 12 - .../cssstyle/lib/properties/listStyleImage.js | 12 - .../lib/properties/listStylePosition.js | 12 - .../cssstyle/lib/properties/listStyleType.js | 12 - .../cssstyle/lib/properties/margin.js | 59 - .../cssstyle/lib/properties/marginBottom.js | 13 - .../cssstyle/lib/properties/marginLeft.js | 13 - .../cssstyle/lib/properties/marginRight.js | 13 - .../cssstyle/lib/properties/marginTop.js | 13 - .../cssstyle/lib/properties/marker.js | 12 - .../cssstyle/lib/properties/markerEnd.js | 12 - .../cssstyle/lib/properties/markerMid.js | 12 - .../cssstyle/lib/properties/markerOffset.js | 12 - .../cssstyle/lib/properties/markerStart.js | 12 - .../cssstyle/lib/properties/marks.js | 12 - .../cssstyle/lib/properties/mask.js | 12 - .../cssstyle/lib/properties/maxHeight.js | 12 - .../cssstyle/lib/properties/maxWidth.js | 12 - .../cssstyle/lib/properties/minHeight.js | 12 - .../cssstyle/lib/properties/minWidth.js | 12 - .../cssstyle/lib/properties/opacity.js | 14 - .../cssstyle/lib/properties/orphans.js | 12 - .../cssstyle/lib/properties/outline.js | 12 - .../cssstyle/lib/properties/outlineColor.js | 14 - .../cssstyle/lib/properties/outlineOffset.js | 12 - .../cssstyle/lib/properties/outlineStyle.js | 12 - .../cssstyle/lib/properties/outlineWidth.js | 12 - .../cssstyle/lib/properties/overflow.js | 12 - .../cssstyle/lib/properties/overflowX.js | 12 - .../cssstyle/lib/properties/overflowY.js | 12 - .../cssstyle/lib/properties/padding.js | 52 - .../cssstyle/lib/properties/paddingBottom.js | 13 - .../cssstyle/lib/properties/paddingLeft.js | 13 - .../cssstyle/lib/properties/paddingRight.js | 13 - .../cssstyle/lib/properties/paddingTop.js | 13 - .../cssstyle/lib/properties/page.js | 12 - .../cssstyle/lib/properties/pageBreakAfter.js | 12 - .../lib/properties/pageBreakBefore.js | 12 - .../lib/properties/pageBreakInside.js | 12 - .../cssstyle/lib/properties/pause.js | 12 - .../cssstyle/lib/properties/pauseAfter.js | 12 - .../cssstyle/lib/properties/pauseBefore.js | 12 - .../cssstyle/lib/properties/pitch.js | 12 - .../cssstyle/lib/properties/pitchRange.js | 12 - .../cssstyle/lib/properties/playDuring.js | 12 - .../cssstyle/lib/properties/pointerEvents.js | 12 - .../cssstyle/lib/properties/position.js | 12 - .../cssstyle/lib/properties/quotes.js | 12 - .../cssstyle/lib/properties/resize.js | 12 - .../cssstyle/lib/properties/richness.js | 12 - .../cssstyle/lib/properties/right.js | 14 - .../cssstyle/lib/properties/shapeRendering.js | 12 - .../cssstyle/lib/properties/size.js | 12 - .../cssstyle/lib/properties/speak.js | 12 - .../cssstyle/lib/properties/speakHeader.js | 12 - .../cssstyle/lib/properties/speakNumeral.js | 12 - .../lib/properties/speakPunctuation.js | 12 - .../cssstyle/lib/properties/speechRate.js | 12 - .../cssstyle/lib/properties/src.js | 12 - .../cssstyle/lib/properties/stopColor.js | 14 - .../cssstyle/lib/properties/stopOpacity.js | 12 - .../cssstyle/lib/properties/stress.js | 12 - .../cssstyle/lib/properties/stroke.js | 12 - .../lib/properties/strokeDasharray.js | 12 - .../lib/properties/strokeDashoffset.js | 12 - .../cssstyle/lib/properties/strokeLinecap.js | 12 - .../cssstyle/lib/properties/strokeLinejoin.js | 12 - .../lib/properties/strokeMiterlimit.js | 12 - .../cssstyle/lib/properties/strokeOpacity.js | 12 - .../cssstyle/lib/properties/strokeWidth.js | 12 - .../cssstyle/lib/properties/tableLayout.js | 12 - .../cssstyle/lib/properties/textAlign.js | 12 - .../cssstyle/lib/properties/textAnchor.js | 12 - .../cssstyle/lib/properties/textDecoration.js | 12 - .../cssstyle/lib/properties/textIndent.js | 12 - .../lib/properties/textLineThrough.js | 12 - .../lib/properties/textLineThroughColor.js | 14 - .../lib/properties/textLineThroughMode.js | 12 - .../lib/properties/textLineThroughStyle.js | 12 - .../lib/properties/textLineThroughWidth.js | 12 - .../cssstyle/lib/properties/textOverflow.js | 12 - .../cssstyle/lib/properties/textOverline.js | 12 - .../lib/properties/textOverlineColor.js | 14 - .../lib/properties/textOverlineMode.js | 12 - .../lib/properties/textOverlineStyle.js | 12 - .../lib/properties/textOverlineWidth.js | 12 - .../cssstyle/lib/properties/textRendering.js | 12 - .../cssstyle/lib/properties/textShadow.js | 12 - .../cssstyle/lib/properties/textTransform.js | 12 - .../cssstyle/lib/properties/textUnderline.js | 12 - .../lib/properties/textUnderlineColor.js | 14 - .../lib/properties/textUnderlineMode.js | 12 - .../lib/properties/textUnderlineStyle.js | 12 - .../lib/properties/textUnderlineWidth.js | 12 - .../cssstyle/lib/properties/top.js | 14 - .../cssstyle/lib/properties/unicodeBidi.js | 12 - .../cssstyle/lib/properties/unicodeRange.js | 12 - .../cssstyle/lib/properties/vectorEffect.js | 12 - .../cssstyle/lib/properties/verticalAlign.js | 12 - .../cssstyle/lib/properties/visibility.js | 12 - .../cssstyle/lib/properties/voiceFamily.js | 12 - .../cssstyle/lib/properties/volume.js | 12 - .../lib/properties/webkitAnimation.js | 12 - .../lib/properties/webkitAnimationDelay.js | 12 - .../properties/webkitAnimationDirection.js | 12 - .../lib/properties/webkitAnimationDuration.js | 12 - .../lib/properties/webkitAnimationFillMode.js | 12 - .../webkitAnimationIterationCount.js | 12 - .../lib/properties/webkitAnimationName.js | 12 - .../properties/webkitAnimationPlayState.js | 12 - .../webkitAnimationTimingFunction.js | 12 - .../lib/properties/webkitAppearance.js | 12 - .../lib/properties/webkitAspectRatio.js | 12 - .../properties/webkitBackfaceVisibility.js | 12 - .../lib/properties/webkitBackgroundClip.js | 12 - .../properties/webkitBackgroundComposite.js | 12 - .../lib/properties/webkitBackgroundOrigin.js | 12 - .../lib/properties/webkitBackgroundSize.js | 12 - .../lib/properties/webkitBorderAfter.js | 12 - .../lib/properties/webkitBorderAfterColor.js | 14 - .../lib/properties/webkitBorderAfterStyle.js | 12 - .../lib/properties/webkitBorderAfterWidth.js | 12 - .../lib/properties/webkitBorderBefore.js | 12 - .../lib/properties/webkitBorderBeforeColor.js | 14 - .../lib/properties/webkitBorderBeforeStyle.js | 12 - .../lib/properties/webkitBorderBeforeWidth.js | 12 - .../lib/properties/webkitBorderEnd.js | 12 - .../lib/properties/webkitBorderEndColor.js | 14 - .../lib/properties/webkitBorderEndStyle.js | 12 - .../lib/properties/webkitBorderEndWidth.js | 12 - .../lib/properties/webkitBorderFit.js | 12 - .../webkitBorderHorizontalSpacing.js | 12 - .../lib/properties/webkitBorderImage.js | 12 - .../lib/properties/webkitBorderRadius.js | 12 - .../lib/properties/webkitBorderStart.js | 12 - .../lib/properties/webkitBorderStartColor.js | 14 - .../lib/properties/webkitBorderStartStyle.js | 12 - .../lib/properties/webkitBorderStartWidth.js | 12 - .../properties/webkitBorderVerticalSpacing.js | 12 - .../cssstyle/lib/properties/webkitBoxAlign.js | 12 - .../lib/properties/webkitBoxDirection.js | 12 - .../cssstyle/lib/properties/webkitBoxFlex.js | 12 - .../lib/properties/webkitBoxFlexGroup.js | 12 - .../cssstyle/lib/properties/webkitBoxLines.js | 12 - .../lib/properties/webkitBoxOrdinalGroup.js | 12 - .../lib/properties/webkitBoxOrient.js | 12 - .../cssstyle/lib/properties/webkitBoxPack.js | 12 - .../lib/properties/webkitBoxReflect.js | 12 - .../lib/properties/webkitBoxShadow.js | 12 - .../lib/properties/webkitColorCorrection.js | 12 - .../lib/properties/webkitColumnAxis.js | 12 - .../lib/properties/webkitColumnBreakAfter.js | 12 - .../lib/properties/webkitColumnBreakBefore.js | 12 - .../lib/properties/webkitColumnBreakInside.js | 12 - .../lib/properties/webkitColumnCount.js | 12 - .../lib/properties/webkitColumnGap.js | 12 - .../lib/properties/webkitColumnRule.js | 12 - .../lib/properties/webkitColumnRuleColor.js | 14 - .../lib/properties/webkitColumnRuleStyle.js | 12 - .../lib/properties/webkitColumnRuleWidth.js | 12 - .../lib/properties/webkitColumnSpan.js | 12 - .../lib/properties/webkitColumnWidth.js | 12 - .../cssstyle/lib/properties/webkitColumns.js | 12 - .../cssstyle/lib/properties/webkitFilter.js | 12 - .../lib/properties/webkitFlexAlign.js | 12 - .../lib/properties/webkitFlexDirection.js | 12 - .../cssstyle/lib/properties/webkitFlexFlow.js | 12 - .../lib/properties/webkitFlexItemAlign.js | 12 - .../lib/properties/webkitFlexLinePack.js | 12 - .../lib/properties/webkitFlexOrder.js | 12 - .../cssstyle/lib/properties/webkitFlexPack.js | 12 - .../cssstyle/lib/properties/webkitFlexWrap.js | 12 - .../cssstyle/lib/properties/webkitFlowFrom.js | 12 - .../cssstyle/lib/properties/webkitFlowInto.js | 12 - .../properties/webkitFontFeatureSettings.js | 12 - .../lib/properties/webkitFontKerning.js | 12 - .../lib/properties/webkitFontSizeDelta.js | 12 - .../lib/properties/webkitFontSmoothing.js | 12 - .../properties/webkitFontVariantLigatures.js | 12 - .../lib/properties/webkitHighlight.js | 12 - .../properties/webkitHyphenateCharacter.js | 12 - .../properties/webkitHyphenateLimitAfter.js | 12 - .../properties/webkitHyphenateLimitBefore.js | 12 - .../properties/webkitHyphenateLimitLines.js | 12 - .../cssstyle/lib/properties/webkitHyphens.js | 12 - .../lib/properties/webkitLineAlign.js | 12 - .../lib/properties/webkitLineBoxContain.js | 12 - .../lib/properties/webkitLineBreak.js | 12 - .../lib/properties/webkitLineClamp.js | 12 - .../cssstyle/lib/properties/webkitLineGrid.js | 12 - .../cssstyle/lib/properties/webkitLineSnap.js | 12 - .../cssstyle/lib/properties/webkitLocale.js | 12 - .../lib/properties/webkitLogicalHeight.js | 12 - .../lib/properties/webkitLogicalWidth.js | 12 - .../lib/properties/webkitMarginAfter.js | 12 - .../properties/webkitMarginAfterCollapse.js | 12 - .../lib/properties/webkitMarginBefore.js | 12 - .../properties/webkitMarginBeforeCollapse.js | 12 - .../properties/webkitMarginBottomCollapse.js | 12 - .../lib/properties/webkitMarginCollapse.js | 12 - .../lib/properties/webkitMarginEnd.js | 12 - .../lib/properties/webkitMarginStart.js | 12 - .../lib/properties/webkitMarginTopCollapse.js | 12 - .../cssstyle/lib/properties/webkitMarquee.js | 12 - .../lib/properties/webkitMarqueeDirection.js | 12 - .../lib/properties/webkitMarqueeIncrement.js | 12 - .../lib/properties/webkitMarqueeRepetition.js | 12 - .../lib/properties/webkitMarqueeSpeed.js | 12 - .../lib/properties/webkitMarqueeStyle.js | 12 - .../cssstyle/lib/properties/webkitMask.js | 12 - .../lib/properties/webkitMaskAttachment.js | 12 - .../lib/properties/webkitMaskBoxImage.js | 12 - .../properties/webkitMaskBoxImageOutset.js | 12 - .../properties/webkitMaskBoxImageRepeat.js | 12 - .../lib/properties/webkitMaskBoxImageSlice.js | 12 - .../properties/webkitMaskBoxImageSource.js | 12 - .../lib/properties/webkitMaskBoxImageWidth.js | 12 - .../cssstyle/lib/properties/webkitMaskClip.js | 12 - .../lib/properties/webkitMaskComposite.js | 12 - .../lib/properties/webkitMaskImage.js | 12 - .../lib/properties/webkitMaskOrigin.js | 12 - .../lib/properties/webkitMaskPosition.js | 12 - .../lib/properties/webkitMaskPositionX.js | 12 - .../lib/properties/webkitMaskPositionY.js | 12 - .../lib/properties/webkitMaskRepeat.js | 12 - .../lib/properties/webkitMaskRepeatX.js | 12 - .../lib/properties/webkitMaskRepeatY.js | 12 - .../cssstyle/lib/properties/webkitMaskSize.js | 12 - .../webkitMatchNearestMailBlockquoteColor.js | 14 - .../lib/properties/webkitMaxLogicalHeight.js | 12 - .../lib/properties/webkitMaxLogicalWidth.js | 12 - .../lib/properties/webkitMinLogicalHeight.js | 12 - .../lib/properties/webkitMinLogicalWidth.js | 12 - .../cssstyle/lib/properties/webkitNbspMode.js | 12 - .../lib/properties/webkitOverflowScrolling.js | 12 - .../lib/properties/webkitPaddingAfter.js | 12 - .../lib/properties/webkitPaddingBefore.js | 12 - .../lib/properties/webkitPaddingEnd.js | 12 - .../lib/properties/webkitPaddingStart.js | 12 - .../lib/properties/webkitPerspective.js | 12 - .../lib/properties/webkitPerspectiveOrigin.js | 12 - .../properties/webkitPerspectiveOriginX.js | 12 - .../properties/webkitPerspectiveOriginY.js | 12 - .../lib/properties/webkitPrintColorAdjust.js | 12 - .../lib/properties/webkitRegionBreakAfter.js | 12 - .../lib/properties/webkitRegionBreakBefore.js | 12 - .../lib/properties/webkitRegionBreakInside.js | 12 - .../lib/properties/webkitRegionOverflow.js | 12 - .../lib/properties/webkitRtlOrdering.js | 12 - .../lib/properties/webkitSvgShadow.js | 12 - .../lib/properties/webkitTapHighlightColor.js | 14 - .../lib/properties/webkitTextCombine.js | 12 - .../webkitTextDecorationsInEffect.js | 12 - .../lib/properties/webkitTextEmphasis.js | 12 - .../lib/properties/webkitTextEmphasisColor.js | 14 - .../properties/webkitTextEmphasisPosition.js | 12 - .../lib/properties/webkitTextEmphasisStyle.js | 12 - .../lib/properties/webkitTextFillColor.js | 14 - .../lib/properties/webkitTextOrientation.js | 12 - .../lib/properties/webkitTextSecurity.js | 12 - .../lib/properties/webkitTextSizeAdjust.js | 12 - .../lib/properties/webkitTextStroke.js | 12 - .../lib/properties/webkitTextStrokeColor.js | 14 - .../lib/properties/webkitTextStrokeWidth.js | 12 - .../lib/properties/webkitTransform.js | 12 - .../lib/properties/webkitTransformOrigin.js | 12 - .../lib/properties/webkitTransformOriginX.js | 12 - .../lib/properties/webkitTransformOriginY.js | 12 - .../lib/properties/webkitTransformOriginZ.js | 12 - .../lib/properties/webkitTransformStyle.js | 12 - .../lib/properties/webkitTransition.js | 12 - .../lib/properties/webkitTransitionDelay.js | 12 - .../properties/webkitTransitionDuration.js | 12 - .../properties/webkitTransitionProperty.js | 12 - .../webkitTransitionTimingFunction.js | 12 - .../cssstyle/lib/properties/webkitUserDrag.js | 12 - .../lib/properties/webkitUserModify.js | 12 - .../lib/properties/webkitUserSelect.js | 12 - .../cssstyle/lib/properties/webkitWrap.js | 12 - .../cssstyle/lib/properties/webkitWrapFlow.js | 12 - .../lib/properties/webkitWrapMargin.js | 12 - .../lib/properties/webkitWrapPadding.js | 12 - .../lib/properties/webkitWrapShapeInside.js | 12 - .../lib/properties/webkitWrapShapeOutside.js | 12 - .../lib/properties/webkitWrapThrough.js | 12 - .../lib/properties/webkitWritingMode.js | 12 - .../cssstyle/lib/properties/whiteSpace.js | 12 - .../cssstyle/lib/properties/widows.js | 12 - .../cssstyle/lib/properties/width.js | 24 - .../cssstyle/lib/properties/wordBreak.js | 12 - .../cssstyle/lib/properties/wordSpacing.js | 12 - .../cssstyle/lib/properties/wordWrap.js | 12 - .../cssstyle/lib/properties/writingMode.js | 12 - .../cssstyle/lib/properties/zIndex.js | 12 - .../cssstyle/lib/properties/zoom.js | 12 - .../node_modules/cssstyle/package.json | 101 - .../cssstyle/scripts/generate_properties.js | 302 - .../cssstyle/scripts/run_tests.sh | 4 - .../node_modules/cssstyle/tests/tests.js | 405 - .../node_modules/dashdash/CHANGES.md | 364 - .../node_modules/dashdash/LICENSE.txt | 24 - .../node_modules/dashdash/README.md | 574 - .../dashdash/etc/dashdash.bash_completion.in | 389 - .../node_modules/dashdash/lib/dashdash.js | 1055 - .../dashdash/node_modules/assert-plus/AUTHORS | 6 - .../node_modules/assert-plus/CHANGES.md | 14 - .../node_modules/assert-plus/README.md | 162 - .../node_modules/assert-plus/assert.js | 211 - .../node_modules/assert-plus/package.json | 107 - .../node_modules/dashdash/package.json | 117 - .../node_modules/debug/.jshintrc | 3 - .../node_modules/debug/.npmignore | 7 - .../node_modules/debug/CHANGELOG.md | 235 - .../node_modules/debug/LICENSE | 19 - .../node_modules/debug/Makefile | 37 - .../node_modules/debug/Readme.md | 199 - .../node_modules/debug/bower.json | 29 - .../node_modules/debug/browser.js | 177 - .../node_modules/debug/component.json | 19 - .../node_modules/debug/debug.js | 200 - .../node_modules/debug/index.js | 10 - .../node_modules/debug/node.js | 213 - .../node_modules/debug/package.json | 115 - .../node_modules/decamelize/index.js | 13 - .../node_modules/decamelize/license | 21 - .../node_modules/decamelize/package.json | 99 - .../node_modules/decamelize/readme.md | 48 - .../node_modules/deep-is/.npmignore | 1 - .../node_modules/deep-is/.travis.yml | 6 - .../node_modules/deep-is/LICENSE | 22 - .../node_modules/deep-is/README.markdown | 70 - .../node_modules/deep-is/example/cmp.js | 11 - .../node_modules/deep-is/index.js | 102 - .../node_modules/deep-is/package.json | 112 - .../node_modules/deep-is/test/NaN.js | 16 - .../node_modules/deep-is/test/cmp.js | 23 - .../node_modules/deep-is/test/neg-vs-pos-0.js | 15 - .../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 | 89 - .../node_modules/detect-indent/index.js | 120 - .../node_modules/detect-indent/license | 21 - .../node_modules/detect-indent/package.json | 101 - .../node_modules/detect-indent/readme.md | 110 - .../node_modules/diff/CONTRIBUTING.md | 39 - .../node_modules/diff/LICENSE | 31 - .../node_modules/diff/README.md | 198 - .../node_modules/diff/dist/diff.js | 1351 -- .../node_modules/diff/dist/diff.min.js | 316 - .../diff/examples/node_example.js | 17 - .../diff/examples/web_example.html | 29 - .../node_modules/diff/images/node_example.png | Bin 5654 -> 0 bytes .../node_modules/diff/images/web_example.png | Bin 4372 -> 0 bytes .../node_modules/diff/lib/convert/dmp.js | 24 - .../node_modules/diff/lib/convert/xml.js | 35 - .../node_modules/diff/lib/diff/base.js | 227 - .../node_modules/diff/lib/diff/character.js | 18 - .../node_modules/diff/lib/diff/css.js | 22 - .../node_modules/diff/lib/diff/json.js | 100 - .../node_modules/diff/lib/diff/line.js | 53 - .../node_modules/diff/lib/diff/sentence.js | 22 - .../node_modules/diff/lib/diff/word.js | 70 - .../node_modules/diff/lib/index.js | 71 - .../node_modules/diff/lib/patch/apply.js | 168 - .../node_modules/diff/lib/patch/create.js | 153 - .../node_modules/diff/lib/patch/merge.js | 380 - .../node_modules/diff/lib/patch/parse.js | 140 - .../node_modules/diff/lib/util/array.js | 27 - .../diff/lib/util/distance-iterator.js | 47 - .../node_modules/diff/lib/util/params.js | 18 - .../node_modules/diff/package.json | 125 - .../node_modules/diff/release-notes.md | 183 - .../node_modules/diff/runtime.js | 3 - .../node_modules/ecc-jsbn/.npmignore | 15 - .../node_modules/ecc-jsbn/LICENSE | 21 - .../node_modules/ecc-jsbn/README.md | 8 - .../node_modules/ecc-jsbn/index.js | 57 - .../node_modules/ecc-jsbn/lib/LICENSE-jsbn | 40 - .../node_modules/ecc-jsbn/lib/ec.js | 561 - .../node_modules/ecc-jsbn/lib/sec.js | 170 - .../node_modules/ecc-jsbn/package.json | 82 - .../node_modules/ecc-jsbn/test.js | 14 - .../node_modules/errno/.jshintrc | 59 - .../node_modules/errno/.npmignore | 1 - .../node_modules/errno/README.md | 141 - .../node_modules/errno/build.js | 43 - .../node_modules/errno/cli.js | 20 - .../node_modules/errno/custom.js | 55 - .../node_modules/errno/errno.js | 313 - .../node_modules/errno/package.json | 83 - .../node_modules/errno/test.js | 31 - .../node_modules/error-ex/LICENSE | 21 - .../node_modules/error-ex/README.md | 144 - .../node_modules/error-ex/index.js | 115 - .../node_modules/error-ex/package.json | 101 - .../escape-string-regexp/index.js | 11 - .../node_modules/escape-string-regexp/license | 21 - .../escape-string-regexp/package.json | 101 - .../escape-string-regexp/readme.md | 27 - .../node_modules/escodegen/LICENSE.BSD | 19 - .../node_modules/escodegen/LICENSE.source-map | 27 - .../node_modules/escodegen/README.md | 116 - .../node_modules/escodegen/bin/escodegen.js | 77 - .../node_modules/escodegen/bin/esgenerate.js | 64 - .../node_modules/escodegen/escodegen.js | 2607 --- .../node_modules/source-map/.npmignore | 2 - .../node_modules/source-map/.travis.yml | 4 - .../node_modules/source-map/CHANGELOG.md | 201 - .../escodegen/node_modules/source-map/LICENSE | 28 - .../source-map/Makefile.dryice.js | 166 - .../node_modules/source-map/README.md | 479 - .../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 - .../source-map/basic-source-map-consumer.js | 420 - .../lib/source-map/binary-search.js | 80 - .../source-map/indexed-source-map-consumer.js | 303 - .../source-map/lib/source-map/mapping-list.js | 86 - .../lib/source-map/source-map-consumer.js | 222 - .../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 | 215 - .../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 | 874 - .../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 | 299 - .../node_modules/escodegen/package.json | 117 - .../node_modules/esprima/ChangeLog | 174 - .../node_modules/esprima/LICENSE.BSD | 21 - .../node_modules/esprima/README.md | 27 - .../node_modules/esprima/bin/esparse.js | 126 - .../node_modules/esprima/bin/esvalidate.js | 199 - .../node_modules/esprima/esprima.js | 5740 ------ .../node_modules/esprima/package.json | 147 - .../node_modules/estraverse/.editorconfig | 10 - .../node_modules/estraverse/.jshintrc | 16 - .../node_modules/estraverse/LICENSE.BSD | 19 - .../node_modules/estraverse/README.md | 124 - .../node_modules/estraverse/estraverse.js | 845 - .../node_modules/estraverse/gulpfile.js | 70 - .../node_modules/estraverse/package.json | 87 - .../node_modules/esutils/LICENSE.BSD | 19 - .../node_modules/esutils/README.md | 169 - .../node_modules/esutils/lib/ast.js | 144 - .../node_modules/esutils/lib/code.js | 135 - .../node_modules/esutils/lib/keyword.js | 165 - .../node_modules/esutils/lib/utils.js | 33 - .../node_modules/esutils/package.json | 98 - .../node_modules/exec-sh/.jshintrc | 120 - .../node_modules/exec-sh/.npmignore | 2 - .../node_modules/exec-sh/.travis.yml | 38 - .../node_modules/exec-sh/LICENSE | 21 - .../node_modules/exec-sh/README.md | 100 - .../node_modules/exec-sh/example/example.js | 18 - .../node_modules/exec-sh/lib/exec-sh.js | 89 - .../node_modules/exec-sh/package.json | 97 - .../node_modules/exec-sh/test/exec-sh.js | 151 - .../node_modules/expand-brackets/LICENSE | 21 - .../node_modules/expand-brackets/README.md | 107 - .../node_modules/expand-brackets/index.js | 163 - .../node_modules/expand-brackets/package.json | 128 - .../node_modules/expand-range/LICENSE | 24 - .../node_modules/expand-range/README.md | 145 - .../node_modules/expand-range/index.js | 43 - .../node_modules/expand-range/package.json | 135 - .../node_modules/extend/.eslintrc | 192 - .../node_modules/extend/.jscs.json | 104 - .../node_modules/extend/.npmignore | 1 - .../node_modules/extend/.travis.yml | 44 - .../node_modules/extend/CHANGELOG.md | 69 - .../node_modules/extend/LICENSE | 23 - .../node_modules/extend/README.md | 62 - .../node_modules/extend/component.json | 32 - .../node_modules/extend/index.js | 86 - .../node_modules/extend/package.json | 98 - .../node_modules/extglob/LICENSE | 21 - .../node_modules/extglob/README.md | 88 - .../node_modules/extglob/index.js | 178 - .../node_modules/extglob/package.json | 108 - .../node_modules/extsprintf/.gitmodules | 6 - .../node_modules/extsprintf/LICENSE | 19 - .../node_modules/extsprintf/Makefile | 23 - .../node_modules/extsprintf/Makefile.deps | 39 - .../node_modules/extsprintf/Makefile.targ | 285 - .../node_modules/extsprintf/README.md | 39 - .../extsprintf/examples/simple.js | 2 - .../node_modules/extsprintf/jsl.node.conf | 137 - .../node_modules/extsprintf/lib/extsprintf.js | 166 - .../node_modules/extsprintf/package.json | 66 - .../node_modules/fast-levenshtein/LICENSE.md | 25 - .../node_modules/fast-levenshtein/README.md | 104 - .../fast-levenshtein/levenshtein.js | 102 - .../fast-levenshtein/package.json | 100 - .../node_modules/fb-watchman/README.md | 34 - .../node_modules/fb-watchman/index.js | 321 - .../node_modules/fb-watchman/package.json | 89 - .../node_modules/filename-regex/README.md | 51 - .../node_modules/filename-regex/index.js | 10 - .../node_modules/filename-regex/package.json | 92 - .../node_modules/fileset/.npmignore | 1 - .../node_modules/fileset/.travis.yml | 6 - .../node_modules/fileset/CHANGELOG.md | 25 - .../node_modules/fileset/LICENSE-MIT | 22 - .../node_modules/fileset/README.md | 97 - .../node_modules/fileset/lib/fileset.js | 102 - .../fileset/node_modules/minimatch/LICENSE | 15 - .../fileset/node_modules/minimatch/README.md | 216 - .../fileset/node_modules/minimatch/browser.js | 1159 -- .../node_modules/minimatch/minimatch.js | 912 - .../node_modules/minimatch/package.json | 89 - .../node_modules/fileset/package.json | 81 - .../tests/fixtures/an (odd) filename.js | 1 - .../node_modules/fileset/tests/helper.js | 61 - .../node_modules/fileset/tests/test-sync.js | 37 - .../node_modules/fileset/tests/test.js | 137 - .../node_modules/fill-range/LICENSE | 21 - .../node_modules/fill-range/README.md | 290 - .../node_modules/fill-range/index.js | 408 - .../node_modules/fill-range/package.json | 123 - .../node_modules/find-up/index.js | 53 - .../node_modules/find-up/license | 21 - .../node_modules/find-up/package.json | 111 - .../node_modules/find-up/readme.md | 72 - .../node_modules/for-in/LICENSE | 21 - .../node_modules/for-in/README.md | 74 - .../node_modules/for-in/index.js | 16 - .../node_modules/for-in/package.json | 119 - .../node_modules/for-own/LICENSE | 21 - .../node_modules/for-own/README.md | 52 - .../node_modules/for-own/index.js | 19 - .../node_modules/for-own/package.json | 120 - .../node_modules/forever-agent/LICENSE | 55 - .../node_modules/forever-agent/README.md | 4 - .../node_modules/forever-agent/index.js | 138 - .../node_modules/forever-agent/package.json | 80 - .../node_modules/form-data/License | 19 - .../node_modules/form-data/README.md | 217 - .../node_modules/form-data/lib/browser.js | 2 - .../node_modules/form-data/lib/form_data.js | 440 - .../node_modules/form-data/lib/populate.js | 10 - .../node_modules/form-data/package.json | 137 - .../node_modules/fs.realpath/LICENSE | 43 - .../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 | 86 - .../node_modules/generate-function/.npmignore | 1 - .../generate-function/.travis.yml | 3 - .../node_modules/generate-function/README.md | 72 - .../node_modules/generate-function/example.js | 27 - .../node_modules/generate-function/index.js | 61 - .../generate-function/package.json | 79 - .../node_modules/generate-function/test.js | 33 - .../generate-object-property/.npmignore | 1 - .../generate-object-property/.travis.yml | 3 - .../generate-object-property/LICENSE | 21 - .../generate-object-property/README.md | 19 - .../generate-object-property/index.js | 12 - .../generate-object-property/package.json | 76 - .../generate-object-property/test.js | 12 - .../node_modules/get-caller-file/README.md | 4 - .../node_modules/get-caller-file/index.js | 20 - .../node_modules/get-caller-file/package.json | 85 - .../node_modules/getpass/.npmignore | 8 - .../node_modules/getpass/.travis.yml | 9 - .../node_modules/getpass/LICENSE | 18 - .../node_modules/getpass/README.md | 32 - .../node_modules/getpass/lib/index.js | 123 - .../getpass/node_modules/assert-plus/AUTHORS | 6 - .../node_modules/assert-plus/CHANGES.md | 14 - .../node_modules/assert-plus/README.md | 162 - .../node_modules/assert-plus/assert.js | 211 - .../node_modules/assert-plus/package.json | 107 - .../node_modules/getpass/package.json | 82 - .../node_modules/glob-base/LICENSE | 21 - .../node_modules/glob-base/README.md | 158 - .../node_modules/glob-base/index.js | 51 - .../node_modules/glob-base/package.json | 108 - .../node_modules/glob-parent/.npmignore | 4 - .../node_modules/glob-parent/.travis.yml | 8 - .../node_modules/glob-parent/LICENSE | 15 - .../node_modules/glob-parent/README.md | 43 - .../node_modules/glob-parent/index.js | 10 - .../node_modules/glob-parent/package.json | 85 - .../node_modules/glob-parent/test.js | 28 - .../node_modules/glob/LICENSE | 15 - .../node_modules/glob/README.md | 377 - .../node_modules/glob/common.js | 245 - .../node_modules/glob/glob.js | 752 - .../node_modules/glob/package.json | 99 - .../node_modules/glob/sync.js | 460 - .../node_modules/globals/globals.json | 1288 -- .../node_modules/globals/index.js | 1 - .../node_modules/globals/license | 21 - .../node_modules/globals/package.json | 107 - .../node_modules/globals/readme.md | 41 - .../node_modules/graceful-fs/LICENSE | 15 - .../node_modules/graceful-fs/README.md | 133 - .../node_modules/graceful-fs/fs.js | 21 - .../node_modules/graceful-fs/graceful-fs.js | 262 - .../graceful-fs/legacy-streams.js | 118 - .../node_modules/graceful-fs/package.json | 104 - .../node_modules/graceful-fs/polyfills.js | 330 - .../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 | 75 - .../node_modules/growly/HISTORY.md | 5 - .../node_modules/growly/README.md | 95 - .../node_modules/growly/example/bakery.js | 22 - .../node_modules/growly/example/cake.png | Bin 14813 -> 0 bytes .../node_modules/growly/example/muffin.png | Bin 16978 -> 0 bytes .../node_modules/growly/example/simple.js | 3 - .../node_modules/growly/lib/gntp.js | 200 - .../node_modules/growly/lib/growly.js | 193 - .../node_modules/growly/package.json | 86 - .../node_modules/handlebars/.gitmodules | 3 - .../node_modules/handlebars/.istanbul.yml | 2 - .../node_modules/handlebars/.npmignore | 25 - .../node_modules/handlebars/CONTRIBUTING.md | 99 - .../node_modules/handlebars/FAQ.md | 60 - .../node_modules/handlebars/LICENSE | 19 - .../node_modules/handlebars/README.markdown | 167 - .../node_modules/handlebars/bin/handlebars | 128 - .../handlebars/dist/amd/handlebars.js | 51 - .../handlebars/dist/amd/handlebars.runtime.js | 44 - .../handlebars/dist/amd/handlebars/base.js | 96 - .../dist/amd/handlebars/compiler/ast.js | 31 - .../dist/amd/handlebars/compiler/base.js | 36 - .../dist/amd/handlebars/compiler/code-gen.js | 163 - .../dist/amd/handlebars/compiler/compiler.js | 568 - .../dist/amd/handlebars/compiler/helpers.js | 230 - .../compiler/javascript-compiler.js | 1120 - .../dist/amd/handlebars/compiler/parser.js | 740 - .../dist/amd/handlebars/compiler/printer.js | 186 - .../dist/amd/handlebars/compiler/visitor.js | 138 - .../handlebars/compiler/whitespace-control.js | 219 - .../dist/amd/handlebars/decorators.js | 16 - .../dist/amd/handlebars/decorators/inline.js | 25 - .../dist/amd/handlebars/exception.js | 50 - .../handlebars/dist/amd/handlebars/helpers.js | 34 - .../helpers/block-helper-missing.js | 35 - .../dist/amd/handlebars/helpers/each.js | 89 - .../amd/handlebars/helpers/helper-missing.js | 22 - .../dist/amd/handlebars/helpers/if.js | 25 - .../dist/amd/handlebars/helpers/log.js | 24 - .../dist/amd/handlebars/helpers/lookup.js | 10 - .../dist/amd/handlebars/helpers/with.js | 29 - .../handlebars/dist/amd/handlebars/logger.js | 44 - .../dist/amd/handlebars/no-conflict.js | 18 - .../handlebars/dist/amd/handlebars/runtime.js | 287 - .../dist/amd/handlebars/safe-string.js | 15 - .../handlebars/dist/amd/handlebars/utils.js | 126 - .../handlebars/dist/amd/precompiler.js | 292 - .../handlebars/dist/cjs/handlebars.js | 65 - .../handlebars/dist/cjs/handlebars.runtime.js | 66 - .../handlebars/dist/cjs/handlebars/base.js | 104 - .../dist/cjs/handlebars/compiler/ast.js | 31 - .../dist/cjs/handlebars/compiler/base.js | 48 - .../dist/cjs/handlebars/compiler/code-gen.js | 166 - .../dist/cjs/handlebars/compiler/compiler.js | 572 - .../dist/cjs/handlebars/compiler/helpers.js | 230 - .../compiler/javascript-compiler.js | 1128 - .../dist/cjs/handlebars/compiler/parser.js | 738 - .../dist/cjs/handlebars/compiler/printer.js | 186 - .../dist/cjs/handlebars/compiler/visitor.js | 140 - .../handlebars/compiler/whitespace-control.js | 221 - .../dist/cjs/handlebars/decorators.js | 16 - .../dist/cjs/handlebars/decorators/inline.js | 29 - .../dist/cjs/handlebars/exception.js | 51 - .../handlebars/dist/cjs/handlebars/helpers.js | 46 - .../helpers/block-helper-missing.js | 39 - .../dist/cjs/handlebars/helpers/each.js | 94 - .../cjs/handlebars/helpers/helper-missing.js | 25 - .../dist/cjs/handlebars/helpers/if.js | 29 - .../dist/cjs/handlebars/helpers/log.js | 26 - .../dist/cjs/handlebars/helpers/lookup.js | 12 - .../dist/cjs/handlebars/helpers/with.js | 33 - .../handlebars/dist/cjs/handlebars/logger.js | 47 - .../dist/cjs/handlebars/no-conflict.js | 20 - .../handlebars/dist/cjs/handlebars/runtime.js | 297 - .../dist/cjs/handlebars/safe-string.js | 15 - .../handlebars/dist/cjs/handlebars/utils.js | 124 - .../handlebars/dist/cjs/precompiler.js | 308 - .../handlebars/dist/handlebars.amd.js | 4339 ---- .../handlebars/dist/handlebars.amd.min.js | 29 - .../handlebars/dist/handlebars.js | 4713 ----- .../handlebars/dist/handlebars.min.js | 81 - .../handlebars/dist/handlebars.runtime.amd.js | 1033 - .../dist/handlebars.runtime.amd.min.js | 27 - .../handlebars/dist/handlebars.runtime.js | 1343 -- .../handlebars/dist/handlebars.runtime.min.js | 79 - .../handlebars/docs/compiler-api.md | 316 - .../handlebars/docs/decorators-api.md | 19 - .../node_modules/handlebars/lib/handlebars.js | 41 - .../handlebars/lib/handlebars.runtime.js | 37 - .../handlebars/lib/handlebars/base.js | 78 - .../handlebars/lib/handlebars/compiler/ast.js | 28 - .../lib/handlebars/compiler/base.js | 24 - .../lib/handlebars/compiler/code-gen.js | 168 - .../lib/handlebars/compiler/compiler.js | 558 - .../lib/handlebars/compiler/helpers.js | 212 - .../compiler/javascript-compiler.js | 1137 - .../lib/handlebars/compiler/parser.js | 623 - .../lib/handlebars/compiler/printer.js | 171 - .../lib/handlebars/compiler/visitor.js | 129 - .../handlebars/compiler/whitespace-control.js | 216 - .../handlebars/lib/handlebars/decorators.js | 6 - .../lib/handlebars/decorators/inline.js | 22 - .../handlebars/lib/handlebars/exception.js | 46 - .../handlebars/lib/handlebars/helpers.js | 17 - .../helpers/block-helper-missing.js | 32 - .../handlebars/lib/handlebars/helpers/each.js | 79 - .../lib/handlebars/helpers/helper-missing.js | 13 - .../handlebars/lib/handlebars/helpers/if.js | 20 - .../handlebars/lib/handlebars/helpers/log.js | 19 - .../lib/handlebars/helpers/lookup.js | 5 - .../handlebars/lib/handlebars/helpers/with.js | 24 - .../handlebars/lib/handlebars/logger.js | 35 - .../handlebars/lib/handlebars/no-conflict.js | 13 - .../handlebars/lib/handlebars/runtime.js | 274 - .../handlebars/lib/handlebars/safe-string.js | 10 - .../handlebars/lib/handlebars/utils.js | 108 - .../node_modules/handlebars/lib/index.js | 25 - .../handlebars/lib/precompiler.js | 276 - .../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 | 226 - .../node_modules/handlebars/package.json | 148 - .../node_modules/handlebars/print-script | 95 - .../node_modules/handlebars/release-notes.md | 483 - .../node_modules/handlebars/runtime.js | 3 - .../node_modules/har-validator/LICENSE | 13 - .../node_modules/har-validator/README.md | 309 - .../har-validator/bin/har-validator | 56 - .../node_modules/har-validator/lib/async.js | 14 - .../node_modules/har-validator/lib/error.js | 10 - .../node_modules/har-validator/lib/index.js | 22 - .../node_modules/har-validator/lib/runner.js | 29 - .../har-validator/lib/schemas/cache.json | 13 - .../har-validator/lib/schemas/cacheEntry.json | 31 - .../har-validator/lib/schemas/content.json | 27 - .../har-validator/lib/schemas/cookie.json | 34 - .../har-validator/lib/schemas/creator.json | 18 - .../har-validator/lib/schemas/entry.json | 51 - .../har-validator/lib/schemas/har.json | 11 - .../har-validator/lib/schemas/index.js | 49 - .../har-validator/lib/schemas/log.json | 34 - .../har-validator/lib/schemas/page.json | 30 - .../lib/schemas/pageTimings.json | 16 - .../har-validator/lib/schemas/postData.json | 41 - .../har-validator/lib/schemas/record.json | 18 - .../har-validator/lib/schemas/request.json | 55 - .../har-validator/lib/schemas/response.json | 52 - .../har-validator/lib/schemas/timings.json | 40 - .../node_modules/har-validator/package.json | 112 - .../node_modules/has-ansi/index.js | 4 - .../node_modules/has-ansi/license | 21 - .../node_modules/has-ansi/package.json | 110 - .../node_modules/has-ansi/readme.md | 36 - .../node_modules/has-flag/index.js | 10 - .../node_modules/has-flag/license | 21 - .../node_modules/has-flag/package.json | 111 - .../node_modules/has-flag/readme.md | 64 - .../node_modules/hawk/.npmignore | 20 - .../node_modules/hawk/.travis.yml | 5 - .../node_modules/hawk/LICENSE | 28 - .../node_modules/hawk/README.md | 634 - .../node_modules/hawk/bower.json | 24 - .../node_modules/hawk/component.json | 19 - .../node_modules/hawk/dist/client.js | 343 - .../node_modules/hawk/example/usage.js | 78 - .../node_modules/hawk/images/hawk.png | Bin 6945 -> 0 bytes .../node_modules/hawk/images/logo.png | Bin 71732 -> 0 bytes .../node_modules/hawk/lib/browser.js | 637 - .../node_modules/hawk/lib/client.js | 369 - .../node_modules/hawk/lib/crypto.js | 126 - .../node_modules/hawk/lib/index.js | 15 - .../node_modules/hawk/lib/server.js | 548 - .../node_modules/hawk/lib/utils.js | 184 - .../node_modules/hawk/package.json | 93 - .../node_modules/hawk/test/browser.js | 1492 -- .../node_modules/hawk/test/client.js | 440 - .../node_modules/hawk/test/crypto.js | 70 - .../node_modules/hawk/test/index.js | 378 - .../node_modules/hawk/test/readme.js | 95 - .../node_modules/hawk/test/server.js | 1329 -- .../node_modules/hawk/test/uri.js | 838 - .../node_modules/hawk/test/utils.js | 149 - .../node_modules/hoek/.npmignore | 18 - .../node_modules/hoek/.travis.yml | 7 - .../node_modules/hoek/CONTRIBUTING.md | 1 - .../node_modules/hoek/LICENSE | 31 - .../node_modules/hoek/README.md | 584 - .../node_modules/hoek/images/hoek.png | Bin 37939 -> 0 bytes .../node_modules/hoek/lib/escape.js | 132 - .../node_modules/hoek/lib/index.js | 993 - .../node_modules/hoek/package.json | 88 - .../node_modules/hoek/test/escaper.js | 88 - .../node_modules/hoek/test/index.js | 2513 --- .../node_modules/hoek/test/modules/ignore.txt | 0 .../node_modules/hoek/test/modules/test1.js | 1 - .../node_modules/hoek/test/modules/test2.js | 1 - .../node_modules/hoek/test/modules/test3.js | 1 - .../node_modules/home-or-tmp/index.js | 5 - .../node_modules/home-or-tmp/license | 21 - .../node_modules/home-or-tmp/package.json | 98 - .../node_modules/home-or-tmp/readme.md | 32 - .../node_modules/hosted-git-info/.npmignore | 2 - .../node_modules/hosted-git-info/LICENSE | 13 - .../node_modules/hosted-git-info/README.md | 99 - .../hosted-git-info/git-host-info.js | 64 - .../node_modules/hosted-git-info/git-host.js | 96 - .../node_modules/hosted-git-info/index.js | 103 - .../node_modules/hosted-git-info/package.json | 94 - .../html-encoding-sniffer/LICENSE.txt | 19 - .../html-encoding-sniffer/README.md | 38 - .../lib/html-encoding-sniffer.js | 302 - .../html-encoding-sniffer/package.json | 90 - .../http-signature/.dir-locals.el | 6 - .../node_modules/http-signature/.npmignore | 7 - .../node_modules/http-signature/CHANGES.md | 46 - .../node_modules/http-signature/LICENSE | 18 - .../node_modules/http-signature/README.md | 79 - .../http-signature/http_signing.md | 363 - .../node_modules/http-signature/lib/index.js | 29 - .../node_modules/http-signature/lib/parser.js | 318 - .../node_modules/http-signature/lib/signer.js | 399 - .../node_modules/http-signature/lib/utils.js | 112 - .../node_modules/http-signature/lib/verify.js | 88 - .../node_modules/http-signature/package.json | 108 - .../node_modules/iconv-lite/.npmignore | 6 - .../node_modules/iconv-lite/.travis.yml | 22 - .../node_modules/iconv-lite/Changelog.md | 108 - .../node_modules/iconv-lite/LICENSE | 21 - .../node_modules/iconv-lite/README.md | 159 - .../iconv-lite/encodings/dbcs-codec.js | 554 - .../iconv-lite/encodings/dbcs-data.js | 176 - .../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 | 176 - .../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.d.ts | 31 - .../node_modules/iconv-lite/lib/index.js | 141 - .../node_modules/iconv-lite/lib/streams.js | 120 - .../node_modules/iconv-lite/package.json | 150 - .../node_modules/inflight/LICENSE | 15 - .../node_modules/inflight/README.md | 37 - .../node_modules/inflight/inflight.js | 54 - .../node_modules/inflight/package.json | 98 - .../node_modules/inherits/LICENSE | 16 - .../node_modules/inherits/README.md | 42 - .../node_modules/inherits/inherits.js | 7 - .../node_modules/inherits/inherits_browser.js | 23 - .../node_modules/inherits/package.json | 90 - .../node_modules/invariant/CHANGELOG.md | 33 - .../node_modules/invariant/LICENSE | 27 - .../node_modules/invariant/README.md | 37 - .../node_modules/invariant/browser.js | 51 - .../node_modules/invariant/invariant.js | 53 - .../node_modules/invariant/invariant.js.flow | 7 - .../node_modules/invariant/package.json | 101 - .../node_modules/invert-kv/index.js | 15 - .../node_modules/invert-kv/package.json | 88 - .../node_modules/invert-kv/readme.md | 25 - .../node_modules/is-arrayish/.editorconfig | 18 - .../node_modules/is-arrayish/.istanbul.yml | 4 - .../node_modules/is-arrayish/.npmignore | 5 - .../node_modules/is-arrayish/.travis.yml | 17 - .../node_modules/is-arrayish/LICENSE | 21 - .../node_modules/is-arrayish/README.md | 16 - .../node_modules/is-arrayish/index.js | 10 - .../node_modules/is-arrayish/package.json | 90 - .../node_modules/is-buffer/.travis.yml | 8 - .../node_modules/is-buffer/.zuul.yml | 14 - .../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 | 104 - .../node_modules/is-buffer/test/basic.js | 25 - .../node_modules/is-builtin-module/index.js | 10 - .../node_modules/is-builtin-module/license | 21 - .../is-builtin-module/package.json | 98 - .../node_modules/is-builtin-module/readme.md | 33 - .../node_modules/is-ci/.npmignore | 1 - .../node_modules/is-ci/.travis.yml | 7 - .../node_modules/is-ci/LICENSE | 21 - .../node_modules/is-ci/README.md | 54 - .../node_modules/is-ci/index.js | 3 - .../node_modules/is-ci/package.json | 93 - .../node_modules/is-ci/test.js | 17 - .../node_modules/is-dotfile/LICENSE | 21 - .../node_modules/is-dotfile/README.md | 74 - .../node_modules/is-dotfile/index.js | 15 - .../node_modules/is-dotfile/package.json | 108 - .../node_modules/is-equal-shallow/LICENSE | 21 - .../node_modules/is-equal-shallow/README.md | 90 - .../node_modules/is-equal-shallow/index.js | 27 - .../is-equal-shallow/package.json | 112 - .../node_modules/is-extendable/LICENSE | 21 - .../node_modules/is-extendable/README.md | 72 - .../node_modules/is-extendable/index.js | 13 - .../node_modules/is-extendable/package.json | 106 - .../node_modules/is-extglob/LICENSE | 21 - .../node_modules/is-extglob/README.md | 75 - .../node_modules/is-extglob/index.js | 11 - .../node_modules/is-extglob/package.json | 102 - .../node_modules/is-finite/index.js | 6 - .../node_modules/is-finite/license | 21 - .../node_modules/is-finite/package.json | 95 - .../node_modules/is-finite/readme.md | 28 - .../is-fullwidth-code-point/index.js | 46 - .../is-fullwidth-code-point/license | 21 - .../is-fullwidth-code-point/package.json | 100 - .../is-fullwidth-code-point/readme.md | 39 - .../node_modules/is-glob/LICENSE | 21 - .../node_modules/is-glob/README.md | 105 - .../node_modules/is-glob/index.js | 14 - .../node_modules/is-glob/package.json | 118 - .../node_modules/is-my-json-valid/.npmignore | 2 - .../node_modules/is-my-json-valid/.travis.yml | 3 - .../node_modules/is-my-json-valid/LICENSE | 21 - .../node_modules/is-my-json-valid/README.md | 173 - .../node_modules/is-my-json-valid/example.js | 18 - .../node_modules/is-my-json-valid/formats.js | 14 - .../node_modules/is-my-json-valid/index.js | 594 - .../is-my-json-valid/package.json | 108 - .../node_modules/is-my-json-valid/require.js | 12 - .../is-my-json-valid/test/fixtures/cosmic.js | 84 - .../json-schema-draft4/additionalItems.json | 82 - .../additionalProperties.json | 88 - .../test/json-schema-draft4/allOf.json | 112 - .../test/json-schema-draft4/anyOf.json | 68 - .../test/json-schema-draft4/bignum.json | 107 - .../test/json-schema-draft4/default.json | 49 - .../test/json-schema-draft4/definitions.json | 32 - .../test/json-schema-draft4/dependencies.json | 113 - .../test/json-schema-draft4/enum.json | 72 - .../test/json-schema-draft4/format.json | 143 - .../test/json-schema-draft4/items.json | 46 - .../test/json-schema-draft4/maxItems.json | 28 - .../test/json-schema-draft4/maxLength.json | 28 - .../json-schema-draft4/maxProperties.json | 28 - .../test/json-schema-draft4/maximum.json | 42 - .../test/json-schema-draft4/minItems.json | 28 - .../test/json-schema-draft4/minLength.json | 28 - .../json-schema-draft4/minProperties.json | 28 - .../test/json-schema-draft4/minimum.json | 42 - .../test/json-schema-draft4/multipleOf.json | 96 - .../test/json-schema-draft4/not.json | 96 - .../json-schema-draft4/nullAndFormat.json | 18 - .../json-schema-draft4/nullAndObject.json | 18 - .../test/json-schema-draft4/oneOf.json | 68 - .../test/json-schema-draft4/pattern.json | 23 - .../json-schema-draft4/patternProperties.json | 110 - .../test/json-schema-draft4/properties.json | 92 - .../test/json-schema-draft4/ref.json | 128 - .../test/json-schema-draft4/refRemote.json | 74 - .../test/json-schema-draft4/required.json | 39 - .../test/json-schema-draft4/type.json | 330 - .../test/json-schema-draft4/uniqueItems.json | 79 - .../is-my-json-valid/test/json-schema.js | 23 - .../is-my-json-valid/test/misc.js | 471 - .../node_modules/is-number/LICENSE | 21 - .../node_modules/is-number/README.md | 103 - .../node_modules/is-number/index.js | 19 - .../node_modules/is-number/package.json | 118 - .../node_modules/is-posix-bracket/LICENSE | 21 - .../node_modules/is-posix-bracket/README.md | 88 - .../node_modules/is-posix-bracket/index.js | 10 - .../is-posix-bracket/package.json | 123 - .../node_modules/is-primitive/LICENSE | 21 - .../node_modules/is-primitive/README.md | 57 - .../node_modules/is-primitive/index.js | 13 - .../node_modules/is-primitive/package.json | 96 - .../node_modules/is-property/.npmignore | 17 - .../node_modules/is-property/LICENSE | 22 - .../node_modules/is-property/README.md | 28 - .../node_modules/is-property/is-property.js | 5 - .../node_modules/is-property/package.json | 84 - .../node_modules/is-typedarray/LICENSE.md | 18 - .../node_modules/is-typedarray/README.md | 16 - .../node_modules/is-typedarray/index.js | 41 - .../node_modules/is-typedarray/package.json | 82 - .../node_modules/is-typedarray/test.js | 34 - .../node_modules/is-utf8/LICENSE | 9 - .../node_modules/is-utf8/README.md | 16 - .../node_modules/is-utf8/is-utf8.js | 76 - .../node_modules/is-utf8/package.json | 78 - .../node_modules/isarray/.npmignore | 1 - .../node_modules/isarray/.travis.yml | 4 - .../node_modules/isarray/Makefile | 6 - .../node_modules/isarray/README.md | 60 - .../node_modules/isarray/component.json | 19 - .../node_modules/isarray/index.js | 5 - .../node_modules/isarray/package.json | 96 - .../node_modules/isarray/test.js | 20 - .../node_modules/isexe/.npmignore | 2 - .../node_modules/isexe/LICENSE | 15 - .../node_modules/isexe/README.md | 51 - .../node_modules/isexe/access.js | 15 - .../node_modules/isexe/index.js | 59 - .../node_modules/isexe/mode.js | 37 - .../node_modules/isexe/package.json | 84 - .../node_modules/isexe/test/basic.js | 211 - .../node_modules/isexe/windows.js | 36 - .../node_modules/isobject/LICENSE | 21 - .../node_modules/isobject/README.md | 112 - .../node_modules/isobject/index.js | 14 - .../node_modules/isobject/package.json | 129 - .../node_modules/isstream/.jshintrc | 59 - .../node_modules/isstream/.npmignore | 1 - .../node_modules/isstream/.travis.yml | 12 - .../node_modules/isstream/LICENSE.md | 11 - .../node_modules/isstream/README.md | 66 - .../node_modules/isstream/isstream.js | 27 - .../node_modules/isstream/package.json | 85 - .../node_modules/isstream/test.js | 168 - .../node_modules/istanbul-api/.doc.yml | 3 - .../node_modules/istanbul-api/LICENSE | 24 - .../istanbul-api/docs/assets/anchor.js | 197 - .../istanbul-api/docs/assets/bass.css | 850 - .../istanbul-api/docs/assets/github.css | 123 - .../istanbul-api/docs/assets/site.js | 40 - .../istanbul-api/docs/assets/style.css | 95 - .../node_modules/istanbul-api/docs/index.html | 888 - .../node_modules/istanbul-api/index.js | 49 - .../node_modules/istanbul-api/lib/config.js | 498 - .../istanbul-api/lib/file-matcher.js | 77 - .../istanbul-api/lib/input-error.js | 9 - .../node_modules/istanbul-api/lib/reporter.js | 89 - .../istanbul-api/lib/run-check-coverage.js | 148 - .../istanbul-api/lib/run-cover.js | 197 - .../istanbul-api/lib/run-instrument.js | 208 - .../istanbul-api/lib/run-reports.js | 53 - .../node_modules/istanbul-api/package.json | 104 - .../istanbul-lib-coverage/.doc.yml | 3 - .../istanbul-lib-coverage/CHANGELOG.md | 11 - .../istanbul-lib-coverage/LICENSE | 24 - .../istanbul-lib-coverage/README.md | 32 - .../istanbul-lib-coverage/index.js | 64 - .../istanbul-lib-coverage/lib/coverage-map.js | 116 - .../istanbul-lib-coverage/lib/file.js | 331 - .../istanbul-lib-coverage/package.json | 106 - .../node_modules/istanbul-lib-hook/.doc.yml | 3 - .../node_modules/istanbul-lib-hook/LICENSE | 24 - .../node_modules/istanbul-lib-hook/README.md | 6 - .../istanbul-lib-hook/docs/assets/anchor.js | 197 - .../istanbul-lib-hook/docs/assets/bass.css | 850 - .../istanbul-lib-hook/docs/assets/github.css | 123 - .../istanbul-lib-hook/docs/assets/site.js | 40 - .../istanbul-lib-hook/docs/assets/style.css | 95 - .../istanbul-lib-hook/docs/index.html | 265 - .../node_modules/istanbul-lib-hook/index.js | 5 - .../istanbul-lib-hook/lib/hook.js | 183 - .../istanbul-lib-hook/package.json | 87 - .../5fa375d5572b5deb0d331d6121bbac6d.json | 1 - .../9d2485ffab3df61c8f8edab7e5285a3f.json | 1 - .../istanbul-lib-instrument/CHANGELOG.md | 81 - .../istanbul-lib-instrument/LICENSE | 24 - .../istanbul-lib-instrument/README.md | 24 - .../istanbul-lib-instrument/dist/constants.js | 19 - .../istanbul-lib-instrument/dist/index.js | 34 - .../dist/instrumenter.js | 206 - .../dist/read-coverage.js | 78 - .../dist/source-coverage.js | 139 - .../istanbul-lib-instrument/dist/visitor.js | 528 - .../istanbul-lib-instrument/package.json | 125 - .../node_modules/istanbul-lib-report/.doc.yml | 3 - .../node_modules/istanbul-lib-report/LICENSE | 24 - .../istanbul-lib-report/README.md | 7 - .../istanbul-lib-report/docs/assets/anchor.js | 197 - .../istanbul-lib-report/docs/assets/bass.css | 850 - .../docs/assets/github.css | 123 - .../istanbul-lib-report/docs/assets/site.js | 40 - .../istanbul-lib-report/docs/assets/style.css | 95 - .../istanbul-lib-report/docs/index.html | 1238 -- .../node_modules/istanbul-lib-report/index.js | 58 - .../istanbul-lib-report/lib/context.js | 122 - .../istanbul-lib-report/lib/file-writer.js | 165 - .../istanbul-lib-report/lib/path.js | 161 - .../istanbul-lib-report/lib/summarizer.js | 284 - .../istanbul-lib-report/lib/tree.js | 167 - .../istanbul-lib-report/lib/watermarks.js | 14 - .../istanbul-lib-report/lib/xml-writer.js | 87 - .../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 | 120 - .../node_modules/supports-color/readme.md | 60 - .../istanbul-lib-report/package.json | 96 - .../istanbul-lib-source-maps/.doc.yml | 3 - .../istanbul-lib-source-maps/.editorconfig | 16 - .../istanbul-lib-source-maps/CHANGELOG.md | 41 - .../istanbul-lib-source-maps/LICENSE | 24 - .../istanbul-lib-source-maps/README.md | 6 - .../istanbul-lib-source-maps/index.js | 17 - .../istanbul-lib-source-maps/lib/map-store.js | 163 - .../istanbul-lib-source-maps/lib/mapped.js | 120 - .../istanbul-lib-source-maps/lib/pathutils.js | 17 - .../lib/source-store.js | 80 - .../lib/transformer.js | 182 - .../istanbul-lib-source-maps/package.json | 104 - .../node_modules/istanbul-reports/.doc.yml | 3 - .../8762ed8bd43477558a4fdec47d8226a0.json | 1 - .../cdd3cb7496f82074334394a6842dc035.json | 1 - .../e93f82b9c11758b8ebf42d42e39acc38.json | 1 - .../istanbul-reports/CHANGELOG.md | 14 - .../node_modules/istanbul-reports/LICENSE | 24 - .../node_modules/istanbul-reports/README.md | 13 - .../node_modules/istanbul-reports/index.js | 19 - .../istanbul-reports/lib/clover/index.js | 164 - .../istanbul-reports/lib/cobertura/index.js | 142 - .../istanbul-reports/lib/html/annotator.js | 230 - .../istanbul-reports/lib/html/assets/base.css | 212 - .../lib/html/assets/sort-arrow-sprite.png | Bin 209 -> 0 bytes .../lib/html/assets/sorter.js | 158 - .../lib/html/assets/vendor/prettify.css | 1 - .../lib/html/assets/vendor/prettify.js | 1 - .../istanbul-reports/lib/html/helpers.js | 79 - .../istanbul-reports/lib/html/index.js | 224 - .../lib/html/insertion-text.js | 108 - .../lib/html/templates/foot.txt | 20 - .../lib/html/templates/head.txt | 60 - .../lib/json-summary/index.js | 49 - .../istanbul-reports/lib/json/index.js | 39 - .../istanbul-reports/lib/lcov/index.js | 29 - .../istanbul-reports/lib/lcovonly/index.js | 69 - .../istanbul-reports/lib/none/index.js | 9 - .../istanbul-reports/lib/teamcity/index.js | 45 - .../istanbul-reports/lib/text-lcov/index.js | 14 - .../lib/text-summary/index.js | 49 - .../istanbul-reports/lib/text/index.js | 179 - .../istanbul-reports/package.json | 97 - .../node_modules/istanbul/CHANGELOG.md | 362 - .../node_modules/istanbul/LICENSE | 24 - .../node_modules/istanbul/README.md | 288 - .../node_modules/istanbul/index.js | 153 - .../node_modules/istanbul/lib/assets/base.css | 213 - .../istanbul/lib/assets/sort-arrow-sprite.png | Bin 209 -> 0 bytes .../istanbul/lib/assets/sorter.js | 158 - .../istanbul/lib/assets/vendor/prettify.css | 1 - .../istanbul/lib/assets/vendor/prettify.js | 1 - .../node_modules/istanbul/lib/cli.js | 99 - .../node_modules/istanbul/lib/collector.js | 122 - .../istanbul/lib/command/check-coverage.js | 195 - .../lib/command/common/run-with-cover.js | 261 - .../istanbul/lib/command/cover.js | 33 - .../node_modules/istanbul/lib/command/help.js | 102 - .../istanbul/lib/command/index.js | 33 - .../istanbul/lib/command/instrument.js | 265 - .../istanbul/lib/command/report.js | 123 - .../node_modules/istanbul/lib/command/test.js | 31 - .../node_modules/istanbul/lib/config.js | 491 - .../node_modules/istanbul/lib/hook.js | 198 - .../node_modules/istanbul/lib/instrumenter.js | 1097 - .../node_modules/istanbul/lib/object-utils.js | 425 - .../istanbul/lib/register-plugins.js | 15 - .../istanbul/lib/report/clover.js | 227 - .../istanbul/lib/report/cobertura.js | 221 - .../istanbul/lib/report/common/defaults.js | 51 - .../node_modules/istanbul/lib/report/html.js | 572 - .../node_modules/istanbul/lib/report/index.js | 104 - .../istanbul/lib/report/json-summary.js | 75 - .../node_modules/istanbul/lib/report/json.js | 69 - .../node_modules/istanbul/lib/report/lcov.js | 65 - .../istanbul/lib/report/lcovonly.js | 103 - .../node_modules/istanbul/lib/report/none.js | 41 - .../istanbul/lib/report/teamcity.js | 92 - .../istanbul/lib/report/templates/foot.txt | 20 - .../istanbul/lib/report/templates/head.txt | 60 - .../istanbul/lib/report/text-lcov.js | 50 - .../istanbul/lib/report/text-summary.js | 93 - .../node_modules/istanbul/lib/report/text.js | 234 - .../node_modules/istanbul/lib/reporter.js | 111 - .../istanbul/lib/store/fslookup.js | 61 - .../node_modules/istanbul/lib/store/index.js | 123 - .../node_modules/istanbul/lib/store/memory.js | 56 - .../node_modules/istanbul/lib/store/tmp.js | 81 - .../node_modules/istanbul/lib/util/factory.js | 88 - .../istanbul/lib/util/file-matcher.js | 76 - .../istanbul/lib/util/file-writer.js | 154 - .../istanbul/lib/util/help-formatter.js | 30 - .../istanbul/lib/util/input-error.js | 12 - .../istanbul/lib/util/insertion-text.js | 109 - .../node_modules/istanbul/lib/util/meta.js | 13 - .../istanbul/lib/util/tree-summarizer.js | 213 - .../node_modules/istanbul/lib/util/writer.js | 92 - .../istanbul/lib/util/yui-load-hook.js | 49 - .../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 | 122 - .../node_modules/supports-color/readme.md | 60 - .../istanbul/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 - .../istanbul/node_modules/wordwrap/index.js | 76 - .../node_modules/wordwrap/package.json | 86 - .../node_modules/wordwrap/test/break.js | 32 - .../node_modules/wordwrap/test/idleness.txt | 63 - .../node_modules/wordwrap/test/wrap.js | 33 - .../node_modules/istanbul/package.json | 400 - .../jest-changed-files/.npmignore | 3 - .../node_modules/jest-changed-files/README.md | 48 - .../jest-changed-files/build/git.js | 68 - .../jest-changed-files/build/hg.js | 74 - .../jest-changed-files/build/index.js | 13 - .../jest-changed-files/package.json | 83 - .../node_modules/jest-cli/.npmignore | 3 - .../node_modules/jest-cli/bin/jest.js | 16 - .../jest-cli/build/SearchSource.js | 289 - .../node_modules/jest-cli/build/TestRunner.js | 605 - .../jest-cli/build/TestWatcher.js | 43 - .../node_modules/jest-cli/build/TestWorker.js | 70 - .../jest-cli/build/assets/jest_logo.png | Bin 7319 -> 0 bytes .../node_modules/jest-cli/build/cli/args.js | 261 - .../jest-cli/build/cli/getJest.js | 49 - .../node_modules/jest-cli/build/cli/index.js | 50 - .../jest-cli/build/coverage.template | 29 - .../jest-cli/build/generateEmptyCoverage.js | 30 - .../node_modules/jest-cli/build/jest.js | 456 - .../jest-cli/build/lib/BufferedConsole.js | 63 - .../jest-cli/build/lib/formatTestResults.js | 99 - .../jest-cli/build/lib/promisify.js | 25 - .../jest-cli/build/preRunMessage.js | 31 - .../jest-cli/build/reporters/BaseReporter.js | 63 - .../build/reporters/CoverageReporter.js | 177 - .../build/reporters/DefaultReporter.js | 168 - .../build/reporters/NotifyReporter.js | 53 - .../jest-cli/build/reporters/Status.js | 200 - .../build/reporters/SummaryReporter.js | 222 - .../build/reporters/VerboseReporter.js | 97 - .../build/reporters/getConsoleOutput.js | 42 - .../build/reporters/getResultHeader.js | 48 - .../jest-cli/build/reporters/utils.js | 262 - .../node_modules/jest-cli/build/runTest.js | 81 - .../node_modules/jest-cli/package.json | 138 - .../node_modules/jest-config/.npmignore | 3 - .../jest-config/build/constants.js | 14 - .../jest-config/build/defaults.js | 59 - .../node_modules/jest-config/build/index.js | 52 - .../jest-config/build/lib/promisify.js | 25 - .../jest-config/build/loadFromFile.js | 34 - .../jest-config/build/loadFromPackage.js | 30 - .../jest-config/build/normalize.js | 435 - .../jest-config/build/setFromArgv.js | 81 - .../node_modules/jest-config/package.json | 93 - .../node_modules/jest-diff/.npmignore | 3 - .../node_modules/jest-diff/build/constants.js | 21 - .../jest-diff/build/diffStrings.js | 109 - .../node_modules/jest-diff/build/index.js | 93 - .../node_modules/jest-diff/package.json | 88 - .../jest-environment-jsdom/.npmignore | 3 - .../jest-environment-jsdom/build/index.js | 62 - .../jest-environment-jsdom/package.json | 89 - .../jest-environment-node/.npmignore | 3 - .../jest-environment-node/build/index.js | 60 - .../jest-environment-node/package.json | 89 - .../node_modules/jest-file-exists/.npmignore | 3 - .../jest-file-exists/build/index.js | 21 - .../jest-file-exists/package.json | 87 - .../node_modules/jest-haste-map/.npmignore | 3 - .../jest-haste-map/build/HasteFS.js | 76 - .../jest-haste-map/build/ModuleMap.js | 72 - .../jest-haste-map/build/constants.js | 37 - .../jest-haste-map/build/crawlers/node.js | 157 - .../jest-haste-map/build/crawlers/watchman.js | 138 - .../jest-haste-map/build/index.js | 708 - .../jest-haste-map/build/lib/docblock.js | 53 - .../build/lib/extractRequires.js | 42 - .../build/lib/getPlatformExtension.js | 30 - .../jest-haste-map/build/types.js | 10 - .../jest-haste-map/build/worker.js | 71 - .../node_modules/jest-haste-map/package.json | 94 - .../node_modules/jest-jasmine2/.npmignore | 3 - .../node_modules/jest-jasmine2/build/index.js | 127 - .../jest-jasmine2/build/jasmine-async.js | 111 - .../jest-jasmine2/build/jest-expect.js | 53 - .../jest-jasmine2/build/reporter.js | 164 - .../jest-jasmine2/build/setup-jest-globals.js | 84 - .../node_modules/jest-jasmine2/package.json | 92 - .../jest-jasmine2/vendor/jasmine-2.5.2.js | 3667 ---- .../jest-matcher-utils/.npmignore | 3 - .../jest-matcher-utils/build/index.js | 178 - .../jest-matcher-utils/package.json | 88 - .../node_modules/jest-matchers/.npmignore | 3 - .../node_modules/jest-matchers/build/index.js | 158 - .../jest-matchers/build/matchers.js | 479 - .../jest-matchers/build/spyMatchers.js | 191 - .../jest-matchers/build/toThrowMatchers.js | 163 - .../node_modules/jest-matchers/package.json | 86 - .../node_modules/jest-mock/.npmignore | 3 - .../node_modules/jest-mock/README.md | 122 - .../node_modules/jest-mock/build/index.js | 565 - .../node_modules/jest-mock/package.json | 92 - .../jest-resolve-dependencies/.npmignore | 3 - .../jest-resolve-dependencies/build/index.js | 114 - .../jest-resolve-dependencies/package.json | 85 - .../node_modules/jest-resolve/.npmignore | 3 - .../node_modules/jest-resolve/build/index.js | 246 - .../node_modules/jest-resolve/package.json | 90 - .../node_modules/jest-runtime/.npmignore | 3 - .../jest-runtime/bin/jest-runtime.js | 16 - .../jest-runtime/build/cli/args.js | 48 - .../jest-runtime/build/cli/index.js | 92 - .../node_modules/jest-runtime/build/index.js | 776 - .../jest-runtime/build/shouldInstrument.js | 62 - .../jest-runtime/build/transform.js | 337 - .../node_modules/jest-runtime/package.json | 105 - .../node_modules/jest-snapshot/.npmignore | 3 - .../node_modules/jest-snapshot/build/State.js | 176 - .../node_modules/jest-snapshot/build/index.js | 156 - .../jest-snapshot/build/plugins.js | 23 - .../node_modules/jest-snapshot/build/utils.js | 104 - .../node_modules/jest-snapshot/package.json | 95 - .../node_modules/jest-util/.npmignore | 3 - .../node_modules/jest-util/build/Console.js | 62 - .../jest-util/build/FakeTimers.js | 519 - .../jest-util/build/JasmineFormatter.js | 198 - .../jest-util/build/NullConsole.js | 27 - .../node_modules/jest-util/build/clearLine.js | 17 - .../node_modules/jest-util/build/index.js | 106 - .../jest-util/build/installCommonGlobals.js | 58 - .../node_modules/jest-util/build/messages.js | 194 - .../build/separateMessageFromStack.js | 31 - .../node_modules/jest-util/package.json | 104 - .../node_modules/jest/.npmignore | 3 - .../node_modules/jest/bin/jest.js | 12 - .../node_modules/jest/build/jest.js | 11 - .../node_modules/jest/node_modules/.bin/jest | 1 - .../jest/node_modules/jest-cli/.npmignore | 3 - .../jest/node_modules/jest-cli/bin/jest.js | 16 - .../jest-cli/build/SearchSource.js | 289 - .../node_modules/jest-cli/build/TestRunner.js | 605 - .../jest-cli/build/TestWatcher.js | 43 - .../node_modules/jest-cli/build/TestWorker.js | 70 - .../jest-cli/build/assets/jest_logo.png | Bin 7319 -> 0 bytes .../node_modules/jest-cli/build/cli/args.js | 261 - .../jest-cli/build/cli/getJest.js | 49 - .../node_modules/jest-cli/build/cli/index.js | 50 - .../jest-cli/build/coverage.template | 29 - .../jest-cli/build/generateEmptyCoverage.js | 30 - .../jest/node_modules/jest-cli/build/jest.js | 456 - .../jest-cli/build/lib/BufferedConsole.js | 63 - .../jest-cli/build/lib/formatTestResults.js | 99 - .../jest-cli/build/lib/promisify.js | 25 - .../jest-cli/build/preRunMessage.js | 31 - .../jest-cli/build/reporters/BaseReporter.js | 63 - .../build/reporters/CoverageReporter.js | 177 - .../build/reporters/DefaultReporter.js | 168 - .../build/reporters/NotifyReporter.js | 53 - .../jest-cli/build/reporters/Status.js | 200 - .../build/reporters/SummaryReporter.js | 222 - .../build/reporters/VerboseReporter.js | 97 - .../build/reporters/getConsoleOutput.js | 42 - .../build/reporters/getResultHeader.js | 48 - .../jest-cli/build/reporters/utils.js | 262 - .../node_modules/jest-cli/build/runTest.js | 81 - .../jest/node_modules/jest-cli/package.json | 138 - .../node_modules/jest/package.json | 126 - .../node_modules/jodid25519/.npmignore | 11 - .../node_modules/jodid25519/.travis.yml | 7 - .../node_modules/jodid25519/AUTHORS.md | 3 - .../node_modules/jodid25519/LICENSE | 23 - .../node_modules/jodid25519/README.md | 51 - .../node_modules/jodid25519/almond.0 | 42 - .../node_modules/jodid25519/almond.1 | 13 - .../node_modules/jodid25519/index.js | 35 - .../node_modules/jodid25519/jsdoc.json | 19 - .../node_modules/jodid25519/lib/core.js | 481 - .../node_modules/jodid25519/lib/curve255.js | 221 - .../node_modules/jodid25519/lib/dh.js | 111 - .../node_modules/jodid25519/lib/eddsa.js | 573 - .../node_modules/jodid25519/lib/utils.js | 198 - .../node_modules/jodid25519/package.json | 96 - .../node_modules/js-tokens/LICENSE | 21 - .../node_modules/js-tokens/changelog.md | 82 - .../node_modules/js-tokens/index.js | 19 - .../node_modules/js-tokens/package.json | 93 - .../node_modules/js-tokens/readme.md | 217 - .../node_modules/js-yaml/CHANGELOG.md | 409 - .../node_modules/js-yaml/LICENSE | 21 - .../node_modules/js-yaml/README.md | 295 - .../node_modules/js-yaml/bin/js-yaml.js | 132 - .../node_modules/js-yaml/dist/js-yaml.js | 3855 ---- .../node_modules/js-yaml/dist/js-yaml.min.js | 3 - .../node_modules/js-yaml/index.js | 7 - .../node_modules/js-yaml/lib/js-yaml.js | 39 - .../js-yaml/lib/js-yaml/common.js | 59 - .../js-yaml/lib/js-yaml/dumper.js | 801 - .../js-yaml/lib/js-yaml/exception.js | 43 - .../js-yaml/lib/js-yaml/loader.js | 1587 -- .../node_modules/js-yaml/lib/js-yaml/mark.js | 76 - .../js-yaml/lib/js-yaml/schema.js | 108 - .../js-yaml/lib/js-yaml/schema/core.js | 18 - .../lib/js-yaml/schema/default_full.js | 25 - .../lib/js-yaml/schema/default_safe.js | 28 - .../js-yaml/lib/js-yaml/schema/failsafe.js | 17 - .../js-yaml/lib/js-yaml/schema/json.js | 25 - .../node_modules/js-yaml/lib/js-yaml/type.js | 61 - .../js-yaml/lib/js-yaml/type/binary.js | 135 - .../js-yaml/lib/js-yaml/type/bool.js | 35 - .../js-yaml/lib/js-yaml/type/float.js | 105 - .../js-yaml/lib/js-yaml/type/int.js | 168 - .../js-yaml/lib/js-yaml/type/js/function.js | 84 - .../js-yaml/lib/js-yaml/type/js/regexp.js | 60 - .../js-yaml/lib/js-yaml/type/js/undefined.js | 28 - .../js-yaml/lib/js-yaml/type/map.js | 8 - .../js-yaml/lib/js-yaml/type/merge.js | 12 - .../js-yaml/lib/js-yaml/type/null.js | 34 - .../js-yaml/lib/js-yaml/type/omap.js | 44 - .../js-yaml/lib/js-yaml/type/pairs.js | 53 - .../js-yaml/lib/js-yaml/type/seq.js | 8 - .../js-yaml/lib/js-yaml/type/set.js | 29 - .../js-yaml/lib/js-yaml/type/str.js | 8 - .../js-yaml/lib/js-yaml/type/timestamp.js | 88 - .../node_modules/js-yaml/package.json | 120 - .../node_modules/jsbn/.npmignore | 2 - .../node_modules/jsbn/LICENSE | 40 - .../node_modules/jsbn/README.md | 175 - .../node_modules/jsbn/example.html | 12 - .../node_modules/jsbn/example.js | 3 - .../node_modules/jsbn/index.js | 1358 -- .../node_modules/jsbn/package.json | 79 - .../node_modules/jsdom/Changelog.md | 1254 -- .../node_modules/jsdom/LICENSE.txt | 22 - .../node_modules/jsdom/README.md | 592 - .../node_modules/jsdom/lib/jsdom.js | 456 - .../jsdom/lib/jsdom/browser/Window.js | 502 - .../lib/jsdom/browser/default-stylesheet.js | 1129 - .../lib/jsdom/browser/documentAdapter.js | 73 - .../lib/jsdom/browser/documentfeatures.js | 47 - .../jsdom/lib/jsdom/browser/domtohtml.js | 19 - .../jsdom/lib/jsdom/browser/htmltodom.js | 323 - .../lib/jsdom/browser/not-implemented.js | 13 - .../lib/jsdom/browser/resource-loader.js | 275 - .../jsdom/lib/jsdom/level2/style.js | 69 - .../jsdom/lib/jsdom/level3/xpath.js | 1874 -- .../jsdom/lib/jsdom/living/attributes.js | 468 - .../lib/jsdom/living/attributes/Attr-impl.js | 87 - .../jsdom/lib/jsdom/living/blob-symbols.js | 6 - .../jsdom/lib/jsdom/living/blob.js | 73 - .../jsdom/lib/jsdom/living/dom-token-list.js | 222 - .../jsdom/living/domparsing/DOMParser-impl.js | 61 - .../jsdom/living/events/CustomEvent-impl.js | 18 - .../jsdom/living/events/ErrorEvent-impl.js | 11 - .../lib/jsdom/living/events/Event-impl.js | 77 - .../jsdom/living/events/EventTarget-impl.js | 303 - .../jsdom/living/events/FocusEvent-impl.js | 4 - .../living/events/HashChangeEvent-impl.js | 11 - .../jsdom/living/events/KeyboardEvent-impl.js | 21 - .../jsdom/living/events/MessageEvent-impl.js | 22 - .../jsdom/living/events/MouseEvent-impl.js | 28 - .../jsdom/living/events/PopStateEvent-impl.js | 4 - .../jsdom/living/events/ProgressEvent-impl.js | 11 - .../jsdom/living/events/TouchEvent-impl.js | 11 - .../lib/jsdom/living/events/UIEvent-impl.js | 19 - .../jsdom/lib/jsdom/living/file-reader.js | 133 - .../jsdom/lib/jsdom/living/file-symbols.js | 4 - .../jsdom/lib/jsdom/living/file.js | 22 - .../lib/jsdom/living/filelist-symbols.js | 3 - .../jsdom/lib/jsdom/living/filelist.js | 21 - .../lib/jsdom/living/form-data-symbols.js | 3 - .../jsdom/lib/jsdom/living/generated/.gitkeep | 0 .../generated/AddEventListenerOptions.js | 34 - .../jsdom/lib/jsdom/living/generated/Attr.js | 169 - .../jsdom/living/generated/CharacterData.js | 189 - .../lib/jsdom/living/generated/ChildNode.js | 92 - .../lib/jsdom/living/generated/Comment.js | 92 - .../lib/jsdom/living/generated/CustomEvent.js | 122 - .../jsdom/living/generated/CustomEventInit.js | 34 - .../living/generated/DOMImplementation.js | 143 - .../lib/jsdom/living/generated/DOMParser.js | 97 - .../lib/jsdom/living/generated/Document.js | 712 - .../living/generated/DocumentFragment.js | 91 - .../jsdom/living/generated/DocumentType.js | 110 - .../lib/jsdom/living/generated/Element.js | 552 - .../living/generated/ElementCSSInlineStyle.js | 88 - .../generated/ElementContentEditable.js | 77 - .../lib/jsdom/living/generated/ErrorEvent.js | 137 - .../jsdom/living/generated/ErrorEventInit.js | 56 - .../jsdom/lib/jsdom/living/generated/Event.js | 251 - .../lib/jsdom/living/generated/EventInit.js | 40 - .../living/generated/EventListenerOptions.js | 32 - .../living/generated/EventModifierInit.js | 146 - .../lib/jsdom/living/generated/EventTarget.js | 130 - .../lib/jsdom/living/generated/FocusEvent.js | 104 - .../jsdom/living/generated/FocusEventInit.js | 34 - .../lib/jsdom/living/generated/FormData.js | 179 - .../living/generated/GlobalEventHandlers.js | 770 - .../living/generated/HTMLAnchorElement.js | 228 - .../living/generated/HTMLAppletElement.js | 225 - .../jsdom/living/generated/HTMLAreaElement.js | 167 - .../living/generated/HTMLAudioElement.js | 82 - .../jsdom/living/generated/HTMLBRElement.js | 95 - .../jsdom/living/generated/HTMLBaseElement.js | 107 - .../jsdom/living/generated/HTMLBodyElement.js | 164 - .../living/generated/HTMLButtonElement.js | 189 - .../living/generated/HTMLCanvasElement.js | 181 - .../living/generated/HTMLDListElement.js | 98 - .../jsdom/living/generated/HTMLDataElement.js | 95 - .../living/generated/HTMLDataListElement.js | 82 - .../living/generated/HTMLDialogElement.js | 98 - .../living/generated/HTMLDirectoryElement.js | 98 - .../jsdom/living/generated/HTMLDivElement.js | 95 - .../lib/jsdom/living/generated/HTMLElement.js | 205 - .../living/generated/HTMLEmbedElement.js | 159 - .../living/generated/HTMLFieldSetElement.js | 119 - .../jsdom/living/generated/HTMLFontElement.js | 121 - .../jsdom/living/generated/HTMLFormElement.js | 211 - .../living/generated/HTMLFrameElement.js | 203 - .../living/generated/HTMLFrameSetElement.js | 112 - .../jsdom/living/generated/HTMLHRElement.js | 150 - .../jsdom/living/generated/HTMLHeadElement.js | 82 - .../living/generated/HTMLHeadingElement.js | 95 - .../jsdom/living/generated/HTMLHtmlElement.js | 95 - .../generated/HTMLHyperlinkElementUtils.js | 205 - .../living/generated/HTMLIFrameElement.js | 278 - .../living/generated/HTMLImageElement.js | 326 - .../living/generated/HTMLInputElement.js | 583 - .../jsdom/living/generated/HTMLLIElement.js | 108 - .../living/generated/HTMLLabelElement.js | 103 - .../living/generated/HTMLLegendElement.js | 103 - .../jsdom/living/generated/HTMLLinkElement.js | 206 - .../jsdom/living/generated/HTMLMapElement.js | 103 - .../living/generated/HTMLMediaElement.js | 505 - .../jsdom/living/generated/HTMLMenuElement.js | 124 - .../jsdom/living/generated/HTMLMetaElement.js | 134 - .../living/generated/HTMLMeterElement.js | 82 - .../jsdom/living/generated/HTMLModElement.js | 108 - .../living/generated/HTMLOListElement.js | 140 - .../living/generated/HTMLObjectElement.js | 309 - .../living/generated/HTMLOptGroupElement.js | 111 - .../living/generated/HTMLOptionElement.js | 178 - .../living/generated/HTMLOutputElement.js | 95 - .../living/generated/HTMLParagraphElement.js | 95 - .../living/generated/HTMLParamElement.js | 134 - .../jsdom/living/generated/HTMLPreElement.js | 95 - .../living/generated/HTMLProgressElement.js | 82 - .../living/generated/HTMLQuoteElement.js | 95 - .../living/generated/HTMLScriptElement.js | 204 - .../living/generated/HTMLSelectElement.js | 260 - .../living/generated/HTMLSourceElement.js | 146 - .../jsdom/living/generated/HTMLSpanElement.js | 82 - .../living/generated/HTMLStyleElement.js | 125 - .../generated/HTMLTableCaptionElement.js | 95 - .../living/generated/HTMLTableCellElement.js | 245 - .../living/generated/HTMLTableColElement.js | 161 - .../generated/HTMLTableDataCellElement.js | 95 - .../living/generated/HTMLTableElement.js | 357 - .../generated/HTMLTableHeaderCellElement.js | 121 - .../living/generated/HTMLTableRowElement.js | 202 - .../generated/HTMLTableSectionElement.js | 173 - .../living/generated/HTMLTemplateElement.js | 90 - .../living/generated/HTMLTextAreaElement.js | 415 - .../jsdom/living/generated/HTMLTimeElement.js | 95 - .../living/generated/HTMLTitleElement.js | 94 - .../living/generated/HTMLTrackElement.js | 193 - .../living/generated/HTMLUListElement.js | 111 - .../living/generated/HTMLUnknownElement.js | 82 - .../living/generated/HTMLVideoElement.js | 138 - .../jsdom/living/generated/HashChangeEvent.js | 113 - .../living/generated/HashChangeEventInit.js | 38 - .../lib/jsdom/living/generated/History.js | 179 - .../jsdom/living/generated/KeyboardEvent.js | 269 - .../living/generated/KeyboardEventInit.js | 90 - .../lib/jsdom/living/generated/LinkStyle.js | 85 - .../lib/jsdom/living/generated/Location.js | 227 - .../jsdom/living/generated/MessageEvent.js | 164 - .../living/generated/MessageEventInit.js | 56 - .../lib/jsdom/living/generated/MouseEvent.js | 234 - .../jsdom/living/generated/MouseEventInit.js | 82 - .../lib/jsdom/living/generated/Navigator.js | 96 - .../generated/NavigatorConcurrentHardware.js | 85 - .../living/generated/NavigatorCookies.js | 85 - .../lib/jsdom/living/generated/NavigatorID.js | 149 - .../living/generated/NavigatorLanguage.js | 93 - .../jsdom/living/generated/NavigatorOnLine.js | 85 - .../living/generated/NavigatorPlugins.js | 88 - .../jsdom/lib/jsdom/living/generated/Node.js | 512 - .../generated/NonDocumentTypeChildNode.js | 93 - .../living/generated/NonElementParentNode.js | 92 - .../lib/jsdom/living/generated/ParentNode.js | 139 - .../jsdom/living/generated/PopStateEvent.js | 105 - .../living/generated/PopStateEventInit.js | 32 - .../living/generated/ProcessingInstruction.js | 90 - .../jsdom/living/generated/ProgressEvent.js | 122 - .../living/generated/ProgressEventInit.js | 50 - .../living/generated/ScrollIntoViewOptions.js | 42 - .../jsdom/living/generated/ScrollOptions.js | 32 - .../jsdom/lib/jsdom/living/generated/Text.js | 107 - .../lib/jsdom/living/generated/TouchEvent.js | 138 - .../lib/jsdom/living/generated/TreeWalker.js | 189 - .../lib/jsdom/living/generated/UIEvent.js | 134 - .../lib/jsdom/living/generated/UIEventInit.js | 42 - .../lib/jsdom/living/generated/Window.js | 1 - .../living/generated/WindowEventHandlers.js | 242 - .../lib/jsdom/living/generated/XMLDocument.js | 82 - .../jsdom/lib/jsdom/living/generated/utils.js | 40 - .../jsdom/living/helpers/document-base-url.js | 53 - .../lib/jsdom/living/helpers/focusing.js | 74 - .../lib/jsdom/living/helpers/form-controls.js | 43 - .../living/helpers/internal-constants.js | 13 - .../living/helpers/ordered-set-parser.js | 5 - .../helpers/proxied-window-event-handlers.js | 11 - .../living/helpers/runtime-script-errors.js | 68 - .../lib/jsdom/living/helpers/selectors.js | 30 - .../lib/jsdom/living/helpers/stylesheets.js | 78 - .../lib/jsdom/living/helpers/traversal.js | 51 - .../jsdom/living/helpers/validate-names.js | 62 - .../jsdom/lib/jsdom/living/html-collection.js | 109 - .../jsdom/lib/jsdom/living/index.js | 57 - .../jsdom/living/named-properties-window.js | 139 - .../jsdom/living/navigator/Navigator-impl.js | 24 - .../NavigatorConcurrentHardware-impl.js | 8 - .../living/navigator/NavigatorCookies-impl.js | 7 - .../living/navigator/NavigatorID-impl.js | 37 - .../navigator/NavigatorLanguage-impl.js | 9 - .../living/navigator/NavigatorOnLine-impl.js | 7 - .../living/navigator/NavigatorPlugins-impl.js | 7 - .../jsdom/living/node-document-position.js | 10 - .../jsdom/lib/jsdom/living/node-filter.js | 47 - .../jsdom/lib/jsdom/living/node-iterator.js | 232 - .../jsdom/lib/jsdom/living/node-list.js | 85 - .../jsdom/lib/jsdom/living/node-type.js | 16 - .../jsdom/lib/jsdom/living/node.js | 189 - .../jsdom/living/nodes/CharacterData-impl.js | 78 - .../lib/jsdom/living/nodes/ChildNode-impl.js | 15 - .../lib/jsdom/living/nodes/Comment-impl.js | 17 - .../living/nodes/DOMImplementation-impl.js | 176 - .../lib/jsdom/living/nodes/Document-impl.js | 777 - .../living/nodes/DocumentFragment-impl.js | 21 - .../jsdom/living/nodes/DocumentType-impl.js | 26 - .../lib/jsdom/living/nodes/Element-impl.js | 491 - .../nodes/ElementCSSInlineStyle-impl.js | 7 - .../nodes/ElementContentEditable-impl.js | 7 - .../living/nodes/GlobalEventHandlers-impl.js | 7 - .../living/nodes/HTMLAnchorElement-impl.js | 25 - .../living/nodes/HTMLAppletElement-impl.js | 26 - .../living/nodes/HTMLAreaElement-impl.js | 18 - .../living/nodes/HTMLAudioElement-impl.js | 9 - .../jsdom/living/nodes/HTMLBRElement-impl.js | 9 - .../living/nodes/HTMLBaseElement-impl.js | 27 - .../living/nodes/HTMLBodyElement-impl.js | 30 - .../living/nodes/HTMLButtonElement-impl.js | 58 - .../living/nodes/HTMLCanvasElement-impl.js | 134 - .../living/nodes/HTMLDListElement-impl.js | 9 - .../living/nodes/HTMLDataElement-impl.js | 9 - .../living/nodes/HTMLDataListElement-impl.js | 9 - .../living/nodes/HTMLDialogElement-impl.js | 9 - .../living/nodes/HTMLDirectoryElement-impl.js | 9 - .../jsdom/living/nodes/HTMLDivElement-impl.js | 9 - .../jsdom/living/nodes/HTMLElement-impl.js | 144 - .../living/nodes/HTMLEmbedElement-impl.js | 18 - .../living/nodes/HTMLFieldSetElement-impl.js | 14 - .../living/nodes/HTMLFontElement-impl.js | 9 - .../living/nodes/HTMLFormElement-impl.js | 125 - .../living/nodes/HTMLFrameElement-impl.js | 181 - .../living/nodes/HTMLFrameSetElement-impl.js | 9 - .../jsdom/living/nodes/HTMLHRElement-impl.js | 9 - .../living/nodes/HTMLHeadElement-impl.js | 9 - .../living/nodes/HTMLHeadingElement-impl.js | 9 - .../living/nodes/HTMLHtmlElement-impl.js | 9 - .../nodes/HTMLHyperlinkElementUtils-impl.js | 275 - .../living/nodes/HTMLIFrameElement-impl.js | 9 - .../living/nodes/HTMLImageElement-impl.js | 93 - .../living/nodes/HTMLInputElement-impl.js | 396 - .../jsdom/living/nodes/HTMLLIElement-impl.js | 9 - .../living/nodes/HTMLLabelElement-impl.js | 72 - .../living/nodes/HTMLLegendElement-impl.js | 14 - .../living/nodes/HTMLLinkElement-impl.js | 76 - .../jsdom/living/nodes/HTMLMapElement-impl.js | 13 - .../living/nodes/HTMLMediaElement-impl.js | 140 - .../living/nodes/HTMLMenuElement-impl.js | 9 - .../living/nodes/HTMLMetaElement-impl.js | 9 - .../living/nodes/HTMLMeterElement-impl.js | 9 - .../jsdom/living/nodes/HTMLModElement-impl.js | 9 - .../living/nodes/HTMLOListElement-impl.js | 9 - .../living/nodes/HTMLObjectElement-impl.js | 35 - .../living/nodes/HTMLOptGroupElement-impl.js | 9 - .../living/nodes/HTMLOptionElement-impl.js | 122 - .../living/nodes/HTMLOutputElement-impl.js | 9 - .../living/nodes/HTMLParagraphElement-impl.js | 9 - .../living/nodes/HTMLParamElement-impl.js | 9 - .../jsdom/living/nodes/HTMLPreElement-impl.js | 9 - .../living/nodes/HTMLProgressElement-impl.js | 9 - .../living/nodes/HTMLQuoteElement-impl.js | 9 - .../living/nodes/HTMLScriptElement-impl.js | 139 - .../living/nodes/HTMLSelectElement-impl.js | 174 - .../living/nodes/HTMLSourceElement-impl.js | 18 - .../living/nodes/HTMLSpanElement-impl.js | 9 - .../living/nodes/HTMLStyleElement-impl.js | 33 - .../nodes/HTMLTableCaptionElement-impl.js | 9 - .../living/nodes/HTMLTableCellElement-impl.js | 56 - .../living/nodes/HTMLTableColElement-impl.js | 9 - .../nodes/HTMLTableDataCellElement-impl.js | 9 - .../living/nodes/HTMLTableElement-impl.js | 148 - .../nodes/HTMLTableHeaderCellElement-impl.js | 9 - .../living/nodes/HTMLTableRowElement-impl.js | 70 - .../nodes/HTMLTableSectionElement-impl.js | 54 - .../living/nodes/HTMLTemplateElement-impl.js | 33 - .../living/nodes/HTMLTextAreaElement-impl.js | 184 - .../living/nodes/HTMLTimeElement-impl.js | 9 - .../living/nodes/HTMLTitleElement-impl.js | 18 - .../living/nodes/HTMLTrackElement-impl.js | 21 - .../living/nodes/HTMLUListElement-impl.js | 9 - .../living/nodes/HTMLUnknownElement-impl.js | 9 - .../living/nodes/HTMLVideoElement-impl.js | 26 - .../lib/jsdom/living/nodes/LinkStyle-impl.js | 16 - .../jsdom/lib/jsdom/living/nodes/Node-impl.js | 475 - .../nodes/NonDocumentTypeChildNode-impl.js | 28 - .../living/nodes/NonElementParentNode-impl.js | 9 - .../lib/jsdom/living/nodes/ParentNode-impl.js | 91 - .../nodes/ProcessingInstruction-impl.js | 22 - .../jsdom/lib/jsdom/living/nodes/Text-impl.js | 48 - .../living/nodes/WindowEventHandlers-impl.js | 9 - .../jsdom/living/nodes/XMLDocument-impl.js | 4 - .../jsdom/lib/jsdom/living/post-message.js | 36 - .../lib/jsdom/living/register-elements.js | 306 - .../jsdom/living/traversal/TreeWalker-impl.js | 257 - .../lib/jsdom/living/window/History-impl.js | 145 - .../jsdom/lib/jsdom/living/window/History.idl | 12 - .../lib/jsdom/living/window/Location-impl.js | 235 - .../lib/jsdom/living/window/navigation.js | 103 - .../jsdom/lib/jsdom/living/xhr-sync-worker.js | 50 - .../jsdom/lib/jsdom/living/xhr-utils.js | 327 - .../lib/jsdom/living/xhr/FormData-impl.js | 182 - .../living/xmlhttprequest-event-target.js | 23 - .../jsdom/living/xmlhttprequest-symbols.js | 4 - .../lib/jsdom/living/xmlhttprequest-upload.js | 17 - .../jsdom/lib/jsdom/living/xmlhttprequest.js | 1016 - .../lib/jsdom/named-properties-tracker.js | 156 - .../node_modules/jsdom/lib/jsdom/utils.js | 242 - .../jsdom/lib/jsdom/virtual-console.js | 34 - .../node_modules/jsdom/lib/jsdom/vm-shim.js | 106 - .../jsdom/lib/jsdom/web-idl/DOMException.js | 41 - .../jsdom/web-idl/dom-exception-table.json | 134 - .../node_modules/jsdom/package.json | 154 - .../node_modules/jsesc/LICENSE-MIT.txt | 20 - .../node_modules/jsesc/bin/jsesc | 148 - .../node_modules/jsesc/jsesc.js | 345 - .../node_modules/jsesc/man/jsesc.1 | 94 - .../node_modules/jsesc/package.json | 105 - .../node_modules/json-schema/README.md | 5 - .../json-schema/draft-00/hyper-schema | 68 - .../json-schema/draft-00/json-ref | 26 - .../node_modules/json-schema/draft-00/links | 33 - .../node_modules/json-schema/draft-00/schema | 155 - .../json-schema/draft-01/hyper-schema | 68 - .../json-schema/draft-01/json-ref | 26 - .../node_modules/json-schema/draft-01/links | 33 - .../node_modules/json-schema/draft-01/schema | 155 - .../json-schema/draft-02/hyper-schema | 68 - .../json-schema/draft-02/json-ref | 26 - .../node_modules/json-schema/draft-02/links | 35 - .../node_modules/json-schema/draft-02/schema | 166 - .../json-schema/draft-03/examples/address | 20 - .../json-schema/draft-03/examples/calendar | 53 - .../json-schema/draft-03/examples/card | 105 - .../json-schema/draft-03/examples/geo | 8 - .../json-schema/draft-03/examples/interfaces | 23 - .../json-schema/draft-03/hyper-schema | 60 - .../json-schema/draft-03/json-ref | 26 - .../node_modules/json-schema/draft-03/links | 35 - .../node_modules/json-schema/draft-03/schema | 174 - .../json-schema/draft-04/hyper-schema | 60 - .../node_modules/json-schema/draft-04/links | 41 - .../node_modules/json-schema/draft-04/schema | 189 - .../json-schema/draft-zyp-json-schema-03.xml | 1120 - .../json-schema/draft-zyp-json-schema-04.xml | 1072 - .../node_modules/json-schema/lib/links.js | 66 - .../node_modules/json-schema/lib/validate.js | 273 - .../node_modules/json-schema/package.json | 92 - .../node_modules/json-schema/test/tests.js | 95 - .../json-stable-stringify/.npmignore | 1 - .../json-stable-stringify/.travis.yml | 4 - .../json-stable-stringify/LICENSE | 18 - .../json-stable-stringify/example/key_cmp.js | 7 - .../json-stable-stringify/example/nested.js | 3 - .../json-stable-stringify/example/str.js | 3 - .../example/value_cmp.js | 7 - .../json-stable-stringify/index.js | 84 - .../json-stable-stringify/package.json | 103 - .../json-stable-stringify/readme.markdown | 130 - .../json-stable-stringify/test/cmp.js | 11 - .../json-stable-stringify/test/nested.js | 35 - .../json-stable-stringify/test/replacer.js | 74 - .../json-stable-stringify/test/space.js | 59 - .../json-stable-stringify/test/str.js | 32 - .../json-stable-stringify/test/to-json.js | 20 - .../json-stringify-safe/.npmignore | 1 - .../json-stringify-safe/CHANGELOG.md | 14 - .../node_modules/json-stringify-safe/LICENSE | 15 - .../node_modules/json-stringify-safe/Makefile | 35 - .../json-stringify-safe/README.md | 52 - .../json-stringify-safe/package.json | 94 - .../json-stringify-safe/stringify.js | 27 - .../json-stringify-safe/test/mocha.opts | 2 - .../test/stringify_test.js | 246 - .../node_modules/json5/CHANGELOG.md | 158 - .../node_modules/json5/README.md | 285 - .../node_modules/json5/lib/cli.js | 41 - .../node_modules/json5/lib/json5.js | 767 - .../node_modules/json5/lib/require.js | 18 - .../node_modules/json5/package.json | 111 - .../node_modules/jsonify/README.markdown | 34 - .../node_modules/jsonify/index.js | 2 - .../node_modules/jsonify/lib/parse.js | 273 - .../node_modules/jsonify/lib/stringify.js | 154 - .../node_modules/jsonify/package.json | 82 - .../node_modules/jsonify/test/parse.js | 16 - .../node_modules/jsonify/test/stringify.js | 15 - .../node_modules/jsonpointer/.travis.yml | 7 - .../node_modules/jsonpointer/LICENSE.md | 21 - .../node_modules/jsonpointer/README.md | 39 - .../node_modules/jsonpointer/benchmark.js | 56 - .../node_modules/jsonpointer/jsonpointer.js | 93 - .../node_modules/jsonpointer/package.json | 101 - .../node_modules/jsonpointer/test.js | 131 - .../node_modules/jsprim/CHANGES.md | 39 - .../node_modules/jsprim/LICENSE | 19 - .../node_modules/jsprim/README.md | 237 - .../node_modules/jsprim/lib/jsprim.js | 488 - .../node_modules/jsprim/package.json | 77 - .../node_modules/kind-of/LICENSE | 21 - .../node_modules/kind-of/README.md | 247 - .../node_modules/kind-of/index.js | 113 - .../node_modules/kind-of/package.json | 148 - .../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 | 121 - .../node_modules/lcid/index.js | 22 - .../node_modules/lcid/lcid.json | 203 - .../node_modules/lcid/license | 21 - .../node_modules/lcid/package.json | 101 - .../node_modules/lcid/readme.md | 35 - .../node_modules/levn/LICENSE | 22 - .../node_modules/levn/README.md | 196 - .../node_modules/levn/lib/cast.js | 298 - .../node_modules/levn/lib/coerce.js | 285 - .../node_modules/levn/lib/index.js | 22 - .../node_modules/levn/lib/parse-string.js | 113 - .../node_modules/levn/lib/parse.js | 102 - .../node_modules/levn/package.json | 100 - .../node_modules/load-json-file/index.js | 21 - .../node_modules/load-json-file/license | 21 - .../node_modules/load-json-file/package.json | 101 - .../node_modules/load-json-file/readme.md | 45 - .../lodash._arraycopy/LICENSE.txt | 22 - .../node_modules/lodash._arraycopy/README.md | 20 - .../node_modules/lodash._arraycopy/index.js | 29 - .../lodash._arraycopy/package.json | 99 - .../lodash._arrayeach/LICENSE.txt | 22 - .../node_modules/lodash._arrayeach/README.md | 20 - .../node_modules/lodash._arrayeach/index.js | 31 - .../lodash._arrayeach/package.json | 99 - .../lodash._baseassign/LICENSE.txt | 22 - .../node_modules/lodash._baseassign/README.md | 20 - .../node_modules/lodash._baseassign/index.js | 27 - .../lodash._baseassign/package.json | 118 - .../node_modules/lodash._baseclone/LICENSE | 22 - .../node_modules/lodash._baseclone/README.md | 20 - .../node_modules/lodash._baseclone/index.js | 271 - .../lodash._baseclone/package.json | 122 - .../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 | 115 - .../node_modules/lodash._basefor/LICENSE | 22 - .../node_modules/lodash._basefor/README.md | 18 - .../node_modules/lodash._basefor/index.js | 48 - .../node_modules/lodash._basefor/package.json | 97 - .../lodash._bindcallback/LICENSE.txt | 22 - .../lodash._bindcallback/README.md | 20 - .../lodash._bindcallback/index.js | 65 - .../lodash._bindcallback/package.json | 115 - .../node_modules/lodash._getnative/LICENSE | 22 - .../node_modules/lodash._getnative/README.md | 20 - .../node_modules/lodash._getnative/index.js | 137 - .../lodash._getnative/package.json | 111 - .../node_modules/lodash.assign/LICENSE | 47 - .../node_modules/lodash.assign/README.md | 18 - .../node_modules/lodash.assign/index.js | 637 - .../node_modules/lodash.assign/package.json | 105 - .../node_modules/lodash.clonedeep/LICENSE | 22 - .../node_modules/lodash.clonedeep/README.md | 20 - .../node_modules/lodash.clonedeep/index.js | 63 - .../lodash.clonedeep/package.json | 124 - .../node_modules/lodash.isarguments/LICENSE | 47 - .../node_modules/lodash.isarguments/README.md | 18 - .../node_modules/lodash.isarguments/index.js | 229 - .../lodash.isarguments/package.json | 105 - .../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 | 122 - .../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 | 126 - .../node_modules/lodash/LICENSE | 47 - .../node_modules/lodash/README.md | 39 - .../node_modules/lodash/_DataView.js | 7 - .../node_modules/lodash/_Hash.js | 32 - .../node_modules/lodash/_LazyWrapper.js | 28 - .../node_modules/lodash/_ListCache.js | 32 - .../node_modules/lodash/_LodashWrapper.js | 22 - .../node_modules/lodash/_Map.js | 7 - .../node_modules/lodash/_MapCache.js | 32 - .../node_modules/lodash/_Promise.js | 7 - .../node_modules/lodash/_Set.js | 7 - .../node_modules/lodash/_SetCache.js | 27 - .../node_modules/lodash/_Stack.js | 27 - .../node_modules/lodash/_Symbol.js | 6 - .../node_modules/lodash/_Uint8Array.js | 6 - .../node_modules/lodash/_WeakMap.js | 7 - .../node_modules/lodash/_addMapEntry.js | 15 - .../node_modules/lodash/_addSetEntry.js | 15 - .../node_modules/lodash/_apply.js | 21 - .../node_modules/lodash/_arrayAggregator.js | 22 - .../node_modules/lodash/_arrayEach.js | 22 - .../node_modules/lodash/_arrayEachRight.js | 21 - .../node_modules/lodash/_arrayEvery.js | 23 - .../node_modules/lodash/_arrayFilter.js | 25 - .../node_modules/lodash/_arrayIncludes.js | 17 - .../node_modules/lodash/_arrayIncludesWith.js | 22 - .../node_modules/lodash/_arrayLikeKeys.js | 49 - .../node_modules/lodash/_arrayMap.js | 21 - .../node_modules/lodash/_arrayPush.js | 20 - .../node_modules/lodash/_arrayReduce.js | 26 - .../node_modules/lodash/_arrayReduceRight.js | 24 - .../node_modules/lodash/_arraySample.js | 15 - .../node_modules/lodash/_arraySampleSize.js | 17 - .../node_modules/lodash/_arrayShuffle.js | 15 - .../node_modules/lodash/_arraySome.js | 23 - .../node_modules/lodash/_asciiSize.js | 12 - .../node_modules/lodash/_asciiToArray.js | 12 - .../node_modules/lodash/_asciiWords.js | 15 - .../node_modules/lodash/_assignInDefaults.js | 27 - .../node_modules/lodash/_assignMergeValue.js | 20 - .../node_modules/lodash/_assignValue.js | 28 - .../node_modules/lodash/_assocIndexOf.js | 21 - .../node_modules/lodash/_baseAggregator.js | 21 - .../node_modules/lodash/_baseAssign.js | 17 - .../node_modules/lodash/_baseAssignIn.js | 17 - .../node_modules/lodash/_baseAssignValue.js | 25 - .../node_modules/lodash/_baseAt.js | 23 - .../node_modules/lodash/_baseClamp.js | 22 - .../node_modules/lodash/_baseClone.js | 153 - .../node_modules/lodash/_baseConforms.js | 18 - .../node_modules/lodash/_baseConformsTo.js | 27 - .../node_modules/lodash/_baseCreate.js | 30 - .../node_modules/lodash/_baseDelay.js | 21 - .../node_modules/lodash/_baseDifference.js | 67 - .../node_modules/lodash/_baseEach.js | 14 - .../node_modules/lodash/_baseEachRight.js | 14 - .../node_modules/lodash/_baseEvery.js | 21 - .../node_modules/lodash/_baseExtremum.js | 32 - .../node_modules/lodash/_baseFill.js | 32 - .../node_modules/lodash/_baseFilter.js | 21 - .../node_modules/lodash/_baseFindIndex.js | 24 - .../node_modules/lodash/_baseFindKey.js | 23 - .../node_modules/lodash/_baseFlatten.js | 38 - .../node_modules/lodash/_baseFor.js | 16 - .../node_modules/lodash/_baseForOwn.js | 16 - .../node_modules/lodash/_baseForOwnRight.js | 16 - .../node_modules/lodash/_baseForRight.js | 15 - .../node_modules/lodash/_baseFunctions.js | 19 - .../node_modules/lodash/_baseGet.js | 24 - .../node_modules/lodash/_baseGetAllKeys.js | 20 - .../node_modules/lodash/_baseGetTag.js | 29 - .../node_modules/lodash/_baseGt.js | 14 - .../node_modules/lodash/_baseHas.js | 19 - .../node_modules/lodash/_baseHasIn.js | 13 - .../node_modules/lodash/_baseInRange.js | 18 - .../node_modules/lodash/_baseIndexOf.js | 20 - .../node_modules/lodash/_baseIndexOfWith.js | 23 - .../node_modules/lodash/_baseIntersection.js | 74 - .../node_modules/lodash/_baseInverter.js | 21 - .../node_modules/lodash/_baseInvoke.js | 24 - .../node_modules/lodash/_baseIsArguments.js | 18 - .../node_modules/lodash/_baseIsArrayBuffer.js | 17 - .../node_modules/lodash/_baseIsDate.js | 18 - .../node_modules/lodash/_baseIsEqual.js | 29 - .../node_modules/lodash/_baseIsEqualDeep.js | 88 - .../node_modules/lodash/_baseIsMap.js | 18 - .../node_modules/lodash/_baseIsMatch.js | 62 - .../node_modules/lodash/_baseIsNaN.js | 12 - .../node_modules/lodash/_baseIsNative.js | 47 - .../node_modules/lodash/_baseIsRegExp.js | 18 - .../node_modules/lodash/_baseIsSet.js | 18 - .../node_modules/lodash/_baseIsTypedArray.js | 60 - .../node_modules/lodash/_baseIteratee.js | 31 - .../node_modules/lodash/_baseKeys.js | 30 - .../node_modules/lodash/_baseKeysIn.js | 33 - .../node_modules/lodash/_baseLodash.js | 10 - .../node_modules/lodash/_baseLt.js | 14 - .../node_modules/lodash/_baseMap.js | 22 - .../node_modules/lodash/_baseMatches.js | 22 - .../lodash/_baseMatchesProperty.js | 33 - .../node_modules/lodash/_baseMean.js | 20 - .../node_modules/lodash/_baseMerge.js | 41 - .../node_modules/lodash/_baseMergeDeep.js | 93 - .../node_modules/lodash/_baseNth.js | 20 - .../node_modules/lodash/_baseOrderBy.js | 34 - .../node_modules/lodash/_basePick.js | 20 - .../node_modules/lodash/_basePickBy.js | 30 - .../node_modules/lodash/_baseProperty.js | 14 - .../node_modules/lodash/_basePropertyDeep.js | 16 - .../node_modules/lodash/_basePropertyOf.js | 14 - .../node_modules/lodash/_basePullAll.js | 51 - .../node_modules/lodash/_basePullAt.js | 37 - .../node_modules/lodash/_baseRandom.js | 18 - .../node_modules/lodash/_baseRange.js | 28 - .../node_modules/lodash/_baseReduce.js | 23 - .../node_modules/lodash/_baseRepeat.js | 35 - .../node_modules/lodash/_baseRest.js | 17 - .../node_modules/lodash/_baseSample.js | 15 - .../node_modules/lodash/_baseSampleSize.js | 18 - .../node_modules/lodash/_baseSet.js | 47 - .../node_modules/lodash/_baseSetData.js | 17 - .../node_modules/lodash/_baseSetToString.js | 22 - .../node_modules/lodash/_baseShuffle.js | 15 - .../node_modules/lodash/_baseSlice.js | 31 - .../node_modules/lodash/_baseSome.js | 22 - .../node_modules/lodash/_baseSortBy.js | 21 - .../node_modules/lodash/_baseSortedIndex.js | 42 - .../node_modules/lodash/_baseSortedIndexBy.js | 64 - .../node_modules/lodash/_baseSortedUniq.js | 30 - .../node_modules/lodash/_baseSum.js | 24 - .../node_modules/lodash/_baseTimes.js | 20 - .../node_modules/lodash/_baseToNumber.js | 24 - .../node_modules/lodash/_baseToPairs.js | 18 - .../node_modules/lodash/_baseToString.js | 37 - .../node_modules/lodash/_baseUnary.js | 14 - .../node_modules/lodash/_baseUniq.js | 72 - .../node_modules/lodash/_baseUnset.js | 20 - .../node_modules/lodash/_baseUpdate.js | 18 - .../node_modules/lodash/_baseValues.js | 19 - .../node_modules/lodash/_baseWhile.js | 26 - .../node_modules/lodash/_baseWrapperValue.js | 25 - .../node_modules/lodash/_baseXor.js | 36 - .../node_modules/lodash/_baseZipObject.js | 23 - .../node_modules/lodash/_cacheHas.js | 13 - .../lodash/_castArrayLikeObject.js | 14 - .../node_modules/lodash/_castFunction.js | 14 - .../node_modules/lodash/_castPath.js | 21 - .../node_modules/lodash/_castRest.js | 14 - .../node_modules/lodash/_castSlice.js | 18 - .../node_modules/lodash/_charsEndIndex.js | 19 - .../node_modules/lodash/_charsStartIndex.js | 20 - .../node_modules/lodash/_cloneArrayBuffer.js | 16 - .../node_modules/lodash/_cloneBuffer.js | 35 - .../node_modules/lodash/_cloneDataView.js | 16 - .../node_modules/lodash/_cloneMap.js | 22 - .../node_modules/lodash/_cloneRegExp.js | 17 - .../node_modules/lodash/_cloneSet.js | 22 - .../node_modules/lodash/_cloneSymbol.js | 18 - .../node_modules/lodash/_cloneTypedArray.js | 16 - .../node_modules/lodash/_compareAscending.js | 41 - .../node_modules/lodash/_compareMultiple.js | 44 - .../node_modules/lodash/_composeArgs.js | 39 - .../node_modules/lodash/_composeArgsRight.js | 41 - .../node_modules/lodash/_copyArray.js | 20 - .../node_modules/lodash/_copyObject.js | 40 - .../node_modules/lodash/_copySymbols.js | 16 - .../node_modules/lodash/_copySymbolsIn.js | 16 - .../node_modules/lodash/_coreJsData.js | 6 - .../node_modules/lodash/_countHolders.js | 21 - .../node_modules/lodash/_createAggregator.js | 23 - .../node_modules/lodash/_createAssigner.js | 37 - .../node_modules/lodash/_createBaseEach.js | 32 - .../node_modules/lodash/_createBaseFor.js | 25 - .../node_modules/lodash/_createBind.js | 28 - .../node_modules/lodash/_createCaseFirst.js | 33 - .../node_modules/lodash/_createCompounder.js | 24 - .../node_modules/lodash/_createCtor.js | 37 - .../node_modules/lodash/_createCurry.js | 46 - .../node_modules/lodash/_createFind.js | 25 - .../node_modules/lodash/_createFlow.js | 82 - .../node_modules/lodash/_createHybrid.js | 92 - .../node_modules/lodash/_createInverter.js | 17 - .../lodash/_createMathOperation.js | 38 - .../node_modules/lodash/_createOver.js | 27 - .../node_modules/lodash/_createPadding.js | 33 - .../node_modules/lodash/_createPartial.js | 43 - .../node_modules/lodash/_createRange.js | 30 - .../node_modules/lodash/_createRecurry.js | 56 - .../lodash/_createRelationalOperation.js | 20 - .../node_modules/lodash/_createRound.js | 33 - .../node_modules/lodash/_createSet.js | 19 - .../node_modules/lodash/_createToPairs.js | 30 - .../node_modules/lodash/_createWrap.js | 106 - .../node_modules/lodash/_deburrLetter.js | 71 - .../node_modules/lodash/_defineProperty.js | 11 - .../node_modules/lodash/_equalArrays.js | 83 - .../node_modules/lodash/_equalByTag.js | 112 - .../node_modules/lodash/_equalObjects.js | 89 - .../node_modules/lodash/_escapeHtmlChar.js | 21 - .../node_modules/lodash/_escapeStringChar.js | 22 - .../node_modules/lodash/_flatRest.js | 16 - .../node_modules/lodash/_freeGlobal.js | 4 - .../node_modules/lodash/_getAllKeys.js | 16 - .../node_modules/lodash/_getAllKeysIn.js | 17 - .../node_modules/lodash/_getData.js | 15 - .../node_modules/lodash/_getFuncName.js | 31 - .../node_modules/lodash/_getHolder.js | 13 - .../node_modules/lodash/_getMapData.js | 18 - .../node_modules/lodash/_getMatchData.js | 24 - .../node_modules/lodash/_getNative.js | 17 - .../node_modules/lodash/_getPrototype.js | 6 - .../node_modules/lodash/_getRawTag.js | 46 - .../node_modules/lodash/_getSymbols.js | 16 - .../node_modules/lodash/_getSymbolsIn.js | 25 - .../node_modules/lodash/_getTag.js | 58 - .../node_modules/lodash/_getValue.js | 13 - .../node_modules/lodash/_getView.js | 33 - .../node_modules/lodash/_getWrapDetails.js | 17 - .../node_modules/lodash/_hasPath.js | 39 - .../node_modules/lodash/_hasUnicode.js | 26 - .../node_modules/lodash/_hasUnicodeWord.js | 15 - .../node_modules/lodash/_hashClear.js | 15 - .../node_modules/lodash/_hashDelete.js | 17 - .../node_modules/lodash/_hashGet.js | 30 - .../node_modules/lodash/_hashHas.js | 23 - .../node_modules/lodash/_hashSet.js | 23 - .../node_modules/lodash/_initCloneArray.js | 26 - .../node_modules/lodash/_initCloneByTag.js | 80 - .../node_modules/lodash/_initCloneObject.js | 18 - .../node_modules/lodash/_insertWrapDetails.js | 23 - .../node_modules/lodash/_isFlattenable.js | 20 - .../node_modules/lodash/_isIndex.js | 22 - .../node_modules/lodash/_isIterateeCall.js | 30 - .../node_modules/lodash/_isKey.js | 29 - .../node_modules/lodash/_isKeyable.js | 15 - .../node_modules/lodash/_isLaziable.js | 28 - .../node_modules/lodash/_isMaskable.js | 14 - .../node_modules/lodash/_isMasked.js | 20 - .../node_modules/lodash/_isPrototype.js | 18 - .../lodash/_isStrictComparable.js | 15 - .../node_modules/lodash/_iteratorToArray.js | 18 - .../node_modules/lodash/_lazyClone.js | 23 - .../node_modules/lodash/_lazyReverse.js | 23 - .../node_modules/lodash/_lazyValue.js | 73 - .../node_modules/lodash/_listCacheClear.js | 13 - .../node_modules/lodash/_listCacheDelete.js | 35 - .../node_modules/lodash/_listCacheGet.js | 19 - .../node_modules/lodash/_listCacheHas.js | 16 - .../node_modules/lodash/_listCacheSet.js | 26 - .../node_modules/lodash/_mapCacheClear.js | 21 - .../node_modules/lodash/_mapCacheDelete.js | 18 - .../node_modules/lodash/_mapCacheGet.js | 16 - .../node_modules/lodash/_mapCacheHas.js | 16 - .../node_modules/lodash/_mapCacheSet.js | 22 - .../node_modules/lodash/_mapToArray.js | 18 - .../lodash/_matchesStrictComparable.js | 20 - .../node_modules/lodash/_memoizeCapped.js | 26 - .../node_modules/lodash/_mergeData.js | 90 - .../node_modules/lodash/_mergeDefaults.js | 27 - .../node_modules/lodash/_metaMap.js | 6 - .../node_modules/lodash/_nativeCreate.js | 6 - .../node_modules/lodash/_nativeKeys.js | 6 - .../node_modules/lodash/_nativeKeysIn.js | 20 - .../node_modules/lodash/_nodeUtil.js | 22 - .../node_modules/lodash/_objectToString.js | 22 - .../node_modules/lodash/_overArg.js | 15 - .../node_modules/lodash/_overRest.js | 36 - .../node_modules/lodash/_parent.js | 16 - .../node_modules/lodash/_reEscape.js | 4 - .../node_modules/lodash/_reEvaluate.js | 4 - .../node_modules/lodash/_reInterpolate.js | 4 - .../node_modules/lodash/_realNames.js | 4 - .../node_modules/lodash/_reorder.js | 29 - .../node_modules/lodash/_replaceHolders.js | 29 - .../node_modules/lodash/_root.js | 9 - .../node_modules/lodash/_setCacheAdd.js | 19 - .../node_modules/lodash/_setCacheHas.js | 14 - .../node_modules/lodash/_setData.js | 20 - .../node_modules/lodash/_setToArray.js | 18 - .../node_modules/lodash/_setToPairs.js | 18 - .../node_modules/lodash/_setToString.js | 14 - .../node_modules/lodash/_setWrapToString.js | 21 - .../node_modules/lodash/_shortOut.js | 37 - .../node_modules/lodash/_shuffleSelf.js | 28 - .../node_modules/lodash/_stackClear.js | 15 - .../node_modules/lodash/_stackDelete.js | 18 - .../node_modules/lodash/_stackGet.js | 14 - .../node_modules/lodash/_stackHas.js | 14 - .../node_modules/lodash/_stackSet.js | 34 - .../node_modules/lodash/_strictIndexOf.js | 23 - .../node_modules/lodash/_strictLastIndexOf.js | 21 - .../node_modules/lodash/_stringSize.js | 18 - .../node_modules/lodash/_stringToArray.js | 18 - .../node_modules/lodash/_stringToPath.js | 28 - .../node_modules/lodash/_toKey.js | 21 - .../node_modules/lodash/_toSource.js | 26 - .../node_modules/lodash/_unescapeHtmlChar.js | 21 - .../node_modules/lodash/_unicodeSize.js | 44 - .../node_modules/lodash/_unicodeToArray.js | 40 - .../node_modules/lodash/_unicodeWords.js | 69 - .../node_modules/lodash/_updateWrapDetails.js | 46 - .../node_modules/lodash/_wrapperClone.js | 23 - .../node_modules/lodash/add.js | 22 - .../node_modules/lodash/after.js | 42 - .../node_modules/lodash/array.js | 67 - .../node_modules/lodash/ary.js | 29 - .../node_modules/lodash/assign.js | 58 - .../node_modules/lodash/assignIn.js | 40 - .../node_modules/lodash/assignInWith.js | 38 - .../node_modules/lodash/assignWith.js | 37 - .../node_modules/lodash/at.js | 23 - .../node_modules/lodash/attempt.js | 35 - .../node_modules/lodash/before.js | 40 - .../node_modules/lodash/bind.js | 57 - .../node_modules/lodash/bindAll.js | 41 - .../node_modules/lodash/bindKey.js | 68 - .../node_modules/lodash/camelCase.js | 29 - .../node_modules/lodash/capitalize.js | 23 - .../node_modules/lodash/castArray.js | 44 - .../node_modules/lodash/ceil.js | 26 - .../node_modules/lodash/chain.js | 38 - .../node_modules/lodash/chunk.js | 50 - .../node_modules/lodash/clamp.js | 39 - .../node_modules/lodash/clone.js | 36 - .../node_modules/lodash/cloneDeep.js | 29 - .../node_modules/lodash/cloneDeepWith.js | 40 - .../node_modules/lodash/cloneWith.js | 42 - .../node_modules/lodash/collection.js | 30 - .../node_modules/lodash/commit.js | 33 - .../node_modules/lodash/compact.js | 31 - .../node_modules/lodash/concat.js | 43 - .../node_modules/lodash/cond.js | 60 - .../node_modules/lodash/conforms.js | 35 - .../node_modules/lodash/conformsTo.js | 32 - .../node_modules/lodash/constant.js | 26 - .../node_modules/lodash/core.js | 3839 ---- .../node_modules/lodash/core.min.js | 29 - .../node_modules/lodash/countBy.js | 40 - .../node_modules/lodash/create.js | 43 - .../node_modules/lodash/curry.js | 57 - .../node_modules/lodash/curryRight.js | 54 - .../node_modules/lodash/date.js | 3 - .../node_modules/lodash/debounce.js | 188 - .../node_modules/lodash/deburr.js | 45 - .../node_modules/lodash/defaultTo.js | 25 - .../node_modules/lodash/defaults.js | 32 - .../node_modules/lodash/defaultsDeep.js | 30 - .../node_modules/lodash/defer.js | 26 - .../node_modules/lodash/delay.js | 28 - .../node_modules/lodash/difference.js | 33 - .../node_modules/lodash/differenceBy.js | 44 - .../node_modules/lodash/differenceWith.js | 40 - .../node_modules/lodash/divide.js | 22 - .../node_modules/lodash/drop.js | 38 - .../node_modules/lodash/dropRight.js | 39 - .../node_modules/lodash/dropRightWhile.js | 45 - .../node_modules/lodash/dropWhile.js | 45 - .../node_modules/lodash/each.js | 1 - .../node_modules/lodash/eachRight.js | 1 - .../node_modules/lodash/endsWith.js | 43 - .../node_modules/lodash/entries.js | 1 - .../node_modules/lodash/entriesIn.js | 1 - .../node_modules/lodash/eq.js | 37 - .../node_modules/lodash/escape.js | 43 - .../node_modules/lodash/escapeRegExp.js | 32 - .../node_modules/lodash/every.js | 56 - .../node_modules/lodash/extend.js | 1 - .../node_modules/lodash/extendWith.js | 1 - .../node_modules/lodash/fill.js | 45 - .../node_modules/lodash/filter.js | 48 - .../node_modules/lodash/find.js | 42 - .../node_modules/lodash/findIndex.js | 55 - .../node_modules/lodash/findKey.js | 44 - .../node_modules/lodash/findLast.js | 25 - .../node_modules/lodash/findLastIndex.js | 59 - .../node_modules/lodash/findLastKey.js | 44 - .../node_modules/lodash/first.js | 1 - .../node_modules/lodash/flatMap.js | 29 - .../node_modules/lodash/flatMapDeep.js | 31 - .../node_modules/lodash/flatMapDepth.js | 31 - .../node_modules/lodash/flatten.js | 22 - .../node_modules/lodash/flattenDeep.js | 25 - .../node_modules/lodash/flattenDepth.js | 33 - .../node_modules/lodash/flip.js | 28 - .../node_modules/lodash/floor.js | 26 - .../node_modules/lodash/flow.js | 27 - .../node_modules/lodash/flowRight.js | 26 - .../node_modules/lodash/forEach.js | 41 - .../node_modules/lodash/forEachRight.js | 31 - .../node_modules/lodash/forIn.js | 39 - .../node_modules/lodash/forInRight.js | 37 - .../node_modules/lodash/forOwn.js | 36 - .../node_modules/lodash/forOwnRight.js | 34 - .../node_modules/lodash/fp.js | 2 - .../node_modules/lodash/fp/F.js | 1 - .../node_modules/lodash/fp/T.js | 1 - .../node_modules/lodash/fp/__.js | 1 - .../node_modules/lodash/fp/_baseConvert.js | 567 - .../node_modules/lodash/fp/_convertBrowser.js | 18 - .../node_modules/lodash/fp/_falseOptions.js | 7 - .../node_modules/lodash/fp/_mapping.js | 367 - .../node_modules/lodash/fp/_util.js | 14 - .../node_modules/lodash/fp/add.js | 5 - .../node_modules/lodash/fp/after.js | 5 - .../node_modules/lodash/fp/all.js | 1 - .../node_modules/lodash/fp/allPass.js | 1 - .../node_modules/lodash/fp/always.js | 1 - .../node_modules/lodash/fp/any.js | 1 - .../node_modules/lodash/fp/anyPass.js | 1 - .../node_modules/lodash/fp/apply.js | 1 - .../node_modules/lodash/fp/array.js | 2 - .../node_modules/lodash/fp/ary.js | 5 - .../node_modules/lodash/fp/assign.js | 5 - .../node_modules/lodash/fp/assignAll.js | 5 - .../node_modules/lodash/fp/assignAllWith.js | 5 - .../node_modules/lodash/fp/assignIn.js | 5 - .../node_modules/lodash/fp/assignInAll.js | 5 - .../node_modules/lodash/fp/assignInAllWith.js | 5 - .../node_modules/lodash/fp/assignInWith.js | 5 - .../node_modules/lodash/fp/assignWith.js | 5 - .../node_modules/lodash/fp/assoc.js | 1 - .../node_modules/lodash/fp/assocPath.js | 1 - .../node_modules/lodash/fp/at.js | 5 - .../node_modules/lodash/fp/attempt.js | 5 - .../node_modules/lodash/fp/before.js | 5 - .../node_modules/lodash/fp/bind.js | 5 - .../node_modules/lodash/fp/bindAll.js | 5 - .../node_modules/lodash/fp/bindKey.js | 5 - .../node_modules/lodash/fp/camelCase.js | 5 - .../node_modules/lodash/fp/capitalize.js | 5 - .../node_modules/lodash/fp/castArray.js | 5 - .../node_modules/lodash/fp/ceil.js | 5 - .../node_modules/lodash/fp/chain.js | 5 - .../node_modules/lodash/fp/chunk.js | 5 - .../node_modules/lodash/fp/clamp.js | 5 - .../node_modules/lodash/fp/clone.js | 5 - .../node_modules/lodash/fp/cloneDeep.js | 5 - .../node_modules/lodash/fp/cloneDeepWith.js | 5 - .../node_modules/lodash/fp/cloneWith.js | 5 - .../node_modules/lodash/fp/collection.js | 2 - .../node_modules/lodash/fp/commit.js | 5 - .../node_modules/lodash/fp/compact.js | 5 - .../node_modules/lodash/fp/complement.js | 1 - .../node_modules/lodash/fp/compose.js | 1 - .../node_modules/lodash/fp/concat.js | 5 - .../node_modules/lodash/fp/cond.js | 5 - .../node_modules/lodash/fp/conforms.js | 1 - .../node_modules/lodash/fp/conformsTo.js | 5 - .../node_modules/lodash/fp/constant.js | 5 - .../node_modules/lodash/fp/contains.js | 1 - .../node_modules/lodash/fp/convert.js | 18 - .../node_modules/lodash/fp/countBy.js | 5 - .../node_modules/lodash/fp/create.js | 5 - .../node_modules/lodash/fp/curry.js | 5 - .../node_modules/lodash/fp/curryN.js | 5 - .../node_modules/lodash/fp/curryRight.js | 5 - .../node_modules/lodash/fp/curryRightN.js | 5 - .../node_modules/lodash/fp/date.js | 2 - .../node_modules/lodash/fp/debounce.js | 5 - .../node_modules/lodash/fp/deburr.js | 5 - .../node_modules/lodash/fp/defaultTo.js | 5 - .../node_modules/lodash/fp/defaults.js | 5 - .../node_modules/lodash/fp/defaultsAll.js | 5 - .../node_modules/lodash/fp/defaultsDeep.js | 5 - .../node_modules/lodash/fp/defaultsDeepAll.js | 5 - .../node_modules/lodash/fp/defer.js | 5 - .../node_modules/lodash/fp/delay.js | 5 - .../node_modules/lodash/fp/difference.js | 5 - .../node_modules/lodash/fp/differenceBy.js | 5 - .../node_modules/lodash/fp/differenceWith.js | 5 - .../node_modules/lodash/fp/dissoc.js | 1 - .../node_modules/lodash/fp/dissocPath.js | 1 - .../node_modules/lodash/fp/divide.js | 5 - .../node_modules/lodash/fp/drop.js | 5 - .../node_modules/lodash/fp/dropLast.js | 1 - .../node_modules/lodash/fp/dropLastWhile.js | 1 - .../node_modules/lodash/fp/dropRight.js | 5 - .../node_modules/lodash/fp/dropRightWhile.js | 5 - .../node_modules/lodash/fp/dropWhile.js | 5 - .../node_modules/lodash/fp/each.js | 1 - .../node_modules/lodash/fp/eachRight.js | 1 - .../node_modules/lodash/fp/endsWith.js | 5 - .../node_modules/lodash/fp/entries.js | 1 - .../node_modules/lodash/fp/entriesIn.js | 1 - .../node_modules/lodash/fp/eq.js | 5 - .../node_modules/lodash/fp/equals.js | 1 - .../node_modules/lodash/fp/escape.js | 5 - .../node_modules/lodash/fp/escapeRegExp.js | 5 - .../node_modules/lodash/fp/every.js | 5 - .../node_modules/lodash/fp/extend.js | 1 - .../node_modules/lodash/fp/extendAll.js | 1 - .../node_modules/lodash/fp/extendAllWith.js | 1 - .../node_modules/lodash/fp/extendWith.js | 1 - .../node_modules/lodash/fp/fill.js | 5 - .../node_modules/lodash/fp/filter.js | 5 - .../node_modules/lodash/fp/find.js | 5 - .../node_modules/lodash/fp/findFrom.js | 5 - .../node_modules/lodash/fp/findIndex.js | 5 - .../node_modules/lodash/fp/findIndexFrom.js | 5 - .../node_modules/lodash/fp/findKey.js | 5 - .../node_modules/lodash/fp/findLast.js | 5 - .../node_modules/lodash/fp/findLastFrom.js | 5 - .../node_modules/lodash/fp/findLastIndex.js | 5 - .../lodash/fp/findLastIndexFrom.js | 5 - .../node_modules/lodash/fp/findLastKey.js | 5 - .../node_modules/lodash/fp/first.js | 1 - .../node_modules/lodash/fp/flatMap.js | 5 - .../node_modules/lodash/fp/flatMapDeep.js | 5 - .../node_modules/lodash/fp/flatMapDepth.js | 5 - .../node_modules/lodash/fp/flatten.js | 5 - .../node_modules/lodash/fp/flattenDeep.js | 5 - .../node_modules/lodash/fp/flattenDepth.js | 5 - .../node_modules/lodash/fp/flip.js | 5 - .../node_modules/lodash/fp/floor.js | 5 - .../node_modules/lodash/fp/flow.js | 5 - .../node_modules/lodash/fp/flowRight.js | 5 - .../node_modules/lodash/fp/forEach.js | 5 - .../node_modules/lodash/fp/forEachRight.js | 5 - .../node_modules/lodash/fp/forIn.js | 5 - .../node_modules/lodash/fp/forInRight.js | 5 - .../node_modules/lodash/fp/forOwn.js | 5 - .../node_modules/lodash/fp/forOwnRight.js | 5 - .../node_modules/lodash/fp/fromPairs.js | 5 - .../node_modules/lodash/fp/function.js | 2 - .../node_modules/lodash/fp/functions.js | 5 - .../node_modules/lodash/fp/functionsIn.js | 5 - .../node_modules/lodash/fp/get.js | 5 - .../node_modules/lodash/fp/getOr.js | 5 - .../node_modules/lodash/fp/groupBy.js | 5 - .../node_modules/lodash/fp/gt.js | 5 - .../node_modules/lodash/fp/gte.js | 5 - .../node_modules/lodash/fp/has.js | 5 - .../node_modules/lodash/fp/hasIn.js | 5 - .../node_modules/lodash/fp/head.js | 5 - .../node_modules/lodash/fp/identical.js | 1 - .../node_modules/lodash/fp/identity.js | 5 - .../node_modules/lodash/fp/inRange.js | 5 - .../node_modules/lodash/fp/includes.js | 5 - .../node_modules/lodash/fp/includesFrom.js | 5 - .../node_modules/lodash/fp/indexBy.js | 1 - .../node_modules/lodash/fp/indexOf.js | 5 - .../node_modules/lodash/fp/indexOfFrom.js | 5 - .../node_modules/lodash/fp/init.js | 1 - .../node_modules/lodash/fp/initial.js | 5 - .../node_modules/lodash/fp/intersection.js | 5 - .../node_modules/lodash/fp/intersectionBy.js | 5 - .../lodash/fp/intersectionWith.js | 5 - .../node_modules/lodash/fp/invert.js | 5 - .../node_modules/lodash/fp/invertBy.js | 5 - .../node_modules/lodash/fp/invertObj.js | 1 - .../node_modules/lodash/fp/invoke.js | 5 - .../node_modules/lodash/fp/invokeArgs.js | 5 - .../node_modules/lodash/fp/invokeArgsMap.js | 5 - .../node_modules/lodash/fp/invokeMap.js | 5 - .../node_modules/lodash/fp/isArguments.js | 5 - .../node_modules/lodash/fp/isArray.js | 5 - .../node_modules/lodash/fp/isArrayBuffer.js | 5 - .../node_modules/lodash/fp/isArrayLike.js | 5 - .../lodash/fp/isArrayLikeObject.js | 5 - .../node_modules/lodash/fp/isBoolean.js | 5 - .../node_modules/lodash/fp/isBuffer.js | 5 - .../node_modules/lodash/fp/isDate.js | 5 - .../node_modules/lodash/fp/isElement.js | 5 - .../node_modules/lodash/fp/isEmpty.js | 5 - .../node_modules/lodash/fp/isEqual.js | 5 - .../node_modules/lodash/fp/isEqualWith.js | 5 - .../node_modules/lodash/fp/isError.js | 5 - .../node_modules/lodash/fp/isFinite.js | 5 - .../node_modules/lodash/fp/isFunction.js | 5 - .../node_modules/lodash/fp/isInteger.js | 5 - .../node_modules/lodash/fp/isLength.js | 5 - .../node_modules/lodash/fp/isMap.js | 5 - .../node_modules/lodash/fp/isMatch.js | 5 - .../node_modules/lodash/fp/isMatchWith.js | 5 - .../node_modules/lodash/fp/isNaN.js | 5 - .../node_modules/lodash/fp/isNative.js | 5 - .../node_modules/lodash/fp/isNil.js | 5 - .../node_modules/lodash/fp/isNull.js | 5 - .../node_modules/lodash/fp/isNumber.js | 5 - .../node_modules/lodash/fp/isObject.js | 5 - .../node_modules/lodash/fp/isObjectLike.js | 5 - .../node_modules/lodash/fp/isPlainObject.js | 5 - .../node_modules/lodash/fp/isRegExp.js | 5 - .../node_modules/lodash/fp/isSafeInteger.js | 5 - .../node_modules/lodash/fp/isSet.js | 5 - .../node_modules/lodash/fp/isString.js | 5 - .../node_modules/lodash/fp/isSymbol.js | 5 - .../node_modules/lodash/fp/isTypedArray.js | 5 - .../node_modules/lodash/fp/isUndefined.js | 5 - .../node_modules/lodash/fp/isWeakMap.js | 5 - .../node_modules/lodash/fp/isWeakSet.js | 5 - .../node_modules/lodash/fp/iteratee.js | 5 - .../node_modules/lodash/fp/join.js | 5 - .../node_modules/lodash/fp/juxt.js | 1 - .../node_modules/lodash/fp/kebabCase.js | 5 - .../node_modules/lodash/fp/keyBy.js | 5 - .../node_modules/lodash/fp/keys.js | 5 - .../node_modules/lodash/fp/keysIn.js | 5 - .../node_modules/lodash/fp/lang.js | 2 - .../node_modules/lodash/fp/last.js | 5 - .../node_modules/lodash/fp/lastIndexOf.js | 5 - .../node_modules/lodash/fp/lastIndexOfFrom.js | 5 - .../node_modules/lodash/fp/lowerCase.js | 5 - .../node_modules/lodash/fp/lowerFirst.js | 5 - .../node_modules/lodash/fp/lt.js | 5 - .../node_modules/lodash/fp/lte.js | 5 - .../node_modules/lodash/fp/map.js | 5 - .../node_modules/lodash/fp/mapKeys.js | 5 - .../node_modules/lodash/fp/mapValues.js | 5 - .../node_modules/lodash/fp/matches.js | 1 - .../node_modules/lodash/fp/matchesProperty.js | 5 - .../node_modules/lodash/fp/math.js | 2 - .../node_modules/lodash/fp/max.js | 5 - .../node_modules/lodash/fp/maxBy.js | 5 - .../node_modules/lodash/fp/mean.js | 5 - .../node_modules/lodash/fp/meanBy.js | 5 - .../node_modules/lodash/fp/memoize.js | 5 - .../node_modules/lodash/fp/merge.js | 5 - .../node_modules/lodash/fp/mergeAll.js | 5 - .../node_modules/lodash/fp/mergeAllWith.js | 5 - .../node_modules/lodash/fp/mergeWith.js | 5 - .../node_modules/lodash/fp/method.js | 5 - .../node_modules/lodash/fp/methodOf.js | 5 - .../node_modules/lodash/fp/min.js | 5 - .../node_modules/lodash/fp/minBy.js | 5 - .../node_modules/lodash/fp/mixin.js | 5 - .../node_modules/lodash/fp/multiply.js | 5 - .../node_modules/lodash/fp/nAry.js | 1 - .../node_modules/lodash/fp/negate.js | 5 - .../node_modules/lodash/fp/next.js | 5 - .../node_modules/lodash/fp/noop.js | 5 - .../node_modules/lodash/fp/now.js | 5 - .../node_modules/lodash/fp/nth.js | 5 - .../node_modules/lodash/fp/nthArg.js | 5 - .../node_modules/lodash/fp/number.js | 2 - .../node_modules/lodash/fp/object.js | 2 - .../node_modules/lodash/fp/omit.js | 5 - .../node_modules/lodash/fp/omitAll.js | 1 - .../node_modules/lodash/fp/omitBy.js | 5 - .../node_modules/lodash/fp/once.js | 5 - .../node_modules/lodash/fp/orderBy.js | 5 - .../node_modules/lodash/fp/over.js | 5 - .../node_modules/lodash/fp/overArgs.js | 5 - .../node_modules/lodash/fp/overEvery.js | 5 - .../node_modules/lodash/fp/overSome.js | 5 - .../node_modules/lodash/fp/pad.js | 5 - .../node_modules/lodash/fp/padChars.js | 5 - .../node_modules/lodash/fp/padCharsEnd.js | 5 - .../node_modules/lodash/fp/padCharsStart.js | 5 - .../node_modules/lodash/fp/padEnd.js | 5 - .../node_modules/lodash/fp/padStart.js | 5 - .../node_modules/lodash/fp/parseInt.js | 5 - .../node_modules/lodash/fp/partial.js | 5 - .../node_modules/lodash/fp/partialRight.js | 5 - .../node_modules/lodash/fp/partition.js | 5 - .../node_modules/lodash/fp/path.js | 1 - .../node_modules/lodash/fp/pathEq.js | 1 - .../node_modules/lodash/fp/pathOr.js | 1 - .../node_modules/lodash/fp/paths.js | 1 - .../node_modules/lodash/fp/pick.js | 5 - .../node_modules/lodash/fp/pickAll.js | 1 - .../node_modules/lodash/fp/pickBy.js | 5 - .../node_modules/lodash/fp/pipe.js | 1 - .../node_modules/lodash/fp/placeholder.js | 6 - .../node_modules/lodash/fp/plant.js | 5 - .../node_modules/lodash/fp/pluck.js | 1 - .../node_modules/lodash/fp/prop.js | 1 - .../node_modules/lodash/fp/propEq.js | 1 - .../node_modules/lodash/fp/propOr.js | 1 - .../node_modules/lodash/fp/property.js | 1 - .../node_modules/lodash/fp/propertyOf.js | 5 - .../node_modules/lodash/fp/props.js | 1 - .../node_modules/lodash/fp/pull.js | 5 - .../node_modules/lodash/fp/pullAll.js | 5 - .../node_modules/lodash/fp/pullAllBy.js | 5 - .../node_modules/lodash/fp/pullAllWith.js | 5 - .../node_modules/lodash/fp/pullAt.js | 5 - .../node_modules/lodash/fp/random.js | 5 - .../node_modules/lodash/fp/range.js | 5 - .../node_modules/lodash/fp/rangeRight.js | 5 - .../node_modules/lodash/fp/rangeStep.js | 5 - .../node_modules/lodash/fp/rangeStepRight.js | 5 - .../node_modules/lodash/fp/rearg.js | 5 - .../node_modules/lodash/fp/reduce.js | 5 - .../node_modules/lodash/fp/reduceRight.js | 5 - .../node_modules/lodash/fp/reject.js | 5 - .../node_modules/lodash/fp/remove.js | 5 - .../node_modules/lodash/fp/repeat.js | 5 - .../node_modules/lodash/fp/replace.js | 5 - .../node_modules/lodash/fp/rest.js | 5 - .../node_modules/lodash/fp/restFrom.js | 5 - .../node_modules/lodash/fp/result.js | 5 - .../node_modules/lodash/fp/reverse.js | 5 - .../node_modules/lodash/fp/round.js | 5 - .../node_modules/lodash/fp/sample.js | 5 - .../node_modules/lodash/fp/sampleSize.js | 5 - .../node_modules/lodash/fp/seq.js | 2 - .../node_modules/lodash/fp/set.js | 5 - .../node_modules/lodash/fp/setWith.js | 5 - .../node_modules/lodash/fp/shuffle.js | 5 - .../node_modules/lodash/fp/size.js | 5 - .../node_modules/lodash/fp/slice.js | 5 - .../node_modules/lodash/fp/snakeCase.js | 5 - .../node_modules/lodash/fp/some.js | 5 - .../node_modules/lodash/fp/sortBy.js | 5 - .../node_modules/lodash/fp/sortedIndex.js | 5 - .../node_modules/lodash/fp/sortedIndexBy.js | 5 - .../node_modules/lodash/fp/sortedIndexOf.js | 5 - .../node_modules/lodash/fp/sortedLastIndex.js | 5 - .../lodash/fp/sortedLastIndexBy.js | 5 - .../lodash/fp/sortedLastIndexOf.js | 5 - .../node_modules/lodash/fp/sortedUniq.js | 5 - .../node_modules/lodash/fp/sortedUniqBy.js | 5 - .../node_modules/lodash/fp/split.js | 5 - .../node_modules/lodash/fp/spread.js | 5 - .../node_modules/lodash/fp/spreadFrom.js | 5 - .../node_modules/lodash/fp/startCase.js | 5 - .../node_modules/lodash/fp/startsWith.js | 5 - .../node_modules/lodash/fp/string.js | 2 - .../node_modules/lodash/fp/stubArray.js | 5 - .../node_modules/lodash/fp/stubFalse.js | 5 - .../node_modules/lodash/fp/stubObject.js | 5 - .../node_modules/lodash/fp/stubString.js | 5 - .../node_modules/lodash/fp/stubTrue.js | 5 - .../node_modules/lodash/fp/subtract.js | 5 - .../node_modules/lodash/fp/sum.js | 5 - .../node_modules/lodash/fp/sumBy.js | 5 - .../lodash/fp/symmetricDifference.js | 1 - .../lodash/fp/symmetricDifferenceBy.js | 1 - .../lodash/fp/symmetricDifferenceWith.js | 1 - .../node_modules/lodash/fp/tail.js | 5 - .../node_modules/lodash/fp/take.js | 5 - .../node_modules/lodash/fp/takeLast.js | 1 - .../node_modules/lodash/fp/takeLastWhile.js | 1 - .../node_modules/lodash/fp/takeRight.js | 5 - .../node_modules/lodash/fp/takeRightWhile.js | 5 - .../node_modules/lodash/fp/takeWhile.js | 5 - .../node_modules/lodash/fp/tap.js | 5 - .../node_modules/lodash/fp/template.js | 5 - .../lodash/fp/templateSettings.js | 5 - .../node_modules/lodash/fp/throttle.js | 5 - .../node_modules/lodash/fp/thru.js | 5 - .../node_modules/lodash/fp/times.js | 5 - .../node_modules/lodash/fp/toArray.js | 5 - .../node_modules/lodash/fp/toFinite.js | 5 - .../node_modules/lodash/fp/toInteger.js | 5 - .../node_modules/lodash/fp/toIterator.js | 5 - .../node_modules/lodash/fp/toJSON.js | 5 - .../node_modules/lodash/fp/toLength.js | 5 - .../node_modules/lodash/fp/toLower.js | 5 - .../node_modules/lodash/fp/toNumber.js | 5 - .../node_modules/lodash/fp/toPairs.js | 5 - .../node_modules/lodash/fp/toPairsIn.js | 5 - .../node_modules/lodash/fp/toPath.js | 5 - .../node_modules/lodash/fp/toPlainObject.js | 5 - .../node_modules/lodash/fp/toSafeInteger.js | 5 - .../node_modules/lodash/fp/toString.js | 5 - .../node_modules/lodash/fp/toUpper.js | 5 - .../node_modules/lodash/fp/transform.js | 5 - .../node_modules/lodash/fp/trim.js | 5 - .../node_modules/lodash/fp/trimChars.js | 5 - .../node_modules/lodash/fp/trimCharsEnd.js | 5 - .../node_modules/lodash/fp/trimCharsStart.js | 5 - .../node_modules/lodash/fp/trimEnd.js | 5 - .../node_modules/lodash/fp/trimStart.js | 5 - .../node_modules/lodash/fp/truncate.js | 5 - .../node_modules/lodash/fp/unapply.js | 1 - .../node_modules/lodash/fp/unary.js | 5 - .../node_modules/lodash/fp/unescape.js | 5 - .../node_modules/lodash/fp/union.js | 5 - .../node_modules/lodash/fp/unionBy.js | 5 - .../node_modules/lodash/fp/unionWith.js | 5 - .../node_modules/lodash/fp/uniq.js | 5 - .../node_modules/lodash/fp/uniqBy.js | 5 - .../node_modules/lodash/fp/uniqWith.js | 5 - .../node_modules/lodash/fp/uniqueId.js | 5 - .../node_modules/lodash/fp/unnest.js | 1 - .../node_modules/lodash/fp/unset.js | 5 - .../node_modules/lodash/fp/unzip.js | 5 - .../node_modules/lodash/fp/unzipWith.js | 5 - .../node_modules/lodash/fp/update.js | 5 - .../node_modules/lodash/fp/updateWith.js | 5 - .../node_modules/lodash/fp/upperCase.js | 5 - .../node_modules/lodash/fp/upperFirst.js | 5 - .../node_modules/lodash/fp/useWith.js | 1 - .../node_modules/lodash/fp/util.js | 2 - .../node_modules/lodash/fp/value.js | 5 - .../node_modules/lodash/fp/valueOf.js | 5 - .../node_modules/lodash/fp/values.js | 5 - .../node_modules/lodash/fp/valuesIn.js | 5 - .../node_modules/lodash/fp/where.js | 1 - .../node_modules/lodash/fp/whereEq.js | 1 - .../node_modules/lodash/fp/without.js | 5 - .../node_modules/lodash/fp/words.js | 5 - .../node_modules/lodash/fp/wrap.js | 5 - .../node_modules/lodash/fp/wrapperAt.js | 5 - .../node_modules/lodash/fp/wrapperChain.js | 5 - .../node_modules/lodash/fp/wrapperLodash.js | 5 - .../node_modules/lodash/fp/wrapperReverse.js | 5 - .../node_modules/lodash/fp/wrapperValue.js | 5 - .../node_modules/lodash/fp/xor.js | 5 - .../node_modules/lodash/fp/xorBy.js | 5 - .../node_modules/lodash/fp/xorWith.js | 5 - .../node_modules/lodash/fp/zip.js | 5 - .../node_modules/lodash/fp/zipAll.js | 5 - .../node_modules/lodash/fp/zipObj.js | 1 - .../node_modules/lodash/fp/zipObject.js | 5 - .../node_modules/lodash/fp/zipObjectDeep.js | 5 - .../node_modules/lodash/fp/zipWith.js | 5 - .../node_modules/lodash/fromPairs.js | 28 - .../node_modules/lodash/function.js | 25 - .../node_modules/lodash/functions.js | 31 - .../node_modules/lodash/functionsIn.js | 31 - .../node_modules/lodash/get.js | 33 - .../node_modules/lodash/groupBy.js | 41 - .../node_modules/lodash/gt.js | 29 - .../node_modules/lodash/gte.js | 30 - .../node_modules/lodash/has.js | 35 - .../node_modules/lodash/hasIn.js | 34 - .../node_modules/lodash/head.js | 23 - .../node_modules/lodash/identity.js | 21 - .../node_modules/lodash/inRange.js | 55 - .../node_modules/lodash/includes.js | 53 - .../node_modules/lodash/index.js | 1 - .../node_modules/lodash/indexOf.js | 42 - .../node_modules/lodash/initial.js | 22 - .../node_modules/lodash/intersection.js | 30 - .../node_modules/lodash/intersectionBy.js | 45 - .../node_modules/lodash/intersectionWith.js | 41 - .../node_modules/lodash/invert.js | 27 - .../node_modules/lodash/invertBy.js | 44 - .../node_modules/lodash/invoke.js | 24 - .../node_modules/lodash/invokeMap.js | 41 - .../node_modules/lodash/isArguments.js | 36 - .../node_modules/lodash/isArray.js | 26 - .../node_modules/lodash/isArrayBuffer.js | 27 - .../node_modules/lodash/isArrayLike.js | 33 - .../node_modules/lodash/isArrayLikeObject.js | 33 - .../node_modules/lodash/isBoolean.js | 29 - .../node_modules/lodash/isBuffer.js | 38 - .../node_modules/lodash/isDate.js | 27 - .../node_modules/lodash/isElement.js | 25 - .../node_modules/lodash/isEmpty.js | 77 - .../node_modules/lodash/isEqual.js | 35 - .../node_modules/lodash/isEqualWith.js | 41 - .../node_modules/lodash/isError.js | 36 - .../node_modules/lodash/isFinite.js | 36 - .../node_modules/lodash/isFunction.js | 37 - .../node_modules/lodash/isInteger.js | 33 - .../node_modules/lodash/isLength.js | 35 - .../node_modules/lodash/isMap.js | 27 - .../node_modules/lodash/isMatch.js | 36 - .../node_modules/lodash/isMatchWith.js | 41 - .../node_modules/lodash/isNaN.js | 38 - .../node_modules/lodash/isNative.js | 40 - .../node_modules/lodash/isNil.js | 25 - .../node_modules/lodash/isNull.js | 22 - .../node_modules/lodash/isNumber.js | 38 - .../node_modules/lodash/isObject.js | 31 - .../node_modules/lodash/isObjectLike.js | 29 - .../node_modules/lodash/isPlainObject.js | 62 - .../node_modules/lodash/isRegExp.js | 27 - .../node_modules/lodash/isSafeInteger.js | 37 - .../node_modules/lodash/isSet.js | 27 - .../node_modules/lodash/isString.js | 30 - .../node_modules/lodash/isSymbol.js | 29 - .../node_modules/lodash/isTypedArray.js | 27 - .../node_modules/lodash/isUndefined.js | 22 - .../node_modules/lodash/isWeakMap.js | 28 - .../node_modules/lodash/isWeakSet.js | 28 - .../node_modules/lodash/iteratee.js | 53 - .../node_modules/lodash/join.js | 26 - .../node_modules/lodash/kebabCase.js | 28 - .../node_modules/lodash/keyBy.js | 36 - .../node_modules/lodash/keys.js | 37 - .../node_modules/lodash/keysIn.js | 32 - .../node_modules/lodash/lang.js | 58 - .../node_modules/lodash/last.js | 20 - .../node_modules/lodash/lastIndexOf.js | 46 - .../node_modules/lodash/lodash.js | 17065 ---------------- .../node_modules/lodash/lodash.min.js | 136 - .../node_modules/lodash/lowerCase.js | 27 - .../node_modules/lodash/lowerFirst.js | 22 - .../node_modules/lodash/lt.js | 29 - .../node_modules/lodash/lte.js | 30 - .../node_modules/lodash/map.js | 53 - .../node_modules/lodash/mapKeys.js | 36 - .../node_modules/lodash/mapValues.js | 43 - .../node_modules/lodash/matches.js | 39 - .../node_modules/lodash/matchesProperty.js | 37 - .../node_modules/lodash/math.js | 17 - .../node_modules/lodash/max.js | 29 - .../node_modules/lodash/maxBy.js | 34 - .../node_modules/lodash/mean.js | 22 - .../node_modules/lodash/meanBy.js | 31 - .../node_modules/lodash/memoize.js | 73 - .../node_modules/lodash/merge.js | 39 - .../node_modules/lodash/mergeWith.js | 39 - .../node_modules/lodash/method.js | 34 - .../node_modules/lodash/methodOf.js | 33 - .../node_modules/lodash/min.js | 29 - .../node_modules/lodash/minBy.js | 34 - .../node_modules/lodash/mixin.js | 74 - .../node_modules/lodash/multiply.js | 22 - .../node_modules/lodash/negate.js | 40 - .../node_modules/lodash/next.js | 35 - .../node_modules/lodash/noop.js | 17 - .../node_modules/lodash/now.js | 23 - .../node_modules/lodash/nth.js | 29 - .../node_modules/lodash/nthArg.js | 32 - .../node_modules/lodash/number.js | 5 - .../node_modules/lodash/object.js | 49 - .../node_modules/lodash/omit.js | 56 - .../node_modules/lodash/omitBy.js | 29 - .../node_modules/lodash/once.js | 25 - .../node_modules/lodash/orderBy.js | 47 - .../node_modules/lodash/over.js | 24 - .../node_modules/lodash/overArgs.js | 61 - .../node_modules/lodash/overEvery.js | 30 - .../node_modules/lodash/overSome.js | 30 - .../node_modules/lodash/package.json | 103 - .../node_modules/lodash/pad.js | 49 - .../node_modules/lodash/padEnd.js | 39 - .../node_modules/lodash/padStart.js | 39 - .../node_modules/lodash/parseInt.js | 43 - .../node_modules/lodash/partial.js | 50 - .../node_modules/lodash/partialRight.js | 49 - .../node_modules/lodash/partition.js | 43 - .../node_modules/lodash/pick.js | 25 - .../node_modules/lodash/pickBy.js | 37 - .../node_modules/lodash/plant.js | 48 - .../node_modules/lodash/property.js | 32 - .../node_modules/lodash/propertyOf.js | 30 - .../node_modules/lodash/pull.js | 29 - .../node_modules/lodash/pullAll.js | 29 - .../node_modules/lodash/pullAllBy.js | 33 - .../node_modules/lodash/pullAllWith.js | 32 - .../node_modules/lodash/pullAt.js | 43 - .../node_modules/lodash/random.js | 82 - .../node_modules/lodash/range.js | 46 - .../node_modules/lodash/rangeRight.js | 41 - .../node_modules/lodash/rearg.js | 33 - .../node_modules/lodash/reduce.js | 51 - .../node_modules/lodash/reduceRight.js | 36 - .../node_modules/lodash/reject.js | 46 - .../node_modules/lodash/remove.js | 53 - .../node_modules/lodash/repeat.js | 37 - .../node_modules/lodash/replace.js | 29 - .../node_modules/lodash/rest.js | 40 - .../node_modules/lodash/result.js | 56 - .../node_modules/lodash/reverse.js | 34 - .../node_modules/lodash/round.js | 26 - .../node_modules/lodash/sample.js | 24 - .../node_modules/lodash/sampleSize.js | 37 - .../node_modules/lodash/seq.js | 16 - .../node_modules/lodash/set.js | 35 - .../node_modules/lodash/setWith.js | 32 - .../node_modules/lodash/shuffle.js | 25 - .../node_modules/lodash/size.js | 46 - .../node_modules/lodash/slice.js | 37 - .../node_modules/lodash/snakeCase.js | 28 - .../node_modules/lodash/some.js | 51 - .../node_modules/lodash/sortBy.js | 48 - .../node_modules/lodash/sortedIndex.js | 24 - .../node_modules/lodash/sortedIndexBy.js | 33 - .../node_modules/lodash/sortedIndexOf.js | 31 - .../node_modules/lodash/sortedLastIndex.js | 25 - .../node_modules/lodash/sortedLastIndexBy.js | 33 - .../node_modules/lodash/sortedLastIndexOf.js | 31 - .../node_modules/lodash/sortedUniq.js | 24 - .../node_modules/lodash/sortedUniqBy.js | 26 - .../node_modules/lodash/split.js | 52 - .../node_modules/lodash/spread.js | 63 - .../node_modules/lodash/startCase.js | 29 - .../node_modules/lodash/startsWith.js | 36 - .../node_modules/lodash/string.js | 33 - .../node_modules/lodash/stubArray.js | 23 - .../node_modules/lodash/stubFalse.js | 18 - .../node_modules/lodash/stubObject.js | 23 - .../node_modules/lodash/stubString.js | 18 - .../node_modules/lodash/stubTrue.js | 18 - .../node_modules/lodash/subtract.js | 22 - .../node_modules/lodash/sum.js | 24 - .../node_modules/lodash/sumBy.js | 33 - .../node_modules/lodash/tail.js | 22 - .../node_modules/lodash/take.js | 37 - .../node_modules/lodash/takeRight.js | 39 - .../node_modules/lodash/takeRightWhile.js | 45 - .../node_modules/lodash/takeWhile.js | 45 - .../node_modules/lodash/tap.js | 29 - .../node_modules/lodash/template.js | 238 - .../node_modules/lodash/templateSettings.js | 67 - .../node_modules/lodash/throttle.js | 69 - .../node_modules/lodash/thru.js | 28 - .../node_modules/lodash/times.js | 51 - .../node_modules/lodash/toArray.js | 58 - .../node_modules/lodash/toFinite.js | 42 - .../node_modules/lodash/toInteger.js | 36 - .../node_modules/lodash/toIterator.js | 23 - .../node_modules/lodash/toJSON.js | 1 - .../node_modules/lodash/toLength.js | 38 - .../node_modules/lodash/toLower.js | 28 - .../node_modules/lodash/toNumber.js | 66 - .../node_modules/lodash/toPairs.js | 30 - .../node_modules/lodash/toPairsIn.js | 30 - .../node_modules/lodash/toPath.js | 33 - .../node_modules/lodash/toPlainObject.js | 32 - .../node_modules/lodash/toSafeInteger.js | 35 - .../node_modules/lodash/toString.js | 28 - .../node_modules/lodash/toUpper.js | 28 - .../node_modules/lodash/transform.js | 65 - .../node_modules/lodash/trim.js | 49 - .../node_modules/lodash/trimEnd.js | 43 - .../node_modules/lodash/trimStart.js | 43 - .../node_modules/lodash/truncate.js | 111 - .../node_modules/lodash/unary.js | 22 - .../node_modules/lodash/unescape.js | 34 - .../node_modules/lodash/union.js | 26 - .../node_modules/lodash/unionBy.js | 39 - .../node_modules/lodash/unionWith.js | 34 - .../node_modules/lodash/uniq.js | 25 - .../node_modules/lodash/uniqBy.js | 31 - .../node_modules/lodash/uniqWith.js | 28 - .../node_modules/lodash/uniqueId.js | 28 - .../node_modules/lodash/unset.js | 34 - .../node_modules/lodash/unzip.js | 45 - .../node_modules/lodash/unzipWith.js | 39 - .../node_modules/lodash/update.js | 35 - .../node_modules/lodash/updateWith.js | 33 - .../node_modules/lodash/upperCase.js | 27 - .../node_modules/lodash/upperFirst.js | 22 - .../node_modules/lodash/util.js | 34 - .../node_modules/lodash/value.js | 1 - .../node_modules/lodash/valueOf.js | 1 - .../node_modules/lodash/values.js | 34 - .../node_modules/lodash/valuesIn.js | 32 - .../node_modules/lodash/without.js | 31 - .../node_modules/lodash/words.js | 35 - .../node_modules/lodash/wrap.js | 30 - .../node_modules/lodash/wrapperAt.js | 48 - .../node_modules/lodash/wrapperChain.js | 34 - .../node_modules/lodash/wrapperLodash.js | 147 - .../node_modules/lodash/wrapperReverse.js | 44 - .../node_modules/lodash/wrapperValue.js | 21 - .../node_modules/lodash/xor.js | 28 - .../node_modules/lodash/xorBy.js | 39 - .../node_modules/lodash/xorWith.js | 34 - .../node_modules/lodash/zip.js | 22 - .../node_modules/lodash/zipObject.js | 24 - .../node_modules/lodash/zipObjectDeep.js | 23 - .../node_modules/lodash/zipWith.js | 32 - .../node_modules/longest/LICENSE | 21 - .../node_modules/longest/README.md | 65 - .../node_modules/longest/index.js | 37 - .../node_modules/longest/package.json | 96 - .../node_modules/loose-envify/.npmignore | 3 - .../node_modules/loose-envify/LICENSE | 21 - .../node_modules/loose-envify/README.md | 45 - .../node_modules/loose-envify/cli.js | 16 - .../node_modules/loose-envify/custom.js | 4 - .../node_modules/loose-envify/index.js | 3 - .../node_modules/loose-envify/loose-envify.js | 36 - .../node_modules/loose-envify/package.json | 94 - .../node_modules/loose-envify/replace.js | 65 - .../node_modules/makeerror/.travis.yml | 3 - .../node_modules/makeerror/lib/makeerror.js | 87 - .../node_modules/makeerror/license | 28 - .../node_modules/makeerror/package.json | 76 - .../node_modules/makeerror/readme.md | 77 - .../node_modules/marked-terminal/README.md | 129 - .../node_modules/marked-terminal/index.js | 344 - .../node_modules/marked-terminal/package.json | 99 - .../node_modules/marked/.npmignore | 2 - .../node_modules/marked/.travis.yml | 5 - .../node_modules/marked/Gulpfile.js | 22 - .../node_modules/marked/LICENSE | 19 - .../node_modules/marked/Makefile | 12 - .../node_modules/marked/README.md | 406 - .../node_modules/marked/bin/marked | 187 - .../node_modules/marked/bower.json | 24 - .../node_modules/marked/component.json | 10 - .../node_modules/marked/doc/broken.md | 426 - .../node_modules/marked/doc/todo.md | 2 - .../node_modules/marked/index.js | 1 - .../node_modules/marked/lib/marked.js | 1286 -- .../node_modules/marked/man/marked.1 | 91 - .../node_modules/marked/marked.min.js | 6 - .../node_modules/marked/package.json | 99 - .../node_modules/merge/.npmignore | 1 - .../node_modules/merge/LICENSE | 21 - .../node_modules/merge/README.md | 58 - .../node_modules/merge/bower.json | 22 - .../node_modules/merge/merge.js | 175 - .../node_modules/merge/merge.min.js | 3 - .../node_modules/merge/package.json | 79 - .../node_modules/micromatch/LICENSE | 21 - .../node_modules/micromatch/README.md | 689 - .../node_modules/micromatch/index.js | 431 - .../node_modules/micromatch/lib/chars.js | 67 - .../node_modules/micromatch/lib/expand.js | 304 - .../node_modules/micromatch/lib/glob.js | 193 - .../node_modules/micromatch/lib/utils.js | 149 - .../node_modules/micromatch/package.json | 180 - .../node_modules/mime-db/HISTORY.md | 375 - .../node_modules/mime-db/LICENSE | 22 - .../node_modules/mime-db/README.md | 82 - .../node_modules/mime-db/db.json | 6712 ------ .../node_modules/mime-db/index.js | 11 - .../node_modules/mime-db/package.json | 129 - .../node_modules/mime-types/HISTORY.md | 210 - .../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 | 119 - .../node_modules/minimatch/LICENSE | 15 - .../node_modules/minimatch/README.md | 209 - .../node_modules/minimatch/minimatch.js | 923 - .../node_modules/minimatch/package.json | 89 - .../node_modules/minimist/.travis.yml | 4 - .../node_modules/minimist/LICENSE | 18 - .../node_modules/minimist/example/parse.js | 2 - .../node_modules/minimist/index.js | 187 - .../node_modules/minimist/package.json | 93 - .../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 - .../node_modules/mkdirp/LICENSE | 21 - .../node_modules/mkdirp/bin/cmd.js | 33 - .../node_modules/mkdirp/bin/usage.txt | 12 - .../node_modules/mkdirp/examples/pow.js | 6 - .../node_modules/mkdirp/index.js | 98 - .../node_modules/mkdirp/package.json | 85 - .../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/ms/LICENSE.md | 21 - .../node_modules/ms/README.md | 52 - .../node_modules/ms/index.js | 149 - .../node_modules/ms/package.json | 100 - .../node_modules/multimatch/index.js | 27 - .../node_modules/multimatch/license | 21 - .../node_modules/multimatch/package.json | 100 - .../node_modules/multimatch/readme.md | 62 - .../node_modules/natural-compare/README.md | 125 - .../node_modules/natural-compare/index.js | 57 - .../node_modules/natural-compare/package.json | 101 - .../node_modules/node-emoji/.npmignore | 6 - .../node_modules/node-emoji/.travis.yml | 3 - .../node_modules/node-emoji/LICENSE | 21 - .../node_modules/node-emoji/README.md | 41 - .../node_modules/node-emoji/index.js | 1 - .../node_modules/node-emoji/lib/emoji.js | 90 - .../node_modules/node-emoji/lib/emoji.json | 1 - .../node_modules/node-emoji/lib/emojifile.js | 1304 -- .../node_modules/node-emoji/lib/emojiparse.js | 27 - .../node_modules/node-emoji/package.json | 95 - .../node_modules/node-emoji/test/emoji.js | 80 - .../node_modules/node-int64/.npmignore | 3 - .../node_modules/node-int64/Int64.js | 268 - .../node_modules/node-int64/LICENSE | 19 - .../node_modules/node-int64/README.md | 78 - .../node_modules/node-int64/package.json | 81 - .../node_modules/node-int64/test.js | 120 - .../node_modules/node-notifier/.npmignore | 4 - .../node_modules/node-notifier/.travis.yml | 10 - .../node_modules/node-notifier/CHANGELOG.md | 159 - .../node_modules/node-notifier/README.md | 368 - .../node_modules/node-notifier/bin.js | 99 - .../node_modules/node-notifier/index.js | 41 - .../node-notifier/lib/checkGrowl.js | 25 - .../node_modules/node-notifier/lib/utils.js | 358 - .../node_modules/minimist/.travis.yml | 8 - .../node_modules/minimist/LICENSE | 18 - .../node_modules/minimist/example/parse.js | 2 - .../node_modules/minimist/index.js | 236 - .../node_modules/minimist/package.json | 99 - .../node_modules/minimist/readme.markdown | 91 - .../node_modules/minimist/test/all_bool.js | 32 - .../node_modules/minimist/test/bool.js | 166 - .../node_modules/minimist/test/dash.js | 31 - .../minimist/test/default_bool.js | 35 - .../node_modules/minimist/test/dotted.js | 22 - .../node_modules/minimist/test/kv_short.js | 16 - .../node_modules/minimist/test/long.js | 31 - .../node_modules/minimist/test/num.js | 36 - .../node_modules/minimist/test/parse.js | 197 - .../minimist/test/parse_modified.js | 9 - .../node_modules/minimist/test/short.js | 67 - .../node_modules/minimist/test/stop_early.js | 15 - .../node_modules/minimist/test/unknown.js | 102 - .../node_modules/minimist/test/whitespace.js | 8 - .../node-notifier/notifiers/balloon.js | 149 - .../node-notifier/notifiers/growl.js | 74 - .../notifiers/notificationcenter.js | 81 - .../node-notifier/notifiers/notifysend.js | 93 - .../node-notifier/notifiers/toaster.js | 67 - .../node_modules/node-notifier/package.json | 102 - .../node-notifier/vendor/notifu/notifu.exe | Bin 245248 -> 0 bytes .../node-notifier/vendor/notifu/notifu64.exe | Bin 323584 -> 0 bytes .../terminal-notifier.app/Contents/Info.plist | 56 - .../Contents/MacOS/terminal-notifier | Bin 73560 -> 0 bytes .../terminal-notifier.app/Contents/PkgInfo | 1 - .../Contents/Resources/Terminal.icns | Bin 369386 -> 0 bytes .../Contents/Resources/en.lproj/Credits.rtf | 29 - .../Resources/en.lproj/InfoPlist.strings | Bin 92 -> 0 bytes .../Contents/Resources/en.lproj/MainMenu.nib | Bin 25790 -> 0 bytes .../Microsoft.WindowsAPICodePack.Shell.dll | Bin 542208 -> 0 bytes .../toaster/Microsoft.WindowsAPICodePack.dll | Bin 104960 -> 0 bytes .../node-notifier/vendor/toaster/toast.exe | Bin 14848 -> 0 bytes .../node_modules/nopt/.npmignore | 1 - .../node_modules/nopt/.travis.yml | 9 - .../node_modules/nopt/LICENSE | 15 - .../node_modules/nopt/README.md | 211 - .../node_modules/nopt/bin/nopt.js | 54 - .../node_modules/nopt/examples/my-program.js | 30 - .../node_modules/nopt/lib/nopt.js | 415 - .../node_modules/nopt/package.json | 88 - .../node_modules/nopt/test/basic.js | 273 - .../normalize-package-data/.npmignore | 1 - .../normalize-package-data/.travis.yml | 3 - .../normalize-package-data/AUTHORS | 4 - .../normalize-package-data/LICENSE | 30 - .../normalize-package-data/README.md | 107 - .../lib/extract_description.js | 14 - .../normalize-package-data/lib/fixer.js | 418 - .../lib/make_warning.js | 23 - .../normalize-package-data/lib/normalize.js | 39 - .../normalize-package-data/lib/safe_format.js | 9 - .../normalize-package-data/lib/typos.json | 25 - .../lib/warning_messages.json | 31 - .../normalize-package-data/package.json | 111 - .../normalize-package-data/test/basic.js | 34 - .../test/consistency.js | 36 - .../test/dependencies.js | 44 - .../test/fixtures/async.json | 36 - .../test/fixtures/badscripts.json | 5 - .../test/fixtures/bcrypt.json | 56 - .../test/fixtures/coffee-script.json | 35 - .../test/fixtures/http-server.json | 53 - .../test/fixtures/movefile.json | 21 - .../test/fixtures/no-description.json | 4 - .../test/fixtures/node-module_exist.json | 26 - .../test/fixtures/npm.json | 135 - .../test/fixtures/read-package-json.json | 28 - .../test/fixtures/request.json | 39 - .../test/fixtures/underscore.json | 17 - .../test/github-urls.js | 44 - .../test/mixedcase-names.js | 32 - .../normalize-package-data/test/normalize.js | 246 - .../normalize-package-data/test/normalize.js~ | 253 - .../normalize-package-data/test/scoped.js | 59 - .../normalize-package-data/test/scripts.js | 24 - .../normalize-package-data/test/strict.js | 54 - .../normalize-package-data/test/typo.js | 133 - .../node_modules/normalize-path/LICENSE | 21 - .../node_modules/normalize-path/README.md | 75 - .../node_modules/normalize-path/index.js | 17 - .../node_modules/normalize-path/package.json | 118 - .../node_modules/number-is-nan/index.js | 4 - .../node_modules/number-is-nan/license | 21 - .../node_modules/number-is-nan/package.json | 95 - .../node_modules/number-is-nan/readme.md | 28 - .../node_modules/nwmatcher/LICENSE | 22 - .../node_modules/nwmatcher/README.md | 107 - .../node_modules/nwmatcher/package.json | 91 - .../nwmatcher/src/modules/nwmatcher-cache.js | 187 - .../nwmatcher/src/modules/nwmatcher-jquery.js | 126 - .../src/modules/nwmatcher-pseudos.js | 273 - .../src/modules/nwmatcher-shortcuts.js | 35 - .../src/modules/nwmatcher-traversal.js | 90 - .../src/modules/nwmatcher-webforms.js | 104 - .../nwmatcher/src/nwmatcher-base.js | 785 - .../nwmatcher/src/nwmatcher-noqsa.js | 962 - .../node_modules/nwmatcher/src/nwmatcher.js | 1780 -- .../node_modules/oauth-sign/LICENSE | 55 - .../node_modules/oauth-sign/README.md | 4 - .../node_modules/oauth-sign/index.js | 136 - .../node_modules/oauth-sign/package.json | 90 - .../node_modules/object-assign/index.js | 83 - .../node_modules/object-assign/license | 21 - .../node_modules/object-assign/package.json | 107 - .../node_modules/object-assign/readme.md | 56 - .../node_modules/object.omit/LICENSE | 21 - .../node_modules/object.omit/README.md | 118 - .../node_modules/object.omit/index.js | 40 - .../node_modules/object.omit/package.json | 129 - .../node_modules/once/LICENSE | 15 - .../node_modules/once/README.md | 79 - .../node_modules/once/once.js | 42 - .../node_modules/once/package.json | 96 - .../node_modules/optimist/.travis.yml | 4 - .../node_modules/optimist/LICENSE | 21 - .../node_modules/optimist/example/bool.js | 10 - .../optimist/example/boolean_double.js | 7 - .../optimist/example/boolean_single.js | 7 - .../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 - .../node_modules/optimist/index.js | 343 - .../node_modules/optimist/package.json | 89 - .../node_modules/optimist/readme.markdown | 513 - .../node_modules/optimist/test/_.js | 71 - .../node_modules/optimist/test/_/argv.js | 2 - .../node_modules/optimist/test/_/bin.js | 3 - .../node_modules/optimist/test/dash.js | 31 - .../node_modules/optimist/test/parse.js | 446 - .../optimist/test/parse_modified.js | 14 - .../node_modules/optimist/test/short.js | 16 - .../node_modules/optimist/test/usage.js | 292 - .../node_modules/optimist/test/whitespace.js | 8 - .../node_modules/optionator/CHANGELOG.md | 52 - .../node_modules/optionator/LICENSE | 22 - .../node_modules/optionator/README.md | 236 - .../node_modules/optionator/lib/help.js | 247 - .../node_modules/optionator/lib/index.js | 465 - .../node_modules/optionator/lib/util.js | 54 - .../optionator/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 - .../optionator/node_modules/wordwrap/index.js | 76 - .../node_modules/wordwrap/package.json | 86 - .../node_modules/wordwrap/test/break.js | 32 - .../node_modules/wordwrap/test/idleness.txt | 63 - .../node_modules/wordwrap/test/wrap.js | 33 - .../node_modules/optionator/package.json | 101 - .../node_modules/os-homedir/index.js | 24 - .../node_modules/os-homedir/license | 21 - .../node_modules/os-homedir/package.json | 101 - .../node_modules/os-homedir/readme.md | 31 - .../node_modules/os-locale/index.js | 127 - .../node_modules/os-locale/license | 21 - .../node_modules/os-locale/package.json | 106 - .../node_modules/os-locale/readme.md | 47 - .../node_modules/os-tmpdir/index.js | 25 - .../node_modules/os-tmpdir/license | 21 - .../node_modules/os-tmpdir/package.json | 101 - .../node_modules/os-tmpdir/readme.md | 32 - .../node_modules/parse-glob/LICENSE | 21 - .../node_modules/parse-glob/README.md | 115 - .../node_modules/parse-glob/index.js | 156 - .../node_modules/parse-glob/package.json | 116 - .../node_modules/parse-json/index.js | 35 - .../node_modules/parse-json/license | 21 - .../node_modules/parse-json/package.json | 101 - .../node_modules/parse-json/readme.md | 83 - .../node_modules/parse-json/vendor/parse.js | 752 - .../node_modules/parse-json/vendor/unicode.js | 71 - .../node_modules/parse5/CHANGELOG.md | 69 - .../node_modules/parse5/LICENSE | 19 - .../node_modules/parse5/README.md | 247 - .../node_modules/parse5/docs/build/index.md | 963 - .../node_modules/parse5/index.js | 12 - .../node_modules/parse5/lib/common/doctype.js | 134 - .../parse5/lib/common/foreign_content.js | 257 - .../node_modules/parse5/lib/common/html.js | 268 - .../node_modules/parse5/lib/common/unicode.js | 48 - .../node_modules/parse5/lib/common/utils.js | 13 - .../parse5/lib/jsdom/jsdom_parser.js | 39 - .../parse5/lib/jsdom/parsing_unit.js | 53 - .../parse5/lib/serialization/serializer.js | 178 - .../lib/simple_api/simple_api_parser.js | 107 - .../parse5/lib/simple_api/tokenizer_proxy.js | 122 - .../lib/tokenization/location_info_mixin.js | 80 - .../lib/tokenization/named_entity_trie.js | 6 - .../parse5/lib/tokenization/preprocessor.js | 115 - .../parse5/lib/tokenization/tokenizer.js | 2317 --- .../parse5/lib/tree_adapters/default.js | 200 - .../parse5/lib/tree_adapters/htmlparser2.js | 317 - .../formatting_element_list.js | 167 - .../tree_construction/location_info_mixin.js | 197 - .../tree_construction/open_element_stack.js | 379 - .../parse5/lib/tree_construction/parser.js | 2827 --- .../node_modules/parse5/package.json | 117 - .../node_modules/path-exists/index.js | 24 - .../node_modules/path-exists/license | 21 - .../node_modules/path-exists/package.json | 95 - .../node_modules/path-exists/readme.md | 45 - .../node_modules/path-is-absolute/index.js | 20 - .../node_modules/path-is-absolute/license | 21 - .../path-is-absolute/package.json | 103 - .../node_modules/path-is-absolute/readme.md | 59 - .../node_modules/path-parse/.travis.yml | 9 - .../node_modules/path-parse/README.md | 44 - .../node_modules/path-parse/index.js | 93 - .../node_modules/path-parse/index.min.js | 1 - .../node_modules/path-parse/package.json | 84 - .../node_modules/path-parse/test.js | 77 - .../node_modules/path-parse/test.min.js | 1 - .../node_modules/path-type/index.js | 29 - .../node_modules/path-type/license | 21 - .../node_modules/path-type/package.json | 107 - .../node_modules/path-type/readme.md | 42 - .../node_modules/pify/index.js | 68 - .../node_modules/pify/license | 21 - .../node_modules/pify/package.json | 105 - .../node_modules/pify/readme.md | 119 - .../node_modules/pinkie-promise/index.js | 3 - .../node_modules/pinkie-promise/license | 21 - .../node_modules/pinkie-promise/package.json | 97 - .../node_modules/pinkie-promise/readme.md | 28 - .../node_modules/pinkie/index.js | 292 - .../node_modules/pinkie/license | 21 - .../node_modules/pinkie/package.json | 92 - .../node_modules/pinkie/readme.md | 83 - .../node_modules/prelude-ls/CHANGELOG.md | 99 - .../node_modules/prelude-ls/LICENSE | 22 - .../node_modules/prelude-ls/README.md | 15 - .../node_modules/prelude-ls/lib/Func.js | 65 - .../node_modules/prelude-ls/lib/List.js | 686 - .../node_modules/prelude-ls/lib/Num.js | 130 - .../node_modules/prelude-ls/lib/Obj.js | 154 - .../node_modules/prelude-ls/lib/Str.js | 92 - .../node_modules/prelude-ls/lib/index.js | 178 - .../node_modules/prelude-ls/package.json | 108 - .../node_modules/preserve/.gitattributes | 14 - .../node_modules/preserve/.jshintrc | 24 - .../node_modules/preserve/.npmignore | 53 - .../node_modules/preserve/.travis.yml | 3 - .../node_modules/preserve/.verb.md | 59 - .../node_modules/preserve/LICENSE | 24 - .../node_modules/preserve/README.md | 90 - .../node_modules/preserve/index.js | 54 - .../node_modules/preserve/package.json | 96 - .../node_modules/preserve/test.js | 48 - .../node_modules/pretty-format/.npmignore | 3 - .../node_modules/pretty-format/LICENSE.md | 15 - .../node_modules/pretty-format/README.md | 95 - .../node_modules/pretty-format/index.js | 347 - .../node_modules/pretty-format/package.json | 93 - .../pretty-format/plugins/ReactElement.js | 83 - .../plugins/ReactTestComponent.js | 58 - .../node_modules/pretty-format/printString.js | 7 - .../node_modules/private/.travis.yml | 6 - .../node_modules/private/LICENSE | 20 - .../node_modules/private/README.md | 246 - .../node_modules/private/package.json | 85 - .../node_modules/private/private.js | 129 - .../node_modules/private/test/run.js | 68 - .../node_modules/prr/.jshintrc | 61 - .../node_modules/prr/.npmignore | 1 - .../node_modules/prr/.travis.yml | 10 - .../node_modules/prr/LICENSE | 39 - .../node_modules/prr/README.md | 45 - .../node_modules/prr/package.json | 77 - .../bug-challenge-es6/node_modules/prr/prr.js | 63 - .../node_modules/prr/test.js | 169 - .../node_modules/punycode/LICENSE-MIT.txt | 20 - .../node_modules/punycode/README.md | 176 - .../node_modules/punycode/package.json | 119 - .../node_modules/punycode/punycode.js | 533 - .../node_modules/qs/.eslintignore | 1 - .../node_modules/qs/.eslintrc | 19 - .../node_modules/qs/CHANGELOG.md | 144 - .../node_modules/qs/CONTRIBUTING.md | 1 - .../bug-challenge-es6/node_modules/qs/LICENSE | 28 - .../node_modules/qs/README.md | 398 - .../node_modules/qs/dist/qs.js | 574 - .../node_modules/qs/lib/formats.js | 18 - .../node_modules/qs/lib/index.js | 11 - .../node_modules/qs/lib/parse.js | 166 - .../node_modules/qs/lib/stringify.js | 187 - .../node_modules/qs/lib/utils.js | 180 - .../node_modules/qs/package.json | 113 - .../node_modules/qs/test/.eslintrc | 9 - .../node_modules/qs/test/index.js | 7 - .../node_modules/qs/test/parse.js | 459 - .../node_modules/qs/test/stringify.js | 538 - .../node_modules/qs/test/utils.js | 22 - .../node_modules/randomatic/LICENSE | 21 - .../node_modules/randomatic/README.md | 152 - .../node_modules/randomatic/index.js | 83 - .../node_modules/randomatic/package.json | 133 - .../node_modules/read-pkg-up/index.js | 31 - .../node_modules/read-pkg-up/license | 21 - .../node_modules/read-pkg-up/package.json | 114 - .../node_modules/read-pkg-up/readme.md | 79 - .../node_modules/read-pkg/index.js | 48 - .../node_modules/read-pkg/license | 21 - .../node_modules/read-pkg/package.json | 97 - .../node_modules/read-pkg/readme.md | 79 - .../node_modules/redeyed/.npmignore | 15 - .../node_modules/redeyed/.travis.yml | 7 - .../node_modules/redeyed/LICENSE | 23 - .../node_modules/redeyed/README.md | 199 - .../node_modules/redeyed/config-es5.js | 140 - .../node_modules/redeyed/config.js | 159 - .../redeyed/examples/browser/index.css | 31 - .../redeyed/examples/browser/index.html | 35 - .../redeyed/examples/browser/index.js | 33 - .../redeyed/examples/browser/sample-config.js | 131 - .../redeyed/examples/replace-log.js | 61 - .../redeyed/examples/sources/log.js | 8 - .../redeyed/node_modules/.bin/esparse | 1 - .../redeyed/node_modules/.bin/esvalidate | 1 - .../redeyed/node_modules/esprima/ChangeLog | 184 - .../redeyed/node_modules/esprima/LICENSE.BSD | 21 - .../redeyed/node_modules/esprima/README.md | 48 - .../node_modules/esprima/bin/esparse.js | 139 - .../node_modules/esprima/bin/esvalidate.js | 236 - .../node_modules/esprima/dist/esprima.js | 6354 ------ .../redeyed/node_modules/esprima/package.json | 155 - .../node_modules/redeyed/package.json | 93 - .../node_modules/redeyed/redeyed.js | 324 - .../test/redeyed-before-after-config.js | 56 - .../redeyed/test/redeyed-browser.js | 69 - .../redeyed/test/redeyed-comments.js | 75 - .../test/redeyed-config-with-undefineds.js | 60 - .../redeyed-function-config-extra-params.js | 58 - ...redeyed-function-config-skipping-tokens.js | 89 - .../redeyed/test/redeyed-function-config.js | 148 - .../redeyed/test/redeyed-incomplete.js | 38 - .../redeyed/test/redeyed-keywords.js | 45 - .../redeyed/test/redeyed-mixed.js | 48 - .../redeyed/test/redeyed-result.js | 65 - .../test/redeyed-script-level-return.js | 22 - .../redeyed/test/redeyed-shebang.js | 26 - .../redeyed/test/redeyed-smoke.js | 78 - .../redeyed/test/redeyed-string-config.js | 127 - .../redeyed/test/redeyed-types.js | 77 - .../redeyed/test/redeyed-upcoming.js | 46 - .../node_modules/regenerate/LICENSE-MIT.txt | 20 - .../node_modules/regenerate/README.md | 344 - .../node_modules/regenerate/package.json | 93 - .../node_modules/regenerate/regenerate.js | 1199 -- .../regenerator-runtime/README.md | 31 - .../regenerator-runtime/package.json | 75 - .../node_modules/regenerator-runtime/path.js | 4 - .../regenerator-runtime/runtime-module.js | 31 - .../regenerator-runtime/runtime.js | 669 - .../node_modules/regex-cache/LICENSE | 21 - .../node_modules/regex-cache/README.md | 160 - .../node_modules/regex-cache/index.js | 69 - .../node_modules/regex-cache/package.json | 123 - .../node_modules/regexpu-core/LICENSE-MIT.txt | 20 - .../node_modules/regexpu-core/README.md | 62 - .../data/character-class-escape-sets.js | 101 - .../regexpu-core/data/iu-mappings.json | 296 - .../node_modules/regexpu-core/package.json | 115 - .../regexpu-core/rewrite-pattern.js | 193 - .../node_modules/regjsgen/LICENSE.txt | 20 - .../node_modules/regjsgen/README.md | 60 - .../node_modules/regjsgen/package.json | 98 - .../node_modules/regjsgen/regjsgen.js | 408 - .../node_modules/regjsparser/CHANGELOG | 12 - .../node_modules/regjsparser/LICENSE.BSD | 19 - .../node_modules/regjsparser/README.md | 34 - .../node_modules/regjsparser/bin/parser | 50 - .../regjsparser/node_modules/.bin/jsesc | 1 - .../node_modules/jsesc/LICENSE-MIT.txt | 20 - .../regjsparser/node_modules/jsesc/README.md | 375 - .../regjsparser/node_modules/jsesc/bin/jsesc | 138 - .../regjsparser/node_modules/jsesc/jsesc.js | 265 - .../node_modules/jsesc/man/jsesc.1 | 90 - .../node_modules/jsesc/package.json | 105 - .../node_modules/regjsparser/package.json | 86 - .../node_modules/regjsparser/parser.js | 962 - .../node_modules/repeat-element/LICENSE | 21 - .../node_modules/repeat-element/README.md | 71 - .../node_modules/repeat-element/index.js | 18 - .../node_modules/repeat-element/package.json | 94 - .../node_modules/repeat-string/LICENSE | 21 - .../node_modules/repeat-string/README.md | 136 - .../node_modules/repeat-string/index.js | 70 - .../node_modules/repeat-string/package.json | 160 - .../node_modules/repeating/index.js | 24 - .../node_modules/repeating/license | 21 - .../node_modules/repeating/package.json | 96 - .../node_modules/repeating/readme.md | 30 - .../node_modules/request/CHANGELOG.md | 662 - .../node_modules/request/LICENSE | 55 - .../node_modules/request/README.md | 1098 - .../node_modules/request/index.js | 156 - .../node_modules/request/lib/auth.js | 168 - .../node_modules/request/lib/cookies.js | 39 - .../request/lib/getProxyFromURI.js | 79 - .../node_modules/request/lib/har.js | 215 - .../node_modules/request/lib/helpers.js | 65 - .../node_modules/request/lib/multipart.js | 112 - .../node_modules/request/lib/oauth.js | 147 - .../node_modules/request/lib/querystring.js | 51 - .../node_modules/request/lib/redirect.js | 157 - .../node_modules/request/lib/tunnel.js | 176 - .../node_modules/request/package.json | 155 - .../node_modules/request/request.js | 1475 -- .../node_modules/require-directory/.jshintrc | 67 - .../node_modules/require-directory/.npmignore | 1 - .../require-directory/.travis.yml | 3 - .../node_modules/require-directory/LICENSE | 22 - .../require-directory/README.markdown | 184 - .../node_modules/require-directory/index.js | 86 - .../require-directory/package.json | 93 - .../require-main-filename/.npmignore | 3 - .../require-main-filename/.travis.yml | 8 - .../require-main-filename/LICENSE.txt | 14 - .../require-main-filename/README.md | 26 - .../require-main-filename/index.js | 18 - .../require-main-filename/package.json | 86 - .../require-main-filename/test.js | 36 - .../node_modules/resolve/.travis.yml | 4 - .../node_modules/resolve/LICENSE | 18 - .../node_modules/resolve/example/async.js | 5 - .../node_modules/resolve/example/sync.js | 3 - .../node_modules/resolve/index.js | 5 - .../node_modules/resolve/lib/async.js | 192 - .../node_modules/resolve/lib/caller.js | 8 - .../node_modules/resolve/lib/core.js | 4 - .../node_modules/resolve/lib/core.json | 38 - .../resolve/lib/node-modules-paths.js | 38 - .../node_modules/resolve/lib/sync.js | 81 - .../node_modules/resolve/package.json | 84 - .../node_modules/resolve/readme.markdown | 148 - .../node_modules/resolve/test/core.js | 12 - .../node_modules/resolve/test/dotdot.js | 29 - .../resolve/test/dotdot/abc/index.js | 2 - .../node_modules/resolve/test/dotdot/index.js | 1 - .../resolve/test/faulty_basedir.js | 17 - .../node_modules/resolve/test/filter.js | 18 - .../node_modules/resolve/test/filter_sync.js | 15 - .../node_modules/resolve/test/mock.js | 142 - .../node_modules/resolve/test/mock_sync.js | 68 - .../node_modules/resolve/test/module_dir.js | 56 - .../test/module_dir/xmodules/aaa/index.js | 1 - .../test/module_dir/ymodules/aaa/index.js | 1 - .../test/module_dir/zmodules/bbb/main.js | 1 - .../test/module_dir/zmodules/bbb/package.json | 3 - .../node_modules/resolve/test/node_path.js | 48 - .../resolve/test/node_path/x/aaa/index.js | 1 - .../resolve/test/node_path/x/ccc/index.js | 1 - .../resolve/test/node_path/y/bbb/index.js | 1 - .../resolve/test/node_path/y/ccc/index.js | 1 - .../node_modules/resolve/test/nonstring.js | 9 - .../node_modules/resolve/test/pathfilter.js | 35 - .../resolve/test/pathfilter/deep_ref/main.js | 0 .../deep_ref/node_modules/deep/alt.js | 0 .../deep_ref/node_modules/deep/deeper/ref.js | 0 .../deep_ref/node_modules/deep/package.json | 4 - .../deep_ref/node_modules/deep/ref.js | 0 .../node_modules/resolve/test/precedence.js | 23 - .../resolve/test/precedence/aaa.js | 1 - .../resolve/test/precedence/aaa/index.js | 1 - .../resolve/test/precedence/aaa/main.js | 1 - .../resolve/test/precedence/bbb.js | 1 - .../resolve/test/precedence/bbb/main.js | 1 - .../node_modules/resolve/test/resolver.js | 281 - .../resolver/bar/node_modules/foo/index.js | 1 - .../resolve/test/resolver/baz/doom.js | 0 .../resolve/test/resolver/baz/package.json | 3 - .../resolve/test/resolver/baz/quux.js | 1 - .../biz/node_modules/garply/lib/index.js | 1 - .../biz/node_modules/garply/package.json | 3 - .../resolver/biz/node_modules/grux/index.js | 1 - .../resolver/biz/node_modules/tiv/index.js | 1 - .../resolve/test/resolver/cup.coffee | 1 - .../node_modules/resolve/test/resolver/foo.js | 1 - .../test/resolver/incorrect_main/index.js | 2 - .../test/resolver/incorrect_main/package.json | 3 - .../resolve/test/resolver/mug.coffee | 0 .../node_modules/resolve/test/resolver/mug.js | 0 .../test/resolver/other_path/lib/other-lib.js | 0 .../resolve/test/resolver/other_path/root.js | 0 .../punycode/node_modules/punycode/index.js | 0 .../resolve/test/resolver/quux/foo/index.js | 1 - .../test/resolver/without_basedir/main.js | 6 - .../without_basedir/node_modules/mymodule.js | 1 - .../resolve/test/resolver_sync.js | 180 - .../node_modules/resolve/test/subdirs.js | 13 - .../test/subdirs/node_modules/a/b/c/x.json | 1 - .../test/subdirs/node_modules/a/package.json | 1 - .../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 | 93 - .../node_modules/rimraf/LICENSE | 15 - .../node_modules/rimraf/README.md | 101 - .../node_modules/rimraf/bin.js | 40 - .../rimraf/node_modules/glob/LICENSE | 15 - .../rimraf/node_modules/glob/README.md | 368 - .../rimraf/node_modules/glob/changelog.md | 67 - .../rimraf/node_modules/glob/common.js | 240 - .../rimraf/node_modules/glob/glob.js | 792 - .../rimraf/node_modules/glob/package.json | 103 - .../rimraf/node_modules/glob/sync.js | 486 - .../node_modules/rimraf/package.json | 99 - .../node_modules/rimraf/rimraf.js | 343 - .../node_modules/sane/README.md | 125 - .../node_modules/sane/index.js | 24 - .../sane/node_modules/minimist/.travis.yml | 8 - .../sane/node_modules/minimist/LICENSE | 18 - .../node_modules/minimist/example/parse.js | 2 - .../sane/node_modules/minimist/index.js | 236 - .../sane/node_modules/minimist/package.json | 97 - .../node_modules/minimist/readme.markdown | 91 - .../node_modules/minimist/test/all_bool.js | 32 - .../sane/node_modules/minimist/test/bool.js | 166 - .../sane/node_modules/minimist/test/dash.js | 31 - .../minimist/test/default_bool.js | 35 - .../sane/node_modules/minimist/test/dotted.js | 22 - .../node_modules/minimist/test/kv_short.js | 16 - .../sane/node_modules/minimist/test/long.js | 31 - .../sane/node_modules/minimist/test/num.js | 36 - .../sane/node_modules/minimist/test/parse.js | 197 - .../minimist/test/parse_modified.js | 9 - .../sane/node_modules/minimist/test/short.js | 67 - .../node_modules/minimist/test/stop_early.js | 15 - .../node_modules/minimist/test/unknown.js | 102 - .../node_modules/minimist/test/whitespace.js | 8 - .../node_modules/sane/package.json | 108 - .../node_modules/sane/src/cli.js | 48 - .../node_modules/sane/src/common.js | 61 - .../node_modules/sane/src/node_watcher.js | 355 - .../node_modules/sane/src/poll_watcher.js | 117 - .../sane/src/utils/recrawl-warning-dedupe.js | 47 - .../node_modules/sane/src/watchman_watcher.js | 313 - .../node_modules/sax/LICENSE | 41 - .../node_modules/sax/LICENSE-W3C.html | 188 - .../node_modules/sax/README.md | 225 - .../node_modules/sax/lib/sax.js | 1576 -- .../node_modules/sax/package.json | 125 - .../node_modules/semver/LICENSE | 15 - .../node_modules/semver/README.md | 350 - .../node_modules/semver/bin/semver | 133 - .../node_modules/semver/package.json | 87 - .../node_modules/semver/range.bnf | 16 - .../node_modules/semver/semver.js | 1203 -- .../node_modules/set-blocking/CHANGELOG.md | 26 - .../node_modules/set-blocking/LICENSE.txt | 14 - .../node_modules/set-blocking/README.md | 31 - .../node_modules/set-blocking/index.js | 7 - .../node_modules/set-blocking/package.json | 98 - .../node_modules/shellwords/.npmignore | 1 - .../node_modules/shellwords/Cakefile | 42 - .../node_modules/shellwords/LICENSE | 19 - .../node_modules/shellwords/README.md | 19 - .../node_modules/shellwords/lib/shellwords.js | 57 - .../node_modules/shellwords/package.json | 66 - .../shellwords/spec/shellwords_spec.coffee | 55 - .../shellwords/src/shellwords.coffee | 53 - .../node_modules/slash/index.js | 11 - .../node_modules/slash/package.json | 88 - .../node_modules/slash/readme.md | 44 - .../node_modules/sntp/.npmignore | 18 - .../node_modules/sntp/.travis.yml | 5 - .../node_modules/sntp/LICENSE | 28 - .../node_modules/sntp/Makefile | 9 - .../node_modules/sntp/README.md | 68 - .../node_modules/sntp/examples/offset.js | 16 - .../node_modules/sntp/examples/time.js | 25 - .../node_modules/sntp/index.js | 1 - .../node_modules/sntp/lib/index.js | 412 - .../node_modules/sntp/package.json | 90 - .../node_modules/sntp/test/index.js | 435 - .../source-map-support/.npmignore | 4 - .../source-map-support/.travis.yml | 5 - .../source-map-support/LICENSE.md | 21 - .../node_modules/source-map-support/README.md | 251 - .../browser-source-map-support.js | 89 - .../node_modules/source-map-support/build.js | 73 - .../source-map-support/package.json | 89 - .../source-map-support/register.js | 1 - .../source-map-support/source-map-support.js | 506 - .../node_modules/source-map-support/test.js | 581 - .../node_modules/source-map/CHANGELOG.md | 301 - .../node_modules/source-map/LICENSE | 28 - .../node_modules/source-map/README.md | 729 - .../source-map/dist/source-map.debug.js | 3056 --- .../source-map/dist/source-map.js | 3055 --- .../source-map/dist/source-map.min.js | 2 - .../source-map/dist/source-map.min.js.map | 1 - .../node_modules/source-map/lib/array-set.js | 104 - .../node_modules/source-map/lib/base64-vlq.js | 140 - .../node_modules/source-map/lib/base64.js | 67 - .../source-map/lib/binary-search.js | 111 - .../source-map/lib/mapping-list.js | 79 - .../node_modules/source-map/lib/quick-sort.js | 114 - .../source-map/lib/source-map-consumer.js | 1082 - .../source-map/lib/source-map-generator.js | 404 - .../source-map/lib/source-node.js | 407 - .../node_modules/source-map/lib/util.js | 417 - .../node_modules/source-map/package.json | 248 - .../node_modules/source-map/source-map.js | 8 - .../node_modules/spdx-correct/LICENSE | 57 - .../node_modules/spdx-correct/README.md | 10 - .../node_modules/spdx-correct/index.js | 237 - .../node_modules/spdx-correct/package.json | 90 - .../spdx-expression-parse/AUTHORS | 3 - .../spdx-expression-parse/LICENSE | 22 - .../spdx-expression-parse/README.md | 83 - .../spdx-expression-parse/index.js | 5 - .../spdx-expression-parse/package.json | 117 - .../spdx-expression-parse/parser.js | 1357 -- .../node_modules/spdx-license-ids/LICENSE | 24 - .../node_modules/spdx-license-ids/README.md | 55 - .../spdx-license-ids/package.json | 108 - .../spdx-license-ids/spdx-license-ids.json | 334 - .../node_modules/sprintf-js/.npmignore | 1 - .../node_modules/sprintf-js/LICENSE | 24 - .../node_modules/sprintf-js/README.md | 88 - .../node_modules/sprintf-js/bower.json | 14 - .../node_modules/sprintf-js/demo/angular.html | 20 - .../sprintf-js/dist/angular-sprintf.min.js | 4 - .../dist/angular-sprintf.min.js.map | 1 - .../sprintf-js/dist/angular-sprintf.min.map | 1 - .../sprintf-js/dist/sprintf.min.js | 4 - .../sprintf-js/dist/sprintf.min.js.map | 1 - .../sprintf-js/dist/sprintf.min.map | 1 - .../node_modules/sprintf-js/gruntfile.js | 36 - .../node_modules/sprintf-js/package.json | 78 - .../sprintf-js/src/angular-sprintf.js | 18 - .../node_modules/sprintf-js/src/sprintf.js | 208 - .../node_modules/sprintf-js/test/test.js | 82 - .../node_modules/sshpk/.npmignore | 9 - .../node_modules/sshpk/.travis.yml | 11 - .../node_modules/sshpk/LICENSE | 18 - .../node_modules/sshpk/README.md | 666 - .../node_modules/sshpk/bin/sshpk-conv | 201 - .../node_modules/sshpk/bin/sshpk-sign | 191 - .../node_modules/sshpk/bin/sshpk-verify | 166 - .../node_modules/sshpk/lib/algs.js | 168 - .../node_modules/sshpk/lib/certificate.js | 291 - .../node_modules/sshpk/lib/dhe.js | 311 - .../node_modules/sshpk/lib/ed-compat.js | 96 - .../node_modules/sshpk/lib/errors.js | 84 - .../node_modules/sshpk/lib/fingerprint.js | 161 - .../node_modules/sshpk/lib/formats/auto.js | 73 - .../sshpk/lib/formats/openssh-cert.js | 289 - .../node_modules/sshpk/lib/formats/pem.js | 186 - .../node_modules/sshpk/lib/formats/pkcs1.js | 320 - .../node_modules/sshpk/lib/formats/pkcs8.js | 505 - .../node_modules/sshpk/lib/formats/rfc4253.js | 146 - .../sshpk/lib/formats/ssh-private.js | 261 - .../node_modules/sshpk/lib/formats/ssh.js | 114 - .../sshpk/lib/formats/x509-pem.js | 77 - .../node_modules/sshpk/lib/formats/x509.js | 484 - .../node_modules/sshpk/lib/identity.js | 255 - .../node_modules/sshpk/lib/index.js | 38 - .../node_modules/sshpk/lib/key.js | 270 - .../node_modules/sshpk/lib/private-key.js | 231 - .../node_modules/sshpk/lib/signature.js | 245 - .../node_modules/sshpk/lib/ssh-buffer.js | 148 - .../node_modules/sshpk/lib/utils.js | 288 - .../node_modules/sshpk/man/man1/sshpk-conv.1 | 135 - .../node_modules/sshpk/man/man1/sshpk-sign.1 | 81 - .../sshpk/man/man1/sshpk-verify.1 | 68 - .../sshpk/node_modules/assert-plus/AUTHORS | 6 - .../sshpk/node_modules/assert-plus/CHANGES.md | 14 - .../sshpk/node_modules/assert-plus/README.md | 162 - .../sshpk/node_modules/assert-plus/assert.js | 211 - .../node_modules/assert-plus/package.json | 107 - .../node_modules/sshpk/package.json | 127 - .../node_modules/string-width/index.js | 37 - .../node_modules/string-width/license | 21 - .../node_modules/string-width/package.json | 117 - .../node_modules/string-width/readme.md | 42 - .../LICENSE-MIT.txt | 20 - .../string.prototype.codepointat/README.md | 47 - .../codepointat.js | 54 - .../string.prototype.codepointat/package.json | 89 - .../node_modules/stringstream/.npmignore | 15 - .../node_modules/stringstream/.travis.yml | 4 - .../node_modules/stringstream/LICENSE.txt | 22 - .../node_modules/stringstream/README.md | 38 - .../node_modules/stringstream/example.js | 27 - .../node_modules/stringstream/package.json | 77 - .../node_modules/stringstream/stringstream.js | 102 - .../node_modules/strip-ansi/index.js | 6 - .../node_modules/strip-ansi/license | 21 - .../node_modules/strip-ansi/package.json | 115 - .../node_modules/strip-ansi/readme.md | 33 - .../node_modules/strip-bom/index.js | 17 - .../node_modules/strip-bom/license | 21 - .../node_modules/strip-bom/package.json | 97 - .../node_modules/strip-bom/readme.md | 39 - .../node_modules/supports-color/index.js | 50 - .../node_modules/supports-color/license | 21 - .../node_modules/supports-color/package.json | 105 - .../node_modules/supports-color/readme.md | 36 - .../node_modules/symbol-tree/.jscsrc | 55 - .../node_modules/symbol-tree/.npmignore | 6 - .../node_modules/symbol-tree/LICENSE | 21 - .../node_modules/symbol-tree/README.md | 68 - .../node_modules/symbol-tree/api.md | 441 - .../symbol-tree/lib/SymbolTree.js | 834 - .../symbol-tree/lib/SymbolTreeNode.js | 54 - .../symbol-tree/lib/TreeIterator.js | 69 - .../symbol-tree/lib/TreePosition.js | 10 - .../node_modules/symbol-tree/package.json | 113 - .../symbol-tree/test/SymbolTree.js | 1189 -- .../node_modules/test-exclude/.editorconfig | 20 - .../node_modules/test-exclude/.npmignore | 4 - .../node_modules/test-exclude/.travis.yml | 12 - .../node_modules/test-exclude/CHANGELOG.md | 81 - .../node_modules/test-exclude/LICENSE.txt | 14 - .../node_modules/test-exclude/README.md | 42 - .../node_modules/test-exclude/index.js | 81 - .../node_modules/test-exclude/package.json | 109 - .../test/fixtures/defaults/package.json | 3 - .../exclude-empty-object/package.json | 5 - .../test/fixtures/exclude-object/package.json | 7 - .../test/fixtures/exclude/package.json | 5 - .../fixtures/include-src-only/package.json | 7 - .../test/fixtures/include/package.json | 5 - .../test-exclude/test/test-exclude.js | 162 - .../node_modules/throat/.npmignore | 14 - .../node_modules/throat/.travis.yml | 11 - .../node_modules/throat/LICENSE | 19 - .../node_modules/throat/README.md | 74 - .../node_modules/throat/index.js | 90 - .../node_modules/throat/package.json | 92 - .../node_modules/throat/test/browser.js | 45 - .../node_modules/throat/test/index.js | 265 - .../node_modules/tmpl/.travis.yml | 3 - .../node_modules/tmpl/lib/tmpl.js | 17 - .../node_modules/tmpl/license | 28 - .../node_modules/tmpl/package.json | 74 - .../node_modules/tmpl/readme.md | 10 - .../node_modules/to-fast-properties/index.js | 8 - .../node_modules/to-fast-properties/license | 22 - .../to-fast-properties/package.json | 95 - .../node_modules/to-fast-properties/readme.md | 37 - .../node_modules/tough-cookie/LICENSE | 27 - .../node_modules/tough-cookie/README.md | 506 - .../node_modules/tough-cookie/lib/cookie.js | 1336 -- .../node_modules/tough-cookie/lib/memstore.js | 170 - .../tough-cookie/lib/pathMatch.js | 61 - .../tough-cookie/lib/permuteDomain.js | 56 - .../tough-cookie/lib/pubsuffix.js | 98 - .../node_modules/tough-cookie/lib/store.js | 71 - .../node_modules/tough-cookie/package.json | 128 - .../node_modules/tr46/.npmignore | 4 - .../node_modules/tr46/index.js | 193 - .../node_modules/tr46/lib/.gitkeep | 0 .../node_modules/tr46/lib/mappingTable.json | 1 - .../node_modules/tr46/package.json | 83 - .../node_modules/tunnel-agent/LICENSE | 55 - .../node_modules/tunnel-agent/README.md | 4 - .../node_modules/tunnel-agent/index.js | 243 - .../node_modules/tunnel-agent/package.json | 92 - .../node_modules/tweetnacl/.npmignore | 4 - .../node_modules/tweetnacl/CHANGELOG.md | 181 - .../node_modules/tweetnacl/COPYING.txt | 9 - .../node_modules/tweetnacl/README.md | 445 - .../node_modules/tweetnacl/nacl-fast.js | 2388 --- .../node_modules/tweetnacl/nacl-fast.min.js | 2 - .../node_modules/tweetnacl/nacl.js | 1175 -- .../node_modules/tweetnacl/nacl.min.js | 1 - .../node_modules/tweetnacl/package.json | 112 - .../node_modules/type-check/LICENSE | 22 - .../node_modules/type-check/README.md | 210 - .../node_modules/type-check/lib/check.js | 126 - .../node_modules/type-check/lib/index.js | 16 - .../node_modules/type-check/lib/parse-type.js | 196 - .../node_modules/type-check/package.json | 94 - .../node_modules/uglify-js/LICENSE | 29 - .../node_modules/uglify-js/README.md | 916 - .../uglify-js/bin/extract-props.js | 77 - .../node_modules/uglify-js/bin/uglifyjs | 593 - .../node_modules/uglify-js/lib/ast.js | 1021 - .../node_modules/uglify-js/lib/compress.js | 2929 --- .../node_modules/uglify-js/lib/mozilla-ast.js | 609 - .../node_modules/uglify-js/lib/output.js | 1459 -- .../node_modules/uglify-js/lib/parse.js | 1573 -- .../node_modules/uglify-js/lib/propmangle.js | 230 - .../node_modules/uglify-js/lib/scope.js | 644 - .../node_modules/uglify-js/lib/sourcemap.js | 97 - .../node_modules/uglify-js/lib/transform.js | 218 - .../node_modules/uglify-js/lib/utils.js | 320 - .../uglify-js/node_modules/async/LICENSE | 19 - .../uglify-js/node_modules/async/README.md | 1425 -- .../node_modules/async/component.json | 11 - .../uglify-js/node_modules/async/lib/async.js | 958 - .../uglify-js/node_modules/async/package.json | 86 - .../uglify-js/node_modules/yargs/CHANGELOG.md | 374 - .../uglify-js/node_modules/yargs/LICENSE | 21 - .../uglify-js/node_modules/yargs/README.md | 926 - .../node_modules/yargs/completion.sh.hbs | 22 - .../uglify-js/node_modules/yargs/index.js | 504 - .../node_modules/yargs/lib/completion.js | 71 - .../node_modules/yargs/lib/parser.js | 448 - .../uglify-js/node_modules/yargs/lib/usage.js | 314 - .../node_modules/yargs/lib/validation.js | 196 - .../uglify-js/node_modules/yargs/package.json | 145 - .../node_modules/uglify-js/package.json | 121 - .../uglify-js/tools/domprops.json | 5603 ----- .../node_modules/uglify-js/tools/exports.js | 23 - .../node_modules/uglify-js/tools/node.js | 312 - .../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 | 72 - .../uglify-to-browserify/test/index.js | 22 - .../node_modules/uuid/.npmignore | 2 - .../node_modules/uuid/.travis.yml | 4 - .../node_modules/uuid/AUTHORS | 5 - .../node_modules/uuid/HISTORY.md | 24 - .../node_modules/uuid/LICENSE.md | 21 - .../node_modules/uuid/README.md | 130 - .../node_modules/uuid/bin/uuid | 26 - .../node_modules/uuid/lib/rng-browser.js | 32 - .../node_modules/uuid/lib/rng.js | 4 - .../node_modules/uuid/package.json | 119 - .../node_modules/uuid/test/mocha.opts | 3 - .../node_modules/uuid/test/test.js | 96 - .../node_modules/uuid/uuid.js | 157 - .../validate-npm-package-license/LICENSE | 174 - .../validate-npm-package-license/README.md | 113 - .../validate-npm-package-license/index.js | 84 - .../validate-npm-package-license/package.json | 88 - .../node_modules/verror/.gitmodules | 0 .../node_modules/verror/.npmignore | 1 - .../node_modules/verror/LICENSE | 19 - .../node_modules/verror/Makefile | 35 - .../node_modules/verror/Makefile.targ | 285 - .../node_modules/verror/README.md | 120 - .../verror/examples/levels-verror.js | 36 - .../verror/examples/levels-werror.js | 34 - .../node_modules/verror/examples/varargs.js | 6 - .../node_modules/verror/examples/verror.js | 13 - .../node_modules/verror/examples/werror.js | 14 - .../node_modules/verror/jsl.node.conf | 139 - .../node_modules/verror/lib/verror.js | 157 - .../node_modules/verror/package.json | 70 - .../node_modules/verror/tests/tst.inherit.js | 100 - .../node_modules/verror/tests/tst.verror.js | 156 - .../node_modules/verror/tests/tst.werror.js | 179 - .../node_modules/walker/.travis.yml | 3 - .../node_modules/walker/LICENSE | 13 - .../node_modules/walker/lib/walker.js | 111 - .../node_modules/walker/package.json | 81 - .../node_modules/walker/readme.md | 52 - .../node_modules/watch/LICENSE | 55 - .../node_modules/watch/main.js | 128 - .../node_modules/watch/package.json | 77 - .../node_modules/watch/readme.mkd | 72 - .../node_modules/watch/test/d/d/t | 0 .../node_modules/watch/test/d/t | 0 .../node_modules/watch/test/test_monitor.js | 31 - .../watch/test/test_monitorRootDirectory.js | 28 - .../node_modules/watch/test/test_watchTree.js | 20 - .../webidl-conversions/LICENSE.md | 12 - .../node_modules/webidl-conversions/README.md | 53 - .../webidl-conversions/lib/index.js | 189 - .../webidl-conversions/package.json | 88 - .../node_modules/whatwg-encoding/LICENSE.txt | 19 - .../whatwg-encoding/lib/labels-to-names.json | 207 - .../whatwg-encoding/lib/supported-names.json | 37 - .../whatwg-encoding/lib/whatwg-encoding.js | 47 - .../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 | 145 - .../node_modules/whatwg-encoding/package.json | 93 - .../node_modules/whatwg-url/.eslintignore | 3 - .../node_modules/whatwg-url/LICENSE.txt | 21 - .../node_modules/whatwg-url/README.md | 66 - .../node_modules/whatwg-url/lib/URL-impl.js | 216 - .../node_modules/whatwg-url/lib/URL.js | 209 - .../node_modules/whatwg-url/lib/public-api.js | 11 - .../whatwg-url/lib/url-state-machine.js | 1173 -- .../node_modules/whatwg-url/lib/utils.js | 20 - .../node_modules/whatwg-url/package.json | 95 - .../node_modules/which-module/CHANGELOG.md | 11 - .../node_modules/which-module/LICENSE | 13 - .../node_modules/which-module/README.md | 55 - .../node_modules/which-module/index.js | 9 - .../node_modules/which-module/package.json | 96 - .../node_modules/which/CHANGELOG.md | 130 - .../node_modules/which/LICENSE | 15 - .../node_modules/which/README.md | 48 - .../node_modules/which/bin/which | 52 - .../node_modules/which/package.json | 94 - .../node_modules/which/which.js | 132 - .../node_modules/window-size/LICENSE-MIT | 22 - .../node_modules/window-size/README.md | 26 - .../node_modules/window-size/index.js | 33 - .../node_modules/window-size/package.json | 81 - .../node_modules/wordwrap/LICENSE | 18 - .../node_modules/wordwrap/README.markdown | 70 - .../node_modules/wordwrap/example/center.js | 10 - .../node_modules/wordwrap/example/meat.js | 3 - .../node_modules/wordwrap/index.js | 76 - .../node_modules/wordwrap/package.json | 89 - .../node_modules/wordwrap/test/break.js | 30 - .../node_modules/wordwrap/test/idleness.txt | 63 - .../node_modules/wordwrap/test/wrap.js | 31 - .../node_modules/worker-farm/.jshintrc | 59 - .../node_modules/worker-farm/.npmignore | 1 - .../node_modules/worker-farm/.travis.yml | 9 - .../node_modules/worker-farm/LICENSE.md | 13 - .../node_modules/worker-farm/README.md | 141 - .../worker-farm/examples/basic/child.js | 3 - .../worker-farm/examples/basic/index.js | 11 - .../worker-farm/examples/pi/calc.js | 20 - .../worker-farm/examples/pi/index.js | 39 - .../worker-farm/lib/child/index.js | 48 - .../node_modules/worker-farm/lib/farm.js | 323 - .../node_modules/worker-farm/lib/fork.js | 25 - .../node_modules/worker-farm/lib/index.js | 29 - .../node_modules/worker-farm/package.json | 87 - .../node_modules/worker-farm/tests/child.js | 69 - .../node_modules/worker-farm/tests/index.js | 456 - .../node_modules/wrap-ansi/index.js | 162 - .../node_modules/wrap-ansi/license | 21 - .../node_modules/wrap-ansi/package.json | 128 - .../node_modules/wrap-ansi/readme.md | 63 - .../node_modules/wrappy/LICENSE | 15 - .../node_modules/wrappy/README.md | 36 - .../node_modules/wrappy/package.json | 89 - .../node_modules/wrappy/wrappy.js | 33 - .../xml-name-validator/LICENSE.txt | 19 - .../node_modules/xml-name-validator/README.md | 36 - .../lib/generated-parser.js | 504 - .../xml-name-validator/lib/grammar.pegjs | 35 - .../lib/xml-name-validator.js | 17 - .../xml-name-validator/package.json | 89 - .../node_modules/xtend/.jshintrc | 30 - .../node_modules/xtend/.npmignore | 1 - .../node_modules/xtend/LICENCE | 19 - .../node_modules/xtend/Makefile | 4 - .../node_modules/xtend/README.md | 32 - .../node_modules/xtend/immutable.js | 19 - .../node_modules/xtend/mutable.js | 17 - .../node_modules/xtend/package.json | 110 - .../node_modules/xtend/test.js | 83 - .../node_modules/y18n/LICENSE | 13 - .../node_modules/y18n/README.md | 91 - .../node_modules/y18n/index.js | 172 - .../node_modules/y18n/package.json | 97 - .../node_modules/yargs-parser/CHANGELOG.md | 129 - .../node_modules/yargs-parser/LICENSE.txt | 14 - .../node_modules/yargs-parser/README.md | 219 - .../node_modules/yargs-parser/index.js | 727 - .../yargs-parser/lib/tokenize-arg-string.js | 34 - .../node_modules/camelcase/index.js | 56 - .../node_modules/camelcase/license | 21 - .../node_modules/camelcase/package.json | 99 - .../node_modules/camelcase/readme.md | 57 - .../node_modules/yargs-parser/package.json | 106 - .../node_modules/yargs/CHANGELOG.md | 810 - .../node_modules/yargs/LICENSE | 22 - .../node_modules/yargs/README.md | 1877 -- .../node_modules/yargs/completion.sh.hbs | 28 - .../node_modules/yargs/index.js | 31 - .../node_modules/yargs/lib/assign.js | 15 - .../node_modules/yargs/lib/command.js | 250 - .../node_modules/yargs/lib/completion.js | 99 - .../node_modules/yargs/lib/levenshtein.js | 47 - .../node_modules/yargs/lib/obj-filter.js | 10 - .../node_modules/yargs/lib/usage.js | 454 - .../node_modules/yargs/lib/validation.js | 318 - .../node_modules/yargs/locales/be.json | 39 - .../node_modules/yargs/locales/de.json | 39 - .../node_modules/yargs/locales/en.json | 39 - .../node_modules/yargs/locales/es.json | 39 - .../node_modules/yargs/locales/fr.json | 37 - .../node_modules/yargs/locales/hi.json | 39 - .../node_modules/yargs/locales/hu.json | 39 - .../node_modules/yargs/locales/id.json | 40 - .../node_modules/yargs/locales/it.json | 39 - .../node_modules/yargs/locales/ja.json | 39 - .../node_modules/yargs/locales/ko.json | 39 - .../node_modules/yargs/locales/nb.json | 37 - .../node_modules/yargs/locales/nl.json | 39 - .../node_modules/yargs/locales/pirate.json | 12 - .../node_modules/yargs/locales/pl.json | 39 - .../node_modules/yargs/locales/pt.json | 37 - .../node_modules/yargs/locales/pt_BR.json | 39 - .../node_modules/yargs/locales/ru.json | 39 - .../node_modules/yargs/locales/th.json | 39 - .../node_modules/yargs/locales/tr.json | 39 - .../node_modules/yargs/locales/zh_CN.json | 37 - .../yargs/node_modules/.bin/window-size | 1 - .../yargs/node_modules/camelcase/index.js | 56 - .../yargs/node_modules/camelcase/license | 21 - .../yargs/node_modules/camelcase/package.json | 99 - .../yargs/node_modules/camelcase/readme.md | 57 - .../yargs/node_modules/cliui/CHANGELOG.md | 15 - .../yargs/node_modules/cliui/LICENSE.txt | 14 - .../yargs/node_modules/cliui/README.md | 110 - .../yargs/node_modules/cliui/index.js | 316 - .../yargs/node_modules/cliui/package.json | 123 - .../yargs/node_modules/window-size/LICENSE | 21 - .../yargs/node_modules/window-size/README.md | 45 - .../yargs/node_modules/window-size/cli.js | 30 - .../yargs/node_modules/window-size/index.js | 32 - .../node_modules/window-size/package.json | 109 - .../node_modules/yargs/package.json | 153 - .../node_modules/yargs/yargs.js | 989 - 6779 files changed, 589672 deletions(-) rename fundamentals/bug-challenge-es6/{node_modules/ci-info/.npmignore => .gitignore} (100%) delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/acorn delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/babylon delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/cdl delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/errno delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/escodegen delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/esgenerate delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/esparse delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/esvalidate delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/handlebars delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/har-validator delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/istanbul delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/jest delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/jest-runtime delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/js-yaml delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/jsesc delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/json5 delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/loose-envify delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/marked delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/mkdirp delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/nopt delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/notify delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/regjsparser delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/rimraf delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/sane delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/semver delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/sshpk-conv delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/sshpk-sign delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/sshpk-verify delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/uglifyjs delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/uuid delete mode 120000 fundamentals/bug-challenge-es6/node_modules/.bin/which delete mode 100644 fundamentals/bug-challenge-es6/node_modules/abab/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/abab/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/abab/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/abab/lib/atob.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/abab/lib/btoa.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/abab/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/abbrev/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/abbrev/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/abbrev/abbrev.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/abbrev/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn-globals/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn-globals/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn-globals/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn-globals/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/.editorconfig delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/.gitattributes delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/.tern-project delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/AUTHORS delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/acorn/bin/acorn delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/bin/build-acorn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/bin/generate-identifier-regex.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/acorn/bin/update_authors.sh delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/dist/.keep delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/dist/acorn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/dist/acorn_loose.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/dist/walk.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/bin/acorn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/expression.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/identifier.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/location.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/locutil.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/loose/acorn_loose.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/loose/expression.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/loose/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/loose/parseutil.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/loose/state.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/loose/statement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/loose/tokenize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/lval.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/options.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/parseutil.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/state.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/statement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/tokencontext.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/tokenize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/tokentype.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/walk/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/acorn/src/whitespace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/align-text/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/align-text/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/align-text/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/align-text/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/amdefine/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/amdefine/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/amdefine/amdefine.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/amdefine/intercept.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/amdefine/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansi-escapes/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansi-escapes/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansi-escapes/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansi-escapes/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansi-regex/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansi-regex/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansi-regex/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansi-regex/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansi-styles/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansi-styles/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansi-styles/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansi-styles/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansicolors/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansicolors/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansicolors/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansicolors/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansicolors/ansicolors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansicolors/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ansicolors/test/ansicolors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/append-transform/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/append-transform/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/append-transform/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/append-transform/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/action.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/action/append.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/action/append/constant.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/action/count.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/action/help.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/action/store.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/action/store/constant.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/action/store/false.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/action/store/true.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/action/subparsers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/action/version.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/action_container.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/argparse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/argument/error.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/argument/exclusive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/argument/group.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/argument_parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/const.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/help/added_formatters.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/help/formatter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/namespace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/lib/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/argparse/package.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/arr-diff/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/arr-diff/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/arr-diff/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/arr-diff/package.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/arr-flatten/LICENSE delete mode 100755 fundamentals/bug-challenge-es6/node_modules/arr-flatten/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/arr-flatten/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/arr-flatten/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-differ/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-differ/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-differ/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-equal/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-equal/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-equal/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-equal/component.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-equal/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-equal/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-union/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-union/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-union/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-union/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-uniq/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-uniq/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-uniq/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-uniq/readme.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/array-unique/LICENSE delete mode 100755 fundamentals/bug-challenge-es6/node_modules/array-unique/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/array-unique/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/array-unique/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/arrify/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/arrify/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/arrify/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/arrify/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/lib/ber/errors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/lib/ber/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/lib/ber/reader.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/lib/ber/types.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/lib/ber/writer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/tst/ber/reader.test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asn1/tst/ber/writer.test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/assert-plus/AUTHORS delete mode 100644 fundamentals/bug-challenge-es6/node_modules/assert-plus/CHANGES.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/assert-plus/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/assert-plus/assert.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/assert-plus/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/async/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/async/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/async/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/async/dist/async.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/async/dist/async.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/async/lib/async.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/async/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/bench.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/lib/abort.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/lib/async.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/lib/defer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/lib/iterate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_asynckit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_parallel.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_serial.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_serial_ordered.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/lib/state.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/lib/streamify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/lib/terminator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/parallel.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/serial.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/serialOrdered.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/asynckit/stream.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/aws-sign2/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/aws-sign2/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/aws-sign2/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/aws-sign2/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/aws4/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/aws4/.tern-port delete mode 100644 fundamentals/bug-challenge-es6/node_modules/aws4/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/aws4/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/aws4/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/aws4/aws4.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/aws4/lru.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/aws4/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-code-frame/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-code-frame/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-code-frame/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-code-frame/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/api/browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/api/node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/helpers/merge.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/helpers/normalize-ast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/helpers/resolve.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/store.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/tools/build-external-helpers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/logger.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/build-config-chain.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/config.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/option-manager.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/parsers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/removed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/internal-plugins/block-hoist.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/internal-plugins/shadow-functions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/pipeline.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/plugin-pass.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/plugin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/lib/util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-core/register.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/buffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/base.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/classes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/expressions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/flow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/jsx.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/methods.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/modules.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/statements.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/template-literals.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/types.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/node/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/node/parentheses.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/node/whitespace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/printer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/source-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/whitespace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-generator/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/lib/for-await.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helpers/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helpers/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helpers/lib/helpers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helpers/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-helpers/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-jest/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-jest/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-jest/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-jest/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-messages/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-messages/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-messages/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-messages/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/arrow-function/actual.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/arrow-function/expected.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/call/actual.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/call/expected.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/declaration/actual.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/declaration/expected.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/new-expression/actual.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/new-expression/expected.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/options.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/lib/tdz.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/lib/memoise-decorators.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/loose.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/vanilla.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/default.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/destructuring.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/rest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/.test/async.es6.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/.test/tests.es6.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/PATENTS delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/emit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/hoist.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/leap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/meta.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/visit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/emit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/hoist.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/leap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/meta.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/visit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-register/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-register/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-register/lib/browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-register/lib/cache.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-register/lib/node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-register/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/concat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/copy-within.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/every.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/fill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/find-index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/find.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/for-each.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/from.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/join.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/last-index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/pop.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/push.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/reduce-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/reduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/reverse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/shift.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/slice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/some.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/sort.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/splice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/unshift.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/asap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/clear-immediate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/error/is-error.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/get-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/is-iterable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/json/stringify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/acosh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/asinh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/atanh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/cbrt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/clz32.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/cosh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/expm1.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/fround.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/hypot.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/iaddh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/imul.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/imulh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/isubh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/log10.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/log1p.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/log2.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/sign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/sinh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/tanh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/trunc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/umulh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/epsilon.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-finite.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-nan.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/max-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/min-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/assign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/define-properties.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/define-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/freeze.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-descriptor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-descriptors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-names.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-symbols.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is-extensible.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is-frozen.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is-sealed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/prevent-extensions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/seal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/set-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/observable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/promise.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/apply.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/construct.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/define-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/define-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/delete-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/delete-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/enumerate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-metadata-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-own-metadata-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-own-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-own-property-descriptor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/has-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/has-own-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/has.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/is-extensible.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/own-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/prevent-extensions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/set-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/regexp/escape.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/set-immediate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/code-point-at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/ends-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/from-code-point.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/match-all.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-end.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-left.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-start.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/raw.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/repeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/starts-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-end.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-left.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-start.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/async-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/for.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/has-instance.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/is-concat-spreadable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/key-for.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/match.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/observable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/replace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/search.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/species.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/split.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/to-primitive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/to-string-tag.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/unscopables.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/system/global.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/weak-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/weak-set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-generator-delegate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-generator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-to-generator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_class-call-check.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_create-class.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_defaults.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_define-enumerable-properties.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_define-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_extends.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_get.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_inherits.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_instanceof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_interop-require-default.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_interop-require-wildcard.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_jsx.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_new-arrow-check.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_object-destructuring-empty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_object-without-properties.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_possible-constructor-return.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_self-global.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_sliced-to-array-loose.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_sliced-to-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_tagged-template-literal-loose.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_tagged-template-literal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_temporal-ref.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_temporal-undefined.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_to-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_to-consumable-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_typeof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-generator-delegate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-generator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-to-generator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncGenerator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncGeneratorDelegate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncIterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncToGenerator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/class-call-check.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/classCallCheck.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/create-class.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/createClass.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/defaults.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/define-enumerable-properties.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/define-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/defineEnumerableProperties.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/defineProperty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/extends.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/get.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/inherits.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/instanceof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interop-require-default.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interop-require-wildcard.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interopRequireDefault.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interopRequireWildcard.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/jsx.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/new-arrow-check.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/newArrowCheck.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/object-destructuring-empty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/object-without-properties.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/objectDestructuringEmpty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/objectWithoutProperties.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/possible-constructor-return.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/possibleConstructorReturn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/self-global.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/selfGlobal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/sliced-to-array-loose.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/sliced-to-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/slicedToArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/slicedToArrayLoose.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/tagged-template-literal-loose.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/tagged-template-literal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/taggedTemplateLiteral.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/taggedTemplateLiteralLoose.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporal-ref.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporal-undefined.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporalRef.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporalUndefined.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/to-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/to-consumable-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/toArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/toConsumableArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/typeof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-runtime/regenerator/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-template/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-template/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-template/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-template/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/cache.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/context.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/hub.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/ancestry.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/comments.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/context.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/conversion.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/evaluation.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/family.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/inference/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/inference/inferer-reference.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/inference/inferers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/introspection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/lib/hoister.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/lib/removal-hooks.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/lib/virtual-types.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/modification.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/removal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/replacement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/scope/binding.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/scope/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/scope/lib/renamer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/visitors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-traverse/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/constants.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/converters.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/core.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/es2015.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/experimental.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/flow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/init.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/jsx.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/misc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/flow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/react.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/retrievers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/lib/validators.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babel-types/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babylon/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babylon/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babylon/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/babylon/bin/babylon.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babylon/bin/generate-identifier-regex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babylon/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/babylon/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/balanced-match/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/balanced-match/LICENSE.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/balanced-match/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/balanced-match/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/balanced-match/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/bcrypt-pbkdf/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/bcrypt-pbkdf/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/bcrypt-pbkdf/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/boom/.npmignore delete mode 100755 fundamentals/bug-challenge-es6/node_modules/boom/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/boom/CONTRIBUTING.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/boom/LICENSE delete mode 100755 fundamentals/bug-challenge-es6/node_modules/boom/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/boom/images/boom.png delete mode 100755 fundamentals/bug-challenge-es6/node_modules/boom/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/boom/package.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/boom/test/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/brace-expansion/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/brace-expansion/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/brace-expansion/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/braces/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/braces/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/braces/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/braces/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/browser-resolve/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/browser-resolve/empty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/browser-resolve/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/browser-resolve/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/bser/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/bser/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/bser/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/bser/test/bser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/builtin-modules/builtin-modules.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/builtin-modules/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/builtin-modules/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/builtin-modules/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/builtin-modules/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/builtin-modules/static.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/callsites/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/callsites/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/callsites/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/callsites/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/camelcase/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/camelcase/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/camelcase/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/camelcase/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/cardinal/bin/cdl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/cardinal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/examples/.cardinalrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/examples/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/examples/highlight-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/examples/highlight-self-hide-semicolons.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/examples/highlight-self.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/examples/highlight-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/lib/highlight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/lib/highlightFile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/lib/highlightFileSync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/settings.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/cardinal-highlight-block-comment.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/cardinal-highlight-diff-spike.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/cardinal-highlight-file-async.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/cardinal-highlight-file-sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/cardinal-highlight-git-diff.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/cardinal-highlight-json-file-async.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/cardinal-highlight-json-file-sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/cardinal-highlight-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/cardinal-highlight-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/cardinal-smoke.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/fixtures/block-comment.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/fixtures/custom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/fixtures/foo-with-errors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/fixtures/foo.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/fixtures/git-diff.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/fixtures/json.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/fixtures/svn-diff.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/settings.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/test/themes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/themes/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/themes/default.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/themes/empty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/themes/hide-semicolons.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/themes/jq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/themes/tomorrow-night.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cardinal/utl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/caseless/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/caseless/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/caseless/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/caseless/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/caseless/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/center-align/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/center-align/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/center-align/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/center-align/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/center-align/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/chalk/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/chalk/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/chalk/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/chalk/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ci-info/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ci-info/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ci-info/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ci-info/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ci-info/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ci-info/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cli-table/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cli-table/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cli-table/lib/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cli-table/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cli-usage/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cli-usage/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cli-usage/example/custom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cli-usage/example/default.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cli-usage/example/usage.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cli-usage/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cli-usage/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cli-usage/tests.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/.coveralls.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/node_modules/wordwrap/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/node_modules/wordwrap/README.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/node_modules/wordwrap/example/center.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/node_modules/wordwrap/example/meat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/node_modules/wordwrap/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/node_modules/wordwrap/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/node_modules/wordwrap/test/break.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/node_modules/wordwrap/test/idleness.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/node_modules/wordwrap/test/wrap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cliui/test/cliui.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/clone/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/clone/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/clone/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/clone/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/clone/clone.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/clone/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/clone/test-apart-ctx.html delete mode 100644 fundamentals/bug-challenge-es6/node_modules/clone/test.html delete mode 100644 fundamentals/bug-challenge-es6/node_modules/clone/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/code-point-at/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/code-point-at/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/code-point-at/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/code-point-at/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/MIT-LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/ReadMe.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/examples/normal-usage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/examples/safe-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/lib/colors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/lib/custom/trap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/lib/custom/zalgo.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/lib/extendStringPrototype.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/lib/maps/america.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/lib/maps/rainbow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/lib/maps/random.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/lib/maps/zebra.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/lib/styles.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/lib/system/supports-colors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/safe.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/screenshots/colors.png delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/tests/basic-test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/tests/safe-test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/colors/themes/generic-logging.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/combined-stream/License delete mode 100644 fundamentals/bug-challenge-es6/node_modules/combined-stream/Readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/combined-stream/lib/combined_stream.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/combined-stream/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/commander/History.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/commander/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/commander/Readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/commander/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/commander/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/concat-map/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/concat-map/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/concat-map/README.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/concat-map/example/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/concat-map/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/concat-map/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/concat-map/test/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/content-type-parser/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/content-type-parser/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/content-type-parser/lib/content-type-parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/content-type-parser/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/example/comment-to-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/test/comment-regex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/test/convert-source-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/test/fixtures/map-file-comment-double-slash.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/test/fixtures/map-file-comment-inline.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/test/fixtures/map-file-comment.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/test/fixtures/map-file-comment.css.map delete mode 100644 fundamentals/bug-challenge-es6/node_modules/convert-source-map/test/map-file-comment.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/Gruntfile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/bower.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/build/Gruntfile.ls delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/build/build.ls delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/build/config.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/client/core.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/client/core.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/client/core.min.js.map delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/client/library.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/client/library.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/client/library.min.js.map delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/client/shim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/client/shim.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/client/shim.min.js.map delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/core/_.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/core/delay.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/core/dict.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/core/function.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/core/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/core/number.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/core/object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/core/regexp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/core/string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es5/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/date.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/function.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/math.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/number.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/promise.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/reflect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/regexp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/symbol.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/typed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/weak-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es6/weak-set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/asap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/error.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/math.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/observable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/reflect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/symbol.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/es7/system.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/_.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/concat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/copy-within.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/every.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/fill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/find-index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/find.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/for-each.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/from.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/is-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/join.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/last-index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/pop.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/push.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/reduce-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/reduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/reverse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/shift.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/slice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/some.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/sort.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/splice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/unshift.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/copy-within.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/every.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/fill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/find-index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/find.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/for-each.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/join.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/last-index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/reduce-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/reduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/slice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/some.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/sort.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/array/virtual/values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/asap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/clear-immediate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/date/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/date/now.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/date/to-iso-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/date/to-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/date/to-primitive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/date/to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/delay.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/dict.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/dom-collections/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/dom-collections/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/error/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/error/is-error.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/function/bind.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/function/has-instance.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/function/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/function/name.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/function/part.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/function/virtual/bind.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/function/virtual/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/function/virtual/part.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/get-iterator-method.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/get-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/is-iterable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/json/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/json/stringify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/acosh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/asinh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/atanh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/cbrt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/clz32.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/cosh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/expm1.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/fround.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/hypot.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/iaddh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/imul.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/imulh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/isubh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/log10.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/log1p.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/log2.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/sign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/sinh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/tanh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/trunc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/math/umulh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/epsilon.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/is-finite.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/is-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/is-nan.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/is-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/max-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/min-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/to-fixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/to-precision.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/virtual/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/virtual/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/virtual/to-fixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/number/virtual/to-precision.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/assign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/classof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/define-getter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/define-properties.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/define-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/define-setter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/define.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/freeze.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/get-own-property-descriptor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/get-own-property-descriptors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/get-own-property-names.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/get-own-property-symbols.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/get-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/is-extensible.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/is-frozen.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/is-object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/is-sealed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/is.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/lookup-getter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/lookup-setter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/make.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/prevent-extensions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/seal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/set-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/object/values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/observable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/promise.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/apply.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/construct.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/define-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/define-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/delete-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/delete-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/enumerate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/get-metadata-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/get-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/get-own-metadata-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/get-own-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/get-own-property-descriptor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/get-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/get.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/has-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/has-own-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/has.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/is-extensible.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/own-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/prevent-extensions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/set-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/reflect/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/regexp/constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/regexp/escape.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/regexp/flags.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/regexp/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/regexp/match.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/regexp/replace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/regexp/search.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/regexp/split.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/regexp/to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/set-immediate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/set-interval.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/set-timeout.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/anchor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/big.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/blink.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/bold.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/code-point-at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/ends-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/escape-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/fixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/fontcolor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/fontsize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/from-code-point.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/italics.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/link.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/match-all.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/pad-end.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/pad-start.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/raw.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/repeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/small.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/starts-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/strike.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/sub.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/sup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/trim-end.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/trim-left.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/trim-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/trim-start.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/trim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/unescape-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/anchor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/big.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/blink.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/bold.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/code-point-at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/ends-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/escape-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/fixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/fontcolor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/fontsize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/italics.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/link.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/match-all.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/pad-end.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/pad-start.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/repeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/small.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/starts-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/strike.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/sub.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/sup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/trim-end.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/trim-left.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/trim-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/trim-start.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/trim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/string/virtual/unescape-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/async-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/for.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/has-instance.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/is-concat-spreadable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/key-for.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/match.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/observable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/replace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/search.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/species.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/split.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/to-primitive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/to-string-tag.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/symbol/unscopables.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/system/global.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/system/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/typed/array-buffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/typed/data-view.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/typed/float32-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/typed/float64-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/typed/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/typed/int16-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/typed/int32-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/typed/int8-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/typed/uint16-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/typed/uint32-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/typed/uint8-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/typed/uint8-clamped-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/weak-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/fn/weak-set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/core/_.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/core/delay.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/core/dict.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/core/function.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/core/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/core/number.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/core/object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/core/regexp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/core/string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es5/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/date.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/function.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/math.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/number.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/promise.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/reflect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/regexp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/symbol.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/typed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/weak-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es6/weak-set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/asap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/error.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/math.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/observable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/reflect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/symbol.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/es7/system.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/_.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/concat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/copy-within.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/every.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/fill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/find-index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/find.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/for-each.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/from.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/is-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/join.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/last-index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/pop.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/push.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/reduce-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/reduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/reverse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/shift.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/slice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/some.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/sort.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/splice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/unshift.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/copy-within.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/every.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/fill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/find-index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/find.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/for-each.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/join.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/last-index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/reduce-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/reduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/slice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/some.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/sort.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/array/virtual/values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/asap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/clear-immediate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/date/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/date/now.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/date/to-iso-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/date/to-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/date/to-primitive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/date/to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/delay.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/dict.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/dom-collections/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/dom-collections/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/error/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/error/is-error.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/function/bind.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/function/has-instance.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/function/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/function/name.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/function/part.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/function/virtual/bind.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/function/virtual/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/function/virtual/part.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/get-iterator-method.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/get-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/is-iterable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/json/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/json/stringify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/acosh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/asinh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/atanh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/cbrt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/clz32.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/cosh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/expm1.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/fround.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/hypot.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/iaddh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/imul.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/imulh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/isubh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/log10.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/log1p.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/log2.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/sign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/sinh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/tanh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/trunc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/math/umulh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/epsilon.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/is-finite.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/is-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/is-nan.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/is-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/max-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/min-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/to-fixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/to-precision.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/virtual/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/virtual/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/virtual/to-fixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/number/virtual/to-precision.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/assign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/classof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/define-getter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/define-properties.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/define-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/define-setter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/define.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/freeze.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/get-own-property-descriptor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/get-own-property-descriptors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/get-own-property-names.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/get-own-property-symbols.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/get-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/is-extensible.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/is-frozen.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/is-object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/is-sealed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/is.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/lookup-getter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/lookup-setter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/make.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/prevent-extensions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/seal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/set-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/object/values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/observable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/promise.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/apply.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/construct.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/define-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/define-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/delete-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/delete-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/enumerate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/get-metadata-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/get-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/get-own-metadata-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/get-own-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/get-own-property-descriptor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/get-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/get.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/has-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/has-own-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/has.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/is-extensible.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/own-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/prevent-extensions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/set-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/reflect/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/regexp/constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/regexp/escape.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/regexp/flags.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/regexp/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/regexp/match.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/regexp/replace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/regexp/search.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/regexp/split.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/regexp/to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/set-immediate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/set-interval.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/set-timeout.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/anchor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/big.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/blink.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/bold.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/code-point-at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/ends-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/escape-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/fixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/fontcolor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/fontsize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/from-code-point.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/italics.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/link.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/match-all.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/pad-end.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/pad-start.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/raw.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/repeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/small.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/starts-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/strike.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/sub.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/sup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/trim-end.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/trim-left.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/trim-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/trim-start.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/trim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/unescape-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/anchor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/big.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/blink.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/bold.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/code-point-at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/ends-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/escape-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/fixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/fontcolor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/fontsize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/italics.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/link.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/match-all.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/pad-end.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/pad-start.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/repeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/small.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/starts-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/strike.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/sub.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/sup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/trim-end.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/trim-left.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/trim-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/trim-start.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/trim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/string/virtual/unescape-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/async-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/for.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/has-instance.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/is-concat-spreadable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/key-for.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/match.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/observable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/replace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/search.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/species.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/split.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/to-primitive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/to-string-tag.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/symbol/unscopables.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/system/global.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/system/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/typed/array-buffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/typed/data-view.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/typed/float32-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/typed/float64-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/typed/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/typed/int16-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/typed/int32-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/typed/int8-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/typed/uint16-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/typed/uint32-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/typed/uint8-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/typed/uint8-clamped-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/weak-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/fn/weak-set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_a-function.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_a-number-value.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_add-to-unscopables.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_an-instance.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_an-object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_array-copy-within.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_array-fill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_array-from-iterable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_array-includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_array-methods.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_array-reduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_array-species-constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_array-species-create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_bind.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_classof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_cof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_collection-strong.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_collection-to-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_collection-weak.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_collection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_core.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_create-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_ctx.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_date-to-primitive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_defined.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_descriptors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_dom-create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_entry-virtual.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_enum-bug-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_enum-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_export.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_fails-is-regexp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_fails.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_fix-re-wks.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_flags.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_for-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_global.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_has.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_hide.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_ie8-dom-define.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_inherit-if-required.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_invoke.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_iobject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_is-array-iter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_is-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_is-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_is-object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_is-regexp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_iter-call.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_iter-create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_iter-define.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_iter-detect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_iter-step.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_iterators.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_keyof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_library.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_math-expm1.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_math-log1p.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_math-sign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_meta.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_microtask.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-assign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-define.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-dp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-dps.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-forced-pam.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-gopd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-gopn-ext.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-gopn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-gops.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-gpo.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-keys-internal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-pie.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-sap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_object-to-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_own-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_partial.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_path.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_property-desc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_redefine-all.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_redefine.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_replacer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_same-value.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_set-proto.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_set-species.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_set-to-string-tag.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_shared-key.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_shared.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_species-constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_strict-method.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_string-at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_string-context.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_string-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_string-pad.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_string-repeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_string-trim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_string-ws.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_task.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_to-index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_to-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_to-iobject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_to-length.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_to-object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_to-primitive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_typed-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_typed-buffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_typed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_uid.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_wks-define.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_wks-ext.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/_wks.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.delay.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.dict.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.function.part.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.get-iterator-method.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.get-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.is-iterable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.number.iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.object.classof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.object.define.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.object.is-object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.object.make.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.regexp.escape.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.string.escape-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/core.string.unescape-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es5.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.copy-within.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.every.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.fill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.find-index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.find.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.for-each.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.from.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.is-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.join.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.last-index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.reduce-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.reduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.slice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.some.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.sort.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.array.species.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.date.now.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.date.to-iso-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.date.to-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.date.to-primitive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.date.to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.function.bind.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.function.has-instance.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.function.name.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.acosh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.asinh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.atanh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.cbrt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.clz32.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.cosh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.expm1.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.fround.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.hypot.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.imul.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.log10.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.log1p.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.log2.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.sign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.sinh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.tanh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.math.trunc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.number.constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.number.epsilon.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.number.is-finite.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.number.is-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.number.is-nan.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.number.is-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.number.max-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.number.min-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.number.parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.number.parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.number.to-fixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.number.to-precision.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.assign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.define-properties.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.define-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.freeze.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.get-own-property-descriptor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.get-own-property-names.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.get-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.is-extensible.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.is-frozen.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.is-sealed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.is.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.prevent-extensions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.seal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.set-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.object.to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.promise.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.apply.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.construct.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.define-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.delete-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.enumerate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.get-own-property-descriptor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.get-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.get.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.has.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.is-extensible.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.own-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.prevent-extensions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.set-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.reflect.set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.regexp.constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.regexp.flags.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.regexp.match.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.regexp.replace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.regexp.search.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.regexp.split.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.regexp.to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.anchor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.big.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.blink.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.bold.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.code-point-at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.ends-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.fixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.fontcolor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.fontsize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.from-code-point.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.italics.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.link.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.raw.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.repeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.small.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.starts-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.strike.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.sub.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.sup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.string.trim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.symbol.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.typed.array-buffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.typed.data-view.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.typed.float32-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.typed.float64-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.typed.int16-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.typed.int32-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.typed.int8-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.typed.uint16-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.typed.uint32-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.typed.uint8-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.typed.uint8-clamped-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.weak-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es6.weak-set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.array.includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.asap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.error.is-error.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.map.to-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.math.iaddh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.math.imulh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.math.isubh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.math.umulh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.object.define-getter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.object.define-setter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.object.entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.object.enumerable-entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.object.enumerable-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.object.enumerable-values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.object.get-own-property-descriptors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.object.lookup-getter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.object.lookup-setter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.object.values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.observable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.reflect.define-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.reflect.delete-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.reflect.get-metadata-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.reflect.get-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.reflect.get-own-metadata-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.reflect.get-own-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.reflect.has-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.reflect.has-own-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.reflect.metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.set.to-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.string.at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.string.match-all.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.string.pad-end.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.string.pad-start.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.string.trim-left.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.string.trim-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.symbol.async-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.symbol.observable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/es7.system.global.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/web.dom.iterable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/web.immediate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/modules/web.timers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/shim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/stage/0.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/stage/1.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/stage/2.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/stage/3.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/stage/4.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/stage/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/stage/pre.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/web/dom-collections.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/web/immediate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/web/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/library/web/timers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_a-function.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_a-number-value.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_add-to-unscopables.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_an-instance.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_an-object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_array-copy-within.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_array-fill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_array-from-iterable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_array-includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_array-methods.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_array-reduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_array-species-constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_array-species-create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_bind.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_classof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_cof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_collection-strong.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_collection-to-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_collection-weak.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_collection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_core.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_create-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_ctx.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_date-to-primitive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_defined.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_descriptors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_dom-create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_entry-virtual.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_enum-bug-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_enum-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_export.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_fails-is-regexp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_fails.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_fix-re-wks.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_flags.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_for-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_global.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_has.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_hide.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_ie8-dom-define.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_inherit-if-required.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_invoke.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_iobject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_is-array-iter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_is-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_is-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_is-object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_is-regexp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_iter-call.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_iter-create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_iter-define.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_iter-detect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_iter-step.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_iterators.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_keyof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_library.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_math-expm1.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_math-log1p.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_math-sign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_meta.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_microtask.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-assign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-define.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-dp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-dps.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-forced-pam.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-gopd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-gopn-ext.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-gopn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-gops.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-gpo.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-keys-internal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-pie.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-sap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_object-to-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_own-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_partial.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_path.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_property-desc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_redefine-all.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_redefine.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_replacer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_same-value.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_set-proto.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_set-species.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_set-to-string-tag.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_shared-key.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_shared.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_species-constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_strict-method.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_string-at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_string-context.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_string-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_string-pad.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_string-repeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_string-trim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_string-ws.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_task.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_to-index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_to-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_to-iobject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_to-length.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_to-object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_to-primitive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_typed-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_typed-buffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_typed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_uid.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_wks-define.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_wks-ext.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/_wks.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.delay.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.dict.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.function.part.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.get-iterator-method.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.get-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.is-iterable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.number.iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.object.classof.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.object.define.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.object.is-object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.object.make.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.regexp.escape.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.string.escape-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/core.string.unescape-html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es5.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.copy-within.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.every.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.fill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.find-index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.find.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.for-each.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.from.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.is-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.join.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.last-index-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.reduce-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.reduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.slice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.some.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.sort.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.array.species.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.date.now.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.date.to-iso-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.date.to-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.date.to-primitive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.date.to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.function.bind.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.function.has-instance.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.function.name.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.acosh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.asinh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.atanh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.cbrt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.clz32.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.cosh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.expm1.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.fround.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.hypot.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.imul.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.log10.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.log1p.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.log2.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.sign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.sinh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.tanh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.math.trunc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.number.constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.number.epsilon.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.number.is-finite.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.number.is-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.number.is-nan.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.number.is-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.number.max-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.number.min-safe-integer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.number.parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.number.parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.number.to-fixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.number.to-precision.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.assign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.define-properties.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.define-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.freeze.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.get-own-property-descriptor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.get-own-property-names.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.get-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.is-extensible.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.is-frozen.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.is-sealed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.is.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.prevent-extensions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.seal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.set-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.object.to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.parse-float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.parse-int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.promise.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.apply.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.construct.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.define-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.delete-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.enumerate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.get-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.get.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.has.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.is-extensible.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.own-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.prevent-extensions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.set-prototype-of.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.reflect.set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.regexp.constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.regexp.flags.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.regexp.match.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.regexp.replace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.regexp.search.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.regexp.split.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.regexp.to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.anchor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.big.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.blink.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.bold.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.code-point-at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.ends-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.fixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.fontcolor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.fontsize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.from-code-point.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.italics.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.link.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.raw.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.repeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.small.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.starts-with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.strike.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.sub.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.sup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.string.trim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.symbol.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.typed.array-buffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.typed.data-view.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.typed.float32-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.typed.float64-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.typed.int16-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.typed.int32-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.typed.int8-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.typed.uint16-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.typed.uint32-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.typed.uint8-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.typed.uint8-clamped-array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.weak-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es6.weak-set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.array.includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.asap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.error.is-error.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.map.to-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.math.iaddh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.math.imulh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.math.isubh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.math.umulh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.object.define-getter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.object.define-setter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.object.entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.object.enumerable-entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.object.enumerable-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.object.enumerable-values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.object.get-own-property-descriptors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.object.lookup-getter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.object.lookup-setter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.object.values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.observable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.reflect.define-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.reflect.delete-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.reflect.get-metadata-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.reflect.get-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.reflect.get-own-metadata-keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.reflect.get-own-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.reflect.has-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.reflect.has-own-metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.reflect.metadata.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.set.to-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.string.at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.string.match-all.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.string.pad-end.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.string.pad-start.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.string.trim-left.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.string.trim-right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.symbol.async-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.symbol.observable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/es7.system.global.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/_add-to-unscopables.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/_collection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/_export.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/_library.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/_path.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/_redefine-all.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/_redefine.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/_set-species.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/es6.date.to-primitive.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/es6.date.to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/es6.function.name.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/es6.number.constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/es6.object.to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/es6.regexp.constructor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/es6.regexp.flags.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/es6.regexp.match.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/es6.regexp.replace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/es6.regexp.search.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/es6.regexp.split.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/es6.regexp.to-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/library/web.dom.iterable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/web.dom.iterable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/web.immediate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/modules/web.timers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/shim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/stage/0.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/stage/1.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/stage/2.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/stage/3.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/stage/4.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/stage/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/stage/pre.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/web/dom-collections.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/web/immediate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/web/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/core-js/web/timers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cryptiles/.npmignore delete mode 100755 fundamentals/bug-challenge-es6/node_modules/cryptiles/.travis.yml delete mode 100755 fundamentals/bug-challenge-es6/node_modules/cryptiles/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cryptiles/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/cryptiles/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cryptiles/package.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/cryptiles/test/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/README.mdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/CSSDocumentRule.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/CSSFontFaceRule.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/CSSImportRule.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/CSSKeyframeRule.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/CSSKeyframesRule.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/CSSMediaRule.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/CSSRule.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/CSSStyleDeclaration.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/CSSStyleRule.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/CSSStyleSheet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/CSSValue.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/CSSValueExpression.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/MatcherList.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/MediaList.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/StyleSheet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/clone.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/lib/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssom/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/MIT-LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/CSSStyleDeclaration.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/parsers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/alignmentBaseline.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/azimuth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/background.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/backgroundAttachment.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/backgroundClip.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/backgroundColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/backgroundImage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/backgroundOrigin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/backgroundPosition.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/backgroundPositionX.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/backgroundPositionY.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/backgroundRepeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/backgroundRepeatX.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/backgroundRepeatY.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/backgroundSize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/baselineShift.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/border.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderBottom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderBottomColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderBottomLeftRadius.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderBottomRightRadius.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderBottomStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderBottomWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderCollapse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderImage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderImageOutset.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderImageRepeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderImageSlice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderImageSource.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderImageWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderLeft.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderLeftColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderLeftStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderLeftWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderRadius.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderRightColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderRightStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderRightWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderSpacing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderTop.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderTopColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderTopLeftRadius.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderTopRightRadius.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderTopStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderTopWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/borderWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/bottom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/boxShadow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/boxSizing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/captionSide.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/clear.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/clip.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/color.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/colorInterpolation.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/colorInterpolationFilters.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/colorProfile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/colorRendering.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/content.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/counterIncrement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/counterReset.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/cssFloat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/cue.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/cueAfter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/cueBefore.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/cursor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/direction.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/display.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/dominantBaseline.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/elevation.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/emptyCells.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/enableBackground.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/fill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/fillOpacity.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/fillRule.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/floodColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/floodOpacity.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/font.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/fontFamily.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/fontSize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/fontSizeAdjust.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/fontStretch.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/fontStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/fontVariant.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/fontWeight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/glyphOrientationHorizontal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/glyphOrientationVertical.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/height.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/imageRendering.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/kerning.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/left.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/letterSpacing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/lightingColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/lineHeight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/listStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/listStyleImage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/listStylePosition.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/listStyleType.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/margin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/marginBottom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/marginLeft.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/marginRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/marginTop.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/marker.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/markerEnd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/markerMid.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/markerOffset.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/markerStart.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/marks.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/mask.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/maxHeight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/maxWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/minHeight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/minWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/opacity.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/orphans.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/outline.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/outlineColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/outlineOffset.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/outlineStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/outlineWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/overflow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/overflowX.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/overflowY.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/padding.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/paddingBottom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/paddingLeft.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/paddingRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/paddingTop.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/page.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/pageBreakAfter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/pageBreakBefore.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/pageBreakInside.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/pause.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/pauseAfter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/pauseBefore.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/pitch.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/pitchRange.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/playDuring.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/pointerEvents.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/position.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/quotes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/resize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/richness.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/right.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/shapeRendering.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/size.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/speak.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/speakHeader.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/speakNumeral.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/speakPunctuation.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/speechRate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/src.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/stopColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/stopOpacity.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/stress.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/stroke.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/strokeDasharray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/strokeDashoffset.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/strokeLinecap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/strokeLinejoin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/strokeMiterlimit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/strokeOpacity.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/strokeWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/tableLayout.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textAlign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textAnchor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textDecoration.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textIndent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textLineThrough.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textLineThroughColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textLineThroughMode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textLineThroughStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textLineThroughWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textOverflow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textOverline.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textOverlineColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textOverlineMode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textOverlineStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textOverlineWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textRendering.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textShadow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textTransform.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textUnderline.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textUnderlineColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textUnderlineMode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textUnderlineStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/textUnderlineWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/top.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/unicodeBidi.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/unicodeRange.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/vectorEffect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/verticalAlign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/visibility.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/voiceFamily.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/volume.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitAnimation.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitAnimationDelay.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitAnimationDirection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitAnimationDuration.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitAnimationFillMode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitAnimationIterationCount.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitAnimationName.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitAnimationPlayState.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitAnimationTimingFunction.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitAppearance.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitAspectRatio.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBackfaceVisibility.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBackgroundClip.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBackgroundComposite.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBackgroundOrigin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBackgroundSize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderAfter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderAfterColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderAfterStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderAfterWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderBefore.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderBeforeColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderBeforeStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderBeforeWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderEnd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderEndColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderEndStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderEndWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderFit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderHorizontalSpacing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderImage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderRadius.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderStart.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderStartColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderStartStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderStartWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBorderVerticalSpacing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBoxAlign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBoxDirection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBoxFlex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBoxFlexGroup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBoxLines.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBoxOrdinalGroup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBoxOrient.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBoxPack.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBoxReflect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitBoxShadow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColorCorrection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumnAxis.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumnBreakAfter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumnBreakBefore.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumnBreakInside.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumnCount.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumnGap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumnRule.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumnRuleColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumnRuleStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumnRuleWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumnSpan.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumnWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitColumns.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFilter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFlexAlign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFlexDirection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFlexFlow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFlexItemAlign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFlexLinePack.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFlexOrder.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFlexPack.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFlexWrap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFlowFrom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFlowInto.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFontFeatureSettings.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFontKerning.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFontSizeDelta.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFontSmoothing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitFontVariantLigatures.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitHighlight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitHyphenateCharacter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitHyphenateLimitAfter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitHyphenateLimitBefore.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitHyphenateLimitLines.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitHyphens.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitLineAlign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitLineBoxContain.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitLineBreak.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitLineClamp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitLineGrid.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitLineSnap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitLocale.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitLogicalHeight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitLogicalWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarginAfter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarginAfterCollapse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarginBefore.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarginBeforeCollapse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarginBottomCollapse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarginCollapse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarginEnd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarginStart.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarginTopCollapse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarquee.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarqueeDirection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarqueeIncrement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarqueeRepetition.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarqueeSpeed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMarqueeStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMask.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskAttachment.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskBoxImage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskBoxImageOutset.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskBoxImageRepeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskBoxImageSlice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskBoxImageSource.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskBoxImageWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskClip.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskComposite.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskImage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskOrigin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskPosition.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskPositionX.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskPositionY.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskRepeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskRepeatX.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskRepeatY.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaskSize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMatchNearestMailBlockquoteColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaxLogicalHeight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMaxLogicalWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMinLogicalHeight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitMinLogicalWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitNbspMode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitOverflowScrolling.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitPaddingAfter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitPaddingBefore.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitPaddingEnd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitPaddingStart.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitPerspective.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitPerspectiveOrigin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitPerspectiveOriginX.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitPerspectiveOriginY.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitPrintColorAdjust.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitRegionBreakAfter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitRegionBreakBefore.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitRegionBreakInside.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitRegionOverflow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitRtlOrdering.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitSvgShadow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTapHighlightColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextCombine.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextDecorationsInEffect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextEmphasis.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextEmphasisColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextEmphasisPosition.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextEmphasisStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextFillColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextOrientation.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextSecurity.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextSizeAdjust.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextStroke.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextStrokeColor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTextStrokeWidth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTransform.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTransformOrigin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTransformOriginX.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTransformOriginY.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTransformOriginZ.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTransformStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTransition.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTransitionDelay.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTransitionDuration.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTransitionProperty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitTransitionTimingFunction.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitUserDrag.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitUserModify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitUserSelect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitWrap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitWrapFlow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitWrapMargin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitWrapPadding.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitWrapShapeInside.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitWrapShapeOutside.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitWrapThrough.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/webkitWritingMode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/whiteSpace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/widows.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/width.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/wordBreak.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/wordSpacing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/wordWrap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/writingMode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/zIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/lib/properties/zoom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/scripts/generate_properties.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/cssstyle/scripts/run_tests.sh delete mode 100644 fundamentals/bug-challenge-es6/node_modules/cssstyle/tests/tests.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/dashdash/CHANGES.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/dashdash/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/dashdash/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/dashdash/etc/dashdash.bash_completion.in delete mode 100644 fundamentals/bug-challenge-es6/node_modules/dashdash/lib/dashdash.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/dashdash/node_modules/assert-plus/AUTHORS delete mode 100644 fundamentals/bug-challenge-es6/node_modules/dashdash/node_modules/assert-plus/CHANGES.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/dashdash/node_modules/assert-plus/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/dashdash/node_modules/assert-plus/assert.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/dashdash/node_modules/assert-plus/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/dashdash/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/.jshintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/Makefile delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/Readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/bower.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/component.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/debug.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/debug/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/decamelize/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/decamelize/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/decamelize/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/decamelize/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/deep-is/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/deep-is/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/deep-is/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/deep-is/README.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/deep-is/example/cmp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/deep-is/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/deep-is/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/deep-is/test/NaN.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/deep-is/test/cmp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/deep-is/test/neg-vs-pos-0.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/delayed-stream/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/delayed-stream/License delete mode 100644 fundamentals/bug-challenge-es6/node_modules/delayed-stream/Makefile delete mode 100644 fundamentals/bug-challenge-es6/node_modules/delayed-stream/Readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/delayed-stream/lib/delayed_stream.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/delayed-stream/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/detect-indent/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/detect-indent/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/detect-indent/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/detect-indent/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/CONTRIBUTING.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/dist/diff.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/dist/diff.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/examples/node_example.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/examples/web_example.html delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/images/node_example.png delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/images/web_example.png delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/convert/dmp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/convert/xml.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/diff/base.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/diff/character.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/diff/css.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/diff/json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/diff/line.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/diff/sentence.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/diff/word.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/patch/apply.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/patch/create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/patch/merge.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/patch/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/util/array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/util/distance-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/lib/util/params.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/release-notes.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/diff/runtime.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ecc-jsbn/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ecc-jsbn/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ecc-jsbn/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ecc-jsbn/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ecc-jsbn/lib/LICENSE-jsbn delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ecc-jsbn/lib/ec.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ecc-jsbn/lib/sec.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ecc-jsbn/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ecc-jsbn/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/errno/.jshintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/errno/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/errno/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/errno/build.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/errno/cli.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/errno/custom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/errno/errno.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/errno/package.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/errno/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/error-ex/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/error-ex/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/error-ex/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/error-ex/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escape-string-regexp/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escape-string-regexp/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escape-string-regexp/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escape-string-regexp/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/LICENSE.BSD delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/LICENSE.source-map delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/escodegen/bin/escodegen.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/escodegen/bin/esgenerate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/escodegen.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/Makefile.dryice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/build/assert-shim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/build/mini-require.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/build/prefix-source-map.jsm delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/build/prefix-utils.jsm delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/build/suffix-browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/build/suffix-source-map.jsm delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/build/suffix-utils.jsm delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/build/test-prefix.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/build/test-suffix.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/lib/source-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/lib/source-map/array-set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/lib/source-map/base64-vlq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/lib/source-map/base64.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/lib/source-map/basic-source-map-consumer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/lib/source-map/binary-search.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/lib/source-map/indexed-source-map-consumer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/lib/source-map/mapping-list.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/lib/source-map/source-map-consumer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/lib/source-map/source-map-generator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/lib/source-map/source-node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/lib/source-map/util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/package.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/test/run-tests.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/test/source-map/test-api.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/test/source-map/test-array-set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/test/source-map/test-base64-vlq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/test/source-map/test-base64.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/test/source-map/test-binary-search.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/test/source-map/test-dog-fooding.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/test/source-map/test-source-map-consumer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/test/source-map/test-source-map-generator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/test/source-map/test-source-node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/test/source-map/test-util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/node_modules/source-map/test/source-map/util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/escodegen/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/esprima/ChangeLog delete mode 100644 fundamentals/bug-challenge-es6/node_modules/esprima/LICENSE.BSD delete mode 100644 fundamentals/bug-challenge-es6/node_modules/esprima/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/esprima/bin/esparse.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/esprima/bin/esvalidate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/esprima/esprima.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/esprima/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/estraverse/.editorconfig delete mode 100644 fundamentals/bug-challenge-es6/node_modules/estraverse/.jshintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/estraverse/LICENSE.BSD delete mode 100644 fundamentals/bug-challenge-es6/node_modules/estraverse/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/estraverse/estraverse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/estraverse/gulpfile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/estraverse/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/esutils/LICENSE.BSD delete mode 100644 fundamentals/bug-challenge-es6/node_modules/esutils/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/esutils/lib/ast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/esutils/lib/code.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/esutils/lib/keyword.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/esutils/lib/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/esutils/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/exec-sh/.jshintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/exec-sh/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/exec-sh/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/exec-sh/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/exec-sh/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/exec-sh/example/example.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/exec-sh/lib/exec-sh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/exec-sh/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/exec-sh/test/exec-sh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/expand-brackets/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/expand-brackets/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/expand-brackets/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/expand-brackets/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/expand-range/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/expand-range/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/expand-range/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/expand-range/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extend/.eslintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extend/.jscs.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extend/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extend/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extend/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extend/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extend/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extend/component.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extend/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extend/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extglob/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extglob/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extglob/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extglob/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extsprintf/.gitmodules delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extsprintf/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extsprintf/Makefile delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extsprintf/Makefile.deps delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extsprintf/Makefile.targ delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extsprintf/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extsprintf/examples/simple.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extsprintf/jsl.node.conf delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extsprintf/lib/extsprintf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/extsprintf/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/LICENSE.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/levenshtein.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fb-watchman/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fb-watchman/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fb-watchman/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/filename-regex/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/filename-regex/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/filename-regex/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/LICENSE-MIT delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/lib/fileset.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/minimatch.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/tests/fixtures/an (odd) filename.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/tests/helper.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/tests/test-sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fileset/tests/test.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/fill-range/LICENSE delete mode 100755 fundamentals/bug-challenge-es6/node_modules/fill-range/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fill-range/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fill-range/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/find-up/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/find-up/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/find-up/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/find-up/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/for-in/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/for-in/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/for-in/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/for-in/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/for-own/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/for-own/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/for-own/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/for-own/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/forever-agent/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/forever-agent/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/forever-agent/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/forever-agent/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/form-data/License delete mode 100644 fundamentals/bug-challenge-es6/node_modules/form-data/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/form-data/lib/browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/form-data/lib/form_data.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/form-data/lib/populate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/form-data/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fs.realpath/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fs.realpath/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fs.realpath/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fs.realpath/old.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/fs.realpath/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-function/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-function/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-function/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-function/example.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-function/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-function/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-function/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-object-property/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-object-property/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-object-property/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-object-property/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-object-property/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-object-property/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/generate-object-property/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/get-caller-file/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/get-caller-file/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/get-caller-file/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/getpass/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/getpass/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/getpass/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/getpass/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/getpass/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/AUTHORS delete mode 100644 fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/CHANGES.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/assert.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/getpass/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob-base/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob-base/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob-base/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob-base/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob-parent/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob-parent/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob-parent/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob-parent/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob-parent/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob-parent/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob-parent/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob/common.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob/glob.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/glob/sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/globals/globals.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/globals/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/globals/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/globals/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/globals/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-fs/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-fs/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-fs/fs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-fs/graceful-fs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-fs/legacy-streams.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-fs/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-fs/polyfills.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-readlink/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-readlink/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-readlink/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-readlink/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-readlink/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/graceful-readlink/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/growly/HISTORY.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/growly/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/growly/example/bakery.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/growly/example/cake.png delete mode 100644 fundamentals/bug-challenge-es6/node_modules/growly/example/muffin.png delete mode 100644 fundamentals/bug-challenge-es6/node_modules/growly/example/simple.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/growly/lib/gntp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/growly/lib/growly.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/growly/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/.gitmodules delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/.istanbul.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/CONTRIBUTING.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/FAQ.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/README.markdown delete mode 100755 fundamentals/bug-challenge-es6/node_modules/handlebars/bin/handlebars delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars.runtime.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/base.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/ast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/base.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/code-gen.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/compiler.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/helpers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/javascript-compiler.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/printer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/visitor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/whitespace-control.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/decorators.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/decorators/inline.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/exception.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/block-helper-missing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/each.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/helper-missing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/if.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/log.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/lookup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/logger.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/no-conflict.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/runtime.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/safe-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/precompiler.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars.runtime.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/base.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/printer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/decorators.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/exception.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/if.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/log.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/logger.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/no-conflict.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/runtime.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/safe-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/precompiler.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.amd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.amd.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.runtime.amd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.runtime.amd.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.runtime.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.runtime.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/docs/compiler-api.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/docs/decorators-api.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars.runtime.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/base.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/ast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/base.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/code-gen.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/compiler.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/helpers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/javascript-compiler.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/printer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/visitor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/whitespace-control.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/decorators.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/decorators/inline.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/exception.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/block-helper-missing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/each.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/helper-missing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/if.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/log.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/lookup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/with.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/logger.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/no-conflict.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/runtime.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/safe-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/lib/precompiler.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/assert-shim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/mini-require.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/prefix-source-map.jsm delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/prefix-utils.jsm delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/suffix-browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/suffix-source-map.jsm delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/suffix-utils.jsm delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/test-prefix.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/test-suffix.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/array-set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/base64-vlq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/base64.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/binary-search.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/mapping-list.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/quick-sort.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/source-map-consumer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/source-map-generator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/source-node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/package.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/handlebars/print-script delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/release-notes.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/handlebars/runtime.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/har-validator/bin/har-validator delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/async.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/error.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/runner.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/cache.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/cacheEntry.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/content.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/cookie.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/creator.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/entry.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/har.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/log.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/page.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/pageTimings.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/postData.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/record.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/request.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/response.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/timings.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/har-validator/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/has-ansi/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/has-ansi/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/has-ansi/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/has-ansi/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/has-flag/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/has-flag/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/has-flag/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/has-flag/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hawk/.npmignore delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/.travis.yml delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/LICENSE delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hawk/bower.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hawk/component.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hawk/dist/client.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/example/usage.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/images/hawk.png delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/images/logo.png delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/lib/browser.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/lib/client.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/lib/crypto.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/lib/index.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/lib/server.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/lib/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hawk/package.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/test/browser.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/test/client.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/test/crypto.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/test/index.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/test/readme.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/test/server.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/test/uri.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/hawk/test/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/CONTRIBUTING.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/images/hoek.png delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/lib/escape.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/test/escaper.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/test/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/test/modules/ignore.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/test/modules/test1.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/test/modules/test2.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hoek/test/modules/test3.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/home-or-tmp/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/home-or-tmp/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/home-or-tmp/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/home-or-tmp/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hosted-git-info/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hosted-git-info/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hosted-git-info/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hosted-git-info/git-host-info.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hosted-git-info/git-host.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hosted-git-info/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/hosted-git-info/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/html-encoding-sniffer/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/html-encoding-sniffer/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/html-encoding-sniffer/lib/html-encoding-sniffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/html-encoding-sniffer/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/http-signature/.dir-locals.el delete mode 100644 fundamentals/bug-challenge-es6/node_modules/http-signature/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/http-signature/CHANGES.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/http-signature/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/http-signature/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/http-signature/http_signing.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/http-signature/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/http-signature/lib/parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/http-signature/lib/signer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/http-signature/lib/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/http-signature/lib/verify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/http-signature/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/Changelog.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/dbcs-codec.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/dbcs-data.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/internal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/sbcs-codec.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/sbcs-data-generated.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/sbcs-data.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/tables/big5-added.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/tables/cp936.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/tables/cp949.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/tables/cp950.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/tables/eucjp.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/tables/gbk-added.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/tables/shiftjis.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/utf16.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/encodings/utf7.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/lib/bom-handling.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/lib/extend-node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/lib/index.d.ts delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/lib/streams.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/iconv-lite/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/inflight/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/inflight/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/inflight/inflight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/inflight/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/inherits/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/inherits/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/inherits/inherits.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/inherits/inherits_browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/inherits/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/invariant/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/invariant/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/invariant/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/invariant/browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/invariant/invariant.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/invariant/invariant.js.flow delete mode 100644 fundamentals/bug-challenge-es6/node_modules/invariant/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/invert-kv/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/invert-kv/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/invert-kv/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-arrayish/.editorconfig delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-arrayish/.istanbul.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-arrayish/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-arrayish/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-arrayish/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-arrayish/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-arrayish/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-arrayish/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-buffer/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-buffer/.zuul.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-buffer/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-buffer/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-buffer/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-buffer/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-buffer/test/basic.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-builtin-module/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-builtin-module/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-builtin-module/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-builtin-module/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-ci/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-ci/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-ci/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-ci/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-ci/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-ci/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-ci/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-dotfile/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-dotfile/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-dotfile/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-dotfile/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-equal-shallow/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-equal-shallow/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-equal-shallow/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-equal-shallow/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-extendable/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-extendable/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-extendable/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-extendable/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-extglob/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-extglob/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-extglob/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-extglob/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-finite/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-finite/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-finite/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-finite/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-fullwidth-code-point/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-fullwidth-code-point/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-fullwidth-code-point/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-fullwidth-code-point/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-glob/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-glob/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-glob/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-glob/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/example.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/formats.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/require.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/fixtures/cosmic.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/additionalItems.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/additionalProperties.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/allOf.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/anyOf.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/bignum.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/default.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/definitions.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/dependencies.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/enum.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/format.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/items.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/maxItems.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/maxLength.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/maxProperties.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/maximum.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/minItems.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/minLength.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/minProperties.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/minimum.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/multipleOf.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/not.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/nullAndFormat.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/nullAndObject.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/oneOf.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/pattern.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/patternProperties.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/properties.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/ref.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/refRemote.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/required.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/type.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema-draft4/uniqueItems.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/json-schema.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-my-json-valid/test/misc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-number/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-number/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-number/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-number/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-posix-bracket/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-posix-bracket/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-posix-bracket/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-posix-bracket/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-primitive/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-primitive/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-primitive/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-primitive/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-property/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-property/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-property/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-property/is-property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-property/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-typedarray/LICENSE.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-typedarray/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-typedarray/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-typedarray/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-typedarray/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-utf8/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-utf8/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-utf8/is-utf8.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/is-utf8/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isarray/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isarray/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isarray/Makefile delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isarray/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isarray/component.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isarray/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isarray/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isarray/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isexe/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isexe/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isexe/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isexe/access.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isexe/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isexe/mode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isexe/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isexe/test/basic.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isexe/windows.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isobject/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isobject/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isobject/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isobject/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isstream/.jshintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isstream/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isstream/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isstream/LICENSE.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isstream/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isstream/isstream.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isstream/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/isstream/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/.doc.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/docs/assets/anchor.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/istanbul-api/docs/assets/bass.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/docs/assets/github.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/docs/assets/site.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/docs/assets/style.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/docs/index.html delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/config.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/file-matcher.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/input-error.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/reporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-check-coverage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-cover.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-instrument.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-reports.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-api/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/.doc.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/lib/coverage-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/lib/file.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/.doc.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/anchor.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/bass.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/github.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/site.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/style.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/index.html delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/lib/hook.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/.nyc_output/5fa375d5572b5deb0d331d6121bbac6d.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/.nyc_output/9d2485ffab3df61c8f8edab7e5285a3f.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/constants.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/instrumenter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/read-coverage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/source-coverage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/visitor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/.doc.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/anchor.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/bass.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/github.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/site.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/style.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/index.html delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/context.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/file-writer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/path.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/summarizer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/tree.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/watermarks.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/xml-writer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/.doc.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/.editorconfig delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/map-store.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/mapped.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/pathutils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/source-store.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/transformer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.doc.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.nyc_output/8762ed8bd43477558a4fdec47d8226a0.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.nyc_output/cdd3cb7496f82074334394a6842dc035.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.nyc_output/e93f82b9c11758b8ebf42d42e39acc38.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/clover/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/cobertura/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/annotator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/base.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/sort-arrow-sprite.png delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/sorter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/vendor/prettify.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/vendor/prettify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/helpers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/insertion-text.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/templates/foot.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/templates/head.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/json-summary/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/json/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/lcov/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/lcovonly/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/none/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/teamcity/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/text-lcov/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/text-summary/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/text/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul-reports/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/base.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/sort-arrow-sprite.png delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/sorter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/vendor/prettify.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/vendor/prettify.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/cli.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/collector.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/check-coverage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/common/run-with-cover.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/cover.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/help.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/instrument.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/report.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/config.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/hook.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/instrumenter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/object-utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/register-plugins.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/clover.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/cobertura.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/common/defaults.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/json-summary.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/lcov.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/lcovonly.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/none.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/teamcity.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/templates/foot.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/templates/head.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/text-lcov.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/text-summary.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/text.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/reporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/fslookup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/memory.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/tmp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/factory.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/file-matcher.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/file-writer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/help-formatter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/input-error.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/insertion-text.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/meta.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/tree-summarizer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/writer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/yui-load-hook.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/README.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/example/center.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/example/meat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/test/break.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/test/idleness.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/test/wrap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/istanbul/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-changed-files/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-changed-files/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-changed-files/build/git.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-changed-files/build/hg.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-changed-files/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-changed-files/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/.npmignore delete mode 100755 fundamentals/bug-challenge-es6/node_modules/jest-cli/bin/jest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/SearchSource.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/TestRunner.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/TestWatcher.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/TestWorker.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/assets/jest_logo.png delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/cli/args.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/cli/getJest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/cli/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/coverage.template delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/generateEmptyCoverage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/jest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/lib/BufferedConsole.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/lib/formatTestResults.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/lib/promisify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/preRunMessage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/BaseReporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/CoverageReporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/DefaultReporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/NotifyReporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/Status.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/SummaryReporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/VerboseReporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/getConsoleOutput.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/getResultHeader.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/build/runTest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-cli/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-config/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-config/build/constants.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-config/build/defaults.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-config/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-config/build/lib/promisify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-config/build/loadFromFile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-config/build/loadFromPackage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-config/build/normalize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-config/build/setFromArgv.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-config/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-diff/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-diff/build/constants.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-diff/build/diffStrings.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-diff/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-diff/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-environment-jsdom/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-environment-jsdom/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-environment-jsdom/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-environment-node/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-environment-node/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-environment-node/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-file-exists/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-file-exists/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-file-exists/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/HasteFS.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/ModuleMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/constants.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/crawlers/node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/crawlers/watchman.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/lib/docblock.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/lib/extractRequires.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/lib/getPlatformExtension.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/types.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/worker.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-haste-map/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/jasmine-async.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/jest-expect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/reporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/setup-jest-globals.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/vendor/jasmine-2.5.2.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-matcher-utils/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-matcher-utils/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-matcher-utils/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-matchers/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/matchers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/spyMatchers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/toThrowMatchers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-matchers/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-mock/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-mock/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-mock/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-mock/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-resolve-dependencies/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-resolve-dependencies/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-resolve-dependencies/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-resolve/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-resolve/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-resolve/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-runtime/.npmignore delete mode 100755 fundamentals/bug-challenge-es6/node_modules/jest-runtime/bin/jest-runtime.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/cli/args.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/cli/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/shouldInstrument.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/transform.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-runtime/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-snapshot/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/State.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/plugins.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-snapshot/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-util/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-util/build/Console.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-util/build/FakeTimers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-util/build/JasmineFormatter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-util/build/NullConsole.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-util/build/clearLine.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-util/build/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-util/build/installCommonGlobals.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-util/build/messages.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-util/build/separateMessageFromStack.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest-util/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/.npmignore delete mode 100755 fundamentals/bug-challenge-es6/node_modules/jest/bin/jest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/build/jest.js delete mode 120000 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/.bin/jest delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/.npmignore delete mode 100755 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/bin/jest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/SearchSource.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/TestRunner.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/TestWatcher.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/TestWorker.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/assets/jest_logo.png delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/cli/args.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/cli/getJest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/cli/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/coverage.template delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/generateEmptyCoverage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/jest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/lib/BufferedConsole.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/lib/formatTestResults.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/lib/promisify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/preRunMessage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/BaseReporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/CoverageReporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/DefaultReporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/NotifyReporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/Status.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/SummaryReporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/VerboseReporter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/getConsoleOutput.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/getResultHeader.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/runTest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jest/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/AUTHORS.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/almond.0 delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/almond.1 delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/jsdoc.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/core.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/curve255.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/dh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/eddsa.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jodid25519/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-tokens/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-tokens/changelog.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-tokens/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-tokens/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-tokens/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/js-yaml/bin/js-yaml.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/dist/js-yaml.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/dist/js-yaml.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/common.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/dumper.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/exception.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/loader.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/mark.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/core.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/default_full.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/binary.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/bool.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/float.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/int.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/js/function.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/merge.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/null.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/omap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/pairs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/seq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/str.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/timestamp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/js-yaml/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsbn/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsbn/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsbn/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsbn/example.html delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsbn/example.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsbn/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsbn/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/Changelog.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/browser/Window.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/browser/default-stylesheet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/browser/documentAdapter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/browser/documentfeatures.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/browser/domtohtml.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/browser/htmltodom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/browser/not-implemented.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/browser/resource-loader.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/level2/style.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/level3/xpath.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/attributes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/attributes/Attr-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/blob-symbols.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/blob.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/dom-token-list.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/domparsing/DOMParser-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/CustomEvent-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/ErrorEvent-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/Event-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/FocusEvent-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/HashChangeEvent-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/KeyboardEvent-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/MessageEvent-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/MouseEvent-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/PopStateEvent-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/ProgressEvent-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/TouchEvent-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/events/UIEvent-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/file-reader.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/file-symbols.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/file.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/filelist-symbols.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/filelist.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/form-data-symbols.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/.gitkeep delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/AddEventListenerOptions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/Attr.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/CharacterData.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/ChildNode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/Comment.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/CustomEvent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/CustomEventInit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/DOMImplementation.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/DOMParser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/Document.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/DocumentFragment.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/DocumentType.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/Element.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/ElementCSSInlineStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/ElementContentEditable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/ErrorEvent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/ErrorEventInit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/Event.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/EventInit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/EventListenerOptions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/EventModifierInit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/EventTarget.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/FocusEvent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/FocusEventInit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/FormData.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/GlobalEventHandlers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLAnchorElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLAppletElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLAreaElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLAudioElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLBRElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLBaseElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLBodyElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLButtonElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLCanvasElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLDListElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLDataElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLDataListElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLDialogElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLDirectoryElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLDivElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLEmbedElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLFieldSetElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLFontElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLFormElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLFrameElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLFrameSetElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLHRElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLHeadElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLHeadingElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLHtmlElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLHyperlinkElementUtils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLIFrameElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLImageElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLInputElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLLIElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLLabelElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLLegendElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLLinkElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLMapElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLMediaElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLMenuElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLMetaElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLMeterElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLModElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLOListElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLObjectElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLOptGroupElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLOptionElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLOutputElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLParagraphElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLParamElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLPreElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLProgressElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLQuoteElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLScriptElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLSelectElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLSourceElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLSpanElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLStyleElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableCaptionElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableCellElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableColElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableDataCellElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableHeaderCellElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableRowElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTableSectionElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTemplateElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTextAreaElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTimeElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTitleElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLTrackElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLUListElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLUnknownElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HTMLVideoElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HashChangeEvent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/HashChangeEventInit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/History.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/KeyboardEvent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/KeyboardEventInit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/LinkStyle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/Location.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/MessageEvent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/MessageEventInit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/MouseEvent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/MouseEventInit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/Navigator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/NavigatorConcurrentHardware.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/NavigatorCookies.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/NavigatorID.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/NavigatorLanguage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/NavigatorOnLine.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/NavigatorPlugins.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/Node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/NonDocumentTypeChildNode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/NonElementParentNode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/ParentNode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/PopStateEvent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/PopStateEventInit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/ProcessingInstruction.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/ProgressEvent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/ProgressEventInit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/ScrollIntoViewOptions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/ScrollOptions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/Text.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/TouchEvent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/TreeWalker.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/UIEvent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/UIEventInit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/Window.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/WindowEventHandlers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/XMLDocument.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/generated/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/helpers/document-base-url.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/helpers/focusing.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/helpers/form-controls.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/helpers/internal-constants.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/helpers/ordered-set-parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/helpers/proxied-window-event-handlers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/helpers/runtime-script-errors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/helpers/selectors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/helpers/stylesheets.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/helpers/traversal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/helpers/validate-names.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/html-collection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/named-properties-window.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/navigator/Navigator-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorConcurrentHardware-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorCookies-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorID-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorLanguage-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorOnLine-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/navigator/NavigatorPlugins-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/node-document-position.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/node-filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/node-iterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/node-list.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/node-type.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/CharacterData-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/ChildNode-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/Comment-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/DOMImplementation-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/Document-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/DocumentFragment-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/DocumentType-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/Element-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/ElementCSSInlineStyle-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/ElementContentEditable-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/GlobalEventHandlers-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLAnchorElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLAppletElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLAreaElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLAudioElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLBRElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLBaseElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLBodyElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLButtonElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLCanvasElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDListElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDataElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDataListElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDialogElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDirectoryElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLDivElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLEmbedElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFieldSetElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFontElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFormElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFrameElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLFrameSetElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHRElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHeadElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHeadingElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHtmlElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLHyperlinkElementUtils-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLIFrameElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLImageElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLInputElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLLIElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLLabelElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLLegendElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLLinkElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMapElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMediaElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMenuElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMetaElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLMeterElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLModElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOListElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLObjectElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOptGroupElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOptionElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLOutputElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLParagraphElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLParamElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLPreElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLProgressElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLQuoteElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLScriptElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLSelectElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLSourceElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLSpanElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLStyleElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableCaptionElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableCellElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableColElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableDataCellElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableHeaderCellElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableRowElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTableSectionElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTemplateElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTextAreaElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTimeElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTitleElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLTrackElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLUListElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLUnknownElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/HTMLVideoElement-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/LinkStyle-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/Node-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/NonDocumentTypeChildNode-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/NonElementParentNode-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/ParentNode-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/ProcessingInstruction-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/Text-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/WindowEventHandlers-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/nodes/XMLDocument-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/post-message.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/register-elements.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/traversal/TreeWalker-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/window/History-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/window/History.idl delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/window/Location-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/window/navigation.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/xhr-sync-worker.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/xhr-utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/xhr/FormData-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/xmlhttprequest-event-target.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/xmlhttprequest-symbols.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/xmlhttprequest-upload.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/living/xmlhttprequest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/named-properties-tracker.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/virtual-console.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/vm-shim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/web-idl/DOMException.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/lib/jsdom/web-idl/dom-exception-table.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsdom/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsesc/LICENSE-MIT.txt delete mode 100755 fundamentals/bug-challenge-es6/node_modules/jsesc/bin/jsesc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsesc/jsesc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsesc/man/jsesc.1 delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsesc/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-00/hyper-schema delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-00/json-ref delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-00/links delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-00/schema delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-01/hyper-schema delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-01/json-ref delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-01/links delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-01/schema delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-02/hyper-schema delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-02/json-ref delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-02/links delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-02/schema delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-03/examples/address delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-03/examples/calendar delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-03/examples/card delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-03/examples/geo delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-03/examples/interfaces delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-03/hyper-schema delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-03/json-ref delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-03/links delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-03/schema delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-04/hyper-schema delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-04/links delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-04/schema delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-zyp-json-schema-03.xml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/draft-zyp-json-schema-04.xml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/lib/links.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/lib/validate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-schema/test/tests.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/example/key_cmp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/example/nested.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/example/str.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/example/value_cmp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/readme.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/test/cmp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/test/nested.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/test/replacer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/test/space.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/test/str.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stable-stringify/test/to-json.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stringify-safe/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stringify-safe/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stringify-safe/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stringify-safe/Makefile delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stringify-safe/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stringify-safe/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stringify-safe/stringify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stringify-safe/test/mocha.opts delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json-stringify-safe/test/stringify_test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json5/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json5/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/json5/lib/cli.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json5/lib/json5.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json5/lib/require.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/json5/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonify/README.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonify/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonify/lib/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonify/lib/stringify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonify/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonify/test/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonify/test/stringify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonpointer/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonpointer/LICENSE.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonpointer/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonpointer/benchmark.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonpointer/jsonpointer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonpointer/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsonpointer/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsprim/CHANGES.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsprim/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsprim/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsprim/lib/jsprim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/jsprim/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/kind-of/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/kind-of/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/kind-of/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/kind-of/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lazy-cache/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lazy-cache/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lazy-cache/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lazy-cache/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lcid/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lcid/lcid.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lcid/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lcid/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lcid/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/levn/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/levn/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/levn/lib/cast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/levn/lib/coerce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/levn/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/levn/lib/parse-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/levn/lib/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/levn/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/load-json-file/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/load-json-file/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/load-json-file/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/load-json-file/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._basefor/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._basefor/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._basefor/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._basefor/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._getnative/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._getnative/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._getnative/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash._getnative/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.assign/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.assign/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.assign/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.assign/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.isarray/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.isarray/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.isarray/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.isarray/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.keys/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.keys/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.keys/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash.keys/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_DataView.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_Hash.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_LazyWrapper.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_ListCache.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_LodashWrapper.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_Map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_MapCache.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_Promise.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_Set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_SetCache.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_Stack.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_Symbol.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_Uint8Array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_WeakMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_addMapEntry.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_addSetEntry.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_apply.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayAggregator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayEach.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayEachRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayEvery.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayFilter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayIncludes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayIncludesWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayLikeKeys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayPush.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayReduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayReduceRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arraySample.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arraySampleSize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arrayShuffle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_arraySome.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_asciiSize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_asciiToArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_asciiWords.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_assignInDefaults.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_assignMergeValue.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_assignValue.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_assocIndexOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseAggregator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseAssign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseAssignIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseAssignValue.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseAt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseClamp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseClone.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseConforms.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseConformsTo.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseCreate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseDelay.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseDifference.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseEach.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseEachRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseEvery.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseExtremum.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseFill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseFilter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseFindIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseFindKey.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseFlatten.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseFor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseForOwn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseForOwnRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseForRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseFunctions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseGet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseGetAllKeys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseGetTag.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseGt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseHas.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseHasIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseInRange.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIndexOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIndexOfWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIntersection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseInverter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseInvoke.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsArguments.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsArrayBuffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsDate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsEqual.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsEqualDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsMatch.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsNaN.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsNative.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsRegExp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsSet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsTypedArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseIteratee.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseKeys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseKeysIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseLodash.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseLt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseMatches.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseMatchesProperty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseMean.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseMerge.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseMergeDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseNth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseOrderBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_basePick.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_basePickBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseProperty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_basePropertyDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_basePropertyOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_basePullAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_basePullAt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseRandom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseRange.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseReduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseRepeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseRest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseSample.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseSampleSize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseSet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseSetData.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseSetToString.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseShuffle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseSlice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseSome.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortedIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortedIndexBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortedUniq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseSum.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseTimes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseToNumber.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseToPairs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseToString.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseUnary.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseUniq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseUnset.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseUpdate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseValues.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseWhile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseWrapperValue.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseXor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_baseZipObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_cacheHas.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_castArrayLikeObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_castFunction.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_castPath.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_castRest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_castSlice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_charsEndIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_charsStartIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_cloneArrayBuffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_cloneBuffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_cloneDataView.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_cloneMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_cloneRegExp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_cloneSet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_cloneSymbol.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_cloneTypedArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_compareAscending.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_compareMultiple.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_composeArgs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_composeArgsRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_copyArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_copyObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_copySymbols.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_copySymbolsIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_coreJsData.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_countHolders.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createAggregator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createAssigner.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createBaseEach.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createBaseFor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createBind.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createCaseFirst.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createCompounder.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createCtor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createCurry.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createFind.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createFlow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createHybrid.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createInverter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createMathOperation.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createOver.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createPadding.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createPartial.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createRange.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createRecurry.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createRelationalOperation.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createRound.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createSet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createToPairs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_createWrap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_deburrLetter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_defineProperty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_equalArrays.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_equalByTag.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_equalObjects.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_escapeHtmlChar.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_escapeStringChar.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_flatRest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_freeGlobal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getAllKeys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getAllKeysIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getData.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getFuncName.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getHolder.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getMapData.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getMatchData.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getNative.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getPrototype.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getRawTag.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getSymbols.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getSymbolsIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getTag.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getValue.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getView.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_getWrapDetails.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_hasPath.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_hasUnicode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_hasUnicodeWord.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_hashClear.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_hashDelete.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_hashGet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_hashHas.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_hashSet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_initCloneArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_initCloneByTag.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_initCloneObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_insertWrapDetails.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_isFlattenable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_isIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_isIterateeCall.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_isKey.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_isKeyable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_isLaziable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_isMaskable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_isMasked.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_isPrototype.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_isStrictComparable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_iteratorToArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_lazyClone.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_lazyReverse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_lazyValue.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheClear.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheDelete.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheGet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheHas.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheSet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheClear.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheDelete.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheGet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheHas.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheSet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_mapToArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_matchesStrictComparable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_memoizeCapped.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_mergeData.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_mergeDefaults.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_metaMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_nativeCreate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_nativeKeys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_nativeKeysIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_nodeUtil.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_objectToString.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_overArg.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_overRest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_parent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_reEscape.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_reEvaluate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_reInterpolate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_realNames.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_reorder.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_replaceHolders.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_root.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_setCacheAdd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_setCacheHas.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_setData.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_setToArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_setToPairs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_setToString.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_setWrapToString.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_shortOut.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_shuffleSelf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_stackClear.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_stackDelete.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_stackGet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_stackHas.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_stackSet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_strictIndexOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_strictLastIndexOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_stringSize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_stringToArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_stringToPath.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_toKey.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_toSource.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_unescapeHtmlChar.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_unicodeSize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_unicodeToArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_unicodeWords.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_updateWrapDetails.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/_wrapperClone.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/add.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/after.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/ary.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/assign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/assignIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/assignInWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/assignWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/attempt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/before.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/bind.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/bindAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/bindKey.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/camelCase.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/capitalize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/castArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/ceil.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/chain.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/chunk.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/clamp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/clone.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/cloneDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/cloneDeepWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/cloneWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/collection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/commit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/compact.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/concat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/cond.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/conforms.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/conformsTo.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/constant.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/core.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/core.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/countBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/curry.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/curryRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/date.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/debounce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/deburr.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/defaultTo.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/defaults.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/defaultsDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/defer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/delay.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/difference.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/differenceBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/differenceWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/divide.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/drop.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/dropRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/dropRightWhile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/dropWhile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/each.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/eachRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/endsWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/entriesIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/eq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/escape.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/escapeRegExp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/every.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/extend.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/extendWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/find.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/findIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/findKey.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/findLast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/findLastIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/findLastKey.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/first.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/flatMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/flatMapDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/flatMapDepth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/flatten.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/flattenDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/flattenDepth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/flip.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/floor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/flow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/flowRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/forEach.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/forEachRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/forIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/forInRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/forOwn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/forOwnRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/F.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/T.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/__.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/_baseConvert.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/_convertBrowser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/_falseOptions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/_mapping.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/_util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/add.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/after.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/all.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/allPass.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/always.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/any.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/anyPass.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/apply.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/array.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/ary.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/assign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignAllWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignInAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignInAllWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignInWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/assoc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/assocPath.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/at.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/attempt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/before.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/bind.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/bindAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/bindKey.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/camelCase.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/capitalize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/castArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/ceil.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/chain.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/chunk.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/clamp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/clone.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/cloneDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/cloneDeepWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/cloneWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/collection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/commit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/compact.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/complement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/compose.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/concat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/cond.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/conforms.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/conformsTo.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/constant.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/contains.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/convert.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/countBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/create.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/curry.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/curryN.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/curryRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/curryRightN.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/date.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/debounce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/deburr.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultTo.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaults.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultsAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultsDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultsDeepAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/defer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/delay.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/difference.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/differenceBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/differenceWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/dissoc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/dissocPath.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/divide.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/drop.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropLast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropLastWhile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropRightWhile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropWhile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/each.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/eachRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/endsWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/entries.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/entriesIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/eq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/equals.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/escape.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/escapeRegExp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/every.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/extend.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/extendAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/extendAllWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/extendWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/fill.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/find.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/findFrom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/findIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/findIndexFrom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/findKey.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastFrom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastIndexFrom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastKey.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/first.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatMapDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatMapDepth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatten.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/flattenDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/flattenDepth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/flip.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/floor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/flow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/flowRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/forEach.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/forEachRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/forIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/forInRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/forOwn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/forOwnRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/fromPairs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/function.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/functions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/functionsIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/get.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/getOr.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/groupBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/gt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/gte.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/has.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/hasIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/head.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/identical.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/identity.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/inRange.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/includesFrom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/indexBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/indexOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/indexOfFrom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/init.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/initial.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/intersection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/intersectionBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/intersectionWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/invert.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/invertBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/invertObj.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/invoke.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/invokeArgs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/invokeArgsMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/invokeMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArguments.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArrayBuffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArrayLike.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArrayLikeObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isBoolean.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isBuffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isDate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isEmpty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isEqual.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isEqualWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isError.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isFinite.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isFunction.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isInteger.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isLength.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isMatch.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isMatchWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNaN.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNative.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNil.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNull.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNumber.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isObjectLike.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isPlainObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isRegExp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isSafeInteger.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isSet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isString.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isSymbol.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isTypedArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isUndefined.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isWeakMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/isWeakSet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/iteratee.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/join.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/juxt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/kebabCase.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/keyBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/keysIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/lang.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/last.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/lastIndexOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/lastIndexOfFrom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/lowerCase.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/lowerFirst.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/lt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/lte.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/mapKeys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/mapValues.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/matches.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/matchesProperty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/math.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/max.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/maxBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/mean.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/meanBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/memoize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/merge.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/mergeAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/mergeAllWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/mergeWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/method.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/methodOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/minBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/mixin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/multiply.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/nAry.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/negate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/next.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/noop.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/now.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/nth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/nthArg.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/number.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/omit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/omitAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/omitBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/once.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/orderBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/over.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/overArgs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/overEvery.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/overSome.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pad.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/padChars.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/padCharsEnd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/padCharsStart.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/padEnd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/padStart.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/parseInt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/partial.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/partialRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/partition.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/path.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pathEq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pathOr.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/paths.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pick.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pickAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pickBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pipe.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/placeholder.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/plant.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pluck.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/prop.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/propEq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/propOr.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/propertyOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/props.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pull.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAllBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAllWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/random.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/range.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/rangeRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/rangeStep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/rangeStepRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/rearg.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/reduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/reduceRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/reject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/remove.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/repeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/replace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/rest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/restFrom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/result.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/reverse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/round.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sample.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sampleSize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/seq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/setWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/shuffle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/size.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/slice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/snakeCase.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/some.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedIndexBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedIndexOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedLastIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedLastIndexBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedLastIndexOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedUniq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedUniqBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/split.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/spread.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/spreadFrom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/startCase.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/startsWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubFalse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubString.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubTrue.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/subtract.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sum.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/sumBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/symmetricDifference.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/symmetricDifferenceBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/symmetricDifferenceWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/tail.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/take.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeLast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeLastWhile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeRightWhile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeWhile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/tap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/template.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/templateSettings.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/throttle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/thru.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/times.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toFinite.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toInteger.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toIterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toJSON.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toLength.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toLower.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toNumber.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPairs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPairsIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPath.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPlainObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toSafeInteger.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toString.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/toUpper.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/transform.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/trim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimChars.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimCharsEnd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimCharsStart.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimEnd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimStart.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/truncate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/unapply.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/unary.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/unescape.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/union.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/unionBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/unionWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniqBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniqWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniqueId.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/unnest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/unset.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/unzip.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/unzipWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/update.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/updateWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/upperCase.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/upperFirst.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/useWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/value.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/valueOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/valuesIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/where.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/whereEq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/without.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/words.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperAt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperChain.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperLodash.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperReverse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperValue.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/xor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/xorBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/xorWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/zip.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipObj.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipObjectDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/fromPairs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/function.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/functions.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/functionsIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/get.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/groupBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/gt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/gte.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/has.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/hasIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/head.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/identity.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/inRange.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/includes.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/indexOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/initial.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/intersection.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/intersectionBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/intersectionWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/invert.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/invertBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/invoke.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/invokeMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isArguments.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isArrayBuffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isArrayLike.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isArrayLikeObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isBoolean.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isBuffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isDate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isEmpty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isEqual.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isEqualWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isError.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isFinite.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isFunction.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isInteger.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isLength.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isMatch.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isMatchWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isNaN.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isNative.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isNil.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isNull.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isNumber.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isObjectLike.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isPlainObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isRegExp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isSafeInteger.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isSet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isString.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isSymbol.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isTypedArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isUndefined.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isWeakMap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/isWeakSet.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/iteratee.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/join.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/kebabCase.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/keyBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/keys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/keysIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/lang.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/last.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/lastIndexOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/lodash.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/lodash.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/lowerCase.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/lowerFirst.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/lt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/lte.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/mapKeys.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/mapValues.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/matches.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/matchesProperty.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/math.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/max.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/maxBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/mean.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/meanBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/memoize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/merge.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/mergeWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/method.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/methodOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/minBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/mixin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/multiply.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/negate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/next.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/noop.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/now.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/nth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/nthArg.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/number.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/object.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/omit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/omitBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/once.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/orderBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/over.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/overArgs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/overEvery.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/overSome.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/pad.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/padEnd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/padStart.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/parseInt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/partial.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/partialRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/partition.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/pick.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/pickBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/plant.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/property.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/propertyOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/pull.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/pullAll.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/pullAllBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/pullAllWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/pullAt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/random.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/range.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/rangeRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/rearg.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/reduce.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/reduceRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/reject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/remove.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/repeat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/replace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/rest.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/result.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/reverse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/round.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sample.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sampleSize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/seq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/setWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/shuffle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/size.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/slice.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/snakeCase.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/some.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sortBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sortedIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sortedIndexBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sortedIndexOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sortedLastIndex.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sortedLastIndexBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sortedLastIndexOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sortedUniq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sortedUniqBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/split.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/spread.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/startCase.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/startsWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/stubArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/stubFalse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/stubObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/stubString.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/stubTrue.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/subtract.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sum.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/sumBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/tail.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/take.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/takeRight.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/takeRightWhile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/takeWhile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/tap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/template.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/templateSettings.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/throttle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/thru.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/times.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toArray.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toFinite.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toInteger.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toIterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toJSON.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toLength.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toLower.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toNumber.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toPairs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toPairsIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toPath.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toPlainObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toSafeInteger.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toString.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/toUpper.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/transform.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/trim.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/trimEnd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/trimStart.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/truncate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/unary.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/unescape.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/union.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/unionBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/unionWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/uniq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/uniqBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/uniqWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/uniqueId.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/unset.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/unzip.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/unzipWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/update.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/updateWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/upperCase.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/upperFirst.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/value.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/valueOf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/values.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/valuesIn.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/without.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/words.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/wrap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/wrapperAt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/wrapperChain.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/wrapperLodash.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/wrapperReverse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/wrapperValue.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/xor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/xorBy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/xorWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/zip.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/zipObject.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/zipObjectDeep.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/lodash/zipWith.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/longest/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/longest/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/longest/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/longest/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/loose-envify/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/loose-envify/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/loose-envify/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/loose-envify/cli.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/loose-envify/custom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/loose-envify/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/loose-envify/loose-envify.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/loose-envify/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/loose-envify/replace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/makeerror/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/makeerror/lib/makeerror.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/makeerror/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/makeerror/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/makeerror/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked-terminal/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked-terminal/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked-terminal/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/Gulpfile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/Makefile delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/marked/bin/marked delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/bower.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/component.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/doc/broken.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/doc/todo.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/lib/marked.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/man/marked.1 delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/marked.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/marked/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/merge/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/merge/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/merge/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/merge/bower.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/merge/merge.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/merge/merge.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/merge/package.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/micromatch/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/micromatch/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/micromatch/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/micromatch/lib/chars.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/micromatch/lib/expand.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/micromatch/lib/glob.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/micromatch/lib/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/micromatch/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mime-db/HISTORY.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mime-db/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mime-db/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mime-db/db.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mime-db/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mime-db/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mime-types/HISTORY.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mime-types/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mime-types/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mime-types/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mime-types/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimatch/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimatch/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimatch/minimatch.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimatch/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/example/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/readme.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/test/dash.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/test/default_bool.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/test/dotted.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/test/long.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/test/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/test/parse_modified.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/test/short.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/minimist/test/whitespace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/LICENSE delete mode 100755 fundamentals/bug-challenge-es6/node_modules/mkdirp/bin/cmd.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/bin/usage.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/examples/pow.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/readme.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/chmod.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/clobber.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/mkdirp.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/opts_fs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/opts_fs_sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/perm.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/perm_sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/race.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/rel.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/return.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/return_sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/root.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/umask.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/mkdirp/test/umask_sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ms/LICENSE.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ms/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ms/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/ms/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/multimatch/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/multimatch/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/multimatch/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/multimatch/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/natural-compare/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/natural-compare/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/natural-compare/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-emoji/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-emoji/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-emoji/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-emoji/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-emoji/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emoji.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emoji.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emojifile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emojiparse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-emoji/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-emoji/test/emoji.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-int64/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-int64/Int64.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-int64/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-int64/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-int64/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-int64/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/node-notifier/bin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/lib/checkGrowl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/lib/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/example/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/readme.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/all_bool.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/bool.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/dash.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/default_bool.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/dotted.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/kv_short.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/long.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/num.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/parse_modified.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/short.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/stop_early.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/unknown.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/whitespace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/balloon.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/growl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/notificationcenter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/notifysend.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/toaster.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/package.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/notifu/notifu.exe delete mode 100755 fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/notifu/notifu64.exe delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/Info.plist delete mode 100755 fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/MacOS/terminal-notifier delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/PkgInfo delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/Resources/Terminal.icns delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/Resources/en.lproj/Credits.rtf delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/Resources/en.lproj/InfoPlist.strings delete mode 100644 fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/Resources/en.lproj/MainMenu.nib delete mode 100755 fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/toaster/Microsoft.WindowsAPICodePack.Shell.dll delete mode 100755 fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/toaster/Microsoft.WindowsAPICodePack.dll delete mode 100755 fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/toaster/toast.exe delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nopt/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nopt/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nopt/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nopt/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/nopt/bin/nopt.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/nopt/examples/my-program.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nopt/lib/nopt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nopt/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nopt/test/basic.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/AUTHORS delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/extract_description.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/fixer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/make_warning.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/normalize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/safe_format.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/typos.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/warning_messages.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/basic.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/consistency.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/dependencies.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/async.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/badscripts.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/bcrypt.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/coffee-script.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/http-server.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/movefile.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/no-description.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/node-module_exist.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/npm.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/read-package-json.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/request.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/underscore.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/github-urls.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/mixedcase-names.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/normalize.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/normalize.js~ delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/scoped.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/scripts.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/strict.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/typo.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-path/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-path/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-path/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/normalize-path/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/number-is-nan/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/number-is-nan/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/number-is-nan/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/number-is-nan/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nwmatcher/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nwmatcher/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nwmatcher/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-cache.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-jquery.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-pseudos.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-shortcuts.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-traversal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-webforms.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/nwmatcher-base.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/nwmatcher-noqsa.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/nwmatcher.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/oauth-sign/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/oauth-sign/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/oauth-sign/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/oauth-sign/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/object-assign/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/object-assign/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/object-assign/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/object-assign/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/object.omit/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/object.omit/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/object.omit/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/object.omit/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/once/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/once/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/once/once.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/once/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/bool.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/boolean_double.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/boolean_single.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/default_hash.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/default_singles.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/divide.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/line_count.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/line_count_options.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/line_count_wrap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/nonopt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/reflect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/short.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/usage-options.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/example/xup.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/readme.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/test/_.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/test/_/argv.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/optimist/test/_/bin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/test/dash.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/test/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/test/parse_modified.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/test/short.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/test/usage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optimist/test/whitespace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/lib/help.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/lib/util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/README.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/example/center.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/example/meat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/test/break.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/test/idleness.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/test/wrap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/optionator/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/os-homedir/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/os-homedir/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/os-homedir/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/os-homedir/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/os-locale/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/os-locale/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/os-locale/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/os-locale/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/os-tmpdir/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/os-tmpdir/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/os-tmpdir/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/os-tmpdir/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse-glob/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse-glob/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse-glob/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse-glob/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse-json/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse-json/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse-json/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse-json/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse-json/vendor/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse-json/vendor/unicode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/docs/build/index.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/common/doctype.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/common/foreign_content.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/common/html.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/common/unicode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/common/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/jsdom/jsdom_parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/jsdom/parsing_unit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/serialization/serializer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/simple_api/simple_api_parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/simple_api/tokenizer_proxy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/tokenization/location_info_mixin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/tokenization/named_entity_trie.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/tokenization/preprocessor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/tokenization/tokenizer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/tree_adapters/default.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/tree_adapters/htmlparser2.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/tree_construction/formatting_element_list.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/tree_construction/location_info_mixin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/tree_construction/open_element_stack.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/lib/tree_construction/parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/parse5/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-exists/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-exists/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-exists/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-exists/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-is-absolute/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-is-absolute/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-is-absolute/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-is-absolute/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-parse/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-parse/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-parse/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-parse/index.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-parse/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-parse/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-parse/test.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-type/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-type/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-type/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/path-type/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pify/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pify/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pify/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pify/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pinkie-promise/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pinkie-promise/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pinkie-promise/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pinkie-promise/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pinkie/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pinkie/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pinkie/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pinkie/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prelude-ls/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prelude-ls/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prelude-ls/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prelude-ls/lib/Func.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prelude-ls/lib/List.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prelude-ls/lib/Num.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prelude-ls/lib/Obj.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prelude-ls/lib/Str.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prelude-ls/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prelude-ls/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/preserve/.gitattributes delete mode 100644 fundamentals/bug-challenge-es6/node_modules/preserve/.jshintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/preserve/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/preserve/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/preserve/.verb.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/preserve/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/preserve/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/preserve/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/preserve/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/preserve/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pretty-format/.npmignore delete mode 100755 fundamentals/bug-challenge-es6/node_modules/pretty-format/LICENSE.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/pretty-format/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pretty-format/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pretty-format/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pretty-format/plugins/ReactElement.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pretty-format/plugins/ReactTestComponent.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/pretty-format/printString.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/private/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/private/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/private/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/private/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/private/private.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/private/test/run.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prr/.jshintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prr/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prr/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prr/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prr/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prr/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prr/prr.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/prr/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/punycode/LICENSE-MIT.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/punycode/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/punycode/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/punycode/punycode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/qs/.eslintignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/qs/.eslintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/qs/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/qs/CONTRIBUTING.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/qs/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/qs/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/qs/dist/qs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/qs/lib/formats.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/qs/lib/index.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/qs/lib/parse.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/qs/lib/stringify.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/qs/lib/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/qs/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/qs/test/.eslintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/qs/test/index.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/qs/test/parse.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/qs/test/stringify.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/qs/test/utils.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/randomatic/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/randomatic/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/randomatic/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/randomatic/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/read-pkg-up/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/read-pkg-up/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/read-pkg-up/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/read-pkg-up/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/read-pkg/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/read-pkg/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/read-pkg/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/read-pkg/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/config-es5.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/config.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/examples/browser/index.css delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/examples/browser/index.html delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/examples/browser/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/examples/browser/sample-config.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/examples/replace-log.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/examples/sources/log.js delete mode 120000 fundamentals/bug-challenge-es6/node_modules/redeyed/node_modules/.bin/esparse delete mode 120000 fundamentals/bug-challenge-es6/node_modules/redeyed/node_modules/.bin/esvalidate delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/node_modules/esprima/ChangeLog delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/node_modules/esprima/LICENSE.BSD delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/node_modules/esprima/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/redeyed/node_modules/esprima/bin/esparse.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/redeyed/node_modules/esprima/bin/esvalidate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/node_modules/esprima/dist/esprima.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/node_modules/esprima/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/redeyed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-before-after-config.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-comments.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-config-with-undefineds.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-function-config-extra-params.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-function-config-skipping-tokens.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-function-config.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-incomplete.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-keywords.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-mixed.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-result.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-script-level-return.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-shebang.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-smoke.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-string-config.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-types.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/redeyed/test/redeyed-upcoming.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regenerate/LICENSE-MIT.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regenerate/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regenerate/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regenerate/regenerate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regenerator-runtime/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regenerator-runtime/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regenerator-runtime/path.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regenerator-runtime/runtime-module.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regenerator-runtime/runtime.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regex-cache/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regex-cache/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regex-cache/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regex-cache/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regexpu-core/LICENSE-MIT.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regexpu-core/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regexpu-core/data/character-class-escape-sets.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regexpu-core/data/iu-mappings.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regexpu-core/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regexpu-core/rewrite-pattern.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsgen/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsgen/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsgen/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsgen/regjsgen.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsparser/CHANGELOG delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsparser/LICENSE.BSD delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsparser/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/regjsparser/bin/parser delete mode 120000 fundamentals/bug-challenge-es6/node_modules/regjsparser/node_modules/.bin/jsesc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsparser/node_modules/jsesc/LICENSE-MIT.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsparser/node_modules/jsesc/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/regjsparser/node_modules/jsesc/bin/jsesc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsparser/node_modules/jsesc/jsesc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsparser/node_modules/jsesc/man/jsesc.1 delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsparser/node_modules/jsesc/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsparser/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/regjsparser/parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/repeat-element/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/repeat-element/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/repeat-element/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/repeat-element/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/repeat-string/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/repeat-string/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/repeat-string/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/repeat-string/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/repeating/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/repeating/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/repeating/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/repeating/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/request/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/lib/auth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/lib/cookies.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/lib/getProxyFromURI.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/lib/har.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/lib/helpers.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/lib/multipart.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/lib/oauth.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/lib/querystring.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/lib/redirect.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/lib/tunnel.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/request/request.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-directory/.jshintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-directory/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-directory/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-directory/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-directory/README.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-directory/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-directory/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-main-filename/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-main-filename/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-main-filename/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-main-filename/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-main-filename/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-main-filename/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/require-main-filename/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/example/async.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/example/sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/lib/async.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/lib/caller.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/lib/core.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/lib/core.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/lib/node-modules-paths.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/lib/sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/readme.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/core.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/dotdot.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/dotdot/abc/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/dotdot/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/faulty_basedir.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/filter_sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/mock.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/mock_sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/module_dir.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/module_dir/xmodules/aaa/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/module_dir/ymodules/aaa/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/module_dir/zmodules/bbb/main.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/module_dir/zmodules/bbb/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/node_path.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/node_path/x/aaa/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/node_path/x/ccc/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/node_path/y/bbb/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/node_path/y/ccc/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/nonstring.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/pathfilter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/pathfilter/deep_ref/main.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/alt.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/deeper/ref.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/pathfilter/deep_ref/node_modules/deep/ref.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/precedence.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/precedence/aaa.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/precedence/aaa/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/precedence/aaa/main.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/precedence/bbb.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/precedence/bbb/main.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/bar/node_modules/foo/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/baz/doom.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/baz/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/baz/quux.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/biz/node_modules/garply/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/biz/node_modules/garply/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/biz/node_modules/grux/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/biz/node_modules/tiv/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/cup.coffee delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/foo.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/incorrect_main/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/incorrect_main/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/mug.coffee delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/mug.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/other_path/lib/other-lib.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/other_path/root.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/punycode/node_modules/punycode/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/quux/foo/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/without_basedir/main.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver/without_basedir/node_modules/mymodule.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/resolver_sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/subdirs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/subdirs/node_modules/a/b/c/x.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/resolve/test/subdirs/node_modules/a/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/right-align/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/right-align/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/right-align/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/right-align/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/rimraf/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/rimraf/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/rimraf/bin.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/rimraf/node_modules/glob/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/rimraf/node_modules/glob/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/rimraf/node_modules/glob/changelog.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/rimraf/node_modules/glob/common.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/rimraf/node_modules/glob/glob.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/rimraf/node_modules/glob/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/rimraf/node_modules/glob/sync.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/rimraf/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/rimraf/rimraf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sane/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/example/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/readme.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/all_bool.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/bool.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/dash.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/default_bool.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/dotted.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/kv_short.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/long.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/num.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/parse_modified.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/short.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/stop_early.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/unknown.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/node_modules/minimist/test/whitespace.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/package.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sane/src/cli.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/src/common.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/src/node_watcher.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/src/poll_watcher.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/src/utils/recrawl-warning-dedupe.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sane/src/watchman_watcher.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sax/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sax/LICENSE-W3C.html delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sax/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sax/lib/sax.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sax/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/semver/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/semver/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/semver/bin/semver delete mode 100644 fundamentals/bug-challenge-es6/node_modules/semver/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/semver/range.bnf delete mode 100644 fundamentals/bug-challenge-es6/node_modules/semver/semver.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/set-blocking/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/set-blocking/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/set-blocking/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/set-blocking/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/set-blocking/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/shellwords/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/shellwords/Cakefile delete mode 100644 fundamentals/bug-challenge-es6/node_modules/shellwords/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/shellwords/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/shellwords/lib/shellwords.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/shellwords/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/shellwords/spec/shellwords_spec.coffee delete mode 100644 fundamentals/bug-challenge-es6/node_modules/shellwords/src/shellwords.coffee delete mode 100644 fundamentals/bug-challenge-es6/node_modules/slash/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/slash/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/slash/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sntp/.npmignore delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sntp/.travis.yml delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sntp/LICENSE delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sntp/Makefile delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sntp/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sntp/examples/offset.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sntp/examples/time.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sntp/index.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sntp/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sntp/package.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sntp/test/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map-support/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map-support/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map-support/LICENSE.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map-support/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map-support/browser-source-map-support.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/source-map-support/build.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map-support/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map-support/register.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map-support/source-map-support.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map-support/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/dist/source-map.debug.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/dist/source-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/dist/source-map.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/dist/source-map.min.js.map delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/lib/array-set.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/lib/base64-vlq.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/lib/base64.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/lib/binary-search.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/lib/mapping-list.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/lib/quick-sort.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/lib/source-map-consumer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/lib/source-map-generator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/lib/source-node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/lib/util.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/source-map/source-map.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-correct/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-correct/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-correct/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-correct/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-expression-parse/AUTHORS delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-expression-parse/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-expression-parse/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-expression-parse/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-expression-parse/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-expression-parse/parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-license-ids/LICENSE delete mode 100755 fundamentals/bug-challenge-es6/node_modules/spdx-license-ids/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-license-ids/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/spdx-license-ids/spdx-license-ids.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/bower.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/demo/angular.html delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/dist/angular-sprintf.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/dist/angular-sprintf.min.js.map delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/dist/angular-sprintf.min.map delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/dist/sprintf.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/dist/sprintf.min.js.map delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/dist/sprintf.min.map delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/gruntfile.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/src/angular-sprintf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/src/sprintf.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sprintf-js/test/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sshpk/bin/sshpk-conv delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sshpk/bin/sshpk-sign delete mode 100755 fundamentals/bug-challenge-es6/node_modules/sshpk/bin/sshpk-verify delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/algs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/certificate.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/dhe.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/ed-compat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/errors.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/fingerprint.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/formats/auto.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/formats/openssh-cert.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/formats/pem.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/formats/pkcs1.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/formats/pkcs8.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/formats/rfc4253.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/formats/ssh-private.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/formats/ssh.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/formats/x509-pem.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/formats/x509.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/identity.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/key.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/private-key.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/signature.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/ssh-buffer.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/lib/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/man/man1/sshpk-conv.1 delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/man/man1/sshpk-sign.1 delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/man/man1/sshpk-verify.1 delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/node_modules/assert-plus/AUTHORS delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/node_modules/assert-plus/CHANGES.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/node_modules/assert-plus/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/node_modules/assert-plus/assert.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/node_modules/assert-plus/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/sshpk/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/string-width/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/string-width/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/string-width/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/string-width/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/string.prototype.codepointat/LICENSE-MIT.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/string.prototype.codepointat/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/string.prototype.codepointat/codepointat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/string.prototype.codepointat/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/stringstream/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/stringstream/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/stringstream/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/stringstream/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/stringstream/example.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/stringstream/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/stringstream/stringstream.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/strip-ansi/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/strip-ansi/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/strip-ansi/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/strip-ansi/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/strip-bom/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/strip-bom/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/strip-bom/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/strip-bom/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/supports-color/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/supports-color/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/supports-color/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/supports-color/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/symbol-tree/.jscsrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/symbol-tree/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/symbol-tree/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/symbol-tree/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/symbol-tree/api.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/symbol-tree/lib/SymbolTree.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/symbol-tree/lib/SymbolTreeNode.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/symbol-tree/lib/TreeIterator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/symbol-tree/lib/TreePosition.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/symbol-tree/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/symbol-tree/test/SymbolTree.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/.editorconfig delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/test/fixtures/defaults/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/test/fixtures/exclude-empty-object/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/test/fixtures/exclude-object/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/test/fixtures/exclude/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/test/fixtures/include-src-only/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/test/fixtures/include/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/test-exclude/test/test-exclude.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/throat/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/throat/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/throat/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/throat/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/throat/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/throat/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/throat/test/browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/throat/test/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tmpl/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tmpl/lib/tmpl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tmpl/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tmpl/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tmpl/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/to-fast-properties/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/to-fast-properties/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/to-fast-properties/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/to-fast-properties/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tough-cookie/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tough-cookie/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tough-cookie/lib/cookie.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tough-cookie/lib/memstore.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tough-cookie/lib/pathMatch.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tough-cookie/lib/permuteDomain.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tough-cookie/lib/pubsuffix.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tough-cookie/lib/store.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tough-cookie/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tr46/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tr46/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tr46/lib/.gitkeep delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tr46/lib/mappingTable.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tr46/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tunnel-agent/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tunnel-agent/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tunnel-agent/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tunnel-agent/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tweetnacl/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tweetnacl/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tweetnacl/COPYING.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tweetnacl/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tweetnacl/nacl-fast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tweetnacl/nacl-fast.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tweetnacl/nacl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tweetnacl/nacl.min.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/tweetnacl/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/type-check/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/type-check/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/type-check/lib/check.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/type-check/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/type-check/lib/parse-type.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/type-check/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/uglify-js/bin/extract-props.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/uglify-js/bin/uglifyjs delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/lib/ast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/lib/compress.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/lib/mozilla-ast.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/lib/output.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/lib/parse.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/lib/propmangle.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/lib/scope.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/lib/sourcemap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/lib/transform.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/lib/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/async/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/async/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/async/component.json delete mode 100755 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/async/lib/async.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/async/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/yargs/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/yargs/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/yargs/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/yargs/completion.sh.hbs delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/yargs/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/yargs/lib/completion.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/yargs/lib/parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/yargs/lib/usage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/yargs/lib/validation.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/node_modules/yargs/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/tools/domprops.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/tools/exports.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/tools/node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-js/tools/props.html delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-to-browserify/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-to-browserify/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-to-browserify/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-to-browserify/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-to-browserify/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-to-browserify/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uglify-to-browserify/test/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uuid/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uuid/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uuid/AUTHORS delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uuid/HISTORY.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uuid/LICENSE.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uuid/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/uuid/bin/uuid delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uuid/lib/rng-browser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uuid/lib/rng.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uuid/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uuid/test/mocha.opts delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uuid/test/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/uuid/uuid.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/validate-npm-package-license/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/validate-npm-package-license/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/validate-npm-package-license/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/validate-npm-package-license/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/.gitmodules delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/Makefile delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/Makefile.targ delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/examples/levels-verror.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/examples/levels-werror.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/examples/varargs.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/examples/verror.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/examples/werror.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/jsl.node.conf delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/lib/verror.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/tests/tst.inherit.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/tests/tst.verror.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/verror/tests/tst.werror.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/walker/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/walker/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/walker/lib/walker.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/walker/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/walker/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/watch/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/watch/main.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/watch/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/watch/readme.mkd delete mode 100644 fundamentals/bug-challenge-es6/node_modules/watch/test/d/d/t delete mode 100644 fundamentals/bug-challenge-es6/node_modules/watch/test/d/t delete mode 100644 fundamentals/bug-challenge-es6/node_modules/watch/test/test_monitor.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/watch/test/test_monitorRootDirectory.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/watch/test/test_watchTree.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/webidl-conversions/LICENSE.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/webidl-conversions/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/webidl-conversions/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/webidl-conversions/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/lib/labels-to-names.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/lib/supported-names.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/lib/whatwg-encoding.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/Changelog.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/dbcs-codec.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/dbcs-data.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/internal.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/sbcs-codec.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/sbcs-data-generated.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/sbcs-data.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/tables/big5-added.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/tables/cp936.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/tables/cp949.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/tables/cp950.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/tables/eucjp.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/tables/gbk-added.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/tables/shiftjis.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/utf16.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/encodings/utf7.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/lib/bom-handling.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/lib/extend-node.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/lib/streams.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/node_modules/iconv-lite/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-encoding/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-url/.eslintignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-url/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-url/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-url/lib/URL-impl.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-url/lib/URL.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-url/lib/public-api.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-url/lib/url-state-machine.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-url/lib/utils.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/whatwg-url/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/which-module/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/which-module/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/which-module/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/which-module/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/which-module/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/which/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/which/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/which/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/which/bin/which delete mode 100644 fundamentals/bug-challenge-es6/node_modules/which/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/which/which.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/window-size/LICENSE-MIT delete mode 100644 fundamentals/bug-challenge-es6/node_modules/window-size/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/window-size/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/window-size/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wordwrap/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wordwrap/README.markdown delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wordwrap/example/center.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wordwrap/example/meat.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wordwrap/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wordwrap/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wordwrap/test/break.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wordwrap/test/idleness.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wordwrap/test/wrap.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/.jshintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/.travis.yml delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/LICENSE.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/examples/basic/child.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/examples/basic/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/examples/pi/calc.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/examples/pi/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/lib/child/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/lib/farm.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/lib/fork.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/lib/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/tests/child.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/worker-farm/tests/index.js delete mode 100755 fundamentals/bug-challenge-es6/node_modules/wrap-ansi/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wrap-ansi/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wrap-ansi/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wrap-ansi/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wrappy/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wrappy/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wrappy/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/wrappy/wrappy.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xml-name-validator/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xml-name-validator/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xml-name-validator/lib/generated-parser.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xml-name-validator/lib/grammar.pegjs delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xml-name-validator/lib/xml-name-validator.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xml-name-validator/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xtend/.jshintrc delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xtend/.npmignore delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xtend/LICENCE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xtend/Makefile delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xtend/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xtend/immutable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xtend/mutable.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xtend/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/xtend/test.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/y18n/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/y18n/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/y18n/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/y18n/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs-parser/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs-parser/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs-parser/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs-parser/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs-parser/lib/tokenize-arg-string.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs-parser/node_modules/camelcase/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs-parser/node_modules/camelcase/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs-parser/node_modules/camelcase/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs-parser/node_modules/camelcase/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs-parser/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/completion.sh.hbs delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/lib/assign.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/lib/command.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/lib/completion.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/lib/levenshtein.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/lib/obj-filter.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/lib/usage.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/lib/validation.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/be.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/de.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/en.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/es.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/fr.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/hi.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/hu.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/id.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/it.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/ja.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/ko.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/nb.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/nl.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/pirate.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/pl.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/pt.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/pt_BR.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/ru.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/th.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/tr.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/locales/zh_CN.json delete mode 120000 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/.bin/window-size delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/camelcase/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/camelcase/license delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/camelcase/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/camelcase/readme.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/cliui/CHANGELOG.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/cliui/LICENSE.txt delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/cliui/README.md delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/cliui/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/cliui/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/window-size/LICENSE delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/window-size/README.md delete mode 100755 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/window-size/cli.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/window-size/index.js delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/node_modules/window-size/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/package.json delete mode 100644 fundamentals/bug-challenge-es6/node_modules/yargs/yargs.js diff --git a/fundamentals/bug-challenge-es6/node_modules/ci-info/.npmignore b/fundamentals/bug-challenge-es6/.gitignore similarity index 100% rename from fundamentals/bug-challenge-es6/node_modules/ci-info/.npmignore rename to fundamentals/bug-challenge-es6/.gitignore diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/acorn b/fundamentals/bug-challenge-es6/node_modules/.bin/acorn deleted file mode 120000 index cf7676038..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/acorn +++ /dev/null @@ -1 +0,0 @@ -../acorn/bin/acorn \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/babylon b/fundamentals/bug-challenge-es6/node_modules/.bin/babylon deleted file mode 120000 index c2adc01b2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/babylon +++ /dev/null @@ -1 +0,0 @@ -../babylon/bin/babylon.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/cdl b/fundamentals/bug-challenge-es6/node_modules/.bin/cdl deleted file mode 120000 index 00a4369a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/cdl +++ /dev/null @@ -1 +0,0 @@ -../cardinal/bin/cdl.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/errno b/fundamentals/bug-challenge-es6/node_modules/.bin/errno deleted file mode 120000 index 5a98e539c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/errno +++ /dev/null @@ -1 +0,0 @@ -../errno/cli.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/escodegen b/fundamentals/bug-challenge-es6/node_modules/.bin/escodegen deleted file mode 120000 index 01a7c3259..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/escodegen +++ /dev/null @@ -1 +0,0 @@ -../escodegen/bin/escodegen.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/esgenerate b/fundamentals/bug-challenge-es6/node_modules/.bin/esgenerate deleted file mode 120000 index 7d0293e66..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/esgenerate +++ /dev/null @@ -1 +0,0 @@ -../escodegen/bin/esgenerate.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/esparse b/fundamentals/bug-challenge-es6/node_modules/.bin/esparse deleted file mode 120000 index 7423b18b2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/esparse +++ /dev/null @@ -1 +0,0 @@ -../esprima/bin/esparse.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/esvalidate b/fundamentals/bug-challenge-es6/node_modules/.bin/esvalidate deleted file mode 120000 index 16069effb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/esvalidate +++ /dev/null @@ -1 +0,0 @@ -../esprima/bin/esvalidate.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/handlebars b/fundamentals/bug-challenge-es6/node_modules/.bin/handlebars deleted file mode 120000 index fb7d090fc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/handlebars +++ /dev/null @@ -1 +0,0 @@ -../handlebars/bin/handlebars \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/har-validator b/fundamentals/bug-challenge-es6/node_modules/.bin/har-validator deleted file mode 120000 index c6ec16346..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/har-validator +++ /dev/null @@ -1 +0,0 @@ -../har-validator/bin/har-validator \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/istanbul b/fundamentals/bug-challenge-es6/node_modules/.bin/istanbul deleted file mode 120000 index c129fe51b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/istanbul +++ /dev/null @@ -1 +0,0 @@ -../istanbul/lib/cli.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/jest b/fundamentals/bug-challenge-es6/node_modules/.bin/jest deleted file mode 120000 index 3d9fe5cf8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/jest +++ /dev/null @@ -1 +0,0 @@ -../jest-cli/bin/jest.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/jest-runtime b/fundamentals/bug-challenge-es6/node_modules/.bin/jest-runtime deleted file mode 120000 index ec00171e0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/jest-runtime +++ /dev/null @@ -1 +0,0 @@ -../jest-runtime/bin/jest-runtime.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/js-yaml b/fundamentals/bug-challenge-es6/node_modules/.bin/js-yaml deleted file mode 120000 index 9dbd010d4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/js-yaml +++ /dev/null @@ -1 +0,0 @@ -../js-yaml/bin/js-yaml.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/jsesc b/fundamentals/bug-challenge-es6/node_modules/.bin/jsesc deleted file mode 120000 index 7237604c3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/jsesc +++ /dev/null @@ -1 +0,0 @@ -../jsesc/bin/jsesc \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/json5 b/fundamentals/bug-challenge-es6/node_modules/.bin/json5 deleted file mode 120000 index 217f37981..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/json5 +++ /dev/null @@ -1 +0,0 @@ -../json5/lib/cli.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/loose-envify b/fundamentals/bug-challenge-es6/node_modules/.bin/loose-envify deleted file mode 120000 index ed9009c5a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/loose-envify +++ /dev/null @@ -1 +0,0 @@ -../loose-envify/cli.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/marked b/fundamentals/bug-challenge-es6/node_modules/.bin/marked deleted file mode 120000 index a8d872e9d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/marked +++ /dev/null @@ -1 +0,0 @@ -../marked/bin/marked \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/mkdirp b/fundamentals/bug-challenge-es6/node_modules/.bin/mkdirp deleted file mode 120000 index 017896ceb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/mkdirp +++ /dev/null @@ -1 +0,0 @@ -../mkdirp/bin/cmd.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/nopt b/fundamentals/bug-challenge-es6/node_modules/.bin/nopt deleted file mode 120000 index 6b6566ea7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/nopt +++ /dev/null @@ -1 +0,0 @@ -../nopt/bin/nopt.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/notify b/fundamentals/bug-challenge-es6/node_modules/.bin/notify deleted file mode 120000 index 2066abb59..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/notify +++ /dev/null @@ -1 +0,0 @@ -../node-notifier/bin.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/regjsparser b/fundamentals/bug-challenge-es6/node_modules/.bin/regjsparser deleted file mode 120000 index 91cec777d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/regjsparser +++ /dev/null @@ -1 +0,0 @@ -../regjsparser/bin/parser \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/rimraf b/fundamentals/bug-challenge-es6/node_modules/.bin/rimraf deleted file mode 120000 index 4cd49a49d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/rimraf +++ /dev/null @@ -1 +0,0 @@ -../rimraf/bin.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/sane b/fundamentals/bug-challenge-es6/node_modules/.bin/sane deleted file mode 120000 index ab4163ba5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/sane +++ /dev/null @@ -1 +0,0 @@ -../sane/src/cli.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/semver b/fundamentals/bug-challenge-es6/node_modules/.bin/semver deleted file mode 120000 index 317eb293d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/semver +++ /dev/null @@ -1 +0,0 @@ -../semver/bin/semver \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/sshpk-conv b/fundamentals/bug-challenge-es6/node_modules/.bin/sshpk-conv deleted file mode 120000 index a2a295c80..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/sshpk-conv +++ /dev/null @@ -1 +0,0 @@ -../sshpk/bin/sshpk-conv \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/sshpk-sign b/fundamentals/bug-challenge-es6/node_modules/.bin/sshpk-sign deleted file mode 120000 index 766b9b3a7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/sshpk-sign +++ /dev/null @@ -1 +0,0 @@ -../sshpk/bin/sshpk-sign \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/sshpk-verify b/fundamentals/bug-challenge-es6/node_modules/.bin/sshpk-verify deleted file mode 120000 index bfd7e3ade..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/sshpk-verify +++ /dev/null @@ -1 +0,0 @@ -../sshpk/bin/sshpk-verify \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/uglifyjs b/fundamentals/bug-challenge-es6/node_modules/.bin/uglifyjs deleted file mode 120000 index fef3468b6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/uglifyjs +++ /dev/null @@ -1 +0,0 @@ -../uglify-js/bin/uglifyjs \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/uuid b/fundamentals/bug-challenge-es6/node_modules/.bin/uuid deleted file mode 120000 index b3e45bc53..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/uuid +++ /dev/null @@ -1 +0,0 @@ -../uuid/bin/uuid \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/.bin/which b/fundamentals/bug-challenge-es6/node_modules/.bin/which deleted file mode 120000 index f62471c85..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/.bin/which +++ /dev/null @@ -1 +0,0 @@ -../which/bin/which \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/abab/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/abab/CHANGELOG.md deleted file mode 100644 index 3b16719b0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/abab/CHANGELOG.md +++ /dev/null @@ -1,11 +0,0 @@ -## 1.0.3 - -- Replaced `let` with `var` in `lib/btoa.js` - - Follow up from `1.0.2` - - Resolves https://github.com/jsdom/abab/issues/18 - -## 1.0.2 - -- Replaced `const` with `var` in `index.js` - - Allows use of `abab` in the browser without a transpilation step - - Resolves https://github.com/jsdom/abab/issues/15 diff --git a/fundamentals/bug-challenge-es6/node_modules/abab/README.md b/fundamentals/bug-challenge-es6/node_modules/abab/README.md deleted file mode 100644 index 2d9c1b52e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/abab/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# abab - -[![npm version](https://badge.fury.io/js/abab.svg)](https://www.npmjs.com/package/abab) [![Build Status](https://travis-ci.org/jsdom/abab.svg?branch=master)](https://travis-ci.org/jsdom/abab) - -A module that implements `window.atob` and `window.btoa` according to the [WHATWG spec](https://html.spec.whatwg.org/multipage/webappapis.html#atob). The code is originally from [w3c/web-platform-tests](https://github.com/w3c/web-platform-tests/blob/master/html/webappapis/atob/base64.html). - -Compatibility: Node.js version 3+ and all major browsers (using browserify or webpack) - -Install with `npm`: - -```sh -npm install abab -``` - -## API - -### `btoa` (base64 encode) - -```js -const btoa = require('abab').btoa; -btoa('Hello, world!'); // 'SGVsbG8sIHdvcmxkIQ==' -``` - -### `atob` (base64 decode) - -```js -const atob = require('abab').atob; -atob('SGVsbG8sIHdvcmxkIQ=='); // 'Hello, world!' -``` - -#### Valid characters - -[Per the spec](https://html.spec.whatwg.org/multipage/webappapis.html#atob:dom-windowbase64-btoa-3), `btoa` will accept strings "containing only characters in the range `U+0000` to `U+00FF`." If passed a string with characters above `U+00FF`, `btoa` will return `null`. If `atob` is passed a string that is not base64-valid, it will also return `null`. In both cases when `null` is returned, the spec calls for throwing a `DOMException` of type `InvalidCharacterError`. - -## Browsers - -If you want to include just one of the methods to save bytes in your client-side code, you can `require` the desired module directly. - -```js -var atob = require('abab/lib/atob'); -var btoa = require('abab/lib/btoa'); -``` - ------ - -### Checklists - -If you're **submitting a PR** or **deploying to npm**, please use the [checklists in CONTRIBUTING.md](https://github.com/jsdom/abab/blob/master/CONTRIBUTING.md#checklists) - -### Remembering `atob` vs. `btoa` - -Here's a mnemonic that might be useful: if you have a plain string and want to base64 encode it, then decode it, `btoa` is what you run before (**b**efore - **b**toa), and `atob` is what you run after (**a**fter - **a**tob). diff --git a/fundamentals/bug-challenge-es6/node_modules/abab/index.js b/fundamentals/bug-challenge-es6/node_modules/abab/index.js deleted file mode 100644 index 16342c4d2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/abab/index.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -var atob = require('./lib/atob'); -var btoa = require('./lib/btoa'); - -module.exports = { - atob: atob, - btoa: btoa -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/abab/lib/atob.js b/fundamentals/bug-challenge-es6/node_modules/abab/lib/atob.js deleted file mode 100644 index ba2528f73..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/abab/lib/atob.js +++ /dev/null @@ -1,109 +0,0 @@ -'use strict'; - -/** - * Implementation of atob() according to the HTML spec, except that instead of - * throwing INVALID_CHARACTER_ERR we return null. - */ -function atob(input) { - // WebIDL requires DOMStrings to just be converted using ECMAScript - // ToString, which in our case amounts to calling String(). - input = String(input); - // "Remove all space characters from input." - input = input.replace(/[ \t\n\f\r]/g, ''); - // "If the length of input divides by 4 leaving no remainder, then: if - // input ends with one or two U+003D EQUALS SIGN (=) characters, remove - // them from input." - if (input.length % 4 == 0 && /==?$/.test(input)) { - input = input.replace(/==?$/, ''); - } - // "If the length of input divides by 4 leaving a remainder of 1, throw an - // INVALID_CHARACTER_ERR exception and abort these steps." - // - // "If input contains a character that is not in the following list of - // characters and character ranges, throw an INVALID_CHARACTER_ERR - // exception and abort these steps: - // - // U+002B PLUS SIGN (+) - // U+002F SOLIDUS (/) - // U+0030 DIGIT ZERO (0) to U+0039 DIGIT NINE (9) - // U+0041 LATIN CAPITAL LETTER A to U+005A LATIN CAPITAL LETTER Z - // U+0061 LATIN SMALL LETTER A to U+007A LATIN SMALL LETTER Z" - if (input.length % 4 == 1 || !/^[+/0-9A-Za-z]*$/.test(input)) { - return null; - } - // "Let output be a string, initially empty." - var output = ''; - // "Let buffer be a buffer that can have bits appended to it, initially - // empty." - // - // We append bits via left-shift and or. accumulatedBits is used to track - // when we've gotten to 24 bits. - var buffer = 0; - var accumulatedBits = 0; - // "While position does not point past the end of input, run these - // substeps:" - for (var i = 0; i < input.length; i++) { - // "Find the character pointed to by position in the first column of - // the following table. Let n be the number given in the second cell of - // the same row." - // - // "Append to buffer the six bits corresponding to number, most - // significant bit first." - // - // atobLookup() implements the table from the spec. - buffer <<= 6; - buffer |= atobLookup(input[i]); - // "If buffer has accumulated 24 bits, interpret them as three 8-bit - // big-endian numbers. Append the three characters with code points - // equal to those numbers to output, in the same order, and then empty - // buffer." - accumulatedBits += 6; - if (accumulatedBits == 24) { - output += String.fromCharCode((buffer & 0xff0000) >> 16); - output += String.fromCharCode((buffer & 0xff00) >> 8); - output += String.fromCharCode(buffer & 0xff); - buffer = accumulatedBits = 0; - } - // "Advance position by one character." - } - // "If buffer is not empty, it contains either 12 or 18 bits. If it - // contains 12 bits, discard the last four and interpret the remaining - // eight as an 8-bit big-endian number. If it contains 18 bits, discard the - // last two and interpret the remaining 16 as two 8-bit big-endian numbers. - // Append the one or two characters with code points equal to those one or - // two numbers to output, in the same order." - if (accumulatedBits == 12) { - buffer >>= 4; - output += String.fromCharCode(buffer); - } else if (accumulatedBits == 18) { - buffer >>= 2; - output += String.fromCharCode((buffer & 0xff00) >> 8); - output += String.fromCharCode(buffer & 0xff); - } - // "Return output." - return output; -} -/** - * A lookup table for atob(), which converts an ASCII character to the - * corresponding six-bit number. - */ -function atobLookup(chr) { - if (/[A-Z]/.test(chr)) { - return chr.charCodeAt(0) - 'A'.charCodeAt(0); - } - if (/[a-z]/.test(chr)) { - return chr.charCodeAt(0) - 'a'.charCodeAt(0) + 26; - } - if (/[0-9]/.test(chr)) { - return chr.charCodeAt(0) - '0'.charCodeAt(0) + 52; - } - if (chr == '+') { - return 62; - } - if (chr == '/') { - return 63; - } - // Throw exception; should not be hit in tests -} - -module.exports = atob; diff --git a/fundamentals/bug-challenge-es6/node_modules/abab/lib/btoa.js b/fundamentals/bug-challenge-es6/node_modules/abab/lib/btoa.js deleted file mode 100644 index bc5b66582..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/abab/lib/btoa.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -/** - * btoa() as defined by the HTML5 spec, which mostly just references RFC4648. - */ -function btoa(s) { - var i; - // String conversion as required by WebIDL. - s = String(s); - // "The btoa() method must throw an INVALID_CHARACTER_ERR exception if the - // method's first argument contains any character whose code point is - // greater than U+00FF." - for (i = 0; i < s.length; i++) { - if (s.charCodeAt(i) > 255) { - return null; - } - } - var out = ''; - for (i = 0; i < s.length; i += 3) { - var groupsOfSix = [undefined, undefined, undefined, undefined]; - groupsOfSix[0] = s.charCodeAt(i) >> 2; - groupsOfSix[1] = (s.charCodeAt(i) & 0x03) << 4; - if (s.length > i + 1) { - groupsOfSix[1] |= s.charCodeAt(i + 1) >> 4; - groupsOfSix[2] = (s.charCodeAt(i + 1) & 0x0f) << 2; - } - if (s.length > i + 2) { - groupsOfSix[2] |= s.charCodeAt(i + 2) >> 6; - groupsOfSix[3] = s.charCodeAt(i + 2) & 0x3f; - } - for (var j = 0; j < groupsOfSix.length; j++) { - if (typeof groupsOfSix[j] == 'undefined') { - out += '='; - } else { - out += btoaLookup(groupsOfSix[j]); - } - } - } - return out; -} - -/** - * Lookup table for btoa(), which converts a six-bit number into the - * corresponding ASCII character. - */ -function btoaLookup(idx) { - if (idx < 26) { - return String.fromCharCode(idx + 'A'.charCodeAt(0)); - } - if (idx < 52) { - return String.fromCharCode(idx - 26 + 'a'.charCodeAt(0)); - } - if (idx < 62) { - return String.fromCharCode(idx - 52 + '0'.charCodeAt(0)); - } - if (idx == 62) { - return '+'; - } - if (idx == 63) { - return '/'; - } - // Throw INVALID_CHARACTER_ERR exception here -- won't be hit in the tests. -} - -module.exports = btoa; diff --git a/fundamentals/bug-challenge-es6/node_modules/abab/package.json b/fundamentals/bug-challenge-es6/node_modules/abab/package.json deleted file mode 100644 index 882c60936..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/abab/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "_args": [ - [ - "abab@^1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jsdom" - ] - ], - "_from": "abab@>=1.0.0 <2.0.0", - "_id": "abab@1.0.3", - "_inCache": true, - "_installable": true, - "_location": "/abab", - "_nodeVersion": "4.1.2", - "_npmUser": { - "email": "gcarpenterv@gmail.com", - "name": "jeffcarp" - }, - "_npmVersion": "2.14.4", - "_phantomChildren": {}, - "_requested": { - "name": "abab", - "raw": "abab@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jsdom" - ], - "_resolved": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz", - "_shasum": "b81de5f7274ec4e756d797cd834f303642724e5d", - "_shrinkwrap": null, - "_spec": "abab@^1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jsdom", - "author": { - "email": "gcarpenterv@gmail.com", - "name": "Jeff Carpenter" - }, - "bugs": { - "url": "https://github.com/jsdom/abab/issues" - }, - "dependencies": {}, - "description": "WHATWG spec-compliant implementations of window.atob and window.btoa.", - "devDependencies": { - "babel-core": "^6.1.4", - "babel-loader": "^6.1.0", - "babel-preset-es2015": "^6.1.4", - "eslint": "^1.3.1", - "jscs": "^2.1.1", - "karma": "^0.13.10", - "karma-cli": "^0.1.1", - "karma-firefox-launcher": "^0.1.6", - "karma-mocha": "^0.2.0", - "karma-sauce-launcher": "^0.2.14", - "karma-webpack": "^1.7.0", - "mocha": "^2.2.5", - "webpack": "^1.12.2" - }, - "directories": {}, - "dist": { - "shasum": "b81de5f7274ec4e756d797cd834f303642724e5d", - "tarball": "https://registry.npmjs.org/abab/-/abab-1.0.3.tgz" - }, - "files": [ - "index.js", - "lib/" - ], - "gitHead": "223c06f29e0e4d4f3bc11164f762898474158c3a", - "homepage": "https://github.com/jsdom/abab#readme", - "keywords": [ - "atob", - "btoa", - "browser" - ], - "license": "ISC", - "main": "index.js", - "maintainers": [ - { - "email": "gcarpenterv@gmail.com", - "name": "jeffcarp" - } - ], - "name": "abab", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jsdom/abab.git" - }, - "scripts": { - "karma": "karma start", - "lint": "jscs . && eslint .", - "mocha": "mocha test/node", - "test": "npm run lint && npm run mocha && npm run karma" - }, - "version": "1.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/abbrev/LICENSE b/fundamentals/bug-challenge-es6/node_modules/abbrev/LICENSE deleted file mode 100644 index 19129e315..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/abbrev/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/abbrev/README.md b/fundamentals/bug-challenge-es6/node_modules/abbrev/README.md deleted file mode 100644 index 99746fe67..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/abbrev/README.md +++ /dev/null @@ -1,23 +0,0 @@ -# abbrev-js - -Just like [ruby's Abbrev](http://apidock.com/ruby/Abbrev). - -Usage: - - var abbrev = require("abbrev"); - abbrev("foo", "fool", "folding", "flop"); - - // returns: - { fl: 'flop' - , flo: 'flop' - , flop: 'flop' - , fol: 'folding' - , fold: 'folding' - , foldi: 'folding' - , foldin: 'folding' - , folding: 'folding' - , foo: 'foo' - , fool: 'fool' - } - -This is handy for command-line scripts, or other cases where you want to be able to accept shorthands. diff --git a/fundamentals/bug-challenge-es6/node_modules/abbrev/abbrev.js b/fundamentals/bug-challenge-es6/node_modules/abbrev/abbrev.js deleted file mode 100644 index 69cfeac52..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/abbrev/abbrev.js +++ /dev/null @@ -1,62 +0,0 @@ - -module.exports = exports = abbrev.abbrev = abbrev - -abbrev.monkeyPatch = monkeyPatch - -function monkeyPatch () { - Object.defineProperty(Array.prototype, 'abbrev', { - value: function () { return abbrev(this) }, - enumerable: false, configurable: true, writable: true - }) - - Object.defineProperty(Object.prototype, 'abbrev', { - value: function () { return abbrev(Object.keys(this)) }, - enumerable: false, configurable: true, writable: true - }) -} - -function abbrev (list) { - if (arguments.length !== 1 || !Array.isArray(list)) { - list = Array.prototype.slice.call(arguments, 0) - } - for (var i = 0, l = list.length, args = [] ; i < l ; i ++) { - args[i] = typeof list[i] === "string" ? list[i] : String(list[i]) - } - - // sort them lexicographically, so that they're next to their nearest kin - args = args.sort(lexSort) - - // walk through each, seeing how much it has in common with the next and previous - var abbrevs = {} - , prev = "" - for (var i = 0, l = args.length ; i < l ; i ++) { - var current = args[i] - , next = args[i + 1] || "" - , nextMatches = true - , prevMatches = true - if (current === next) continue - for (var j = 0, cl = current.length ; j < cl ; j ++) { - var curChar = current.charAt(j) - nextMatches = nextMatches && curChar === next.charAt(j) - prevMatches = prevMatches && curChar === prev.charAt(j) - if (!nextMatches && !prevMatches) { - j ++ - break - } - } - prev = current - if (j === cl) { - abbrevs[current] = current - continue - } - for (var a = current.substr(0, j) ; j <= cl ; j ++) { - abbrevs[a] = current - a += current.charAt(j) - } - } - return abbrevs -} - -function lexSort (a, b) { - return a === b ? 0 : a > b ? 1 : -1 -} diff --git a/fundamentals/bug-challenge-es6/node_modules/abbrev/package.json b/fundamentals/bug-challenge-es6/node_modules/abbrev/package.json deleted file mode 100644 index 76be818d7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/abbrev/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_args": [ - [ - "abbrev@1.0.x", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul" - ] - ], - "_from": "abbrev@>=1.0.0 <1.1.0", - "_id": "abbrev@1.0.9", - "_inCache": true, - "_installable": true, - "_location": "/abbrev", - "_nodeVersion": "4.4.4", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/abbrev-1.0.9.tgz_1466016055839_0.7825860097073019" - }, - "_npmUser": { - "email": "i@izs.me", - "name": "isaacs" - }, - "_npmVersion": "3.9.1", - "_phantomChildren": {}, - "_requested": { - "name": "abbrev", - "raw": "abbrev@1.0.x", - "rawSpec": "1.0.x", - "scope": null, - "spec": ">=1.0.0 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul", - "/nopt" - ], - "_resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "_shasum": "91b4792588a7738c25f35dd6f63752a2f8776135", - "_shrinkwrap": null, - "_spec": "abbrev@1.0.x", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter" - }, - "bugs": { - "url": "https://github.com/isaacs/abbrev-js/issues" - }, - "dependencies": {}, - "description": "Like ruby's abbrev module, but in js", - "devDependencies": { - "tap": "^5.7.2" - }, - "directories": {}, - "dist": { - "shasum": "91b4792588a7738c25f35dd6f63752a2f8776135", - "tarball": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz" - }, - "files": [ - "abbrev.js" - ], - "gitHead": "c386cd9dbb1d8d7581718c54d4ba944cc9298d6f", - "homepage": "https://github.com/isaacs/abbrev-js#readme", - "license": "ISC", - "main": "abbrev.js", - "maintainers": [ - { - "email": "i@izs.me", - "name": "isaacs" - } - ], - "name": "abbrev", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/isaacs/abbrev-js.git" - }, - "scripts": { - "test": "tap test.js --cov" - }, - "version": "1.0.9" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/acorn-globals/LICENSE b/fundamentals/bug-challenge-es6/node_modules/acorn-globals/LICENSE deleted file mode 100644 index 27cc9f377..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn-globals/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -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/fundamentals/bug-challenge-es6/node_modules/acorn-globals/README.md b/fundamentals/bug-challenge-es6/node_modules/acorn-globals/README.md deleted file mode 100644 index d8cd372eb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn-globals/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# 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/fundamentals/bug-challenge-es6/node_modules/acorn-globals/index.js b/fundamentals/bug-challenge-es6/node_modules/acorn-globals/index.js deleted file mode 100644 index ff924c9ae..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn-globals/index.js +++ /dev/null @@ -1,180 +0,0 @@ -'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/fundamentals/bug-challenge-es6/node_modules/acorn-globals/package.json b/fundamentals/bug-challenge-es6/node_modules/acorn-globals/package.json deleted file mode 100644 index 90dadb18b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn-globals/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "acorn-globals@^1.0.4", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jsdom" - ] - ], - "_from": "acorn-globals@>=1.0.4 <2.0.0", - "_id": "acorn-globals@1.0.9", - "_inCache": true, - "_installable": true, - "_location": "/acorn-globals", - "_nodeVersion": "1.6.2", - "_npmUser": { - "email": "forbes@lindesay.co.uk", - "name": "forbeslindesay" - }, - "_npmVersion": "2.7.1", - "_phantomChildren": {}, - "_requested": { - "name": "acorn-globals", - "raw": "acorn-globals@^1.0.4", - "rawSpec": "^1.0.4", - "scope": null, - "spec": ">=1.0.4 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jsdom" - ], - "_resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", - "_shasum": "55bb5e98691507b74579d0513413217c380c54cf", - "_shrinkwrap": null, - "_spec": "acorn-globals@^1.0.4", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jsdom", - "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": [ - { - "email": "forbes@lindesay.co.uk", - "name": "forbeslindesay" - }, - { - "email": "timothygu99@gmail.com", - "name": "timothygu" - } - ], - "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/fundamentals/bug-challenge-es6/node_modules/acorn/.editorconfig b/fundamentals/bug-challenge-es6/node_modules/acorn/.editorconfig deleted file mode 100644 index c14d5c67b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/.editorconfig +++ /dev/null @@ -1,7 +0,0 @@ -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true diff --git a/fundamentals/bug-challenge-es6/node_modules/acorn/.gitattributes b/fundamentals/bug-challenge-es6/node_modules/acorn/.gitattributes deleted file mode 100644 index fcadb2cf9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text eol=lf diff --git a/fundamentals/bug-challenge-es6/node_modules/acorn/.npmignore b/fundamentals/bug-challenge-es6/node_modules/acorn/.npmignore deleted file mode 100644 index ecba2911d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -/.tern-port -/test -/local diff --git a/fundamentals/bug-challenge-es6/node_modules/acorn/.tern-project b/fundamentals/bug-challenge-es6/node_modules/acorn/.tern-project deleted file mode 100644 index 6718ce07e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/.tern-project +++ /dev/null @@ -1,6 +0,0 @@ -{ - "plugins": { - "node": true, - "es_modules": true - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/acorn/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/acorn/.travis.yml deleted file mode 100644 index f50c379b6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js -sudo: false -node_js: - - '0.10' - - '0.12' - - '4' diff --git a/fundamentals/bug-challenge-es6/node_modules/acorn/AUTHORS b/fundamentals/bug-challenge-es6/node_modules/acorn/AUTHORS deleted file mode 100644 index 0e8f48b69..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/AUTHORS +++ /dev/null @@ -1,43 +0,0 @@ -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/fundamentals/bug-challenge-es6/node_modules/acorn/LICENSE b/fundamentals/bug-challenge-es6/node_modules/acorn/LICENSE deleted file mode 100644 index d4c7fc583..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -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/fundamentals/bug-challenge-es6/node_modules/acorn/README.md b/fundamentals/bug-challenge-es6/node_modules/acorn/README.md deleted file mode 100644 index acd39a8e5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/README.md +++ /dev/null @@ -1,396 +0,0 @@ -# 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/fundamentals/bug-challenge-es6/node_modules/acorn/bin/acorn b/fundamentals/bug-challenge-es6/node_modules/acorn/bin/acorn deleted file mode 100755 index db079096d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/bin/acorn +++ /dev/null @@ -1,71 +0,0 @@ -#!/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/fundamentals/bug-challenge-es6/node_modules/acorn/bin/build-acorn.js b/fundamentals/bug-challenge-es6/node_modules/acorn/bin/build-acorn.js deleted file mode 100644 index 71f2cf941..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/bin/build-acorn.js +++ /dev/null @@ -1,82 +0,0 @@ -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/fundamentals/bug-challenge-es6/node_modules/acorn/bin/generate-identifier-regex.js b/fundamentals/bug-challenge-es6/node_modules/acorn/bin/generate-identifier-regex.js deleted file mode 100644 index 0d7c50fc3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/bin/generate-identifier-regex.js +++ /dev/null @@ -1,47 +0,0 @@ -// 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/fundamentals/bug-challenge-es6/node_modules/acorn/bin/update_authors.sh b/fundamentals/bug-challenge-es6/node_modules/acorn/bin/update_authors.sh deleted file mode 100755 index 466c8db58..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/bin/update_authors.sh +++ /dev/null @@ -1,6 +0,0 @@ -# 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/fundamentals/bug-challenge-es6/node_modules/acorn/dist/.keep b/fundamentals/bug-challenge-es6/node_modules/acorn/dist/.keep deleted file mode 100644 index e69de29bb..000000000 diff --git a/fundamentals/bug-challenge-es6/node_modules/acorn/dist/acorn.js b/fundamentals/bug-challenge-es6/node_modules/acorn/dist/acorn.js deleted file mode 100644 index 9419f862a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/acorn/dist/acorn.js +++ /dev/null @@ -1,3340 +0,0 @@ -(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() - // ` - -AsyncKit provides harness for `parallel` and `serial` iterators over list of items represented by arrays or objects. -Optionally it accepts abort function (should be synchronously return by iterator for each item), and terminates left over jobs upon an error event. For specific iteration order built-in (`ascending` and `descending`) and custom sort helpers also supported, via `asynckit.serialOrdered` method. - -It ensures async operations to keep behavior more stable and prevent `Maximum call stack size exceeded` errors, from sync iterators. - -| compression | size | -| :----------------- | -------: | -| asynckit.js | 12.34 kB | -| asynckit.min.js | 4.11 kB | -| asynckit.min.js.gz | 1.47 kB | - - -## Install - -```sh -$ npm install --save asynckit -``` - -## Examples - -### Parallel Jobs - -Runs iterator over provided array in parallel. Stores output in the `result` array, -on the matching positions. In unlikely event of an error from one of the jobs, -will terminate rest of the active jobs (if abort function is provided) -and return error along with salvaged data to the main callback function. - -#### Input Array - -```javascript -var parallel = require('asynckit').parallel - , assert = require('assert') - ; - -var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] - , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] - , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] - , target = [] - ; - -parallel(source, asyncJob, function(err, result) -{ - assert.deepEqual(result, expectedResult); - assert.deepEqual(target, expectedTarget); -}); - -// async job accepts one element from the array -// and a callback function -function asyncJob(item, cb) -{ - // different delays (in ms) per item - var delay = item * 25; - - // pretend different jobs take different time to finish - // and not in consequential order - var timeoutId = setTimeout(function() { - target.push(item); - cb(null, item * 2); - }, delay); - - // allow to cancel "leftover" jobs upon error - // return function, invoking of which will abort this job - return clearTimeout.bind(null, timeoutId); -} -``` - -More examples could be found in [test/test-parallel-array.js](test/test-parallel-array.js). - -#### Input Object - -Also it supports named jobs, listed via object. - -```javascript -var parallel = require('asynckit/parallel') - , assert = require('assert') - ; - -var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } - , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } - , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] - , expectedKeys = [ 'first', 'one', 'two', 'four', 'eight', 'sixteen', 'thirtyTwo', 'sixtyFour' ] - , target = [] - , keys = [] - ; - -parallel(source, asyncJob, function(err, result) -{ - assert.deepEqual(result, expectedResult); - assert.deepEqual(target, expectedTarget); - assert.deepEqual(keys, expectedKeys); -}); - -// supports full value, key, callback (shortcut) interface -function asyncJob(item, key, cb) -{ - // different delays (in ms) per item - var delay = item * 25; - - // pretend different jobs take different time to finish - // and not in consequential order - var timeoutId = setTimeout(function() { - keys.push(key); - target.push(item); - cb(null, item * 2); - }, delay); - - // allow to cancel "leftover" jobs upon error - // return function, invoking of which will abort this job - return clearTimeout.bind(null, timeoutId); -} -``` - -More examples could be found in [test/test-parallel-object.js](test/test-parallel-object.js). - -### Serial Jobs - -Runs iterator over provided array sequentially. Stores output in the `result` array, -on the matching positions. In unlikely event of an error from one of the jobs, -will not proceed to the rest of the items in the list -and return error along with salvaged data to the main callback function. - -#### Input Array - -```javascript -var serial = require('asynckit/serial') - , assert = require('assert') - ; - -var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] - , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] - , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] - , target = [] - ; - -serial(source, asyncJob, function(err, result) -{ - assert.deepEqual(result, expectedResult); - assert.deepEqual(target, expectedTarget); -}); - -// extended interface (item, key, callback) -// also supported for arrays -function asyncJob(item, key, cb) -{ - target.push(key); - - // it will be automatically made async - // even it iterator "returns" in the same event loop - cb(null, item * 2); -} -``` - -More examples could be found in [test/test-serial-array.js](test/test-serial-array.js). - -#### Input Object - -Also it supports named jobs, listed via object. - -```javascript -var serial = require('asynckit').serial - , assert = require('assert') - ; - -var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] - , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] - , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] - , target = [] - ; - -var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } - , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } - , expectedTarget = [ 1, 1, 4, 16, 64, 32, 8, 2 ] - , target = [] - ; - - -serial(source, asyncJob, function(err, result) -{ - assert.deepEqual(result, expectedResult); - assert.deepEqual(target, expectedTarget); -}); - -// shortcut interface (item, callback) -// works for object as well as for the arrays -function asyncJob(item, cb) -{ - target.push(item); - - // it will be automatically made async - // even it iterator "returns" in the same event loop - cb(null, item * 2); -} -``` - -More examples could be found in [test/test-serial-object.js](test/test-serial-object.js). - -_Note: Since _object_ is an _unordered_ collection of properties, -it may produce unexpected results with sequential iterations. -Whenever order of the jobs' execution is important please use `serialOrdered` method._ - -### Ordered Serial Iterations - -TBD - -For example [compare-property](compare-property) package. - -### Streaming interface - -TBD - -## Want to Know More? - -More examples can be found in [test folder](test/). - -Or open an [issue](https://github.com/alexindigo/asynckit/issues) with questions and/or suggestions. - -## License - -AsyncKit is licensed under the MIT license. diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/bench.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/bench.js deleted file mode 100644 index c612f1a55..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/bench.js +++ /dev/null @@ -1,76 +0,0 @@ -/* eslint no-console: "off" */ - -var asynckit = require('./') - , async = require('async') - , assert = require('assert') - , expected = 0 - ; - -var Benchmark = require('benchmark'); -var suite = new Benchmark.Suite; - -var source = []; -for (var z = 1; z < 100; z++) -{ - source.push(z); - expected += z; -} - -suite -// add tests - -.add('async.map', function(deferred) -{ - var total = 0; - - async.map(source, - function(i, cb) - { - setImmediate(function() - { - total += i; - cb(null, total); - }); - }, - function(err, result) - { - assert.ifError(err); - assert.equal(result[result.length - 1], expected); - deferred.resolve(); - }); -}, {'defer': true}) - - -.add('asynckit.parallel', function(deferred) -{ - var total = 0; - - asynckit.parallel(source, - function(i, cb) - { - setImmediate(function() - { - total += i; - cb(null, total); - }); - }, - function(err, result) - { - assert.ifError(err); - assert.equal(result[result.length - 1], expected); - deferred.resolve(); - }); -}, {'defer': true}) - - -// add listeners -.on('cycle', function(ev) -{ - console.log(String(ev.target)); -}) -.on('complete', function() -{ - console.log('Fastest is ' + this.filter('fastest').map('name')); -}) -// run async -.run({ 'async': true }); diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/index.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/index.js deleted file mode 100644 index 455f9454e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/index.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = -{ - parallel : require('./parallel.js'), - serial : require('./serial.js'), - serialOrdered : require('./serialOrdered.js') -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/abort.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/abort.js deleted file mode 100644 index 114367e5f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/abort.js +++ /dev/null @@ -1,29 +0,0 @@ -// API -module.exports = abort; - -/** - * Aborts leftover active jobs - * - * @param {object} state - current state object - */ -function abort(state) -{ - Object.keys(state.jobs).forEach(clean.bind(state)); - - // reset leftover jobs - state.jobs = {}; -} - -/** - * Cleans up leftover job by invoking abort function for the provided job id - * - * @this state - * @param {string|number} key - job id to abort - */ -function clean(key) -{ - if (typeof this.jobs[key] == 'function') - { - this.jobs[key](); - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/async.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/async.js deleted file mode 100644 index 7f1288a4c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/async.js +++ /dev/null @@ -1,34 +0,0 @@ -var defer = require('./defer.js'); - -// API -module.exports = async; - -/** - * Runs provided callback asynchronously - * even if callback itself is not - * - * @param {function} callback - callback to invoke - * @returns {function} - augmented callback - */ -function async(callback) -{ - var isAsync = false; - - // check if async happened - defer(function() { isAsync = true; }); - - return function async_callback(err, result) - { - if (isAsync) - { - callback(err, result); - } - else - { - defer(function nextTick_callback() - { - callback(err, result); - }); - } - }; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/defer.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/defer.js deleted file mode 100644 index b67110c7a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/defer.js +++ /dev/null @@ -1,26 +0,0 @@ -module.exports = defer; - -/** - * Runs provided function on next iteration of the event loop - * - * @param {function} fn - function to run - */ -function defer(fn) -{ - var nextTick = typeof setImmediate == 'function' - ? setImmediate - : ( - typeof process == 'object' && typeof process.nextTick == 'function' - ? process.nextTick - : null - ); - - if (nextTick) - { - nextTick(fn); - } - else - { - setTimeout(fn, 0); - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/iterate.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/iterate.js deleted file mode 100644 index 5d2839a59..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/iterate.js +++ /dev/null @@ -1,75 +0,0 @@ -var async = require('./async.js') - , abort = require('./abort.js') - ; - -// API -module.exports = iterate; - -/** - * Iterates over each job object - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {object} state - current job status - * @param {function} callback - invoked when all elements processed - */ -function iterate(list, iterator, state, callback) -{ - // store current index - var key = state['keyedList'] ? state['keyedList'][state.index] : state.index; - - state.jobs[key] = runJob(iterator, key, list[key], function(error, output) - { - // don't repeat yourself - // skip secondary callbacks - if (!(key in state.jobs)) - { - return; - } - - // clean up jobs - delete state.jobs[key]; - - if (error) - { - // don't process rest of the results - // stop still active jobs - // and reset the list - abort(state); - } - else - { - state.results[key] = output; - } - - // return salvaged results - callback(error, state.results); - }); -} - -/** - * Runs iterator over provided job element - * - * @param {function} iterator - iterator to invoke - * @param {string|number} key - key/index of the element in the list of jobs - * @param {mixed} item - job description - * @param {function} callback - invoked after iterator is done with the job - * @returns {function|mixed} - job abort function or something else - */ -function runJob(iterator, key, item, callback) -{ - var aborter; - - // allow shortcut if iterator expects only two arguments - if (iterator.length == 2) - { - aborter = iterator(item, async(callback)); - } - // otherwise go with full three arguments - else - { - aborter = iterator(item, key, async(callback)); - } - - return aborter; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_asynckit.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_asynckit.js deleted file mode 100644 index 78ad240f0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_asynckit.js +++ /dev/null @@ -1,91 +0,0 @@ -var streamify = require('./streamify.js') - , defer = require('./defer.js') - ; - -// API -module.exports = ReadableAsyncKit; - -/** - * Base constructor for all streams - * used to hold properties/methods - */ -function ReadableAsyncKit() -{ - ReadableAsyncKit.super_.apply(this, arguments); - - // list of active jobs - this.jobs = {}; - - // add stream methods - this.destroy = destroy; - this._start = _start; - this._read = _read; -} - -/** - * Destroys readable stream, - * by aborting outstanding jobs - * - * @returns {void} - */ -function destroy() -{ - if (this.destroyed) - { - return; - } - - this.destroyed = true; - - if (typeof this.terminator == 'function') - { - this.terminator(); - } -} - -/** - * Starts provided jobs in async manner - * - * @private - */ -function _start() -{ - // first argument – runner function - var runner = arguments[0] - // take away first argument - , args = Array.prototype.slice.call(arguments, 1) - // second argument - input data - , input = args[0] - // last argument - result callback - , endCb = streamify.callback.call(this, args[args.length - 1]) - ; - - args[args.length - 1] = endCb; - // third argument - iterator - args[1] = streamify.iterator.call(this, args[1]); - - // allow time for proper setup - defer(function() - { - if (!this.destroyed) - { - this.terminator = runner.apply(null, args); - } - else - { - endCb(null, Array.isArray(input) ? [] : {}); - } - }.bind(this)); -} - - -/** - * Implement _read to comply with Readable streams - * Doesn't really make sense for flowing object mode - * - * @private - */ -function _read() -{ - -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_parallel.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_parallel.js deleted file mode 100644 index 5d2929f7a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_parallel.js +++ /dev/null @@ -1,25 +0,0 @@ -var parallel = require('../parallel.js'); - -// API -module.exports = ReadableParallel; - -/** - * Streaming wrapper to `asynckit.parallel` - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {function} callback - invoked when all elements processed - * @returns {stream.Readable#} - */ -function ReadableParallel(list, iterator, callback) -{ - if (!(this instanceof ReadableParallel)) - { - return new ReadableParallel(list, iterator, callback); - } - - // turn on object mode - ReadableParallel.super_.call(this, {objectMode: true}); - - this._start(parallel, list, iterator, callback); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_serial.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_serial.js deleted file mode 100644 index 782269820..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_serial.js +++ /dev/null @@ -1,25 +0,0 @@ -var serial = require('../serial.js'); - -// API -module.exports = ReadableSerial; - -/** - * Streaming wrapper to `asynckit.serial` - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {function} callback - invoked when all elements processed - * @returns {stream.Readable#} - */ -function ReadableSerial(list, iterator, callback) -{ - if (!(this instanceof ReadableSerial)) - { - return new ReadableSerial(list, iterator, callback); - } - - // turn on object mode - ReadableSerial.super_.call(this, {objectMode: true}); - - this._start(serial, list, iterator, callback); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_serial_ordered.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_serial_ordered.js deleted file mode 100644 index 3de89c472..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/readable_serial_ordered.js +++ /dev/null @@ -1,29 +0,0 @@ -var serialOrdered = require('../serialOrdered.js'); - -// API -module.exports = ReadableSerialOrdered; -// expose sort helpers -module.exports.ascending = serialOrdered.ascending; -module.exports.descending = serialOrdered.descending; - -/** - * Streaming wrapper to `asynckit.serialOrdered` - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {function} sortMethod - custom sort function - * @param {function} callback - invoked when all elements processed - * @returns {stream.Readable#} - */ -function ReadableSerialOrdered(list, iterator, sortMethod, callback) -{ - if (!(this instanceof ReadableSerialOrdered)) - { - return new ReadableSerialOrdered(list, iterator, sortMethod, callback); - } - - // turn on object mode - ReadableSerialOrdered.super_.call(this, {objectMode: true}); - - this._start(serialOrdered, list, iterator, sortMethod, callback); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/state.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/state.js deleted file mode 100644 index cbea7ad8f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/state.js +++ /dev/null @@ -1,37 +0,0 @@ -// API -module.exports = state; - -/** - * Creates initial state object - * for iteration over list - * - * @param {array|object} list - list to iterate over - * @param {function|null} sortMethod - function to use for keys sort, - * or `null` to keep them as is - * @returns {object} - initial state object - */ -function state(list, sortMethod) -{ - var isNamedList = !Array.isArray(list) - , initState = - { - index : 0, - keyedList: isNamedList || sortMethod ? Object.keys(list) : null, - jobs : {}, - results : isNamedList ? {} : [], - size : isNamedList ? Object.keys(list).length : list.length - } - ; - - if (sortMethod) - { - // sort array keys based on it's values - // sort object's keys just on own merit - initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) - { - return sortMethod(list[a], list[b]); - }); - } - - return initState; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/streamify.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/streamify.js deleted file mode 100644 index f56a1c92b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/streamify.js +++ /dev/null @@ -1,141 +0,0 @@ -var async = require('./async.js'); - -// API -module.exports = { - iterator: wrapIterator, - callback: wrapCallback -}; - -/** - * Wraps iterators with long signature - * - * @this ReadableAsyncKit# - * @param {function} iterator - function to wrap - * @returns {function} - wrapped function - */ -function wrapIterator(iterator) -{ - var stream = this; - - return function(item, key, cb) - { - var aborter - , wrappedCb = async(wrapIteratorCallback.call(stream, cb, key)) - ; - - stream.jobs[key] = wrappedCb; - - // it's either shortcut (item, cb) - if (iterator.length == 2) - { - aborter = iterator(item, wrappedCb); - } - // or long format (item, key, cb) - else - { - aborter = iterator(item, key, wrappedCb); - } - - return aborter; - }; -} - -/** - * Wraps provided callback function - * allowing to execute snitch function before - * real callback - * - * @this ReadableAsyncKit# - * @param {function} callback - function to wrap - * @returns {function} - wrapped function - */ -function wrapCallback(callback) -{ - var stream = this; - - var wrapped = function(error, result) - { - return finisher.call(stream, error, result, callback); - }; - - return wrapped; -} - -/** - * Wraps provided iterator callback function - * makes sure snitch only called once, - * but passes secondary calls to the original callback - * - * @this ReadableAsyncKit# - * @param {function} callback - callback to wrap - * @param {number|string} key - iteration key - * @returns {function} wrapped callback - */ -function wrapIteratorCallback(callback, key) -{ - var stream = this; - - return function(error, output) - { - // don't repeat yourself - if (!(key in stream.jobs)) - { - callback(error, output); - return; - } - - // clean up jobs - delete stream.jobs[key]; - - return streamer.call(stream, error, {key: key, value: output}, callback); - }; -} - -/** - * Stream wrapper for iterator callback - * - * @this ReadableAsyncKit# - * @param {mixed} error - error response - * @param {mixed} output - iterator output - * @param {function} callback - callback that expects iterator results - */ -function streamer(error, output, callback) -{ - if (error && !this.error) - { - this.error = error; - this.pause(); - this.emit('error', error); - // send back value only, as expected - callback(error, output && output.value); - return; - } - - // stream stuff - this.push(output); - - // back to original track - // send back value only, as expected - callback(error, output && output.value); -} - -/** - * Stream wrapper for finishing callback - * - * @this ReadableAsyncKit# - * @param {mixed} error - error response - * @param {mixed} output - iterator output - * @param {function} callback - callback that expects final results - */ -function finisher(error, output, callback) -{ - // signal end of the stream - // only for successfully finished streams - if (!error) - { - this.push(null); - } - - // back to original track - callback(error, output); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/terminator.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/terminator.js deleted file mode 100644 index d6eb99219..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/lib/terminator.js +++ /dev/null @@ -1,29 +0,0 @@ -var abort = require('./abort.js') - , async = require('./async.js') - ; - -// API -module.exports = terminator; - -/** - * Terminates jobs in the attached state context - * - * @this AsyncKitState# - * @param {function} callback - final callback to invoke after termination - */ -function terminator(callback) -{ - if (!Object.keys(this.jobs).length) - { - return; - } - - // fast forward iteration index - this.index = this.size; - - // abort jobs - abort(this); - - // send back results we have so far - async(callback)(null, this.results); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/package.json b/fundamentals/bug-challenge-es6/node_modules/asynckit/package.json deleted file mode 100644 index 4e0aef56b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/package.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "_args": [ - [ - "asynckit@^0.4.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/form-data" - ] - ], - "_from": "asynckit@>=0.4.0 <0.5.0", - "_id": "asynckit@0.4.0", - "_inCache": true, - "_installable": true, - "_location": "/asynckit", - "_nodeVersion": "0.12.11", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/asynckit-0.4.0.tgz_1465928940169_0.8008207362145185" - }, - "_npmUser": { - "email": "iam@alexindigo.com", - "name": "alexindigo" - }, - "_npmVersion": "2.15.6", - "_phantomChildren": {}, - "_requested": { - "name": "asynckit", - "raw": "asynckit@^0.4.0", - "rawSpec": "^0.4.0", - "scope": null, - "spec": ">=0.4.0 <0.5.0", - "type": "range" - }, - "_requiredBy": [ - "/form-data" - ], - "_resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "_shasum": "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79", - "_shrinkwrap": null, - "_spec": "asynckit@^0.4.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/form-data", - "author": { - "email": "iam@alexindigo.com", - "name": "Alex Indigo" - }, - "bugs": { - "url": "https://github.com/alexindigo/asynckit/issues" - }, - "dependencies": {}, - "description": "Minimal async jobs utility library, with streams support", - "devDependencies": { - "browserify": "^13.0.0", - "browserify-istanbul": "^2.0.0", - "coveralls": "^2.11.9", - "eslint": "^2.9.0", - "istanbul": "^0.4.3", - "obake": "^0.1.2", - "phantomjs-prebuilt": "^2.1.7", - "pre-commit": "^1.1.3", - "reamde": "^1.1.0", - "rimraf": "^2.5.2", - "size-table": "^0.2.0", - "tap-spec": "^4.1.1", - "tape": "^4.5.1" - }, - "directories": {}, - "dist": { - "shasum": "c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79", - "tarball": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - }, - "gitHead": "583a75ed4fe41761b66416bb6e703ebb1f8963bf", - "homepage": "https://github.com/alexindigo/asynckit#readme", - "keywords": [ - "async", - "jobs", - "parallel", - "serial", - "iterator", - "array", - "object", - "stream", - "destroy", - "terminate", - "abort" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "iam@alexindigo.com", - "name": "alexindigo" - } - ], - "name": "asynckit", - "optionalDependencies": {}, - "pre-commit": [ - "clean", - "lint", - "test", - "browser", - "report", - "size" - ], - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/alexindigo/asynckit.git" - }, - "scripts": { - "browser": "browserify -t browserify-istanbul test/lib/browserify_adjustment.js test/test-*.js | obake --coverage | tap-spec", - "clean": "rimraf coverage", - "debug": "tape test/test-*.js", - "lint": "eslint *.js lib/*.js test/*.js", - "report": "istanbul report", - "size": "browserify index.js | size-table asynckit", - "test": "istanbul cover --reporter=json tape -- 'test/test-*.js' | tap-spec", - "win-test": "tape test/test-*.js" - }, - "version": "0.4.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/parallel.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/parallel.js deleted file mode 100644 index 3c50344d8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/parallel.js +++ /dev/null @@ -1,43 +0,0 @@ -var iterate = require('./lib/iterate.js') - , initState = require('./lib/state.js') - , terminator = require('./lib/terminator.js') - ; - -// Public API -module.exports = parallel; - -/** - * Runs iterator over provided array elements in parallel - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {function} callback - invoked when all elements processed - * @returns {function} - jobs terminator - */ -function parallel(list, iterator, callback) -{ - var state = initState(list); - - while (state.index < (state['keyedList'] || list).length) - { - iterate(list, iterator, state, function(error, result) - { - if (error) - { - callback(error, result); - return; - } - - // looks like it's the last one - if (Object.keys(state.jobs).length === 0) - { - callback(null, state.results); - return; - } - }); - - state.index++; - } - - return terminator.bind(state, callback); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/serial.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/serial.js deleted file mode 100644 index 6cd949a67..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/serial.js +++ /dev/null @@ -1,17 +0,0 @@ -var serialOrdered = require('./serialOrdered.js'); - -// Public API -module.exports = serial; - -/** - * Runs iterator over provided array elements in series - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {function} callback - invoked when all elements processed - * @returns {function} - jobs terminator - */ -function serial(list, iterator, callback) -{ - return serialOrdered(list, iterator, null, callback); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/serialOrdered.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/serialOrdered.js deleted file mode 100644 index 607eafea5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/serialOrdered.js +++ /dev/null @@ -1,75 +0,0 @@ -var iterate = require('./lib/iterate.js') - , initState = require('./lib/state.js') - , terminator = require('./lib/terminator.js') - ; - -// Public API -module.exports = serialOrdered; -// sorting helpers -module.exports.ascending = ascending; -module.exports.descending = descending; - -/** - * Runs iterator over provided sorted array elements in series - * - * @param {array|object} list - array or object (named list) to iterate over - * @param {function} iterator - iterator to run - * @param {function} sortMethod - custom sort function - * @param {function} callback - invoked when all elements processed - * @returns {function} - jobs terminator - */ -function serialOrdered(list, iterator, sortMethod, callback) -{ - var state = initState(list, sortMethod); - - iterate(list, iterator, state, function iteratorHandler(error, result) - { - if (error) - { - callback(error, result); - return; - } - - state.index++; - - // are we there yet? - if (state.index < (state['keyedList'] || list).length) - { - iterate(list, iterator, state, iteratorHandler); - return; - } - - // done here - callback(null, state.results); - }); - - return terminator.bind(state, callback); -} - -/* - * -- Sort methods - */ - -/** - * sort helper to sort array elements in ascending order - * - * @param {mixed} a - an item to compare - * @param {mixed} b - an item to compare - * @returns {number} - comparison result - */ -function ascending(a, b) -{ - return a < b ? -1 : a > b ? 1 : 0; -} - -/** - * sort helper to sort array elements in descending order - * - * @param {mixed} a - an item to compare - * @param {mixed} b - an item to compare - * @returns {number} - comparison result - */ -function descending(a, b) -{ - return -1 * ascending(a, b); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/asynckit/stream.js b/fundamentals/bug-challenge-es6/node_modules/asynckit/stream.js deleted file mode 100644 index d43465f90..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/asynckit/stream.js +++ /dev/null @@ -1,21 +0,0 @@ -var inherits = require('util').inherits - , Readable = require('stream').Readable - , ReadableAsyncKit = require('./lib/readable_asynckit.js') - , ReadableParallel = require('./lib/readable_parallel.js') - , ReadableSerial = require('./lib/readable_serial.js') - , ReadableSerialOrdered = require('./lib/readable_serial_ordered.js') - ; - -// API -module.exports = -{ - parallel : ReadableParallel, - serial : ReadableSerial, - serialOrdered : ReadableSerialOrdered, -}; - -inherits(ReadableAsyncKit, Readable); - -inherits(ReadableParallel, ReadableAsyncKit); -inherits(ReadableSerial, ReadableAsyncKit); -inherits(ReadableSerialOrdered, ReadableAsyncKit); diff --git a/fundamentals/bug-challenge-es6/node_modules/aws-sign2/LICENSE b/fundamentals/bug-challenge-es6/node_modules/aws-sign2/LICENSE deleted file mode 100644 index a4a9aee0c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/aws-sign2/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/aws-sign2/README.md b/fundamentals/bug-challenge-es6/node_modules/aws-sign2/README.md deleted file mode 100644 index 763564e0a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/aws-sign2/README.md +++ /dev/null @@ -1,4 +0,0 @@ -aws-sign -======== - -AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module. diff --git a/fundamentals/bug-challenge-es6/node_modules/aws-sign2/index.js b/fundamentals/bug-challenge-es6/node_modules/aws-sign2/index.js deleted file mode 100644 index ac7209308..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/aws-sign2/index.js +++ /dev/null @@ -1,212 +0,0 @@ - -/*! - * Copyright 2010 LearnBoost - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Module dependencies. - */ - -var crypto = require('crypto') - , parse = require('url').parse - ; - -/** - * Valid keys. - */ - -var keys = - [ 'acl' - , 'location' - , 'logging' - , 'notification' - , 'partNumber' - , 'policy' - , 'requestPayment' - , 'torrent' - , 'uploadId' - , 'uploads' - , 'versionId' - , 'versioning' - , 'versions' - , 'website' - ] - -/** - * Return an "Authorization" header value with the given `options` - * in the form of "AWS :" - * - * @param {Object} options - * @return {String} - * @api private - */ - -function authorization (options) { - return 'AWS ' + options.key + ':' + sign(options) -} - -module.exports = authorization -module.exports.authorization = authorization - -/** - * Simple HMAC-SHA1 Wrapper - * - * @param {Object} options - * @return {String} - * @api private - */ - -function hmacSha1 (options) { - return crypto.createHmac('sha1', options.secret).update(options.message).digest('base64') -} - -module.exports.hmacSha1 = hmacSha1 - -/** - * Create a base64 sha1 HMAC for `options`. - * - * @param {Object} options - * @return {String} - * @api private - */ - -function sign (options) { - options.message = stringToSign(options) - return hmacSha1(options) -} -module.exports.sign = sign - -/** - * Create a base64 sha1 HMAC for `options`. - * - * Specifically to be used with S3 presigned URLs - * - * @param {Object} options - * @return {String} - * @api private - */ - -function signQuery (options) { - options.message = queryStringToSign(options) - return hmacSha1(options) -} -module.exports.signQuery= signQuery - -/** - * Return a string for sign() with the given `options`. - * - * Spec: - * - * \n - * \n - * \n - * \n - * [headers\n] - * - * - * @param {Object} options - * @return {String} - * @api private - */ - -function stringToSign (options) { - var headers = options.amazonHeaders || '' - if (headers) headers += '\n' - var r = - [ options.verb - , options.md5 - , options.contentType - , options.date ? options.date.toUTCString() : '' - , headers + options.resource - ] - return r.join('\n') -} -module.exports.queryStringToSign = stringToSign - -/** - * Return a string for sign() with the given `options`, but is meant exclusively - * for S3 presigned URLs - * - * Spec: - * - * \n - * - * - * @param {Object} options - * @return {String} - * @api private - */ - -function queryStringToSign (options){ - return 'GET\n\n\n' + options.date + '\n' + options.resource -} -module.exports.queryStringToSign = queryStringToSign - -/** - * Perform the following: - * - * - ignore non-amazon headers - * - lowercase fields - * - sort lexicographically - * - trim whitespace between ":" - * - join with newline - * - * @param {Object} headers - * @return {String} - * @api private - */ - -function canonicalizeHeaders (headers) { - var buf = [] - , fields = Object.keys(headers) - ; - for (var i = 0, len = fields.length; i < len; ++i) { - var field = fields[i] - , val = headers[field] - , field = field.toLowerCase() - ; - if (0 !== field.indexOf('x-amz')) continue - buf.push(field + ':' + val) - } - return buf.sort().join('\n') -} -module.exports.canonicalizeHeaders = canonicalizeHeaders - -/** - * Perform the following: - * - * - ignore non sub-resources - * - sort lexicographically - * - * @param {String} resource - * @return {String} - * @api private - */ - -function canonicalizeResource (resource) { - var url = parse(resource, true) - , path = url.pathname - , buf = [] - ; - - Object.keys(url.query).forEach(function(key){ - if (!~keys.indexOf(key)) return - var val = '' == url.query[key] ? '' : '=' + encodeURIComponent(url.query[key]) - buf.push(key + val) - }) - - return path + (buf.length ? '?' + buf.sort().join('&') : '') -} -module.exports.canonicalizeResource = canonicalizeResource diff --git a/fundamentals/bug-challenge-es6/node_modules/aws-sign2/package.json b/fundamentals/bug-challenge-es6/node_modules/aws-sign2/package.json deleted file mode 100644 index 634ff450d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/aws-sign2/package.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "_args": [ - [ - "aws-sign2@~0.6.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request" - ] - ], - "_from": "aws-sign2@>=0.6.0 <0.7.0", - "_id": "aws-sign2@0.6.0", - "_inCache": true, - "_installable": true, - "_location": "/aws-sign2", - "_nodeVersion": "4.1.2", - "_npmUser": { - "email": "mikeal.rogers@gmail.com", - "name": "mikeal" - }, - "_npmVersion": "2.14.4", - "_phantomChildren": {}, - "_requested": { - "name": "aws-sign2", - "raw": "aws-sign2@~0.6.0", - "rawSpec": "~0.6.0", - "scope": null, - "spec": ">=0.6.0 <0.7.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "_shasum": "14342dd38dbcc94d0e5b87d763cd63612c0e794f", - "_shrinkwrap": null, - "_spec": "aws-sign2@~0.6.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request", - "author": { - "email": "mikeal.rogers@gmail.com", - "name": "Mikeal Rogers", - "url": "http://www.futurealoof.com" - }, - "bugs": { - "url": "https://github.com/mikeal/aws-sign/issues" - }, - "dependencies": {}, - "description": "AWS signing. Originally pulled from LearnBoost/knox, maintained as vendor in request, now a standalone module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "14342dd38dbcc94d0e5b87d763cd63612c0e794f", - "tarball": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz" - }, - "engines": { - "node": "*" - }, - "gitHead": "8554bdb41268fa295eb1ee300f4adaa9f7f07fec", - "homepage": "https://github.com/mikeal/aws-sign#readme", - "license": "Apache-2.0", - "main": "index.js", - "maintainers": [ - { - "email": "mikeal.rogers@gmail.com", - "name": "mikeal" - } - ], - "name": "aws-sign2", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "url": "git+https://github.com/mikeal/aws-sign.git" - }, - "scripts": {}, - "version": "0.6.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/aws4/.npmignore b/fundamentals/bug-challenge-es6/node_modules/aws4/.npmignore deleted file mode 100644 index 6c6ade6ff..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/aws4/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -test -examples -example.js -browser diff --git a/fundamentals/bug-challenge-es6/node_modules/aws4/.tern-port b/fundamentals/bug-challenge-es6/node_modules/aws4/.tern-port deleted file mode 100644 index 7fd1b5223..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/aws4/.tern-port +++ /dev/null @@ -1 +0,0 @@ -62638 \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/aws4/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/aws4/.travis.yml deleted file mode 100644 index 61d063404..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/aws4/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.12" - - "4.2" diff --git a/fundamentals/bug-challenge-es6/node_modules/aws4/LICENSE b/fundamentals/bug-challenge-es6/node_modules/aws4/LICENSE deleted file mode 100644 index 4f321e599..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/aws4/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright 2013 Michael Hart (michael.hart.au@gmail.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/aws4/README.md b/fundamentals/bug-challenge-es6/node_modules/aws4/README.md deleted file mode 100644 index 6b002d02f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/aws4/README.md +++ /dev/null @@ -1,523 +0,0 @@ -aws4 ----- - -[![Build Status](https://secure.travis-ci.org/mhart/aws4.png?branch=master)](http://travis-ci.org/mhart/aws4) - -A small utility to sign vanilla node.js http(s) request options using Amazon's -[AWS Signature Version 4](http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html). - -Can also be used [in the browser](./browser). - -This signature is supported by nearly all Amazon services, including -[S3](http://docs.aws.amazon.com/AmazonS3/latest/API/), -[EC2](http://docs.aws.amazon.com/AWSEC2/latest/APIReference/), -[DynamoDB](http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/API.html), -[Kinesis](http://docs.aws.amazon.com/kinesis/latest/APIReference/), -[Lambda](http://docs.aws.amazon.com/lambda/latest/dg/API_Reference.html), -[SQS](http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/), -[SNS](http://docs.aws.amazon.com/sns/latest/api/), -[IAM](http://docs.aws.amazon.com/IAM/latest/APIReference/), -[STS](http://docs.aws.amazon.com/STS/latest/APIReference/), -[RDS](http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/), -[CloudWatch](http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/), -[CloudWatch Logs](http://docs.aws.amazon.com/AmazonCloudWatchLogs/latest/APIReference/), -[CodeDeploy](http://docs.aws.amazon.com/codedeploy/latest/APIReference/), -[CloudFront](http://docs.aws.amazon.com/AmazonCloudFront/latest/APIReference/), -[CloudTrail](http://docs.aws.amazon.com/awscloudtrail/latest/APIReference/), -[ElastiCache](http://docs.aws.amazon.com/AmazonElastiCache/latest/APIReference/), -[EMR](http://docs.aws.amazon.com/ElasticMapReduce/latest/API/), -[Glacier](http://docs.aws.amazon.com/amazonglacier/latest/dev/amazon-glacier-api.html), -[CloudSearch](http://docs.aws.amazon.com/cloudsearch/latest/developerguide/APIReq.html), -[Elastic Load Balancing](http://docs.aws.amazon.com/ElasticLoadBalancing/latest/APIReference/), -[Elastic Transcoder](http://docs.aws.amazon.com/elastictranscoder/latest/developerguide/api-reference.html), -[CloudFormation](http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/), -[Elastic Beanstalk](http://docs.aws.amazon.com/elasticbeanstalk/latest/api/), -[Storage Gateway](http://docs.aws.amazon.com/storagegateway/latest/userguide/AWSStorageGatewayAPI.html), -[Data Pipeline](http://docs.aws.amazon.com/datapipeline/latest/APIReference/), -[Direct Connect](http://docs.aws.amazon.com/directconnect/latest/APIReference/), -[Redshift](http://docs.aws.amazon.com/redshift/latest/APIReference/), -[OpsWorks](http://docs.aws.amazon.com/opsworks/latest/APIReference/), -[SES](http://docs.aws.amazon.com/ses/latest/APIReference/), -[SWF](http://docs.aws.amazon.com/amazonswf/latest/apireference/), -[AutoScaling](http://docs.aws.amazon.com/AutoScaling/latest/APIReference/), -[Mobile Analytics](http://docs.aws.amazon.com/mobileanalytics/latest/ug/server-reference.html), -[Cognito Identity](http://docs.aws.amazon.com/cognitoidentity/latest/APIReference/), -[Cognito Sync](http://docs.aws.amazon.com/cognitosync/latest/APIReference/), -[Container Service](http://docs.aws.amazon.com/AmazonECS/latest/APIReference/), -[AppStream](http://docs.aws.amazon.com/appstream/latest/developerguide/appstream-api-rest.html), -[Key Management Service](http://docs.aws.amazon.com/kms/latest/APIReference/), -[Config](http://docs.aws.amazon.com/config/latest/APIReference/), -[CloudHSM](http://docs.aws.amazon.com/cloudhsm/latest/dg/api-ref.html), -[Route53](http://docs.aws.amazon.com/Route53/latest/APIReference/requests-rest.html) and -[Route53 Domains](http://docs.aws.amazon.com/Route53/latest/APIReference/requests-rpc.html). - -Indeed, the only AWS services that *don't* support v4 as of 2014-12-30 are -[Import/Export](http://docs.aws.amazon.com/AWSImportExport/latest/DG/api-reference.html) and -[SimpleDB](http://docs.aws.amazon.com/AmazonSimpleDB/latest/DeveloperGuide/SDB_API.html) -(they only support [AWS Signature Version 2](https://github.com/mhart/aws2)). - -It also provides defaults for a number of core AWS headers and -request parameters, making it very easy to query AWS services, or -build out a fully-featured AWS library. - -Example -------- - -```javascript -var http = require('http'), - https = require('https'), - aws4 = require('aws4') - -// given an options object you could pass to http.request -var opts = {host: 'sqs.us-east-1.amazonaws.com', path: '/?Action=ListQueues'} - -// alternatively (as aws4 can infer the host): -opts = {service: 'sqs', region: 'us-east-1', path: '/?Action=ListQueues'} - -// alternatively (as us-east-1 is default): -opts = {service: 'sqs', path: '/?Action=ListQueues'} - -aws4.sign(opts) // assumes AWS credentials are available in process.env - -console.log(opts) -/* -{ - host: 'sqs.us-east-1.amazonaws.com', - path: '/?Action=ListQueues', - headers: { - Host: 'sqs.us-east-1.amazonaws.com', - 'X-Amz-Date': '20121226T061030Z', - Authorization: 'AWS4-HMAC-SHA256 Credential=ABCDEF/20121226/us-east-1/sqs/aws4_request, ...' - } -} -*/ - -// we can now use this to query AWS using the standard node.js http API -http.request(opts, function(res) { res.pipe(process.stdout) }).end() -/* - - -... -*/ -``` - -More options ------------- - -```javascript -// you can also pass AWS credentials in explicitly (otherwise taken from process.env) -aws4.sign(opts, {accessKeyId: '', secretAccessKey: ''}) - -// can also add the signature to query strings -aws4.sign({service: 's3', path: '/my-bucket?X-Amz-Expires=12345', signQuery: true}) - -// create a utility function to pipe to stdout (with https this time) -function request(o) { https.request(o, function(res) { res.pipe(process.stdout) }).end(o.body || '') } - -// aws4 can infer the HTTP method if a body is passed in -// method will be POST and Content-Type: 'application/x-www-form-urlencoded; charset=utf-8' -request(aws4.sign({service: 'iam', body: 'Action=ListGroups&Version=2010-05-08'})) -/* - -... -*/ - -// can specify any custom option or header as per usual -request(aws4.sign({ - service: 'dynamodb', - region: 'ap-southeast-2', - method: 'POST', - path: '/', - headers: { - 'Content-Type': 'application/x-amz-json-1.0', - 'X-Amz-Target': 'DynamoDB_20120810.ListTables' - }, - body: '{}' -})) -/* -{"TableNames":[]} -... -*/ - -// works with all other services that support Signature Version 4 - -request(aws4.sign({service: 's3', path: '/', signQuery: true})) -/* - -... -*/ - -request(aws4.sign({service: 'ec2', path: '/?Action=DescribeRegions&Version=2014-06-15'})) -/* - -... -*/ - -request(aws4.sign({service: 'sns', path: '/?Action=ListTopics&Version=2010-03-31'})) -/* - -... -*/ - -request(aws4.sign({service: 'sts', path: '/?Action=GetSessionToken&Version=2011-06-15'})) -/* - -... -*/ - -request(aws4.sign({service: 'cloudsearch', path: '/?Action=ListDomainNames&Version=2013-01-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'ses', path: '/?Action=ListIdentities&Version=2010-12-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'autoscaling', path: '/?Action=DescribeAutoScalingInstances&Version=2011-01-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'elasticloadbalancing', path: '/?Action=DescribeLoadBalancers&Version=2012-06-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'cloudformation', path: '/?Action=ListStacks&Version=2010-05-15'})) -/* - -... -*/ - -request(aws4.sign({service: 'elasticbeanstalk', path: '/?Action=ListAvailableSolutionStacks&Version=2010-12-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'rds', path: '/?Action=DescribeDBInstances&Version=2012-09-17'})) -/* - -... -*/ - -request(aws4.sign({service: 'monitoring', path: '/?Action=ListMetrics&Version=2010-08-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'redshift', path: '/?Action=DescribeClusters&Version=2012-12-01'})) -/* - -... -*/ - -request(aws4.sign({service: 'cloudfront', path: '/2014-05-31/distribution'})) -/* - -... -*/ - -request(aws4.sign({service: 'elasticache', path: '/?Action=DescribeCacheClusters&Version=2014-07-15'})) -/* - -... -*/ - -request(aws4.sign({service: 'elasticmapreduce', path: '/?Action=DescribeJobFlows&Version=2009-03-31'})) -/* - -... -*/ - -request(aws4.sign({service: 'route53', path: '/2013-04-01/hostedzone'})) -/* - -... -*/ - -request(aws4.sign({service: 'appstream', path: '/applications'})) -/* -{"_links":{"curie":[{"href":"http://docs.aws.amazon.com/appstream/latest/... -... -*/ - -request(aws4.sign({service: 'cognito-sync', path: '/identitypools'})) -/* -{"Count":0,"IdentityPoolUsages":[],"MaxResults":16,"NextToken":null} -... -*/ - -request(aws4.sign({service: 'elastictranscoder', path: '/2012-09-25/pipelines'})) -/* -{"NextPageToken":null,"Pipelines":[]} -... -*/ - -request(aws4.sign({service: 'lambda', path: '/2014-11-13/functions/'})) -/* -{"Functions":[],"NextMarker":null} -... -*/ - -request(aws4.sign({service: 'ecs', path: '/?Action=ListClusters&Version=2014-11-13'})) -/* - -... -*/ - -request(aws4.sign({service: 'glacier', path: '/-/vaults', headers: {'X-Amz-Glacier-Version': '2012-06-01'}})) -/* -{"Marker":null,"VaultList":[]} -... -*/ - -request(aws4.sign({service: 'storagegateway', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'StorageGateway_20120630.ListGateways' -}})) -/* -{"Gateways":[]} -... -*/ - -request(aws4.sign({service: 'datapipeline', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'DataPipeline.ListPipelines' -}})) -/* -{"hasMoreResults":false,"pipelineIdList":[]} -... -*/ - -request(aws4.sign({service: 'opsworks', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'OpsWorks_20130218.DescribeStacks' -}})) -/* -{"Stacks":[]} -... -*/ - -request(aws4.sign({service: 'route53domains', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'Route53Domains_v20140515.ListDomains' -}})) -/* -{"Domains":[]} -... -*/ - -request(aws4.sign({service: 'kinesis', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'Kinesis_20131202.ListStreams' -}})) -/* -{"HasMoreStreams":false,"StreamNames":[]} -... -*/ - -request(aws4.sign({service: 'cloudtrail', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'CloudTrail_20131101.DescribeTrails' -}})) -/* -{"trailList":[]} -... -*/ - -request(aws4.sign({service: 'logs', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'Logs_20140328.DescribeLogGroups' -}})) -/* -{"logGroups":[]} -... -*/ - -request(aws4.sign({service: 'codedeploy', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'CodeDeploy_20141006.ListApplications' -}})) -/* -{"applications":[]} -... -*/ - -request(aws4.sign({service: 'directconnect', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'OvertureService.DescribeConnections' -}})) -/* -{"connections":[]} -... -*/ - -request(aws4.sign({service: 'kms', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'TrentService.ListKeys' -}})) -/* -{"Keys":[],"Truncated":false} -... -*/ - -request(aws4.sign({service: 'config', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'StarlingDoveService.DescribeDeliveryChannels' -}})) -/* -{"DeliveryChannels":[]} -... -*/ - -request(aws4.sign({service: 'cloudhsm', body: '{}', headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'CloudHsmFrontendService.ListAvailableZones' -}})) -/* -{"AZList":["us-east-1a","us-east-1b","us-east-1c"]} -... -*/ - -request(aws4.sign({ - service: 'swf', - body: '{"registrationStatus":"REGISTERED"}', - headers: { - 'Content-Type': 'application/x-amz-json-1.0', - 'X-Amz-Target': 'SimpleWorkflowService.ListDomains' - } -})) -/* -{"domainInfos":[]} -... -*/ - -request(aws4.sign({ - service: 'cognito-identity', - body: '{"MaxResults": 1}', - headers: { - 'Content-Type': 'application/x-amz-json-1.1', - 'X-Amz-Target': 'AWSCognitoIdentityService.ListIdentityPools' - } -})) -/* -{"IdentityPools":[]} -... -*/ - -request(aws4.sign({ - service: 'mobileanalytics', - path: '/2014-06-05/events', - body: JSON.stringify({events:[{ - eventType: 'a', - timestamp: new Date().toISOString(), - session: {}, - }]}), - headers: { - 'Content-Type': 'application/json', - 'X-Amz-Client-Context': JSON.stringify({ - client: {client_id: 'a', app_title: 'a'}, - custom: {}, - env: {platform: 'a'}, - services: {}, - }), - } -})) -/* -(HTTP 202, empty response) -*/ - -// Generate CodeCommit Git access password -var signer = new aws4.RequestSigner({ - service: 'codecommit', - host: 'git-codecommit.us-east-1.amazonaws.com', - method: 'GIT', - path: '/v1/repos/MyAwesomeRepo', -}) -var password = signer.getDateTime() + 'Z' + signer.signature() -``` - -API ---- - -### aws4.sign(requestOptions, [credentials]) - -This calculates and populates the `Authorization` header of -`requestOptions`, and any other necessary AWS headers and/or request -options. Returns `requestOptions` as a convenience for chaining. - -`requestOptions` is an object holding the same options that the node.js -[http.request](http://nodejs.org/docs/latest/api/http.html#http_http_request_options_callback) -function takes. - -The following properties of `requestOptions` are used in the signing or -populated if they don't already exist: - -- `hostname` or `host` (will be determined from `service` and `region` if not given) -- `method` (will use `'GET'` if not given or `'POST'` if there is a `body`) -- `path` (will use `'/'` if not given) -- `body` (will use `''` if not given) -- `service` (will be calculated from `hostname` or `host` if not given) -- `region` (will be calculated from `hostname` or `host` or use `'us-east-1'` if not given) -- `headers['Host']` (will use `hostname` or `host` or be calculated if not given) -- `headers['Content-Type']` (will use `'application/x-www-form-urlencoded; charset=utf-8'` - if not given and there is a `body`) -- `headers['Date']` (used to calculate the signature date if given, otherwise `new Date` is used) - -Your AWS credentials (which can be found in your -[AWS console](https://portal.aws.amazon.com/gp/aws/securityCredentials)) -can be specified in one of two ways: - -- As the second argument, like this: - -```javascript -aws4.sign(requestOptions, { - secretAccessKey: "", - accessKeyId: "", - sessionToken: "" -}) -``` - -- From `process.env`, such as this: - -``` -export AWS_SECRET_ACCESS_KEY="" -export AWS_ACCESS_KEY_ID="" -export AWS_SESSION_TOKEN="" -``` - -(will also use `AWS_ACCESS_KEY` and `AWS_SECRET_KEY` if available) - -The `sessionToken` property and `AWS_SESSION_TOKEN` environment variable are optional for signing -with [IAM STS temporary credentials](http://docs.aws.amazon.com/STS/latest/UsingSTS/using-temp-creds.html). - -Installation ------------- - -With [npm](http://npmjs.org/) do: - -``` -npm install aws4 -``` - -Can also be used [in the browser](./browser). - -Thanks ------- - -Thanks to [@jed](https://github.com/jed) for his -[dynamo-client](https://github.com/jed/dynamo-client) lib where I first -committed and subsequently extracted this code. - -Also thanks to the -[official node.js AWS SDK](https://github.com/aws/aws-sdk-js) for giving -me a start on implementing the v4 signature. - diff --git a/fundamentals/bug-challenge-es6/node_modules/aws4/aws4.js b/fundamentals/bug-challenge-es6/node_modules/aws4/aws4.js deleted file mode 100644 index a54318065..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/aws4/aws4.js +++ /dev/null @@ -1,323 +0,0 @@ -var aws4 = exports, - url = require('url'), - querystring = require('querystring'), - crypto = require('crypto'), - lru = require('./lru'), - credentialsCache = lru(1000) - -// http://docs.amazonwebservices.com/general/latest/gr/signature-version-4.html - -function hmac(key, string, encoding) { - return crypto.createHmac('sha256', key).update(string, 'utf8').digest(encoding) -} - -function hash(string, encoding) { - return crypto.createHash('sha256').update(string, 'utf8').digest(encoding) -} - -// This function assumes the string has already been percent encoded -function encodeRfc3986(urlEncodedString) { - return urlEncodedString.replace(/[!'()*]/g, function(c) { - return '%' + c.charCodeAt(0).toString(16).toUpperCase() - }) -} - -// request: { path | body, [host], [method], [headers], [service], [region] } -// credentials: { accessKeyId, secretAccessKey, [sessionToken] } -function RequestSigner(request, credentials) { - - if (typeof request === 'string') request = url.parse(request) - - var headers = request.headers = (request.headers || {}), - hostParts = this.matchHost(request.hostname || request.host || headers.Host || headers.host) - - this.request = request - this.credentials = credentials || this.defaultCredentials() - - this.service = request.service || hostParts[0] || '' - this.region = request.region || hostParts[1] || 'us-east-1' - - // SES uses a different domain from the service name - if (this.service === 'email') this.service = 'ses' - - if (!request.method && request.body) - request.method = 'POST' - - if (!headers.Host && !headers.host) { - headers.Host = request.hostname || request.host || this.createHost() - - // If a port is specified explicitly, use it as is - if (request.port) - headers.Host += ':' + request.port - } - if (!request.hostname && !request.host) - request.hostname = headers.Host || headers.host - - this.isCodeCommitGit = this.service === 'codecommit' && request.method === 'GIT' -} - -RequestSigner.prototype.matchHost = function(host) { - var match = (host || '').match(/([^\.]+)\.(?:([^\.]*)\.)?amazonaws\.com$/) - var hostParts = (match || []).slice(1, 3) - - // ES's hostParts are sometimes the other way round, if the value that is expected - // to be region equals ‘es’ switch them back - // e.g. search-cluster-name-aaaa00aaaa0aaa0aaaaaaa0aaa.us-east-1.es.amazonaws.com - if (hostParts[1] === 'es') - hostParts = hostParts.reverse() - - return hostParts -} - -// http://docs.aws.amazon.com/general/latest/gr/rande.html -RequestSigner.prototype.isSingleRegion = function() { - // Special case for S3 and SimpleDB in us-east-1 - if (['s3', 'sdb'].indexOf(this.service) >= 0 && this.region === 'us-east-1') return true - - return ['cloudfront', 'ls', 'route53', 'iam', 'importexport', 'sts'] - .indexOf(this.service) >= 0 -} - -RequestSigner.prototype.createHost = function() { - var region = this.isSingleRegion() ? '' : - (this.service === 's3' && this.region !== 'us-east-1' ? '-' : '.') + this.region, - service = this.service === 'ses' ? 'email' : this.service - return service + region + '.amazonaws.com' -} - -RequestSigner.prototype.prepareRequest = function() { - this.parsePath() - - var request = this.request, headers = request.headers, query - - if (request.signQuery) { - - this.parsedPath.query = query = this.parsedPath.query || {} - - if (this.credentials.sessionToken) - query['X-Amz-Security-Token'] = this.credentials.sessionToken - - if (this.service === 's3' && !query['X-Amz-Expires']) - query['X-Amz-Expires'] = 86400 - - if (query['X-Amz-Date']) - this.datetime = query['X-Amz-Date'] - else - query['X-Amz-Date'] = this.getDateTime() - - query['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256' - query['X-Amz-Credential'] = this.credentials.accessKeyId + '/' + this.credentialString() - query['X-Amz-SignedHeaders'] = this.signedHeaders() - - } else { - - if (!request.doNotModifyHeaders && !this.isCodeCommitGit) { - if (request.body && !headers['Content-Type'] && !headers['content-type']) - headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8' - - if (request.body && !headers['Content-Length'] && !headers['content-length']) - headers['Content-Length'] = Buffer.byteLength(request.body) - - if (this.credentials.sessionToken) - headers['X-Amz-Security-Token'] = this.credentials.sessionToken - - if (this.service === 's3') - headers['X-Amz-Content-Sha256'] = hash(this.request.body || '', 'hex') - - if (headers['X-Amz-Date']) - this.datetime = headers['X-Amz-Date'] - else - headers['X-Amz-Date'] = this.getDateTime() - } - - delete headers.Authorization - delete headers.authorization - } -} - -RequestSigner.prototype.sign = function() { - if (!this.parsedPath) this.prepareRequest() - - if (this.request.signQuery) { - this.parsedPath.query['X-Amz-Signature'] = this.signature() - } else { - this.request.headers.Authorization = this.authHeader() - } - - this.request.path = this.formatPath() - - return this.request -} - -RequestSigner.prototype.getDateTime = function() { - if (!this.datetime) { - var headers = this.request.headers, - date = new Date(headers.Date || headers.date || new Date) - - this.datetime = date.toISOString().replace(/[:\-]|\.\d{3}/g, '') - - // Remove the trailing 'Z' on the timestamp string for CodeCommit git access - if (this.isCodeCommitGit) this.datetime = this.datetime.slice(0, -1) - } - return this.datetime -} - -RequestSigner.prototype.getDate = function() { - return this.getDateTime().substr(0, 8) -} - -RequestSigner.prototype.authHeader = function() { - return [ - 'AWS4-HMAC-SHA256 Credential=' + this.credentials.accessKeyId + '/' + this.credentialString(), - 'SignedHeaders=' + this.signedHeaders(), - 'Signature=' + this.signature(), - ].join(', ') -} - -RequestSigner.prototype.signature = function() { - var date = this.getDate(), - cacheKey = [this.credentials.secretAccessKey, date, this.region, this.service].join(), - kDate, kRegion, kService, kCredentials = credentialsCache.get(cacheKey) - if (!kCredentials) { - kDate = hmac('AWS4' + this.credentials.secretAccessKey, date) - kRegion = hmac(kDate, this.region) - kService = hmac(kRegion, this.service) - kCredentials = hmac(kService, 'aws4_request') - credentialsCache.set(cacheKey, kCredentials) - } - return hmac(kCredentials, this.stringToSign(), 'hex') -} - -RequestSigner.prototype.stringToSign = function() { - return [ - 'AWS4-HMAC-SHA256', - this.getDateTime(), - this.credentialString(), - hash(this.canonicalString(), 'hex'), - ].join('\n') -} - -RequestSigner.prototype.canonicalString = function() { - if (!this.parsedPath) this.prepareRequest() - - var pathStr = this.parsedPath.path, - query = this.parsedPath.query, - queryStr = '', - normalizePath = this.service !== 's3', - decodePath = this.service === 's3' || this.request.doNotEncodePath, - decodeSlashesInPath = this.service === 's3', - firstValOnly = this.service === 's3', - bodyHash = this.service === 's3' && this.request.signQuery ? 'UNSIGNED-PAYLOAD' : - (this.isCodeCommitGit ? '' : hash(this.request.body || '', 'hex')) - - if (query) { - queryStr = encodeRfc3986(querystring.stringify(Object.keys(query).sort().reduce(function(obj, key) { - if (!key) return obj - obj[key] = !Array.isArray(query[key]) ? query[key] : - (firstValOnly ? query[key][0] : query[key].slice().sort()) - return obj - }, {}))) - } - if (pathStr !== '/') { - if (normalizePath) pathStr = pathStr.replace(/\/{2,}/g, '/') - pathStr = pathStr.split('/').reduce(function(path, piece) { - if (normalizePath && piece === '..') { - path.pop() - } else if (!normalizePath || piece !== '.') { - if (decodePath) piece = querystring.unescape(piece) - path.push(encodeRfc3986(querystring.escape(piece))) - } - return path - }, []).join('/') - if (pathStr[0] !== '/') pathStr = '/' + pathStr - if (decodeSlashesInPath) pathStr = pathStr.replace(/%2F/g, '/') - } - - return [ - this.request.method || 'GET', - pathStr, - queryStr, - this.canonicalHeaders() + '\n', - this.signedHeaders(), - bodyHash, - ].join('\n') -} - -RequestSigner.prototype.canonicalHeaders = function() { - var headers = this.request.headers - function trimAll(header) { - return header.toString().trim().replace(/\s+/g, ' ') - } - return Object.keys(headers) - .sort(function(a, b) { return a.toLowerCase() < b.toLowerCase() ? -1 : 1 }) - .map(function(key) { return key.toLowerCase() + ':' + trimAll(headers[key]) }) - .join('\n') -} - -RequestSigner.prototype.signedHeaders = function() { - return Object.keys(this.request.headers) - .map(function(key) { return key.toLowerCase() }) - .sort() - .join(';') -} - -RequestSigner.prototype.credentialString = function() { - return [ - this.getDate(), - this.region, - this.service, - 'aws4_request', - ].join('/') -} - -RequestSigner.prototype.defaultCredentials = function() { - var env = process.env - return { - accessKeyId: env.AWS_ACCESS_KEY_ID || env.AWS_ACCESS_KEY, - secretAccessKey: env.AWS_SECRET_ACCESS_KEY || env.AWS_SECRET_KEY, - sessionToken: env.AWS_SESSION_TOKEN, - } -} - -RequestSigner.prototype.parsePath = function() { - var path = this.request.path || '/', - queryIx = path.indexOf('?'), - query = null - - if (queryIx >= 0) { - query = querystring.parse(path.slice(queryIx + 1)) - path = path.slice(0, queryIx) - } - - // S3 doesn't always encode characters > 127 correctly and - // all services don't encode characters > 255 correctly - // So if there are non-reserved chars (and it's not already all % encoded), just encode them all - if (/[^0-9A-Za-z!'()*\-._~%/]/.test(path)) { - path = path.split('/').map(function(piece) { - return querystring.escape(querystring.unescape(piece)) - }).join('/') - } - - this.parsedPath = { - path: path, - query: query, - } -} - -RequestSigner.prototype.formatPath = function() { - var path = this.parsedPath.path, - query = this.parsedPath.query - - if (!query) return path - - // Services don't support empty query string keys - if (query[''] != null) delete query[''] - - return path + '?' + encodeRfc3986(querystring.stringify(query)) -} - -aws4.RequestSigner = RequestSigner - -aws4.sign = function(request, credentials) { - return new RequestSigner(request, credentials).sign() -} diff --git a/fundamentals/bug-challenge-es6/node_modules/aws4/lru.js b/fundamentals/bug-challenge-es6/node_modules/aws4/lru.js deleted file mode 100644 index 333f66a44..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/aws4/lru.js +++ /dev/null @@ -1,96 +0,0 @@ -module.exports = function(size) { - return new LruCache(size) -} - -function LruCache(size) { - this.capacity = size | 0 - this.map = Object.create(null) - this.list = new DoublyLinkedList() -} - -LruCache.prototype.get = function(key) { - var node = this.map[key] - if (node == null) return undefined - this.used(node) - return node.val -} - -LruCache.prototype.set = function(key, val) { - var node = this.map[key] - if (node != null) { - node.val = val - } else { - if (!this.capacity) this.prune() - if (!this.capacity) return false - node = new DoublyLinkedNode(key, val) - this.map[key] = node - this.capacity-- - } - this.used(node) - return true -} - -LruCache.prototype.used = function(node) { - this.list.moveToFront(node) -} - -LruCache.prototype.prune = function() { - var node = this.list.pop() - if (node != null) { - delete this.map[node.key] - this.capacity++ - } -} - - -function DoublyLinkedList() { - this.firstNode = null - this.lastNode = null -} - -DoublyLinkedList.prototype.moveToFront = function(node) { - if (this.firstNode == node) return - - this.remove(node) - - if (this.firstNode == null) { - this.firstNode = node - this.lastNode = node - node.prev = null - node.next = null - } else { - node.prev = null - node.next = this.firstNode - node.next.prev = node - this.firstNode = node - } -} - -DoublyLinkedList.prototype.pop = function() { - var lastNode = this.lastNode - if (lastNode != null) { - this.remove(lastNode) - } - return lastNode -} - -DoublyLinkedList.prototype.remove = function(node) { - if (this.firstNode == node) { - this.firstNode = node.next - } else if (node.prev != null) { - node.prev.next = node.next - } - if (this.lastNode == node) { - this.lastNode = node.prev - } else if (node.next != null) { - node.next.prev = node.prev - } -} - - -function DoublyLinkedNode(key, val) { - this.key = key - this.val = val - this.prev = null - this.next = null -} diff --git a/fundamentals/bug-challenge-es6/node_modules/aws4/package.json b/fundamentals/bug-challenge-es6/node_modules/aws4/package.json deleted file mode 100644 index 3f705f2a1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/aws4/package.json +++ /dev/null @@ -1,132 +0,0 @@ -{ - "_args": [ - [ - "aws4@^1.2.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request" - ] - ], - "_from": "aws4@>=1.2.1 <2.0.0", - "_id": "aws4@1.5.0", - "_inCache": true, - "_installable": true, - "_location": "/aws4", - "_nodeVersion": "4.5.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/aws4-1.5.0.tgz_1476226259635_0.2796843808609992" - }, - "_npmUser": { - "email": "michael.hart.au@gmail.com", - "name": "hichaelmart" - }, - "_npmVersion": "2.15.11", - "_phantomChildren": {}, - "_requested": { - "name": "aws4", - "raw": "aws4@^1.2.1", - "rawSpec": "^1.2.1", - "scope": null, - "spec": ">=1.2.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz", - "_shasum": "0a29ffb79c31c9e712eeb087e8e7a64b4a56d755", - "_shrinkwrap": null, - "_spec": "aws4@^1.2.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request", - "author": { - "email": "michael.hart.au@gmail.com", - "name": "Michael Hart", - "url": "http://github.com/mhart" - }, - "bugs": { - "url": "https://github.com/mhart/aws4/issues" - }, - "dependencies": {}, - "description": "Signs and prepares requests using AWS Signature Version 4", - "devDependencies": { - "mocha": "^2.4.5", - "should": "^8.2.2" - }, - "directories": {}, - "dist": { - "shasum": "0a29ffb79c31c9e712eeb087e8e7a64b4a56d755", - "tarball": "https://registry.npmjs.org/aws4/-/aws4-1.5.0.tgz" - }, - "gitHead": "ba136334ee08884c6042c8578a22e376233eef34", - "homepage": "https://github.com/mhart/aws4#readme", - "keywords": [ - "amazon", - "aws", - "signature", - "s3", - "ec2", - "autoscaling", - "cloudformation", - "elasticloadbalancing", - "elb", - "elasticbeanstalk", - "cloudsearch", - "dynamodb", - "kinesis", - "lambda", - "glacier", - "sqs", - "sns", - "iam", - "sts", - "ses", - "swf", - "storagegateway", - "datapipeline", - "directconnect", - "redshift", - "opsworks", - "rds", - "monitoring", - "cloudtrail", - "cloudfront", - "codedeploy", - "elasticache", - "elasticmapreduce", - "elastictranscoder", - "emr", - "cloudwatch", - "mobileanalytics", - "cognitoidentity", - "cognitosync", - "cognito", - "containerservice", - "ecs", - "appstream", - "keymanagementservice", - "kms", - "config", - "cloudhsm", - "route53", - "route53domains", - "logs" - ], - "license": "MIT", - "main": "aws4.js", - "maintainers": [ - { - "email": "michael.hart.au@gmail.com", - "name": "hichaelmart" - } - ], - "name": "aws4", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/mhart/aws4.git" - }, - "scripts": { - "test": "mocha ./test/fast.js ./test/slow.js -b -t 100s -R list" - }, - "version": "1.5.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-code-frame/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-code-frame/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-code-frame/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-code-frame/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-code-frame/README.md deleted file mode 100644 index 7e61e3ea5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-code-frame/README.md +++ /dev/null @@ -1,42 +0,0 @@ -# babel-code-frame - -> Generate errors that contain a code frame that point to source locations. - -## Install - -```sh -$ npm install babel-code-frame -``` - -## Usage - -```js -import codeFrame from 'babel-code-frame'; - -const rawLines = `class Foo { - constructor() -}`; -const lineNumber = 2; -const colNumber = 16; - -const result = codeFrame(rawLines, lineNumber, colNumber, { /* options */ }); - -console.log(result); -``` - -```sh - 1 | class Foo { -> 2 | constructor() - | ^ - 3 | } -``` - -If the column number is not known, you may pass `null` instead. - -## Options - -name | type | default | description ------------------------|----------|-----------------|------------------------------------------------------ -highlightCode | boolean | `false` | Syntax highlight the code as JavaScript for terminals -linesAbove | number | 2 | The number of lines to show above the error -linesBelow | number | 3 | The number of lines to show below the error diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-code-frame/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-code-frame/lib/index.js deleted file mode 100644 index 54c838c3b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-code-frame/lib/index.js +++ /dev/null @@ -1,135 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (rawLines, lineNumber, colNumber) { - var opts = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3]; - - colNumber = Math.max(colNumber, 0); - - var highlighted = opts.highlightCode && _chalk2.default.supportsColor; - var maybeHighlight = function maybeHighlight(chalkFn, string) { - return highlighted ? chalkFn(string) : string; - }; - if (highlighted) rawLines = highlight(rawLines); - - var linesAbove = opts.linesAbove || 2; - var linesBelow = opts.linesBelow || 3; - - var lines = rawLines.split(NEWLINE); - var start = Math.max(lineNumber - (linesAbove + 1), 0); - var end = Math.min(lines.length, lineNumber + linesBelow); - - if (!lineNumber && !colNumber) { - start = 0; - end = lines.length; - } - - var numberMaxWidth = String(end).length; - - var frame = lines.slice(start, end).map(function (line, index) { - var number = start + 1 + index; - var paddedNumber = (" " + number).slice(-numberMaxWidth); - var gutter = " " + paddedNumber + " | "; - if (number === lineNumber) { - var markerLine = ""; - if (colNumber) { - var markerSpacing = line.slice(0, colNumber - 1).replace(/[^\t]/g, " "); - markerLine = ["\n ", maybeHighlight(defs.gutter, gutter.replace(/\d/g, " ")), markerSpacing, maybeHighlight(defs.marker, "^")].join(""); - } - return [maybeHighlight(defs.marker, ">"), maybeHighlight(defs.gutter, gutter), line, markerLine].join(""); - } else { - return " " + maybeHighlight(defs.gutter, gutter) + line; - } - }).join("\n"); - - if (highlighted) { - return _chalk2.default.reset(frame); - } else { - return frame; - } -}; - -var _jsTokens = require("js-tokens"); - -var _jsTokens2 = _interopRequireDefault(_jsTokens); - -var _esutils = require("esutils"); - -var _esutils2 = _interopRequireDefault(_esutils); - -var _chalk = require("chalk"); - -var _chalk2 = _interopRequireDefault(_chalk); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var defs = { - keyword: _chalk2.default.cyan, - capitalized: _chalk2.default.yellow, - jsx_tag: _chalk2.default.yellow, - punctuator: _chalk2.default.yellow, - - number: _chalk2.default.magenta, - string: _chalk2.default.green, - regex: _chalk2.default.magenta, - comment: _chalk2.default.grey, - invalid: _chalk2.default.white.bgRed.bold, - gutter: _chalk2.default.grey, - marker: _chalk2.default.red.bold -}; - -var NEWLINE = /\r\n|[\n\r\u2028\u2029]/; - -var JSX_TAG = /^[a-z][\w-]*$/i; - -var BRACKET = /^[()\[\]{}]$/; - -function getTokenType(match) { - var _match$slice = match.slice(-2); - - var offset = _match$slice[0]; - var text = _match$slice[1]; - - var token = _jsTokens2.default.matchToToken(match); - - if (token.type === "name") { - if (_esutils2.default.keyword.isReservedWordES6(token.value)) { - return "keyword"; - } - - if (JSX_TAG.test(token.value) && (text[offset - 1] === "<" || text.substr(offset - 2, 2) == "=6.16.0 <7.0.0", - "_id": "babel-code-frame@6.16.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-code-frame", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-code-frame-6.16.0.tgz_1475091527344_0.9727453696541488" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-code-frame", - "raw": "babel-code-frame@^6.16.0", - "rawSpec": "^6.16.0", - "scope": null, - "spec": ">=6.16.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-core", - "/babel-traverse" - ], - "_resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.16.0.tgz", - "_shasum": "f90e60da0862909d3ce098733b5d3987c97cb8de", - "_shrinkwrap": null, - "_spec": "babel-code-frame@^6.16.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "chalk": "^1.1.0", - "esutils": "^2.0.2", - "js-tokens": "^2.0.0" - }, - "description": "Generate errors that contain a code frame that point to source locations.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "f90e60da0862909d3ce098733b5d3987c97cb8de", - "tarball": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.16.0.tgz" - }, - "homepage": "https://babeljs.io/", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-code-frame", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-code-frame" - }, - "scripts": {}, - "version": "6.16.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-core/README.md deleted file mode 100644 index 8818c4f65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# babel-core - -> Babel compiler core. - -## Install - -``` -$ npm install babel-core -``` - -## Usage - -```js -import * as babel from 'babel-core'; - -const code = `class Example {}`; -const result = babel.transform(code, { /* options */ }); - -result.code; // Generated code -result.map; // Sourcemap -result.ast; // AST -``` - -For more in depth documentation see: http://babeljs.io/docs/usage/api/ diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/index.js deleted file mode 100644 index e8f04775a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./lib/api/node.js"); diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/api/browser.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/api/browser.js deleted file mode 100644 index 4d373d6db..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/api/browser.js +++ /dev/null @@ -1,190 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.transformFileSync = exports.transformFile = exports.transformFromAst = exports.transform = exports.analyse = exports.Pipeline = exports.Plugin = exports.OptionManager = exports.traverse = exports.types = exports.messages = exports.util = exports.version = exports.template = exports.buildExternalHelpers = exports.options = exports.File = undefined; - -var _node = require("./node"); - -Object.defineProperty(exports, "File", { - enumerable: true, - get: function get() { - return _node.File; - } -}); -Object.defineProperty(exports, "options", { - enumerable: true, - get: function get() { - return _node.options; - } -}); -Object.defineProperty(exports, "buildExternalHelpers", { - enumerable: true, - get: function get() { - return _node.buildExternalHelpers; - } -}); -Object.defineProperty(exports, "template", { - enumerable: true, - get: function get() { - return _node.template; - } -}); -Object.defineProperty(exports, "version", { - enumerable: true, - get: function get() { - return _node.version; - } -}); -Object.defineProperty(exports, "util", { - enumerable: true, - get: function get() { - return _node.util; - } -}); -Object.defineProperty(exports, "messages", { - enumerable: true, - get: function get() { - return _node.messages; - } -}); -Object.defineProperty(exports, "types", { - enumerable: true, - get: function get() { - return _node.types; - } -}); -Object.defineProperty(exports, "traverse", { - enumerable: true, - get: function get() { - return _node.traverse; - } -}); -Object.defineProperty(exports, "OptionManager", { - enumerable: true, - get: function get() { - return _node.OptionManager; - } -}); -Object.defineProperty(exports, "Plugin", { - enumerable: true, - get: function get() { - return _node.Plugin; - } -}); -Object.defineProperty(exports, "Pipeline", { - enumerable: true, - get: function get() { - return _node.Pipeline; - } -}); -Object.defineProperty(exports, "analyse", { - enumerable: true, - get: function get() { - return _node.analyse; - } -}); -Object.defineProperty(exports, "transform", { - enumerable: true, - get: function get() { - return _node.transform; - } -}); -Object.defineProperty(exports, "transformFromAst", { - enumerable: true, - get: function get() { - return _node.transformFromAst; - } -}); -Object.defineProperty(exports, "transformFile", { - enumerable: true, - get: function get() { - return _node.transformFile; - } -}); -Object.defineProperty(exports, "transformFileSync", { - enumerable: true, - get: function get() { - return _node.transformFileSync; - } -}); -exports.run = run; -exports.load = load; -function run(code) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - return new Function((0, _node.transform)(code, opts).code)(); -} - -function load(url, callback) { - var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - var hold = arguments[3]; - - opts.filename = opts.filename || url; - - var xhr = global.ActiveXObject ? new global.ActiveXObject("Microsoft.XMLHTTP") : new global.XMLHttpRequest(); - xhr.open("GET", url, true); - if ("overrideMimeType" in xhr) xhr.overrideMimeType("text/plain"); - - xhr.onreadystatechange = function () { - if (xhr.readyState !== 4) return; - - var status = xhr.status; - if (status === 0 || status === 200) { - var param = [xhr.responseText, opts]; - if (!hold) run(param); - if (callback) callback(param); - } else { - throw new Error("Could not load " + url); - } - }; - - xhr.send(null); -} - -function runScripts() { - var scripts = []; - var types = ["text/ecmascript-6", "text/6to5", "text/babel", "module"]; - var index = 0; - - function exec() { - var param = scripts[index]; - if (param instanceof Array) { - run(param, index); - index++; - exec(); - } - } - - function run(script, i) { - var opts = {}; - - if (script.src) { - load(script.src, function (param) { - scripts[i] = param; - exec(); - }, opts, true); - } else { - opts.filename = "embedded"; - scripts[i] = [script.innerHTML, opts]; - } - } - - var _scripts = global.document.getElementsByTagName("script"); - - for (var i = 0; i < _scripts.length; ++i) { - var _script = _scripts[i]; - if (types.indexOf(_script.type) >= 0) scripts.push(_script); - } - - for (var _i = 0; _i < scripts.length; _i++) { - run(scripts[_i], _i); - } - - exec(); -} - -if (global.addEventListener) { - global.addEventListener("DOMContentLoaded", runScripts, false); -} else if (global.attachEvent) { - global.attachEvent("onload", runScripts); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/api/node.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/api/node.js deleted file mode 100644 index 4978cad58..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/api/node.js +++ /dev/null @@ -1,139 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.transformFromAst = exports.transform = exports.analyse = exports.Pipeline = exports.OptionManager = exports.traverse = exports.types = exports.messages = exports.util = exports.version = exports.template = exports.buildExternalHelpers = exports.options = exports.File = undefined; - -var _file = require("../transformation/file"); - -Object.defineProperty(exports, "File", { - enumerable: true, - get: function get() { - return _interopRequireDefault(_file).default; - } -}); - -var _config = require("../transformation/file/options/config"); - -Object.defineProperty(exports, "options", { - enumerable: true, - get: function get() { - return _interopRequireDefault(_config).default; - } -}); - -var _buildExternalHelpers = require("../tools/build-external-helpers"); - -Object.defineProperty(exports, "buildExternalHelpers", { - enumerable: true, - get: function get() { - return _interopRequireDefault(_buildExternalHelpers).default; - } -}); - -var _babelTemplate = require("babel-template"); - -Object.defineProperty(exports, "template", { - enumerable: true, - get: function get() { - return _interopRequireDefault(_babelTemplate).default; - } -}); - -var _package = require("../../package"); - -Object.defineProperty(exports, "version", { - enumerable: true, - get: function get() { - return _package.version; - } -}); -exports.Plugin = Plugin; -exports.transformFile = transformFile; -exports.transformFileSync = transformFileSync; - -var _isFunction = require("lodash/isFunction"); - -var _isFunction2 = _interopRequireDefault(_isFunction); - -var _fs = require("fs"); - -var _fs2 = _interopRequireDefault(_fs); - -var _util = require("../util"); - -var util = _interopRequireWildcard(_util); - -var _babelMessages = require("babel-messages"); - -var messages = _interopRequireWildcard(_babelMessages); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _babelTraverse = require("babel-traverse"); - -var _babelTraverse2 = _interopRequireDefault(_babelTraverse); - -var _optionManager = require("../transformation/file/options/option-manager"); - -var _optionManager2 = _interopRequireDefault(_optionManager); - -var _pipeline = require("../transformation/pipeline"); - -var _pipeline2 = _interopRequireDefault(_pipeline); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.util = util; -exports.messages = messages; -exports.types = t; -exports.traverse = _babelTraverse2.default; -exports.OptionManager = _optionManager2.default; -function Plugin(alias) { - throw new Error("The (" + alias + ") Babel 5 plugin is being run with Babel 6."); -} - -exports.Pipeline = _pipeline2.default; - - -var pipeline = new _pipeline2.default(); -var analyse = exports.analyse = pipeline.analyse.bind(pipeline); -var transform = exports.transform = pipeline.transform.bind(pipeline); -var transformFromAst = exports.transformFromAst = pipeline.transformFromAst.bind(pipeline); - -function transformFile(filename, opts, callback) { - if ((0, _isFunction2.default)(opts)) { - callback = opts; - opts = {}; - } - - opts.filename = filename; - - _fs2.default.readFile(filename, function (err, code) { - var result = void 0; - - if (!err) { - try { - result = transform(code, opts); - } catch (_err) { - err = _err; - } - } - - if (err) { - callback(err); - } else { - callback(null, result); - } - }); -} - -function transformFileSync(filename) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - opts.filename = filename; - return transform(_fs2.default.readFileSync(filename, "utf8"), opts); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/helpers/merge.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/helpers/merge.js deleted file mode 100644 index 634395b1e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/helpers/merge.js +++ /dev/null @@ -1,46 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function (dest, src) { - if (!dest || !src) return; - - return (0, _mergeWith2.default)(dest, src, function (a, b) { - if (b && Array.isArray(a)) { - var newArray = b.slice(0); - - for (var _iterator = a, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var item = _ref; - - if (newArray.indexOf(item) < 0) { - newArray.push(item); - } - } - - return newArray; - } - }); -}; - -var _mergeWith = require("lodash/mergeWith"); - -var _mergeWith2 = _interopRequireDefault(_mergeWith); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/helpers/normalize-ast.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/helpers/normalize-ast.js deleted file mode 100644 index 83927e761..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/helpers/normalize-ast.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (ast, comments, tokens) { - if (ast) { - if (ast.type === "Program") { - return t.file(ast, comments || [], tokens || []); - } else if (ast.type === "File") { - return ast; - } - } - - throw new Error("Not a valid ast?"); -}; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/helpers/resolve.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/helpers/resolve.js deleted file mode 100644 index adec3a84e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/helpers/resolve.js +++ /dev/null @@ -1,46 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _typeof2 = require("babel-runtime/helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -exports.default = function (loc) { - var relative = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : process.cwd(); - - if ((typeof _module2.default === "undefined" ? "undefined" : (0, _typeof3.default)(_module2.default)) === "object") return null; - - var relativeMod = relativeModules[relative]; - - if (!relativeMod) { - relativeMod = new _module2.default(); - - var filename = _path2.default.join(relative, ".babelrc"); - relativeMod.id = filename; - relativeMod.filename = filename; - - relativeMod.paths = _module2.default._nodeModulePaths(relative); - relativeModules[relative] = relativeMod; - } - - try { - return _module2.default._resolveFilename(loc, relativeMod); - } catch (err) { - return null; - } -}; - -var _module = require("module"); - -var _module2 = _interopRequireDefault(_module); - -var _path = require("path"); - -var _path2 = _interopRequireDefault(_path); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var relativeModules = {}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/store.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/store.js deleted file mode 100644 index 00a96292e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/store.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _map = require("babel-runtime/core-js/map"); - -var _map2 = _interopRequireDefault(_map); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Store = function (_Map) { - (0, _inherits3.default)(Store, _Map); - - function Store() { - (0, _classCallCheck3.default)(this, Store); - - var _this = (0, _possibleConstructorReturn3.default)(this, _Map.call(this)); - - _this.dynamicData = {}; - return _this; - } - - Store.prototype.setDynamic = function setDynamic(key, fn) { - this.dynamicData[key] = fn; - }; - - Store.prototype.get = function get(key) { - if (this.has(key)) { - return _Map.prototype.get.call(this, key); - } else { - if (Object.prototype.hasOwnProperty.call(this.dynamicData, key)) { - var val = this.dynamicData[key](); - this.set(key, val); - return val; - } - } - }; - - return Store; -}(_map2.default); - -exports.default = Store; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/tools/build-external-helpers.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/tools/build-external-helpers.js deleted file mode 100644 index 11d6b2a65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/tools/build-external-helpers.js +++ /dev/null @@ -1,105 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (whitelist) { - var outputType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "global"; - - var namespace = t.identifier("babelHelpers"); - - var builder = function builder(body) { - return buildHelpers(body, namespace, whitelist); - }; - - var tree = void 0; - - var build = { - global: buildGlobal, - umd: buildUmd, - var: buildVar - }[outputType]; - - if (build) { - tree = build(namespace, builder); - } else { - throw new Error(messages.get("unsupportedOutputType", outputType)); - } - - return (0, _babelGenerator2.default)(tree).code; -}; - -var _babelHelpers = require("babel-helpers"); - -var helpers = _interopRequireWildcard(_babelHelpers); - -var _babelGenerator = require("babel-generator"); - -var _babelGenerator2 = _interopRequireDefault(_babelGenerator); - -var _babelMessages = require("babel-messages"); - -var messages = _interopRequireWildcard(_babelMessages); - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -var _each = require("lodash/each"); - -var _each2 = _interopRequireDefault(_each); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -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 buildUmdWrapper = (0, _babelTemplate2.default)("\n (function (root, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(AMD_ARGUMENTS, factory);\n } else if (typeof exports === \"object\") {\n factory(COMMON_ARGUMENTS);\n } else {\n factory(BROWSER_ARGUMENTS);\n }\n })(UMD_ROOT, function (FACTORY_PARAMETERS) {\n FACTORY_BODY\n });\n"); - -function buildGlobal(namespace, builder) { - var body = []; - var container = t.functionExpression(null, [t.identifier("global")], t.blockStatement(body)); - var tree = t.program([t.expressionStatement(t.callExpression(container, [helpers.get("selfGlobal")]))]); - - body.push(t.variableDeclaration("var", [t.variableDeclarator(namespace, t.assignmentExpression("=", t.memberExpression(t.identifier("global"), namespace), t.objectExpression([])))])); - - builder(body); - - return tree; -} - -function buildUmd(namespace, builder) { - var body = []; - body.push(t.variableDeclaration("var", [t.variableDeclarator(namespace, t.identifier("global"))])); - - builder(body); - - return t.program([buildUmdWrapper({ - FACTORY_PARAMETERS: t.identifier("global"), - BROWSER_ARGUMENTS: t.assignmentExpression("=", t.memberExpression(t.identifier("root"), namespace), t.objectExpression([])), - COMMON_ARGUMENTS: t.identifier("exports"), - AMD_ARGUMENTS: t.arrayExpression([t.stringLiteral("exports")]), - FACTORY_BODY: body, - UMD_ROOT: t.identifier("this") - })]); -} - -function buildVar(namespace, builder) { - var body = []; - body.push(t.variableDeclaration("var", [t.variableDeclarator(namespace, t.objectExpression([]))])); - builder(body); - body.push(t.expressionStatement(namespace)); - return t.program(body); -} - -function buildHelpers(body, namespace, whitelist) { - (0, _each2.default)(helpers.list, function (name) { - if (whitelist && whitelist.indexOf(name) < 0) return; - - var key = t.identifier(name); - body.push(t.expressionStatement(t.assignmentExpression("=", t.memberExpression(namespace, key), helpers.get(name)))); - }); -} -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/index.js deleted file mode 100644 index 4398a71cf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/index.js +++ /dev/null @@ -1,747 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.File = undefined; - -var _typeof2 = require("babel-runtime/helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _create = require("babel-runtime/core-js/object/create"); - -var _create2 = _interopRequireDefault(_create); - -var _assign = require("babel-runtime/core-js/object/assign"); - -var _assign2 = _interopRequireDefault(_assign); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _babelHelpers = require("babel-helpers"); - -var _babelHelpers2 = _interopRequireDefault(_babelHelpers); - -var _metadata = require("./metadata"); - -var metadataVisitor = _interopRequireWildcard(_metadata); - -var _convertSourceMap = require("convert-source-map"); - -var _convertSourceMap2 = _interopRequireDefault(_convertSourceMap); - -var _optionManager = require("./options/option-manager"); - -var _optionManager2 = _interopRequireDefault(_optionManager); - -var _pluginPass = require("../plugin-pass"); - -var _pluginPass2 = _interopRequireDefault(_pluginPass); - -var _babelTraverse = require("babel-traverse"); - -var _babelTraverse2 = _interopRequireDefault(_babelTraverse); - -var _sourceMap = require("source-map"); - -var _sourceMap2 = _interopRequireDefault(_sourceMap); - -var _babelGenerator = require("babel-generator"); - -var _babelGenerator2 = _interopRequireDefault(_babelGenerator); - -var _babelCodeFrame = require("babel-code-frame"); - -var _babelCodeFrame2 = _interopRequireDefault(_babelCodeFrame); - -var _defaults = require("lodash/defaults"); - -var _defaults2 = _interopRequireDefault(_defaults); - -var _logger = require("./logger"); - -var _logger2 = _interopRequireDefault(_logger); - -var _store = require("../../store"); - -var _store2 = _interopRequireDefault(_store); - -var _babylon = require("babylon"); - -var _util = require("../../util"); - -var util = _interopRequireWildcard(_util); - -var _path = require("path"); - -var _path2 = _interopRequireDefault(_path); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _resolve = require("../../helpers/resolve"); - -var _resolve2 = _interopRequireDefault(_resolve); - -var _blockHoist = require("../internal-plugins/block-hoist"); - -var _blockHoist2 = _interopRequireDefault(_blockHoist); - -var _shadowFunctions = require("../internal-plugins/shadow-functions"); - -var _shadowFunctions2 = _interopRequireDefault(_shadowFunctions); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var shebangRegex = /^#!.*/; - -var INTERNAL_PLUGINS = [[_blockHoist2.default], [_shadowFunctions2.default]]; - -var errorVisitor = { - enter: function enter(path, state) { - var loc = path.node.loc; - if (loc) { - state.loc = loc; - path.stop(); - } - } -}; - -var File = function (_Store) { - (0, _inherits3.default)(File, _Store); - - function File() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var pipeline = arguments[1]; - (0, _classCallCheck3.default)(this, File); - - var _this = (0, _possibleConstructorReturn3.default)(this, _Store.call(this)); - - _this.pipeline = pipeline; - - _this.log = new _logger2.default(_this, opts.filename || "unknown"); - _this.opts = _this.initOptions(opts); - - _this.parserOpts = { - sourceType: _this.opts.sourceType, - sourceFileName: _this.opts.filename, - plugins: [] - }; - - _this.pluginVisitors = []; - _this.pluginPasses = []; - - _this.buildPluginsForOptions(_this.opts); - - if (_this.opts.passPerPreset) { - _this.perPresetOpts = []; - _this.opts.presets.forEach(function (presetOpts) { - var perPresetOpts = (0, _assign2.default)((0, _create2.default)(_this.opts), presetOpts); - _this.perPresetOpts.push(perPresetOpts); - _this.buildPluginsForOptions(perPresetOpts); - }); - } - - _this.metadata = { - usedHelpers: [], - marked: [], - modules: { - imports: [], - exports: { - exported: [], - specifiers: [] - } - } - }; - - _this.dynamicImportTypes = {}; - _this.dynamicImportIds = {}; - _this.dynamicImports = []; - _this.declarations = {}; - _this.usedHelpers = {}; - - _this.path = null; - _this.ast = {}; - - _this.code = ""; - _this.shebang = ""; - - _this.hub = new _babelTraverse.Hub(_this); - return _this; - } - - File.prototype.getMetadata = function getMetadata() { - var has = false; - for (var _iterator = this.ast.program.body, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var node = _ref; - - if (t.isModuleDeclaration(node)) { - has = true; - break; - } - } - if (has) { - this.path.traverse(metadataVisitor, this); - } - }; - - File.prototype.initOptions = function initOptions(opts) { - opts = new _optionManager2.default(this.log, this.pipeline).init(opts); - - if (opts.inputSourceMap) { - opts.sourceMaps = true; - } - - if (opts.moduleId) { - opts.moduleIds = true; - } - - opts.basename = _path2.default.basename(opts.filename, _path2.default.extname(opts.filename)); - - opts.ignore = util.arrayify(opts.ignore, util.regexify); - - if (opts.only) opts.only = util.arrayify(opts.only, util.regexify); - - (0, _defaults2.default)(opts, { - moduleRoot: opts.sourceRoot - }); - - (0, _defaults2.default)(opts, { - sourceRoot: opts.moduleRoot - }); - - (0, _defaults2.default)(opts, { - filenameRelative: opts.filename - }); - - var basenameRelative = _path2.default.basename(opts.filenameRelative); - - (0, _defaults2.default)(opts, { - sourceFileName: basenameRelative, - sourceMapTarget: basenameRelative - }); - - return opts; - }; - - File.prototype.buildPluginsForOptions = function buildPluginsForOptions(opts) { - if (!Array.isArray(opts.plugins)) { - return; - } - - var plugins = opts.plugins.concat(INTERNAL_PLUGINS); - var currentPluginVisitors = []; - var currentPluginPasses = []; - - for (var _iterator2 = plugins, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var ref = _ref2; - var plugin = ref[0], - pluginOpts = ref[1]; - - - currentPluginVisitors.push(plugin.visitor); - currentPluginPasses.push(new _pluginPass2.default(this, plugin, pluginOpts)); - - if (plugin.manipulateOptions) { - plugin.manipulateOptions(opts, this.parserOpts, this); - } - } - - this.pluginVisitors.push(currentPluginVisitors); - this.pluginPasses.push(currentPluginPasses); - }; - - File.prototype.getModuleName = function getModuleName() { - var opts = this.opts; - if (!opts.moduleIds) { - return null; - } - - if (opts.moduleId != null && !opts.getModuleId) { - return opts.moduleId; - } - - var filenameRelative = opts.filenameRelative; - var moduleName = ""; - - if (opts.moduleRoot != null) { - moduleName = opts.moduleRoot + "/"; - } - - if (!opts.filenameRelative) { - return moduleName + opts.filename.replace(/^\//, ""); - } - - if (opts.sourceRoot != null) { - var sourceRootRegEx = new RegExp("^" + opts.sourceRoot + "\/?"); - filenameRelative = filenameRelative.replace(sourceRootRegEx, ""); - } - - filenameRelative = filenameRelative.replace(/\.(\w*?)$/, ""); - - moduleName += filenameRelative; - - moduleName = moduleName.replace(/\\/g, "/"); - - if (opts.getModuleId) { - return opts.getModuleId(moduleName) || moduleName; - } else { - return moduleName; - } - }; - - File.prototype.resolveModuleSource = function resolveModuleSource(source) { - var resolveModuleSource = this.opts.resolveModuleSource; - if (resolveModuleSource) source = resolveModuleSource(source, this.opts.filename); - return source; - }; - - File.prototype.addImport = function addImport(source, imported) { - var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : imported; - - var alias = source + ":" + imported; - var id = this.dynamicImportIds[alias]; - - if (!id) { - source = this.resolveModuleSource(source); - id = this.dynamicImportIds[alias] = this.scope.generateUidIdentifier(name); - - var specifiers = []; - - if (imported === "*") { - specifiers.push(t.importNamespaceSpecifier(id)); - } else if (imported === "default") { - specifiers.push(t.importDefaultSpecifier(id)); - } else { - specifiers.push(t.importSpecifier(id, t.identifier(imported))); - } - - var declar = t.importDeclaration(specifiers, t.stringLiteral(source)); - declar._blockHoist = 3; - - this.path.unshiftContainer("body", declar); - } - - return id; - }; - - File.prototype.addHelper = function addHelper(name) { - var declar = this.declarations[name]; - if (declar) return declar; - - if (!this.usedHelpers[name]) { - this.metadata.usedHelpers.push(name); - this.usedHelpers[name] = true; - } - - var generator = this.get("helperGenerator"); - var runtime = this.get("helpersNamespace"); - if (generator) { - var res = generator(name); - if (res) return res; - } else if (runtime) { - return t.memberExpression(runtime, t.identifier(name)); - } - - var ref = (0, _babelHelpers2.default)(name); - var uid = this.declarations[name] = this.scope.generateUidIdentifier(name); - - if (t.isFunctionExpression(ref) && !ref.id) { - ref.body._compact = true; - ref._generated = true; - ref.id = uid; - ref.type = "FunctionDeclaration"; - this.path.unshiftContainer("body", ref); - } else { - ref._compact = true; - this.scope.push({ - id: uid, - init: ref, - unique: true - }); - } - - return uid; - }; - - File.prototype.addTemplateObject = function addTemplateObject(helperName, strings, raw) { - var stringIds = raw.elements.map(function (string) { - return string.value; - }); - var name = helperName + "_" + raw.elements.length + "_" + stringIds.join(","); - - var declar = this.declarations[name]; - if (declar) return declar; - - var uid = this.declarations[name] = this.scope.generateUidIdentifier("templateObject"); - - var helperId = this.addHelper(helperName); - var init = t.callExpression(helperId, [strings, raw]); - init._compact = true; - this.scope.push({ - id: uid, - init: init, - _blockHoist: 1.9 }); - return uid; - }; - - File.prototype.buildCodeFrameError = function buildCodeFrameError(node, msg) { - var Error = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : SyntaxError; - - var loc = node && (node.loc || node._loc); - - var err = new Error(msg); - - if (loc) { - err.loc = loc.start; - } else { - (0, _babelTraverse2.default)(node, errorVisitor, this.scope, err); - - err.message += " (This is an error on an internal node. Probably an internal error"; - - if (err.loc) { - err.message += ". Location has been estimated."; - } - - err.message += ")"; - } - - return err; - }; - - File.prototype.mergeSourceMap = function mergeSourceMap(map) { - var inputMap = this.opts.inputSourceMap; - - if (inputMap) { - var _ret = function () { - var inputMapConsumer = new _sourceMap2.default.SourceMapConsumer(inputMap); - var outputMapConsumer = new _sourceMap2.default.SourceMapConsumer(map); - - var mergedGenerator = new _sourceMap2.default.SourceMapGenerator({ - file: inputMapConsumer.file, - sourceRoot: inputMapConsumer.sourceRoot - }); - - var source = outputMapConsumer.sources[0]; - - inputMapConsumer.eachMapping(function (mapping) { - var generatedPosition = outputMapConsumer.generatedPositionFor({ - line: mapping.generatedLine, - column: mapping.generatedColumn, - source: source - }); - if (generatedPosition.column != null) { - mergedGenerator.addMapping({ - source: mapping.source, - - original: mapping.source == null ? null : { - line: mapping.originalLine, - column: mapping.originalColumn - }, - - generated: generatedPosition - }); - } - }); - - var mergedMap = mergedGenerator.toJSON(); - inputMap.mappings = mergedMap.mappings; - return { - v: inputMap - }; - }(); - - if ((typeof _ret === "undefined" ? "undefined" : (0, _typeof3.default)(_ret)) === "object") return _ret.v; - } else { - return map; - } - }; - - File.prototype.parse = function parse(code) { - var parseCode = _babylon.parse; - var parserOpts = this.opts.parserOpts; - - if (parserOpts) { - parserOpts = (0, _assign2.default)({}, this.parserOpts, parserOpts); - - if (parserOpts.parser) { - if (typeof parserOpts.parser === "string") { - var dirname = _path2.default.dirname(this.opts.filename) || process.cwd(); - var parser = (0, _resolve2.default)(parserOpts.parser, dirname); - if (parser) { - parseCode = require(parser).parse; - } else { - throw new Error("Couldn't find parser " + parserOpts.parser + " with \"parse\" method relative to directory " + dirname); - } - } else { - parseCode = parserOpts.parser; - } - - parserOpts.parser = { - parse: function parse(source) { - return (0, _babylon.parse)(source, parserOpts); - } - }; - } - } - - this.log.debug("Parse start"); - var ast = parseCode(code, parserOpts || this.parserOpts); - this.log.debug("Parse stop"); - return ast; - }; - - File.prototype._addAst = function _addAst(ast) { - this.path = _babelTraverse.NodePath.get({ - hub: this.hub, - parentPath: null, - parent: ast, - container: ast, - key: "program" - }).setContext(); - this.scope = this.path.scope; - this.ast = ast; - this.getMetadata(); - }; - - File.prototype.addAst = function addAst(ast) { - this.log.debug("Start set AST"); - this._addAst(ast); - this.log.debug("End set AST"); - }; - - File.prototype.transform = function transform() { - for (var i = 0; i < this.pluginPasses.length; i++) { - var pluginPasses = this.pluginPasses[i]; - this.call("pre", pluginPasses); - this.log.debug("Start transform traverse"); - - var visitor = _babelTraverse2.default.visitors.merge(this.pluginVisitors[i], pluginPasses, this.opts.wrapPluginVisitorMethod); - (0, _babelTraverse2.default)(this.ast, visitor, this.scope); - - this.log.debug("End transform traverse"); - this.call("post", pluginPasses); - } - - return this.generate(); - }; - - File.prototype.wrap = function wrap(code, callback) { - code = code + ""; - - try { - if (this.shouldIgnore()) { - return this.makeResult({ code: code, ignored: true }); - } else { - return callback(); - } - } catch (err) { - if (err._babel) { - throw err; - } else { - err._babel = true; - } - - var message = err.message = this.opts.filename + ": " + err.message; - - var loc = err.loc; - if (loc) { - err.codeFrame = (0, _babelCodeFrame2.default)(code, loc.line, loc.column + 1, this.opts); - message += "\n" + err.codeFrame; - } - - if (process.browser) { - err.message = message; - } - - if (err.stack) { - var newStack = err.stack.replace(err.message, message); - err.stack = newStack; - } - - throw err; - } - }; - - File.prototype.addCode = function addCode(code) { - code = (code || "") + ""; - code = this.parseInputSourceMap(code); - this.code = code; - }; - - File.prototype.parseCode = function parseCode() { - this.parseShebang(); - var ast = this.parse(this.code); - this.addAst(ast); - }; - - File.prototype.shouldIgnore = function shouldIgnore() { - var opts = this.opts; - return util.shouldIgnore(opts.filename, opts.ignore, opts.only); - }; - - File.prototype.call = function call(key, pluginPasses) { - for (var _iterator3 = pluginPasses, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - var pass = _ref3; - - var plugin = pass.plugin; - var fn = plugin[key]; - if (fn) fn.call(pass, this); - } - }; - - File.prototype.parseInputSourceMap = function parseInputSourceMap(code) { - var opts = this.opts; - - if (opts.inputSourceMap !== false) { - var inputMap = _convertSourceMap2.default.fromSource(code); - if (inputMap) { - opts.inputSourceMap = inputMap.toObject(); - code = _convertSourceMap2.default.removeComments(code); - } - } - - return code; - }; - - File.prototype.parseShebang = function parseShebang() { - var shebangMatch = shebangRegex.exec(this.code); - if (shebangMatch) { - this.shebang = shebangMatch[0]; - this.code = this.code.replace(shebangRegex, ""); - } - }; - - File.prototype.makeResult = function makeResult(_ref4) { - var code = _ref4.code, - map = _ref4.map, - ast = _ref4.ast, - ignored = _ref4.ignored; - - var result = { - metadata: null, - options: this.opts, - ignored: !!ignored, - code: null, - ast: null, - map: map || null - }; - - if (this.opts.code) { - result.code = code; - } - - if (this.opts.ast) { - result.ast = ast; - } - - if (this.opts.metadata) { - result.metadata = this.metadata; - } - - return result; - }; - - File.prototype.generate = function generate() { - var opts = this.opts; - var ast = this.ast; - - var result = { ast: ast }; - if (!opts.code) return this.makeResult(result); - - var gen = _babelGenerator2.default; - if (opts.generatorOpts.generator) { - gen = opts.generatorOpts.generator; - - if (typeof gen === "string") { - var dirname = _path2.default.dirname(this.opts.filename) || process.cwd(); - var generator = (0, _resolve2.default)(gen, dirname); - if (generator) { - gen = require(generator).print; - } else { - throw new Error("Couldn't find generator " + gen + " with \"print\" method relative to directory " + dirname); - } - } - } - - this.log.debug("Generation start"); - - var _result = gen(ast, opts.generatorOpts ? (0, _assign2.default)(opts, opts.generatorOpts) : opts, this.code); - result.code = _result.code; - result.map = _result.map; - - this.log.debug("Generation end"); - - if (this.shebang) { - result.code = this.shebang + "\n" + result.code; - } - - if (result.map) { - result.map = this.mergeSourceMap(result.map); - } - - if (opts.sourceMaps === "inline" || opts.sourceMaps === "both") { - result.code += "\n" + _convertSourceMap2.default.fromObject(result.map).toComment(); - } - - if (opts.sourceMaps === "inline") { - result.map = null; - } - - return this.makeResult(result); - }; - - return File; -}(_store2.default); - -exports.default = File; -exports.File = File; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/logger.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/logger.js deleted file mode 100644 index c8af2227c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/logger.js +++ /dev/null @@ -1,72 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _node = require("debug/node"); - -var _node2 = _interopRequireDefault(_node); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var verboseDebug = (0, _node2.default)("babel:verbose"); -var generalDebug = (0, _node2.default)("babel"); - -var seenDeprecatedMessages = []; - -var Logger = function () { - function Logger(file, filename) { - (0, _classCallCheck3.default)(this, Logger); - - this.filename = filename; - this.file = file; - } - - Logger.prototype._buildMessage = function _buildMessage(msg) { - var parts = "[BABEL] " + this.filename; - if (msg) parts += ": " + msg; - return parts; - }; - - Logger.prototype.warn = function warn(msg) { - console.warn(this._buildMessage(msg)); - }; - - Logger.prototype.error = function error(msg) { - var Constructor = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Error; - - throw new Constructor(this._buildMessage(msg)); - }; - - Logger.prototype.deprecate = function deprecate(msg) { - if (this.file.opts && this.file.opts.suppressDeprecationMessages) return; - - msg = this._buildMessage(msg); - - if (seenDeprecatedMessages.indexOf(msg) >= 0) return; - - seenDeprecatedMessages.push(msg); - - console.error(msg); - }; - - Logger.prototype.verbose = function verbose(msg) { - if (verboseDebug.enabled) verboseDebug(this._buildMessage(msg)); - }; - - Logger.prototype.debug = function debug(msg) { - if (generalDebug.enabled) generalDebug(this._buildMessage(msg)); - }; - - Logger.prototype.deopt = function deopt(node, msg) { - this.debug(msg); - }; - - return Logger; -}(); - -exports.default = Logger; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/metadata.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/metadata.js deleted file mode 100644 index e76f223d6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/metadata.js +++ /dev/null @@ -1,178 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.ImportDeclaration = exports.ModuleDeclaration = undefined; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.ExportDeclaration = ExportDeclaration; -exports.Scope = Scope; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var ModuleDeclaration = exports.ModuleDeclaration = { - enter: function enter(path, file) { - var node = path.node; - - if (node.source) { - node.source.value = file.resolveModuleSource(node.source.value); - } - } -}; - -var ImportDeclaration = exports.ImportDeclaration = { - exit: function exit(path, file) { - var node = path.node; - - - var specifiers = []; - var imported = []; - file.metadata.modules.imports.push({ - source: node.source.value, - imported: imported, - specifiers: specifiers - }); - - for (var _iterator = path.get("specifiers"), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var specifier = _ref; - - var local = specifier.node.local.name; - - if (specifier.isImportDefaultSpecifier()) { - imported.push("default"); - specifiers.push({ - kind: "named", - imported: "default", - local: local - }); - } - - if (specifier.isImportSpecifier()) { - var importedName = specifier.node.imported.name; - imported.push(importedName); - specifiers.push({ - kind: "named", - imported: importedName, - local: local - }); - } - - if (specifier.isImportNamespaceSpecifier()) { - imported.push("*"); - specifiers.push({ - kind: "namespace", - local: local - }); - } - } - } -}; - -function ExportDeclaration(path, file) { - var node = path.node; - - - var source = node.source ? node.source.value : null; - var exports = file.metadata.modules.exports; - - var declar = path.get("declaration"); - if (declar.isStatement()) { - var bindings = declar.getBindingIdentifiers(); - - for (var name in bindings) { - exports.exported.push(name); - exports.specifiers.push({ - kind: "local", - local: name, - exported: path.isExportDefaultDeclaration() ? "default" : name - }); - } - } - - if (path.isExportNamedDeclaration() && node.specifiers) { - for (var _iterator2 = node.specifiers, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var specifier = _ref2; - - var exported = specifier.exported.name; - exports.exported.push(exported); - - if (t.isExportDefaultSpecifier(specifier)) { - exports.specifiers.push({ - kind: "external", - local: exported, - exported: exported, - source: source - }); - } - - if (t.isExportNamespaceSpecifier(specifier)) { - exports.specifiers.push({ - kind: "external-namespace", - exported: exported, - source: source - }); - } - - var local = specifier.local; - if (!local) continue; - - if (source) { - exports.specifiers.push({ - kind: "external", - local: local.name, - exported: exported, - source: source - }); - } - - if (!source) { - exports.specifiers.push({ - kind: "local", - local: local.name, - exported: exported - }); - } - } - } - - if (path.isExportAllDeclaration()) { - exports.specifiers.push({ - kind: "external-all", - source: source - }); - } -} - -function Scope(path) { - path.skip(); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/build-config-chain.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/build-config-chain.js deleted file mode 100644 index ef02d65ab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/build-config-chain.js +++ /dev/null @@ -1,215 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _assign = require("babel-runtime/core-js/object/assign"); - -var _assign2 = _interopRequireDefault(_assign); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -exports.default = buildConfigChain; - -var _resolve = require("../../../helpers/resolve"); - -var _resolve2 = _interopRequireDefault(_resolve); - -var _json = require("json5"); - -var _json2 = _interopRequireDefault(_json); - -var _pathIsAbsolute = require("path-is-absolute"); - -var _pathIsAbsolute2 = _interopRequireDefault(_pathIsAbsolute); - -var _path = require("path"); - -var _path2 = _interopRequireDefault(_path); - -var _fs = require("fs"); - -var _fs2 = _interopRequireDefault(_fs); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var existsCache = {}; -var jsonCache = {}; - -var BABELIGNORE_FILENAME = ".babelignore"; -var BABELRC_FILENAME = ".babelrc"; -var PACKAGE_FILENAME = "package.json"; - -function exists(filename) { - var cached = existsCache[filename]; - if (cached == null) { - return existsCache[filename] = _fs2.default.existsSync(filename); - } else { - return cached; - } -} - -function buildConfigChain() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var log = arguments[1]; - - var filename = opts.filename; - var builder = new ConfigChainBuilder(log); - - if (opts.babelrc !== false) { - builder.findConfigs(filename); - } - - builder.mergeConfig({ - options: opts, - alias: "base", - dirname: filename && _path2.default.dirname(filename) - }); - - return builder.configs; -} - -var ConfigChainBuilder = function () { - function ConfigChainBuilder(log) { - (0, _classCallCheck3.default)(this, ConfigChainBuilder); - - this.resolvedConfigs = []; - this.configs = []; - this.log = log; - } - - ConfigChainBuilder.prototype.findConfigs = function findConfigs(loc) { - if (!loc) return; - - if (!(0, _pathIsAbsolute2.default)(loc)) { - loc = _path2.default.join(process.cwd(), loc); - } - - var foundConfig = false; - var foundIgnore = false; - - while (loc !== (loc = _path2.default.dirname(loc))) { - if (!foundConfig) { - var configLoc = _path2.default.join(loc, BABELRC_FILENAME); - if (exists(configLoc)) { - this.addConfig(configLoc); - foundConfig = true; - } - - var pkgLoc = _path2.default.join(loc, PACKAGE_FILENAME); - if (!foundConfig && exists(pkgLoc)) { - foundConfig = this.addConfig(pkgLoc, "babel", JSON); - } - } - - if (!foundIgnore) { - var ignoreLoc = _path2.default.join(loc, BABELIGNORE_FILENAME); - if (exists(ignoreLoc)) { - this.addIgnoreConfig(ignoreLoc); - foundIgnore = true; - } - } - - if (foundIgnore && foundConfig) return; - } - }; - - ConfigChainBuilder.prototype.addIgnoreConfig = function addIgnoreConfig(loc) { - var file = _fs2.default.readFileSync(loc, "utf8"); - var lines = file.split("\n"); - - lines = lines.map(function (line) { - return line.replace(/#(.*?)$/, "").trim(); - }).filter(function (line) { - return !!line; - }); - - if (lines.length) { - this.mergeConfig({ - options: { ignore: lines }, - alias: loc, - dirname: _path2.default.dirname(loc) - }); - } - }; - - ConfigChainBuilder.prototype.addConfig = function addConfig(loc, key) { - var json = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _json2.default; - - if (this.resolvedConfigs.indexOf(loc) >= 0) { - return false; - } - - this.resolvedConfigs.push(loc); - - var content = _fs2.default.readFileSync(loc, "utf8"); - var options = void 0; - - try { - options = jsonCache[content] = jsonCache[content] || json.parse(content); - if (key) options = options[key]; - } catch (err) { - err.message = loc + ": Error while parsing JSON - " + err.message; - throw err; - } - - this.mergeConfig({ - options: options, - alias: loc, - dirname: _path2.default.dirname(loc) - }); - - return !!options; - }; - - ConfigChainBuilder.prototype.mergeConfig = function mergeConfig(_ref) { - var options = _ref.options, - alias = _ref.alias, - loc = _ref.loc, - dirname = _ref.dirname; - - if (!options) { - return false; - } - - options = (0, _assign2.default)({}, options); - - dirname = dirname || process.cwd(); - loc = loc || alias; - - if (options.extends) { - var extendsLoc = (0, _resolve2.default)(options.extends, dirname); - if (extendsLoc) { - this.addConfig(extendsLoc); - } else { - if (this.log) this.log.error("Couldn't resolve extends clause of " + options.extends + " in " + alias); - } - delete options.extends; - } - - this.configs.push({ - options: options, - alias: alias, - loc: loc, - dirname: dirname - }); - - var envOpts = void 0; - var envKey = process.env.BABEL_ENV || process.env.NODE_ENV || "development"; - if (options.env) { - envOpts = options.env[envKey]; - delete options.env; - } - - this.mergeConfig({ - options: envOpts, - alias: alias + ".env." + envKey, - dirname: dirname - }); - }; - - return ConfigChainBuilder; -}(); - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/config.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/config.js deleted file mode 100644 index e8909476e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/config.js +++ /dev/null @@ -1,211 +0,0 @@ -"use strict"; - -module.exports = { - filename: { - type: "filename", - description: "filename to use when reading from stdin - this will be used in source-maps, errors etc", - default: "unknown", - shorthand: "f" - }, - - filenameRelative: { - hidden: true, - type: "string" - }, - - inputSourceMap: { - hidden: true - }, - - env: { - hidden: true, - default: {} - }, - - mode: { - description: "", - hidden: true - }, - - retainLines: { - type: "boolean", - default: false, - description: "retain line numbers - will result in really ugly code" - }, - - highlightCode: { - description: "enable/disable ANSI syntax highlighting of code frames (on by default)", - type: "boolean", - default: true - }, - - suppressDeprecationMessages: { - type: "boolean", - default: false, - hidden: true - }, - - presets: { - type: "list", - description: "", - default: [] - }, - - plugins: { - type: "list", - default: [], - description: "" - }, - - ignore: { - type: "list", - description: "list of glob paths to **not** compile", - default: [] - }, - - only: { - type: "list", - description: "list of glob paths to **only** compile" - }, - - code: { - hidden: true, - default: true, - type: "boolean" - }, - - metadata: { - hidden: true, - default: true, - type: "boolean" - }, - - ast: { - hidden: true, - default: true, - type: "boolean" - }, - - extends: { - type: "string", - hidden: true - }, - - comments: { - type: "boolean", - default: true, - description: "write comments to generated output (true by default)" - }, - - shouldPrintComment: { - hidden: true, - description: "optional callback to control whether a comment should be inserted, when this is used the comments option is ignored" - }, - - wrapPluginVisitorMethod: { - hidden: true, - description: "optional callback to wrap all visitor methods" - }, - - compact: { - type: "booleanString", - default: "auto", - description: "do not include superfluous whitespace characters and line terminators [true|false|auto]" - }, - - minified: { - type: "boolean", - default: false, - description: "save as much bytes when printing [true|false]" - }, - - sourceMap: { - alias: "sourceMaps", - hidden: true - }, - - sourceMaps: { - type: "booleanString", - description: "[true|false|inline]", - default: false, - shorthand: "s" - }, - - sourceMapTarget: { - type: "string", - description: "set `file` on returned source map" - }, - - sourceFileName: { - type: "string", - description: "set `sources[0]` on returned source map" - }, - - sourceRoot: { - type: "filename", - description: "the root from which all sources are relative" - }, - - babelrc: { - description: "Whether or not to look up .babelrc and .babelignore files", - type: "boolean", - default: true - }, - - sourceType: { - description: "", - default: "module" - }, - - auxiliaryCommentBefore: { - type: "string", - description: "print a comment before any injected non-user code" - }, - - auxiliaryCommentAfter: { - type: "string", - description: "print a comment after any injected non-user code" - }, - - resolveModuleSource: { - hidden: true - }, - - getModuleId: { - hidden: true - }, - - moduleRoot: { - type: "filename", - description: "optional prefix for the AMD module formatter that will be prepend to the filename on module definitions" - }, - - moduleIds: { - type: "boolean", - default: false, - shorthand: "M", - description: "insert an explicit id for modules" - }, - - moduleId: { - description: "specify a custom name for module ids", - type: "string" - }, - - passPerPreset: { - description: "Whether to spawn a traversal pass per a preset. By default all presets are merged.", - type: "boolean", - default: false, - hidden: true - }, - - parserOpts: { - description: "Options to pass into the parser, or to change parsers (parserOpts.parser)", - default: false - }, - - generatorOpts: { - description: "Options to pass into the generator, or to change generators (generatorOpts.generator)", - default: false - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/index.js deleted file mode 100644 index ba8e2000f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/index.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.config = undefined; -exports.normaliseOptions = normaliseOptions; - -var _parsers = require("./parsers"); - -var parsers = _interopRequireWildcard(_parsers); - -var _config = require("./config"); - -var _config2 = _interopRequireDefault(_config); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -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; } } - -exports.config = _config2.default; -function normaliseOptions() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - for (var key in options) { - var val = options[key]; - if (val == null) continue; - - var opt = _config2.default[key]; - if (opt && opt.alias) opt = _config2.default[opt.alias]; - if (!opt) continue; - - var parser = parsers[opt.type]; - if (parser) val = parser(val); - - options[key] = val; - } - - return options; -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/option-manager.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/option-manager.js deleted file mode 100644 index aeb69d8dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/option-manager.js +++ /dev/null @@ -1,389 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _objectWithoutProperties2 = require("babel-runtime/helpers/objectWithoutProperties"); - -var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); - -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _assign = require("babel-runtime/core-js/object/assign"); - -var _assign2 = _interopRequireDefault(_assign); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _typeof2 = require("babel-runtime/helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _node = require("../../../api/node"); - -var context = _interopRequireWildcard(_node); - -var _plugin2 = require("../../plugin"); - -var _plugin3 = _interopRequireDefault(_plugin2); - -var _babelMessages = require("babel-messages"); - -var messages = _interopRequireWildcard(_babelMessages); - -var _index = require("./index"); - -var _resolve = require("../../../helpers/resolve"); - -var _resolve2 = _interopRequireDefault(_resolve); - -var _cloneDeepWith = require("lodash/cloneDeepWith"); - -var _cloneDeepWith2 = _interopRequireDefault(_cloneDeepWith); - -var _clone = require("lodash/clone"); - -var _clone2 = _interopRequireDefault(_clone); - -var _merge = require("../../../helpers/merge"); - -var _merge2 = _interopRequireDefault(_merge); - -var _config2 = require("./config"); - -var _config3 = _interopRequireDefault(_config2); - -var _removed = require("./removed"); - -var _removed2 = _interopRequireDefault(_removed); - -var _buildConfigChain = require("./build-config-chain"); - -var _buildConfigChain2 = _interopRequireDefault(_buildConfigChain); - -var _path = require("path"); - -var _path2 = _interopRequireDefault(_path); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var OptionManager = function () { - function OptionManager(log) { - (0, _classCallCheck3.default)(this, OptionManager); - - this.resolvedConfigs = []; - this.options = OptionManager.createBareOptions(); - this.log = log; - } - - OptionManager.memoisePluginContainer = function memoisePluginContainer(fn, loc, i, alias) { - for (var _iterator = OptionManager.memoisedPlugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var cache = _ref; - - if (cache.container === fn) return cache.plugin; - } - - var obj = void 0; - - if (typeof fn === "function") { - obj = fn(context); - } else { - obj = fn; - } - - if ((typeof obj === "undefined" ? "undefined" : (0, _typeof3.default)(obj)) === "object") { - var _plugin = new _plugin3.default(obj, alias); - OptionManager.memoisedPlugins.push({ - container: fn, - plugin: _plugin - }); - return _plugin; - } else { - throw new TypeError(messages.get("pluginNotObject", loc, i, typeof obj === "undefined" ? "undefined" : (0, _typeof3.default)(obj)) + loc + i); - } - }; - - OptionManager.createBareOptions = function createBareOptions() { - var opts = {}; - - for (var _key in _config3.default) { - var opt = _config3.default[_key]; - opts[_key] = (0, _clone2.default)(opt.default); - } - - return opts; - }; - - OptionManager.normalisePlugin = function normalisePlugin(plugin, loc, i, alias) { - plugin = plugin.__esModule ? plugin.default : plugin; - - if (!(plugin instanceof _plugin3.default)) { - if (typeof plugin === "function" || (typeof plugin === "undefined" ? "undefined" : (0, _typeof3.default)(plugin)) === "object") { - plugin = OptionManager.memoisePluginContainer(plugin, loc, i, alias); - } else { - throw new TypeError(messages.get("pluginNotFunction", loc, i, typeof plugin === "undefined" ? "undefined" : (0, _typeof3.default)(plugin))); - } - } - - plugin.init(loc, i); - - return plugin; - }; - - OptionManager.normalisePlugins = function normalisePlugins(loc, dirname, plugins) { - return plugins.map(function (val, i) { - var plugin = void 0, - options = void 0; - - if (!val) { - throw new TypeError("Falsy value found in plugins"); - } - - if (Array.isArray(val)) { - plugin = val[0]; - options = val[1]; - } else { - plugin = val; - } - - var alias = typeof plugin === "string" ? plugin : loc + "$" + i; - - if (typeof plugin === "string") { - var pluginLoc = (0, _resolve2.default)("babel-plugin-" + plugin, dirname) || (0, _resolve2.default)(plugin, dirname); - if (pluginLoc) { - plugin = require(pluginLoc); - } else { - throw new ReferenceError(messages.get("pluginUnknown", plugin, loc, i, dirname)); - } - } - - plugin = OptionManager.normalisePlugin(plugin, loc, i, alias); - - return [plugin, options]; - }); - }; - - OptionManager.prototype.mergeOptions = function mergeOptions(_ref2) { - var _this = this; - - var rawOpts = _ref2.options, - extendingOpts = _ref2.extending, - alias = _ref2.alias, - loc = _ref2.loc, - dirname = _ref2.dirname; - - alias = alias || "foreign"; - if (!rawOpts) return; - - if ((typeof rawOpts === "undefined" ? "undefined" : (0, _typeof3.default)(rawOpts)) !== "object" || Array.isArray(rawOpts)) { - this.log.error("Invalid options type for " + alias, TypeError); - } - - var opts = (0, _cloneDeepWith2.default)(rawOpts, function (val) { - if (val instanceof _plugin3.default) { - return val; - } - }); - - dirname = dirname || process.cwd(); - loc = loc || alias; - - for (var _key2 in opts) { - var option = _config3.default[_key2]; - - if (!option && this.log) { - if (_removed2.default[_key2]) { - this.log.error("Using removed Babel 5 option: " + alias + "." + _key2 + " - " + _removed2.default[_key2].message, ReferenceError); - } else { - var unknownOptErr = "Unknown option: " + alias + "." + _key2 + ". Check out http://babeljs.io/docs/usage/options/ for more information about options."; - var presetConfigErr = "A common cause of this error is the presence of a configuration options object without the corresponding preset name. Example:\n\nInvalid:\n `{ presets: [{option: value}] }`\nValid:\n `{ presets: [['presetName', {option: value}]] }`\n\nFor more detailed information on preset configuration, please see http://babeljs.io/docs/plugins/#pluginpresets-options."; - - this.log.error(unknownOptErr + "\n\n" + presetConfigErr, ReferenceError); - } - } - } - - (0, _index.normaliseOptions)(opts); - - if (opts.plugins) { - opts.plugins = OptionManager.normalisePlugins(loc, dirname, opts.plugins); - } - - if (opts.presets) { - if (opts.passPerPreset) { - opts.presets = this.resolvePresets(opts.presets, dirname, function (preset, presetLoc) { - _this.mergeOptions({ - options: preset, - extending: preset, - alias: presetLoc, - loc: presetLoc, - dirname: dirname - }); - }); - } else { - this.mergePresets(opts.presets, dirname); - delete opts.presets; - } - } - - if (rawOpts === extendingOpts) { - (0, _assign2.default)(extendingOpts, opts); - } else { - (0, _merge2.default)(extendingOpts || this.options, opts); - } - }; - - OptionManager.prototype.mergePresets = function mergePresets(presets, dirname) { - var _this2 = this; - - this.resolvePresets(presets, dirname, function (presetOpts, presetLoc) { - _this2.mergeOptions({ - options: presetOpts, - alias: presetLoc, - loc: presetLoc, - dirname: _path2.default.dirname(presetLoc || "") - }); - }); - }; - - OptionManager.prototype.resolvePresets = function resolvePresets(presets, dirname, onResolve) { - return presets.map(function (val) { - var options = void 0; - if (Array.isArray(val)) { - if (val.length > 2) { - throw new Error("Unexpected extra options " + (0, _stringify2.default)(val.slice(2)) + " passed to preset."); - } - - var _val = val; - val = _val[0]; - options = _val[1]; - } - - var presetLoc = void 0; - try { - if (typeof val === "string") { - presetLoc = (0, _resolve2.default)("babel-preset-" + val, dirname) || (0, _resolve2.default)(val, dirname); - - if (!presetLoc) { - var matches = val.match(/^(@[^/]+)\/(.+)$/); - if (matches) { - var orgName = matches[1], - presetPath = matches[2]; - - val = orgName + "/babel-preset-" + presetPath; - presetLoc = (0, _resolve2.default)(val, dirname); - } - } - - if (!presetLoc) { - throw new Error("Couldn't find preset " + (0, _stringify2.default)(val) + " relative to directory " + (0, _stringify2.default)(dirname)); - } - - val = require(presetLoc); - } - - if ((typeof val === "undefined" ? "undefined" : (0, _typeof3.default)(val)) === "object" && val.__esModule) { - if (val.default) { - val = val.default; - } else { - var _val2 = val, - __esModule = _val2.__esModule, - rest = (0, _objectWithoutProperties3.default)(_val2, ["__esModule"]); - - val = rest; - } - } - - if ((typeof val === "undefined" ? "undefined" : (0, _typeof3.default)(val)) === "object" && val.buildPreset) val = val.buildPreset; - - if (typeof val !== "function" && options !== undefined) { - throw new Error("Options " + (0, _stringify2.default)(options) + " passed to " + (presetLoc || "a preset") + " which does not accept options."); - } - - if (typeof val === "function") val = val(context, options); - - if ((typeof val === "undefined" ? "undefined" : (0, _typeof3.default)(val)) !== "object") { - throw new Error("Unsupported preset format: " + val + "."); - } - - onResolve && onResolve(val, presetLoc); - } catch (e) { - if (presetLoc) { - e.message += " (While processing preset: " + (0, _stringify2.default)(presetLoc) + ")"; - } - throw e; - } - return val; - }); - }; - - OptionManager.prototype.normaliseOptions = function normaliseOptions() { - var opts = this.options; - - for (var _key3 in _config3.default) { - var option = _config3.default[_key3]; - var val = opts[_key3]; - - if (!val && option.optional) continue; - - if (option.alias) { - opts[option.alias] = opts[option.alias] || val; - } else { - opts[_key3] = val; - } - } - }; - - OptionManager.prototype.init = function init() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - for (var _iterator2 = (0, _buildConfigChain2.default)(opts, this.log), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref3; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref3 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref3 = _i2.value; - } - - var _config = _ref3; - - this.mergeOptions(_config); - } - - this.normaliseOptions(opts); - - return this.options; - }; - - return OptionManager; -}(); - -exports.default = OptionManager; - - -OptionManager.memoisedPlugins = []; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/parsers.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/parsers.js deleted file mode 100644 index 499b754f9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/parsers.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.filename = undefined; -exports.boolean = boolean; -exports.booleanString = booleanString; -exports.list = list; - -var _slash = require("slash"); - -var _slash2 = _interopRequireDefault(_slash); - -var _util = require("../../../util"); - -var util = _interopRequireWildcard(_util); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var filename = exports.filename = _slash2.default; - -function boolean(val) { - return !!val; -} - -function booleanString(val) { - return util.booleanify(val); -} - -function list(val) { - return util.list(val); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/removed.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/removed.js deleted file mode 100644 index 0fecbf68d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/file/options/removed.js +++ /dev/null @@ -1,50 +0,0 @@ -"use strict"; - -module.exports = { - "auxiliaryComment": { - "message": "Use `auxiliaryCommentBefore` or `auxiliaryCommentAfter`" - }, - "blacklist": { - "message": "Put the specific transforms you want in the `plugins` option" - }, - "breakConfig": { - "message": "This is not a necessary option in Babel 6" - }, - "experimental": { - "message": "Put the specific transforms you want in the `plugins` option" - }, - "externalHelpers": { - "message": "Use the `external-helpers` plugin instead. Check out http://babeljs.io/docs/plugins/external-helpers/" - }, - "extra": { - "message": "" - }, - "jsxPragma": { - "message": "use the `pragma` option in the `react-jsx` plugin . Check out http://babeljs.io/docs/plugins/transform-react-jsx/" - }, - - "loose": { - "message": "Specify the `loose` option for the relevant plugin you are using or use a preset that sets the option." - }, - "metadataUsedHelpers": { - "message": "Not required anymore as this is enabled by default" - }, - "modules": { - "message": "Use the corresponding module transform plugin in the `plugins` option. Check out http://babeljs.io/docs/plugins/#modules" - }, - "nonStandard": { - "message": "Use the `react-jsx` and `flow-strip-types` plugins to support JSX and Flow. Also check out the react preset http://babeljs.io/docs/plugins/preset-react/" - }, - "optional": { - "message": "Put the specific transforms you want in the `plugins` option" - }, - "sourceMapName": { - "message": "Use the `sourceMapTarget` option" - }, - "stage": { - "message": "Check out the corresponding stage-x presets http://babeljs.io/docs/plugins/#presets" - }, - "whitelist": { - "message": "Put the specific transforms you want in the `plugins` option" - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/internal-plugins/block-hoist.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/internal-plugins/block-hoist.js deleted file mode 100644 index 9630847a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/internal-plugins/block-hoist.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _plugin = require("../plugin"); - -var _plugin2 = _interopRequireDefault(_plugin); - -var _sortBy = require("lodash/sortBy"); - -var _sortBy2 = _interopRequireDefault(_sortBy); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = new _plugin2.default({ - - name: "internal.blockHoist", - - visitor: { - Block: { - exit: function exit(_ref) { - var node = _ref.node; - - var hasChange = false; - for (var i = 0; i < node.body.length; i++) { - var bodyNode = node.body[i]; - if (bodyNode && bodyNode._blockHoist != null) { - hasChange = true; - break; - } - } - if (!hasChange) return; - - node.body = (0, _sortBy2.default)(node.body, function (bodyNode) { - var priority = bodyNode && bodyNode._blockHoist; - if (priority == null) priority = 1; - if (priority === true) priority = 2; - - return -1 * priority; - }); - } - } - } -}); -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/internal-plugins/shadow-functions.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/internal-plugins/shadow-functions.js deleted file mode 100644 index ae1d7b3d1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/internal-plugins/shadow-functions.js +++ /dev/null @@ -1,132 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _symbol = require("babel-runtime/core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -var _plugin = require("../plugin"); - -var _plugin2 = _interopRequireDefault(_plugin); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SUPER_THIS_BOUND = (0, _symbol2.default)("super this bound"); - -var superVisitor = { - CallExpression: function CallExpression(path) { - if (!path.get("callee").isSuper()) return; - - var node = path.node; - - if (node[SUPER_THIS_BOUND]) return; - node[SUPER_THIS_BOUND] = true; - - path.replaceWith(t.assignmentExpression("=", this.id, node)); - } -}; - -exports.default = new _plugin2.default({ - name: "internal.shadowFunctions", - - visitor: { - ThisExpression: function ThisExpression(path) { - remap(path, "this"); - }, - ReferencedIdentifier: function ReferencedIdentifier(path) { - if (path.node.name === "arguments") { - remap(path, "arguments"); - } - } - } -}); - - -function shouldShadow(path, shadowPath) { - if (path.is("_forceShadow")) { - return true; - } else { - return shadowPath; - } -} - -function remap(path, key) { - var shadowPath = path.inShadow(key); - if (!shouldShadow(path, shadowPath)) return; - - var shadowFunction = path.node._shadowedFunctionLiteral; - - var currentFunction = void 0; - var passedShadowFunction = false; - - var fnPath = path.find(function (innerPath) { - if (innerPath.parentPath && innerPath.parentPath.isClassProperty() && innerPath.key === "value") { - return true; - } - if (path === innerPath) return false; - if (innerPath.isProgram() || innerPath.isFunction()) { - currentFunction = currentFunction || innerPath; - } - - if (innerPath.isProgram()) { - passedShadowFunction = true; - - return true; - } else if (innerPath.isFunction() && !innerPath.isArrowFunctionExpression()) { - if (shadowFunction) { - if (innerPath === shadowFunction || innerPath.node === shadowFunction.node) return true; - } else { - if (!innerPath.is("shadow")) return true; - } - - passedShadowFunction = true; - return false; - } - - return false; - }); - - if (shadowFunction && fnPath.isProgram() && !shadowFunction.isProgram()) { - fnPath = path.findParent(function (p) { - return p.isProgram() || p.isFunction(); - }); - } - - if (fnPath === currentFunction) return; - - if (!passedShadowFunction) return; - - var cached = fnPath.getData(key); - if (cached) return path.replaceWith(cached); - - var id = path.scope.generateUidIdentifier(key); - - fnPath.setData(key, id); - - var classPath = fnPath.findParent(function (p) { - return p.isClass(); - }); - var hasSuperClass = !!(classPath && classPath.node && classPath.node.superClass); - - if (key === "this" && fnPath.isMethod({ kind: "constructor" }) && hasSuperClass) { - fnPath.scope.push({ id: id }); - - fnPath.traverse(superVisitor, { id: id }); - } else { - var init = key === "this" ? t.thisExpression() : t.identifier(key); - - if (shadowFunction) init._shadowedFunctionLiteral = shadowFunction; - - fnPath.scope.push({ id: id, init: init }); - } - - return path.replaceWith(id); -} -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/pipeline.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/pipeline.js deleted file mode 100644 index 0bb44db4a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/pipeline.js +++ /dev/null @@ -1,81 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _normalizeAst = require("../helpers/normalize-ast"); - -var _normalizeAst2 = _interopRequireDefault(_normalizeAst); - -var _plugin = require("./plugin"); - -var _plugin2 = _interopRequireDefault(_plugin); - -var _file = require("./file"); - -var _file2 = _interopRequireDefault(_file); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Pipeline = function () { - function Pipeline() { - (0, _classCallCheck3.default)(this, Pipeline); - } - - Pipeline.prototype.lint = function lint(code) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - opts.code = false; - opts.mode = "lint"; - return this.transform(code, opts); - }; - - Pipeline.prototype.pretransform = function pretransform(code, opts) { - var file = new _file2.default(opts, this); - return file.wrap(code, function () { - file.addCode(code); - file.parseCode(code); - return file; - }); - }; - - Pipeline.prototype.transform = function transform(code, opts) { - var file = new _file2.default(opts, this); - return file.wrap(code, function () { - file.addCode(code); - file.parseCode(code); - return file.transform(); - }); - }; - - Pipeline.prototype.analyse = function analyse(code) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var visitor = arguments[2]; - - opts.code = false; - if (visitor) { - opts.plugins = opts.plugins || []; - opts.plugins.push(new _plugin2.default({ visitor: visitor })); - } - return this.transform(code, opts).metadata; - }; - - Pipeline.prototype.transformFromAst = function transformFromAst(ast, code, opts) { - ast = (0, _normalizeAst2.default)(ast); - - var file = new _file2.default(opts, this); - return file.wrap(code, function () { - file.addCode(code); - file.addAst(ast); - return file.transform(); - }); - }; - - return Pipeline; -}(); - -exports.default = Pipeline; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/plugin-pass.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/plugin-pass.js deleted file mode 100644 index a0ae5d916..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/plugin-pass.js +++ /dev/null @@ -1,71 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _store = require("../store"); - -var _store2 = _interopRequireDefault(_store); - -var _file5 = require("./file"); - -var _file6 = _interopRequireDefault(_file5); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var PluginPass = function (_Store) { - (0, _inherits3.default)(PluginPass, _Store); - - function PluginPass(file, plugin) { - var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - (0, _classCallCheck3.default)(this, PluginPass); - - var _this = (0, _possibleConstructorReturn3.default)(this, _Store.call(this)); - - _this.plugin = plugin; - _this.key = plugin.key; - _this.file = file; - _this.opts = options; - return _this; - } - - PluginPass.prototype.addHelper = function addHelper() { - var _file; - - return (_file = this.file).addHelper.apply(_file, arguments); - }; - - PluginPass.prototype.addImport = function addImport() { - var _file2; - - return (_file2 = this.file).addImport.apply(_file2, arguments); - }; - - PluginPass.prototype.getModuleName = function getModuleName() { - var _file3; - - return (_file3 = this.file).getModuleName.apply(_file3, arguments); - }; - - PluginPass.prototype.buildCodeFrameError = function buildCodeFrameError() { - var _file4; - - return (_file4 = this.file).buildCodeFrameError.apply(_file4, arguments); - }; - - return PluginPass; -}(_store2.default); - -exports.default = PluginPass; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/plugin.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/plugin.js deleted file mode 100644 index dea266100..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/transformation/plugin.js +++ /dev/null @@ -1,163 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _optionManager = require("./file/options/option-manager"); - -var _optionManager2 = _interopRequireDefault(_optionManager); - -var _babelMessages = require("babel-messages"); - -var messages = _interopRequireWildcard(_babelMessages); - -var _store = require("../store"); - -var _store2 = _interopRequireDefault(_store); - -var _babelTraverse = require("babel-traverse"); - -var _babelTraverse2 = _interopRequireDefault(_babelTraverse); - -var _assign = require("lodash/assign"); - -var _assign2 = _interopRequireDefault(_assign); - -var _clone = require("lodash/clone"); - -var _clone2 = _interopRequireDefault(_clone); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var GLOBAL_VISITOR_PROPS = ["enter", "exit"]; - -var Plugin = function (_Store) { - (0, _inherits3.default)(Plugin, _Store); - - function Plugin(plugin, key) { - (0, _classCallCheck3.default)(this, Plugin); - - var _this = (0, _possibleConstructorReturn3.default)(this, _Store.call(this)); - - _this.initialized = false; - _this.raw = (0, _assign2.default)({}, plugin); - _this.key = _this.take("name") || key; - - _this.manipulateOptions = _this.take("manipulateOptions"); - _this.post = _this.take("post"); - _this.pre = _this.take("pre"); - _this.visitor = _this.normaliseVisitor((0, _clone2.default)(_this.take("visitor")) || {}); - return _this; - } - - Plugin.prototype.take = function take(key) { - var val = this.raw[key]; - delete this.raw[key]; - return val; - }; - - Plugin.prototype.chain = function chain(target, key) { - if (!target[key]) return this[key]; - if (!this[key]) return target[key]; - - var fns = [target[key], this[key]]; - - return function () { - var val = void 0; - - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - for (var _iterator = fns, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var fn = _ref; - - if (fn) { - var ret = fn.apply(this, args); - if (ret != null) val = ret; - } - } - return val; - }; - }; - - Plugin.prototype.maybeInherit = function maybeInherit(loc) { - var inherits = this.take("inherits"); - if (!inherits) return; - - inherits = _optionManager2.default.normalisePlugin(inherits, loc, "inherits"); - - this.manipulateOptions = this.chain(inherits, "manipulateOptions"); - this.post = this.chain(inherits, "post"); - this.pre = this.chain(inherits, "pre"); - this.visitor = _babelTraverse2.default.visitors.merge([inherits.visitor, this.visitor]); - }; - - Plugin.prototype.init = function init(loc, i) { - if (this.initialized) return; - this.initialized = true; - - this.maybeInherit(loc); - - for (var key in this.raw) { - throw new Error(messages.get("pluginInvalidProperty", loc, i, key)); - } - }; - - Plugin.prototype.normaliseVisitor = function normaliseVisitor(visitor) { - for (var _iterator2 = GLOBAL_VISITOR_PROPS, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var key = _ref2; - - if (visitor[key]) { - throw new Error("Plugins aren't allowed to specify catch-all enter/exit handlers. Please target individual nodes."); - } - } - - _babelTraverse2.default.explode(visitor); - return visitor; - }; - - return Plugin; -}(_store2.default); - -exports.default = Plugin; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/util.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/util.js deleted file mode 100644 index 4c0f14e90..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/lib/util.js +++ /dev/null @@ -1,192 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.inspect = exports.inherits = undefined; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _util = require("util"); - -Object.defineProperty(exports, "inherits", { - enumerable: true, - get: function get() { - return _util.inherits; - } -}); -Object.defineProperty(exports, "inspect", { - enumerable: true, - get: function get() { - return _util.inspect; - } -}); -exports.canCompile = canCompile; -exports.list = list; -exports.regexify = regexify; -exports.arrayify = arrayify; -exports.booleanify = booleanify; -exports.shouldIgnore = shouldIgnore; - -var _escapeRegExp = require("lodash/escapeRegExp"); - -var _escapeRegExp2 = _interopRequireDefault(_escapeRegExp); - -var _startsWith = require("lodash/startsWith"); - -var _startsWith2 = _interopRequireDefault(_startsWith); - -var _isBoolean = require("lodash/isBoolean"); - -var _isBoolean2 = _interopRequireDefault(_isBoolean); - -var _minimatch = require("minimatch"); - -var _minimatch2 = _interopRequireDefault(_minimatch); - -var _includes = require("lodash/includes"); - -var _includes2 = _interopRequireDefault(_includes); - -var _isString = require("lodash/isString"); - -var _isString2 = _interopRequireDefault(_isString); - -var _isRegExp = require("lodash/isRegExp"); - -var _isRegExp2 = _interopRequireDefault(_isRegExp); - -var _path = require("path"); - -var _path2 = _interopRequireDefault(_path); - -var _slash = require("slash"); - -var _slash2 = _interopRequireDefault(_slash); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function canCompile(filename, altExts) { - var exts = altExts || canCompile.EXTENSIONS; - var ext = _path2.default.extname(filename); - return (0, _includes2.default)(exts, ext); -} - -canCompile.EXTENSIONS = [".js", ".jsx", ".es6", ".es"]; - -function list(val) { - if (!val) { - return []; - } else if (Array.isArray(val)) { - return val; - } else if (typeof val === "string") { - return val.split(","); - } else { - return [val]; - } -} - -function regexify(val) { - if (!val) { - return new RegExp(/.^/); - } - - if (Array.isArray(val)) { - val = new RegExp(val.map(_escapeRegExp2.default).join("|"), "i"); - } - - if (typeof val === "string") { - val = (0, _slash2.default)(val); - - if ((0, _startsWith2.default)(val, "./") || (0, _startsWith2.default)(val, "*/")) val = val.slice(2); - if ((0, _startsWith2.default)(val, "**/")) val = val.slice(3); - - var regex = _minimatch2.default.makeRe(val, { nocase: true }); - return new RegExp(regex.source.slice(1, -1), "i"); - } - - if ((0, _isRegExp2.default)(val)) { - return val; - } - - throw new TypeError("illegal type for regexify"); -} - -function arrayify(val, mapFn) { - if (!val) return []; - if ((0, _isBoolean2.default)(val)) return arrayify([val], mapFn); - if ((0, _isString2.default)(val)) return arrayify(list(val), mapFn); - - if (Array.isArray(val)) { - if (mapFn) val = val.map(mapFn); - return val; - } - - return [val]; -} - -function booleanify(val) { - if (val === "true" || val == 1) { - return true; - } - - if (val === "false" || val == 0 || !val) { - return false; - } - - return val; -} - -function shouldIgnore(filename) { - var ignore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - var only = arguments[2]; - - filename = filename.replace(/\\/g, "/"); - - if (only) { - for (var _iterator = only, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var pattern = _ref; - - if (_shouldIgnore(pattern, filename)) return false; - } - return true; - } else if (ignore.length) { - for (var _iterator2 = ignore, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var _pattern = _ref2; - - if (_shouldIgnore(_pattern, filename)) return true; - } - } - - return false; -} - -function _shouldIgnore(pattern, filename) { - if (typeof pattern === "function") { - return pattern(filename); - } else { - return pattern.test(filename); - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-core/package.json deleted file mode 100644 index a3c1c404a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/package.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "_args": [ - [ - "babel-core@^6.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-jest" - ] - ], - "_from": "babel-core@>=6.0.0 <7.0.0", - "_id": "babel-core@6.18.2", - "_inCache": true, - "_installable": true, - "_location": "/babel-core", - "_nodeVersion": "6.8.1", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-core-6.18.2.tgz_1478035855416_0.08754534856416285" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "babel-core", - "raw": "babel-core@^6.0.0", - "rawSpec": "^6.0.0", - "scope": null, - "spec": ">=6.0.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-jest", - "/babel-register" - ], - "_resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.18.2.tgz", - "_shasum": "d8bb14dd6986fa4f3566a26ceda3964fa0e04e5b", - "_shrinkwrap": null, - "_spec": "babel-core@^6.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-jest", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "babel-code-frame": "^6.16.0", - "babel-generator": "^6.18.0", - "babel-helpers": "^6.16.0", - "babel-messages": "^6.8.0", - "babel-register": "^6.18.0", - "babel-runtime": "^6.9.1", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.11.0", - "convert-source-map": "^1.1.0", - "debug": "^2.1.1", - "json5": "^0.5.0", - "lodash": "^4.2.0", - "minimatch": "^3.0.2", - "path-is-absolute": "^1.0.0", - "private": "^0.1.6", - "slash": "^1.0.0", - "source-map": "^0.5.0" - }, - "description": "Babel compiler core.", - "devDependencies": { - "babel-helper-fixtures": "^6.18.2", - "babel-helper-transform-fixture-test-runner": "^6.18.2", - "babel-polyfill": "^6.16.0" - }, - "directories": {}, - "dist": { - "shasum": "d8bb14dd6986fa4f3566a26ceda3964fa0e04e5b", - "tarball": "https://registry.npmjs.org/babel-core/-/babel-core-6.18.2.tgz" - }, - "homepage": "https://babeljs.io/", - "keywords": [ - "6to5", - "babel", - "classes", - "const", - "es6", - "harmony", - "let", - "modules", - "transpile", - "transpiler", - "var" - ], - "license": "MIT", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-core", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-core" - }, - "scripts": { - "bench": "make bench", - "test": "make test" - }, - "version": "6.18.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-core/register.js b/fundamentals/bug-challenge-es6/node_modules/babel-core/register.js deleted file mode 100644 index 97d35f276..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-core/register.js +++ /dev/null @@ -1,3 +0,0 @@ -/* eslint max-len: 0 */ -// TODO: eventually deprecate this console.trace("use the `babel-register` package instead of `babel-core/register`"); -module.exports = require("babel-register"); diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-generator/README.md deleted file mode 100644 index 73fad1fd2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# babel-generator - -> Turns an AST into code. - -## Install - -```sh -$ npm install babel-generator -``` - -## Usage - -```js -import {parse} from 'babylon'; -import generate from 'babel-generator'; - -const code = 'class Example {}'; -const ast = parse(code); - -const output = generate(ast, { /* options */ }, code); -``` - -## Options - -Options for formatting output: - -name | type | default | description ------------------------|----------|-----------------|-------------------------------------------------------------------------- -auxiliaryCommentBefore | string | | Optional string to add as a block comment at the start of the output file -auxiliaryCommentAfter | string | | Optional string to add as a block comment at the end of the output file -shouldPrintComment | function | `opts.comments` | Function that takes a comment (as a string) and returns `true` if the comment should be included in the output. By default, comments are included if `opts.comments` is `true` or if `opts.minifed` is `false` and the comment contains `@preserve` or `@license` -retainLines | boolean | `false` | Attempt to use the same line numbers in the output code as in the source code (helps preserve stack traces) -retainFunctionParens | boolean | `false` | Retain parens around function expressions (could be used to change engine parsing behavior) -comments | boolean | `true` | Should comments be included in output -compact | boolean or `'auto'` | `opts.minified` | Set to `true` to avoid adding whitespace for formatting -minified | boolean | `false` | Should the output be minified -concise | boolean | `false` | Set to `true` to reduce whitespace (but not as much as `opts.compact`) -quotes | `'single'` or `'double'` | autodetect based on `ast.tokens` | The type of quote to use in the output -filename | string | | Used in warning messages -flowCommaSeparator | boolean | `false` | Set to `true` to use commas instead of semicolons as Flow property separators -jsonCompatibleStrings | boolean | `false` | Set to true to run `jsesc` with "json": true to print "\u00A9" vs. "©"; -Options for source maps: - -name | type | default | description ------------------------|----------|-----------------|-------------------------------------------------------------------------- -sourceMaps | boolean | `false` | Enable generating source maps -sourceMapTarget | string | | The filename of the generated code that the source map will be associated with -sourceRoot | string | | A root for all relative URLs in the source map -sourceFileName | string | | The filename for the source code (i.e. the code in the `code` argument). This will only be used if `code` is a string. - -## AST from Multiple Sources - -In most cases, Babel does a 1:1 transformation of input-file to output-file. However, -you may be dealing with AST constructed from multiple sources - JS files, templates, etc. -If this is the case, and you want the sourcemaps to reflect the correct sources, you'll need -to make some changes to your code. - -First, each node with a `loc` property (which indicates that node's original placement in the -source document) must also include a `loc.filename` property, set to the source filename. - -Second, you should pass an object to `generate` as the `code` parameter. Keys -should be the source filenames, and values should be the source content. - -Here's an example of what that might look like: - -```js -import {parse} from 'babylon'; -import generate from 'babel-generator'; - -const a = 'var a = 1;'; -const b = 'var b = 2;'; -const astA = parse(a, { filename: 'a.js' }); -const astB = parse(b, { filename: 'b.js' }); -const ast = { - type: 'Program', - body: [].concat(astA.body, ast2.body) -}; - -const { code, map } = generate(ast, { /* options */ }, { - 'a.js': a, - 'b.js': b -}); - -// Sourcemap will point to both a.js and b.js where appropriate. -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/buffer.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/buffer.js deleted file mode 100644 index 73e5100ce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/buffer.js +++ /dev/null @@ -1,185 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _trimEnd = require("lodash/trimEnd"); - -var _trimEnd2 = _interopRequireDefault(_trimEnd); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SPACES_RE = /^[ \t]+$/; - -var Buffer = function () { - function Buffer(map) { - (0, _classCallCheck3.default)(this, Buffer); - this._map = null; - this._buf = []; - this._last = ""; - this._queue = []; - this._position = { - line: 1, - column: 0 - }; - this._sourcePosition = { - identifierName: null, - line: null, - column: null, - filename: null - }; - - this._map = map; - } - - Buffer.prototype.get = function get() { - this._flush(); - - return { - code: (0, _trimEnd2.default)(this._buf.join("")), - map: this._map ? this._map.get() : null - }; - }; - - Buffer.prototype.append = function append(str) { - this._flush(); - var _sourcePosition = this._sourcePosition, - line = _sourcePosition.line, - column = _sourcePosition.column, - filename = _sourcePosition.filename, - identifierName = _sourcePosition.identifierName; - - this._append(str, line, column, identifierName, filename); - }; - - Buffer.prototype.queue = function queue(str) { - if (str === "\n") while (this._queue.length > 0 && SPACES_RE.test(this._queue[0][0])) { - this._queue.shift(); - }var _sourcePosition2 = this._sourcePosition, - line = _sourcePosition2.line, - column = _sourcePosition2.column, - filename = _sourcePosition2.filename, - identifierName = _sourcePosition2.identifierName; - - this._queue.unshift([str, line, column, identifierName, filename]); - }; - - Buffer.prototype._flush = function _flush() { - var item = void 0; - while (item = this._queue.pop()) { - this._append.apply(this, item); - } - }; - - Buffer.prototype._append = function _append(str, line, column, identifierName, filename) { - if (this._map && str[0] !== "\n") { - this._map.mark(this._position.line, this._position.column, line, column, identifierName, filename); - } - - this._buf.push(str); - this._last = str[str.length - 1]; - - for (var i = 0; i < str.length; i++) { - if (str[i] === "\n") { - this._position.line++; - this._position.column = 0; - } else { - this._position.column++; - } - } - }; - - Buffer.prototype.removeTrailingNewline = function removeTrailingNewline() { - if (this._queue.length > 0 && this._queue[0][0] === "\n") this._queue.shift(); - }; - - Buffer.prototype.removeLastSemicolon = function removeLastSemicolon() { - if (this._queue.length > 0 && this._queue[0][0] === ";") this._queue.shift(); - }; - - Buffer.prototype.endsWith = function endsWith(suffix) { - if (suffix.length === 1) { - var last = void 0; - if (this._queue.length > 0) { - var str = this._queue[0][0]; - last = str[str.length - 1]; - } else { - last = this._last; - } - - return last === suffix; - } - - var end = this._last + this._queue.reduce(function (acc, item) { - return item[0] + acc; - }, ""); - if (suffix.length <= end.length) { - return end.slice(-suffix.length) === suffix; - } - - return false; - }; - - Buffer.prototype.hasContent = function hasContent() { - return this._queue.length > 0 || !!this._last; - }; - - Buffer.prototype.source = function source(prop, loc) { - if (prop && !loc) return; - - var pos = loc ? loc[prop] : null; - - this._sourcePosition.identifierName = loc && loc.identifierName || null; - this._sourcePosition.line = pos ? pos.line : null; - this._sourcePosition.column = pos ? pos.column : null; - this._sourcePosition.filename = loc && loc.filename || null; - }; - - Buffer.prototype.withSource = function withSource(prop, loc, cb) { - if (!this._map) return cb(); - - var originalLine = this._sourcePosition.line; - var originalColumn = this._sourcePosition.column; - var originalFilename = this._sourcePosition.filename; - var originalIdentifierName = this._sourcePosition.identifierName; - - this.source(prop, loc); - - cb(); - - this._sourcePosition.line = originalLine; - this._sourcePosition.column = originalColumn; - this._sourcePosition.filename = originalFilename; - this._sourcePosition.identifierName = originalIdentifierName; - }; - - Buffer.prototype.getCurrentColumn = function getCurrentColumn() { - var extra = this._queue.reduce(function (acc, item) { - return item[0] + acc; - }, ""); - var lastIndex = extra.lastIndexOf("\n"); - - return lastIndex === -1 ? this._position.column + extra.length : extra.length - 1 - lastIndex; - }; - - Buffer.prototype.getCurrentLine = function getCurrentLine() { - var extra = this._queue.reduce(function (acc, item) { - return item[0] + acc; - }, ""); - - var count = 0; - for (var i = 0; i < extra.length; i++) { - if (extra[i] === "\n") count++; - } - - return this._position.line + count; - }; - - return Buffer; -}(); - -exports.default = Buffer; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/base.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/base.js deleted file mode 100644 index 3be3a8a53..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/base.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.File = File; -exports.Program = Program; -exports.BlockStatement = BlockStatement; -exports.Noop = Noop; -exports.Directive = Directive; - -var _types = require("./types"); - -Object.defineProperty(exports, "DirectiveLiteral", { - enumerable: true, - get: function get() { - return _types.StringLiteral; - } -}); -function File(node) { - this.print(node.program, node); -} - -function Program(node) { - this.printInnerComments(node, false); - - this.printSequence(node.directives, node); - if (node.directives && node.directives.length) this.newline(); - - this.printSequence(node.body, node); -} - -function BlockStatement(node) { - this.token("{"); - this.printInnerComments(node); - if (node.body.length) { - this.newline(); - - this.printSequence(node.directives, node, { indent: true }); - if (node.directives && node.directives.length) this.newline(); - - this.printSequence(node.body, node, { indent: true }); - this.removeTrailingNewline(); - - this.source("end", node.loc); - - if (!this.endsWith("\n")) this.newline(); - - this.rightBrace(); - } else { - this.source("end", node.loc); - this.token("}"); - } -} - -function Noop() {} - -function Directive(node) { - this.print(node.value, node); - this.semicolon(); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/classes.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/classes.js deleted file mode 100644 index 73f9cc3c5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/classes.js +++ /dev/null @@ -1,96 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.ClassDeclaration = ClassDeclaration; -exports.ClassBody = ClassBody; -exports.ClassProperty = ClassProperty; -exports.ClassMethod = ClassMethod; -function ClassDeclaration(node) { - this.printJoin(node.decorators, node); - this.word("class"); - - if (node.id) { - this.space(); - this.print(node.id, node); - } - - this.print(node.typeParameters, node); - - if (node.superClass) { - this.space(); - this.word("extends"); - this.space(); - this.print(node.superClass, node); - this.print(node.superTypeParameters, node); - } - - if (node.implements) { - this.space(); - this.word("implements"); - this.space(); - this.printList(node.implements, node); - } - - this.space(); - this.print(node.body, node); -} - -exports.ClassExpression = ClassDeclaration; -function ClassBody(node) { - this.token("{"); - this.printInnerComments(node); - if (node.body.length === 0) { - this.token("}"); - } else { - this.newline(); - - this.indent(); - this.printSequence(node.body, node); - this.dedent(); - - if (!this.endsWith("\n")) this.newline(); - - this.rightBrace(); - } -} - -function ClassProperty(node) { - this.printJoin(node.decorators, node); - - if (node.static) { - this.word("static"); - this.space(); - } - if (node.computed) { - this.token("["); - this.print(node.key, node); - this.token("]"); - } else { - this._variance(node); - this.print(node.key, node); - } - this.print(node.typeAnnotation, node); - if (node.value) { - this.space(); - this.token("="); - this.space(); - this.print(node.value, node); - } - this.semicolon(); -} - -function ClassMethod(node) { - this.printJoin(node.decorators, node); - - if (node.static) { - this.word("static"); - this.space(); - } - - if (node.kind === "constructorCall") { - this.word("call"); - this.space(); - } - - this._method(node); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/expressions.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/expressions.js deleted file mode 100644 index c6c070788..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/expressions.js +++ /dev/null @@ -1,240 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.LogicalExpression = exports.BinaryExpression = exports.AwaitExpression = exports.YieldExpression = undefined; -exports.UnaryExpression = UnaryExpression; -exports.DoExpression = DoExpression; -exports.ParenthesizedExpression = ParenthesizedExpression; -exports.UpdateExpression = UpdateExpression; -exports.ConditionalExpression = ConditionalExpression; -exports.NewExpression = NewExpression; -exports.SequenceExpression = SequenceExpression; -exports.ThisExpression = ThisExpression; -exports.Super = Super; -exports.Decorator = Decorator; -exports.CallExpression = CallExpression; -exports.EmptyStatement = EmptyStatement; -exports.ExpressionStatement = ExpressionStatement; -exports.AssignmentPattern = AssignmentPattern; -exports.AssignmentExpression = AssignmentExpression; -exports.BindExpression = BindExpression; -exports.MemberExpression = MemberExpression; -exports.MetaProperty = MetaProperty; - -var _isNumber = require("lodash/isNumber"); - -var _isNumber2 = _interopRequireDefault(_isNumber); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _node = require("../node"); - -var n = _interopRequireWildcard(_node); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function UnaryExpression(node) { - if (node.operator === "void" || node.operator === "delete" || node.operator === "typeof") { - this.word(node.operator); - this.space(); - } else { - this.token(node.operator); - } - - this.print(node.argument, node); -} - -function DoExpression(node) { - this.word("do"); - this.space(); - this.print(node.body, node); -} - -function ParenthesizedExpression(node) { - this.token("("); - this.print(node.expression, node); - this.token(")"); -} - -function UpdateExpression(node) { - if (node.prefix) { - this.token(node.operator); - this.print(node.argument, node); - } else { - this.print(node.argument, node); - this.token(node.operator); - } -} - -function ConditionalExpression(node) { - this.print(node.test, node); - this.space(); - this.token("?"); - this.space(); - this.print(node.consequent, node); - this.space(); - this.token(":"); - this.space(); - this.print(node.alternate, node); -} - -function NewExpression(node, parent) { - this.word("new"); - this.space(); - this.print(node.callee, node); - if (node.arguments.length === 0 && this.format.minified && !t.isCallExpression(parent, { callee: node }) && !t.isMemberExpression(parent) && !t.isNewExpression(parent)) return; - - this.token("("); - this.printList(node.arguments, node); - this.token(")"); -} - -function SequenceExpression(node) { - this.printList(node.expressions, node); -} - -function ThisExpression() { - this.word("this"); -} - -function Super() { - this.word("super"); -} - -function Decorator(node) { - this.token("@"); - this.print(node.expression, node); - this.newline(); -} - -function commaSeparatorNewline() { - this.token(","); - this.newline(); - - if (!this.endsWith("\n")) this.space(); -} - -function CallExpression(node) { - this.print(node.callee, node); - - this.token("("); - - var isPrettyCall = node._prettyCall; - - var separator = void 0; - if (isPrettyCall) { - separator = commaSeparatorNewline; - this.newline(); - this.indent(); - } - - this.printList(node.arguments, node, { separator: separator }); - - if (isPrettyCall) { - this.newline(); - this.dedent(); - } - - this.token(")"); -} - -function buildYieldAwait(keyword) { - return function (node) { - this.word(keyword); - - if (node.delegate) { - this.token("*"); - } - - if (node.argument) { - this.space(); - var terminatorState = this.startTerminatorless(); - this.print(node.argument, node); - this.endTerminatorless(terminatorState); - } - }; -} - -var YieldExpression = exports.YieldExpression = buildYieldAwait("yield"); -var AwaitExpression = exports.AwaitExpression = buildYieldAwait("await"); - -function EmptyStatement() { - this.semicolon(true); -} - -function ExpressionStatement(node) { - this.print(node.expression, node); - this.semicolon(); -} - -function AssignmentPattern(node) { - this.print(node.left, node); - this.space(); - this.token("="); - this.space(); - this.print(node.right, node); -} - -function AssignmentExpression(node, parent) { - var parens = this.inForStatementInitCounter && node.operator === "in" && !n.needsParens(node, parent); - - if (parens) { - this.token("("); - } - - this.print(node.left, node); - - this.space(); - if (node.operator === "in" || node.operator === "instanceof") { - this.word(node.operator); - } else { - this.token(node.operator); - } - this.space(); - - this.print(node.right, node); - - if (parens) { - this.token(")"); - } -} - -function BindExpression(node) { - this.print(node.object, node); - this.token("::"); - this.print(node.callee, node); -} - -exports.BinaryExpression = AssignmentExpression; -exports.LogicalExpression = AssignmentExpression; -function MemberExpression(node) { - this.print(node.object, node); - - if (!node.computed && t.isMemberExpression(node.property)) { - throw new TypeError("Got a MemberExpression for MemberExpression property"); - } - - var computed = node.computed; - if (t.isLiteral(node.property) && (0, _isNumber2.default)(node.property.value)) { - computed = true; - } - - if (computed) { - this.token("["); - this.print(node.property, node); - this.token("]"); - } else { - this.token("."); - this.print(node.property, node); - } -} - -function MetaProperty(node) { - this.print(node.meta, node); - this.token("."); - this.print(node.property, node); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/flow.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/flow.js deleted file mode 100644 index 6c23469b5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/flow.js +++ /dev/null @@ -1,411 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.AnyTypeAnnotation = AnyTypeAnnotation; -exports.ArrayTypeAnnotation = ArrayTypeAnnotation; -exports.BooleanTypeAnnotation = BooleanTypeAnnotation; -exports.BooleanLiteralTypeAnnotation = BooleanLiteralTypeAnnotation; -exports.NullLiteralTypeAnnotation = NullLiteralTypeAnnotation; -exports.DeclareClass = DeclareClass; -exports.DeclareFunction = DeclareFunction; -exports.DeclareInterface = DeclareInterface; -exports.DeclareModule = DeclareModule; -exports.DeclareModuleExports = DeclareModuleExports; -exports.DeclareTypeAlias = DeclareTypeAlias; -exports.DeclareVariable = DeclareVariable; -exports.ExistentialTypeParam = ExistentialTypeParam; -exports.FunctionTypeAnnotation = FunctionTypeAnnotation; -exports.FunctionTypeParam = FunctionTypeParam; -exports.InterfaceExtends = InterfaceExtends; -exports._interfaceish = _interfaceish; -exports._variance = _variance; -exports.InterfaceDeclaration = InterfaceDeclaration; -exports.IntersectionTypeAnnotation = IntersectionTypeAnnotation; -exports.MixedTypeAnnotation = MixedTypeAnnotation; -exports.EmptyTypeAnnotation = EmptyTypeAnnotation; -exports.NullableTypeAnnotation = NullableTypeAnnotation; - -var _types = require("./types"); - -Object.defineProperty(exports, "NumericLiteralTypeAnnotation", { - enumerable: true, - get: function get() { - return _types.NumericLiteral; - } -}); -Object.defineProperty(exports, "StringLiteralTypeAnnotation", { - enumerable: true, - get: function get() { - return _types.StringLiteral; - } -}); -exports.NumberTypeAnnotation = NumberTypeAnnotation; -exports.StringTypeAnnotation = StringTypeAnnotation; -exports.ThisTypeAnnotation = ThisTypeAnnotation; -exports.TupleTypeAnnotation = TupleTypeAnnotation; -exports.TypeofTypeAnnotation = TypeofTypeAnnotation; -exports.TypeAlias = TypeAlias; -exports.TypeAnnotation = TypeAnnotation; -exports.TypeParameter = TypeParameter; -exports.TypeParameterInstantiation = TypeParameterInstantiation; -exports.ObjectTypeAnnotation = ObjectTypeAnnotation; -exports.ObjectTypeCallProperty = ObjectTypeCallProperty; -exports.ObjectTypeIndexer = ObjectTypeIndexer; -exports.ObjectTypeProperty = ObjectTypeProperty; -exports.QualifiedTypeIdentifier = QualifiedTypeIdentifier; -exports.UnionTypeAnnotation = UnionTypeAnnotation; -exports.TypeCastExpression = TypeCastExpression; -exports.VoidTypeAnnotation = VoidTypeAnnotation; -function AnyTypeAnnotation() { - this.word("any"); -} - -function ArrayTypeAnnotation(node) { - this.print(node.elementType, node); - this.token("["); - this.token("]"); -} - -function BooleanTypeAnnotation() { - this.word("boolean"); -} - -function BooleanLiteralTypeAnnotation(node) { - this.word(node.value ? "true" : "false"); -} - -function NullLiteralTypeAnnotation() { - this.word("null"); -} - -function DeclareClass(node) { - this.word("declare"); - this.space(); - this.word("class"); - this.space(); - this._interfaceish(node); -} - -function DeclareFunction(node) { - this.word("declare"); - this.space(); - this.word("function"); - this.space(); - this.print(node.id, node); - this.print(node.id.typeAnnotation.typeAnnotation, node); - this.semicolon(); -} - -function DeclareInterface(node) { - this.word("declare"); - this.space(); - this.InterfaceDeclaration(node); -} - -function DeclareModule(node) { - this.word("declare"); - this.space(); - this.word("module"); - this.space(); - this.print(node.id, node); - this.space(); - this.print(node.body, node); -} - -function DeclareModuleExports(node) { - this.word("declare"); - this.space(); - this.word("module"); - this.token("."); - this.word("exports"); - this.print(node.typeAnnotation, node); -} - -function DeclareTypeAlias(node) { - this.word("declare"); - this.space(); - this.TypeAlias(node); -} - -function DeclareVariable(node) { - this.word("declare"); - this.space(); - this.word("var"); - this.space(); - this.print(node.id, node); - this.print(node.id.typeAnnotation, node); - this.semicolon(); -} - -function ExistentialTypeParam() { - this.token("*"); -} - -function FunctionTypeAnnotation(node, parent) { - this.print(node.typeParameters, node); - this.token("("); - this.printList(node.params, node); - - if (node.rest) { - if (node.params.length) { - this.token(","); - this.space(); - } - this.token("..."); - this.print(node.rest, node); - } - - this.token(")"); - - if (parent.type === "ObjectTypeCallProperty" || parent.type === "DeclareFunction") { - this.token(":"); - } else { - this.space(); - this.token("=>"); - } - - this.space(); - this.print(node.returnType, node); -} - -function FunctionTypeParam(node) { - this.print(node.name, node); - if (node.optional) this.token("?"); - this.token(":"); - this.space(); - this.print(node.typeAnnotation, node); -} - -function InterfaceExtends(node) { - this.print(node.id, node); - this.print(node.typeParameters, node); -} - -exports.ClassImplements = InterfaceExtends; -exports.GenericTypeAnnotation = InterfaceExtends; -function _interfaceish(node) { - this.print(node.id, node); - this.print(node.typeParameters, node); - if (node.extends.length) { - this.space(); - this.word("extends"); - this.space(); - this.printList(node.extends, node); - } - if (node.mixins && node.mixins.length) { - this.space(); - this.word("mixins"); - this.space(); - this.printList(node.mixins, node); - } - this.space(); - this.print(node.body, node); -} - -function _variance(node) { - if (node.variance === "plus") { - this.token("+"); - } else if (node.variance === "minus") { - this.token("-"); - } -} - -function InterfaceDeclaration(node) { - this.word("interface"); - this.space(); - this._interfaceish(node); -} - -function andSeparator() { - this.space(); - this.token("&"); - this.space(); -} - -function IntersectionTypeAnnotation(node) { - this.printJoin(node.types, node, { separator: andSeparator }); -} - -function MixedTypeAnnotation() { - this.word("mixed"); -} - -function EmptyTypeAnnotation() { - this.word("empty"); -} - -function NullableTypeAnnotation(node) { - this.token("?"); - this.print(node.typeAnnotation, node); -} - -function NumberTypeAnnotation() { - this.word("number"); -} - -function StringTypeAnnotation() { - this.word("string"); -} - -function ThisTypeAnnotation() { - this.word("this"); -} - -function TupleTypeAnnotation(node) { - this.token("["); - this.printList(node.types, node); - this.token("]"); -} - -function TypeofTypeAnnotation(node) { - this.word("typeof"); - this.space(); - this.print(node.argument, node); -} - -function TypeAlias(node) { - this.word("type"); - this.space(); - this.print(node.id, node); - this.print(node.typeParameters, node); - this.space(); - this.token("="); - this.space(); - this.print(node.right, node); - this.semicolon(); -} - -function TypeAnnotation(node) { - this.token(":"); - this.space(); - if (node.optional) this.token("?"); - this.print(node.typeAnnotation, node); -} - -function TypeParameter(node) { - this._variance(node); - - this.word(node.name); - - if (node.bound) { - this.print(node.bound, node); - } - - if (node.default) { - this.space(); - this.token("="); - this.space(); - this.print(node.default, node); - } -} - -function TypeParameterInstantiation(node) { - this.token("<"); - this.printList(node.params, node, {}); - this.token(">"); -} - -exports.TypeParameterDeclaration = TypeParameterInstantiation; -function ObjectTypeAnnotation(node) { - var _this = this; - - if (node.exact) { - this.token("{|"); - } else { - this.token("{"); - } - - var props = node.properties.concat(node.callProperties, node.indexers); - - if (props.length) { - this.space(); - - this.printJoin(props, node, { - indent: true, - statement: true, - iterator: function iterator() { - if (props.length !== 1) { - if (_this.format.flowCommaSeparator) { - _this.token(","); - } else { - _this.semicolon(); - } - _this.space(); - } - } - }); - - this.space(); - } - - if (node.exact) { - this.token("|}"); - } else { - this.token("}"); - } -} - -function ObjectTypeCallProperty(node) { - if (node.static) { - this.word("static"); - this.space(); - } - this.print(node.value, node); -} - -function ObjectTypeIndexer(node) { - if (node.static) { - this.word("static"); - this.space(); - } - this._variance(node); - this.token("["); - this.print(node.id, node); - this.token(":"); - this.space(); - this.print(node.key, node); - this.token("]"); - this.token(":"); - this.space(); - this.print(node.value, node); -} - -function ObjectTypeProperty(node) { - if (node.static) { - this.word("static"); - this.space(); - } - this._variance(node); - this.print(node.key, node); - if (node.optional) this.token("?"); - this.token(":"); - this.space(); - this.print(node.value, node); -} - -function QualifiedTypeIdentifier(node) { - this.print(node.qualification, node); - this.token("."); - this.print(node.id, node); -} - -function orSeparator() { - this.space(); - this.token("|"); - this.space(); -} - -function UnionTypeAnnotation(node) { - this.printJoin(node.types, node, { separator: orSeparator }); -} - -function TypeCastExpression(node) { - this.token("("); - this.print(node.expression, node); - this.print(node.typeAnnotation, node); - this.token(")"); -} - -function VoidTypeAnnotation() { - this.word("void"); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/jsx.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/jsx.js deleted file mode 100644 index 492452899..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/jsx.js +++ /dev/null @@ -1,116 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.JSXAttribute = JSXAttribute; -exports.JSXIdentifier = JSXIdentifier; -exports.JSXNamespacedName = JSXNamespacedName; -exports.JSXMemberExpression = JSXMemberExpression; -exports.JSXSpreadAttribute = JSXSpreadAttribute; -exports.JSXExpressionContainer = JSXExpressionContainer; -exports.JSXText = JSXText; -exports.JSXElement = JSXElement; -exports.JSXOpeningElement = JSXOpeningElement; -exports.JSXClosingElement = JSXClosingElement; -exports.JSXEmptyExpression = JSXEmptyExpression; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function JSXAttribute(node) { - this.print(node.name, node); - if (node.value) { - this.token("="); - this.print(node.value, node); - } -} - -function JSXIdentifier(node) { - this.word(node.name); -} - -function JSXNamespacedName(node) { - this.print(node.namespace, node); - this.token(":"); - this.print(node.name, node); -} - -function JSXMemberExpression(node) { - this.print(node.object, node); - this.token("."); - this.print(node.property, node); -} - -function JSXSpreadAttribute(node) { - this.token("{"); - this.token("..."); - this.print(node.argument, node); - this.token("}"); -} - -function JSXExpressionContainer(node) { - this.token("{"); - this.print(node.expression, node); - this.token("}"); -} - -function JSXText(node) { - this.token(node.value); -} - -function JSXElement(node) { - var open = node.openingElement; - this.print(open, node); - if (open.selfClosing) return; - - this.indent(); - for (var _iterator = node.children, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var child = _ref; - - this.print(child, node); - } - this.dedent(); - - this.print(node.closingElement, node); -} - -function spaceSeparator() { - this.space(); -} - -function JSXOpeningElement(node) { - this.token("<"); - this.print(node.name, node); - if (node.attributes.length > 0) { - this.space(); - this.printJoin(node.attributes, node, { separator: spaceSeparator }); - } - if (node.selfClosing) { - this.space(); - this.token("/>"); - } else { - this.token(">"); - } -} - -function JSXClosingElement(node) { - this.token(""); -} - -function JSXEmptyExpression() {} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/methods.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/methods.js deleted file mode 100644 index 6a0dfe7fd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/methods.js +++ /dev/null @@ -1,111 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.FunctionDeclaration = undefined; -exports._params = _params; -exports._method = _method; -exports.FunctionExpression = FunctionExpression; -exports.ArrowFunctionExpression = ArrowFunctionExpression; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _params(node) { - var _this = this; - - this.print(node.typeParameters, node); - this.token("("); - this.printList(node.params, node, { - iterator: function iterator(node) { - if (node.optional) _this.token("?"); - _this.print(node.typeAnnotation, node); - } - }); - this.token(")"); - - if (node.returnType) { - this.print(node.returnType, node); - } -} - -function _method(node) { - var kind = node.kind; - var key = node.key; - - if (kind === "method" || kind === "init") { - if (node.generator) { - this.token("*"); - } - } - - if (kind === "get" || kind === "set") { - this.word(kind); - this.space(); - } - - if (node.async) { - this.word("async"); - this.space(); - } - - if (node.computed) { - this.token("["); - this.print(key, node); - this.token("]"); - } else { - this.print(key, node); - } - - this._params(node); - this.space(); - this.print(node.body, node); -} - -function FunctionExpression(node) { - if (node.async) { - this.word("async"); - this.space(); - } - this.word("function"); - if (node.generator) this.token("*"); - - if (node.id) { - this.space(); - this.print(node.id, node); - } else { - this.space(); - } - - this._params(node); - this.space(); - this.print(node.body, node); -} - -exports.FunctionDeclaration = FunctionExpression; -function ArrowFunctionExpression(node) { - if (node.async) { - this.word("async"); - this.space(); - } - - var firstParam = node.params[0]; - - if (node.params.length === 1 && t.isIdentifier(firstParam) && !hasTypes(node, firstParam)) { - this.print(firstParam, node); - } else { - this._params(node); - } - - this.space(); - this.token("=>"); - this.space(); - - this.print(node.body, node); -} - -function hasTypes(node, param) { - return node.typeParameters || node.returnType || param.typeAnnotation || param.optional || param.trailingComments; -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/modules.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/modules.js deleted file mode 100644 index 3dcda7cca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/modules.js +++ /dev/null @@ -1,184 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.ImportSpecifier = ImportSpecifier; -exports.ImportDefaultSpecifier = ImportDefaultSpecifier; -exports.ExportDefaultSpecifier = ExportDefaultSpecifier; -exports.ExportSpecifier = ExportSpecifier; -exports.ExportNamespaceSpecifier = ExportNamespaceSpecifier; -exports.ExportAllDeclaration = ExportAllDeclaration; -exports.ExportNamedDeclaration = ExportNamedDeclaration; -exports.ExportDefaultDeclaration = ExportDefaultDeclaration; -exports.ImportDeclaration = ImportDeclaration; -exports.ImportNamespaceSpecifier = ImportNamespaceSpecifier; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function ImportSpecifier(node) { - this.print(node.imported, node); - if (node.local && node.local.name !== node.imported.name) { - this.space(); - this.word("as"); - this.space(); - this.print(node.local, node); - } -} - -function ImportDefaultSpecifier(node) { - this.print(node.local, node); -} - -function ExportDefaultSpecifier(node) { - this.print(node.exported, node); -} - -function ExportSpecifier(node) { - this.print(node.local, node); - if (node.exported && node.local.name !== node.exported.name) { - this.space(); - this.word("as"); - this.space(); - this.print(node.exported, node); - } -} - -function ExportNamespaceSpecifier(node) { - this.token("*"); - this.space(); - this.word("as"); - this.space(); - this.print(node.exported, node); -} - -function ExportAllDeclaration(node) { - this.word("export"); - this.space(); - this.token("*"); - if (node.exported) { - this.space(); - this.word("as"); - this.space(); - this.print(node.exported, node); - } - this.space(); - this.word("from"); - this.space(); - this.print(node.source, node); - this.semicolon(); -} - -function ExportNamedDeclaration() { - this.word("export"); - this.space(); - ExportDeclaration.apply(this, arguments); -} - -function ExportDefaultDeclaration() { - this.word("export"); - this.space(); - this.word("default"); - this.space(); - ExportDeclaration.apply(this, arguments); -} - -function ExportDeclaration(node) { - if (node.declaration) { - var declar = node.declaration; - this.print(declar, node); - if (!t.isStatement(declar)) this.semicolon(); - } else { - if (node.exportKind === "type") { - this.word("type"); - this.space(); - } - - var specifiers = node.specifiers.slice(0); - - var hasSpecial = false; - while (true) { - var first = specifiers[0]; - if (t.isExportDefaultSpecifier(first) || t.isExportNamespaceSpecifier(first)) { - hasSpecial = true; - this.print(specifiers.shift(), node); - if (specifiers.length) { - this.token(","); - this.space(); - } - } else { - break; - } - } - - if (specifiers.length || !specifiers.length && !hasSpecial) { - this.token("{"); - if (specifiers.length) { - this.space(); - this.printList(specifiers, node); - this.space(); - } - this.token("}"); - } - - if (node.source) { - this.space(); - this.word("from"); - this.space(); - this.print(node.source, node); - } - - this.semicolon(); - } -} - -function ImportDeclaration(node) { - this.word("import"); - this.space(); - - if (node.importKind === "type" || node.importKind === "typeof") { - this.word(node.importKind); - this.space(); - } - - var specifiers = node.specifiers.slice(0); - if (specifiers && specifiers.length) { - while (true) { - var first = specifiers[0]; - if (t.isImportDefaultSpecifier(first) || t.isImportNamespaceSpecifier(first)) { - this.print(specifiers.shift(), node); - if (specifiers.length) { - this.token(","); - this.space(); - } - } else { - break; - } - } - - if (specifiers.length) { - this.token("{"); - this.space(); - this.printList(specifiers, node); - this.space(); - this.token("}"); - } - - this.space(); - this.word("from"); - this.space(); - } - - this.print(node.source, node); - this.semicolon(); -} - -function ImportNamespaceSpecifier(node) { - this.token("*"); - this.space(); - this.word("as"); - this.space(); - this.print(node.local, node); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/statements.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/statements.js deleted file mode 100644 index 1866fe00f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/statements.js +++ /dev/null @@ -1,317 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.ThrowStatement = exports.BreakStatement = exports.ReturnStatement = exports.ContinueStatement = exports.ForAwaitStatement = exports.ForOfStatement = exports.ForInStatement = undefined; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.WithStatement = WithStatement; -exports.IfStatement = IfStatement; -exports.ForStatement = ForStatement; -exports.WhileStatement = WhileStatement; -exports.DoWhileStatement = DoWhileStatement; -exports.LabeledStatement = LabeledStatement; -exports.TryStatement = TryStatement; -exports.CatchClause = CatchClause; -exports.SwitchStatement = SwitchStatement; -exports.SwitchCase = SwitchCase; -exports.DebuggerStatement = DebuggerStatement; -exports.VariableDeclaration = VariableDeclaration; -exports.VariableDeclarator = VariableDeclarator; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function WithStatement(node) { - this.word("with"); - this.space(); - this.token("("); - this.print(node.object, node); - this.token(")"); - this.printBlock(node); -} - -function IfStatement(node) { - this.word("if"); - this.space(); - this.token("("); - this.print(node.test, node); - this.token(")"); - this.space(); - - var needsBlock = node.alternate && t.isIfStatement(getLastStatement(node.consequent)); - if (needsBlock) { - this.token("{"); - this.newline(); - this.indent(); - } - - this.printAndIndentOnComments(node.consequent, node); - - if (needsBlock) { - this.dedent(); - this.newline(); - this.token("}"); - } - - if (node.alternate) { - if (this.endsWith("}")) this.space(); - this.word("else"); - this.space(); - this.printAndIndentOnComments(node.alternate, node); - } -} - -function getLastStatement(statement) { - if (!t.isStatement(statement.body)) return statement; - return getLastStatement(statement.body); -} - -function ForStatement(node) { - this.word("for"); - this.space(); - this.token("("); - - this.inForStatementInitCounter++; - this.print(node.init, node); - this.inForStatementInitCounter--; - this.token(";"); - - if (node.test) { - this.space(); - this.print(node.test, node); - } - this.token(";"); - - if (node.update) { - this.space(); - this.print(node.update, node); - } - - this.token(")"); - this.printBlock(node); -} - -function WhileStatement(node) { - this.word("while"); - this.space(); - this.token("("); - this.print(node.test, node); - this.token(")"); - this.printBlock(node); -} - -var buildForXStatement = function buildForXStatement(op) { - return function (node) { - this.word("for"); - this.space(); - if (op === "await") { - this.word("await"); - this.space(); - op = "of"; - } - this.token("("); - - this.print(node.left, node); - this.space(); - this.word(op); - this.space(); - this.print(node.right, node); - this.token(")"); - this.printBlock(node); - }; -}; - -var ForInStatement = exports.ForInStatement = buildForXStatement("in"); -var ForOfStatement = exports.ForOfStatement = buildForXStatement("of"); -var ForAwaitStatement = exports.ForAwaitStatement = buildForXStatement("await"); - -function DoWhileStatement(node) { - this.word("do"); - this.space(); - this.print(node.body, node); - this.space(); - this.word("while"); - this.space(); - this.token("("); - this.print(node.test, node); - this.token(")"); - this.semicolon(); -} - -function buildLabelStatement(prefix) { - var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "label"; - - return function (node) { - this.word(prefix); - - var label = node[key]; - if (label) { - this.space(); - - var terminatorState = this.startTerminatorless(); - this.print(label, node); - this.endTerminatorless(terminatorState); - } - - this.semicolon(); - }; -} - -var ContinueStatement = exports.ContinueStatement = buildLabelStatement("continue"); -var ReturnStatement = exports.ReturnStatement = buildLabelStatement("return", "argument"); -var BreakStatement = exports.BreakStatement = buildLabelStatement("break"); -var ThrowStatement = exports.ThrowStatement = buildLabelStatement("throw", "argument"); - -function LabeledStatement(node) { - this.print(node.label, node); - this.token(":"); - this.space(); - this.print(node.body, node); -} - -function TryStatement(node) { - this.word("try"); - this.space(); - this.print(node.block, node); - this.space(); - - if (node.handlers) { - this.print(node.handlers[0], node); - } else { - this.print(node.handler, node); - } - - if (node.finalizer) { - this.space(); - this.word("finally"); - this.space(); - this.print(node.finalizer, node); - } -} - -function CatchClause(node) { - this.word("catch"); - this.space(); - this.token("("); - this.print(node.param, node); - this.token(")"); - this.space(); - this.print(node.body, node); -} - -function SwitchStatement(node) { - this.word("switch"); - this.space(); - this.token("("); - this.print(node.discriminant, node); - this.token(")"); - this.space(); - this.token("{"); - - this.printSequence(node.cases, node, { - indent: true, - addNewlines: function addNewlines(leading, cas) { - if (!leading && node.cases[node.cases.length - 1] === cas) return -1; - } - }); - - this.token("}"); -} - -function SwitchCase(node) { - if (node.test) { - this.word("case"); - this.space(); - this.print(node.test, node); - this.token(":"); - } else { - this.word("default"); - this.token(":"); - } - - if (node.consequent.length) { - this.newline(); - this.printSequence(node.consequent, node, { indent: true }); - } -} - -function DebuggerStatement() { - this.word("debugger"); - this.semicolon(); -} - -function variableDeclarationIdent() { - this.token(","); - this.newline(); - if (this.endsWith("\n")) for (var i = 0; i < 4; i++) { - this.space(true); - } -} - -function constDeclarationIdent() { - this.token(","); - this.newline(); - if (this.endsWith("\n")) for (var i = 0; i < 6; i++) { - this.space(true); - } -} - -function VariableDeclaration(node, parent) { - this.word(node.kind); - this.space(); - - var hasInits = false; - - if (!t.isFor(parent)) { - for (var _iterator = node.declarations, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var declar = _ref; - - if (declar.init) { - hasInits = true; - } - } - } - - var separator = void 0; - if (hasInits) { - separator = node.kind === "const" ? constDeclarationIdent : variableDeclarationIdent; - } - - this.printList(node.declarations, node, { separator: separator }); - - if (t.isFor(parent)) { - if (parent.left === node || parent.init === node) return; - } - - this.semicolon(); -} - -function VariableDeclarator(node) { - this.print(node.id, node); - this.print(node.id.typeAnnotation, node); - if (node.init) { - this.space(); - this.token("="); - this.space(); - this.print(node.init, node); - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/template-literals.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/template-literals.js deleted file mode 100644 index c1cdabbe0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/template-literals.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.TaggedTemplateExpression = TaggedTemplateExpression; -exports.TemplateElement = TemplateElement; -exports.TemplateLiteral = TemplateLiteral; -function TaggedTemplateExpression(node) { - this.print(node.tag, node); - this.print(node.quasi, node); -} - -function TemplateElement(node, parent) { - var isFirst = parent.quasis[0] === node; - var isLast = parent.quasis[parent.quasis.length - 1] === node; - - var value = (isFirst ? "`" : "}") + node.value.raw + (isLast ? "`" : "${"); - - if (!isFirst) this.space(); - this.token(value); - if (!isLast) this.space(); -} - -function TemplateLiteral(node) { - var quasis = node.quasis; - - for (var i = 0; i < quasis.length; i++) { - this.print(quasis[i], node); - - if (i + 1 < quasis.length) { - this.print(node.expressions[i], node); - } - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/types.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/types.js deleted file mode 100644 index d5e081fd2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/generators/types.js +++ /dev/null @@ -1,158 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.ArrayPattern = exports.ObjectPattern = exports.RestProperty = exports.SpreadProperty = exports.SpreadElement = undefined; -exports.Identifier = Identifier; -exports.RestElement = RestElement; -exports.ObjectExpression = ObjectExpression; -exports.ObjectMethod = ObjectMethod; -exports.ObjectProperty = ObjectProperty; -exports.ArrayExpression = ArrayExpression; -exports.RegExpLiteral = RegExpLiteral; -exports.BooleanLiteral = BooleanLiteral; -exports.NullLiteral = NullLiteral; -exports.NumericLiteral = NumericLiteral; -exports.StringLiteral = StringLiteral; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _jsesc = require("jsesc"); - -var _jsesc2 = _interopRequireDefault(_jsesc); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -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; } } - -function Identifier(node) { - if (node.variance) { - if (node.variance === "plus") { - this.token("+"); - } else if (node.variance === "minus") { - this.token("-"); - } - } - - this.word(node.name); -} - -function RestElement(node) { - this.token("..."); - this.print(node.argument, node); -} - -exports.SpreadElement = RestElement; -exports.SpreadProperty = RestElement; -exports.RestProperty = RestElement; -function ObjectExpression(node) { - var props = node.properties; - - this.token("{"); - this.printInnerComments(node); - - if (props.length) { - this.space(); - this.printList(props, node, { indent: true, statement: true }); - this.space(); - } - - this.token("}"); -} - -exports.ObjectPattern = ObjectExpression; -function ObjectMethod(node) { - this.printJoin(node.decorators, node); - this._method(node); -} - -function ObjectProperty(node) { - this.printJoin(node.decorators, node); - - if (node.computed) { - this.token("["); - this.print(node.key, node); - this.token("]"); - } else { - if (t.isAssignmentPattern(node.value) && t.isIdentifier(node.key) && node.key.name === node.value.left.name) { - this.print(node.value, node); - return; - } - - this.print(node.key, node); - - if (node.shorthand && t.isIdentifier(node.key) && t.isIdentifier(node.value) && node.key.name === node.value.name) { - return; - } - } - - this.token(":"); - this.space(); - this.print(node.value, node); -} - -function ArrayExpression(node) { - var elems = node.elements; - var len = elems.length; - - this.token("["); - this.printInnerComments(node); - - for (var i = 0; i < elems.length; i++) { - var elem = elems[i]; - if (elem) { - if (i > 0) this.space(); - this.print(elem, node); - if (i < len - 1) this.token(","); - } else { - this.token(","); - } - } - - this.token("]"); -} - -exports.ArrayPattern = ArrayExpression; -function RegExpLiteral(node) { - this.word("/" + node.pattern + "/" + node.flags); -} - -function BooleanLiteral(node) { - this.word(node.value ? "true" : "false"); -} - -function NullLiteral() { - this.word("null"); -} - -function NumericLiteral(node) { - var raw = this.getPossibleRaw(node); - var value = node.value + ""; - if (raw == null) { - this.number(value); - } else if (this.format.minified) { - this.number(raw.length < value.length ? raw : value); - } else { - this.number(raw); - } -} - -function StringLiteral(node, parent) { - var raw = this.getPossibleRaw(node); - if (!this.format.minified && raw != null) { - this.token(raw); - return; - } - - var opts = { - quotes: t.isJSX(parent) ? "double" : this.format.quotes, - wrap: true - }; - if (this.format.jsonCompatibleStrings) { - opts.json = true; - } - var val = (0, _jsesc2.default)(node.value, opts); - - return this.token(val); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/index.js deleted file mode 100644 index f517fae00..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/index.js +++ /dev/null @@ -1,168 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.CodeGenerator = undefined; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -exports.default = function (ast, opts, code) { - var gen = new Generator(ast, opts, code); - return gen.generate(); -}; - -var _detectIndent = require("detect-indent"); - -var _detectIndent2 = _interopRequireDefault(_detectIndent); - -var _sourceMap = require("./source-map"); - -var _sourceMap2 = _interopRequireDefault(_sourceMap); - -var _babelMessages = require("babel-messages"); - -var messages = _interopRequireWildcard(_babelMessages); - -var _printer = require("./printer"); - -var _printer2 = _interopRequireDefault(_printer); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Generator = function (_Printer) { - (0, _inherits3.default)(Generator, _Printer); - - function Generator(ast, opts, code) { - (0, _classCallCheck3.default)(this, Generator); - - opts = opts || {}; - - var tokens = ast.tokens || []; - var format = normalizeOptions(code, opts, tokens); - var map = opts.sourceMaps ? new _sourceMap2.default(opts, code) : null; - - var _this = (0, _possibleConstructorReturn3.default)(this, _Printer.call(this, format, map, tokens)); - - _this.ast = ast; - return _this; - } - - Generator.prototype.generate = function generate() { - return _Printer.prototype.generate.call(this, this.ast); - }; - - return Generator; -}(_printer2.default); - -function normalizeOptions(code, opts, tokens) { - var style = " "; - if (code && typeof code === "string") { - var indent = (0, _detectIndent2.default)(code).indent; - if (indent && indent !== " ") style = indent; - } - - var format = { - auxiliaryCommentBefore: opts.auxiliaryCommentBefore, - auxiliaryCommentAfter: opts.auxiliaryCommentAfter, - shouldPrintComment: opts.shouldPrintComment, - retainLines: opts.retainLines, - retainFunctionParens: opts.retainFunctionParens, - comments: opts.comments == null || opts.comments, - compact: opts.compact, - minified: opts.minified, - concise: opts.concise, - quotes: opts.quotes || findCommonStringDelimiter(code, tokens), - jsonCompatibleStrings: opts.jsonCompatibleStrings, - indent: { - adjustMultilineComment: true, - style: style, - base: 0 - }, - flowCommaSeparator: opts.flowCommaSeparator - }; - - if (format.minified) { - format.compact = true; - - format.shouldPrintComment = format.shouldPrintComment || function () { - return format.comments; - }; - } else { - format.shouldPrintComment = format.shouldPrintComment || function (value) { - return format.comments || value.indexOf("@license") >= 0 || value.indexOf("@preserve") >= 0; - }; - } - - if (format.compact === "auto") { - format.compact = code.length > 100000; - - if (format.compact) { - console.error("[BABEL] " + messages.get("codeGeneratorDeopt", opts.filename, "100KB")); - } - } - - if (format.compact) { - format.indent.adjustMultilineComment = false; - } - - return format; -} - -function findCommonStringDelimiter(code, tokens) { - var DEFAULT_STRING_DELIMITER = "double"; - if (!code) { - return DEFAULT_STRING_DELIMITER; - } - - var occurences = { - single: 0, - double: 0 - }; - - var checked = 0; - - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (token.type.label !== "string") continue; - - var raw = code.slice(token.start, token.end); - if (raw[0] === "'") { - occurences.single++; - } else { - occurences.double++; - } - - checked++; - if (checked >= 3) break; - } - if (occurences.single > occurences.double) { - return "single"; - } else { - return "double"; - } -} - -var CodeGenerator = exports.CodeGenerator = function () { - function CodeGenerator(ast, opts, code) { - (0, _classCallCheck3.default)(this, CodeGenerator); - - this._generator = new Generator(ast, opts, code); - } - - CodeGenerator.prototype.generate = function generate() { - return this._generator.generate(); - }; - - return CodeGenerator; -}(); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/node/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/node/index.js deleted file mode 100644 index be5d34797..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/node/index.js +++ /dev/null @@ -1,146 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _keys = require("babel-runtime/core-js/object/keys"); - -var _keys2 = _interopRequireDefault(_keys); - -exports.needsWhitespace = needsWhitespace; -exports.needsWhitespaceBefore = needsWhitespaceBefore; -exports.needsWhitespaceAfter = needsWhitespaceAfter; -exports.needsParens = needsParens; - -var _whitespace = require("./whitespace"); - -var _whitespace2 = _interopRequireDefault(_whitespace); - -var _parentheses = require("./parentheses"); - -var parens = _interopRequireWildcard(_parentheses); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function expandAliases(obj) { - var newObj = {}; - - function add(type, func) { - var fn = newObj[type]; - newObj[type] = fn ? function (node, parent, stack) { - var result = fn(node, parent, stack); - - return result == null ? func(node, parent, stack) : result; - } : func; - } - - for (var _iterator = (0, _keys2.default)(obj), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var type = _ref; - - - var aliases = t.FLIPPED_ALIAS_KEYS[type]; - if (aliases) { - for (var _iterator2 = aliases, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var alias = _ref2; - - add(alias, obj[type]); - } - } else { - add(type, obj[type]); - } - } - - return newObj; -} - -var expandedParens = expandAliases(parens); -var expandedWhitespaceNodes = expandAliases(_whitespace2.default.nodes); -var expandedWhitespaceList = expandAliases(_whitespace2.default.list); - -function find(obj, node, parent, printStack) { - var fn = obj[node.type]; - return fn ? fn(node, parent, printStack) : null; -} - -function isOrHasCallExpression(node) { - if (t.isCallExpression(node)) { - return true; - } - - if (t.isMemberExpression(node)) { - return isOrHasCallExpression(node.object) || !node.computed && isOrHasCallExpression(node.property); - } else { - return false; - } -} - -function needsWhitespace(node, parent, type) { - if (!node) return 0; - - if (t.isExpressionStatement(node)) { - node = node.expression; - } - - var linesInfo = find(expandedWhitespaceNodes, node, parent); - - if (!linesInfo) { - var items = find(expandedWhitespaceList, node, parent); - if (items) { - for (var i = 0; i < items.length; i++) { - linesInfo = needsWhitespace(items[i], node, type); - if (linesInfo) break; - } - } - } - - return linesInfo && linesInfo[type] || 0; -} - -function needsWhitespaceBefore(node, parent) { - return needsWhitespace(node, parent, "before"); -} - -function needsWhitespaceAfter(node, parent) { - return needsWhitespace(node, parent, "after"); -} - -function needsParens(node, parent, printStack) { - if (!parent) return false; - - if (t.isNewExpression(parent) && parent.callee === node) { - if (isOrHasCallExpression(node)) return true; - } - - return find(expandedParens, node, parent, printStack); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/node/parentheses.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/node/parentheses.js deleted file mode 100644 index 3d9926fc6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/node/parentheses.js +++ /dev/null @@ -1,250 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.AwaitExpression = exports.FunctionTypeAnnotation = undefined; -exports.NullableTypeAnnotation = NullableTypeAnnotation; -exports.UpdateExpression = UpdateExpression; -exports.ObjectExpression = ObjectExpression; -exports.Binary = Binary; -exports.BinaryExpression = BinaryExpression; -exports.SequenceExpression = SequenceExpression; -exports.YieldExpression = YieldExpression; -exports.ClassExpression = ClassExpression; -exports.UnaryLike = UnaryLike; -exports.FunctionExpression = FunctionExpression; -exports.ArrowFunctionExpression = ArrowFunctionExpression; -exports.ConditionalExpression = ConditionalExpression; -exports.AssignmentExpression = AssignmentExpression; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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 PRECEDENCE = { - "||": 0, - "&&": 1, - "|": 2, - "^": 3, - "&": 4, - "==": 5, - "===": 5, - "!=": 5, - "!==": 5, - "<": 6, - ">": 6, - "<=": 6, - ">=": 6, - in: 6, - instanceof: 6, - ">>": 7, - "<<": 7, - ">>>": 7, - "+": 8, - "-": 8, - "*": 9, - "/": 9, - "%": 9, - "**": 10 -}; - -function NullableTypeAnnotation(node, parent) { - return t.isArrayTypeAnnotation(parent); -} - -exports.FunctionTypeAnnotation = NullableTypeAnnotation; -function UpdateExpression(node, parent) { - if (t.isMemberExpression(parent) && parent.object === node) { - return true; - } - - return false; -} - -function ObjectExpression(node, parent, printStack) { - return isFirstInStatement(printStack, { considerArrow: true }); -} - -function Binary(node, parent) { - if ((t.isCallExpression(parent) || t.isNewExpression(parent)) && parent.callee === node) { - return true; - } - - if (t.isUnaryLike(parent)) { - return true; - } - - if (t.isMemberExpression(parent) && parent.object === node) { - return true; - } - - if (t.isBinary(parent)) { - var parentOp = parent.operator; - var parentPos = PRECEDENCE[parentOp]; - - var nodeOp = node.operator; - var nodePos = PRECEDENCE[nodeOp]; - - if (parentPos > nodePos) { - return true; - } - - if (parentPos === nodePos && parent.right === node && !t.isLogicalExpression(parent)) { - return true; - } - } - - return false; -} - -function BinaryExpression(node, parent) { - if (node.operator === "in") { - if (t.isVariableDeclarator(parent)) { - return true; - } - - if (t.isFor(parent)) { - return true; - } - } - - return false; -} - -function SequenceExpression(node, parent) { - if (t.isForStatement(parent)) { - return false; - } - - if (t.isExpressionStatement(parent) && parent.expression === node) { - return false; - } - - if (t.isReturnStatement(parent)) { - return false; - } - - if (t.isThrowStatement(parent)) { - return false; - } - - if (t.isSwitchStatement(parent) && parent.discriminant === node) { - return false; - } - - if (t.isWhileStatement(parent) && parent.test === node) { - return false; - } - - if (t.isIfStatement(parent) && parent.test === node) { - return false; - } - - if (t.isForInStatement(parent) && parent.right === node) { - return false; - } - - return true; -} - -function YieldExpression(node, parent) { - return t.isBinary(parent) || t.isUnaryLike(parent) || t.isCallExpression(parent) || t.isMemberExpression(parent) || t.isNewExpression(parent) || t.isConditionalExpression(parent) && node === parent.test; -} - -exports.AwaitExpression = YieldExpression; -function ClassExpression(node, parent, printStack) { - return isFirstInStatement(printStack, { considerDefaultExports: true }); -} - -function UnaryLike(node, parent) { - if (t.isMemberExpression(parent, { object: node })) { - return true; - } - - if (t.isCallExpression(parent, { callee: node }) || t.isNewExpression(parent, { callee: node })) { - return true; - } - - return false; -} - -function FunctionExpression(node, parent, printStack) { - return isFirstInStatement(printStack, { considerDefaultExports: true }); -} - -function ArrowFunctionExpression(node, parent) { - if (t.isExportDeclaration(parent)) { - return true; - } - - if (t.isBinaryExpression(parent) || t.isLogicalExpression(parent)) { - return true; - } - - if (t.isUnaryExpression(parent)) { - return true; - } - - return UnaryLike(node, parent); -} - -function ConditionalExpression(node, parent) { - if (t.isUnaryLike(parent)) { - return true; - } - - if (t.isBinary(parent)) { - return true; - } - - if (t.isConditionalExpression(parent, { test: node })) { - return true; - } - - return UnaryLike(node, parent); -} - -function AssignmentExpression(node) { - if (t.isObjectPattern(node.left)) { - return true; - } else { - return ConditionalExpression.apply(undefined, arguments); - } -} - -function isFirstInStatement(printStack) { - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - _ref$considerArrow = _ref.considerArrow, - considerArrow = _ref$considerArrow === undefined ? false : _ref$considerArrow, - _ref$considerDefaultE = _ref.considerDefaultExports, - considerDefaultExports = _ref$considerDefaultE === undefined ? false : _ref$considerDefaultE; - - var i = printStack.length - 1; - var node = printStack[i]; - i--; - var parent = printStack[i]; - while (i > 0) { - if (t.isExpressionStatement(parent, { expression: node })) { - return true; - } - - if (considerDefaultExports && t.isExportDefaultDeclaration(parent, { declaration: node })) { - return true; - } - - if (considerArrow && t.isArrowFunctionExpression(parent, { body: node })) { - return true; - } - - if (t.isCallExpression(parent, { callee: node }) || t.isSequenceExpression(parent) && parent.expressions[0] === node || t.isMemberExpression(parent, { object: node }) || t.isConditional(parent, { test: node }) || t.isBinary(parent, { left: node }) || t.isAssignmentExpression(parent, { left: node })) { - node = parent; - i--; - parent = printStack[i]; - } else { - return false; - } - } - - return false; -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/node/whitespace.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/node/whitespace.js deleted file mode 100644 index d3690a84a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/node/whitespace.js +++ /dev/null @@ -1,164 +0,0 @@ -"use strict"; - -var _isBoolean = require("lodash/isBoolean"); - -var _isBoolean2 = _interopRequireDefault(_isBoolean); - -var _each = require("lodash/each"); - -var _each2 = _interopRequireDefault(_each); - -var _map = require("lodash/map"); - -var _map2 = _interopRequireDefault(_map); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function crawl(node) { - var state = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - if (t.isMemberExpression(node)) { - crawl(node.object, state); - if (node.computed) crawl(node.property, state); - } else if (t.isBinary(node) || t.isAssignmentExpression(node)) { - crawl(node.left, state); - crawl(node.right, state); - } else if (t.isCallExpression(node)) { - state.hasCall = true; - crawl(node.callee, state); - } else if (t.isFunction(node)) { - state.hasFunction = true; - } else if (t.isIdentifier(node)) { - state.hasHelper = state.hasHelper || isHelper(node.callee); - } - - return state; -} - -function isHelper(node) { - if (t.isMemberExpression(node)) { - return isHelper(node.object) || isHelper(node.property); - } else if (t.isIdentifier(node)) { - return node.name === "require" || node.name[0] === "_"; - } else if (t.isCallExpression(node)) { - return isHelper(node.callee); - } else if (t.isBinary(node) || t.isAssignmentExpression(node)) { - return t.isIdentifier(node.left) && isHelper(node.left) || isHelper(node.right); - } else { - return false; - } -} - -function isType(node) { - return t.isLiteral(node) || t.isObjectExpression(node) || t.isArrayExpression(node) || t.isIdentifier(node) || t.isMemberExpression(node); -} - -exports.nodes = { - AssignmentExpression: function AssignmentExpression(node) { - var state = crawl(node.right); - if (state.hasCall && state.hasHelper || state.hasFunction) { - return { - before: state.hasFunction, - after: true - }; - } - }, - SwitchCase: function SwitchCase(node, parent) { - return { - before: node.consequent.length || parent.cases[0] === node - }; - }, - LogicalExpression: function LogicalExpression(node) { - if (t.isFunction(node.left) || t.isFunction(node.right)) { - return { - after: true - }; - } - }, - Literal: function Literal(node) { - if (node.value === "use strict") { - return { - after: true - }; - } - }, - CallExpression: function CallExpression(node) { - if (t.isFunction(node.callee) || isHelper(node)) { - return { - before: true, - after: true - }; - } - }, - VariableDeclaration: function VariableDeclaration(node) { - for (var i = 0; i < node.declarations.length; i++) { - var declar = node.declarations[i]; - - var enabled = isHelper(declar.id) && !isType(declar.init); - if (!enabled) { - var state = crawl(declar.init); - enabled = isHelper(declar.init) && state.hasCall || state.hasFunction; - } - - if (enabled) { - return { - before: true, - after: true - }; - } - } - }, - IfStatement: function IfStatement(node) { - if (t.isBlockStatement(node.consequent)) { - return { - before: true, - after: true - }; - } - } -}; - -exports.nodes.ObjectProperty = exports.nodes.ObjectTypeProperty = exports.nodes.ObjectMethod = exports.nodes.SpreadProperty = function (node, parent) { - if (parent.properties[0] === node) { - return { - before: true - }; - } -}; - -exports.list = { - VariableDeclaration: function VariableDeclaration(node) { - return (0, _map2.default)(node.declarations, "init"); - }, - ArrayExpression: function ArrayExpression(node) { - return node.elements; - }, - ObjectExpression: function ObjectExpression(node) { - return node.properties; - } -}; - -(0, _each2.default)({ - Function: true, - Class: true, - Loop: true, - LabeledStatement: true, - SwitchStatement: true, - TryStatement: true -}, function (amounts, type) { - if ((0, _isBoolean2.default)(amounts)) { - amounts = { after: amounts, before: amounts }; - } - - (0, _each2.default)([type].concat(t.FLIPPED_ALIAS_KEYS[type] || []), function (type) { - exports.nodes[type] = function () { - return amounts; - }; - }); -}); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/printer.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/printer.js deleted file mode 100644 index 8eb3eddac..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/printer.js +++ /dev/null @@ -1,555 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _assign = require("babel-runtime/core-js/object/assign"); - -var _assign2 = _interopRequireDefault(_assign); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _weakSet = require("babel-runtime/core-js/weak-set"); - -var _weakSet2 = _interopRequireDefault(_weakSet); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _find = require("lodash/find"); - -var _find2 = _interopRequireDefault(_find); - -var _findLast = require("lodash/findLast"); - -var _findLast2 = _interopRequireDefault(_findLast); - -var _isInteger = require("lodash/isInteger"); - -var _isInteger2 = _interopRequireDefault(_isInteger); - -var _repeat = require("lodash/repeat"); - -var _repeat2 = _interopRequireDefault(_repeat); - -var _buffer = require("./buffer"); - -var _buffer2 = _interopRequireDefault(_buffer); - -var _node = require("./node"); - -var n = _interopRequireWildcard(_node); - -var _whitespace = require("./whitespace"); - -var _whitespace2 = _interopRequireDefault(_whitespace); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SCIENTIFIC_NOTATION = /e/i; -var ZERO_DECIMAL_INTEGER = /\.0+$/; -var NON_DECIMAL_LITERAL = /^0[box]/; - -var Printer = function () { - function Printer(format, map, tokens) { - (0, _classCallCheck3.default)(this, Printer); - this.inForStatementInitCounter = 0; - this._printStack = []; - this._indent = 0; - this._insideAux = false; - this._printedCommentStarts = {}; - this._parenPushNewlineState = null; - this._printAuxAfterOnNextUserNode = false; - this._printedComments = new _weakSet2.default(); - this._endsWithInteger = false; - this._endsWithWord = false; - - this.format = format || {}; - this._buf = new _buffer2.default(map); - this._whitespace = tokens.length > 0 ? new _whitespace2.default(tokens) : null; - } - - Printer.prototype.generate = function generate(ast) { - this.print(ast); - this._maybeAddAuxComment(); - - return this._buf.get(); - }; - - Printer.prototype.indent = function indent() { - if (this.format.compact || this.format.concise) return; - - this._indent++; - }; - - Printer.prototype.dedent = function dedent() { - if (this.format.compact || this.format.concise) return; - - this._indent--; - }; - - Printer.prototype.semicolon = function semicolon() { - var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - this._maybeAddAuxComment(); - this._append(";", !force); - }; - - Printer.prototype.rightBrace = function rightBrace() { - if (this.format.minified) { - this._buf.removeLastSemicolon(); - } - this.token("}"); - }; - - Printer.prototype.space = function space() { - var force = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (this.format.compact) return; - - if (this._buf.hasContent() && !this.endsWith(" ") && !this.endsWith("\n") || force) { - this._space(); - } - }; - - Printer.prototype.word = function word(str) { - if (this._endsWithWord) this._space(); - - this._maybeAddAuxComment(); - this._append(str); - - this._endsWithWord = true; - }; - - Printer.prototype.number = function number(str) { - this.word(str); - - this._endsWithInteger = (0, _isInteger2.default)(+str) && !NON_DECIMAL_LITERAL.test(str) && !SCIENTIFIC_NOTATION.test(str) && !ZERO_DECIMAL_INTEGER.test(str) && str[str.length - 1] !== "."; - }; - - Printer.prototype.token = function token(str) { - if (str === "--" && this.endsWith("!") || str[0] === "+" && this.endsWith("+") || str[0] === "-" && this.endsWith("-") || str[0] === "." && this._endsWithInteger) { - this._space(); - } - - this._maybeAddAuxComment(); - this._append(str); - }; - - Printer.prototype.newline = function newline(i) { - if (this.format.retainLines || this.format.compact) return; - - if (this.format.concise) { - this.space(); - return; - } - - if (this.endsWith("\n\n")) return; - - if (typeof i !== "number") i = 1; - - i = Math.min(2, i); - if (this.endsWith("{\n") || this.endsWith(":\n")) i--; - if (i <= 0) return; - - for (var j = 0; j < i; j++) { - this._newline(); - } - }; - - Printer.prototype.endsWith = function endsWith(str) { - return this._buf.endsWith(str); - }; - - Printer.prototype.removeTrailingNewline = function removeTrailingNewline() { - this._buf.removeTrailingNewline(); - }; - - Printer.prototype.source = function source(prop, loc) { - this._catchUp(prop, loc); - - this._buf.source(prop, loc); - }; - - Printer.prototype.withSource = function withSource(prop, loc, cb) { - this._catchUp(prop, loc); - - this._buf.withSource(prop, loc, cb); - }; - - Printer.prototype._space = function _space() { - this._append(" ", true); - }; - - Printer.prototype._newline = function _newline() { - this._append("\n", true); - }; - - Printer.prototype._append = function _append(str) { - var queue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - this._maybeAddParen(str); - this._maybeIndent(str); - - if (queue) this._buf.queue(str);else this._buf.append(str); - - this._endsWithWord = false; - this._endsWithInteger = false; - }; - - Printer.prototype._maybeIndent = function _maybeIndent(str) { - if (this._indent && this.endsWith("\n") && str[0] !== "\n") { - this._buf.queue(this._getIndent()); - } - }; - - Printer.prototype._maybeAddParen = function _maybeAddParen(str) { - var parenPushNewlineState = this._parenPushNewlineState; - if (!parenPushNewlineState) return; - this._parenPushNewlineState = null; - - var i = void 0; - for (i = 0; i < str.length && str[i] === " "; i++) { - continue; - }if (i === str.length) return; - - var cha = str[i]; - if (cha === "\n" || cha === "/") { - this.token("("); - this.indent(); - parenPushNewlineState.printed = true; - } - }; - - Printer.prototype._catchUp = function _catchUp(prop, loc) { - if (!this.format.retainLines) return; - - var pos = loc ? loc[prop] : null; - if (pos && pos.line !== null) { - var count = pos.line - this._buf.getCurrentLine(); - - for (var i = 0; i < count; i++) { - this._newline(); - } - } - }; - - Printer.prototype._getIndent = function _getIndent() { - return (0, _repeat2.default)(this.format.indent.style, this._indent); - }; - - Printer.prototype.startTerminatorless = function startTerminatorless() { - return this._parenPushNewlineState = { - printed: false - }; - }; - - Printer.prototype.endTerminatorless = function endTerminatorless(state) { - if (state.printed) { - this.dedent(); - this.newline(); - this.token(")"); - } - }; - - Printer.prototype.print = function print(node, parent) { - var _this = this; - - if (!node) return; - - var oldConcise = this.format.concise; - if (node._compact) { - this.format.concise = true; - } - - var printMethod = this[node.type]; - if (!printMethod) { - throw new ReferenceError("unknown node of type " + (0, _stringify2.default)(node.type) + " with constructor " + (0, _stringify2.default)(node && node.constructor.name)); - } - - this._printStack.push(node); - - var oldInAux = this._insideAux; - this._insideAux = !node.loc; - this._maybeAddAuxComment(this._insideAux && !oldInAux); - - var needsParens = n.needsParens(node, parent, this._printStack); - if (this.format.retainFunctionParens && node.type === "FunctionExpression" && node.extra && node.extra.parenthesized) { - needsParens = true; - } - if (needsParens) this.token("("); - - this._printLeadingComments(node, parent); - - var loc = t.isProgram(node) || t.isFile(node) ? null : node.loc; - this.withSource("start", loc, function () { - _this[node.type](node, parent); - }); - - this._printTrailingComments(node, parent); - - if (needsParens) this.token(")"); - - this._printStack.pop(); - - this.format.concise = oldConcise; - this._insideAux = oldInAux; - }; - - Printer.prototype._maybeAddAuxComment = function _maybeAddAuxComment(enteredPositionlessNode) { - if (enteredPositionlessNode) this._printAuxBeforeComment(); - if (!this._insideAux) this._printAuxAfterComment(); - }; - - Printer.prototype._printAuxBeforeComment = function _printAuxBeforeComment() { - if (this._printAuxAfterOnNextUserNode) return; - this._printAuxAfterOnNextUserNode = true; - - var comment = this.format.auxiliaryCommentBefore; - if (comment) { - this._printComment({ - type: "CommentBlock", - value: comment - }); - } - }; - - Printer.prototype._printAuxAfterComment = function _printAuxAfterComment() { - if (!this._printAuxAfterOnNextUserNode) return; - this._printAuxAfterOnNextUserNode = false; - - var comment = this.format.auxiliaryCommentAfter; - if (comment) { - this._printComment({ - type: "CommentBlock", - value: comment - }); - } - }; - - Printer.prototype.getPossibleRaw = function getPossibleRaw(node) { - var extra = node.extra; - if (extra && extra.raw != null && extra.rawValue != null && node.value === extra.rawValue) { - return extra.raw; - } - }; - - Printer.prototype.printJoin = function printJoin(nodes, parent) { - var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - if (!nodes || !nodes.length) return; - - if (opts.indent) this.indent(); - - var newlineOpts = { - addNewlines: opts.addNewlines - }; - - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - if (!node) continue; - - if (opts.statement) this._printNewline(true, node, parent, newlineOpts); - - this.print(node, parent); - - if (opts.iterator) { - opts.iterator(node, i); - } - - if (opts.separator && i < nodes.length - 1) { - opts.separator.call(this); - } - - if (opts.statement) this._printNewline(false, node, parent, newlineOpts); - } - - if (opts.indent) this.dedent(); - }; - - Printer.prototype.printAndIndentOnComments = function printAndIndentOnComments(node, parent) { - var indent = !!node.leadingComments; - if (indent) this.indent(); - this.print(node, parent); - if (indent) this.dedent(); - }; - - Printer.prototype.printBlock = function printBlock(parent) { - var node = parent.body; - - if (!t.isEmptyStatement(node)) { - this.space(); - } - - this.print(node, parent); - }; - - Printer.prototype._printTrailingComments = function _printTrailingComments(node, parent) { - this._printComments(this._getComments(false, node, parent)); - }; - - Printer.prototype._printLeadingComments = function _printLeadingComments(node, parent) { - this._printComments(this._getComments(true, node, parent)); - }; - - Printer.prototype.printInnerComments = function printInnerComments(node) { - var indent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - - if (!node.innerComments) return; - if (indent) this.indent(); - this._printComments(node.innerComments); - if (indent) this.dedent(); - }; - - Printer.prototype.printSequence = function printSequence(nodes, parent) { - var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - opts.statement = true; - return this.printJoin(nodes, parent, opts); - }; - - Printer.prototype.printList = function printList(items, parent) { - var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - if (opts.separator == null) { - opts.separator = commaSeparator; - } - - return this.printJoin(items, parent, opts); - }; - - Printer.prototype._printNewline = function _printNewline(leading, node, parent, opts) { - var _this2 = this; - - if (this.format.retainLines || this.format.compact) return; - - if (this.format.concise) { - this.space(); - return; - } - - var lines = 0; - - if (node.start != null && !node._ignoreUserWhitespace && this._whitespace) { - if (leading) { - var _comments = node.leadingComments; - var _comment = _comments && (0, _find2.default)(_comments, function (comment) { - return !!comment.loc && _this2.format.shouldPrintComment(comment.value); - }); - - lines = this._whitespace.getNewlinesBefore(_comment || node); - } else { - var _comments2 = node.trailingComments; - var _comment2 = _comments2 && (0, _findLast2.default)(_comments2, function (comment) { - return !!comment.loc && _this2.format.shouldPrintComment(comment.value); - }); - - lines = this._whitespace.getNewlinesAfter(_comment2 || node); - } - } else { - if (!leading) lines++; - if (opts.addNewlines) lines += opts.addNewlines(leading, node) || 0; - - var needs = n.needsWhitespaceAfter; - if (leading) needs = n.needsWhitespaceBefore; - if (needs(node, parent)) lines++; - - if (!this._buf.hasContent()) lines = 0; - } - - this.newline(lines); - }; - - Printer.prototype._getComments = function _getComments(leading, node) { - return node && (leading ? node.leadingComments : node.trailingComments) || []; - }; - - Printer.prototype._printComment = function _printComment(comment) { - var _this3 = this; - - if (!this.format.shouldPrintComment(comment.value)) return; - - if (comment.ignore) return; - - if (this._printedComments.has(comment)) return; - this._printedComments.add(comment); - - if (comment.start != null) { - if (this._printedCommentStarts[comment.start]) return; - this._printedCommentStarts[comment.start] = true; - } - - this.newline(this._whitespace ? this._whitespace.getNewlinesBefore(comment) : 0); - - if (!this.endsWith("[") && !this.endsWith("{")) this.space(); - - var val = comment.type === "CommentLine" ? "//" + comment.value + "\n" : "/*" + comment.value + "*/"; - - if (comment.type === "CommentBlock" && this.format.indent.adjustMultilineComment) { - var offset = comment.loc && comment.loc.start.column; - if (offset) { - var newlineRegex = new RegExp("\\n\\s{1," + offset + "}", "g"); - val = val.replace(newlineRegex, "\n"); - } - - var indentSize = Math.max(this._getIndent().length, this._buf.getCurrentColumn()); - val = val.replace(/\n(?!$)/g, "\n" + (0, _repeat2.default)(" ", indentSize)); - } - - this.withSource("start", comment.loc, function () { - _this3._append(val); - }); - - this.newline((this._whitespace ? this._whitespace.getNewlinesAfter(comment) : 0) + (comment.type === "CommentLine" ? -1 : 0)); - }; - - Printer.prototype._printComments = function _printComments(comments) { - if (!comments || !comments.length) return; - - for (var _iterator = comments, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var _comment3 = _ref; - - this._printComment(_comment3); - } - }; - - return Printer; -}(); - -exports.default = Printer; - - -function commaSeparator() { - this.token(","); - this.space(); -} - -var _arr = [require("./generators/template-literals"), require("./generators/expressions"), require("./generators/statements"), require("./generators/classes"), require("./generators/methods"), require("./generators/modules"), require("./generators/types"), require("./generators/flow"), require("./generators/base"), require("./generators/jsx")]; -for (var _i2 = 0; _i2 < _arr.length; _i2++) { - var generator = _arr[_i2]; - (0, _assign2.default)(Printer.prototype, generator); -} -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/source-map.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/source-map.js deleted file mode 100644 index 192d8bca0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/source-map.js +++ /dev/null @@ -1,77 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _keys = require("babel-runtime/core-js/object/keys"); - -var _keys2 = _interopRequireDefault(_keys); - -var _typeof2 = require("babel-runtime/helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _sourceMap = require("source-map"); - -var _sourceMap2 = _interopRequireDefault(_sourceMap); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var SourceMap = function () { - function SourceMap(opts, code) { - var _this = this; - - (0, _classCallCheck3.default)(this, SourceMap); - - this._opts = opts; - this._map = new _sourceMap2.default.SourceMapGenerator({ - file: opts.sourceMapTarget, - sourceRoot: opts.sourceRoot - }); - - if (typeof code === "string") { - this._map.setSourceContent(opts.sourceFileName, code); - } else if ((typeof code === "undefined" ? "undefined" : (0, _typeof3.default)(code)) === "object") { - (0, _keys2.default)(code).forEach(function (sourceFileName) { - _this._map.setSourceContent(sourceFileName, code[sourceFileName]); - }); - } - } - - SourceMap.prototype.get = function get() { - return this._map.toJSON(); - }; - - SourceMap.prototype.mark = function mark(generatedLine, generatedColumn, line, column, identifierName, filename) { - if (this._lastGenLine !== generatedLine && line === null) return; - - if (this._lastGenLine === generatedLine && this._lastSourceLine === line && this._lastSourceColumn === column) { - return; - } - - this._lastGenLine = generatedLine; - this._lastSourceLine = line; - this._lastSourceColumn = column; - - this._map.addMapping({ - name: identifierName, - generated: { - line: generatedLine, - column: generatedColumn - }, - source: line == null ? null : filename || this._opts.sourceFileName, - original: line == null ? null : { - line: line, - column: column - } - }); - }; - - return SourceMap; -}(); - -exports.default = SourceMap; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/whitespace.js b/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/whitespace.js deleted file mode 100644 index cbb3bc501..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/lib/whitespace.js +++ /dev/null @@ -1,95 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Whitespace = function () { - function Whitespace(tokens) { - (0, _classCallCheck3.default)(this, Whitespace); - - this.tokens = tokens; - this.used = {}; - } - - Whitespace.prototype.getNewlinesBefore = function getNewlinesBefore(node) { - var startToken = void 0; - var endToken = void 0; - var tokens = this.tokens; - - var index = this._findToken(function (token) { - return token.start - node.start; - }, 0, tokens.length); - if (index >= 0) { - while (index && node.start === tokens[index - 1].start) { - --index; - }startToken = tokens[index - 1]; - endToken = tokens[index]; - } - - return this._getNewlinesBetween(startToken, endToken); - }; - - Whitespace.prototype.getNewlinesAfter = function getNewlinesAfter(node) { - var startToken = void 0; - var endToken = void 0; - var tokens = this.tokens; - - var index = this._findToken(function (token) { - return token.end - node.end; - }, 0, tokens.length); - if (index >= 0) { - while (index && node.end === tokens[index - 1].end) { - --index; - }startToken = tokens[index]; - endToken = tokens[index + 1]; - if (endToken.type.label === ",") endToken = tokens[index + 2]; - } - - if (endToken && endToken.type.label === "eof") { - return 1; - } else { - return this._getNewlinesBetween(startToken, endToken); - } - }; - - Whitespace.prototype._getNewlinesBetween = function _getNewlinesBetween(startToken, endToken) { - if (!endToken || !endToken.loc) return 0; - - var start = startToken ? startToken.loc.end.line : 1; - var end = endToken.loc.start.line; - var lines = 0; - - for (var line = start; line < end; line++) { - if (typeof this.used[line] === "undefined") { - this.used[line] = true; - lines++; - } - } - - return lines; - }; - - Whitespace.prototype._findToken = function _findToken(test, start, end) { - if (start >= end) return -1; - var middle = start + end >>> 1; - var match = test(this.tokens[middle]); - if (match < 0) { - return this._findToken(test, middle + 1, end); - } else if (match > 0) { - return this._findToken(test, start, middle); - } else if (match === 0) { - return middle; - } - return -1; - }; - - return Whitespace; -}(); - -exports.default = Whitespace; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-generator/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-generator/package.json deleted file mode 100644 index 3ec7db217..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-generator/package.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "_args": [ - [ - "babel-generator@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core" - ] - ], - "_from": "babel-generator@>=6.18.0 <7.0.0", - "_id": "babel-generator@6.19.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-generator", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-generator-6.19.0.tgz_1479312926136_0.03993978095240891" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-generator", - "raw": "babel-generator@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-core", - "/istanbul-lib-instrument" - ], - "_resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.19.0.tgz", - "_shasum": "9b2f244204777a3d6810ec127c673c87b349fac5", - "_shrinkwrap": null, - "_spec": "babel-generator@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "babel-messages": "^6.8.0", - "babel-runtime": "^6.9.0", - "babel-types": "^6.19.0", - "detect-indent": "^4.0.0", - "jsesc": "^1.3.0", - "lodash": "^4.2.0", - "source-map": "^0.5.0" - }, - "description": "Turns an AST into code.", - "devDependencies": { - "babel-helper-fixtures": "^6.18.0", - "babylon": "^6.11.0" - }, - "directories": {}, - "dist": { - "shasum": "9b2f244204777a3d6810ec127c673c87b349fac5", - "tarball": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.19.0.tgz" - }, - "files": [ - "lib" - ], - "homepage": "https://babeljs.io/", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-generator", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-generator" - }, - "scripts": {}, - "version": "6.19.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/README.md deleted file mode 100644 index c9852822d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-bindify-decorators - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/lib/index.js deleted file mode 100644 index 2542ffa0e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/lib/index.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = bindifyDecorators; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function bindifyDecorators(decorators) { - for (var _iterator = decorators, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var decoratorPath = _ref; - - var decorator = decoratorPath.node; - var expression = decorator.expression; - if (!t.isMemberExpression(expression)) continue; - - var temp = decoratorPath.scope.maybeGenerateMemoised(expression.object); - var ref = void 0; - - var nodes = []; - - if (temp) { - ref = temp; - nodes.push(t.assignmentExpression("=", temp, expression.object)); - } else { - ref = expression.object; - } - - nodes.push(t.callExpression(t.memberExpression(t.memberExpression(ref, expression.property, expression.computed), t.identifier("bind")), [ref])); - - if (nodes.length === 1) { - decorator.expression = nodes[0]; - } else { - decorator.expression = t.sequenceExpression(nodes); - } - } -} -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/package.json deleted file mode 100644 index 3f40e903d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-bindify-decorators/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-bindify-decorators@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class" - ] - ], - "_from": "babel-helper-bindify-decorators@>=6.18.0 <7.0.0", - "_id": "babel-helper-bindify-decorators@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-bindify-decorators", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-helper-bindify-decorators-6.18.0.tgz_1477343917917_0.17585339793004096" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-bindify-decorators", - "raw": "babel-helper-bindify-decorators@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-helper-explode-class" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.18.0.tgz", - "_shasum": "fc00c573676a6e702fffa00019580892ec8780a5", - "_shrinkwrap": null, - "_spec": "babel-helper-bindify-decorators@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class", - "dependencies": { - "babel-runtime": "^6.0.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0" - }, - "description": "Helper function to bindify decorators", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "fc00c573676a6e702fffa00019580892ec8780a5", - "tarball": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-bindify-decorators", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-bindify-decorators" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/README.md deleted file mode 100644 index 812f886e6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-builder-binary-assignment-operator-visitor - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/lib/index.js deleted file mode 100644 index 029f207df..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/lib/index.js +++ /dev/null @@ -1,65 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (opts) { - var visitor = {}; - - function isAssignment(node) { - return node && node.operator === opts.operator + "="; - } - - function buildAssignment(left, right) { - return t.assignmentExpression("=", left, right); - } - - visitor.ExpressionStatement = function (path, file) { - if (path.isCompletionRecord()) return; - - var expr = path.node.expression; - if (!isAssignment(expr)) return; - - var nodes = []; - var exploded = (0, _babelHelperExplodeAssignableExpression2.default)(expr.left, nodes, file, path.scope, true); - - nodes.push(t.expressionStatement(buildAssignment(exploded.ref, opts.build(exploded.uid, expr.right)))); - - path.replaceWithMultiple(nodes); - }; - - visitor.AssignmentExpression = function (path, file) { - var node = path.node; - var scope = path.scope; - - if (!isAssignment(node)) return; - - var nodes = []; - var exploded = (0, _babelHelperExplodeAssignableExpression2.default)(node.left, nodes, file, scope); - nodes.push(buildAssignment(exploded.ref, opts.build(exploded.uid, node.right))); - path.replaceWithMultiple(nodes); - }; - - visitor.BinaryExpression = function (path) { - var node = path.node; - - if (node.operator === opts.operator) { - path.replaceWith(opts.build(node.left, node.right)); - } - }; - - return visitor; -}; - -var _babelHelperExplodeAssignableExpression = require("babel-helper-explode-assignable-expression"); - -var _babelHelperExplodeAssignableExpression2 = _interopRequireDefault(_babelHelperExplodeAssignableExpression); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/package.json deleted file mode 100644 index 4b162c4c4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-builder-binary-assignment-operator-visitor@^6.8.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator" - ] - ], - "_from": "babel-helper-builder-binary-assignment-operator-visitor@>=6.8.0 <7.0.0", - "_id": "babel-helper-builder-binary-assignment-operator-visitor@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-builder-binary-assignment-operator-visitor", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-helper-builder-binary-assignment-operator-visitor-6.18.0.tgz_1477343920853_0.4845627639442682" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-builder-binary-assignment-operator-visitor", - "raw": "babel-helper-builder-binary-assignment-operator-visitor@^6.8.0", - "rawSpec": "^6.8.0", - "scope": null, - "spec": ">=6.8.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-exponentiation-operator" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.18.0.tgz", - "_shasum": "8ae814989f7a53682152e3401a04fabd0bb333a6", - "_shrinkwrap": null, - "_spec": "babel-helper-builder-binary-assignment-operator-visitor@^6.8.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator", - "dependencies": { - "babel-helper-explode-assignable-expression": "^6.18.0", - "babel-runtime": "^6.0.0", - "babel-types": "^6.18.0" - }, - "description": "Helper function to build binary assignment operator visitors", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "8ae814989f7a53682152e3401a04fabd0bb333a6", - "tarball": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-builder-binary-assignment-operator-visitor", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-builder-binary-assignment-operator-visitor" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/README.md deleted file mode 100644 index 0841d0734..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-call-delegate - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/lib/index.js deleted file mode 100644 index 62c9217c7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/lib/index.js +++ /dev/null @@ -1,72 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (path) { - var scope = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : path.scope; - var node = path.node; - - var container = t.functionExpression(null, [], node.body, node.generator, node.async); - - var callee = container; - var args = []; - - (0, _babelHelperHoistVariables2.default)(path, function (id) { - return scope.push({ id: id }); - }); - - var state = { - foundThis: false, - foundArguments: false - }; - - path.traverse(visitor, state); - - if (state.foundArguments) { - callee = t.memberExpression(container, t.identifier("apply")); - args = []; - - if (state.foundThis) { - args.push(t.thisExpression()); - } - - if (state.foundArguments) { - if (!state.foundThis) args.push(t.nullLiteral()); - args.push(t.identifier("arguments")); - } - } - - var call = t.callExpression(callee, args); - if (node.generator) call = t.yieldExpression(call, true); - - return t.returnStatement(call); -}; - -var _babelHelperHoistVariables = require("babel-helper-hoist-variables"); - -var _babelHelperHoistVariables2 = _interopRequireDefault(_babelHelperHoistVariables); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var visitor = { - enter: function enter(path, state) { - if (path.isThisExpression()) { - state.foundThis = true; - } - - if (path.isReferencedIdentifier({ name: "arguments" })) { - state.foundArguments = true; - } - }, - Function: function Function(path) { - path.skip(); - } -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/package.json deleted file mode 100644 index 4e4909e28..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-call-delegate/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-call-delegate@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters" - ] - ], - "_from": "babel-helper-call-delegate@>=6.18.0 <7.0.0", - "_id": "babel-helper-call-delegate@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-call-delegate", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-helper-call-delegate-6.18.0.tgz_1477343921564_0.057739556301385164" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-call-delegate", - "raw": "babel-helper-call-delegate@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-es2015-parameters" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.18.0.tgz", - "_shasum": "05b14aafa430884b034097ef29e9f067ea4133bd", - "_shrinkwrap": null, - "_spec": "babel-helper-call-delegate@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters", - "dependencies": { - "babel-helper-hoist-variables": "^6.18.0", - "babel-runtime": "^6.0.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0" - }, - "description": "Helper function to call delegate", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "05b14aafa430884b034097ef29e9f067ea4133bd", - "tarball": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-call-delegate", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-call-delegate" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/README.md deleted file mode 100644 index 381835187..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-define-map - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/lib/index.js deleted file mode 100644 index d9ffa2026..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/lib/index.js +++ /dev/null @@ -1,155 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.push = push; -exports.hasComputed = hasComputed; -exports.toComputedObjectFromClass = toComputedObjectFromClass; -exports.toClassObject = toClassObject; -exports.toDefineObject = toDefineObject; - -var _babelHelperFunctionName = require("babel-helper-function-name"); - -var _babelHelperFunctionName2 = _interopRequireDefault(_babelHelperFunctionName); - -var _each = require("lodash/each"); - -var _each2 = _interopRequireDefault(_each); - -var _has = require("lodash/has"); - -var _has2 = _interopRequireDefault(_has); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function toKind(node) { - if (t.isClassMethod(node) || t.isObjectMethod(node)) { - if (node.kind === "get" || node.kind === "set") { - return node.kind; - } - } - - return "value"; -} - -function push(mutatorMap, node, kind, file, scope) { - var alias = t.toKeyAlias(node); - - var map = {}; - if ((0, _has2.default)(mutatorMap, alias)) map = mutatorMap[alias]; - mutatorMap[alias] = map; - - map._inherits = map._inherits || []; - map._inherits.push(node); - - map._key = node.key; - - if (node.computed) { - map._computed = true; - } - - if (node.decorators) { - var decorators = map.decorators = map.decorators || t.arrayExpression([]); - decorators.elements = decorators.elements.concat(node.decorators.map(function (dec) { - return dec.expression; - }).reverse()); - } - - if (map.value || map.initializer) { - throw file.buildCodeFrameError(node, "Key conflict with sibling node"); - } - - var key = void 0, - value = void 0; - - if (t.isObjectProperty(node) || t.isObjectMethod(node) || t.isClassMethod(node)) { - key = t.toComputedKey(node, node.key); - } - - if (t.isObjectProperty(node) || t.isClassProperty(node)) { - value = node.value; - } else if (t.isObjectMethod(node) || t.isClassMethod(node)) { - value = t.functionExpression(null, node.params, node.body, node.generator, node.async); - value.returnType = node.returnType; - } - - var inheritedKind = toKind(node); - if (!kind || inheritedKind !== "value") { - kind = inheritedKind; - } - - if (scope && t.isStringLiteral(key) && (kind === "value" || kind === "initializer") && t.isFunctionExpression(value)) { - value = (0, _babelHelperFunctionName2.default)({ id: key, node: value, scope: scope }); - } - - if (value) { - t.inheritsComments(value, node); - map[kind] = value; - } - - return map; -} - -function hasComputed(mutatorMap) { - for (var key in mutatorMap) { - if (mutatorMap[key]._computed) { - return true; - } - } - return false; -} - -function toComputedObjectFromClass(obj) { - var objExpr = t.arrayExpression([]); - - for (var i = 0; i < obj.properties.length; i++) { - var prop = obj.properties[i]; - var val = prop.value; - val.properties.unshift(t.objectProperty(t.identifier("key"), t.toComputedKey(prop))); - objExpr.elements.push(val); - } - - return objExpr; -} - -function toClassObject(mutatorMap) { - var objExpr = t.objectExpression([]); - - (0, _each2.default)(mutatorMap, function (map) { - var mapNode = t.objectExpression([]); - - var propNode = t.objectProperty(map._key, mapNode, map._computed); - - (0, _each2.default)(map, function (node, key) { - if (key[0] === "_") return; - - var inheritNode = node; - if (t.isClassMethod(node) || t.isClassProperty(node)) node = node.value; - - var prop = t.objectProperty(t.identifier(key), node); - t.inheritsComments(prop, inheritNode); - t.removeComments(inheritNode); - - mapNode.properties.push(prop); - }); - - objExpr.properties.push(propNode); - }); - - return objExpr; -} - -function toDefineObject(mutatorMap) { - (0, _each2.default)(mutatorMap, function (map) { - if (map.value) map.writable = t.booleanLiteral(true); - map.configurable = t.booleanLiteral(true); - map.enumerable = t.booleanLiteral(true); - }); - - return toClassObject(mutatorMap); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/package.json deleted file mode 100644 index 92712ca8e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-define-map/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-define-map@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes" - ] - ], - "_from": "babel-helper-define-map@>=6.18.0 <7.0.0", - "_id": "babel-helper-define-map@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-define-map", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-helper-define-map-6.18.0.tgz_1477343924044_0.6549405199475586" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-define-map", - "raw": "babel-helper-define-map@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-decorators", - "/babel-plugin-transform-es2015-classes", - "/babel-plugin-transform-es2015-computed-properties" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.18.0.tgz", - "_shasum": "8d6c85dc7fbb4c19be3de40474d18e97c3676ec2", - "_shrinkwrap": null, - "_spec": "babel-helper-define-map@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes", - "dependencies": { - "babel-helper-function-name": "^6.18.0", - "babel-runtime": "^6.9.0", - "babel-types": "^6.18.0", - "lodash": "^4.2.0" - }, - "description": "Helper function to define a map", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "8d6c85dc7fbb4c19be3de40474d18e97c3676ec2", - "tarball": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-define-map", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-define-map" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/README.md deleted file mode 100644 index d8d90aeb8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-explode-assignable-expression - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/lib/index.js deleted file mode 100644 index 3604315b5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/lib/index.js +++ /dev/null @@ -1,72 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (node, nodes, file, scope, allowedSingleIdent) { - var obj = void 0; - if (t.isIdentifier(node) && allowedSingleIdent) { - obj = node; - } else { - obj = getObjRef(node, nodes, file, scope); - } - - var ref = void 0, - uid = void 0; - - if (t.isIdentifier(node)) { - ref = node; - uid = obj; - } else { - var prop = getPropRef(node, nodes, file, scope); - var computed = node.computed || t.isLiteral(prop); - uid = ref = t.memberExpression(obj, prop, computed); - } - - return { - uid: uid, - ref: ref - }; -}; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function getObjRef(node, nodes, file, scope) { - var ref = void 0; - if (t.isSuper(node)) { - return node; - } else if (t.isIdentifier(node)) { - if (scope.hasBinding(node.name)) { - return node; - } else { - ref = node; - } - } else if (t.isMemberExpression(node)) { - ref = node.object; - - if (t.isSuper(ref) || t.isIdentifier(ref) && scope.hasBinding(ref.name)) { - return ref; - } - } else { - throw new Error("We can't explode this node type " + node.type); - } - - var temp = scope.generateUidIdentifierBasedOnNode(ref); - nodes.push(t.variableDeclaration("var", [t.variableDeclarator(temp, ref)])); - return temp; -} - -function getPropRef(node, nodes, file, scope) { - var prop = node.property; - var key = t.toComputedKey(node, prop); - if (t.isLiteral(key) && t.isPureish(key)) return key; - - var temp = scope.generateUidIdentifierBasedOnNode(prop); - nodes.push(t.variableDeclaration("var", [t.variableDeclarator(temp, prop)])); - return temp; -} - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/package.json deleted file mode 100644 index 590644202..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-assignable-expression/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-explode-assignable-expression@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor" - ] - ], - "_from": "babel-helper-explode-assignable-expression@>=6.18.0 <7.0.0", - "_id": "babel-helper-explode-assignable-expression@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-explode-assignable-expression", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-helper-explode-assignable-expression-6.18.0.tgz_1477343924436_0.5748491007834673" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-explode-assignable-expression", - "raw": "babel-helper-explode-assignable-expression@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-helper-builder-binary-assignment-operator-visitor" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.18.0.tgz", - "_shasum": "14b8e8c2d03ad735d4b20f1840b24cd1f65239fe", - "_shrinkwrap": null, - "_spec": "babel-helper-explode-assignable-expression@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-helper-builder-binary-assignment-operator-visitor", - "dependencies": { - "babel-runtime": "^6.0.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0" - }, - "description": "Helper function to explode an assignable expression", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "14b8e8c2d03ad735d4b20f1840b24cd1f65239fe", - "tarball": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-explode-assignable-expression", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-explode-assignable-expression" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/README.md deleted file mode 100644 index cb4474ab5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-explode-class - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/lib/index.js deleted file mode 100644 index b9bc56b7c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/lib/index.js +++ /dev/null @@ -1,93 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function (classPath) { - classPath.assertClass(); - - var memoisedExpressions = []; - - function maybeMemoise(path) { - if (!path.node || path.isPure()) return; - - var uid = classPath.scope.generateDeclaredUidIdentifier(); - memoisedExpressions.push(t.assignmentExpression("=", uid, path.node)); - path.replaceWith(uid); - } - - function memoiseDecorators(paths) { - if (!Array.isArray(paths) || !paths.length) return; - - paths = paths.reverse(); - - (0, _babelHelperBindifyDecorators2.default)(paths); - - for (var _iterator = paths, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var path = _ref; - - maybeMemoise(path); - } - } - - maybeMemoise(classPath.get("superClass")); - memoiseDecorators(classPath.get("decorators"), true); - - var methods = classPath.get("body.body"); - for (var _iterator2 = methods, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var methodPath = _ref2; - - if (methodPath.is("computed")) { - maybeMemoise(methodPath.get("key")); - } - - if (methodPath.has("decorators")) { - memoiseDecorators(classPath.get("decorators")); - } - } - - if (memoisedExpressions) { - classPath.insertBefore(memoisedExpressions.map(function (expr) { - return t.expressionStatement(expr); - })); - } -}; - -var _babelHelperBindifyDecorators = require("babel-helper-bindify-decorators"); - -var _babelHelperBindifyDecorators2 = _interopRequireDefault(_babelHelperBindifyDecorators); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/package.json deleted file mode 100644 index f051bc1cd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-explode-class/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-explode-class@^6.8.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators" - ] - ], - "_from": "babel-helper-explode-class@>=6.8.0 <7.0.0", - "_id": "babel-helper-explode-class@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-explode-class", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-helper-explode-class-6.18.0.tgz_1477343924572_0.7694853253196925" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-explode-class", - "raw": "babel-helper-explode-class@^6.8.0", - "rawSpec": "^6.8.0", - "scope": null, - "spec": ">=6.8.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-decorators" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.18.0.tgz", - "_shasum": "c44f76f4fa23b9c5d607cbac5d4115e7a76f62cb", - "_shrinkwrap": null, - "_spec": "babel-helper-explode-class@^6.8.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators", - "dependencies": { - "babel-helper-bindify-decorators": "^6.18.0", - "babel-runtime": "^6.0.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0" - }, - "description": "Helper function to explode class", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "c44f76f4fa23b9c5d607cbac5d4115e7a76f62cb", - "tarball": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-explode-class", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-explode-class" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/README.md deleted file mode 100644 index 96a4c6544..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-function-name - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/lib/index.js deleted file mode 100644 index b24deb0a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/lib/index.js +++ /dev/null @@ -1,133 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (_ref) { - var node = _ref.node; - var parent = _ref.parent; - var scope = _ref.scope; - var id = _ref.id; - - if (node.id) return; - - if ((t.isObjectProperty(parent) || t.isObjectMethod(parent, { kind: "method" })) && (!parent.computed || t.isLiteral(parent.key))) { - id = parent.key; - } else if (t.isVariableDeclarator(parent)) { - id = parent.id; - - if (t.isIdentifier(id)) { - var binding = scope.parent.getBinding(id.name); - if (binding && binding.constant && scope.getBinding(id.name) === binding) { - node.id = id; - node.id[t.NOT_LOCAL_BINDING] = true; - return; - } - } - } else if (t.isAssignmentExpression(parent)) { - id = parent.left; - } else if (!id) { - return; - } - - var name = void 0; - if (id && t.isLiteral(id)) { - name = id.value; - } else if (id && t.isIdentifier(id)) { - name = id.name; - } else { - return; - } - - name = t.toBindingIdentifierName(name); - id = t.identifier(name); - - id[t.NOT_LOCAL_BINDING] = true; - - var state = visit(node, name, scope); - return wrap(state, node, id, scope) || node; -}; - -var _babelHelperGetFunctionArity = require("babel-helper-get-function-arity"); - -var _babelHelperGetFunctionArity2 = _interopRequireDefault(_babelHelperGetFunctionArity); - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var buildPropertyMethodAssignmentWrapper = (0, _babelTemplate2.default)("\n (function (FUNCTION_KEY) {\n function FUNCTION_ID() {\n return FUNCTION_KEY.apply(this, arguments);\n }\n\n FUNCTION_ID.toString = function () {\n return FUNCTION_KEY.toString();\n }\n\n return FUNCTION_ID;\n })(FUNCTION)\n"); - -var buildGeneratorPropertyMethodAssignmentWrapper = (0, _babelTemplate2.default)("\n (function (FUNCTION_KEY) {\n function* FUNCTION_ID() {\n return yield* FUNCTION_KEY.apply(this, arguments);\n }\n\n FUNCTION_ID.toString = function () {\n return FUNCTION_KEY.toString();\n };\n\n return FUNCTION_ID;\n })(FUNCTION)\n"); - -var visitor = { - "ReferencedIdentifier|BindingIdentifier": function ReferencedIdentifierBindingIdentifier(path, state) { - if (path.node.name !== state.name) return; - - var localDeclar = path.scope.getBindingIdentifier(state.name); - if (localDeclar !== state.outerDeclar) return; - - state.selfReference = true; - path.stop(); - } -}; - -function wrap(state, method, id, scope) { - if (state.selfReference) { - if (scope.hasBinding(id.name) && !scope.hasGlobal(id.name)) { - scope.rename(id.name); - } else { - if (!t.isFunction(method)) return; - - var build = buildPropertyMethodAssignmentWrapper; - if (method.generator) build = buildGeneratorPropertyMethodAssignmentWrapper; - var _template = build({ - FUNCTION: method, - FUNCTION_ID: id, - FUNCTION_KEY: scope.generateUidIdentifier(id.name) - }).expression; - _template.callee._skipModulesRemap = true; - - var params = _template.callee.body.body[0].params; - for (var i = 0, len = (0, _babelHelperGetFunctionArity2.default)(method); i < len; i++) { - params.push(scope.generateUidIdentifier("x")); - } - - return _template; - } - } - - method.id = id; - scope.getProgramParent().references[id.name] = true; -} - -function visit(node, name, scope) { - var state = { - selfAssignment: false, - selfReference: false, - outerDeclar: scope.getBindingIdentifier(name), - references: [], - name: name - }; - - var binding = scope.getOwnBinding(name); - - if (binding) { - if (binding.kind === "param") { - state.selfReference = true; - } else {} - } else if (state.outerDeclar || scope.hasGlobal(name)) { - scope.traverse(node, visitor, state); - } - - return state; -} - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/package.json deleted file mode 100644 index 86c4c0f52..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-function-name@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes" - ] - ], - "_from": "babel-helper-function-name@>=6.18.0 <7.0.0", - "_id": "babel-helper-function-name@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-function-name", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-helper-function-name-6.18.0.tgz_1477343927048_0.632998013868928" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-function-name", - "raw": "babel-helper-function-name@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-helper-define-map", - "/babel-helper-remap-async-to-generator", - "/babel-plugin-transform-class-properties", - "/babel-plugin-transform-es2015-classes", - "/babel-plugin-transform-es2015-function-name" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz", - "_shasum": "68ec71aeba1f3e28b2a6f0730190b754a9bf30e6", - "_shrinkwrap": null, - "_spec": "babel-helper-function-name@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes", - "dependencies": { - "babel-helper-get-function-arity": "^6.18.0", - "babel-runtime": "^6.0.0", - "babel-template": "^6.8.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0" - }, - "description": "Helper function to change the property 'name' of every function", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "68ec71aeba1f3e28b2a6f0730190b754a9bf30e6", - "tarball": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-function-name", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-function-name" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/README.md deleted file mode 100644 index 2263230cd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-get-function-arity - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/lib/index.js deleted file mode 100644 index 929dc41e1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/lib/index.js +++ /dev/null @@ -1,22 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (node) { - var params = node.params; - for (var i = 0; i < params.length; i++) { - var param = params[i]; - if (t.isAssignmentPattern(param) || t.isRestElement(param)) { - return i; - } - } - return params.length; -}; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/package.json deleted file mode 100644 index f1cc0d9d0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-get-function-arity/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-get-function-arity@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name" - ] - ], - "_from": "babel-helper-get-function-arity@>=6.18.0 <7.0.0", - "_id": "babel-helper-get-function-arity@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-get-function-arity", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-helper-get-function-arity-6.18.0.tgz_1477343927387_0.5835238571744412" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-get-function-arity", - "raw": "babel-helper-get-function-arity@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-helper-function-name", - "/babel-plugin-transform-es2015-parameters" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.18.0.tgz", - "_shasum": "a5b19695fd3f9cdfc328398b47dafcd7094f9f24", - "_shrinkwrap": null, - "_spec": "babel-helper-get-function-arity@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-helper-function-name", - "dependencies": { - "babel-runtime": "^6.0.0", - "babel-types": "^6.18.0" - }, - "description": "Helper function to get function arity", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "a5b19695fd3f9cdfc328398b47dafcd7094f9f24", - "tarball": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-get-function-arity", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-get-function-arity" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/README.md deleted file mode 100644 index 5b850971c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-hoist-variables - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/lib/index.js deleted file mode 100644 index ba00137fc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/lib/index.js +++ /dev/null @@ -1,71 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function (path, emit) { - var kind = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "var"; - - path.traverse(visitor, { kind: kind, emit: emit }); -}; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var visitor = { - Scope: function Scope(path, state) { - if (state.kind === "let") path.skip(); - }, - Function: function Function(path) { - path.skip(); - }, - VariableDeclaration: function VariableDeclaration(path, state) { - if (state.kind && path.node.kind !== state.kind) return; - - var nodes = []; - - var declarations = path.get("declarations"); - var firstId = void 0; - - for (var _iterator = declarations, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var declar = _ref; - - firstId = declar.node.id; - - if (declar.node.init) { - nodes.push(t.expressionStatement(t.assignmentExpression("=", declar.node.id, declar.node.init))); - } - - for (var name in declar.getBindingIdentifiers()) { - state.emit(t.identifier(name), name); - } - } - - if (path.parentPath.isFor({ left: path.node })) { - path.replaceWith(firstId); - } else { - path.replaceWithMultiple(nodes); - } - } -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/package.json deleted file mode 100644 index f0b954f96..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-hoist-variables/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-hoist-variables@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs" - ] - ], - "_from": "babel-helper-hoist-variables@>=6.18.0 <7.0.0", - "_id": "babel-helper-hoist-variables@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-hoist-variables", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-helper-hoist-variables-6.18.0.tgz_1477343927815_0.2728551540058106" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-hoist-variables", - "raw": "babel-helper-hoist-variables@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-helper-call-delegate", - "/babel-plugin-transform-es2015-modules-systemjs" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.18.0.tgz", - "_shasum": "a835b5ab8b46d6de9babefae4d98ea41e866b82a", - "_shrinkwrap": null, - "_spec": "babel-helper-hoist-variables@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs", - "dependencies": { - "babel-runtime": "^6.0.0", - "babel-types": "^6.18.0" - }, - "description": "Helper function to hoist variables", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "a835b5ab8b46d6de9babefae4d98ea41e866b82a", - "tarball": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-hoist-variables", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-hoist-variables" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/README.md deleted file mode 100644 index f6847bf00..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-optimise-call-expression - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/lib/index.js deleted file mode 100644 index 8bff7b899..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/lib/index.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (callee, thisNode, args) { - if (args.length === 1 && t.isSpreadElement(args[0]) && t.isIdentifier(args[0].argument, { name: "arguments" })) { - return t.callExpression(t.memberExpression(callee, t.identifier("apply")), [thisNode, args[0].argument]); - } else { - return t.callExpression(t.memberExpression(callee, t.identifier("call")), [thisNode].concat(args)); - } -}; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/package.json deleted file mode 100644 index 0fffb63f2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-optimise-call-expression/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-optimise-call-expression@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes" - ] - ], - "_from": "babel-helper-optimise-call-expression@>=6.18.0 <7.0.0", - "_id": "babel-helper-optimise-call-expression@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-optimise-call-expression", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-helper-optimise-call-expression-6.18.0.tgz_1477343927840_0.06359984679147601" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-optimise-call-expression", - "raw": "babel-helper-optimise-call-expression@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-helper-replace-supers", - "/babel-plugin-transform-es2015-classes" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.18.0.tgz", - "_shasum": "9261d0299ee1a4f08a6dd28b7b7c777348fd8f0f", - "_shrinkwrap": null, - "_spec": "babel-helper-optimise-call-expression@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes", - "dependencies": { - "babel-runtime": "^6.0.0", - "babel-types": "^6.18.0" - }, - "description": "Helper function to optimise call expression", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "9261d0299ee1a4f08a6dd28b7b7c777348fd8f0f", - "tarball": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-optimise-call-expression", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-optimise-call-expression" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/README.md deleted file mode 100644 index bcdfccba9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-regex - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/lib/index.js deleted file mode 100644 index 803ae5664..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/lib/index.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.is = is; -exports.pullFlag = pullFlag; - -var _pull = require("lodash/pull"); - -var _pull2 = _interopRequireDefault(_pull); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function is(node, flag) { - return t.isRegExpLiteral(node) && node.flags.indexOf(flag) >= 0; -} - -function pullFlag(node, flag) { - var flags = node.flags.split(""); - if (node.flags.indexOf(flag) < 0) return; - (0, _pull2.default)(flags, flag); - node.flags = flags.join(""); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/package.json deleted file mode 100644 index ddc87e54b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-regex/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-regex@^6.8.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex" - ] - ], - "_from": "babel-helper-regex@>=6.8.0 <7.0.0", - "_id": "babel-helper-regex@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-regex", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-helper-regex-6.18.0.tgz_1477343930448_0.029067028081044555" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-regex", - "raw": "babel-helper-regex@^6.8.0", - "rawSpec": "^6.8.0", - "scope": null, - "spec": ">=6.8.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-es2015-sticky-regex", - "/babel-plugin-transform-es2015-unicode-regex" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.18.0.tgz", - "_shasum": "ae0ebfd77de86cb2f1af258e2cc20b5fe893ecc6", - "_shrinkwrap": null, - "_spec": "babel-helper-regex@^6.8.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex", - "dependencies": { - "babel-runtime": "^6.9.0", - "babel-types": "^6.18.0", - "lodash": "^4.2.0" - }, - "description": "Helper function to check for literal RegEx", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "ae0ebfd77de86cb2f1af258e2cc20b5fe893ecc6", - "tarball": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-regex", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-regex" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/README.md deleted file mode 100644 index a7331914d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-remap-async-to-generator - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/lib/for-await.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/lib/for-await.js deleted file mode 100644 index 0270b98cb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/lib/for-await.js +++ /dev/null @@ -1,89 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (path, helpers) { - var node = path.node; - var scope = path.scope; - var parent = path.parent; - - - var stepKey = scope.generateUidIdentifier("step"); - var stepValue = scope.generateUidIdentifier("value"); - var left = node.left; - var declar = void 0; - - if (t.isIdentifier(left) || t.isPattern(left) || t.isMemberExpression(left)) { - declar = t.expressionStatement(t.assignmentExpression("=", left, stepValue)); - } else if (t.isVariableDeclaration(left)) { - declar = t.variableDeclaration(left.kind, [t.variableDeclarator(left.declarations[0].id, stepValue)]); - } - - var template = buildForAwait(); - - (0, _babelTraverse2.default)(template, forAwaitVisitor, null, { - ITERATOR_HAD_ERROR_KEY: scope.generateUidIdentifier("didIteratorError"), - ITERATOR_COMPLETION: scope.generateUidIdentifier("iteratorNormalCompletion"), - ITERATOR_ERROR_KEY: scope.generateUidIdentifier("iteratorError"), - ITERATOR_KEY: scope.generateUidIdentifier("iterator"), - GET_ITERATOR: helpers.getAsyncIterator, - OBJECT: node.right, - STEP_VALUE: stepValue, - STEP_KEY: stepKey, - AWAIT: helpers.wrapAwait - }); - - template = template.body.body; - - var isLabeledParent = t.isLabeledStatement(parent); - var tryBody = template[3].block.body; - var loop = tryBody[0]; - - if (isLabeledParent) { - tryBody[0] = t.labeledStatement(parent.label, loop); - } - - return { - replaceParent: isLabeledParent, - node: template, - declar: declar, - loop: loop - }; -}; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -var _babelTraverse = require("babel-traverse"); - -var _babelTraverse2 = _interopRequireDefault(_babelTraverse); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -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 buildForAwait = (0, _babelTemplate2.default)("\n function* wrapper() {\n var ITERATOR_COMPLETION = true;\n var ITERATOR_HAD_ERROR_KEY = false;\n var ITERATOR_ERROR_KEY = undefined;\n try {\n for (\n var ITERATOR_KEY = GET_ITERATOR(OBJECT), STEP_KEY, STEP_VALUE;\n (\n STEP_KEY = yield AWAIT(ITERATOR_KEY.next()),\n ITERATOR_COMPLETION = STEP_KEY.done,\n STEP_VALUE = yield AWAIT(STEP_KEY.value),\n !ITERATOR_COMPLETION\n );\n ITERATOR_COMPLETION = true) {\n }\n } catch (err) {\n ITERATOR_HAD_ERROR_KEY = true;\n ITERATOR_ERROR_KEY = err;\n } finally {\n try {\n if (!ITERATOR_COMPLETION && ITERATOR_KEY.return) {\n yield AWAIT(ITERATOR_KEY.return());\n }\n } finally {\n if (ITERATOR_HAD_ERROR_KEY) {\n throw ITERATOR_ERROR_KEY;\n }\n }\n }\n }\n"); - -var forAwaitVisitor = { - noScope: true, - - Identifier: function Identifier(path, replacements) { - if (path.node.name in replacements) { - path.replaceInline(replacements[path.node.name]); - } - }, - CallExpression: function CallExpression(path, replacements) { - var callee = path.node.callee; - - if (t.isIdentifier(callee) && callee.name === "AWAIT" && !replacements.AWAIT) { - path.replaceWith(path.node.arguments[0]); - } - } -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/lib/index.js deleted file mode 100644 index a576db88e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/lib/index.js +++ /dev/null @@ -1,166 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (path, file, helpers) { - if (!helpers) { - helpers = { wrapAsync: file }; - file = null; - } - path.traverse(awaitVisitor, { - file: file, - wrapAwait: helpers.wrapAwait - }); - - if (path.isClassMethod() || path.isObjectMethod()) { - classOrObjectMethod(path, helpers.wrapAsync); - } else { - plainFunction(path, helpers.wrapAsync); - } -}; - -var _babelHelperFunctionName = require("babel-helper-function-name"); - -var _babelHelperFunctionName2 = _interopRequireDefault(_babelHelperFunctionName); - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _forAwait = require("./for-await"); - -var _forAwait2 = _interopRequireDefault(_forAwait); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var buildWrapper = (0, _babelTemplate2.default)("\n (() => {\n var REF = FUNCTION;\n return function NAME(PARAMS) {\n return REF.apply(this, arguments);\n };\n })\n"); - -var namedBuildWrapper = (0, _babelTemplate2.default)("\n (() => {\n var REF = FUNCTION;\n function NAME(PARAMS) {\n return REF.apply(this, arguments);\n }\n return NAME;\n })\n"); - -var awaitVisitor = { - Function: function Function(path) { - if (path.isArrowFunctionExpression() && !path.node.async) { - path.arrowFunctionToShadowed(); - return; - } - path.skip(); - }, - AwaitExpression: function AwaitExpression(_ref, _ref2) { - var node = _ref.node; - var wrapAwait = _ref2.wrapAwait; - - node.type = "YieldExpression"; - if (wrapAwait) { - node.argument = t.callExpression(wrapAwait, [node.argument]); - } - }, - ForAwaitStatement: function ForAwaitStatement(path, _ref3) { - var file = _ref3.file; - var wrapAwait = _ref3.wrapAwait; - var node = path.node; - - - var build = (0, _forAwait2.default)(path, { - getAsyncIterator: file.addHelper("asyncIterator"), - wrapAwait: wrapAwait - }); - - var declar = build.declar; - var loop = build.loop; - - var block = loop.body; - - path.ensureBlock(); - - if (declar) { - block.body.push(declar); - } - - block.body = block.body.concat(node.body.body); - - t.inherits(loop, node); - t.inherits(loop.body, node.body); - - if (build.replaceParent) { - path.parentPath.replaceWithMultiple(build.node); - path.remove(); - } else { - path.replaceWithMultiple(build.node); - } - } -}; - -function classOrObjectMethod(path, callId) { - var node = path.node; - var body = node.body; - - node.async = false; - - var container = t.functionExpression(null, [], t.blockStatement(body.body), true); - container.shadow = true; - body.body = [t.returnStatement(t.callExpression(t.callExpression(callId, [container]), []))]; - - node.generator = false; -} - -function plainFunction(path, callId) { - var node = path.node; - var isDeclaration = path.isFunctionDeclaration(); - var asyncFnId = node.id; - var wrapper = buildWrapper; - - if (path.isArrowFunctionExpression()) { - path.arrowFunctionToShadowed(); - } else if (!isDeclaration && asyncFnId) { - wrapper = namedBuildWrapper; - } - - node.async = false; - node.generator = true; - - node.id = null; - - if (isDeclaration) { - node.type = "FunctionExpression"; - } - - var built = t.callExpression(callId, [node]); - var container = wrapper({ - NAME: asyncFnId, - REF: path.scope.generateUidIdentifier("ref"), - FUNCTION: built, - PARAMS: node.params.map(function () { - return path.scope.generateUidIdentifier("x"); - }) - }).expression; - - if (isDeclaration) { - var declar = t.variableDeclaration("let", [t.variableDeclarator(t.identifier(asyncFnId.name), t.callExpression(container, []))]); - declar._blockHoist = true; - - path.replaceWith(declar); - } else { - var retFunction = container.body.body[1].argument; - if (!asyncFnId) { - (0, _babelHelperFunctionName2.default)({ - node: retFunction, - parent: path.parent, - scope: path.scope - }); - } - - if (!retFunction || retFunction.id || node.params.length) { - path.replaceWith(t.callExpression(container, [])); - } else { - path.replaceWith(built); - } - } -} - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/package.json deleted file mode 100644 index fbc198f76..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-remap-async-to-generator/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-remap-async-to-generator@^6.16.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions" - ] - ], - "_from": "babel-helper-remap-async-to-generator@>=6.16.2 <7.0.0", - "_id": "babel-helper-remap-async-to-generator@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-remap-async-to-generator", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-helper-remap-async-to-generator-6.18.0.tgz_1477343931091_0.6799094395246357" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-remap-async-to-generator", - "raw": "babel-helper-remap-async-to-generator@^6.16.2", - "rawSpec": "^6.16.2", - "scope": null, - "spec": ">=6.16.2 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-async-generator-functions", - "/babel-plugin-transform-async-to-generator" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.18.0.tgz", - "_shasum": "336cdf3cab650bb191b02fc16a3708e7be7f9ce5", - "_shrinkwrap": null, - "_spec": "babel-helper-remap-async-to-generator@^6.16.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions", - "dependencies": { - "babel-helper-function-name": "^6.18.0", - "babel-runtime": "^6.0.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0" - }, - "description": "Helper function to remap async functions to generators", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "336cdf3cab650bb191b02fc16a3708e7be7f9ce5", - "tarball": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-remap-async-to-generator", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-remap-async-to-generator" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/README.md deleted file mode 100644 index a6515daed..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# babel-helper-replace-supers - -## Usage - -TODO diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/lib/index.js deleted file mode 100644 index d0e14522b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/lib/index.js +++ /dev/null @@ -1,228 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _symbol = require("babel-runtime/core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -var _babelHelperOptimiseCallExpression = require("babel-helper-optimise-call-expression"); - -var _babelHelperOptimiseCallExpression2 = _interopRequireDefault(_babelHelperOptimiseCallExpression); - -var _babelMessages = require("babel-messages"); - -var messages = _interopRequireWildcard(_babelMessages); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var HARDCORE_THIS_REF = (0, _symbol2.default)(); - -function isIllegalBareSuper(node, parent) { - if (!t.isSuper(node)) return false; - if (t.isMemberExpression(parent, { computed: false })) return false; - if (t.isCallExpression(parent, { callee: node })) return false; - return true; -} - -function isMemberExpressionSuper(node) { - return t.isMemberExpression(node) && t.isSuper(node.object); -} - -function getPrototypeOfExpression(objectRef, isStatic) { - var targetRef = isStatic ? objectRef : t.memberExpression(objectRef, t.identifier("prototype")); - - return t.logicalExpression("||", t.memberExpression(targetRef, t.identifier("__proto__")), t.callExpression(t.memberExpression(t.identifier("Object"), t.identifier("getPrototypeOf")), [targetRef])); -} - -var visitor = { - Function: function Function(path) { - if (!path.inShadow("this")) { - path.skip(); - } - }, - ReturnStatement: function ReturnStatement(path, state) { - if (!path.inShadow("this")) { - state.returns.push(path); - } - }, - ThisExpression: function ThisExpression(path, state) { - if (!path.node[HARDCORE_THIS_REF]) { - state.thises.push(path); - } - }, - enter: function enter(path, state) { - var callback = state.specHandle; - if (state.isLoose) callback = state.looseHandle; - - var isBareSuper = path.isCallExpression() && path.get("callee").isSuper(); - - var result = callback.call(state, path); - - if (result) { - state.hasSuper = true; - } - - if (isBareSuper) { - state.bareSupers.push(path); - } - - if (result === true) { - path.requeue(); - } - - if (result !== true && result) { - if (Array.isArray(result)) { - path.replaceWithMultiple(result); - } else { - path.replaceWith(result); - } - } - } -}; - -var ReplaceSupers = function () { - function ReplaceSupers(opts) { - var inClass = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - (0, _classCallCheck3.default)(this, ReplaceSupers); - - this.forceSuperMemoisation = opts.forceSuperMemoisation; - this.methodPath = opts.methodPath; - this.methodNode = opts.methodNode; - this.superRef = opts.superRef; - this.isStatic = opts.isStatic; - this.hasSuper = false; - this.inClass = inClass; - this.isLoose = opts.isLoose; - this.scope = this.methodPath.scope; - this.file = opts.file; - this.opts = opts; - - this.bareSupers = []; - this.returns = []; - this.thises = []; - } - - ReplaceSupers.prototype.getObjectRef = function getObjectRef() { - return this.opts.objectRef || this.opts.getObjectRef(); - }; - - ReplaceSupers.prototype.setSuperProperty = function setSuperProperty(property, value, isComputed) { - return t.callExpression(this.file.addHelper("set"), [getPrototypeOfExpression(this.getObjectRef(), this.isStatic), isComputed ? property : t.stringLiteral(property.name), value, t.thisExpression()]); - }; - - ReplaceSupers.prototype.getSuperProperty = function getSuperProperty(property, isComputed) { - return t.callExpression(this.file.addHelper("get"), [getPrototypeOfExpression(this.getObjectRef(), this.isStatic), isComputed ? property : t.stringLiteral(property.name), t.thisExpression()]); - }; - - ReplaceSupers.prototype.replace = function replace() { - this.methodPath.traverse(visitor, this); - }; - - ReplaceSupers.prototype.getLooseSuperProperty = function getLooseSuperProperty(id, parent) { - var methodNode = this.methodNode; - var superRef = this.superRef || t.identifier("Function"); - - if (parent.property === id) { - return; - } else if (t.isCallExpression(parent, { callee: id })) { - return; - } else if (t.isMemberExpression(parent) && !methodNode.static) { - return t.memberExpression(superRef, t.identifier("prototype")); - } else { - return superRef; - } - }; - - ReplaceSupers.prototype.looseHandle = function looseHandle(path) { - var node = path.node; - if (path.isSuper()) { - return this.getLooseSuperProperty(node, path.parent); - } else if (path.isCallExpression()) { - var callee = node.callee; - if (!t.isMemberExpression(callee)) return; - if (!t.isSuper(callee.object)) return; - - t.appendToMemberExpression(callee, t.identifier("call")); - node.arguments.unshift(t.thisExpression()); - return true; - } - }; - - ReplaceSupers.prototype.specHandleAssignmentExpression = function specHandleAssignmentExpression(ref, path, node) { - if (node.operator === "=") { - return this.setSuperProperty(node.left.property, node.right, node.left.computed); - } else { - ref = ref || path.scope.generateUidIdentifier("ref"); - return [t.variableDeclaration("var", [t.variableDeclarator(ref, node.left)]), t.expressionStatement(t.assignmentExpression("=", node.left, t.binaryExpression(node.operator[0], ref, node.right)))]; - } - }; - - ReplaceSupers.prototype.specHandle = function specHandle(path) { - var property = void 0; - var computed = void 0; - var args = void 0; - - var parent = path.parent; - var node = path.node; - - if (isIllegalBareSuper(node, parent)) { - throw path.buildCodeFrameError(messages.get("classesIllegalBareSuper")); - } - - if (t.isCallExpression(node)) { - var callee = node.callee; - if (t.isSuper(callee)) { - return; - } else if (isMemberExpressionSuper(callee)) { - property = callee.property; - computed = callee.computed; - args = node.arguments; - } - } else if (t.isMemberExpression(node) && t.isSuper(node.object)) { - property = node.property; - computed = node.computed; - } else if (t.isUpdateExpression(node) && isMemberExpressionSuper(node.argument)) { - var binary = t.binaryExpression(node.operator[0], node.argument, t.numericLiteral(1)); - if (node.prefix) { - return this.specHandleAssignmentExpression(null, path, binary); - } else { - var ref = path.scope.generateUidIdentifier("ref"); - return this.specHandleAssignmentExpression(ref, path, binary).concat(t.expressionStatement(ref)); - } - } else if (t.isAssignmentExpression(node) && isMemberExpressionSuper(node.left)) { - return this.specHandleAssignmentExpression(null, path, node); - } - - if (!property) return; - - var superProperty = this.getSuperProperty(property, computed); - - if (args) { - return this.optimiseCall(superProperty, args); - } else { - return superProperty; - } - }; - - ReplaceSupers.prototype.optimiseCall = function optimiseCall(callee, args) { - var thisNode = t.thisExpression(); - thisNode[HARDCORE_THIS_REF] = true; - return (0, _babelHelperOptimiseCallExpression2.default)(callee, thisNode, args); - }; - - return ReplaceSupers; -}(); - -exports.default = ReplaceSupers; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/package.json deleted file mode 100644 index 83d274ede..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helper-replace-supers/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "babel-helper-replace-supers@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes" - ] - ], - "_from": "babel-helper-replace-supers@>=6.18.0 <7.0.0", - "_id": "babel-helper-replace-supers@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helper-replace-supers", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-helper-replace-supers-6.18.0.tgz_1477343931154_0.06444387580268085" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helper-replace-supers", - "raw": "babel-helper-replace-supers@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-es2015-classes", - "/babel-plugin-transform-es2015-object-super" - ], - "_resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz", - "_shasum": "28ec69877be4144dbd64f4cc3a337e89f29a924e", - "_shrinkwrap": null, - "_spec": "babel-helper-replace-supers@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes", - "dependencies": { - "babel-helper-optimise-call-expression": "^6.18.0", - "babel-messages": "^6.8.0", - "babel-runtime": "^6.0.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0" - }, - "description": "Helper function to replace supers", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "28ec69877be4144dbd64f4cc3a337e89f29a924e", - "tarball": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helper-replace-supers", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helper-replace-supers" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helpers/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-helpers/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helpers/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helpers/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-helpers/README.md deleted file mode 100644 index c4a927ffa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helpers/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# babel-helpers - -> Collection of helper functions used by Babel transforms. - -## Install - -```js -$ npm install babel-helpers -``` - -## Usage - -```js -import * as helpers from 'babel-helpers'; -import * as t from 'babel-types'; - -const typeofHelper = helpers.get('typeof'); - -t.isExpressionStatement(typeofHelper); -// true -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helpers/lib/helpers.js b/fundamentals/bug-challenge-es6/node_modules/babel-helpers/lib/helpers.js deleted file mode 100644 index f85c372ea..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helpers/lib/helpers.js +++ /dev/null @@ -1,76 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var helpers = {}; -exports.default = helpers; - - -helpers.typeof = (0, _babelTemplate2.default)("\n (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\")\n ? function (obj) { return typeof obj; }\n : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype\n ? \"symbol\"\n : typeof obj;\n };\n"); - -helpers.jsx = (0, _babelTemplate2.default)("\n (function () {\n var REACT_ELEMENT_TYPE = (typeof Symbol === \"function\" && Symbol.for && Symbol.for(\"react.element\")) || 0xeac7;\n\n return function createRawReactElement (type, props, key, children) {\n var defaultProps = type && type.defaultProps;\n var childrenLength = arguments.length - 3;\n\n if (!props && childrenLength !== 0) {\n // If we're going to assign props.children, we create a new object now\n // to avoid mutating defaultProps.\n props = {};\n }\n if (props && defaultProps) {\n for (var propName in defaultProps) {\n if (props[propName] === void 0) {\n props[propName] = defaultProps[propName];\n }\n }\n } else if (!props) {\n props = defaultProps || {};\n }\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 3];\n }\n props.children = childArray;\n }\n\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key === undefined ? null : '' + key,\n ref: null,\n props: props,\n _owner: null,\n };\n };\n\n })()\n"); - -helpers.asyncIterator = (0, _babelTemplate2.default)("\n (function (iterable) {\n if (typeof Symbol === \"function\") {\n if (Symbol.asyncIterator) {\n var method = iterable[Symbol.asyncIterator];\n if (method != null) return method.call(iterable);\n }\n if (Symbol.iterator) {\n return iterable[Symbol.iterator]();\n }\n }\n throw new TypeError(\"Object is not async iterable\");\n })\n"); - -helpers.asyncGenerator = (0, _babelTemplate2.default)("\n (function () {\n function AwaitValue(value) {\n this.value = value;\n }\n\n function AsyncGenerator(gen) {\n var front, back;\n\n function send(key, arg) {\n return new Promise(function (resolve, reject) {\n var request = {\n key: key,\n arg: arg,\n resolve: resolve,\n reject: reject,\n next: null\n };\n\n if (back) {\n back = back.next = request;\n } else {\n front = back = request;\n resume(key, arg);\n }\n });\n }\n\n function resume(key, arg) {\n try {\n var result = gen[key](arg)\n var value = result.value;\n if (value instanceof AwaitValue) {\n Promise.resolve(value.value).then(\n function (arg) { resume(\"next\", arg); },\n function (arg) { resume(\"throw\", arg); });\n } else {\n settle(result.done ? \"return\" : \"normal\", result.value);\n }\n } catch (err) {\n settle(\"throw\", err);\n }\n }\n\n function settle(type, value) {\n switch (type) {\n case \"return\":\n front.resolve({ value: value, done: true });\n break;\n case \"throw\":\n front.reject(value);\n break;\n default:\n front.resolve({ value: value, done: false });\n break;\n }\n\n front = front.next;\n if (front) {\n resume(front.key, front.arg);\n } else {\n back = null;\n }\n }\n\n this._invoke = send;\n\n // Hide \"return\" method if generator return is not supported\n if (typeof gen.return !== \"function\") {\n this.return = undefined;\n }\n }\n\n if (typeof Symbol === \"function\" && Symbol.asyncIterator) {\n AsyncGenerator.prototype[Symbol.asyncIterator] = function () { return this; };\n }\n\n AsyncGenerator.prototype.next = function (arg) { return this._invoke(\"next\", arg); };\n AsyncGenerator.prototype.throw = function (arg) { return this._invoke(\"throw\", arg); };\n AsyncGenerator.prototype.return = function (arg) { return this._invoke(\"return\", arg); };\n\n return {\n wrap: function (fn) {\n return function () {\n return new AsyncGenerator(fn.apply(this, arguments));\n };\n },\n await: function (value) {\n return new AwaitValue(value);\n }\n };\n\n })()\n"); - -helpers.asyncGeneratorDelegate = (0, _babelTemplate2.default)("\n (function (inner, awaitWrap) {\n var iter = {}, waiting = false;\n\n function pump(key, value) {\n waiting = true;\n value = new Promise(function (resolve) { resolve(inner[key](value)); });\n return { done: false, value: awaitWrap(value) };\n };\n\n if (typeof Symbol === \"function\" && Symbol.iterator) {\n iter[Symbol.iterator] = function () { return this; };\n }\n\n iter.next = function (value) {\n if (waiting) {\n waiting = false;\n return value;\n }\n return pump(\"next\", value);\n };\n\n if (typeof inner.throw === \"function\") {\n iter.throw = function (value) {\n if (waiting) {\n waiting = false;\n throw value;\n }\n return pump(\"throw\", value);\n };\n }\n\n if (typeof inner.return === \"function\") {\n iter.return = function (value) {\n return pump(\"return\", value);\n };\n }\n\n return iter;\n })\n"); - -helpers.asyncToGenerator = (0, _babelTemplate2.default)("\n (function (fn) {\n return function () {\n var gen = fn.apply(this, arguments);\n return new Promise(function (resolve, reject) {\n function step(key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n return Promise.resolve(value).then(function (value) {\n step(\"next\", value);\n }, function (err) {\n step(\"throw\", err);\n });\n }\n }\n\n return step(\"next\");\n });\n };\n })\n"); - -helpers.classCallCheck = (0, _babelTemplate2.default)("\n (function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n });\n"); - -helpers.createClass = (0, _babelTemplate2.default)("\n (function() {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i ++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n })()\n"); - -helpers.defineEnumerableProperties = (0, _babelTemplate2.default)("\n (function (obj, descs) {\n for (var key in descs) {\n var desc = descs[key];\n desc.configurable = desc.enumerable = true;\n if (\"value\" in desc) desc.writable = true;\n Object.defineProperty(obj, key, desc);\n }\n return obj;\n })\n"); - -helpers.defaults = (0, _babelTemplate2.default)("\n (function (obj, defaults) {\n var keys = Object.getOwnPropertyNames(defaults);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = Object.getOwnPropertyDescriptor(defaults, key);\n if (value && value.configurable && obj[key] === undefined) {\n Object.defineProperty(obj, key, value);\n }\n }\n return obj;\n })\n"); - -helpers.defineProperty = (0, _babelTemplate2.default)("\n (function (obj, key, value) {\n // Shortcircuit the slow defineProperty path when possible.\n // We are trying to avoid issues where setters defined on the\n // prototype cause side effects under the fast path of simple\n // assignment. By checking for existence of the property with\n // the in operator, we can optimize most of this overhead away.\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n });\n"); - -helpers.extends = (0, _babelTemplate2.default)("\n Object.assign || (function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n })\n"); - -helpers.get = (0, _babelTemplate2.default)("\n (function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n });\n"); - -helpers.inherits = (0, _babelTemplate2.default)("\n (function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n })\n"); - -helpers.instanceof = (0, _babelTemplate2.default)("\n (function (left, right) {\n if (right != null && typeof Symbol !== \"undefined\" && right[Symbol.hasInstance]) {\n return right[Symbol.hasInstance](left);\n } else {\n return left instanceof right;\n }\n });\n"); - -helpers.interopRequireDefault = (0, _babelTemplate2.default)("\n (function (obj) {\n return obj && obj.__esModule ? obj : { default: obj };\n })\n"); - -helpers.interopRequireWildcard = (0, _babelTemplate2.default)("\n (function (obj) {\n if (obj && obj.__esModule) {\n return obj;\n } else {\n var newObj = {};\n if (obj != null) {\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];\n }\n }\n newObj.default = obj;\n return newObj;\n }\n })\n"); - -helpers.newArrowCheck = (0, _babelTemplate2.default)("\n (function (innerThis, boundThis) {\n if (innerThis !== boundThis) {\n throw new TypeError(\"Cannot instantiate an arrow function\");\n }\n });\n"); - -helpers.objectDestructuringEmpty = (0, _babelTemplate2.default)("\n (function (obj) {\n if (obj == null) throw new TypeError(\"Cannot destructure undefined\");\n });\n"); - -helpers.objectWithoutProperties = (0, _babelTemplate2.default)("\n (function (obj, keys) {\n var target = {};\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n return target;\n })\n"); - -helpers.possibleConstructorReturn = (0, _babelTemplate2.default)("\n (function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n });\n"); - -helpers.selfGlobal = (0, _babelTemplate2.default)("\n typeof global === \"undefined\" ? self : global\n"); - -helpers.set = (0, _babelTemplate2.default)("\n (function set(object, property, value, receiver) {\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent !== null) {\n set(parent, property, value, receiver);\n }\n } else if (\"value\" in desc && desc.writable) {\n desc.value = value;\n } else {\n var setter = desc.set;\n\n if (setter !== undefined) {\n setter.call(receiver, value);\n }\n }\n\n return value;\n });\n"); - -helpers.slicedToArray = (0, _babelTemplate2.default)("\n (function () {\n // Broken out into a separate function to avoid deoptimizations due to the try/catch for the\n // array iterator case.\n function sliceIterator(arr, i) {\n // this is an expanded form of `for...of` that properly supports abrupt completions of\n // iterators etc. variable names have been minimised to reduce the size of this massive\n // helper. sometimes spec compliancy is annoying :(\n //\n // _n = _iteratorNormalCompletion\n // _d = _didIteratorError\n // _e = _iteratorError\n // _i = _iterator\n // _s = _step\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"]) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n return _arr;\n }\n\n return function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n return sliceIterator(arr, i);\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n };\n })();\n"); - -helpers.slicedToArrayLoose = (0, _babelTemplate2.default)("\n (function (arr, i) {\n if (Array.isArray(arr)) {\n return arr;\n } else if (Symbol.iterator in Object(arr)) {\n var _arr = [];\n for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {\n _arr.push(_step.value);\n if (i && _arr.length === i) break;\n }\n return _arr;\n } else {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n }\n });\n"); - -helpers.taggedTemplateLiteral = (0, _babelTemplate2.default)("\n (function (strings, raw) {\n return Object.freeze(Object.defineProperties(strings, {\n raw: { value: Object.freeze(raw) }\n }));\n });\n"); - -helpers.taggedTemplateLiteralLoose = (0, _babelTemplate2.default)("\n (function (strings, raw) {\n strings.raw = raw;\n return strings;\n });\n"); - -helpers.temporalRef = (0, _babelTemplate2.default)("\n (function (val, name, undef) {\n if (val === undef) {\n throw new ReferenceError(name + \" is not defined - temporal dead zone\");\n } else {\n return val;\n }\n })\n"); - -helpers.temporalUndefined = (0, _babelTemplate2.default)("\n ({})\n"); - -helpers.toArray = (0, _babelTemplate2.default)("\n (function (arr) {\n return Array.isArray(arr) ? arr : Array.from(arr);\n });\n"); - -helpers.toConsumableArray = (0, _babelTemplate2.default)("\n (function (arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n return arr2;\n } else {\n return Array.from(arr);\n }\n });\n"); -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helpers/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-helpers/lib/index.js deleted file mode 100644 index 3a44afaa0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helpers/lib/index.js +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.list = undefined; - -var _keys = require("babel-runtime/core-js/object/keys"); - -var _keys2 = _interopRequireDefault(_keys); - -exports.get = get; - -var _helpers = require("./helpers"); - -var _helpers2 = _interopRequireDefault(_helpers); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function get(name) { - var fn = _helpers2.default[name]; - if (!fn) throw new ReferenceError("Unknown helper " + name); - - return fn().expression; -} - -var list = exports.list = (0, _keys2.default)(_helpers2.default).map(function (name) { - return name[0] === "_" ? name.slice(1) : name; -}).filter(function (name) { - return name !== "__esModule"; -}); - -exports.default = get; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-helpers/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-helpers/package.json deleted file mode 100644 index 50164d4a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-helpers/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "babel-helpers@^6.16.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core" - ] - ], - "_from": "babel-helpers@>=6.16.0 <7.0.0", - "_id": "babel-helpers@6.16.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-helpers", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-helpers-6.16.0.tgz_1475091530459_0.6499027637764812" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-helpers", - "raw": "babel-helpers@^6.16.0", - "rawSpec": "^6.16.0", - "scope": null, - "spec": ">=6.16.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-core" - ], - "_resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.16.0.tgz", - "_shasum": "1095ec10d99279460553e67eb3eee9973d3867e3", - "_shrinkwrap": null, - "_spec": "babel-helpers@^6.16.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "babel-runtime": "^6.0.0", - "babel-template": "^6.16.0" - }, - "description": "Collection of helper functions used by Babel transforms.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "1095ec10d99279460553e67eb3eee9973d3867e3", - "tarball": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.16.0.tgz" - }, - "homepage": "https://babeljs.io/", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-helpers", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-helpers" - }, - "scripts": {}, - "version": "6.16.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-jest/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-jest/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-jest/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-jest/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-jest/README.md deleted file mode 100644 index 58365ccfa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-jest/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# babel-jest - -[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin - -## Usage - -If you are already using `jest-cli`, just add `babel-jest` and it will automatically compile JavaScript code using babel. - -``` -npm install --save-dev babel-jest -``` - -If you would like to write your own preprocessor, uninstall and delete babel-jest and set the [config.transform](http://facebook.github.io/jest/docs/api.html#transform-object-string-string) option to your preprocessor. diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-jest/build/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-jest/build/index.js deleted file mode 100644 index 23d486df3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-jest/build/index.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - - -const babel = require('babel-core'); -const crypto = require('crypto'); -const fs = require('fs'); -const jestPreset = require('babel-preset-jest'); -const path = require('path'); - -const BABELRC_FILENAME = '.babelrc'; - -const cache = Object.create(null); - -const getBabelRC = (filename, _ref) => {let useCache = _ref.useCache; - const paths = []; - let directory = filename; - while (directory !== (directory = path.dirname(directory))) { - if (useCache && cache[directory]) { - break; - } - - paths.push(directory); - const configFilePath = path.join(directory, BABELRC_FILENAME); - if (fs.existsSync(configFilePath)) { - cache[directory] = fs.readFileSync(configFilePath, 'utf8'); - break; - } - } - paths.forEach(directoryPath => { - cache[directoryPath] = cache[directory]; - }); - - return cache[directory] || ''; -}; - -const createTransformer = options => { - options = Object.assign({}, options, { - auxiliaryCommentBefore: ' istanbul ignore next ', - presets: (options && options.presets || []).concat([jestPreset]), - retainLines: true }); - - delete options.cacheDirectory; - - return { - canInstrument: true, - getCacheKey( - fileData, - filename, - configString, _ref2) - - {let instrument = _ref2.instrument,watch = _ref2.watch; - return crypto.createHash('md5'). - update(fileData). - update(configString) - // Don't use the in-memory cache in watch mode because the .babelrc - // file may be modified. - .update(getBabelRC(filename, { useCache: !watch })). - update(instrument ? 'instrument' : ''). - digest('hex'); - }, - process( - src, - filename, - config, - transformOptions) - { - let plugins = options.plugins || []; - - if (transformOptions && transformOptions.instrument) { - plugins = plugins.concat(require('babel-plugin-istanbul').default); - } - - if (babel.util.canCompile(filename)) { - return babel.transform( - src, - Object.assign({}, options, { filename, plugins })). - code; - } - return src; - } }; - -}; - -module.exports = createTransformer(); -module.exports.createTransformer = createTransformer; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-jest/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-jest/package.json deleted file mode 100644 index d43564a57..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-jest/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "babel-jest", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6" - ] - ], - "_from": "babel-jest@latest", - "_id": "babel-jest@17.0.2", - "_inCache": true, - "_installable": true, - "_location": "/babel-jest", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-jest-17.0.2.tgz_1479170355690_0.5522983237169683" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "babel-jest", - "raw": "babel-jest", - "rawSpec": "", - "scope": null, - "spec": "latest", - "type": "tag" - }, - "_requiredBy": [ - "#DEV:/" - ], - "_resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-17.0.2.tgz", - "_shasum": "8d51e0d03759713c331f108eb0b2eaa4c6efff74", - "_shrinkwrap": null, - "_spec": "babel-jest", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "babel-core": "^6.0.0", - "babel-plugin-istanbul": "^2.0.0", - "babel-preset-jest": "^17.0.2" - }, - "description": "[Babel](https://github.com/babel/babel) [jest](https://github.com/facebook/jest) plugin", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "8d51e0d03759713c331f108eb0b2eaa4c6efff74", - "tarball": "https://registry.npmjs.org/babel-jest/-/babel-jest-17.0.2.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - } - ], - "name": "babel-jest", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": {}, - "version": "17.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-messages/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-messages/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-messages/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-messages/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-messages/README.md deleted file mode 100644 index 297cd0c83..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-messages/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# babel-messages - -> Collection of debug messages used by Babel. - -## Install - -```sh -$ npm install babel-messages -``` - -## Usage - -```js -import * as messages from 'babel-messages'; - -messages.get('tailCallReassignmentDeopt'); -// > "Function reference has been..." -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-messages/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-messages/lib/index.js deleted file mode 100644 index 9565195a6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-messages/lib/index.js +++ /dev/null @@ -1,105 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; -exports.MESSAGES = undefined; - -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -exports.get = get; -/*istanbul ignore next*/exports.parseArgs = parseArgs; - -var /*istanbul ignore next*/_util = require("util"); - -/*istanbul ignore next*/ -var util = _interopRequireWildcard(_util); - -/*istanbul ignore next*/ -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * Mapping of messages to be used in Babel. - * Messages can include $0-style placeholders. - */ - -var MESSAGES = /*istanbul ignore next*/exports.MESSAGES = { - tailCallReassignmentDeopt: "Function reference has been reassigned, so it will probably be dereferenced, therefore we can't optimise this with confidence", - classesIllegalBareSuper: "Illegal use of bare super", - classesIllegalSuperCall: "Direct super call is illegal in non-constructor, use super.$1() instead", - scopeDuplicateDeclaration: "Duplicate declaration $1", - settersNoRest: "Setters aren't allowed to have a rest", - noAssignmentsInForHead: "No assignments allowed in for-in/of head", - expectedMemberExpressionOrIdentifier: "Expected type MemberExpression or Identifier", - invalidParentForThisNode: "We don't know how to handle this node within the current parent - please open an issue", - readOnly: "$1 is read-only", - unknownForHead: "Unknown node type $1 in ForStatement", - didYouMean: "Did you mean $1?", - codeGeneratorDeopt: "Note: The code generator has deoptimised the styling of $1 as it exceeds the max of $2.", - missingTemplatesDirectory: "no templates directory - this is most likely the result of a broken `npm publish`. Please report to https://github.com/babel/babel/issues", - unsupportedOutputType: "Unsupported output type $1", - illegalMethodName: "Illegal method name $1", - lostTrackNodePath: "We lost track of this node's position, likely because the AST was directly manipulated", - - modulesIllegalExportName: "Illegal export $1", - modulesDuplicateDeclarations: "Duplicate module declarations with the same source but in different scopes", - - undeclaredVariable: "Reference to undeclared variable $1", - undeclaredVariableType: "Referencing a type alias outside of a type annotation", - undeclaredVariableSuggestion: "Reference to undeclared variable $1 - did you mean $2?", - - traverseNeedsParent: "You must pass a scope and parentPath unless traversing a Program/File. Instead of that you tried to traverse a $1 node without passing scope and parentPath.", - traverseVerifyRootFunction: "You passed `traverse()` a function when it expected a visitor object, are you sure you didn't mean `{ enter: Function }`?", - traverseVerifyVisitorProperty: "You passed `traverse()` a visitor object with the property $1 that has the invalid property $2", - traverseVerifyNodeType: "You gave us a visitor for the node type $1 but it's not a valid type", - - pluginNotObject: "Plugin $2 specified in $1 was expected to return an object when invoked but returned $3", - pluginNotFunction: "Plugin $2 specified in $1 was expected to return a function but returned $3", - pluginUnknown: "Unknown plugin $1 specified in $2 at $3, attempted to resolve relative to $4", - pluginInvalidProperty: "Plugin $2 specified in $1 provided an invalid property of $3" -}; - -/** - * Get a message with $0 placeholders replaced by arguments. - */ - -/* eslint max-len: 0 */ - -function get(key) { - /*istanbul ignore next*/ - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - var msg = MESSAGES[key]; - if (!msg) throw new ReferenceError( /*istanbul ignore next*/"Unknown message " + /*istanbul ignore next*/(0, _stringify2.default)(key)); - - // stringify args - args = parseArgs(args); - - // replace $0 placeholders with args - return msg.replace(/\$(\d+)/g, function (str, i) { - return args[i - 1]; - }); -} - -/** - * Stingify arguments to be used inside messages. - */ - -function parseArgs(args) { - return args.map(function (val) { - if (val != null && val.inspect) { - return val.inspect(); - } else { - try { - return (/*istanbul ignore next*/(0, _stringify2.default)(val) || val + "" - ); - } catch (e) { - return util.inspect(val); - } - } - }); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-messages/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-messages/package.json deleted file mode 100644 index a3b296eb7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-messages/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "babel-messages@^6.8.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core" - ] - ], - "_from": "babel-messages@>=6.8.0 <7.0.0", - "_id": "babel-messages@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-messages", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-messages-6.8.0.tgz_1462232650913_0.2572917281650007" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-messages", - "raw": "babel-messages@^6.8.0", - "rawSpec": "^6.8.0", - "scope": null, - "spec": ">=6.8.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-core", - "/babel-generator", - "/babel-traverse" - ], - "_resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.8.0.tgz", - "_shasum": "bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9", - "_shrinkwrap": null, - "_spec": "babel-messages@^6.8.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "babel-runtime": "^6.0.0" - }, - "description": "Collection of debug messages used by Babel.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9", - "tarball": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.8.0.tgz" - }, - "homepage": "https://babeljs.io/", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-messages", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-messages" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/README.md deleted file mode 100644 index 0401a3f5c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# babel-plugin-check-es2015-constants - -Validate ES2015 constants - -## Installation - -```sh -$ npm install babel-plugin-check-es2015-constants -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["check-es2015-constants"] -} -``` - -### Via CLI - -```sh -$ babel --plugins check-es2015-constants script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["check-es2015-constants"] -}); -``` - -## Note - -This check will only validate consts. If you need it to compile down to `var` then you must also install and enable [`transform-es2015-block-scoping`](../babel-plugin-transform-es2015-block-scoping). diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/lib/index.js deleted file mode 100644 index 9b52995ef..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/lib/index.js +++ /dev/null @@ -1,47 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function ( /*istanbul ignore next*/_ref) { - /*istanbul ignore next*/var messages = _ref.messages; - - return { - visitor: { /*istanbul ignore next*/ - Scope: function Scope(_ref2) { - /*istanbul ignore next*/var scope = _ref2.scope; - - for (var name in scope.bindings) { - var binding = scope.bindings[name]; - if (binding.kind !== "const" && binding.kind !== "module") continue; - - for ( /*istanbul ignore next*/var _iterator = binding.constantViolations, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - /*istanbul ignore next*/ - var _ref3; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref3 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref3 = _i.value; - } - - var violation = _ref3; - - throw violation.buildCodeFrameError(messages.get("readOnly", name)); - } - } - } - } - }; -}; - -/*istanbul ignore next*/ -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/package.json deleted file mode 100644 index 27837a577..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-check-es2015-constants/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-check-es2015-constants@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-check-es2015-constants@>=6.3.13 <7.0.0", - "_id": "babel-plugin-check-es2015-constants@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-check-es2015-constants", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-check-es2015-constants-6.8.0.tgz_1462232651122_0.1353444093838334" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-check-es2015-constants", - "raw": "babel-plugin-check-es2015-constants@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.8.0.tgz", - "_shasum": "dbf024c32ed37bfda8dee1e76da02386a8d26fe7", - "_shrinkwrap": null, - "_spec": "babel-plugin-check-es2015-constants@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-runtime": "^6.0.0" - }, - "description": "Compile ES2015 constants to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "dbf024c32ed37bfda8dee1e76da02386a8d26fe7", - "tarball": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.8.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-check-es2015-constants", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-check-es2015-constants" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/CHANGELOG.md deleted file mode 100644 index 473c8ec60..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/CHANGELOG.md +++ /dev/null @@ -1,101 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - - -## [2.0.3](https://github.com/istanbuljs/babel-plugin-istanbul/compare/v2.0.2...v2.0.3) (2016-10-17) - - -### Bug Fixes - -* force istanbul-lib-instrument with variable hoisting fix ([#64](https://github.com/istanbuljs/babel-plugin-istanbul/issues/64)) ([209a0cf](https://github.com/istanbuljs/babel-plugin-istanbul/commit/209a0cf)) -* switch deprecated lodash.assign for object-assign ([#58](https://github.com/istanbuljs/babel-plugin-istanbul/issues/58)) ([6e051fc](https://github.com/istanbuljs/babel-plugin-istanbul/commit/6e051fc)) - - - - -## [2.0.2](https://github.com/istanbuljs/babel-plugin-istanbul/compare/v2.0.1...v2.0.2) (2016-09-08) - - -### Bug Fixes - -* take realpath of cwd, whether or not set in env ([#37](https://github.com/istanbuljs/babel-plugin-istanbul/issues/37)) ([6274d83](https://github.com/istanbuljs/babel-plugin-istanbul/commit/6274d83)) - - - - -## [2.0.1](https://github.com/istanbuljs/babel-plugin-istanbul/compare/v2.0.0...v2.0.1) (2016-09-02) - - -### Bug Fixes - -* update istanbul-lib-instrument ([573e0d4](https://github.com/istanbuljs/babel-plugin-istanbul/commit/573e0d4)) - - - - -# [2.0.0](https://github.com/istanbuljs/babel-plugin-istanbul/compare/v1.1.0...v2.0.0) (2016-08-14) - - -### Chores - -* upgrade to version of test-exclude with new exclude rules ([#35](https://github.com/istanbuljs/babel-plugin-istanbul/issues/35)) ([220ce2b](https://github.com/istanbuljs/babel-plugin-istanbul/commit/220ce2b)) - - -### BREAKING CHANGES - -* see https://github.com/istanbuljs/test-exclude/blob/master/CHANGELOG.md#breaking-changes - - - - -# [1.1.0](https://github.com/istanbuljs/babel-plugin-istanbul/compare/v1.0.3...v1.1.0) (2016-07-21) - - -### Bug Fixes - -* upgrade to istanbul-lib-instrument with faster babel-generator ([#18](https://github.com/istanbuljs/babel-plugin-istanbul/issues/18)) ([d33263c](https://github.com/istanbuljs/babel-plugin-istanbul/commit/d33263c)) - - -### Features - -* allow exclude/include options to be passed as Babel plugin config ([#16](https://github.com/istanbuljs/babel-plugin-istanbul/issues/16)) ([cf68421](https://github.com/istanbuljs/babel-plugin-istanbul/commit/cf68421)) - - - - -## [1.0.3](https://github.com/istanbuljs/babel-plugin-istanbul/compare/v1.0.2...v1.0.3) (2016-07-09) - - -### Bug Fixes - -* keep using NYC_CWD if available ([#10](https://github.com/istanbuljs/babel-plugin-istanbul/issues/10)) ([db0352b](https://github.com/istanbuljs/babel-plugin-istanbul/commit/db0352b)) - - - - -## [1.0.2](https://github.com/istanbuljs/babel-plugin-istanbul/compare/v1.0.1...v1.0.2) (2016-07-03) - - -### Bug Fixes - -* take realpath of process.cwd(), fixes [#7](https://github.com/istanbuljs/babel-plugin-istanbul/issues/7) ([#8](https://github.com/istanbuljs/babel-plugin-istanbul/issues/8)) ([e8d3785](https://github.com/istanbuljs/babel-plugin-istanbul/commit/e8d3785)), closes [#7](https://github.com/istanbuljs/babel-plugin-istanbul/issues/7) [#8](https://github.com/istanbuljs/babel-plugin-istanbul/issues/8) - - - - -## [1.0.1](https://github.com/istanbuljs/babel-plugin-istanbul/compare/v1.0.0...v1.0.1) (2016-06-30) - - -### Bug Fixes - -* upgrade to version of istanbul-lib-instrument that fixes some out of bounds issues ([#6](https://github.com/istanbuljs/babel-plugin-istanbul/issues/6)) ([a949065](https://github.com/istanbuljs/babel-plugin-istanbul/commit/a949065)), closes [#6](https://github.com/istanbuljs/babel-plugin-istanbul/issues/6) - - - -# 1.0.0 (2016-06-26) - - -### Features - -* port functionality from __coverage__, get ready for first release ([#2](https://github.com/istanbuljs/babel-plugin-istanbul/issues/2)) ([2a8ee44](https://github.com/istanbuljs/babel-plugin-istanbul/commit/2a8ee44)) diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/LICENSE b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/LICENSE deleted file mode 100644 index 22f21ab99..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2016, Istanbul Code Coverage -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of babel-plugin-istanbul nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/README.md deleted file mode 100644 index 436c937a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# babel-plugin-istanbul - -[![Build Status](https://travis-ci.org/istanbuljs/babel-plugin-istanbul.svg)](https://travis-ci.org/istanbuljs/babel-plugin-istanbul) -[![Coverage Status](https://coveralls.io/repos/github/istanbuljs/babel-plugin-istanbul/badge.svg?branch=master)](https://coveralls.io/github/istanbuljs/babel-plugin-istanbul?branch=master) -[![Standard Version](https://img.shields.io/badge/release-standard%20version-brightgreen.svg)](https://github.com/conventional-changelog/standard-version) - -A Babel plugin that instruments your code with Istanbul coverage. -It can instantly be used with [karma-coverage](https://github.com/karma-runner/karma-coverage) and mocha on Node.js (through [nyc](https://github.com/bcoe/nyc)). - -__Note:__ This plugin does not generate any report or save any data to any file; -it only adds instrumenting code to your JavaScript source code. -To integrate with testing tools, please see the [Integrations](#integrations) section. - -## Usage - -Install it: - -``` -npm install --save-dev babel-plugin-istanbul -``` - -Add it to `.babelrc` in test mode: - -```js -{ - "env": { - "test": { - "plugins": [ "istanbul" ] - } - } -} -``` - -Optionally, use [cross-env](https://www.npmjs.com/package/cross-env) to set -`NODE_ENV=test`: - -```json -{ - "scripts": { - "test": "cross-env NODE_ENV=test nyc --reporter=lcov --reporter=text mocha test/*.js" - } -} -``` - -## Integrations - -### karma - -It _just works_ with Karma. First, make sure that the code is already transpiled by Babel (either using `karma-babel-preprocessor`, `karma-webpack`, or `karma-browserify`). Then, simply set up [karma-coverage](https://github.com/karma-runner/karma-coverage) according to the docs, but __don’t add the `coverage` preprocessor.__ This plugin has already instrumented your code, and Karma should pick it up automatically. - -It has been tested with [bemusic/bemuse](https://codecov.io/github/bemusic/bemuse) project, which contains ~2400 statements. - -### mocha on node.js (through nyc) - -Configure Mocha to transpile JavaScript code using Babel, then you can run your tests with [`nyc`](https://github.com/bcoe/nyc), which will collect all the coverage report. - -babel-plugin-istanbul respects the `include`/`exclude` configuration options from nyc, -but you also need to __configure NYC not to instrument your code__ by adding these settings in your `package.json`: - -```js - "nyc": { - "sourceMap": false, - "instrument": false - }, -``` - -## Ignoring files - -You don't want to cover your test files as this will skew your coverage results. You can configure this by providing plugin options matching nyc's [`exclude`/`include` rules](https://github.com/bcoe/nyc#excluding-files): - -```json -{ - "env": { - "test": { - "plugins": [ - ["istanbul", { - "exclude": [ - "**/*.spec.js" - ] - }] - ] - } - } -} -``` - -If you don't provide options in your Babel config, the plugin will look for `exclude`/`include` config under an `"nyc"` key in `package.json`. - -You can also use [istanbul's ignore hints](https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes) to specify specific lines of code to skip instrumenting. - -## Credit where credit is due - -The approach used in `babel-plugin-istanbul` was inspired by [Thai Pangsakulyanont](https://github.com/dtinth)'s original library [`babel-plugin-__coverage__`](https://github.com/dtinth/babel-plugin-__coverage__). diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/lib/index.js deleted file mode 100644 index 2add46732..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/lib/index.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _fs = require('fs'); - -var _path = require('path'); - -var _istanbulLibInstrument = require('istanbul-lib-instrument'); - -var _objectAssign = require('object-assign'); - -var _objectAssign2 = _interopRequireDefault(_objectAssign); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var testExclude = require('test-exclude'); -var findUp = require('find-up'); - -function getRealpath(n) { - try { - return (0, _fs.realpathSync)(n) || n; - } catch (e) { - return n; - } -} - -function makeShouldSkip() { - var exclude = void 0; - return function shouldSkip(file, opts) { - if (!exclude) { - var cwd = getRealpath(process.env.NYC_CWD || process.cwd()); - exclude = testExclude((0, _objectAssign2.default)({ cwd: cwd }, Object.keys(opts).length > 0 ? opts : { - configKey: 'nyc', - configPath: (0, _path.dirname)(findUp.sync('package.json', { cwd: cwd })) - })); - } - - return !exclude.shouldInstrument(file); - }; -} - -function makeVisitor(_ref) { - var t = _ref.types; - - var shouldSkip = makeShouldSkip(); - return { - visitor: { - Program: { - enter: function enter(path) { - this.__dv__ = null; - var realPath = getRealpath(this.file.opts.filename); - if (shouldSkip(realPath, this.opts)) { - return; - } - this.__dv__ = (0, _istanbulLibInstrument.programVisitor)(t, realPath); - this.__dv__.enter(path); - }, - exit: function exit(path) { - if (!this.__dv__) { - return; - } - this.__dv__.exit(path); - } - } - } - }; -} - -exports.default = makeVisitor; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/package.json deleted file mode 100644 index 7d7ba139a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul/package.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-istanbul@^2.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-jest" - ] - ], - "_from": "babel-plugin-istanbul@>=2.0.0 <3.0.0", - "_id": "babel-plugin-istanbul@2.0.3", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-istanbul", - "_nodeVersion": "6.5.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-istanbul-2.0.3.tgz_1476687800569_0.42528436449356377" - }, - "_npmUser": { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-istanbul", - "raw": "babel-plugin-istanbul@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-jest" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-2.0.3.tgz", - "_shasum": "266b304b9109607d60748474394676982f660df4", - "_shrinkwrap": null, - "_spec": "babel-plugin-istanbul@^2.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-jest", - "author": { - "name": "Thai Pangsakulyanont @dtinth" - }, - "bugs": { - "url": "https://github.com/istanbuljs/babel-plugin-istanbul/issues" - }, - "dependencies": { - "find-up": "^1.1.2", - "istanbul-lib-instrument": "^1.1.4", - "object-assign": "^4.1.0", - "test-exclude": "^2.1.1" - }, - "description": "A babel plugin that adds istanbul instrumentation to ES6 code", - "devDependencies": { - "babel-cli": "^6.3.17", - "babel-core": "^6.3.21", - "babel-preset-es2015": "^6.3.13", - "chai": "^3.5.0", - "coveralls": "^2.11.9", - "cross-env": "^2.0.1", - "mocha": "^3.0.2", - "mock-fs": "^3.11.0", - "nyc": "^8.1.0", - "pmock": "^0.2.3", - "standard": "^8.0.0", - "standard-version": "^3.0.0" - }, - "directories": {}, - "dist": { - "shasum": "266b304b9109607d60748474394676982f660df4", - "tarball": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-2.0.3.tgz" - }, - "files": [ - "lib" - ], - "gitHead": "9cb75e23e9cfc47044b9617e7f3db966ec3b09d7", - "greenkeeper": { - "ignore": [ - "find-up", - "cross-env" - ] - }, - "homepage": "https://github.com/istanbuljs/babel-plugin-istanbul#readme", - "keywords": [ - "istanbul", - "babel", - "plugin", - "instrumentation" - ], - "license": "BSD-3-Clause", - "main": "lib/index.js", - "maintainers": [ - { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - } - ], - "name": "babel-plugin-istanbul", - "nyc": { - "include": [ - "src/*.js", - "fixtures/should-cover.js" - ], - "instrument": false, - "require": [ - "babel-core/register" - ], - "sourceMap": false - }, - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/istanbuljs/babel-plugin-istanbul.git" - }, - "scripts": { - "coverage": "nyc report --reporter=text-lcov | coveralls", - "prepublish": "npm test && npm run release", - "pretest": "standard && npm run release", - "release": "babel src --out-dir lib", - "test": "cross-env NODE_ENV=test nyc --reporter=lcov --reporter=text mocha --require=${FS_MOCK:-mock-fs} test/*.js", - "version": "standard-version" - }, - "version": "2.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/README.md deleted file mode 100644 index 42b18336e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-jest-hoist - -Babel plugin to hoist `jest.disableAutomock`, `jest.enableAutomock`, `jest.unmock`, `jest.mock`, calls above `import` statements. This plugin is automatically included when using [babel-jest](https://github.com/facebook/jest/tree/master/packages/babel-jest). - -## Installation - -```sh -$ npm install babel-plugin-jest-hoist -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["jest-hoist"] -} -``` - -### Via CLI - -```sh -$ babel --plugins jest-hoist script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["jest-hoist"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/build/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/build/index.js deleted file mode 100644 index 4ba77cfd6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/build/index.js +++ /dev/null @@ -1,168 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -function invariant(condition, message) { - if (!condition) { - throw new Error('babel-plugin-jest-hoist: ' + message); - } -} - -// We allow `jest`, `expect`, `require`, all default Node.js globals and all -// ES2015 built-ins to be used inside of a `jest.mock` factory. -// We also allow variables prefixed with `mock` as an escape-hatch. -const WHITELISTED_IDENTIFIERS = { - Array: true, - ArrayBuffer: true, - Boolean: true, - DataView: true, - Date: true, - Error: true, - EvalError: true, - Float32Array: true, - Float64Array: true, - Function: true, - Generator: true, - GeneratorFunction: true, - Infinity: true, - Int16Array: true, - Int32Array: true, - Int8Array: true, - InternalError: true, - Intl: true, - JSON: true, - Map: true, - Math: true, - NaN: true, - Number: true, - Object: true, - Promise: true, - Proxy: true, - RangeError: true, - ReferenceError: true, - Reflect: true, - RegExp: true, - Set: true, - String: true, - Symbol: true, - SyntaxError: true, - TypeError: true, - URIError: true, - Uint16Array: true, - Uint32Array: true, - Uint8Array: true, - Uint8ClampedArray: true, - WeakMap: true, - WeakSet: true, - arguments: true, - expect: true, - jest: true, - require: true, - undefined: true }; - -Object.keys(global).forEach(name => WHITELISTED_IDENTIFIERS[name] = true); - -const JEST_GLOBAL = { name: 'jest' }; -const IDVisitor = { - ReferencedIdentifier(path) { - this.ids.add(path); - } }; - - -const FUNCTIONS = Object.create(null); -FUNCTIONS.mock = args => { - if (args.length === 1) { - return args[0].isStringLiteral(); - } else if (args.length === 2) { - const moduleFactory = args[1]; - invariant( - moduleFactory.isFunction(), - 'The second argument of `jest.mock` must be a function.'); - - - const ids = new Set(); - const parentScope = moduleFactory.parentPath.scope; - moduleFactory.traverse(IDVisitor, { ids }); - for (const id of ids) { - const name = id.node.name; - let found = false; - let scope = id.scope; - - while (scope !== parentScope) { - if (scope.bindings[name]) { - found = true; - break; - } - - scope = scope.parent; - } - - if (!found) { - invariant( - scope.hasGlobal(name) && WHITELISTED_IDENTIFIERS[name] || - /^mock/.test(name) || - // Allow istanbul's coverage variable to pass. - //^(?:__)?cov/.test(name), - 'The module factory of `jest.mock()` is not allowed to ' + - 'reference any out-of-scope variables.\n' + - 'Invalid variable access: ' + name + '\n' + - 'Whitelisted objects: ' + - Object.keys(WHITELISTED_IDENTIFIERS).join(', ') + '.\n' + - 'Note: This is a precaution to guard against uninitialized mock ' + - 'variables. If it is ensured that the mock is required lazily, ' + - 'variable names prefixed with `mock` are permitted.'); - - } - } - - return true; - } - return false; -}; - -FUNCTIONS.unmock = args => args.length === 1 && args[0].isStringLiteral(); -FUNCTIONS.deepUnmock = args => args.length === 1 && args[0].isStringLiteral(); - -FUNCTIONS.disableAutomock = -FUNCTIONS.enableAutomock = -args => args.length === 0; - -module.exports = babel => { - const isJest = callee => - callee.get('object').isIdentifier(JEST_GLOBAL) || - callee.isMemberExpression() && isJest(callee.get('object')); - - const shouldHoistExpression = expr => { - if (!expr.isCallExpression()) { - return false; - } - - const callee = expr.get('callee'); - const object = callee.get('object'); - const property = callee.get('property'); - return ( - property.isIdentifier() && - FUNCTIONS[property.node.name] && ( - - object.isIdentifier(JEST_GLOBAL) || - callee.isMemberExpression() && shouldHoistExpression(object)) && - - FUNCTIONS[property.node.name](expr.get('arguments'))); - - }; - return { - visitor: { - ExpressionStatement(path) { - if (shouldHoistExpression(path.get('expression'))) { - path.node._blockHoist = Infinity; - } - } } }; - - -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/package.json deleted file mode 100644 index 59c960719..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-jest-hoist/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-jest-hoist@^17.0.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest" - ] - ], - "_from": "babel-plugin-jest-hoist@>=17.0.2 <18.0.0", - "_id": "babel-plugin-jest-hoist@17.0.2", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-jest-hoist", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-jest-hoist-17.0.2.tgz_1479170355637_0.4131905680987984" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-jest-hoist", - "raw": "babel-plugin-jest-hoist@^17.0.2", - "rawSpec": "^17.0.2", - "scope": null, - "spec": ">=17.0.2 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-jest" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-17.0.2.tgz", - "_shasum": "213488ce825990acd4c30f887dca09fffeb45235", - "_shrinkwrap": null, - "_spec": "babel-plugin-jest-hoist@^17.0.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": {}, - "description": "Babel plugin to hoist `jest.disableAutomock`, `jest.enableAutomock`, `jest.unmock`, `jest.mock`, calls above `import` statements. This plugin is automatically included when using [babel-jest](https://github.com/facebook/jest/tree/master/packages/babel-jes", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "213488ce825990acd4c30f887dca09fffeb45235", - "tarball": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-17.0.2.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - } - ], - "name": "babel-plugin-jest-hoist", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/.npmignore deleted file mode 100644 index cace0d6dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -src diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/README.md deleted file mode 100644 index a2c13f519..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-syntax-async-functions - -Allow parsing of async functions. - -## Installation - -```sh -$ npm install babel-plugin-syntax-async-functions -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["syntax-async-functions"] -} -``` - -### Via CLI - -```sh -$ babel --plugins syntax-async-functions script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["syntax-async-functions"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/lib/index.js deleted file mode 100644 index 1d6660e57..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/lib/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - manipulateOptions: function manipulateOptions(opts, parserOpts) { - parserOpts.plugins.push("asyncFunctions"); - } - }; -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/package.json deleted file mode 100644 index 46401e7f4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-functions/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-syntax-async-functions@^6.8.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator" - ] - ], - "_from": "babel-plugin-syntax-async-functions@>=6.8.0 <7.0.0", - "_id": "babel-plugin-syntax-async-functions@6.13.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-syntax-async-functions", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-syntax-async-functions-6.13.0.tgz_1470353692618_0.4568883990868926" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-syntax-async-functions", - "raw": "babel-plugin-syntax-async-functions@^6.8.0", - "rawSpec": "^6.8.0", - "scope": null, - "spec": ">=6.8.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-async-to-generator" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "_shasum": "cad9cad1191b5ad634bf30ae0872391e0647be95", - "_shrinkwrap": null, - "_spec": "babel-plugin-syntax-async-functions@^6.8.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator", - "dependencies": {}, - "description": "Allow parsing of async functions", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "cad9cad1191b5ad634bf30ae0872391e0647be95", - "tarball": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-syntax-async-functions", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-async-functions" - }, - "scripts": {}, - "version": "6.13.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/README.md deleted file mode 100644 index 330f8e207..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-syntax-async-generators - -Allow parsing of async generator functions. - -## Installation - -```sh -$ npm install babel-plugin-syntax-async-generators -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["syntax-async-generators"] -} -``` - -### Via CLI - -```sh -$ babel --plugins syntax-async-generators script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["syntax-async-generators"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/lib/index.js deleted file mode 100644 index a43fdf3ce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/lib/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - manipulateOptions: function manipulateOptions(opts, parserOpts) { - parserOpts.plugins.push("asyncGenerators"); - } - }; -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/package.json deleted file mode 100644 index 5d59971a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-async-generators/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-syntax-async-generators@^6.5.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions" - ] - ], - "_from": "babel-plugin-syntax-async-generators@>=6.5.0 <7.0.0", - "_id": "babel-plugin-syntax-async-generators@6.13.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-syntax-async-generators", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-syntax-async-generators-6.13.0.tgz_1470353692582_0.7918365595396608" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-syntax-async-generators", - "raw": "babel-plugin-syntax-async-generators@^6.5.0", - "rawSpec": "^6.5.0", - "scope": null, - "spec": ">=6.5.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-async-generator-functions" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "_shasum": "6bc963ebb16eccbae6b92b596eb7f35c342a8b9a", - "_shrinkwrap": null, - "_spec": "babel-plugin-syntax-async-generators@^6.5.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions", - "dependencies": {}, - "description": "Allow parsing of async generator functions", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "6bc963ebb16eccbae6b92b596eb7f35c342a8b9a", - "tarball": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-syntax-async-generators", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-async-generators" - }, - "scripts": {}, - "version": "6.13.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/.npmignore deleted file mode 100644 index cace0d6dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -src diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/README.md deleted file mode 100644 index 174c8d555..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-syntax-class-constructor-call (deprecated) - -Allow parsing of do expressions. - -## Installation - -```sh -$ npm install babel-plugin-syntax-class-constructor-call -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["syntax-class-constructor-call"] -} -``` - -### Via CLI - -```sh -$ babel --plugins syntax-class-constructor-call script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["syntax-class-constructor-call"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/lib/index.js deleted file mode 100644 index 97663526e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/lib/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - manipulateOptions: function manipulateOptions(opts, parserOpts) { - parserOpts.plugins.push("classConstructorCall"); - } - }; -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/package.json deleted file mode 100644 index ff134e774..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-constructor-call/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-syntax-class-constructor-call@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call" - ] - ], - "_from": "babel-plugin-syntax-class-constructor-call@>=6.18.0 <7.0.0", - "_id": "babel-plugin-syntax-class-constructor-call@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-syntax-class-constructor-call", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-syntax-class-constructor-call-6.18.0.tgz_1477343934180_0.13973436132073402" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-syntax-class-constructor-call", - "raw": "babel-plugin-syntax-class-constructor-call@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-class-constructor-call" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", - "_shasum": "9cb9d39fe43c8600bec8146456ddcbd4e1a76416", - "_shrinkwrap": null, - "_spec": "babel-plugin-syntax-class-constructor-call@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call", - "dependencies": {}, - "description": "Allow parsing of class constructor calls (deprecated)", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "9cb9d39fe43c8600bec8146456ddcbd4e1a76416", - "tarball": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-syntax-class-constructor-call", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-class-constructor-call" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/.npmignore deleted file mode 100644 index cace0d6dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -src diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/README.md deleted file mode 100644 index 970049b47..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-syntax-class-properties - -Allow parsing of class properties. - -## Installation - -```sh -$ npm install babel-plugin-syntax-class-properties -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["syntax-class-properties"] -} -``` - -### Via CLI - -```sh -$ babel --plugins syntax-class-properties script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["syntax-class-properties"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/lib/index.js deleted file mode 100644 index cfdfb935e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/lib/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - manipulateOptions: function manipulateOptions(opts, parserOpts) { - parserOpts.plugins.push("classProperties"); - } - }; -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/package.json deleted file mode 100644 index 2720f9be2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-class-properties/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-syntax-class-properties@^6.8.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties" - ] - ], - "_from": "babel-plugin-syntax-class-properties@>=6.8.0 <7.0.0", - "_id": "babel-plugin-syntax-class-properties@6.13.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-syntax-class-properties", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-syntax-class-properties-6.13.0.tgz_1470353695429_0.8970123953185976" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-syntax-class-properties", - "raw": "babel-plugin-syntax-class-properties@^6.8.0", - "rawSpec": "^6.8.0", - "scope": null, - "spec": ">=6.8.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-class-properties" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "_shasum": "d7eb23b79a317f8543962c505b827c7d6cac27de", - "_shrinkwrap": null, - "_spec": "babel-plugin-syntax-class-properties@^6.8.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties", - "dependencies": {}, - "description": "Allow parsing of class properties", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "d7eb23b79a317f8543962c505b827c7d6cac27de", - "tarball": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-syntax-class-properties", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-class-properties" - }, - "scripts": {}, - "version": "6.13.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/.npmignore deleted file mode 100644 index cace0d6dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -src diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/README.md deleted file mode 100644 index a7b27efc8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-syntax-decorators - -Allow parsing of decorators. - -## Installation - -```sh -$ npm install babel-plugin-syntax-decorators -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["syntax-decorators"] -} -``` - -### Via CLI - -```sh -$ babel --plugins syntax-decorators script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["syntax-decorators"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/lib/index.js deleted file mode 100644 index 9e2151296..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/lib/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - manipulateOptions: function manipulateOptions(opts, parserOpts) { - parserOpts.plugins.push("decorators"); - } - }; -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/package.json deleted file mode 100644 index b61b76c35..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-decorators/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-syntax-decorators@^6.13.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators" - ] - ], - "_from": "babel-plugin-syntax-decorators@>=6.13.0 <7.0.0", - "_id": "babel-plugin-syntax-decorators@6.13.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-syntax-decorators", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-syntax-decorators-6.13.0.tgz_1470353695428_0.6339652901515365" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-syntax-decorators", - "raw": "babel-plugin-syntax-decorators@^6.13.0", - "rawSpec": "^6.13.0", - "scope": null, - "spec": ">=6.13.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-decorators" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "_shasum": "312563b4dbde3cc806cee3e416cceeaddd11ac0b", - "_shrinkwrap": null, - "_spec": "babel-plugin-syntax-decorators@^6.13.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators", - "dependencies": {}, - "description": "Allow parsing of decorators", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "312563b4dbde3cc806cee3e416cceeaddd11ac0b", - "tarball": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-syntax-decorators", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-decorators" - }, - "scripts": {}, - "version": "6.13.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/.npmignore deleted file mode 100644 index cace0d6dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -src diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/README.md deleted file mode 100644 index 47279fcd3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-syntax-dynamic-import - -Allow parsing of `import()`. - -## Installation - -```sh -$ npm install babel-plugin-syntax-dynamic-import -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["syntax-dynamic-import"] -} -``` - -### Via CLI - -```sh -$ babel --plugins syntax-dynamic-import script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["syntax-dynamic-import"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/lib/index.js deleted file mode 100644 index 3098d524a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/lib/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - manipulateOptions: function manipulateOptions(opts, parserOpts) { - parserOpts.plugins.push("dynamicImport"); - } - }; -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/package.json deleted file mode 100644 index 8e49c7180..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-dynamic-import/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-syntax-dynamic-import@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2" - ] - ], - "_from": "babel-plugin-syntax-dynamic-import@>=6.18.0 <7.0.0", - "_id": "babel-plugin-syntax-dynamic-import@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-syntax-dynamic-import", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-syntax-dynamic-import-6.18.0.tgz_1477343934992_0.1571790436282754" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-syntax-dynamic-import", - "raw": "babel-plugin-syntax-dynamic-import@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-stage-2" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "_shasum": "8d6a26229c83745a9982a441051572caa179b1da", - "_shrinkwrap": null, - "_spec": "babel-plugin-syntax-dynamic-import@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2", - "dependencies": {}, - "description": "Allow parsing of import()", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "8d6a26229c83745a9982a441051572caa179b1da", - "tarball": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "hi@henryzoo.com", - "name": "hzoo" - } - ], - "name": "babel-plugin-syntax-dynamic-import", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-dynamic-import" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/.npmignore deleted file mode 100644 index cace0d6dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -src diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/README.md deleted file mode 100644 index 42057eaf2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-syntax-exponentiation-operator - -Allow parsing of the exponentiation operator. - -## Installation - -```sh -$ npm install babel-plugin-syntax-exponentiation-operator -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["syntax-exponentiation-operator"] -} -``` - -### Via CLI - -```sh -$ babel --plugins syntax-exponentiation-operator script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["syntax-exponentiation-operator"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/lib/index.js deleted file mode 100644 index 5195ee626..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/lib/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - manipulateOptions: function manipulateOptions(opts, parserOpts) { - parserOpts.plugins.push("exponentiationOperator"); - } - }; -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/package.json deleted file mode 100644 index a311a8d67..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-exponentiation-operator/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-syntax-exponentiation-operator@^6.8.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator" - ] - ], - "_from": "babel-plugin-syntax-exponentiation-operator@>=6.8.0 <7.0.0", - "_id": "babel-plugin-syntax-exponentiation-operator@6.13.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-syntax-exponentiation-operator", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz_1470353695979_0.29542290163226426" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-syntax-exponentiation-operator", - "raw": "babel-plugin-syntax-exponentiation-operator@^6.8.0", - "rawSpec": "^6.8.0", - "scope": null, - "spec": ">=6.8.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-exponentiation-operator" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "_shasum": "9ee7e8337290da95288201a6a57f4170317830de", - "_shrinkwrap": null, - "_spec": "babel-plugin-syntax-exponentiation-operator@^6.8.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator", - "dependencies": {}, - "description": "Allow parsing of the exponentiation operator", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "9ee7e8337290da95288201a6a57f4170317830de", - "tarball": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-syntax-exponentiation-operator", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-exponentation-operator" - }, - "scripts": {}, - "version": "6.13.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/.npmignore deleted file mode 100644 index cace0d6dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -src diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/README.md deleted file mode 100644 index 97e99ccd3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-syntax-export-extensions - -Allow parsing of export extensions. - -## Installation - -```sh -$ npm install babel-plugin-syntax-export-extensions -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["syntax-export-extensions"] -} -``` - -### Via CLI - -```sh -$ babel --plugins syntax-export-extensions script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["syntax-export-extensions"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/lib/index.js deleted file mode 100644 index b07eff52e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/lib/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - manipulateOptions: function manipulateOptions(opts, parserOpts) { - parserOpts.plugins.push("exportExtensions"); - } - }; -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/package.json deleted file mode 100644 index 7eb7d8d44..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-export-extensions/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-syntax-export-extensions@^6.8.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions" - ] - ], - "_from": "babel-plugin-syntax-export-extensions@>=6.8.0 <7.0.0", - "_id": "babel-plugin-syntax-export-extensions@6.13.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-syntax-export-extensions", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-syntax-export-extensions-6.13.0.tgz_1470353698445_0.5700725177302957" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-syntax-export-extensions", - "raw": "babel-plugin-syntax-export-extensions@^6.8.0", - "rawSpec": "^6.8.0", - "scope": null, - "spec": ">=6.8.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-export-extensions" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", - "_shasum": "70a1484f0f9089a4e84ad44bac353c95b9b12721", - "_shrinkwrap": null, - "_spec": "babel-plugin-syntax-export-extensions@^6.8.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions", - "dependencies": {}, - "description": "Allow parsing of export extensions", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "70a1484f0f9089a4e84ad44bac353c95b9b12721", - "tarball": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-syntax-export-extensions", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-export-extensions" - }, - "scripts": {}, - "version": "6.13.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/.npmignore deleted file mode 100644 index cace0d6dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -src diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/README.md deleted file mode 100644 index 59392f71a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-syntax-object-rest-spread - -Allow parsing of object rest/spread. - -## Installation - -```sh -$ npm install babel-plugin-syntax-object-rest-spread -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["syntax-object-rest-spread"] -} -``` - -### Via CLI - -```sh -$ babel --plugins syntax-object-rest-spread script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["syntax-object-rest-spread"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/lib/index.js deleted file mode 100644 index 8f1fcbc6a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/lib/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - manipulateOptions: function manipulateOptions(opts, parserOpts) { - parserOpts.plugins.push("objectRestSpread"); - } - }; -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/package.json deleted file mode 100644 index 506249b4b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-object-rest-spread/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-syntax-object-rest-spread@^6.8.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread" - ] - ], - "_from": "babel-plugin-syntax-object-rest-spread@>=6.8.0 <7.0.0", - "_id": "babel-plugin-syntax-object-rest-spread@6.13.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-syntax-object-rest-spread", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-syntax-object-rest-spread-6.13.0.tgz_1470353701573_0.8243994491640478" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-syntax-object-rest-spread", - "raw": "babel-plugin-syntax-object-rest-spread@^6.8.0", - "rawSpec": "^6.8.0", - "scope": null, - "spec": ">=6.8.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-object-rest-spread" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "_shasum": "fd6536f2bce13836ffa3a5458c4903a597bb3bf5", - "_shrinkwrap": null, - "_spec": "babel-plugin-syntax-object-rest-spread@^6.8.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread", - "dependencies": {}, - "description": "Allow parsing of object rest/spread", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "fd6536f2bce13836ffa3a5458c4903a597bb3bf5", - "tarball": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-syntax-object-rest-spread", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-object-rest-spread" - }, - "scripts": {}, - "version": "6.13.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/.npmignore deleted file mode 100644 index cace0d6dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -*.log -src diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/README.md deleted file mode 100644 index 61e15051e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-syntax-trailing-function-commas - -Compile trailing function commas to ES5 - -## Installation - -```sh -$ npm install babel-plugin-syntax-trailing-function-commas -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["syntax-trailing-function-commas"] -} -``` - -### Via CLI - -```sh -$ babel --plugins syntax-trailing-function-commas script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["syntax-trailing-function-commas"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/lib/index.js deleted file mode 100644 index 3190af7f2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/lib/index.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - manipulateOptions: function manipulateOptions(opts, parserOpts) { - parserOpts.plugins.push("trailingFunctionCommas"); - } - }; -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/package.json deleted file mode 100644 index a8b1fdd43..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-syntax-trailing-function-commas@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3" - ] - ], - "_from": "babel-plugin-syntax-trailing-function-commas@>=6.3.13 <7.0.0", - "_id": "babel-plugin-syntax-trailing-function-commas@6.13.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-syntax-trailing-function-commas", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-syntax-trailing-function-commas-6.13.0.tgz_1470353701997_0.3963160878047347" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-syntax-trailing-function-commas", - "raw": "babel-plugin-syntax-trailing-function-commas@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-stage-3" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.13.0.tgz", - "_shasum": "2b84b7d53dd744f94ff1fad7669406274b23f541", - "_shrinkwrap": null, - "_spec": "babel-plugin-syntax-trailing-function-commas@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3", - "dependencies": {}, - "description": "Compile trailing function commas to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "2b84b7d53dd744f94ff1fad7669406274b23f541", - "tarball": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.13.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-syntax-trailing-function-commas", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-syntax-trailing-function-commas" - }, - "scripts": {}, - "version": "6.13.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/arrow-function/actual.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/arrow-function/actual.js deleted file mode 100644 index 79ea641f6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/arrow-function/actual.js +++ /dev/null @@ -1 +0,0 @@ -(x, y, ) => {}; diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/arrow-function/expected.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/arrow-function/expected.js deleted file mode 100644 index 5b8bd230b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/arrow-function/expected.js +++ /dev/null @@ -1 +0,0 @@ -(x, y) => {}; diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/call/actual.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/call/actual.js deleted file mode 100644 index a00f52d4c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/call/actual.js +++ /dev/null @@ -1,4 +0,0 @@ -Math.max(1, - 2, - 3, -); diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/call/expected.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/call/expected.js deleted file mode 100644 index f7830fd7a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/call/expected.js +++ /dev/null @@ -1 +0,0 @@ -Math.max(1, 2, 3); diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/declaration/actual.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/declaration/actual.js deleted file mode 100644 index eaedb3957..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/declaration/actual.js +++ /dev/null @@ -1,8 +0,0 @@ -function thisIsAFunctionWithAVeryLongNameAndWayTooManyParameters( - thisIsTheFirstParameter, andThisOneIsRelatedToIt, - butNotThisOne, - andNeitherThis, - inFactThereArentThatManyParameters, -) { - throw null; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/declaration/expected.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/declaration/expected.js deleted file mode 100644 index f52619513..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/declaration/expected.js +++ /dev/null @@ -1,3 +0,0 @@ -function thisIsAFunctionWithAVeryLongNameAndWayTooManyParameters(thisIsTheFirstParameter, andThisOneIsRelatedToIt, butNotThisOne, andNeitherThis, inFactThereArentThatManyParameters) { - throw null; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/new-expression/actual.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/new-expression/actual.js deleted file mode 100644 index 8b6de60f8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/new-expression/actual.js +++ /dev/null @@ -1 +0,0 @@ -new Foo(a, b,); diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/new-expression/expected.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/new-expression/expected.js deleted file mode 100644 index dbfd4d326..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/new-expression/expected.js +++ /dev/null @@ -1 +0,0 @@ -new Foo(a, b); diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/options.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/options.json deleted file mode 100644 index db2590b82..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/fixtures/trailing-function-commas/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "plugins": ["syntax-trailing-function-commas"] -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/index.js deleted file mode 100644 index 1f6634aab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-syntax-trailing-function-commas/test/index.js +++ /dev/null @@ -1 +0,0 @@ -require("babel-helper-plugin-test-runner")(__dirname); diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/README.md deleted file mode 100644 index d0d16279a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-async-functions - -Turn async generator functions and for-await statements to ES2015 generators - -## Installation - -```sh -$ npm install babel-plugin-transform-async-generator-functions -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-async-generator-functions"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-async-generator-functions script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-async-generator-functions"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/lib/index.js deleted file mode 100644 index d003a7e3a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/lib/index.js +++ /dev/null @@ -1,44 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (_ref) { - var t = _ref.types; - - var yieldStarVisitor = { - Function: function Function(path) { - path.skip(); - }, - YieldExpression: function YieldExpression(_ref2, state) { - var node = _ref2.node; - - if (!node.delegate) return; - var callee = state.addHelper("asyncGeneratorDelegate"); - node.argument = t.callExpression(callee, [t.callExpression(state.addHelper("asyncIterator"), [node.argument]), t.memberExpression(state.addHelper("asyncGenerator"), t.identifier("await"))]); - } - }; - - return { - inherits: require("babel-plugin-syntax-async-generators"), - visitor: { - Function: function Function(path, state) { - if (!path.node.async || !path.node.generator) return; - - path.traverse(yieldStarVisitor, state); - - (0, _babelHelperRemapAsyncToGenerator2.default)(path, state.file, { - wrapAsync: t.memberExpression(state.addHelper("asyncGenerator"), t.identifier("wrap")), - wrapAwait: t.memberExpression(state.addHelper("asyncGenerator"), t.identifier("await")) - }); - } - } - }; -}; - -var _babelHelperRemapAsyncToGenerator = require("babel-helper-remap-async-to-generator"); - -var _babelHelperRemapAsyncToGenerator2 = _interopRequireDefault(_babelHelperRemapAsyncToGenerator); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/package.json deleted file mode 100644 index 87df4ca74..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-generator-functions/package.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-async-generator-functions@^6.17.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3" - ] - ], - "_from": "babel-plugin-transform-async-generator-functions@>=6.17.0 <7.0.0", - "_id": "babel-plugin-transform-async-generator-functions@6.17.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-async-generator-functions", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-async-generator-functions-6.17.0.tgz_1475349800895_0.5296835235785693" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-async-generator-functions", - "raw": "babel-plugin-transform-async-generator-functions@^6.17.0", - "rawSpec": "^6.17.0", - "scope": null, - "spec": ">=6.17.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-stage-3" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.17.0.tgz", - "_shasum": "d0b5a2b2f0940f2b245fa20a00519ed7bc6cae54", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-async-generator-functions@^6.17.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3", - "dependencies": { - "babel-helper-remap-async-to-generator": "^6.16.2", - "babel-plugin-syntax-async-generators": "^6.5.0", - "babel-runtime": "^6.0.0" - }, - "description": "Turn async generator functions into ES2015 generators", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.3.13" - }, - "directories": {}, - "dist": { - "shasum": "d0b5a2b2f0940f2b245fa20a00519ed7bc6cae54", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.17.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "hi@henryzoo.com", - "name": "hzoo" - } - ], - "name": "babel-plugin-transform-async-generator-functions", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-async-generator-functions" - }, - "scripts": {}, - "version": "6.17.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/README.md deleted file mode 100644 index b9b6f1d1a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-async-to-generator - -Turn async functions into ES2015 generators - -## Installation - -```sh -$ npm install babel-plugin-transform-async-to-generator -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-async-to-generator"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-async-to-generator script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-async-to-generator"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/lib/index.js deleted file mode 100644 index e9169ccb0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/lib/index.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - inherits: require("babel-plugin-syntax-async-functions"), - - visitor: { - Function: function Function(path, state) { - if (!path.node.async || path.node.generator) return; - - (0, _babelHelperRemapAsyncToGenerator2.default)(path, state.file, { - wrapAsync: state.addHelper("asyncToGenerator") - }); - } - } - }; -}; - -var _babelHelperRemapAsyncToGenerator = require("babel-helper-remap-async-to-generator"); - -var _babelHelperRemapAsyncToGenerator2 = _interopRequireDefault(_babelHelperRemapAsyncToGenerator); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/package.json deleted file mode 100644 index 64e070c3c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-async-to-generator/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-async-to-generator@^6.16.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3" - ] - ], - "_from": "babel-plugin-transform-async-to-generator@>=6.16.0 <7.0.0", - "_id": "babel-plugin-transform-async-to-generator@6.16.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-async-to-generator", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-async-to-generator-6.16.0.tgz_1475091532449_0.17952899634838104" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-async-to-generator", - "raw": "babel-plugin-transform-async-to-generator@^6.16.0", - "rawSpec": "^6.16.0", - "scope": null, - "spec": ">=6.16.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-stage-3" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz", - "_shasum": "19ec36cb1486b59f9f468adfa42ce13908ca2999", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-async-to-generator@^6.16.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3", - "dependencies": { - "babel-helper-remap-async-to-generator": "^6.16.0", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.0.0" - }, - "description": "Turn async functions into ES2015 generators", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "19ec36cb1486b59f9f468adfa42ce13908ca2999", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.16.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-async-to-generator", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-async-to-generator" - }, - "scripts": {}, - "version": "6.16.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/README.md deleted file mode 100644 index b06dab710..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# babel-plugin-transform-class-constructor-call (deprecated) - -## Installation - -```sh -$ npm install babel-plugin-transform-class-constructor-call -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-class-constructor-call"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-class-constructor-call script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-class-constructor-call"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/lib/index.js deleted file mode 100644 index cd53c212c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/lib/index.js +++ /dev/null @@ -1,93 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _symbol = require("babel-runtime/core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -exports.default = function (_ref) { - var t = _ref.types; - - var ALREADY_VISITED = (0, _symbol2.default)(); - - function findConstructorCall(path) { - var methods = path.get("body.body"); - - for (var _iterator = methods, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref2; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref2 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref2 = _i.value; - } - - var method = _ref2; - - if (method.node.kind === "constructorCall") { - return method; - } - } - - return null; - } - - function handleClassWithCall(constructorCall, classPath) { - var _classPath = classPath; - var node = _classPath.node; - - var ref = node.id || classPath.scope.generateUidIdentifier("class"); - - if (classPath.parentPath.isExportDefaultDeclaration()) { - classPath = classPath.parentPath; - classPath.insertAfter(t.exportDefaultDeclaration(ref)); - } - - classPath.replaceWithMultiple(buildWrapper({ - CLASS_REF: classPath.scope.generateUidIdentifier(ref.name), - CALL_REF: classPath.scope.generateUidIdentifier(ref.name + "Call"), - CALL: t.functionExpression(null, constructorCall.node.params, constructorCall.node.body), - CLASS: t.toExpression(node), - WRAPPER_REF: ref - })); - - constructorCall.remove(); - } - - return { - inherits: require("babel-plugin-syntax-class-constructor-call"), - - visitor: { - Class: function Class(path) { - if (path.node[ALREADY_VISITED]) return; - path.node[ALREADY_VISITED] = true; - - var constructorCall = findConstructorCall(path); - - if (constructorCall) { - handleClassWithCall(constructorCall, path); - } else { - return; - } - } - } - }; -}; - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var buildWrapper = (0, _babelTemplate2.default)("\n let CLASS_REF = CLASS;\n var CALL_REF = CALL;\n var WRAPPER_REF = function (...args) {\n if (this instanceof WRAPPER_REF) {\n return Reflect.construct(CLASS_REF, args);\n } else {\n return CALL_REF.apply(this, args);\n }\n };\n WRAPPER_REF.__proto__ = CLASS_REF;\n WRAPPER_REF;\n"); - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/package.json deleted file mode 100644 index 46abe1ed6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-constructor-call/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-class-constructor-call@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1" - ] - ], - "_from": "babel-plugin-transform-class-constructor-call@>=6.3.13 <7.0.0", - "_id": "babel-plugin-transform-class-constructor-call@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-class-constructor-call", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-class-constructor-call-6.18.0.tgz_1477343937169_0.992085614008829" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-class-constructor-call", - "raw": "babel-plugin-transform-class-constructor-call@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-stage-1" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.18.0.tgz", - "_shasum": "80855e38a1ab47b8c6c647f8ea1bcd2c00ca3aae", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-class-constructor-call@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1", - "dependencies": { - "babel-plugin-syntax-class-constructor-call": "^6.18.0", - "babel-runtime": "^6.0.0", - "babel-template": "^6.8.0" - }, - "description": "This plugin allows Babel to transform class constructors (deprecated)", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "80855e38a1ab47b8c6c647f8ea1bcd2c00ca3aae", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-class-constructor-call", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-class-constructor-call" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/README.md deleted file mode 100644 index b1d4c6380..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# babel-plugin-transform-class-properties - -## Installation - -```sh -$ npm install babel-plugin-transform-class-properties -``` - -### Options: `spec` - -- Class properties are compiled to use `Object.defineProperty` -- Static fields are now defined even if they are not initialized - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -// without options -{ - "plugins": ["transform-class-properties"] -} - -// with options -{ - "plugins": [ - ["transform-class-properties", { "spec": true }] - ] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-class-properties script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-class-properties"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/lib/index.js deleted file mode 100644 index 579bc06bd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/lib/index.js +++ /dev/null @@ -1,252 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function (_ref) { - var t = _ref.types; - - var findBareSupers = { - Super: function Super(path) { - if (path.parentPath.isCallExpression({ callee: path.node })) { - this.push(path.parentPath); - } - } - }; - - var referenceVisitor = { - ReferencedIdentifier: function ReferencedIdentifier(path) { - if (this.scope.hasOwnBinding(path.node.name)) { - this.collision = true; - path.skip(); - } - } - }; - - var buildObjectDefineProperty = (0, _babelTemplate2.default)("\n Object.defineProperty(REF, KEY, {\n // configurable is false by default\n enumerable: true,\n writable: true,\n value: VALUE\n });\n "); - - var buildClassPropertySpec = function buildClassPropertySpec(ref, _ref2) { - var key = _ref2.key, - value = _ref2.value, - computed = _ref2.computed; - return buildObjectDefineProperty({ - REF: ref, - KEY: t.isIdentifier(key) && !computed ? t.stringLiteral(key.name) : key, - VALUE: value ? value : t.identifier("undefined") - }); - }; - - var buildClassPropertyNonSpec = function buildClassPropertyNonSpec(ref, _ref3) { - var key = _ref3.key, - value = _ref3.value, - computed = _ref3.computed; - return t.expressionStatement(t.assignmentExpression("=", t.memberExpression(ref, key, computed || t.isLiteral(key)), value)); - }; - - return { - inherits: require("babel-plugin-syntax-class-properties"), - - visitor: { - Class: function Class(path, state) { - var buildClassProperty = state.opts.spec ? buildClassPropertySpec : buildClassPropertyNonSpec; - var isDerived = !!path.node.superClass; - var constructor = void 0; - var props = []; - var body = path.get("body"); - - for (var _iterator = body.get("body"), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref4; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref4 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref4 = _i.value; - } - - var _path = _ref4; - - if (_path.isClassProperty()) { - props.push(_path); - } else if (_path.isClassMethod({ kind: "constructor" })) { - constructor = _path; - } - } - - if (!props.length) return; - - var nodes = []; - var ref = void 0; - - if (path.isClassExpression() || !path.node.id) { - (0, _babelHelperFunctionName2.default)(path); - ref = path.scope.generateUidIdentifier("class"); - } else { - ref = path.node.id; - } - - var instanceBody = []; - - for (var _iterator2 = props, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref5; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref5 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref5 = _i2.value; - } - - var _prop = _ref5; - - var propNode = _prop.node; - if (propNode.decorators && propNode.decorators.length > 0) continue; - - if (!state.opts.spec && !propNode.value) continue; - - var isStatic = propNode.static; - - if (isStatic) { - nodes.push(buildClassProperty(ref, propNode)); - } else { - if (!propNode.value) continue; - instanceBody.push(buildClassProperty(t.thisExpression(), propNode)); - } - } - - if (instanceBody.length) { - if (!constructor) { - var newConstructor = t.classMethod("constructor", t.identifier("constructor"), [], t.blockStatement([])); - if (isDerived) { - newConstructor.params = [t.restElement(t.identifier("args"))]; - newConstructor.body.body.push(t.returnStatement(t.callExpression(t.super(), [t.spreadElement(t.identifier("args"))]))); - } - - var _body$unshiftContaine = body.unshiftContainer("body", newConstructor); - - constructor = _body$unshiftContaine[0]; - } - - var collisionState = { - collision: false, - scope: constructor.scope - }; - - for (var _iterator3 = props, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref6; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref6 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref6 = _i3.value; - } - - var prop = _ref6; - - prop.traverse(referenceVisitor, collisionState); - if (collisionState.collision) break; - } - - if (collisionState.collision) { - var initialisePropsRef = path.scope.generateUidIdentifier("initialiseProps"); - - nodes.push(t.variableDeclaration("var", [t.variableDeclarator(initialisePropsRef, t.functionExpression(null, [], t.blockStatement(instanceBody)))])); - - instanceBody = [t.expressionStatement(t.callExpression(t.memberExpression(initialisePropsRef, t.identifier("call")), [t.thisExpression()]))]; - } - - if (isDerived) { - var bareSupers = []; - constructor.traverse(findBareSupers, bareSupers); - for (var _iterator4 = bareSupers, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { - var _ref7; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref7 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref7 = _i4.value; - } - - var bareSuper = _ref7; - - bareSuper.insertAfter(instanceBody); - } - } else { - constructor.get("body").unshiftContainer("body", instanceBody); - } - } - - for (var _iterator5 = props, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) { - var _ref8; - - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref8 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref8 = _i5.value; - } - - var _prop2 = _ref8; - - _prop2.remove(); - } - - if (!nodes.length) return; - - if (path.isClassExpression()) { - path.scope.push({ id: ref }); - path.replaceWith(t.assignmentExpression("=", ref, path.node)); - } else { - if (!path.node.id) { - path.node.id = ref; - } - - if (path.parentPath.isExportDeclaration()) { - path = path.parentPath; - } - } - - path.insertAfter(nodes); - }, - ArrowFunctionExpression: function ArrowFunctionExpression(path) { - var classExp = path.get("body"); - if (!classExp.isClassExpression()) return; - - var body = classExp.get("body"); - var members = body.get("body"); - if (members.some(function (member) { - return member.isClassProperty(); - })) { - path.ensureBlock(); - } - } - } - }; -}; - -var _babelHelperFunctionName = require("babel-helper-function-name"); - -var _babelHelperFunctionName2 = _interopRequireDefault(_babelHelperFunctionName); - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/package.json deleted file mode 100644 index 7b5b3b91d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-class-properties/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-class-properties@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2" - ] - ], - "_from": "babel-plugin-transform-class-properties@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-class-properties@6.19.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-class-properties", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-class-properties-6.19.0.tgz_1479312925861_0.2576622653286904" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-class-properties", - "raw": "babel-plugin-transform-class-properties@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-stage-2" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.19.0.tgz", - "_shasum": "1274b349abaadc835164e2004f4a2444a2788d5f", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-class-properties@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2", - "dependencies": { - "babel-helper-function-name": "^6.18.0", - "babel-plugin-syntax-class-properties": "^6.8.0", - "babel-runtime": "^6.9.1", - "babel-template": "^6.15.0" - }, - "description": "This plugin transforms static class properties as well as properties declared with the property initializer syntax", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "1274b349abaadc835164e2004f4a2444a2788d5f", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.19.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-class-properties", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-class-properties" - }, - "scripts": {}, - "version": "6.19.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/README.md deleted file mode 100644 index 7a0d76196..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-decorators - -Compile class and object decorators to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-decorators -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-decorators"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-decorators script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-decorators"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/lib/index.js deleted file mode 100644 index 823555ac9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/lib/index.js +++ /dev/null @@ -1,194 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _create = require("babel-runtime/core-js/object/create"); - -var _create2 = _interopRequireDefault(_create); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function (_ref) { - var t = _ref.types; - - function cleanDecorators(decorators) { - return decorators.reverse().map(function (dec) { - return dec.expression; - }); - } - - function transformClass(path, ref, state) { - var nodes = []; - - state; - - var classDecorators = path.node.decorators; - if (classDecorators) { - path.node.decorators = null; - classDecorators = cleanDecorators(classDecorators); - - for (var _iterator = classDecorators, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref2; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref2 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref2 = _i.value; - } - - var decorator = _ref2; - - nodes.push(buildClassDecorator({ - CLASS_REF: ref, - DECORATOR: decorator - })); - } - } - - var map = (0, _create2.default)(null); - - for (var _iterator2 = path.get("body.body"), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref3; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref3 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref3 = _i2.value; - } - - var method = _ref3; - - var decorators = method.node.decorators; - if (!decorators) continue; - - var _alias = t.toKeyAlias(method.node); - map[_alias] = map[_alias] || []; - map[_alias].push(method.node); - - method.remove(); - } - - for (var alias in map) { - var items = map[alias]; - - items; - } - - return nodes; - } - - function hasDecorators(path) { - if (path.isClass()) { - if (path.node.decorators) return true; - - for (var _iterator3 = path.node.body.body, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref4; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref4 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref4 = _i3.value; - } - - var method = _ref4; - - if (method.decorators) { - return true; - } - } - } else if (path.isObjectExpression()) { - for (var _iterator4 = path.node.properties, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { - var _ref5; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref5 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref5 = _i4.value; - } - - var prop = _ref5; - - if (prop.decorators) { - return true; - } - } - } - - return false; - } - - function doError(path) { - throw path.buildCodeFrameError("Decorators are not officially supported yet in 6.x pending a proposal update.\nHowever, if you need to use them you can install the legacy decorators transform with:\n\nnpm install babel-plugin-transform-decorators-legacy --save-dev\n\nand add the following line to your .babelrc file:\n\n{\n \"plugins\": [\"transform-decorators-legacy\"]\n}\n\nThe repo url is: https://github.com/loganfsmyth/babel-plugin-transform-decorators-legacy.\n "); - } - - return { - inherits: require("babel-plugin-syntax-decorators"), - - visitor: { - ClassExpression: function ClassExpression(path) { - if (!hasDecorators(path)) return; - doError(path); - - (0, _babelHelperExplodeClass2.default)(path); - - var ref = path.scope.generateDeclaredUidIdentifier("ref"); - var nodes = []; - - nodes.push(t.assignmentExpression("=", ref, path.node)); - - nodes = nodes.concat(transformClass(path, ref, this)); - - nodes.push(ref); - - path.replaceWith(t.sequenceExpression(nodes)); - }, - ClassDeclaration: function ClassDeclaration(path) { - if (!hasDecorators(path)) return; - doError(path); - (0, _babelHelperExplodeClass2.default)(path); - - var ref = path.node.id; - var nodes = []; - - nodes = nodes.concat(transformClass(path, ref, this).map(function (expr) { - return t.expressionStatement(expr); - })); - nodes.push(t.expressionStatement(ref)); - - path.insertAfter(nodes); - }, - ObjectExpression: function ObjectExpression(path) { - if (!hasDecorators(path)) return; - doError(path); - } - } - }; -}; - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -var _babelHelperExplodeClass = require("babel-helper-explode-class"); - -var _babelHelperExplodeClass2 = _interopRequireDefault(_babelHelperExplodeClass); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var buildClassDecorator = (0, _babelTemplate2.default)("\n CLASS_REF = DECORATOR(CLASS_REF) || CLASS_REF;\n"); - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/package.json deleted file mode 100644 index 6a500f9b6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-decorators/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-decorators@^6.13.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2" - ] - ], - "_from": "babel-plugin-transform-decorators@>=6.13.0 <7.0.0", - "_id": "babel-plugin-transform-decorators@6.13.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-decorators", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-decorators-6.13.0.tgz_1470353702209_0.4613117079716176" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-decorators", - "raw": "babel-plugin-transform-decorators@^6.13.0", - "rawSpec": "^6.13.0", - "scope": null, - "spec": ">=6.13.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-stage-2" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.13.0.tgz", - "_shasum": "82d65c1470ae83e2d13eebecb0a1c2476d62da9d", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-decorators@^6.13.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2", - "dependencies": { - "babel-helper-define-map": "^6.8.0", - "babel-helper-explode-class": "^6.8.0", - "babel-plugin-syntax-decorators": "^6.13.0", - "babel-runtime": "^6.0.0", - "babel-template": "^6.8.0", - "babel-types": "^6.13.0" - }, - "description": "Compile class and object decorators to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "82d65c1470ae83e2d13eebecb0a1c2476d62da9d", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.13.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-decorators", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-decorators" - }, - "scripts": {}, - "version": "6.13.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/README.md deleted file mode 100644 index 80a12d3d7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# babel-plugin-transform-es2015-arrow-functions - -Compile ES2015 arrow functions to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-arrow-functions -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```js -// without options -{ - "plugins": ["transform-es2015-arrow-functions"] -} - -// with options -{ - "plugins": [ - ["transform-es2015-arrow-functions", { "spec": true }] - ] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-arrow-functions script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-arrow-functions"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/lib/index.js deleted file mode 100644 index f05e3891e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/lib/index.js +++ /dev/null @@ -1,35 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -exports.default = function ( /*istanbul ignore next*/_ref) { - /*istanbul ignore next*/var t = _ref.types; - - return { - visitor: { /*istanbul ignore next*/ - ArrowFunctionExpression: function ArrowFunctionExpression(path, state) { - if (state.opts.spec) { - /*istanbul ignore next*/var node = path.node; - - if (node.shadow) return; - - node.shadow = { this: false }; - node.type = "FunctionExpression"; - - var boundThis = t.thisExpression(); - boundThis._forceShadow = path; - - // make sure that arrow function won't be instantiated - path.ensureBlock(); - path.get("body").unshiftContainer("body", t.expressionStatement(t.callExpression(state.addHelper("newArrowCheck"), [t.thisExpression(), boundThis]))); - - path.replaceWith(t.callExpression(t.memberExpression(node, t.identifier("bind")), [t.thisExpression()])); - } else { - path.arrowFunctionToShadowed(); - } - } - } - }; -}; - -/*istanbul ignore next*/module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/package.json deleted file mode 100644 index 8c32501e3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-arrow-functions/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-arrow-functions@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-arrow-functions@>=6.3.13 <7.0.0", - "_id": "babel-plugin-transform-es2015-arrow-functions@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-arrow-functions", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz_1462232672265_0.3574646641500294" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-arrow-functions", - "raw": "babel-plugin-transform-es2015-arrow-functions@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz", - "_shasum": "5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-arrow-functions@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-runtime": "^6.0.0" - }, - "description": "Compile ES2015 arrow functions to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "5b63afc3181bdc9a8c4d481b5a4f3f7d7fef3d9d", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.8.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-arrow-functions", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-arrow-functions" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/README.md deleted file mode 100644 index fa4eb2de1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-es2015-block-scoped-functions - -Babel plugin to ensure function declarations at the block level are block scoped. - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-block-scoped-functions -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-block-scoped-functions"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-block-scoped-functions script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-block-scoped-functions"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/lib/index.js deleted file mode 100644 index 214c04ef5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/lib/index.js +++ /dev/null @@ -1,67 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function ( /*istanbul ignore next*/_ref) { - /*istanbul ignore next*/var t = _ref.types; - - function statementList(key, path) { - var paths = path.get(key); - - for ( /*istanbul ignore next*/var _iterator = paths, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - /*istanbul ignore next*/ - var _ref2; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref2 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref2 = _i.value; - } - - var _path = _ref2; - - var func = _path.node; - if (!_path.isFunctionDeclaration()) continue; - - var declar = t.variableDeclaration("let", [t.variableDeclarator(func.id, t.toExpression(func))]); - - // hoist it up above everything else - declar._blockHoist = 2; - - // todo: name this - func.id = null; - - _path.replaceWith(declar); - } - } - - return { - visitor: { /*istanbul ignore next*/ - BlockStatement: function BlockStatement(path) { - /*istanbul ignore next*/var node = path.node; - /*istanbul ignore next*/var parent = path.parent; - - if (t.isFunction(parent, { body: node }) || t.isExportDeclaration(parent)) { - return; - } - - statementList("body", path); - }, - /*istanbul ignore next*/SwitchCase: function SwitchCase(path) { - statementList("consequent", path); - } - } - }; -}; - -/*istanbul ignore next*/ -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/package.json deleted file mode 100644 index f36370815..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoped-functions/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-block-scoped-functions@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-block-scoped-functions@>=6.3.13 <7.0.0", - "_id": "babel-plugin-transform-es2015-block-scoped-functions@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-block-scoped-functions", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz_1462232673039_0.8572791118640453" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-block-scoped-functions", - "raw": "babel-plugin-transform-es2015-block-scoped-functions@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz", - "_shasum": "ed95d629c4b5a71ae29682b998f70d9833eb366d", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-block-scoped-functions@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-runtime": "^6.0.0" - }, - "description": "Babel plugin to ensure function declarations at the block level are block scoped", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "ed95d629c4b5a71ae29682b998f70d9833eb366d", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.8.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-block-scoped-functions", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-block-scoped-functions" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/README.md deleted file mode 100644 index 06884df4f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-es2015-block-scoping - -Compile ES2015 block scoping (const and let) to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-block-scoping -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-block-scoping"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-block-scoping script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-block-scoping"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/lib/index.js deleted file mode 100644 index 88d9362db..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/lib/index.js +++ /dev/null @@ -1,622 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _symbol = require("babel-runtime/core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -var _create = require("babel-runtime/core-js/object/create"); - -var _create2 = _interopRequireDefault(_create); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -exports.default = function () { - return { - visitor: { - VariableDeclaration: function VariableDeclaration(path, file) { - var node = path.node; - var parent = path.parent; - var scope = path.scope; - - if (!isBlockScoped(node)) return; - convertBlockScopedToVar(path, null, parent, scope, true); - - if (node._tdzThis) { - var nodes = [node]; - - for (var i = 0; i < node.declarations.length; i++) { - var decl = node.declarations[i]; - if (decl.init) { - var assign = t.assignmentExpression("=", decl.id, decl.init); - assign._ignoreBlockScopingTDZ = true; - nodes.push(t.expressionStatement(assign)); - } - decl.init = file.addHelper("temporalUndefined"); - } - - node._blockHoist = 2; - - if (path.isCompletionRecord()) { - nodes.push(t.expressionStatement(scope.buildUndefinedNode())); - } - - path.replaceWithMultiple(nodes); - } - }, - Loop: function Loop(path, file) { - var node = path.node; - var parent = path.parent; - var scope = path.scope; - - t.ensureBlock(node); - var blockScoping = new BlockScoping(path, path.get("body"), parent, scope, file); - var replace = blockScoping.run(); - if (replace) path.replaceWith(replace); - }, - CatchClause: function CatchClause(path, file) { - var parent = path.parent; - var scope = path.scope; - - var blockScoping = new BlockScoping(null, path.get("body"), parent, scope, file); - blockScoping.run(); - }, - "BlockStatement|SwitchStatement|Program": function BlockStatementSwitchStatementProgram(path, file) { - if (!ignoreBlock(path)) { - var blockScoping = new BlockScoping(null, path, path.parent, path.scope, file); - blockScoping.run(); - } - } - } - }; -}; - -var _babelTraverse = require("babel-traverse"); - -var _babelTraverse2 = _interopRequireDefault(_babelTraverse); - -var _tdz = require("./tdz"); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _values = require("lodash/values"); - -var _values2 = _interopRequireDefault(_values); - -var _extend = require("lodash/extend"); - -var _extend2 = _interopRequireDefault(_extend); - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function ignoreBlock(path) { - return t.isLoop(path.parent) || t.isCatchClause(path.parent); -} - -var buildRetCheck = (0, _babelTemplate2.default)("\n if (typeof RETURN === \"object\") return RETURN.v;\n"); - -function isBlockScoped(node) { - if (!t.isVariableDeclaration(node)) return false; - if (node[t.BLOCK_SCOPED_SYMBOL]) return true; - if (node.kind !== "let" && node.kind !== "const") return false; - return true; -} - -function convertBlockScopedToVar(path, node, parent, scope) { - var moveBindingsToParent = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; - - if (!node) { - node = path.node; - } - - if (!t.isFor(parent)) { - for (var i = 0; i < node.declarations.length; i++) { - var declar = node.declarations[i]; - declar.init = declar.init || scope.buildUndefinedNode(); - } - } - - node[t.BLOCK_SCOPED_SYMBOL] = true; - node.kind = "var"; - - if (moveBindingsToParent) { - var parentScope = scope.getFunctionParent(); - var ids = path.getBindingIdentifiers(); - for (var name in ids) { - var binding = scope.getOwnBinding(name); - if (binding) binding.kind = "var"; - scope.moveBindingTo(name, parentScope); - } - } -} - -function isVar(node) { - return t.isVariableDeclaration(node, { kind: "var" }) && !isBlockScoped(node); -} - -var letReferenceBlockVisitor = _babelTraverse2.default.visitors.merge([{ - Function: function Function(path, state) { - path.traverse(letReferenceFunctionVisitor, state); - return path.skip(); - } -}, _tdz.visitor]); - -var letReferenceFunctionVisitor = _babelTraverse2.default.visitors.merge([{ - ReferencedIdentifier: function ReferencedIdentifier(path, state) { - var ref = state.letReferences[path.node.name]; - - if (!ref) return; - - var localBinding = path.scope.getBindingIdentifier(path.node.name); - if (localBinding && localBinding !== ref) return; - - state.closurify = true; - } -}, _tdz.visitor]); - -var hoistVarDeclarationsVisitor = { - enter: function enter(path, self) { - var node = path.node; - var parent = path.parent; - - - if (path.isForStatement()) { - if (isVar(node.init, node)) { - var nodes = self.pushDeclar(node.init); - if (nodes.length === 1) { - node.init = nodes[0]; - } else { - node.init = t.sequenceExpression(nodes); - } - } - } else if (path.isFor()) { - if (isVar(node.left, node)) { - self.pushDeclar(node.left); - node.left = node.left.declarations[0].id; - } - } else if (isVar(node, parent)) { - path.replaceWithMultiple(self.pushDeclar(node).map(function (expr) { - return t.expressionStatement(expr); - })); - } else if (path.isFunction()) { - return path.skip(); - } - } -}; - -var loopLabelVisitor = { - LabeledStatement: function LabeledStatement(_ref, state) { - var node = _ref.node; - - state.innerLabels.push(node.label.name); - } -}; - -var continuationVisitor = { - enter: function enter(path, state) { - if (path.isAssignmentExpression() || path.isUpdateExpression()) { - var bindings = path.getBindingIdentifiers(); - for (var name in bindings) { - if (state.outsideReferences[name] !== path.scope.getBindingIdentifier(name)) continue; - state.reassignments[name] = true; - } - } - } -}; - -function loopNodeTo(node) { - if (t.isBreakStatement(node)) { - return "break"; - } else if (t.isContinueStatement(node)) { - return "continue"; - } -} - -var loopVisitor = { - Loop: function Loop(path, state) { - var oldIgnoreLabeless = state.ignoreLabeless; - state.ignoreLabeless = true; - path.traverse(loopVisitor, state); - state.ignoreLabeless = oldIgnoreLabeless; - path.skip(); - }, - Function: function Function(path) { - path.skip(); - }, - SwitchCase: function SwitchCase(path, state) { - var oldInSwitchCase = state.inSwitchCase; - state.inSwitchCase = true; - path.traverse(loopVisitor, state); - state.inSwitchCase = oldInSwitchCase; - path.skip(); - }, - "BreakStatement|ContinueStatement|ReturnStatement": function BreakStatementContinueStatementReturnStatement(path, state) { - var node = path.node; - var parent = path.parent; - var scope = path.scope; - - if (node[this.LOOP_IGNORE]) return; - - var replace = void 0; - var loopText = loopNodeTo(node); - - if (loopText) { - if (node.label) { - if (state.innerLabels.indexOf(node.label.name) >= 0) { - return; - } - - loopText = loopText + "|" + node.label.name; - } else { - if (state.ignoreLabeless) return; - - if (state.inSwitchCase) return; - - if (t.isBreakStatement(node) && t.isSwitchCase(parent)) return; - } - - state.hasBreakContinue = true; - state.map[loopText] = node; - replace = t.stringLiteral(loopText); - } - - if (path.isReturnStatement()) { - state.hasReturn = true; - replace = t.objectExpression([t.objectProperty(t.identifier("v"), node.argument || scope.buildUndefinedNode())]); - } - - if (replace) { - replace = t.returnStatement(replace); - replace[this.LOOP_IGNORE] = true; - path.skip(); - path.replaceWith(t.inherits(replace, node)); - } - } -}; - -var BlockScoping = function () { - function BlockScoping(loopPath, blockPath, parent, scope, file) { - (0, _classCallCheck3.default)(this, BlockScoping); - - this.parent = parent; - this.scope = scope; - this.file = file; - - this.blockPath = blockPath; - this.block = blockPath.node; - - this.outsideLetReferences = (0, _create2.default)(null); - this.hasLetReferences = false; - this.letReferences = (0, _create2.default)(null); - this.body = []; - - if (loopPath) { - this.loopParent = loopPath.parent; - this.loopLabel = t.isLabeledStatement(this.loopParent) && this.loopParent.label; - this.loopPath = loopPath; - this.loop = loopPath.node; - } - } - - BlockScoping.prototype.run = function run() { - var block = this.block; - if (block._letDone) return; - block._letDone = true; - - var needsClosure = this.getLetReferences(); - - if (t.isFunction(this.parent) || t.isProgram(this.block)) { - this.updateScopeInfo(); - return; - } - - if (!this.hasLetReferences) return; - - if (needsClosure) { - this.wrapClosure(); - } else { - this.remap(); - } - - this.updateScopeInfo(); - - if (this.loopLabel && !t.isLabeledStatement(this.loopParent)) { - return t.labeledStatement(this.loopLabel, this.loop); - } - }; - - BlockScoping.prototype.updateScopeInfo = function updateScopeInfo() { - var scope = this.scope; - var parentScope = scope.getFunctionParent(); - var letRefs = this.letReferences; - - for (var key in letRefs) { - var ref = letRefs[key]; - var binding = scope.getBinding(ref.name); - if (!binding) continue; - if (binding.kind === "let" || binding.kind === "const") { - binding.kind = "var"; - scope.moveBindingTo(ref.name, parentScope); - } - } - }; - - BlockScoping.prototype.remap = function remap() { - var letRefs = this.letReferences; - var scope = this.scope; - - for (var key in letRefs) { - var ref = letRefs[key]; - - if (scope.parentHasBinding(key) || scope.hasGlobal(key)) { - if (scope.hasOwnBinding(key)) scope.rename(ref.name); - - if (this.blockPath.scope.hasOwnBinding(key)) this.blockPath.scope.rename(ref.name); - } - } - }; - - BlockScoping.prototype.wrapClosure = function wrapClosure() { - var block = this.block; - - var outsideRefs = this.outsideLetReferences; - - if (this.loop) { - for (var name in outsideRefs) { - var id = outsideRefs[name]; - - if (this.scope.hasGlobal(id.name) || this.scope.parentHasBinding(id.name)) { - delete outsideRefs[id.name]; - delete this.letReferences[id.name]; - - this.scope.rename(id.name); - - this.letReferences[id.name] = id; - outsideRefs[id.name] = id; - } - } - } - - this.has = this.checkLoop(); - - this.hoistVarDeclarations(); - - var params = (0, _values2.default)(outsideRefs); - var args = (0, _values2.default)(outsideRefs); - - var isSwitch = this.blockPath.isSwitchStatement(); - - var fn = t.functionExpression(null, params, t.blockStatement(isSwitch ? [block] : block.body)); - fn.shadow = true; - - this.addContinuations(fn); - - var ref = fn; - - if (this.loop) { - ref = this.scope.generateUidIdentifier("loop"); - this.loopPath.insertBefore(t.variableDeclaration("var", [t.variableDeclarator(ref, fn)])); - } - - var call = t.callExpression(ref, args); - var ret = this.scope.generateUidIdentifier("ret"); - - var hasYield = _babelTraverse2.default.hasType(fn.body, this.scope, "YieldExpression", t.FUNCTION_TYPES); - if (hasYield) { - fn.generator = true; - call = t.yieldExpression(call, true); - } - - var hasAsync = _babelTraverse2.default.hasType(fn.body, this.scope, "AwaitExpression", t.FUNCTION_TYPES); - if (hasAsync) { - fn.async = true; - call = t.awaitExpression(call); - } - - this.buildClosure(ret, call); - - if (isSwitch) this.blockPath.replaceWithMultiple(this.body);else block.body = this.body; - }; - - BlockScoping.prototype.buildClosure = function buildClosure(ret, call) { - var has = this.has; - if (has.hasReturn || has.hasBreakContinue) { - this.buildHas(ret, call); - } else { - this.body.push(t.expressionStatement(call)); - } - }; - - BlockScoping.prototype.addContinuations = function addContinuations(fn) { - var state = { - reassignments: {}, - outsideReferences: this.outsideLetReferences - }; - - this.scope.traverse(fn, continuationVisitor, state); - - for (var i = 0; i < fn.params.length; i++) { - var param = fn.params[i]; - if (!state.reassignments[param.name]) continue; - - var newParam = this.scope.generateUidIdentifier(param.name); - fn.params[i] = newParam; - - this.scope.rename(param.name, newParam.name, fn); - - fn.body.body.push(t.expressionStatement(t.assignmentExpression("=", param, newParam))); - } - }; - - BlockScoping.prototype.getLetReferences = function getLetReferences() { - var _this = this; - - var block = this.block; - - var declarators = []; - - if (this.loop) { - var init = this.loop.left || this.loop.init; - if (isBlockScoped(init)) { - declarators.push(init); - (0, _extend2.default)(this.outsideLetReferences, t.getBindingIdentifiers(init)); - } - } - - var addDeclarationsFromChild = function addDeclarationsFromChild(path, node) { - node = node || path.node; - if (t.isClassDeclaration(node) || t.isFunctionDeclaration(node) || isBlockScoped(node)) { - if (isBlockScoped(node)) { - convertBlockScopedToVar(path, node, block, _this.scope); - } - declarators = declarators.concat(node.declarations || node); - } - if (t.isLabeledStatement(node)) { - addDeclarationsFromChild(path.get("body"), node.body); - } - }; - - if (block.body) { - for (var i = 0; i < block.body.length; i++) { - var declarPath = this.blockPath.get("body")[i]; - addDeclarationsFromChild(declarPath); - } - } - - if (block.cases) { - for (var _i = 0; _i < block.cases.length; _i++) { - var consequents = block.cases[_i].consequent; - - for (var j = 0; j < consequents.length; j++) { - var _declarPath = this.blockPath.get("cases")[_i]; - var declar = consequents[j]; - addDeclarationsFromChild(_declarPath, declar); - } - } - } - - for (var _i2 = 0; _i2 < declarators.length; _i2++) { - var _declar = declarators[_i2]; - var keys = t.getBindingIdentifiers(_declar); - (0, _extend2.default)(this.letReferences, keys); - this.hasLetReferences = true; - } - - if (!this.hasLetReferences) return; - - var state = { - letReferences: this.letReferences, - closurify: false, - file: this.file - }; - - this.blockPath.traverse(letReferenceBlockVisitor, state); - - return state.closurify; - }; - - BlockScoping.prototype.checkLoop = function checkLoop() { - var state = { - hasBreakContinue: false, - ignoreLabeless: false, - inSwitchCase: false, - innerLabels: [], - hasReturn: false, - isLoop: !!this.loop, - map: {}, - LOOP_IGNORE: (0, _symbol2.default)() - }; - - this.blockPath.traverse(loopLabelVisitor, state); - this.blockPath.traverse(loopVisitor, state); - - return state; - }; - - BlockScoping.prototype.hoistVarDeclarations = function hoistVarDeclarations() { - this.blockPath.traverse(hoistVarDeclarationsVisitor, this); - }; - - BlockScoping.prototype.pushDeclar = function pushDeclar(node) { - var declars = []; - var names = t.getBindingIdentifiers(node); - for (var name in names) { - declars.push(t.variableDeclarator(names[name])); - } - - this.body.push(t.variableDeclaration(node.kind, declars)); - - var replace = []; - - for (var i = 0; i < node.declarations.length; i++) { - var declar = node.declarations[i]; - if (!declar.init) continue; - - var expr = t.assignmentExpression("=", declar.id, declar.init); - replace.push(t.inherits(expr, declar)); - } - - return replace; - }; - - BlockScoping.prototype.buildHas = function buildHas(ret, call) { - var body = this.body; - - body.push(t.variableDeclaration("var", [t.variableDeclarator(ret, call)])); - - var retCheck = void 0; - var has = this.has; - var cases = []; - - if (has.hasReturn) { - retCheck = buildRetCheck({ - RETURN: ret - }); - } - - if (has.hasBreakContinue) { - for (var key in has.map) { - cases.push(t.switchCase(t.stringLiteral(key), [has.map[key]])); - } - - if (has.hasReturn) { - cases.push(t.switchCase(null, [retCheck])); - } - - if (cases.length === 1) { - var single = cases[0]; - body.push(t.ifStatement(t.binaryExpression("===", ret, single.test), single.consequent[0])); - } else { - if (this.loop) { - for (var i = 0; i < cases.length; i++) { - var caseConsequent = cases[i].consequent[0]; - if (t.isBreakStatement(caseConsequent) && !caseConsequent.label) { - caseConsequent.label = this.loopLabel = this.loopLabel || this.scope.generateUidIdentifier("loop"); - } - } - } - - body.push(t.switchStatement(ret, cases)); - } - } else { - if (has.hasReturn) { - body.push(retCheck); - } - } - }; - - return BlockScoping; -}(); - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/lib/tdz.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/lib/tdz.js deleted file mode 100644 index b6c20c1b7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/lib/tdz.js +++ /dev/null @@ -1,97 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.visitor = undefined; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function getTDZStatus(refPath, bindingPath) { - var executionStatus = bindingPath._guessExecutionStatusRelativeTo(refPath); - - if (executionStatus === "before") { - return "inside"; - } else if (executionStatus === "after") { - return "outside"; - } else { - return "maybe"; - } -} - -function buildTDZAssert(node, file) { - return t.callExpression(file.addHelper("temporalRef"), [node, t.stringLiteral(node.name), file.addHelper("temporalUndefined")]); -} - -function isReference(node, scope, state) { - var declared = state.letReferences[node.name]; - if (!declared) return false; - - return scope.getBindingIdentifier(node.name) === declared; -} - -var visitor = exports.visitor = { - ReferencedIdentifier: function ReferencedIdentifier(path, state) { - if (!this.file.opts.tdz) return; - - var node = path.node; - var parent = path.parent; - var scope = path.scope; - - - if (path.parentPath.isFor({ left: node })) return; - if (!isReference(node, scope, state)) return; - - var bindingPath = scope.getBinding(node.name).path; - - var status = getTDZStatus(path, bindingPath); - if (status === "inside") return; - - if (status === "maybe") { - var assert = buildTDZAssert(node, state.file); - - bindingPath.parent._tdzThis = true; - - path.skip(); - - if (path.parentPath.isUpdateExpression()) { - if (parent._ignoreBlockScopingTDZ) return; - path.parentPath.replaceWith(t.sequenceExpression([assert, parent])); - } else { - path.replaceWith(assert); - } - } else if (status === "outside") { - path.replaceWith(t.throwStatement(t.inherits(t.newExpression(t.identifier("ReferenceError"), [t.stringLiteral(node.name + " is not defined - temporal dead zone")]), node))); - } - }, - - - AssignmentExpression: { - exit: function exit(path, state) { - if (!this.file.opts.tdz) return; - - var node = path.node; - - if (node._ignoreBlockScopingTDZ) return; - - var nodes = []; - var ids = path.getBindingIdentifiers(); - - for (var name in ids) { - var id = ids[name]; - - if (isReference(id, path.scope, state)) { - nodes.push(buildTDZAssert(id, state.file)); - } - } - - if (nodes.length) { - node._ignoreBlockScopingTDZ = true; - nodes.push(node); - path.replaceWithMultiple(nodes.map(t.expressionStatement)); - } - } - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/package.json deleted file mode 100644 index b288b50a8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-block-scoping/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-block-scoping@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-block-scoping@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-block-scoping@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-block-scoping", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-block-scoping-6.18.0.tgz_1477343939322_0.37236395198851824" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-block-scoping", - "raw": "babel-plugin-transform-es2015-block-scoping@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.18.0.tgz", - "_shasum": "3bfdcfec318d46df22525cdea88f1978813653af", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-block-scoping@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-runtime": "^6.9.0", - "babel-template": "^6.15.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "lodash": "^4.2.0" - }, - "description": "Compile ES2015 block scoping (const and let) to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "3bfdcfec318d46df22525cdea88f1978813653af", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-block-scoping", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-block-scoping" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/README.md deleted file mode 100644 index ab9f4ce9d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# babel-plugin-transform-es2015-classes - -Compile ES2015 classes to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-classes -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```js -// without options -{ - "plugins": ["transform-es2015-classes"] -} - -// with options -{ - "plugins": [ - ["transform-es2015-classes", { - "loose": true - }] - ] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-classes script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-classes"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/index.js deleted file mode 100644 index 9f4c0a9c2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/index.js +++ /dev/null @@ -1,68 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _symbol = require("babel-runtime/core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -exports.default = function (_ref) { - var t = _ref.types; - - var VISITED = (0, _symbol2.default)(); - - return { - visitor: { - ExportDefaultDeclaration: function ExportDefaultDeclaration(path) { - if (!path.get("declaration").isClassDeclaration()) return; - - var node = path.node; - - var ref = node.declaration.id || path.scope.generateUidIdentifier("class"); - node.declaration.id = ref; - - path.replaceWith(node.declaration); - path.insertAfter(t.exportDefaultDeclaration(ref)); - }, - ClassDeclaration: function ClassDeclaration(path) { - var node = path.node; - - - var ref = node.id || path.scope.generateUidIdentifier("class"); - - path.replaceWith(t.variableDeclaration("let", [t.variableDeclarator(ref, t.toExpression(node))])); - }, - ClassExpression: function ClassExpression(path, state) { - var node = path.node; - - if (node[VISITED]) return; - - var inferred = (0, _babelHelperFunctionName2.default)(path); - if (inferred && inferred !== node) return path.replaceWith(inferred); - - node[VISITED] = true; - - var Constructor = _vanilla2.default; - if (state.opts.loose) Constructor = _loose2.default; - - path.replaceWith(new Constructor(path, state.file).run()); - } - } - }; -}; - -var _loose = require("./loose"); - -var _loose2 = _interopRequireDefault(_loose); - -var _vanilla = require("./vanilla"); - -var _vanilla2 = _interopRequireDefault(_vanilla); - -var _babelHelperFunctionName = require("babel-helper-function-name"); - -var _babelHelperFunctionName2 = _interopRequireDefault(_babelHelperFunctionName); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/lib/memoise-decorators.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/lib/memoise-decorators.js deleted file mode 100644 index a5e1a7425..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/lib/memoise-decorators.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function (decorators, scope) { - for (var _iterator = decorators, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var decorator = _ref; - - var expression = decorator.expression; - if (!t.isMemberExpression(expression)) continue; - - var temp = scope.maybeGenerateMemoised(expression.object); - var ref = void 0; - - var nodes = []; - - if (temp) { - ref = temp; - nodes.push(t.assignmentExpression("=", temp, expression.object)); - } else { - ref = expression.object; - } - - nodes.push(t.callExpression(t.memberExpression(t.memberExpression(ref, expression.property, expression.computed), t.identifier("bind")), [ref])); - - if (nodes.length === 1) { - decorator.expression = nodes[0]; - } else { - decorator.expression = t.sequenceExpression(nodes); - } - } - - return decorators; -}; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/loose.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/loose.js deleted file mode 100644 index be11b6300..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/loose.js +++ /dev/null @@ -1,74 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); - -var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); - -var _inherits2 = require("babel-runtime/helpers/inherits"); - -var _inherits3 = _interopRequireDefault(_inherits2); - -var _babelHelperFunctionName = require("babel-helper-function-name"); - -var _babelHelperFunctionName2 = _interopRequireDefault(_babelHelperFunctionName); - -var _vanilla = require("./vanilla"); - -var _vanilla2 = _interopRequireDefault(_vanilla); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var LooseClassTransformer = function (_VanillaTransformer) { - (0, _inherits3.default)(LooseClassTransformer, _VanillaTransformer); - - function LooseClassTransformer() { - (0, _classCallCheck3.default)(this, LooseClassTransformer); - - var _this = (0, _possibleConstructorReturn3.default)(this, _VanillaTransformer.apply(this, arguments)); - - _this.isLoose = true; - return _this; - } - - LooseClassTransformer.prototype._processMethod = function _processMethod(node, scope) { - if (!node.decorators) { - - var classRef = this.classRef; - if (!node.static) classRef = t.memberExpression(classRef, t.identifier("prototype")); - var methodName = t.memberExpression(classRef, node.key, node.computed || t.isLiteral(node.key)); - - var func = t.functionExpression(null, node.params, node.body, node.generator, node.async); - func.returnType = node.returnType; - var key = t.toComputedKey(node, node.key); - if (t.isStringLiteral(key)) { - func = (0, _babelHelperFunctionName2.default)({ - node: func, - id: key, - scope: scope - }); - } - - var expr = t.expressionStatement(t.assignmentExpression("=", methodName, func)); - t.inheritsComments(expr, node); - this.body.push(expr); - return true; - } - }; - - return LooseClassTransformer; -}(_vanilla2.default); - -exports.default = LooseClassTransformer; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/vanilla.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/vanilla.js deleted file mode 100644 index 8fd9ac343..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/lib/vanilla.js +++ /dev/null @@ -1,559 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _babelTraverse = require("babel-traverse"); - -var _babelHelperReplaceSupers = require("babel-helper-replace-supers"); - -var _babelHelperReplaceSupers2 = _interopRequireDefault(_babelHelperReplaceSupers); - -var _babelHelperOptimiseCallExpression = require("babel-helper-optimise-call-expression"); - -var _babelHelperOptimiseCallExpression2 = _interopRequireDefault(_babelHelperOptimiseCallExpression); - -var _babelHelperDefineMap = require("babel-helper-define-map"); - -var defineMap = _interopRequireWildcard(_babelHelperDefineMap); - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var buildDerivedConstructor = (0, _babelTemplate2.default)("\n (function () {\n super(...arguments);\n })\n"); - -var noMethodVisitor = { - "FunctionExpression|FunctionDeclaration": function FunctionExpressionFunctionDeclaration(path) { - if (!path.is("shadow")) { - path.skip(); - } - }, - Method: function Method(path) { - path.skip(); - } -}; - -var verifyConstructorVisitor = _babelTraverse.visitors.merge([noMethodVisitor, { - Super: function Super(path) { - if (this.isDerived && !this.hasBareSuper && !path.parentPath.isCallExpression({ callee: path.node })) { - throw path.buildCodeFrameError("'super.*' is not allowed before super()"); - } - }, - - - CallExpression: { - exit: function exit(path) { - if (path.get("callee").isSuper()) { - this.hasBareSuper = true; - - if (!this.isDerived) { - throw path.buildCodeFrameError("super() is only allowed in a derived constructor"); - } - } - } - }, - - ThisExpression: function ThisExpression(path) { - if (this.isDerived && !this.hasBareSuper) { - if (!path.inShadow("this")) { - throw path.buildCodeFrameError("'this' is not allowed before super()"); - } - } - } -}]); - -var findThisesVisitor = _babelTraverse.visitors.merge([noMethodVisitor, { - ThisExpression: function ThisExpression(path) { - this.superThises.push(path); - } -}]); - -var ClassTransformer = function () { - function ClassTransformer(path, file) { - (0, _classCallCheck3.default)(this, ClassTransformer); - - this.parent = path.parent; - this.scope = path.scope; - this.node = path.node; - this.path = path; - this.file = file; - - this.clearDescriptors(); - - this.instancePropBody = []; - this.instancePropRefs = {}; - this.staticPropBody = []; - this.body = []; - - this.bareSuperAfter = []; - this.bareSupers = []; - - this.pushedConstructor = false; - this.pushedInherits = false; - this.isLoose = false; - - this.superThises = []; - - this.classId = this.node.id; - - this.classRef = this.node.id ? t.identifier(this.node.id.name) : this.scope.generateUidIdentifier("class"); - - this.superName = this.node.superClass || t.identifier("Function"); - this.isDerived = !!this.node.superClass; - } - - ClassTransformer.prototype.run = function run() { - var _this = this; - - var superName = this.superName; - var file = this.file; - var body = this.body; - - var constructorBody = this.constructorBody = t.blockStatement([]); - this.constructor = this.buildConstructor(); - - var closureParams = []; - var closureArgs = []; - - if (this.isDerived) { - closureArgs.push(superName); - - superName = this.scope.generateUidIdentifierBasedOnNode(superName); - closureParams.push(superName); - - this.superName = superName; - } - - this.buildBody(); - - constructorBody.body.unshift(t.expressionStatement(t.callExpression(file.addHelper("classCallCheck"), [t.thisExpression(), this.classRef]))); - - body = body.concat(this.staticPropBody.map(function (fn) { - return fn(_this.classRef); - })); - - if (this.classId) { - if (body.length === 1) return t.toExpression(body[0]); - } - - body.push(t.returnStatement(this.classRef)); - - var container = t.functionExpression(null, closureParams, t.blockStatement(body)); - container.shadow = true; - return t.callExpression(container, closureArgs); - }; - - ClassTransformer.prototype.buildConstructor = function buildConstructor() { - var func = t.functionDeclaration(this.classRef, [], this.constructorBody); - t.inherits(func, this.node); - return func; - }; - - ClassTransformer.prototype.pushToMap = function pushToMap(node, enumerable) { - var kind = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "value"; - var scope = arguments[3]; - - var mutatorMap = void 0; - if (node.static) { - this.hasStaticDescriptors = true; - mutatorMap = this.staticMutatorMap; - } else { - this.hasInstanceDescriptors = true; - mutatorMap = this.instanceMutatorMap; - } - - var map = defineMap.push(mutatorMap, node, kind, this.file, scope); - - if (enumerable) { - map.enumerable = t.booleanLiteral(true); - } - - return map; - }; - - ClassTransformer.prototype.constructorMeMaybe = function constructorMeMaybe() { - var hasConstructor = false; - var paths = this.path.get("body.body"); - for (var _iterator = paths, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var path = _ref; - - hasConstructor = path.equals("kind", "constructor"); - if (hasConstructor) break; - } - if (hasConstructor) return; - - var params = void 0, - body = void 0; - - if (this.isDerived) { - var _constructor = buildDerivedConstructor().expression; - params = _constructor.params; - body = _constructor.body; - } else { - params = []; - body = t.blockStatement([]); - } - - this.path.get("body").unshiftContainer("body", t.classMethod("constructor", t.identifier("constructor"), params, body)); - }; - - ClassTransformer.prototype.buildBody = function buildBody() { - this.constructorMeMaybe(); - this.pushBody(); - this.verifyConstructor(); - - if (this.userConstructor) { - var constructorBody = this.constructorBody; - constructorBody.body = constructorBody.body.concat(this.userConstructor.body.body); - t.inherits(this.constructor, this.userConstructor); - t.inherits(constructorBody, this.userConstructor.body); - } - - this.pushDescriptors(); - }; - - ClassTransformer.prototype.pushBody = function pushBody() { - var classBodyPaths = this.path.get("body.body"); - - for (var _iterator2 = classBodyPaths, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var path = _ref2; - - var node = path.node; - - if (path.isClassProperty()) { - throw path.buildCodeFrameError("Missing class properties transform."); - } - - if (node.decorators) { - throw path.buildCodeFrameError("Method has decorators, put the decorator plugin before the classes one."); - } - - if (t.isClassMethod(node)) { - var isConstructor = node.kind === "constructor"; - - if (isConstructor) { - path.traverse(verifyConstructorVisitor, this); - - if (!this.hasBareSuper && this.isDerived) { - throw path.buildCodeFrameError("missing super() call in constructor"); - } - } - - var replaceSupers = new _babelHelperReplaceSupers2.default({ - forceSuperMemoisation: isConstructor, - methodPath: path, - methodNode: node, - objectRef: this.classRef, - superRef: this.superName, - isStatic: node.static, - isLoose: this.isLoose, - scope: this.scope, - file: this.file - }, true); - - replaceSupers.replace(); - - if (isConstructor) { - this.pushConstructor(replaceSupers, node, path); - } else { - this.pushMethod(node, path); - } - } - } - }; - - ClassTransformer.prototype.clearDescriptors = function clearDescriptors() { - this.hasInstanceDescriptors = false; - this.hasStaticDescriptors = false; - - this.instanceMutatorMap = {}; - this.staticMutatorMap = {}; - }; - - ClassTransformer.prototype.pushDescriptors = function pushDescriptors() { - this.pushInherits(); - - var body = this.body; - - var instanceProps = void 0; - var staticProps = void 0; - - if (this.hasInstanceDescriptors) { - instanceProps = defineMap.toClassObject(this.instanceMutatorMap); - } - - if (this.hasStaticDescriptors) { - staticProps = defineMap.toClassObject(this.staticMutatorMap); - } - - if (instanceProps || staticProps) { - if (instanceProps) instanceProps = defineMap.toComputedObjectFromClass(instanceProps); - if (staticProps) staticProps = defineMap.toComputedObjectFromClass(staticProps); - - var nullNode = t.nullLiteral(); - - var args = [this.classRef, nullNode, nullNode, nullNode, nullNode]; - - if (instanceProps) args[1] = instanceProps; - if (staticProps) args[2] = staticProps; - - if (this.instanceInitializersId) { - args[3] = this.instanceInitializersId; - body.unshift(this.buildObjectAssignment(this.instanceInitializersId)); - } - - if (this.staticInitializersId) { - args[4] = this.staticInitializersId; - body.unshift(this.buildObjectAssignment(this.staticInitializersId)); - } - - var lastNonNullIndex = 0; - for (var i = 0; i < args.length; i++) { - if (args[i] !== nullNode) lastNonNullIndex = i; - } - args = args.slice(0, lastNonNullIndex + 1); - - body.push(t.expressionStatement(t.callExpression(this.file.addHelper("createClass"), args))); - } - - this.clearDescriptors(); - }; - - ClassTransformer.prototype.buildObjectAssignment = function buildObjectAssignment(id) { - return t.variableDeclaration("var", [t.variableDeclarator(id, t.objectExpression([]))]); - }; - - ClassTransformer.prototype.wrapSuperCall = function wrapSuperCall(bareSuper, superRef, thisRef, body) { - var bareSuperNode = bareSuper.node; - - if (this.isLoose) { - bareSuperNode.arguments.unshift(t.thisExpression()); - if (bareSuperNode.arguments.length === 2 && t.isSpreadElement(bareSuperNode.arguments[1]) && t.isIdentifier(bareSuperNode.arguments[1].argument, { name: "arguments" })) { - bareSuperNode.arguments[1] = bareSuperNode.arguments[1].argument; - bareSuperNode.callee = t.memberExpression(superRef, t.identifier("apply")); - } else { - bareSuperNode.callee = t.memberExpression(superRef, t.identifier("call")); - } - } else { - bareSuperNode = (0, _babelHelperOptimiseCallExpression2.default)(t.logicalExpression("||", t.memberExpression(this.classRef, t.identifier("__proto__")), t.callExpression(t.memberExpression(t.identifier("Object"), t.identifier("getPrototypeOf")), [this.classRef])), t.thisExpression(), bareSuperNode.arguments); - } - - var call = t.callExpression(this.file.addHelper("possibleConstructorReturn"), [t.thisExpression(), bareSuperNode]); - - var bareSuperAfter = this.bareSuperAfter.map(function (fn) { - return fn(thisRef); - }); - - if (bareSuper.parentPath.isExpressionStatement() && bareSuper.parentPath.container === body.node.body && body.node.body.length - 1 === bareSuper.parentPath.key) { - - if (this.superThises.length || bareSuperAfter.length) { - bareSuper.scope.push({ id: thisRef }); - call = t.assignmentExpression("=", thisRef, call); - } - - if (bareSuperAfter.length) { - call = t.toSequenceExpression([call].concat(bareSuperAfter, [thisRef])); - } - - bareSuper.parentPath.replaceWith(t.returnStatement(call)); - } else { - bareSuper.replaceWithMultiple([t.variableDeclaration("var", [t.variableDeclarator(thisRef, call)])].concat(bareSuperAfter, [t.expressionStatement(thisRef)])); - } - }; - - ClassTransformer.prototype.verifyConstructor = function verifyConstructor() { - var _this2 = this; - - if (!this.isDerived) return; - - var path = this.userConstructorPath; - var body = path.get("body"); - - path.traverse(findThisesVisitor, this); - - var guaranteedSuperBeforeFinish = !!this.bareSupers.length; - - var superRef = this.superName || t.identifier("Function"); - var thisRef = path.scope.generateUidIdentifier("this"); - - for (var _iterator3 = this.bareSupers, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - var bareSuper = _ref3; - - this.wrapSuperCall(bareSuper, superRef, thisRef, body); - - if (guaranteedSuperBeforeFinish) { - bareSuper.find(function (parentPath) { - if (parentPath === path) { - return true; - } - - if (parentPath.isLoop() || parentPath.isConditional()) { - guaranteedSuperBeforeFinish = false; - return true; - } - }); - } - } - - for (var _iterator4 = this.superThises, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { - var _ref4; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref4 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref4 = _i4.value; - } - - var thisPath = _ref4; - - thisPath.replaceWith(thisRef); - } - - var wrapReturn = function wrapReturn(returnArg) { - return t.callExpression(_this2.file.addHelper("possibleConstructorReturn"), [thisRef].concat(returnArg || [])); - }; - - var bodyPaths = body.get("body"); - if (bodyPaths.length && !bodyPaths.pop().isReturnStatement()) { - body.pushContainer("body", t.returnStatement(guaranteedSuperBeforeFinish ? thisRef : wrapReturn())); - } - - for (var _iterator5 = this.superReturns, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) { - var _ref5; - - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref5 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref5 = _i5.value; - } - - var returnPath = _ref5; - - if (returnPath.node.argument) { - var ref = returnPath.scope.generateDeclaredUidIdentifier("ret"); - returnPath.get("argument").replaceWithMultiple([t.assignmentExpression("=", ref, returnPath.node.argument), wrapReturn(ref)]); - } else { - returnPath.get("argument").replaceWith(wrapReturn()); - } - } - }; - - ClassTransformer.prototype.pushMethod = function pushMethod(node, path) { - var scope = path ? path.scope : this.scope; - - if (node.kind === "method") { - if (this._processMethod(node, scope)) return; - } - - this.pushToMap(node, false, null, scope); - }; - - ClassTransformer.prototype._processMethod = function _processMethod() { - return false; - }; - - ClassTransformer.prototype.pushConstructor = function pushConstructor(replaceSupers, method, path) { - this.bareSupers = replaceSupers.bareSupers; - this.superReturns = replaceSupers.returns; - - if (path.scope.hasOwnBinding(this.classRef.name)) { - path.scope.rename(this.classRef.name); - } - - var construct = this.constructor; - - this.userConstructorPath = path; - this.userConstructor = method; - this.hasConstructor = true; - - t.inheritsComments(construct, method); - - construct._ignoreUserWhitespace = true; - construct.params = method.params; - - t.inherits(construct.body, method.body); - construct.body.directives = method.body.directives; - - this._pushConstructor(); - }; - - ClassTransformer.prototype._pushConstructor = function _pushConstructor() { - if (this.pushedConstructor) return; - this.pushedConstructor = true; - - if (this.hasInstanceDescriptors || this.hasStaticDescriptors) { - this.pushDescriptors(); - } - - this.body.push(this.constructor); - - this.pushInherits(); - }; - - ClassTransformer.prototype.pushInherits = function pushInherits() { - if (!this.isDerived || this.pushedInherits) return; - - this.pushedInherits = true; - this.body.unshift(t.expressionStatement(t.callExpression(this.file.addHelper("inherits"), [this.classRef, this.superName]))); - }; - - return ClassTransformer; -}(); - -exports.default = ClassTransformer; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/package.json deleted file mode 100644 index e7e1669c0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-classes/package.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-classes@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-classes@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-classes@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-classes", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-classes-6.18.0.tgz_1477343939695_0.4756581576075405" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-classes", - "raw": "babel-plugin-transform-es2015-classes@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.18.0.tgz", - "_shasum": "ffe7a17321bf83e494dcda0ae3fc72df48ffd1d9", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-classes@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-helper-define-map": "^6.18.0", - "babel-helper-function-name": "^6.18.0", - "babel-helper-optimise-call-expression": "^6.18.0", - "babel-helper-replace-supers": "^6.18.0", - "babel-messages": "^6.8.0", - "babel-runtime": "^6.9.0", - "babel-template": "^6.14.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0" - }, - "description": "Compile ES2015 classes to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "ffe7a17321bf83e494dcda0ae3fc72df48ffd1d9", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-classes", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-classes" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/README.md deleted file mode 100644 index 1501ec5b9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# babel-plugin-transform-es2015-computed-properties - -Compile ES2015 computed properties to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-computed-properties -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```js -// without options -{ - "plugins": ["transform-es2015-computed-properties"] -} - -// with options -{ - "plugins": [ - ["transform-es2015-computed-properties", { - "loose": true - }] - ] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-computed-properties script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-computed-properties"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/lib/index.js deleted file mode 100644 index 644f83e91..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/lib/index.js +++ /dev/null @@ -1,227 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function ( /*istanbul ignore next*/_ref) { - /*istanbul ignore next*/var t = _ref.types; - /*istanbul ignore next*/var template = _ref.template; - - var buildMutatorMapAssign = template( /*istanbul ignore next*/"\n MUTATOR_MAP_REF[KEY] = MUTATOR_MAP_REF[KEY] || {};\n MUTATOR_MAP_REF[KEY].KIND = VALUE;\n "); - - function getValue(prop) { - if (t.isObjectProperty(prop)) { - return prop.value; - } else if (t.isObjectMethod(prop)) { - return t.functionExpression(null, prop.params, prop.body, prop.generator, prop.async); - } - } - - function pushAssign(objId, prop, body) { - if (prop.kind === "get" && prop.kind === "set") { - pushMutatorDefine(objId, prop, body); - } else { - body.push(t.expressionStatement(t.assignmentExpression("=", t.memberExpression(objId, prop.key, prop.computed || t.isLiteral(prop.key)), getValue(prop)))); - } - } - - function pushMutatorDefine( /*istanbul ignore next*/_ref2, prop) { - /*istanbul ignore next*/var objId = _ref2.objId; - /*istanbul ignore next*/var body = _ref2.body; - /*istanbul ignore next*/var getMutatorId = _ref2.getMutatorId; - /*istanbul ignore next*/var scope = _ref2.scope; - - var key = !prop.computed && t.isIdentifier(prop.key) ? t.stringLiteral(prop.key.name) : prop.key; - - var maybeMemoise = scope.maybeGenerateMemoised(key); - if (maybeMemoise) { - body.push(t.expressionStatement(t.assignmentExpression("=", maybeMemoise, key))); - key = maybeMemoise; - } - - /*istanbul ignore next*/body.push. /*istanbul ignore next*/apply(body, buildMutatorMapAssign({ - MUTATOR_MAP_REF: getMutatorId(), - KEY: key, - VALUE: getValue(prop), - KIND: t.identifier(prop.kind) - })); - } - - function loose(info) { - for ( /*istanbul ignore next*/var _iterator = info.computedProps, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - /*istanbul ignore next*/ - var _ref3; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref3 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref3 = _i.value; - } - - var prop = _ref3; - - if (prop.kind === "get" || prop.kind === "set") { - pushMutatorDefine(info, prop); - } else { - pushAssign(info.objId, prop, info.body); - } - } - } - - function spec(info) { - /*istanbul ignore next*/var objId = info.objId; - /*istanbul ignore next*/var body = info.body; - /*istanbul ignore next*/var computedProps = info.computedProps; - /*istanbul ignore next*/var state = info.state; - - - for ( /*istanbul ignore next*/var _iterator2 = computedProps, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - /*istanbul ignore next*/ - var _ref4; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref4 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref4 = _i2.value; - } - - var prop = _ref4; - - var key = t.toComputedKey(prop); - - if (prop.kind === "get" || prop.kind === "set") { - pushMutatorDefine(info, prop); - } else if (t.isStringLiteral(key, { value: "__proto__" })) { - pushAssign(objId, prop, body); - } else { - if (computedProps.length === 1) { - return t.callExpression(state.addHelper("defineProperty"), [info.initPropExpression, key, getValue(prop)]); - } else { - body.push(t.expressionStatement(t.callExpression(state.addHelper("defineProperty"), [objId, key, getValue(prop)]))); - } - } - } - } - - return { - visitor: { - ObjectExpression: { /*istanbul ignore next*/ - exit: function exit(path, state) { - /*istanbul ignore next*/var node = path.node; - /*istanbul ignore next*/var parent = path.parent; - /*istanbul ignore next*/var scope = path.scope; - - var hasComputed = false; - for ( /*istanbul ignore next*/var _iterator3 = node.properties, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - /*istanbul ignore next*/ - var _ref5; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref5 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref5 = _i3.value; - } - - var prop = _ref5; - - hasComputed = prop.computed === true; - if (hasComputed) break; - } - if (!hasComputed) return; - - // put all getters/setters into the first object expression as well as all initialisers up - // to the first computed property - - var initProps = []; - var computedProps = []; - var foundComputed = false; - - for ( /*istanbul ignore next*/var _iterator4 = node.properties, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { - /*istanbul ignore next*/ - var _ref6; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref6 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref6 = _i4.value; - } - - var _prop = _ref6; - - if (_prop.computed) { - foundComputed = true; - } - - if (foundComputed) { - computedProps.push(_prop); - } else { - initProps.push(_prop); - } - } - - var objId = scope.generateUidIdentifierBasedOnNode(parent); - var initPropExpression = t.objectExpression(initProps); - var body = []; - - body.push(t.variableDeclaration("var", [t.variableDeclarator(objId, initPropExpression)])); - - var callback = spec; - if (state.opts.loose) callback = loose; - - var mutatorRef = /*istanbul ignore next*/void 0; - - var getMutatorId = function getMutatorId() { - if (!mutatorRef) { - mutatorRef = scope.generateUidIdentifier("mutatorMap"); - - body.push(t.variableDeclaration("var", [t.variableDeclarator(mutatorRef, t.objectExpression([]))])); - } - - return mutatorRef; - }; - - var single = callback({ - scope: scope, - objId: objId, - body: body, - computedProps: computedProps, - initPropExpression: initPropExpression, - getMutatorId: getMutatorId, - state: state - }); - - if (mutatorRef) { - body.push(t.expressionStatement(t.callExpression(state.addHelper("defineEnumerableProperties"), [objId, mutatorRef]))); - } - - if (single) { - path.replaceWith(single); - } else { - body.push(t.expressionStatement(objId)); - path.replaceWithMultiple(body); - } - } - } - } - }; -}; - -/*istanbul ignore next*/ -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/package.json deleted file mode 100644 index 507a539c6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-computed-properties/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-computed-properties@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-computed-properties@>=6.3.13 <7.0.0", - "_id": "babel-plugin-transform-es2015-computed-properties@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-computed-properties", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz_1462232676067_0.7725889810826629" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-computed-properties", - "raw": "babel-plugin-transform-es2015-computed-properties@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz", - "_shasum": "f51010fd61b3bd7b6b60a5fdfd307bb7a5279870", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-computed-properties@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-helper-define-map": "^6.8.0", - "babel-runtime": "^6.0.0", - "babel-template": "^6.8.0" - }, - "description": "Compile ES2015 computed properties to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "f51010fd61b3bd7b6b60a5fdfd307bb7a5279870", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.8.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-computed-properties", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-computed-properties" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/README.md deleted file mode 100644 index 77e3e48f1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-es2015-destructuring - -Compile ES2015 destructuring to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-destructuring -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-destructuring"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-destructuring script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-destructuring"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/lib/index.js deleted file mode 100644 index 32d3fcb9e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/lib/index.js +++ /dev/null @@ -1,554 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function (_ref) { - var t = _ref.types; - - - function variableDeclarationHasPattern(node) { - for (var _iterator = node.declarations, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref2; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref2 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref2 = _i.value; - } - - var declar = _ref2; - - if (t.isPattern(declar.id)) { - return true; - } - } - return false; - } - - function hasRest(pattern) { - for (var _iterator2 = pattern.elements, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref3; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref3 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref3 = _i2.value; - } - - var elem = _ref3; - - if (t.isRestElement(elem)) { - return true; - } - } - return false; - } - - var arrayUnpackVisitor = { - ReferencedIdentifier: function ReferencedIdentifier(path, state) { - if (state.bindings[path.node.name]) { - state.deopt = true; - path.stop(); - } - } - }; - - var DestructuringTransformer = function () { - function DestructuringTransformer(opts) { - (0, _classCallCheck3.default)(this, DestructuringTransformer); - - this.blockHoist = opts.blockHoist; - this.operator = opts.operator; - this.arrays = {}; - this.nodes = opts.nodes || []; - this.scope = opts.scope; - this.file = opts.file; - this.kind = opts.kind; - } - - DestructuringTransformer.prototype.buildVariableAssignment = function buildVariableAssignment(id, init) { - var op = this.operator; - if (t.isMemberExpression(id)) op = "="; - - var node = void 0; - - if (op) { - node = t.expressionStatement(t.assignmentExpression(op, id, init)); - } else { - node = t.variableDeclaration(this.kind, [t.variableDeclarator(id, init)]); - } - - node._blockHoist = this.blockHoist; - - return node; - }; - - DestructuringTransformer.prototype.buildVariableDeclaration = function buildVariableDeclaration(id, init) { - var declar = t.variableDeclaration("var", [t.variableDeclarator(id, init)]); - declar._blockHoist = this.blockHoist; - return declar; - }; - - DestructuringTransformer.prototype.push = function push(id, init) { - if (t.isObjectPattern(id)) { - this.pushObjectPattern(id, init); - } else if (t.isArrayPattern(id)) { - this.pushArrayPattern(id, init); - } else if (t.isAssignmentPattern(id)) { - this.pushAssignmentPattern(id, init); - } else { - this.nodes.push(this.buildVariableAssignment(id, init)); - } - }; - - DestructuringTransformer.prototype.toArray = function toArray(node, count) { - if (this.file.opts.loose || t.isIdentifier(node) && this.arrays[node.name]) { - return node; - } else { - return this.scope.toArray(node, count); - } - }; - - DestructuringTransformer.prototype.pushAssignmentPattern = function pushAssignmentPattern(pattern, valueRef) { - - var tempValueRef = this.scope.generateUidIdentifierBasedOnNode(valueRef); - - var declar = t.variableDeclaration("var", [t.variableDeclarator(tempValueRef, valueRef)]); - declar._blockHoist = this.blockHoist; - this.nodes.push(declar); - - var tempConditional = t.conditionalExpression(t.binaryExpression("===", tempValueRef, t.identifier("undefined")), pattern.right, tempValueRef); - - var left = pattern.left; - if (t.isPattern(left)) { - var tempValueDefault = t.expressionStatement(t.assignmentExpression("=", tempValueRef, tempConditional)); - tempValueDefault._blockHoist = this.blockHoist; - - this.nodes.push(tempValueDefault); - this.push(left, tempValueRef); - } else { - this.nodes.push(this.buildVariableAssignment(left, tempConditional)); - } - }; - - DestructuringTransformer.prototype.pushObjectRest = function pushObjectRest(pattern, objRef, spreadProp, spreadPropIndex) { - - var keys = []; - - for (var i = 0; i < pattern.properties.length; i++) { - var prop = pattern.properties[i]; - - if (i >= spreadPropIndex) break; - - if (t.isRestProperty(prop)) continue; - - var key = prop.key; - if (t.isIdentifier(key) && !prop.computed) key = t.stringLiteral(prop.key.name); - keys.push(key); - } - - keys = t.arrayExpression(keys); - - var value = t.callExpression(this.file.addHelper("objectWithoutProperties"), [objRef, keys]); - this.nodes.push(this.buildVariableAssignment(spreadProp.argument, value)); - }; - - DestructuringTransformer.prototype.pushObjectProperty = function pushObjectProperty(prop, propRef) { - if (t.isLiteral(prop.key)) prop.computed = true; - - var pattern = prop.value; - var objRef = t.memberExpression(propRef, prop.key, prop.computed); - - if (t.isPattern(pattern)) { - this.push(pattern, objRef); - } else { - this.nodes.push(this.buildVariableAssignment(pattern, objRef)); - } - }; - - DestructuringTransformer.prototype.pushObjectPattern = function pushObjectPattern(pattern, objRef) { - - if (!pattern.properties.length) { - this.nodes.push(t.expressionStatement(t.callExpression(this.file.addHelper("objectDestructuringEmpty"), [objRef]))); - } - - if (pattern.properties.length > 1 && !this.scope.isStatic(objRef)) { - var temp = this.scope.generateUidIdentifierBasedOnNode(objRef); - this.nodes.push(this.buildVariableDeclaration(temp, objRef)); - objRef = temp; - } - - for (var i = 0; i < pattern.properties.length; i++) { - var prop = pattern.properties[i]; - if (t.isRestProperty(prop)) { - this.pushObjectRest(pattern, objRef, prop, i); - } else { - this.pushObjectProperty(prop, objRef); - } - } - }; - - DestructuringTransformer.prototype.canUnpackArrayPattern = function canUnpackArrayPattern(pattern, arr) { - if (!t.isArrayExpression(arr)) return false; - - if (pattern.elements.length > arr.elements.length) return; - if (pattern.elements.length < arr.elements.length && !hasRest(pattern)) return false; - - for (var _iterator3 = pattern.elements, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref4; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref4 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref4 = _i3.value; - } - - var elem = _ref4; - - if (!elem) return false; - - if (t.isMemberExpression(elem)) return false; - } - - for (var _iterator4 = arr.elements, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { - var _ref5; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref5 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref5 = _i4.value; - } - - var _elem = _ref5; - - if (t.isSpreadElement(_elem)) return false; - - if (t.isCallExpression(_elem)) return false; - - if (t.isMemberExpression(_elem)) return false; - } - - var bindings = t.getBindingIdentifiers(pattern); - var state = { deopt: false, bindings: bindings }; - this.scope.traverse(arr, arrayUnpackVisitor, state); - return !state.deopt; - }; - - DestructuringTransformer.prototype.pushUnpackedArrayPattern = function pushUnpackedArrayPattern(pattern, arr) { - for (var i = 0; i < pattern.elements.length; i++) { - var elem = pattern.elements[i]; - if (t.isRestElement(elem)) { - this.push(elem.argument, t.arrayExpression(arr.elements.slice(i))); - } else { - this.push(elem, arr.elements[i]); - } - } - }; - - DestructuringTransformer.prototype.pushArrayPattern = function pushArrayPattern(pattern, arrayRef) { - if (!pattern.elements) return; - - if (this.canUnpackArrayPattern(pattern, arrayRef)) { - return this.pushUnpackedArrayPattern(pattern, arrayRef); - } - - var count = !hasRest(pattern) && pattern.elements.length; - - var toArray = this.toArray(arrayRef, count); - - if (t.isIdentifier(toArray)) { - arrayRef = toArray; - } else { - arrayRef = this.scope.generateUidIdentifierBasedOnNode(arrayRef); - this.arrays[arrayRef.name] = true; - this.nodes.push(this.buildVariableDeclaration(arrayRef, toArray)); - } - - for (var i = 0; i < pattern.elements.length; i++) { - var elem = pattern.elements[i]; - - if (!elem) continue; - - var elemRef = void 0; - - if (t.isRestElement(elem)) { - elemRef = this.toArray(arrayRef); - - if (i > 0) { - elemRef = t.callExpression(t.memberExpression(elemRef, t.identifier("slice")), [t.numericLiteral(i)]); - } - - elem = elem.argument; - } else { - elemRef = t.memberExpression(arrayRef, t.numericLiteral(i), true); - } - - this.push(elem, elemRef); - } - }; - - DestructuringTransformer.prototype.init = function init(pattern, ref) { - - if (!t.isArrayExpression(ref) && !t.isMemberExpression(ref)) { - var memo = this.scope.maybeGenerateMemoised(ref, true); - if (memo) { - this.nodes.push(this.buildVariableDeclaration(memo, ref)); - ref = memo; - } - } - - this.push(pattern, ref); - - return this.nodes; - }; - - return DestructuringTransformer; - }(); - - return { - visitor: { - ExportNamedDeclaration: function ExportNamedDeclaration(path) { - var declaration = path.get("declaration"); - if (!declaration.isVariableDeclaration()) return; - if (!variableDeclarationHasPattern(declaration.node)) return; - - var specifiers = []; - - for (var name in path.getOuterBindingIdentifiers(path)) { - var id = t.identifier(name); - specifiers.push(t.exportSpecifier(id, id)); - } - - path.replaceWith(declaration.node); - path.insertAfter(t.exportNamedDeclaration(null, specifiers)); - }, - ForXStatement: function ForXStatement(path, file) { - var node = path.node, - scope = path.scope; - - var left = node.left; - - if (t.isPattern(left)) { - - var temp = scope.generateUidIdentifier("ref"); - - node.left = t.variableDeclaration("var", [t.variableDeclarator(temp)]); - - path.ensureBlock(); - - node.body.body.unshift(t.variableDeclaration("var", [t.variableDeclarator(left, temp)])); - - return; - } - - if (!t.isVariableDeclaration(left)) return; - - var pattern = left.declarations[0].id; - if (!t.isPattern(pattern)) return; - - var key = scope.generateUidIdentifier("ref"); - node.left = t.variableDeclaration(left.kind, [t.variableDeclarator(key, null)]); - - var nodes = []; - - var destructuring = new DestructuringTransformer({ - kind: left.kind, - file: file, - scope: scope, - nodes: nodes - }); - - destructuring.init(pattern, key); - - path.ensureBlock(); - - var block = node.body; - block.body = nodes.concat(block.body); - }, - CatchClause: function CatchClause(_ref6, file) { - var node = _ref6.node, - scope = _ref6.scope; - - var pattern = node.param; - if (!t.isPattern(pattern)) return; - - var ref = scope.generateUidIdentifier("ref"); - node.param = ref; - - var nodes = []; - - var destructuring = new DestructuringTransformer({ - kind: "let", - file: file, - scope: scope, - nodes: nodes - }); - destructuring.init(pattern, ref); - - node.body.body = nodes.concat(node.body.body); - }, - AssignmentExpression: function AssignmentExpression(path, file) { - var node = path.node, - scope = path.scope; - - if (!t.isPattern(node.left)) return; - - var nodes = []; - - var destructuring = new DestructuringTransformer({ - operator: node.operator, - file: file, - scope: scope, - nodes: nodes - }); - - var ref = void 0; - if (path.isCompletionRecord() || !path.parentPath.isExpressionStatement()) { - ref = scope.generateUidIdentifierBasedOnNode(node.right, "ref"); - - nodes.push(t.variableDeclaration("var", [t.variableDeclarator(ref, node.right)])); - - if (t.isArrayExpression(node.right)) { - destructuring.arrays[ref.name] = true; - } - } - - destructuring.init(node.left, ref || node.right); - - if (ref) { - nodes.push(t.expressionStatement(ref)); - } - - path.replaceWithMultiple(nodes); - }, - VariableDeclaration: function VariableDeclaration(path, file) { - var node = path.node, - scope = path.scope, - parent = path.parent; - - if (t.isForXStatement(parent)) return; - if (!parent || !path.container) return; - if (!variableDeclarationHasPattern(node)) return; - - var nodes = []; - var declar = void 0; - - for (var i = 0; i < node.declarations.length; i++) { - declar = node.declarations[i]; - - var patternId = declar.init; - var pattern = declar.id; - - var destructuring = new DestructuringTransformer({ - blockHoist: node._blockHoist, - nodes: nodes, - scope: scope, - kind: node.kind, - file: file - }); - - if (t.isPattern(pattern)) { - destructuring.init(pattern, patternId); - - if (+i !== node.declarations.length - 1) { - t.inherits(nodes[nodes.length - 1], declar); - } - } else { - nodes.push(t.inherits(destructuring.buildVariableAssignment(declar.id, declar.init), declar)); - } - } - - var nodesOut = []; - for (var _iterator5 = nodes, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) { - var _ref7; - - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref7 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref7 = _i5.value; - } - - var _node = _ref7; - - var tail = nodesOut[nodesOut.length - 1]; - if (tail && t.isVariableDeclaration(tail) && t.isVariableDeclaration(_node) && tail.kind === _node.kind) { - var _tail$declarations; - - (_tail$declarations = tail.declarations).push.apply(_tail$declarations, _node.declarations); - } else { - nodesOut.push(_node); - } - } - - for (var _iterator6 = nodesOut, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : (0, _getIterator3.default)(_iterator6);;) { - var _ref8; - - if (_isArray6) { - if (_i6 >= _iterator6.length) break; - _ref8 = _iterator6[_i6++]; - } else { - _i6 = _iterator6.next(); - if (_i6.done) break; - _ref8 = _i6.value; - } - - var nodeOut = _ref8; - - if (!nodeOut.declarations) continue; - for (var _iterator7 = nodeOut.declarations, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : (0, _getIterator3.default)(_iterator7);;) { - var _ref9; - - if (_isArray7) { - if (_i7 >= _iterator7.length) break; - _ref9 = _iterator7[_i7++]; - } else { - _i7 = _iterator7.next(); - if (_i7.done) break; - _ref9 = _i7.value; - } - - var declaration = _ref9; - var name = declaration.id.name; - - if (scope.bindings[name]) { - scope.bindings[name].kind = nodeOut.kind; - } - } - } - - if (nodesOut.length === 1) { - path.replaceWith(nodesOut[0]); - } else { - path.replaceWithMultiple(nodesOut); - } - } - } - }; -}; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/package.json deleted file mode 100644 index 0eaf85960..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-destructuring/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-destructuring@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-destructuring@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-destructuring@6.19.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-destructuring", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-destructuring-6.19.0.tgz_1479312925888_0.35334904096089303" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-destructuring", - "raw": "babel-plugin-transform-es2015-destructuring@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.19.0.tgz", - "_shasum": "ff1d911c4b3f4cab621bd66702a869acd1900533", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-destructuring@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-runtime": "^6.9.0" - }, - "description": "Compile ES2015 destructuring to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "ff1d911c4b3f4cab621bd66702a869acd1900533", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.19.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-destructuring", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-destructuring" - }, - "scripts": {}, - "version": "6.19.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/.npmignore deleted file mode 100644 index 246c4aa25..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/README.md deleted file mode 100644 index 0e5c9e896..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# babel-plugin-transform-es2015-duplicate-keys - -Compile objects with duplicate keys to valid strict ES5. - -This plugin actually converts duplicate keys in objects to be computed -properties, which then must be handled by the -transform-es2015-computed-properties plugin. The final result won't contain any -object literals with duplicate keys. - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-duplicate-keys -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-duplicate-keys"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-duplicate-keys script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-duplicate-keys"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/lib/index.js deleted file mode 100644 index b3fb68246..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/lib/index.js +++ /dev/null @@ -1,101 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _create = require("babel-runtime/core-js/object/create"); - -var _create2 = _interopRequireDefault(_create); - -exports.default = function () { - return { - visitor: { /*istanbul ignore next*/ - ObjectExpression: function ObjectExpression(path) { - /*istanbul ignore next*/var node = path.node; - - var plainProps = node.properties.filter(function (prop) /*istanbul ignore next*/{ - return !t.isSpreadProperty(prop) && !prop.computed; - }); - - // A property is a duplicate key if: - // * the property is a data property, and is preceeded by a data, - // getter, or setter property of the same name. - // * the property is a getter property, and is preceeded by a data or - // getter property of the same name. - // * the property is a setter property, and is preceeded by a data or - // setter property of the same name. - - var alreadySeenData = /*istanbul ignore next*/(0, _create2.default)(null); - var alreadySeenGetters = /*istanbul ignore next*/(0, _create2.default)(null); - var alreadySeenSetters = /*istanbul ignore next*/(0, _create2.default)(null); - - for ( /*istanbul ignore next*/var _iterator = plainProps, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - /*istanbul ignore next*/ - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var prop = _ref; - - var name = getName(prop.key); - var isDuplicate = false; - switch (prop.kind) { - case "get": - if (alreadySeenData[name] || alreadySeenGetters[name]) { - isDuplicate = true; - } - alreadySeenGetters[name] = true; - break; - case "set": - if (alreadySeenData[name] || alreadySeenSetters[name]) { - isDuplicate = true; - } - alreadySeenSetters[name] = true; - break; - default: - if (alreadySeenData[name] || alreadySeenGetters[name] || alreadySeenSetters[name]) { - isDuplicate = true; - } - alreadySeenData[name] = true; - } - - if (isDuplicate) { - // Rely on the computed properties transform to split the property - // assignment out of the object literal. - prop.computed = true; - prop.key = t.stringLiteral(name); - } - } - } - } - }; -}; - -var /*istanbul ignore next*/_babelTypes = require("babel-types"); - -/*istanbul ignore next*/ -var t = _interopRequireWildcard(_babelTypes); - -/*istanbul ignore next*/ -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function getName(key) { - if (t.isIdentifier(key)) { - return key.name; - } - return key.value.toString(); -} - -/*istanbul ignore next*/module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/package.json deleted file mode 100644 index 24db772cd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-duplicate-keys/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-duplicate-keys@^6.6.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-duplicate-keys@>=6.6.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-duplicate-keys@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-duplicate-keys", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz_1462232679214_0.3742822257336229" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-duplicate-keys", - "raw": "babel-plugin-transform-es2015-duplicate-keys@^6.6.0", - "rawSpec": "^6.6.0", - "scope": null, - "spec": ">=6.6.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz", - "_shasum": "fd8f7f7171fc108cc1c70c3164b9f15a81c25f7d", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-duplicate-keys@^6.6.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-runtime": "^6.0.0", - "babel-types": "^6.8.0" - }, - "description": "Compile objects with duplicate keys to valid strict ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "fd8f7f7171fc108cc1c70c3164b9f15a81c25f7d", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.8.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-duplicate-keys", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-duplicate-keys" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/README.md deleted file mode 100644 index ec5840ffd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# babel-plugin-transform-es2015-for-of - -Compile ES2015 for...of to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-for-of -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```js -// without options -{ - "plugins": ["transform-es2015-for-of"] -} - -// with options -{ - "plugins": [ - ["transform-es2015-for-of", { - "loose": true - }] - ] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-for-of script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-for-of"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/lib/index.js deleted file mode 100644 index f02f45cc5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/lib/index.js +++ /dev/null @@ -1,190 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (_ref) { - var messages = _ref.messages; - var template = _ref.template; - var t = _ref.types; - - var buildForOfArray = template("\n for (var KEY = 0; KEY < ARR.length; KEY++) BODY;\n "); - - var buildForOfLoose = template("\n for (var LOOP_OBJECT = OBJECT,\n IS_ARRAY = Array.isArray(LOOP_OBJECT),\n INDEX = 0,\n LOOP_OBJECT = IS_ARRAY ? LOOP_OBJECT : LOOP_OBJECT[Symbol.iterator]();;) {\n var ID;\n if (IS_ARRAY) {\n if (INDEX >= LOOP_OBJECT.length) break;\n ID = LOOP_OBJECT[INDEX++];\n } else {\n INDEX = LOOP_OBJECT.next();\n if (INDEX.done) break;\n ID = INDEX.value;\n }\n }\n "); - - var buildForOf = template("\n var ITERATOR_COMPLETION = true;\n var ITERATOR_HAD_ERROR_KEY = false;\n var ITERATOR_ERROR_KEY = undefined;\n try {\n for (var ITERATOR_KEY = OBJECT[Symbol.iterator](), STEP_KEY; !(ITERATOR_COMPLETION = (STEP_KEY = ITERATOR_KEY.next()).done); ITERATOR_COMPLETION = true) {\n }\n } catch (err) {\n ITERATOR_HAD_ERROR_KEY = true;\n ITERATOR_ERROR_KEY = err;\n } finally {\n try {\n if (!ITERATOR_COMPLETION && ITERATOR_KEY.return) {\n ITERATOR_KEY.return();\n }\n } finally {\n if (ITERATOR_HAD_ERROR_KEY) {\n throw ITERATOR_ERROR_KEY;\n }\n }\n }\n "); - - function _ForOfStatementArray(path) { - var node = path.node; - var scope = path.scope; - - var nodes = []; - var right = node.right; - - if (!t.isIdentifier(right) || !scope.hasBinding(right.name)) { - var uid = scope.generateUidIdentifier("arr"); - nodes.push(t.variableDeclaration("var", [t.variableDeclarator(uid, right)])); - right = uid; - } - - var iterationKey = scope.generateUidIdentifier("i"); - - var loop = buildForOfArray({ - BODY: node.body, - KEY: iterationKey, - ARR: right - }); - - t.inherits(loop, node); - t.ensureBlock(loop); - - var iterationValue = t.memberExpression(right, iterationKey, true); - - var left = node.left; - if (t.isVariableDeclaration(left)) { - left.declarations[0].init = iterationValue; - loop.body.body.unshift(left); - } else { - loop.body.body.unshift(t.expressionStatement(t.assignmentExpression("=", left, iterationValue))); - } - - if (path.parentPath.isLabeledStatement()) { - loop = t.labeledStatement(path.parentPath.node.label, loop); - } - - nodes.push(loop); - - return nodes; - } - - return { - visitor: { - ForOfStatement: function ForOfStatement(path, state) { - if (path.get("right").isArrayExpression()) { - if (path.parentPath.isLabeledStatement()) { - return path.parentPath.replaceWithMultiple(_ForOfStatementArray(path)); - } else { - return path.replaceWithMultiple(_ForOfStatementArray(path)); - } - } - - var callback = spec; - if (state.opts.loose) callback = loose; - - var node = path.node; - - var build = callback(path, state); - var declar = build.declar; - var loop = build.loop; - var block = loop.body; - - path.ensureBlock(); - - if (declar) { - block.body.push(declar); - } - - block.body = block.body.concat(node.body.body); - - t.inherits(loop, node); - t.inherits(loop.body, node.body); - - if (build.replaceParent) { - path.parentPath.replaceWithMultiple(build.node); - path.remove(); - } else { - path.replaceWithMultiple(build.node); - } - } - } - }; - - function loose(path, file) { - var node = path.node; - var scope = path.scope; - - - var left = node.left; - var declar = void 0, - id = void 0; - - if (t.isIdentifier(left) || t.isPattern(left) || t.isMemberExpression(left)) { - id = left; - } else if (t.isVariableDeclaration(left)) { - id = scope.generateUidIdentifier("ref"); - declar = t.variableDeclaration(left.kind, [t.variableDeclarator(left.declarations[0].id, id)]); - } else { - throw file.buildCodeFrameError(left, messages.get("unknownForHead", left.type)); - } - - var iteratorKey = scope.generateUidIdentifier("iterator"); - var isArrayKey = scope.generateUidIdentifier("isArray"); - - var loop = buildForOfLoose({ - LOOP_OBJECT: iteratorKey, - IS_ARRAY: isArrayKey, - OBJECT: node.right, - INDEX: scope.generateUidIdentifier("i"), - ID: id - }); - - if (!declar) { - loop.body.body.shift(); - } - - return { - declar: declar, - node: loop, - loop: loop - }; - } - - function spec(path, file) { - var node = path.node; - var scope = path.scope; - var parent = path.parent; - - var left = node.left; - var declar = void 0; - - var stepKey = scope.generateUidIdentifier("step"); - var stepValue = t.memberExpression(stepKey, t.identifier("value")); - - if (t.isIdentifier(left) || t.isPattern(left) || t.isMemberExpression(left)) { - declar = t.expressionStatement(t.assignmentExpression("=", left, stepValue)); - } else if (t.isVariableDeclaration(left)) { - declar = t.variableDeclaration(left.kind, [t.variableDeclarator(left.declarations[0].id, stepValue)]); - } else { - throw file.buildCodeFrameError(left, messages.get("unknownForHead", left.type)); - } - - var iteratorKey = scope.generateUidIdentifier("iterator"); - - var template = buildForOf({ - ITERATOR_HAD_ERROR_KEY: scope.generateUidIdentifier("didIteratorError"), - ITERATOR_COMPLETION: scope.generateUidIdentifier("iteratorNormalCompletion"), - ITERATOR_ERROR_KEY: scope.generateUidIdentifier("iteratorError"), - ITERATOR_KEY: iteratorKey, - STEP_KEY: stepKey, - OBJECT: node.right, - BODY: null - }); - - var isLabeledParent = t.isLabeledStatement(parent); - - var tryBody = template[3].block.body; - var loop = tryBody[0]; - - if (isLabeledParent) { - tryBody[0] = t.labeledStatement(parent.label, loop); - } - - return { - replaceParent: isLabeledParent, - declar: declar, - loop: loop, - node: template - }; - } -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/package.json deleted file mode 100644 index c05a4cce1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-for-of/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-for-of@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-for-of@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-for-of@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-for-of", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-for-of-6.18.0.tgz_1477343941420_0.9596845174673945" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-for-of", - "raw": "babel-plugin-transform-es2015-for-of@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.18.0.tgz", - "_shasum": "4c517504db64bf8cfc119a6b8f177211f2028a70", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-for-of@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-runtime": "^6.0.0" - }, - "description": "Compile ES2015 for...of to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "4c517504db64bf8cfc119a6b8f177211f2028a70", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-for-of", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-for-of" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/README.md deleted file mode 100644 index 57b690f92..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-es2015-function-name - -Apply ES2015 function.name semantics to all functions - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-function-name -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-function-name"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-function-name script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-function-name"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/lib/index.js deleted file mode 100644 index 99f494a62..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/lib/index.js +++ /dev/null @@ -1,35 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - visitor: { - "ArrowFunctionExpression|FunctionExpression": { /*istanbul ignore next*/ - exit: function exit(path) { - if (path.key !== "value" && !path.parentPath.isObjectProperty()) { - var replacement = /*istanbul ignore next*/(0, _babelHelperFunctionName2.default)(path); - if (replacement) path.replaceWith(replacement); - } - } - }, - - /*istanbul ignore next*/ObjectProperty: function ObjectProperty(path) { - var value = path.get("value"); - if (value.isFunction()) { - var newNode = /*istanbul ignore next*/(0, _babelHelperFunctionName2.default)(value); - if (newNode) value.replaceWith(newNode); - } - } - } - }; -}; - -var /*istanbul ignore next*/_babelHelperFunctionName = require("babel-helper-function-name"); - -/*istanbul ignore next*/ -var _babelHelperFunctionName2 = _interopRequireDefault(_babelHelperFunctionName); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/package.json deleted file mode 100644 index 1aeb9431c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-function-name/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-function-name@^6.9.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-function-name@>=6.9.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-function-name@6.9.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-function-name", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-function-name-6.9.0.tgz_1463510973758_0.4115482100751251" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-function-name", - "raw": "babel-plugin-transform-es2015-function-name@^6.9.0", - "rawSpec": "^6.9.0", - "scope": null, - "spec": ">=6.9.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.9.0.tgz", - "_shasum": "8c135b17dbd064e5bba56ec511baaee2fca82719", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-function-name@^6.9.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-helper-function-name": "^6.8.0", - "babel-runtime": "^6.9.0", - "babel-types": "^6.9.0" - }, - "description": "Apply ES2015 function.name semantics to all functions", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "8c135b17dbd064e5bba56ec511baaee2fca82719", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.9.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-function-name", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-function-name" - }, - "scripts": {}, - "version": "6.9.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/README.md deleted file mode 100644 index ec81710e3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-es2015-literals - -Compile ES2015 unicode string and number literals to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-literals -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-literals"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-literals script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-literals"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/lib/index.js deleted file mode 100644 index d5675f908..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/lib/index.js +++ /dev/null @@ -1,28 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - visitor: { /*istanbul ignore next*/ - NumericLiteral: function NumericLiteral(_ref) { - /*istanbul ignore next*/var node = _ref.node; - - // number octal like 0b10 or 0o70 - if (node.extra && /^0[ob]/i.test(node.extra.raw)) { - node.extra = undefined; - } - }, - /*istanbul ignore next*/StringLiteral: function StringLiteral(_ref2) { - /*istanbul ignore next*/var node = _ref2.node; - - // unicode escape - if (node.extra && /\\[u]/gi.test(node.extra.raw)) { - node.extra = undefined; - } - } - } - }; -}; - -/*istanbul ignore next*/module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/package.json deleted file mode 100644 index 30b00ca9c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-literals/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-literals@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-literals@>=6.3.13 <7.0.0", - "_id": "babel-plugin-transform-es2015-literals@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-literals", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-literals-6.8.0.tgz_1462232682537_0.622123695211485" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-literals", - "raw": "babel-plugin-transform-es2015-literals@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.8.0.tgz", - "_shasum": "50aa2e5c7958fc2ab25d74ec117e0cc98f046468", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-literals@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-runtime": "^6.0.0" - }, - "description": "Compile ES2015 unicode string and number literals to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "50aa2e5c7958fc2ab25d74ec117e0cc98f046468", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.8.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-literals", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-literals" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/README.md deleted file mode 100644 index beb7cfc10..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# babel-plugin-transform-es2015-modules-amd - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-modules-amd -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-modules-amd"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-modules-amd script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-modules-amd"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/lib/index.js deleted file mode 100644 index a9fd3321d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/lib/index.js +++ /dev/null @@ -1,137 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _create = require("babel-runtime/core-js/object/create"); - -var _create2 = _interopRequireDefault(_create); - -exports.default = function (_ref) { - var t = _ref.types; - - function isValidRequireCall(path) { - if (!path.isCallExpression()) return false; - if (!path.get("callee").isIdentifier({ name: "require" })) return false; - if (path.scope.getBinding("require")) return false; - - var args = path.get("arguments"); - if (args.length !== 1) return false; - - var arg = args[0]; - if (!arg.isStringLiteral()) return false; - - return true; - } - - var amdVisitor = { - ReferencedIdentifier: function ReferencedIdentifier(_ref2) { - var node = _ref2.node; - var scope = _ref2.scope; - - if (node.name === "exports" && !scope.getBinding("exports")) { - this.hasExports = true; - } - - if (node.name === "module" && !scope.getBinding("module")) { - this.hasModule = true; - } - }, - CallExpression: function CallExpression(path) { - if (!isValidRequireCall(path)) return; - this.bareSources.push(path.node.arguments[0]); - path.remove(); - }, - VariableDeclarator: function VariableDeclarator(path) { - var id = path.get("id"); - if (!id.isIdentifier()) return; - - var init = path.get("init"); - if (!isValidRequireCall(init)) return; - - var source = init.node.arguments[0]; - this.sourceNames[source.value] = true; - this.sources.push([id.node, source]); - - path.remove(); - } - }; - - return { - inherits: require("babel-plugin-transform-es2015-modules-commonjs"), - - pre: function pre() { - this.sources = []; - this.sourceNames = (0, _create2.default)(null); - - this.bareSources = []; - - this.hasExports = false; - this.hasModule = false; - }, - - - visitor: { - Program: { - exit: function exit(path) { - var _this = this; - - if (this.ran) return; - this.ran = true; - - path.traverse(amdVisitor, this); - - var params = this.sources.map(function (source) { - return source[0]; - }); - var sources = this.sources.map(function (source) { - return source[1]; - }); - - sources = sources.concat(this.bareSources.filter(function (str) { - return !_this.sourceNames[str.value]; - })); - - var moduleName = this.getModuleName(); - if (moduleName) moduleName = t.stringLiteral(moduleName); - - if (this.hasExports) { - sources.unshift(t.stringLiteral("exports")); - params.unshift(t.identifier("exports")); - } - - if (this.hasModule) { - sources.unshift(t.stringLiteral("module")); - params.unshift(t.identifier("module")); - } - - var node = path.node; - - var factory = buildFactory({ - PARAMS: params, - BODY: node.body - }); - factory.expression.body.directives = node.directives; - node.directives = []; - - node.body = [buildDefine({ - MODULE_NAME: moduleName, - SOURCES: sources, - FACTORY: factory - })]; - } - } - } - }; -}; - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var buildDefine = (0, _babelTemplate2.default)("\n define(MODULE_NAME, [SOURCES], FACTORY);\n"); - -var buildFactory = (0, _babelTemplate2.default)("\n (function (PARAMS) {\n BODY;\n })\n"); - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/package.json deleted file mode 100644 index 2cff6231d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-amd/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-modules-amd@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-modules-amd@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-modules-amd@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-modules-amd", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-modules-amd-6.18.0.tgz_1477343942804_0.5052579850889742" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-modules-amd", - "raw": "babel-plugin-transform-es2015-modules-amd@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-es2015-modules-umd", - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.18.0.tgz", - "_shasum": "49a054cbb762bdf9ae2d8a807076cfade6141e40", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-modules-amd@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-plugin-transform-es2015-modules-commonjs": "^6.18.0", - "babel-runtime": "^6.0.0", - "babel-template": "^6.8.0" - }, - "description": "This plugin transforms ES2015 modules to AMD", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "49a054cbb762bdf9ae2d8a807076cfade6141e40", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-modules-amd", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-modules-amd" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/README.md deleted file mode 100644 index 95ea03c20..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# babel-plugin-transform-es2015-modules-commonjs - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-modules-commonjs -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```js -// without options -{ - "plugins": ["transform-es2015-modules-commonjs"] -} - -// with options -{ - "plugins": [ - ["transform-es2015-modules-commonjs", { - "allowTopLevelThis": true - }] - ] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-modules-commonjs script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-modules-commonjs"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/lib/index.js deleted file mode 100644 index ff31bdefc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/lib/index.js +++ /dev/null @@ -1,511 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _keys = require("babel-runtime/core-js/object/keys"); - -var _keys2 = _interopRequireDefault(_keys); - -var _create = require("babel-runtime/core-js/object/create"); - -var _create2 = _interopRequireDefault(_create); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _symbol = require("babel-runtime/core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -exports.default = function () { - var REASSIGN_REMAP_SKIP = (0, _symbol2.default)(); - - var reassignmentVisitor = { - ReferencedIdentifier: function ReferencedIdentifier(path) { - var name = path.node.name; - var remap = this.remaps[name]; - if (!remap) return; - - if (this.scope.getBinding(name) !== path.scope.getBinding(name)) return; - - if (path.parentPath.isCallExpression({ callee: path.node })) { - path.replaceWith(t.sequenceExpression([t.numericLiteral(0), remap])); - } else if (path.isJSXIdentifier() && t.isMemberExpression(remap)) { - var object = remap.object; - var property = remap.property; - - path.replaceWith(t.JSXMemberExpression(t.JSXIdentifier(object.name), t.JSXIdentifier(property.name))); - } else { - path.replaceWith(remap); - } - this.requeueInParent(path); - }, - AssignmentExpression: function AssignmentExpression(path) { - var node = path.node; - if (node[REASSIGN_REMAP_SKIP]) return; - - var left = path.get("left"); - if (!left.isIdentifier()) return; - - var name = left.node.name; - var exports = this.exports[name]; - if (!exports) return; - - if (this.scope.getBinding(name) !== path.scope.getBinding(name)) return; - - node[REASSIGN_REMAP_SKIP] = true; - - for (var _iterator = exports, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var reid = _ref; - - node = buildExportsAssignment(reid, node).expression; - } - - path.replaceWith(node); - this.requeueInParent(path); - }, - UpdateExpression: function UpdateExpression(path) { - var arg = path.get("argument"); - if (!arg.isIdentifier()) return; - - var name = arg.node.name; - var exports = this.exports[name]; - if (!exports) return; - - if (this.scope.getBinding(name) !== path.scope.getBinding(name)) return; - - var node = t.assignmentExpression(path.node.operator[0] + "=", arg.node, t.numericLiteral(1)); - - if (path.parentPath.isExpressionStatement() && !path.isCompletionRecord() || path.node.prefix) { - path.replaceWith(node); - this.requeueInParent(path); - return; - } - - var nodes = []; - nodes.push(node); - - var operator = void 0; - if (path.node.operator === "--") { - operator = "+"; - } else { - operator = "-"; - } - nodes.push(t.binaryExpression(operator, arg.node, t.numericLiteral(1))); - - path.replaceWithMultiple(t.sequenceExpression(nodes)); - } - }; - - return { - inherits: require("babel-plugin-transform-strict-mode"), - - visitor: { - ThisExpression: function ThisExpression(path, state) { - if (this.ranCommonJS) return; - - if (state.opts.allowTopLevelThis !== true && !path.findParent(function (path) { - return !path.is("shadow") && THIS_BREAK_KEYS.indexOf(path.type) >= 0; - })) { - path.replaceWith(t.identifier("undefined")); - } - }, - - - Program: { - exit: function exit(path) { - this.ranCommonJS = true; - - var strict = !!this.opts.strict; - - var scope = path.scope; - - scope.rename("module"); - scope.rename("exports"); - scope.rename("require"); - - var hasExports = false; - var hasImports = false; - - var body = path.get("body"); - var imports = (0, _create2.default)(null); - var exports = (0, _create2.default)(null); - - var nonHoistedExportNames = (0, _create2.default)(null); - - var topNodes = []; - var remaps = (0, _create2.default)(null); - - var requires = (0, _create2.default)(null); - - function addRequire(source, blockHoist) { - var cached = requires[source]; - if (cached) return cached; - - var ref = path.scope.generateUidIdentifier((0, _path2.basename)(source, (0, _path2.extname)(source))); - - var varDecl = t.variableDeclaration("var", [t.variableDeclarator(ref, buildRequire(t.stringLiteral(source)).expression)]); - - if (imports[source]) { - varDecl.loc = imports[source].loc; - } - - if (typeof blockHoist === "number" && blockHoist > 0) { - varDecl._blockHoist = blockHoist; - } - - topNodes.push(varDecl); - - return requires[source] = ref; - } - - function addTo(obj, key, arr) { - var existing = obj[key] || []; - obj[key] = existing.concat(arr); - } - - for (var _iterator2 = body, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var _path = _ref2; - - if (_path.isExportDeclaration()) { - hasExports = true; - - var specifiers = [].concat(_path.get("declaration"), _path.get("specifiers")); - for (var _iterator4 = specifiers, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { - var _ref4; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref4 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref4 = _i4.value; - } - - var _specifier2 = _ref4; - - var ids = _specifier2.getBindingIdentifiers(); - if (ids.__esModule) { - throw _specifier2.buildCodeFrameError("Illegal export \"__esModule\""); - } - } - } - - if (_path.isImportDeclaration()) { - var _importsEntry$specifi; - - hasImports = true; - - var key = _path.node.source.value; - var importsEntry = imports[key] || { - specifiers: [], - maxBlockHoist: 0, - loc: _path.node.loc - }; - - (_importsEntry$specifi = importsEntry.specifiers).push.apply(_importsEntry$specifi, _path.node.specifiers); - - if (typeof _path.node._blockHoist === "number") { - importsEntry.maxBlockHoist = Math.max(_path.node._blockHoist, importsEntry.maxBlockHoist); - } - - imports[key] = importsEntry; - - _path.remove(); - } else if (_path.isExportDefaultDeclaration()) { - var declaration = _path.get("declaration"); - if (declaration.isFunctionDeclaration()) { - var id = declaration.node.id; - var defNode = t.identifier("default"); - if (id) { - addTo(exports, id.name, defNode); - topNodes.push(buildExportsAssignment(defNode, id)); - _path.replaceWith(declaration.node); - } else { - topNodes.push(buildExportsAssignment(defNode, t.toExpression(declaration.node))); - _path.remove(); - } - } else if (declaration.isClassDeclaration()) { - var _id = declaration.node.id; - var _defNode = t.identifier("default"); - if (_id) { - addTo(exports, _id.name, _defNode); - _path.replaceWithMultiple([declaration.node, buildExportsAssignment(_defNode, _id)]); - } else { - _path.replaceWith(buildExportsAssignment(_defNode, t.toExpression(declaration.node))); - - _path.parentPath.requeue(_path.get("expression.left")); - } - } else { - _path.replaceWith(buildExportsAssignment(t.identifier("default"), declaration.node)); - - _path.parentPath.requeue(_path.get("expression.left")); - } - } else if (_path.isExportNamedDeclaration()) { - var _declaration = _path.get("declaration"); - if (_declaration.node) { - if (_declaration.isFunctionDeclaration()) { - var _id2 = _declaration.node.id; - addTo(exports, _id2.name, _id2); - topNodes.push(buildExportsAssignment(_id2, _id2)); - _path.replaceWith(_declaration.node); - } else if (_declaration.isClassDeclaration()) { - var _id3 = _declaration.node.id; - addTo(exports, _id3.name, _id3); - _path.replaceWithMultiple([_declaration.node, buildExportsAssignment(_id3, _id3)]); - nonHoistedExportNames[_id3.name] = true; - } else if (_declaration.isVariableDeclaration()) { - var declarators = _declaration.get("declarations"); - for (var _iterator5 = declarators, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) { - var _ref5; - - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref5 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref5 = _i5.value; - } - - var decl = _ref5; - - var _id4 = decl.get("id"); - - var init = decl.get("init"); - if (!init.node) init.replaceWith(t.identifier("undefined")); - - if (_id4.isIdentifier()) { - addTo(exports, _id4.node.name, _id4.node); - init.replaceWith(buildExportsAssignment(_id4.node, init.node).expression); - nonHoistedExportNames[_id4.node.name] = true; - } else {} - } - _path.replaceWith(_declaration.node); - } - continue; - } - - var _specifiers = _path.get("specifiers"); - var nodes = []; - var _source = _path.node.source; - if (_source) { - var ref = addRequire(_source.value, _path.node._blockHoist); - - for (var _iterator6 = _specifiers, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : (0, _getIterator3.default)(_iterator6);;) { - var _ref6; - - if (_isArray6) { - if (_i6 >= _iterator6.length) break; - _ref6 = _iterator6[_i6++]; - } else { - _i6 = _iterator6.next(); - if (_i6.done) break; - _ref6 = _i6.value; - } - - var _specifier3 = _ref6; - - if (_specifier3.isExportNamespaceSpecifier()) {} else if (_specifier3.isExportDefaultSpecifier()) {} else if (_specifier3.isExportSpecifier()) { - if (_specifier3.node.local.name === "default") { - topNodes.push(buildExportsFrom(t.stringLiteral(_specifier3.node.exported.name), t.memberExpression(t.callExpression(this.addHelper("interopRequireDefault"), [ref]), _specifier3.node.local))); - } else { - topNodes.push(buildExportsFrom(t.stringLiteral(_specifier3.node.exported.name), t.memberExpression(ref, _specifier3.node.local))); - } - nonHoistedExportNames[_specifier3.node.exported.name] = true; - } - } - } else { - for (var _iterator7 = _specifiers, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : (0, _getIterator3.default)(_iterator7);;) { - var _ref7; - - if (_isArray7) { - if (_i7 >= _iterator7.length) break; - _ref7 = _iterator7[_i7++]; - } else { - _i7 = _iterator7.next(); - if (_i7.done) break; - _ref7 = _i7.value; - } - - var _specifier4 = _ref7; - - if (_specifier4.isExportSpecifier()) { - addTo(exports, _specifier4.node.local.name, _specifier4.node.exported); - nonHoistedExportNames[_specifier4.node.exported.name] = true; - nodes.push(buildExportsAssignment(_specifier4.node.exported, _specifier4.node.local)); - } - } - } - _path.replaceWithMultiple(nodes); - } else if (_path.isExportAllDeclaration()) { - var exportNode = buildExportAll({ - OBJECT: addRequire(_path.node.source.value, _path.node._blockHoist) - }); - exportNode.loc = _path.node.loc; - topNodes.push(exportNode); - _path.remove(); - } - } - - for (var source in imports) { - var _imports$source = imports[source]; - var specifiers = _imports$source.specifiers; - var maxBlockHoist = _imports$source.maxBlockHoist; - - if (specifiers.length) { - var uid = addRequire(source, maxBlockHoist); - - var wildcard = void 0; - - for (var i = 0; i < specifiers.length; i++) { - var specifier = specifiers[i]; - if (t.isImportNamespaceSpecifier(specifier)) { - if (strict) { - remaps[specifier.local.name] = uid; - } else { - var varDecl = t.variableDeclaration("var", [t.variableDeclarator(specifier.local, t.callExpression(this.addHelper("interopRequireWildcard"), [uid]))]); - - if (maxBlockHoist > 0) { - varDecl._blockHoist = maxBlockHoist; - } - - topNodes.push(varDecl); - } - wildcard = specifier.local; - } else if (t.isImportDefaultSpecifier(specifier)) { - specifiers[i] = t.importSpecifier(specifier.local, t.identifier("default")); - } - } - - for (var _iterator3 = specifiers, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - var _specifier = _ref3; - - if (t.isImportSpecifier(_specifier)) { - var target = uid; - if (_specifier.imported.name === "default") { - if (wildcard) { - target = wildcard; - } else { - target = wildcard = path.scope.generateUidIdentifier(uid.name); - var _varDecl = t.variableDeclaration("var", [t.variableDeclarator(target, t.callExpression(this.addHelper("interopRequireDefault"), [uid]))]); - - if (maxBlockHoist > 0) { - _varDecl._blockHoist = maxBlockHoist; - } - - topNodes.push(_varDecl); - } - } - remaps[_specifier.local.name] = t.memberExpression(target, t.cloneWithoutLoc(_specifier.imported)); - } - } - } else { - var requireNode = buildRequire(t.stringLiteral(source)); - requireNode.loc = imports[source].loc; - topNodes.push(requireNode); - } - } - - if (hasImports && (0, _keys2.default)(nonHoistedExportNames).length) { - var hoistedExportsNode = t.identifier("undefined"); - - for (var name in nonHoistedExportNames) { - hoistedExportsNode = buildExportsAssignment(t.identifier(name), hoistedExportsNode).expression; - } - - var node = t.expressionStatement(hoistedExportsNode); - node._blockHoist = 3; - - topNodes.unshift(node); - } - - if (hasExports && !strict) { - var buildTemplate = buildExportsModuleDeclaration; - if (this.opts.loose) buildTemplate = buildLooseExportsModuleDeclaration; - - var declar = buildTemplate(); - declar._blockHoist = 3; - - topNodes.unshift(declar); - } - - path.unshiftContainer("body", topNodes); - path.traverse(reassignmentVisitor, { - remaps: remaps, - scope: scope, - exports: exports, - requeueInParent: function requeueInParent(newPath) { - return path.requeue(newPath); - } - }); - } - } - } - }; -}; - -var _path2 = require("path"); - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var buildRequire = (0, _babelTemplate2.default)("\n require($0);\n"); - -var buildExportsModuleDeclaration = (0, _babelTemplate2.default)("\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n"); - -var buildExportsFrom = (0, _babelTemplate2.default)("\n Object.defineProperty(exports, $0, {\n enumerable: true,\n get: function () {\n return $1;\n }\n });\n"); - -var buildLooseExportsModuleDeclaration = (0, _babelTemplate2.default)("\n exports.__esModule = true;\n"); - -var buildExportsAssignment = (0, _babelTemplate2.default)("\n exports.$0 = $1;\n"); - -var buildExportAll = (0, _babelTemplate2.default)("\n Object.keys(OBJECT).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n Object.defineProperty(exports, key, {\n enumerable: true,\n get: function () {\n return OBJECT[key];\n }\n });\n });\n"); - -var THIS_BREAK_KEYS = ["FunctionExpression", "FunctionDeclaration", "ClassProperty", "ClassMethod", "ObjectMethod"]; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/package.json deleted file mode 100644 index 32c2c209a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-modules-commonjs@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-modules-commonjs@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-modules-commonjs@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-modules-commonjs", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-modules-commonjs-6.18.0.tgz_1477343943859_0.9435359409544617" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-modules-commonjs", - "raw": "babel-plugin-transform-es2015-modules-commonjs@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-es2015-modules-amd", - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.18.0.tgz", - "_shasum": "c15ae5bb11b32a0abdcc98a5837baa4ee8d67bcc", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-modules-commonjs@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-plugin-transform-strict-mode": "^6.18.0", - "babel-runtime": "^6.0.0", - "babel-template": "^6.16.0", - "babel-types": "^6.18.0" - }, - "description": "This plugin transforms ES2015 modules to CommonJS", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "c15ae5bb11b32a0abdcc98a5837baa4ee8d67bcc", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-modules-commonjs", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-modules-commonjs" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/README.md deleted file mode 100644 index 553b315d4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# babel-plugin-transform-es2015-modules-systemjs - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-modules-systemjs -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```javascript -// without options -{ - "plugins": ["transform-es2015-modules-systemjs"] -} - -// with options -{ - "plugins": [ - ["transform-es2015-modules-systemjs", { - // outputs SystemJS.register(...) - "systemGlobal": "SystemJS" - }] - ] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-modules-systemjs script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-modules-systemjs"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/lib/index.js deleted file mode 100644 index 806475c66..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/lib/index.js +++ /dev/null @@ -1,395 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _create = require("babel-runtime/core-js/object/create"); - -var _create2 = _interopRequireDefault(_create); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _symbol = require("babel-runtime/core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -exports.default = function (_ref) { - var t = _ref.types; - - var IGNORE_REASSIGNMENT_SYMBOL = (0, _symbol2.default)(); - - var reassignmentVisitor = { - "AssignmentExpression|UpdateExpression": function AssignmentExpressionUpdateExpression(path) { - if (path.node[IGNORE_REASSIGNMENT_SYMBOL]) return; - path.node[IGNORE_REASSIGNMENT_SYMBOL] = true; - - var arg = path.get(path.isAssignmentExpression() ? "left" : "argument"); - if (!arg.isIdentifier()) return; - - var name = arg.node.name; - - if (this.scope.getBinding(name) !== path.scope.getBinding(name)) return; - - var exportedNames = this.exports[name]; - if (!exportedNames) return; - - var node = path.node; - - var isPostUpdateExpression = path.isUpdateExpression() && !node.prefix; - if (isPostUpdateExpression) { - if (node.operator === "++") node = t.binaryExpression("+", node.argument, t.numericLiteral(1));else if (node.operator === "--") node = t.binaryExpression("-", node.argument, t.numericLiteral(1));else isPostUpdateExpression = false; - } - - for (var _iterator = exportedNames, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref2; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref2 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref2 = _i.value; - } - - var exportedName = _ref2; - - node = this.buildCall(exportedName, node).expression; - } - - if (isPostUpdateExpression) node = t.sequenceExpression([node, path.node]); - - path.replaceWith(node); - } - }; - - return { - visitor: { - CallExpression: function CallExpression(path, state) { - if (path.node.callee.type === TYPE_IMPORT) { - var contextIdent = state.contextIdent; - path.replaceWith(t.callExpression(t.memberExpression(contextIdent, t.identifier("import")), path.node.arguments)); - } - }, - ReferencedIdentifier: function ReferencedIdentifier(path, state) { - if (path.node.name == "__moduleName" && !path.scope.hasBinding("__moduleName")) { - path.replaceWith(t.memberExpression(state.contextIdent, t.identifier("id"))); - } - }, - - - Program: { - enter: function enter(path, state) { - state.contextIdent = path.scope.generateUidIdentifier("context"); - }, - exit: function exit(path, state) { - var exportIdent = path.scope.generateUidIdentifier("export"); - var contextIdent = state.contextIdent; - - var exportNames = (0, _create2.default)(null); - var modules = []; - - var beforeBody = []; - var setters = []; - var sources = []; - var variableIds = []; - var removedPaths = []; - - function addExportName(key, val) { - exportNames[key] = exportNames[key] || []; - exportNames[key].push(val); - } - - function pushModule(source, key, specifiers) { - var module = void 0; - modules.forEach(function (m) { - if (m.key === source) { - module = m; - } - }); - if (!module) { - modules.push(module = { key: source, imports: [], exports: [] }); - } - module[key] = module[key].concat(specifiers); - } - - function buildExportCall(name, val) { - return t.expressionStatement(t.callExpression(exportIdent, [t.stringLiteral(name), val])); - } - - var body = path.get("body"); - - var canHoist = true; - for (var _iterator2 = body, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref3; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref3 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref3 = _i2.value; - } - - var _path = _ref3; - - if (_path.isExportDeclaration()) _path = _path.get("declaration"); - if (_path.isVariableDeclaration() && _path.node.kind !== "var") { - canHoist = false; - break; - } - } - - for (var _iterator3 = body, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref4; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref4 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref4 = _i3.value; - } - - var _path2 = _ref4; - - if (canHoist && _path2.isFunctionDeclaration()) { - beforeBody.push(_path2.node); - removedPaths.push(_path2); - } else if (_path2.isImportDeclaration()) { - var source = _path2.node.source.value; - pushModule(source, "imports", _path2.node.specifiers); - for (var name in _path2.getBindingIdentifiers()) { - _path2.scope.removeBinding(name); - variableIds.push(t.identifier(name)); - } - _path2.remove(); - } else if (_path2.isExportAllDeclaration()) { - pushModule(_path2.node.source.value, "exports", _path2.node); - _path2.remove(); - } else if (_path2.isExportDefaultDeclaration()) { - var declar = _path2.get("declaration"); - if (declar.isClassDeclaration() || declar.isFunctionDeclaration()) { - var id = declar.node.id; - var nodes = []; - - if (id) { - nodes.push(declar.node); - nodes.push(buildExportCall("default", id)); - addExportName(id.name, "default"); - } else { - nodes.push(buildExportCall("default", t.toExpression(declar.node))); - } - - if (!canHoist || declar.isClassDeclaration()) { - _path2.replaceWithMultiple(nodes); - } else { - beforeBody = beforeBody.concat(nodes); - removedPaths.push(_path2); - } - } else { - _path2.replaceWith(buildExportCall("default", declar.node)); - } - } else if (_path2.isExportNamedDeclaration()) { - var _declar = _path2.get("declaration"); - - if (_declar.node) { - _path2.replaceWith(_declar); - - var _nodes = []; - var bindingIdentifiers = void 0; - if (_path2.isFunction()) { - var node = _declar.node; - var _name = node.id.name; - if (canHoist) { - addExportName(_name, _name); - beforeBody.push(node); - beforeBody.push(buildExportCall(_name, node.id)); - removedPaths.push(_path2); - } else { - var _bindingIdentifiers; - - bindingIdentifiers = (_bindingIdentifiers = {}, _bindingIdentifiers[_name] = node.id, _bindingIdentifiers); - } - } else { - bindingIdentifiers = _declar.getBindingIdentifiers(); - } - for (var _name2 in bindingIdentifiers) { - addExportName(_name2, _name2); - _nodes.push(buildExportCall(_name2, t.identifier(_name2))); - } - _path2.insertAfter(_nodes); - } else { - var specifiers = _path2.node.specifiers; - if (specifiers && specifiers.length) { - if (_path2.node.source) { - pushModule(_path2.node.source.value, "exports", specifiers); - _path2.remove(); - } else { - var _nodes2 = []; - - for (var _iterator7 = specifiers, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : (0, _getIterator3.default)(_iterator7);;) { - var _ref8; - - if (_isArray7) { - if (_i7 >= _iterator7.length) break; - _ref8 = _iterator7[_i7++]; - } else { - _i7 = _iterator7.next(); - if (_i7.done) break; - _ref8 = _i7.value; - } - - var specifier = _ref8; - - _nodes2.push(buildExportCall(specifier.exported.name, specifier.local)); - addExportName(specifier.local.name, specifier.exported.name); - } - - _path2.replaceWithMultiple(_nodes2); - } - } - } - } - } - - modules.forEach(function (specifiers) { - var setterBody = []; - var target = path.scope.generateUidIdentifier(specifiers.key); - - for (var _iterator4 = specifiers.imports, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { - var _ref5; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref5 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref5 = _i4.value; - } - - var specifier = _ref5; - - if (t.isImportNamespaceSpecifier(specifier)) { - setterBody.push(t.expressionStatement(t.assignmentExpression("=", specifier.local, target))); - } else if (t.isImportDefaultSpecifier(specifier)) { - specifier = t.importSpecifier(specifier.local, t.identifier("default")); - } - - if (t.isImportSpecifier(specifier)) { - setterBody.push(t.expressionStatement(t.assignmentExpression("=", specifier.local, t.memberExpression(target, specifier.imported)))); - } - } - - if (specifiers.exports.length) { - var exportObjRef = path.scope.generateUidIdentifier("exportObj"); - - setterBody.push(t.variableDeclaration("var", [t.variableDeclarator(exportObjRef, t.objectExpression([]))])); - - for (var _iterator5 = specifiers.exports, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) { - var _ref6; - - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref6 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref6 = _i5.value; - } - - var node = _ref6; - - if (t.isExportAllDeclaration(node)) { - setterBody.push(buildExportAll({ - KEY: path.scope.generateUidIdentifier("key"), - EXPORT_OBJ: exportObjRef, - TARGET: target - })); - } else if (t.isExportSpecifier(node)) { - setterBody.push(t.expressionStatement(t.assignmentExpression("=", t.memberExpression(exportObjRef, node.exported), t.memberExpression(target, node.local)))); - } else {} - } - - setterBody.push(t.expressionStatement(t.callExpression(exportIdent, [exportObjRef]))); - } - - sources.push(t.stringLiteral(specifiers.key)); - setters.push(t.functionExpression(null, [target], t.blockStatement(setterBody))); - }); - - var moduleName = this.getModuleName(); - if (moduleName) moduleName = t.stringLiteral(moduleName); - - if (canHoist) { - (0, _babelHelperHoistVariables2.default)(path, function (id) { - return variableIds.push(id); - }); - } - - if (variableIds.length) { - beforeBody.unshift(t.variableDeclaration("var", variableIds.map(function (id) { - return t.variableDeclarator(id); - }))); - } - - path.traverse(reassignmentVisitor, { - exports: exportNames, - buildCall: buildExportCall, - scope: path.scope - }); - - for (var _iterator6 = removedPaths, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : (0, _getIterator3.default)(_iterator6);;) { - var _ref7; - - if (_isArray6) { - if (_i6 >= _iterator6.length) break; - _ref7 = _iterator6[_i6++]; - } else { - _i6 = _iterator6.next(); - if (_i6.done) break; - _ref7 = _i6.value; - } - - var _path3 = _ref7; - - _path3.remove(); - } - - path.node.body = [buildTemplate({ - SYSTEM_REGISTER: t.memberExpression(t.identifier(state.opts.systemGlobal || "System"), t.identifier("register")), - BEFORE_BODY: beforeBody, - MODULE_NAME: moduleName, - SETTERS: setters, - SOURCES: sources, - BODY: path.node.body, - EXPORT_IDENTIFIER: exportIdent, - CONTEXT_IDENTIFIER: contextIdent - })]; - } - } - } - }; -}; - -var _babelHelperHoistVariables = require("babel-helper-hoist-variables"); - -var _babelHelperHoistVariables2 = _interopRequireDefault(_babelHelperHoistVariables); - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var buildTemplate = (0, _babelTemplate2.default)("\n SYSTEM_REGISTER(MODULE_NAME, [SOURCES], function (EXPORT_IDENTIFIER, CONTEXT_IDENTIFIER) {\n \"use strict\";\n BEFORE_BODY;\n return {\n setters: [SETTERS],\n execute: function () {\n BODY;\n }\n };\n });\n"); - -var buildExportAll = (0, _babelTemplate2.default)("\n for (var KEY in TARGET) {\n if (KEY !== \"default\" && KEY !== \"__esModule\") EXPORT_OBJ[KEY] = TARGET[KEY];\n }\n"); - -var TYPE_IMPORT = "Import"; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/package.json deleted file mode 100644 index bb3a4b6b4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-systemjs/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-modules-systemjs@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-modules-systemjs@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-modules-systemjs@6.19.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-modules-systemjs", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-modules-systemjs-6.19.0.tgz_1479312925808_0.9690464674495161" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-modules-systemjs", - "raw": "babel-plugin-transform-es2015-modules-systemjs@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.19.0.tgz", - "_shasum": "50438136eba74527efa00a5b0fefaf1dc4071da6", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-modules-systemjs@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-helper-hoist-variables": "^6.18.0", - "babel-runtime": "^6.11.6", - "babel-template": "^6.14.0" - }, - "description": "This plugin transforms ES2015 modules to SystemJS", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0", - "babel-plugin-syntax-dynamic-import": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "50438136eba74527efa00a5b0fefaf1dc4071da6", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.19.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-modules-systemjs", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-modules-systemjs" - }, - "scripts": {}, - "version": "6.19.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/README.md deleted file mode 100644 index 9af5b210c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/README.md +++ /dev/null @@ -1,178 +0,0 @@ -# babel-plugin-transform-es2015-modules-umd - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-modules-umd -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-modules-umd"] -} -``` - -You can also override the names of particular libraries when this module is -running in the browser. For example the `es6-promise` library exposes itself -as `global.Promise` rather than `global.es6Promise`. This can be accommodated by: - -```json -{ - "plugins": [ - ["transform-es2015-modules-umd", { - "globals": { - "es6-promise": "Promise" - } - }] - ] -} -``` - -#### Default semantics - -There are a few things to note about the default semantics. - -_First_, this transform uses the -[basename](https://en.wikipedia.org/wiki/Basename) of each import to generate -the global names in the UMD output. This means that if you're importing -multiple modules with the same basename, like: - -```js -import fooBar1 from "foo-bar"; -import fooBar2 from "./mylib/foo-bar"; -``` - -it will transpile into two references to the same browser global: - -```js -factory(global.fooBar, global.fooBar); -``` - -If you set the plugin options to: - -```json -{ - "globals": { - "foo-bar": "fooBAR", - "./mylib/foo-bar": "mylib.fooBar" - } -} -``` - -it will still transpile both to one browser global: - -```js -factory(global.fooBAR, global.fooBAR); -``` - -because again the transform is only using the basename of the import. - -_Second_, the specified override will still be passed to the `toIdentifier` -function in [babel-types/src/converters](../babel-types/src/converters.js). -This means that if you specify an override as a member expression like: - -```json -{ - "globals": { - "fizzbuzz": "fizz.buzz" - } -} -``` - -this will _not_ transpile to `factory(global.fizz.buzz)`. Instead, it will -transpile to `factory(global.fizzBuzz)` based on the logic in `toIdentifier`. - -_Third_, you cannot override the exported global name. - -#### More flexible semantics with `exactGlobals: true` - -All of these behaviors can limit the flexibility of the `globals` map. To -remove these limitations, you can set the `exactGlobals` option to `true`. -Doing this instructs the plugin to: - -1. always use the full import string instead of the basename when generating -the global names -2. skip passing `globals` overrides to the `toIdentifier` function. Instead, -they are used exactly as written, so you will get errors if you do not use -valid identifiers or valid uncomputed (dot) member expressions. -3. allow the exported global name to be overridden via the `globals` map. Any -override must again be a valid identifier or valid member expression. - -Thus, if you set `exactGlobals` to `true` and do not pass any overrides, the -first example of: - -```js -import fooBar1 from "foo-bar"; -import fooBar2 from "./mylib/foo-bar"; -``` - -will transpile to: - -```js -factory(global.fooBar, global.mylibFooBar); -``` - -And if you set the plugin options to: - -```json -{ - "globals": { - "foo-bar": "fooBAR", - "./mylib/foo-bar": "mylib.fooBar" - }, - "exactGlobals": true -} -``` - -then it'll transpile to: - -```js -factory(global.fooBAR, global.mylib.fooBar) -``` - -Finally, with the plugin options set to: - -```json -{ - "plugins": [ - "external-helpers", - ["transform-es2015-modules-umd", { - "globals": { - "my/custom/module/name": "My.Custom.Module.Name" - }, - "exactGlobals": true - }] - ], - "moduleId": "my/custom/module/name" -} -``` - -it will transpile to: - -```js -factory(mod.exports); -global.My = global.My || {}; -global.My.Custom = global.My.Custom || {}; -global.My.Custom.Module = global.My.Custom.Module || {}; -global.My.Custom.Module.Name = mod.exports; -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-modules-umd script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-modules-umd"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/lib/index.js deleted file mode 100644 index d53797132..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/lib/index.js +++ /dev/null @@ -1,127 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (_ref) { - var t = _ref.types; - - function isValidDefine(path) { - if (!path.isExpressionStatement()) return; - - var expr = path.get("expression"); - if (!expr.isCallExpression()) return false; - if (!expr.get("callee").isIdentifier({ name: "define" })) return false; - - var args = expr.get("arguments"); - if (args.length === 3 && !args.shift().isStringLiteral()) return false; - if (args.length !== 2) return false; - if (!args.shift().isArrayExpression()) return false; - if (!args.shift().isFunctionExpression()) return false; - - return true; - } - - return { - inherits: require("babel-plugin-transform-es2015-modules-amd"), - - visitor: { - Program: { - exit: function exit(path, state) { - var last = path.get("body").pop(); - if (!isValidDefine(last)) return; - - var call = last.node.expression; - var args = call.arguments; - - var moduleName = args.length === 3 ? args.shift() : null; - var amdArgs = call.arguments[0]; - var func = call.arguments[1]; - var browserGlobals = state.opts.globals || {}; - - var commonArgs = amdArgs.elements.map(function (arg) { - if (arg.value === "module" || arg.value === "exports") { - return t.identifier(arg.value); - } else { - return t.callExpression(t.identifier("require"), [arg]); - } - }); - - var browserArgs = amdArgs.elements.map(function (arg) { - if (arg.value === "module") { - return t.identifier("mod"); - } else if (arg.value === "exports") { - return t.memberExpression(t.identifier("mod"), t.identifier("exports")); - } else { - var memberExpression = void 0; - - if (state.opts.exactGlobals) { - var globalRef = browserGlobals[arg.value]; - if (globalRef) { - memberExpression = globalRef.split(".").reduce(function (accum, curr) { - return t.memberExpression(accum, t.identifier(curr)); - }, t.identifier("global")); - } else { - memberExpression = t.memberExpression(t.identifier("global"), t.identifier(t.toIdentifier(arg.value))); - } - } else { - var requireName = (0, _path.basename)(arg.value, (0, _path.extname)(arg.value)); - var globalName = browserGlobals[requireName] || requireName; - memberExpression = t.memberExpression(t.identifier("global"), t.identifier(t.toIdentifier(globalName))); - } - - return memberExpression; - } - }); - - var moduleNameOrBasename = moduleName ? moduleName.value : this.file.opts.basename; - var globalToAssign = t.memberExpression(t.identifier("global"), t.identifier(t.toIdentifier(moduleNameOrBasename))); - var prerequisiteAssignments = null; - - if (state.opts.exactGlobals) { - var globalName = browserGlobals[moduleNameOrBasename]; - - if (globalName) { - prerequisiteAssignments = []; - - var members = globalName.split("."); - globalToAssign = members.slice(1).reduce(function (accum, curr) { - prerequisiteAssignments.push(buildPrerequisiteAssignment({ GLOBAL_REFERENCE: accum })); - return t.memberExpression(accum, t.identifier(curr)); - }, t.memberExpression(t.identifier("global"), t.identifier(members[0]))); - } - } - - var globalExport = buildGlobalExport({ - BROWSER_ARGUMENTS: browserArgs, - PREREQUISITE_ASSIGNMENTS: prerequisiteAssignments, - GLOBAL_TO_ASSIGN: globalToAssign - }); - - last.replaceWith(buildWrapper({ - MODULE_NAME: moduleName, - AMD_ARGUMENTS: amdArgs, - COMMON_ARGUMENTS: commonArgs, - GLOBAL_EXPORT: globalExport, - FUNC: func - })); - } - } - } - }; -}; - -var _path = require("path"); - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var buildPrerequisiteAssignment = (0, _babelTemplate2.default)("\n GLOBAL_REFERENCE = GLOBAL_REFERENCE || {}\n"); - -var buildGlobalExport = (0, _babelTemplate2.default)("\n var mod = { exports: {} };\n factory(BROWSER_ARGUMENTS);\n PREREQUISITE_ASSIGNMENTS\n GLOBAL_TO_ASSIGN = mod.exports;\n"); - -var buildWrapper = (0, _babelTemplate2.default)("\n (function (global, factory) {\n if (typeof define === \"function\" && define.amd) {\n define(MODULE_NAME, AMD_ARGUMENTS, factory);\n } else if (typeof exports !== \"undefined\") {\n factory(COMMON_ARGUMENTS);\n } else {\n GLOBAL_EXPORT\n }\n })(this, FUNC);\n"); - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/package.json deleted file mode 100644 index 07b9edc12..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-umd/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-modules-umd@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-modules-umd@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-modules-umd@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-modules-umd", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-modules-umd-6.18.0.tgz_1477343945049_0.6534498787950724" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-modules-umd", - "raw": "babel-plugin-transform-es2015-modules-umd@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.18.0.tgz", - "_shasum": "23351770ece5c1f8e83ed67cb1d7992884491e50", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-modules-umd@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-plugin-transform-es2015-modules-amd": "^6.18.0", - "babel-runtime": "^6.0.0", - "babel-template": "^6.8.0" - }, - "description": "This plugin transforms ES2015 modules to UMD", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "23351770ece5c1f8e83ed67cb1d7992884491e50", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-modules-umd", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-modules-umd" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/README.md deleted file mode 100644 index ea5bf50c7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-es2015-object-super - -Compile ES2015 object super to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-object-super -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-object-super"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-object-super script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-object-super"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/lib/index.js deleted file mode 100644 index c558c8c17..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/lib/index.js +++ /dev/null @@ -1,87 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _symbol = require("babel-runtime/core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -exports.default = function ( /*istanbul ignore next*/_ref) { - /*istanbul ignore next*/var t = _ref.types; - - function Property(path, node, scope, getObjectRef, file) { - var replaceSupers = new /*istanbul ignore next*/_babelHelperReplaceSupers2.default({ - getObjectRef: getObjectRef, - methodNode: node, - methodPath: path, - isStatic: true, - scope: scope, - file: file - }); - - replaceSupers.replace(); - } - - var CONTAINS_SUPER = /*istanbul ignore next*/(0, _symbol2.default)(); - - return { - visitor: { /*istanbul ignore next*/ - Super: function Super(path) { - var parentObj = path.findParent(function (path) /*istanbul ignore next*/{ - return path.isObjectExpression(); - }); - if (parentObj) parentObj.node[CONTAINS_SUPER] = true; - }, - - - ObjectExpression: { /*istanbul ignore next*/ - exit: function exit(path, file) { - if (!path.node[CONTAINS_SUPER]) return; - - var objectRef = /*istanbul ignore next*/void 0; - var getObjectRef = function getObjectRef() /*istanbul ignore next*/{ - return objectRef = objectRef || path.scope.generateUidIdentifier("obj"); - }; - - var propPaths = path.get("properties"); - for ( /*istanbul ignore next*/var _iterator = propPaths, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - /*istanbul ignore next*/ - var _ref2; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref2 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref2 = _i.value; - } - - var propPath = _ref2; - - if (propPath.isObjectProperty()) propPath = propPath.get("value"); - Property(propPath, propPath.node, path.scope, getObjectRef, file); - } - - if (objectRef) { - path.scope.push({ id: objectRef }); - path.replaceWith(t.assignmentExpression("=", objectRef, path.node)); - } - } - } - } - }; -}; - -var /*istanbul ignore next*/_babelHelperReplaceSupers = require("babel-helper-replace-supers"); - -/*istanbul ignore next*/ -var _babelHelperReplaceSupers2 = _interopRequireDefault(_babelHelperReplaceSupers); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/package.json deleted file mode 100644 index ea831fdd9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-object-super/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-object-super@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-object-super@>=6.3.13 <7.0.0", - "_id": "babel-plugin-transform-es2015-object-super@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-object-super", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-object-super-6.8.0.tgz_1462232687122_0.37952318019233644" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-object-super", - "raw": "babel-plugin-transform-es2015-object-super@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.8.0.tgz", - "_shasum": "1b858740a5a4400887c23dcff6f4d56eea4a24c5", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-object-super@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-helper-replace-supers": "^6.8.0", - "babel-runtime": "^6.0.0" - }, - "description": "Compile ES2015 object super to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "1b858740a5a4400887c23dcff6f4d56eea4a24c5", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.8.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-object-super", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-object-super" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/README.md deleted file mode 100644 index e443bbba3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-es2015-parameters - -Compile ES2015 default and rest parameters to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-parameters -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-parameters"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-parameters script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-parameters"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/default.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/default.js deleted file mode 100644 index 66b7a497f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/default.js +++ /dev/null @@ -1,163 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.visitor = undefined; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _babelHelperGetFunctionArity = require("babel-helper-get-function-arity"); - -var _babelHelperGetFunctionArity2 = _interopRequireDefault(_babelHelperGetFunctionArity); - -var _babelHelperCallDelegate = require("babel-helper-call-delegate"); - -var _babelHelperCallDelegate2 = _interopRequireDefault(_babelHelperCallDelegate); - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var buildDefaultParam = (0, _babelTemplate2.default)("\n let VARIABLE_NAME =\n ARGUMENTS.length > ARGUMENT_KEY && ARGUMENTS[ARGUMENT_KEY] !== undefined ?\n ARGUMENTS[ARGUMENT_KEY]\n :\n DEFAULT_VALUE;\n"); - -var buildCutOff = (0, _babelTemplate2.default)("\n let $0 = $1[$2];\n"); - -function hasDefaults(node) { - for (var _iterator = node.params, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var param = _ref; - - if (!t.isIdentifier(param)) return true; - } - return false; -} - -function isSafeBinding(scope, node) { - if (!scope.hasOwnBinding(node.name)) return true; - - var _scope$getOwnBinding = scope.getOwnBinding(node.name); - - var kind = _scope$getOwnBinding.kind; - - return kind === "param" || kind === "local"; -} - -var iifeVisitor = { - ReferencedIdentifier: function ReferencedIdentifier(path, state) { - var scope = path.scope; - var node = path.node; - - if (node.name === "eval" || !isSafeBinding(scope, node)) { - state.iife = true; - path.stop(); - } - }, - Scope: function Scope(path) { - path.skip(); - } -}; - -var visitor = exports.visitor = { - Function: function Function(path) { - var node = path.node; - var scope = path.scope; - - if (!hasDefaults(node)) return; - - path.ensureBlock(); - - var state = { - iife: false, - scope: scope - }; - - var body = []; - - var argsIdentifier = t.identifier("arguments"); - argsIdentifier._shadowedFunctionLiteral = path; - - function pushDefNode(left, right, i) { - var defNode = buildDefaultParam({ - VARIABLE_NAME: left, - DEFAULT_VALUE: right, - ARGUMENT_KEY: t.numericLiteral(i), - ARGUMENTS: argsIdentifier - }); - defNode._blockHoist = node.params.length - i; - body.push(defNode); - } - - var lastNonDefaultParam = (0, _babelHelperGetFunctionArity2.default)(node); - - var params = path.get("params"); - for (var i = 0; i < params.length; i++) { - var param = params[i]; - - if (!param.isAssignmentPattern()) { - if (!state.iife && !param.isIdentifier()) { - param.traverse(iifeVisitor, state); - } - - continue; - } - - var left = param.get("left"); - var right = param.get("right"); - - if (i >= lastNonDefaultParam || left.isPattern()) { - var placeholder = scope.generateUidIdentifier("x"); - placeholder._isDefaultPlaceholder = true; - node.params[i] = placeholder; - } else { - node.params[i] = left.node; - } - - if (!state.iife) { - if (right.isIdentifier() && !isSafeBinding(scope, right.node)) { - state.iife = true; - } else { - right.traverse(iifeVisitor, state); - } - } - - pushDefNode(left.node, right.node, i); - } - - for (var _i2 = lastNonDefaultParam + 1; _i2 < node.params.length; _i2++) { - var _param = node.params[_i2]; - if (_param._isDefaultPlaceholder) continue; - - var declar = buildCutOff(_param, argsIdentifier, t.numericLiteral(_i2)); - declar._blockHoist = node.params.length - _i2; - body.push(declar); - } - - node.params = node.params.slice(0, lastNonDefaultParam); - - if (state.iife) { - body.push((0, _babelHelperCallDelegate2.default)(path, scope)); - path.set("body", t.blockStatement(body)); - } else { - path.get("body").unshiftContainer("body", body); - } - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/destructuring.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/destructuring.js deleted file mode 100644 index 896c7c131..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/destructuring.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.visitor = undefined; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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 visitor = exports.visitor = { - Function: function Function(path) { - var params = path.get("params"); - - var hoistTweak = t.isRestElement(params[params.length - 1]) ? 1 : 0; - var outputParamsLength = params.length - hoistTweak; - - for (var i = 0; i < outputParamsLength; i++) { - var param = params[i]; - if (param.isArrayPattern() || param.isObjectPattern()) { - var uid = path.scope.generateUidIdentifier("ref"); - - var declar = t.variableDeclaration("let", [t.variableDeclarator(param.node, uid)]); - declar._blockHoist = outputParamsLength - i; - - path.ensureBlock(); - path.get("body").unshiftContainer("body", declar); - - param.replaceWith(uid); - } - } - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/index.js deleted file mode 100644 index feab6db0d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/index.js +++ /dev/null @@ -1,56 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function () { - return { - visitor: _babelTraverse.visitors.merge([{ - ArrowFunctionExpression: function ArrowFunctionExpression(path) { - var params = path.get("params"); - for (var _iterator = params, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var param = _ref; - - if (param.isRestElement() || param.isAssignmentPattern()) { - path.arrowFunctionToShadowed(); - break; - } - } - } - }, destructuring.visitor, rest.visitor, def.visitor]) - }; -}; - -var _babelTraverse = require("babel-traverse"); - -var _destructuring = require("./destructuring"); - -var destructuring = _interopRequireWildcard(_destructuring); - -var _default = require("./default"); - -var def = _interopRequireWildcard(_default); - -var _rest = require("./rest"); - -var rest = _interopRequireWildcard(_rest); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/rest.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/rest.js deleted file mode 100644 index 9b20c1467..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/lib/rest.js +++ /dev/null @@ -1,255 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.visitor = undefined; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _babelTemplate = require("babel-template"); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var buildRest = (0, _babelTemplate2.default)("\n for (var LEN = ARGUMENTS.length,\n ARRAY = Array(ARRAY_LEN),\n KEY = START;\n KEY < LEN;\n KEY++) {\n ARRAY[ARRAY_KEY] = ARGUMENTS[KEY];\n }\n"); - -var restIndex = (0, _babelTemplate2.default)("\n ARGUMENTS.length <= INDEX ? undefined : ARGUMENTS[INDEX]\n"); - -var restIndexImpure = (0, _babelTemplate2.default)("\n REF = INDEX, ARGUMENTS.length <= REF ? undefined : ARGUMENTS[REF]\n"); - -var restLength = (0, _babelTemplate2.default)("\n ARGUMENTS.length <= OFFSET ? 0 : ARGUMENTS.length - OFFSET\n"); - -var memberExpressionOptimisationVisitor = { - Scope: function Scope(path, state) { - if (!path.scope.bindingIdentifierEquals(state.name, state.outerBinding)) { - path.skip(); - } - }, - Flow: function Flow(path) { - if (path.isTypeCastExpression()) return; - - path.skip(); - }, - - - "Function|ClassProperty": function FunctionClassProperty(path, state) { - var oldNoOptimise = state.noOptimise; - state.noOptimise = true; - path.traverse(memberExpressionOptimisationVisitor, state); - state.noOptimise = oldNoOptimise; - - path.skip(); - }, - - ReferencedIdentifier: function ReferencedIdentifier(path, state) { - var node = path.node; - - if (node.name === "arguments") { - state.deopted = true; - } - - if (node.name !== state.name) return; - - if (state.noOptimise) { - state.deopted = true; - } else { - var parentPath = path.parentPath; - - if (parentPath.isMemberExpression({ object: node })) { - var grandparentPath = parentPath.parentPath; - - var argsOptEligible = !state.deopted && !(grandparentPath.isAssignmentExpression() && parentPath.node === grandparentPath.node.left || grandparentPath.isLVal() || grandparentPath.isForXStatement() || grandparentPath.isUpdateExpression() || grandparentPath.isUnaryExpression({ operator: "delete" }) || (grandparentPath.isCallExpression() || grandparentPath.isNewExpression()) && parentPath.node === grandparentPath.node.callee); - - if (argsOptEligible) { - if (parentPath.node.computed) { - if (parentPath.get("property").isBaseType("number")) { - state.candidates.push({ cause: "indexGetter", path: path }); - return; - } - } else if (parentPath.node.property.name === "length") { - state.candidates.push({ cause: "lengthGetter", path: path }); - return; - } - } - } - - if (state.offset === 0 && parentPath.isSpreadElement()) { - var call = parentPath.parentPath; - if (call.isCallExpression() && call.node.arguments.length === 1) { - state.candidates.push({ cause: "argSpread", path: path }); - return; - } - } - - state.references.push(path); - } - }, - BindingIdentifier: function BindingIdentifier(_ref, state) { - var node = _ref.node; - - if (node.name === state.name) { - state.deopted = true; - } - } -}; -function hasRest(node) { - return t.isRestElement(node.params[node.params.length - 1]); -} - -function optimiseIndexGetter(path, argsId, offset) { - var index = void 0; - - if (t.isNumericLiteral(path.parent.property)) { - index = t.numericLiteral(path.parent.property.value + offset); - } else if (offset === 0) { - index = path.parent.property; - } else { - index = t.binaryExpression("+", path.parent.property, t.numericLiteral(offset)); - } - - var scope = path.scope; - - if (!scope.isPure(index)) { - var temp = scope.generateUidIdentifierBasedOnNode(index); - scope.push({ id: temp, kind: "var" }); - path.parentPath.replaceWith(restIndexImpure({ - ARGUMENTS: argsId, - INDEX: index, - REF: temp - })); - } else { - path.parentPath.replaceWith(restIndex({ - ARGUMENTS: argsId, - INDEX: index - })); - } -} - -function optimiseLengthGetter(path, argsId, offset) { - if (offset) { - path.parentPath.replaceWith(restLength({ - ARGUMENTS: argsId, - OFFSET: t.numericLiteral(offset) - })); - } else { - path.replaceWith(argsId); - } -} - -var visitor = exports.visitor = { - Function: function Function(path) { - var node = path.node; - var scope = path.scope; - - if (!hasRest(node)) return; - - var rest = node.params.pop().argument; - - var argsId = t.identifier("arguments"); - - argsId._shadowedFunctionLiteral = path; - - var state = { - references: [], - offset: node.params.length, - - argumentsNode: argsId, - outerBinding: scope.getBindingIdentifier(rest.name), - - candidates: [], - - name: rest.name, - - deopted: false - }; - - path.traverse(memberExpressionOptimisationVisitor, state); - - if (!state.deopted && !state.references.length) { - for (var _iterator = state.candidates, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref2; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref2 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref2 = _i.value; - } - - var _ref3 = _ref2; - var _path = _ref3.path; - var cause = _ref3.cause; - - switch (cause) { - case "indexGetter": - optimiseIndexGetter(_path, argsId, state.offset); - break; - case "lengthGetter": - optimiseLengthGetter(_path, argsId, state.offset); - break; - default: - _path.replaceWith(argsId); - } - } - return; - } - - state.references = state.references.concat(state.candidates.map(function (_ref4) { - var path = _ref4.path; - return path; - })); - - state.deopted = state.deopted || !!node.shadow; - - var start = t.numericLiteral(node.params.length); - var key = scope.generateUidIdentifier("key"); - var len = scope.generateUidIdentifier("len"); - - var arrKey = key; - var arrLen = len; - if (node.params.length) { - arrKey = t.binaryExpression("-", key, start); - - arrLen = t.conditionalExpression(t.binaryExpression(">", len, start), t.binaryExpression("-", len, start), t.numericLiteral(0)); - } - - var loop = buildRest({ - ARGUMENTS: argsId, - ARRAY_KEY: arrKey, - ARRAY_LEN: arrLen, - START: start, - ARRAY: rest, - KEY: key, - LEN: len - }); - - if (state.deopted) { - loop._blockHoist = node.params.length + 1; - node.body.body.unshift(loop); - } else { - loop._blockHoist = 1; - - var target = path.getEarliestCommonAncestorFrom(state.references).getStatementParent(); - - target.findParent(function (path) { - if (path.isLoop()) { - target = path; - } else { - return path.isFunction(); - } - }); - - target.insertBefore(loop); - } - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/package.json deleted file mode 100644 index 5480c8616..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-parameters/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-parameters@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-parameters@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-parameters@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-parameters", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-parameters-6.18.0.tgz_1477343945685_0.9927002356853336" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-parameters", - "raw": "babel-plugin-transform-es2015-parameters@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.18.0.tgz", - "_shasum": "9b2cfe238c549f1635ba27fc1daa858be70608b1", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-parameters@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-helper-call-delegate": "^6.18.0", - "babel-helper-get-function-arity": "^6.18.0", - "babel-runtime": "^6.9.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0" - }, - "description": "Compile ES2015 default and rest parameters to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "9b2cfe238c549f1635ba27fc1daa858be70608b1", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-parameters", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-parameters" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/README.md deleted file mode 100644 index 8fc11b00b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-es2015-shorthand-properties - -Compile ES2015 shorthand properties to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-shorthand-properties -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-shorthand-properties"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-shorthand-properties script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-shorthand-properties"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/lib/index.js deleted file mode 100644 index ec3c7cdfb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/lib/index.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - visitor: { - ObjectMethod: function ObjectMethod(path) { - var node = path.node; - - if (node.kind === "method") { - var func = t.functionExpression(null, node.params, node.body, node.generator, node.async); - func.returnType = node.returnType; - - path.replaceWith(t.objectProperty(node.key, func, node.computed)); - } - }, - ObjectProperty: function ObjectProperty(_ref) { - var node = _ref.node; - - if (node.shorthand) { - node.shorthand = false; - } - } - } - }; -}; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/package.json deleted file mode 100644 index 07351fed7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-shorthand-properties/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-shorthand-properties@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-shorthand-properties@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-shorthand-properties@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-shorthand-properties", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-shorthand-properties-6.18.0.tgz_1477343946808_0.057266221614554524" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-shorthand-properties", - "raw": "babel-plugin-transform-es2015-shorthand-properties@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.18.0.tgz", - "_shasum": "e2ede3b7df47bf980151926534d1dd0cbea58f43", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-shorthand-properties@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-runtime": "^6.0.0", - "babel-types": "^6.18.0" - }, - "description": "Compile ES2015 shorthand properties to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "e2ede3b7df47bf980151926534d1dd0cbea58f43", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-shorthand-properties", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-shorthand-properties" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/README.md deleted file mode 100644 index 62e9b385b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# babel-plugin-transform-es2015-spread - -Compile ES2015 spread to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-spread -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```js -// without options -{ - "plugins": ["transform-es2015-spread"] -} - -// with options -{ - "plugins": [ - ["transform-es2015-spread", { - "loose": true - }] - ] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-spread script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-spread"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/lib/index.js deleted file mode 100644 index 8b9d07d78..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/lib/index.js +++ /dev/null @@ -1,159 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function ( /*istanbul ignore next*/_ref) { - /*istanbul ignore next*/var t = _ref.types; - - function getSpreadLiteral(spread, scope, state) { - if (state.opts.loose && !t.isIdentifier(spread.argument, { name: "arguments" })) { - return spread.argument; - } else { - return scope.toArray(spread.argument, true); - } - } - - function hasSpread(nodes) { - for (var i = 0; i < nodes.length; i++) { - if (t.isSpreadElement(nodes[i])) { - return true; - } - } - return false; - } - - function build(props, scope, state) { - var nodes = []; - - var _props = []; - - function push() { - if (!_props.length) return; - nodes.push(t.arrayExpression(_props)); - _props = []; - } - - for ( /*istanbul ignore next*/var _iterator = props, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - /*istanbul ignore next*/ - var _ref2; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref2 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref2 = _i.value; - } - - var prop = _ref2; - - if (t.isSpreadElement(prop)) { - push(); - nodes.push(getSpreadLiteral(prop, scope, state)); - } else { - _props.push(prop); - } - } - - push(); - - return nodes; - } - - return { - visitor: { /*istanbul ignore next*/ - ArrayExpression: function ArrayExpression(path, state) { - /*istanbul ignore next*/var node = path.node; - /*istanbul ignore next*/var scope = path.scope; - - var elements = node.elements; - if (!hasSpread(elements)) return; - - var nodes = build(elements, scope, state); - var first = nodes.shift(); - - if (!t.isArrayExpression(first)) { - nodes.unshift(first); - first = t.arrayExpression([]); - } - - path.replaceWith(t.callExpression(t.memberExpression(first, t.identifier("concat")), nodes)); - }, - /*istanbul ignore next*/CallExpression: function CallExpression(path, state) { - /*istanbul ignore next*/var node = path.node; - /*istanbul ignore next*/var scope = path.scope; - - - var args = node.arguments; - if (!hasSpread(args)) return; - - var calleePath = path.get("callee"); - if (calleePath.isSuper()) return; - - var contextLiteral = t.identifier("undefined"); - - node.arguments = []; - - var nodes = /*istanbul ignore next*/void 0; - if (args.length === 1 && args[0].argument.name === "arguments") { - nodes = [args[0].argument]; - } else { - nodes = build(args, scope, state); - } - - var first = nodes.shift(); - if (nodes.length) { - node.arguments.push(t.callExpression(t.memberExpression(first, t.identifier("concat")), nodes)); - } else { - node.arguments.push(first); - } - - var callee = node.callee; - - if (calleePath.isMemberExpression()) { - var temp = scope.maybeGenerateMemoised(callee.object); - if (temp) { - callee.object = t.assignmentExpression("=", temp, callee.object); - contextLiteral = temp; - } else { - contextLiteral = callee.object; - } - t.appendToMemberExpression(callee, t.identifier("apply")); - } else { - node.callee = t.memberExpression(node.callee, t.identifier("apply")); - } - - if (t.isSuper(contextLiteral)) { - contextLiteral = t.thisExpression(); - } - - node.arguments.unshift(contextLiteral); - }, - /*istanbul ignore next*/NewExpression: function NewExpression(path, state) { - /*istanbul ignore next*/var node = path.node; - /*istanbul ignore next*/var scope = path.scope; - - var args = node.arguments; - if (!hasSpread(args)) return; - - var nodes = build(args, scope, state); - - var context = t.arrayExpression([t.nullLiteral()]); - - args = t.callExpression(t.memberExpression(context, t.identifier("concat")), nodes); - - path.replaceWith(t.newExpression(t.callExpression(t.memberExpression(t.memberExpression(t.memberExpression(t.identifier("Function"), t.identifier("prototype")), t.identifier("bind")), t.identifier("apply")), [node.callee, args]), [])); - } - } - }; -}; - -/*istanbul ignore next*/ -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/package.json deleted file mode 100644 index 7797def0e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-spread/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-spread@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-spread@>=6.3.13 <7.0.0", - "_id": "babel-plugin-transform-es2015-spread@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-spread", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-spread-6.8.0.tgz_1462232690055_0.03267335775308311" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-spread", - "raw": "babel-plugin-transform-es2015-spread@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.8.0.tgz", - "_shasum": "0217f737e3b821fa5a669f187c6ed59205f05e9c", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-spread@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-runtime": "^6.0.0" - }, - "description": "Compile ES2015 spread to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "0217f737e3b821fa5a669f187c6ed59205f05e9c", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.8.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-spread", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-spread" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/README.md deleted file mode 100644 index 61d17b58b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-es2015-sticky-regex - -Compile ES2015 sticky regex to an ES5 RegExp constructor - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-sticky-regex -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-sticky-regex"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-sticky-regex script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-sticky-regex"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/lib/index.js deleted file mode 100644 index c7d1d8364..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/lib/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - visitor: { /*istanbul ignore next*/ - RegExpLiteral: function RegExpLiteral(path) { - /*istanbul ignore next*/var node = path.node; - - if (!regex.is(node, "y")) return; - - path.replaceWith(t.newExpression(t.identifier("RegExp"), [t.stringLiteral(node.pattern), t.stringLiteral(node.flags)])); - } - } - }; -}; - -var /*istanbul ignore next*/_babelHelperRegex = require("babel-helper-regex"); - -/*istanbul ignore next*/ -var regex = _interopRequireWildcard(_babelHelperRegex); - -var /*istanbul ignore next*/_babelTypes = require("babel-types"); - -/*istanbul ignore next*/ -var t = _interopRequireWildcard(_babelTypes); - -/*istanbul ignore next*/ -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; } } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/package.json deleted file mode 100644 index a810d6283..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-sticky-regex/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-sticky-regex@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-sticky-regex@>=6.3.13 <7.0.0", - "_id": "babel-plugin-transform-es2015-sticky-regex@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-sticky-regex", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz_1462232690039_0.6653951292391866" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-sticky-regex", - "raw": "babel-plugin-transform-es2015-sticky-regex@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz", - "_shasum": "e73d300a440a35d5c64f5c2a344dc236e3df47be", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-sticky-regex@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-helper-regex": "^6.8.0", - "babel-runtime": "^6.0.0", - "babel-types": "^6.8.0" - }, - "description": "Compile ES2015 sticky regex to an ES5 RegExp constructor", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "e73d300a440a35d5c64f5c2a344dc236e3df47be", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.8.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-sticky-regex", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-sticky-regex" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/README.md deleted file mode 100644 index ef61c1b2a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# babel-plugin-transform-es2015-template-literals - -Compile ES2015 template literals to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-template-literals -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```js -// without options -{ - "plugins": ["transform-es2015-template-literals"] -} - -// with options -{ - "plugins": [ - ["transform-es2015-template-literals", { - "loose": true, - "spec": true - }] - ] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-template-literals script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-template-literals"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/lib/index.js deleted file mode 100644 index d38e1a5b6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/lib/index.js +++ /dev/null @@ -1,139 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function ( /*istanbul ignore next*/_ref) { - /*istanbul ignore next*/var t = _ref.types; - - function isString(node) { - return t.isLiteral(node) && typeof node.value === "string"; - } - - function buildBinaryExpression(left, right) { - return t.binaryExpression("+", left, right); - } - - return { - visitor: { /*istanbul ignore next*/ - TaggedTemplateExpression: function TaggedTemplateExpression(path, state) { - /*istanbul ignore next*/var node = path.node; - - var quasi = node.quasi; - var args = []; - - var strings = []; - var raw = []; - - for ( /*istanbul ignore next*/var _iterator = quasi.quasis, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - /*istanbul ignore next*/ - var _ref2; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref2 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref2 = _i.value; - } - - var elem = _ref2; - - strings.push(t.stringLiteral(elem.value.cooked)); - raw.push(t.stringLiteral(elem.value.raw)); - } - - strings = t.arrayExpression(strings); - raw = t.arrayExpression(raw); - - var templateName = "taggedTemplateLiteral"; - if (state.opts.loose) templateName += "Loose"; - - var templateObject = state.file.addTemplateObject(templateName, strings, raw); - args.push(templateObject); - - args = args.concat(quasi.expressions); - - path.replaceWith(t.callExpression(node.tag, args)); - }, - /*istanbul ignore next*/TemplateLiteral: function TemplateLiteral(path, state) { - var nodes = []; - - var expressions = path.get("expressions"); - - for ( /*istanbul ignore next*/var _iterator2 = path.node.quasis, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - /*istanbul ignore next*/ - var _ref3; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref3 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref3 = _i2.value; - } - - var elem = _ref3; - - nodes.push(t.stringLiteral(elem.value.cooked)); - - var expr = expressions.shift(); - if (expr) { - if (state.opts.spec && !expr.isBaseType("string") && !expr.isBaseType("number")) { - nodes.push(t.callExpression(t.identifier("String"), [expr.node])); - } else { - nodes.push(expr.node); - } - } - } - - // filter out empty string literals - nodes = nodes.filter(function (n) /*istanbul ignore next*/{ - return !t.isLiteral(n, { value: "" }); - }); - - // since `+` is left-to-right associative - // ensure the first node is a string if first/second isn't - if (!isString(nodes[0]) && !isString(nodes[1])) { - nodes.unshift(t.stringLiteral("")); - } - - if (nodes.length > 1) { - var root = buildBinaryExpression(nodes.shift(), nodes.shift()); - - for ( /*istanbul ignore next*/var _iterator3 = nodes, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - /*istanbul ignore next*/ - var _ref4; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref4 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref4 = _i3.value; - } - - var node = _ref4; - - root = buildBinaryExpression(root, node); - } - - path.replaceWith(root); - } else { - path.replaceWith(nodes[0]); - } - } - } - }; -}; - -/*istanbul ignore next*/ -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/package.json deleted file mode 100644 index f880a5baa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-template-literals/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-template-literals@^6.6.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-template-literals@>=6.6.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-template-literals@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-template-literals", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-template-literals-6.8.0.tgz_1462232690619_0.6739568517077714" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-template-literals", - "raw": "babel-plugin-transform-es2015-template-literals@^6.6.0", - "rawSpec": "^6.6.0", - "scope": null, - "spec": ">=6.6.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.8.0.tgz", - "_shasum": "86eb876d0a2c635da4ec048b4f7de9dfc897e66b", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-template-literals@^6.6.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-runtime": "^6.0.0" - }, - "description": "Compile ES2015 template literals to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "86eb876d0a2c635da4ec048b4f7de9dfc897e66b", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.8.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-template-literals", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-template-literals" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/README.md deleted file mode 100644 index 63fe8215e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# babel-plugin-transform-es2015-typeof-symbol - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-typeof-symbol -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-typeof-symbol"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-typeof-symbol script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-typeof-symbol"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/lib/index.js deleted file mode 100644 index 7db80e0b8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/lib/index.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _symbol = require("babel-runtime/core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -exports.default = function (_ref) { - var t = _ref.types; - - var IGNORE = (0, _symbol2.default)(); - - return { - visitor: { - Scope: function Scope(_ref2) { - var scope = _ref2.scope; - - if (!scope.getBinding("Symbol")) { - return; - } - - scope.rename("Symbol"); - }, - UnaryExpression: function UnaryExpression(path) { - var node = path.node; - var parent = path.parent; - - if (node[IGNORE]) return; - if (path.find(function (path) { - return path.node && !!path.node._generated; - })) return; - - if (path.parentPath.isBinaryExpression() && t.EQUALITY_BINARY_OPERATORS.indexOf(parent.operator) >= 0) { - var opposite = path.getOpposite(); - if (opposite.isLiteral() && opposite.node.value !== "symbol" && opposite.node.value !== "object") { - return; - } - } - - if (node.operator === "typeof") { - var call = t.callExpression(this.addHelper("typeof"), [node.argument]); - if (path.get("argument").isIdentifier()) { - var undefLiteral = t.stringLiteral("undefined"); - var unary = t.unaryExpression("typeof", node.argument); - unary[IGNORE] = true; - path.replaceWith(t.conditionalExpression(t.binaryExpression("===", unary, undefLiteral), undefLiteral, call)); - } else { - path.replaceWith(call); - } - } - } - } - }; -}; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/package.json deleted file mode 100644 index 33bb5b5ba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-typeof-symbol/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-typeof-symbol@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-typeof-symbol@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-es2015-typeof-symbol@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-typeof-symbol", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-typeof-symbol-6.18.0.tgz_1477343947534_0.06398424133658409" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-typeof-symbol", - "raw": "babel-plugin-transform-es2015-typeof-symbol@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.18.0.tgz", - "_shasum": "0b14c48629c90ff47a0650077f6aa699bee35798", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-typeof-symbol@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-runtime": "^6.0.0" - }, - "description": "This transformer wraps all typeof expressions with a method that replicates native behaviour. (ie. returning “symbol” for symbols)", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "0b14c48629c90ff47a0650077f6aa699bee35798", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-typeof-symbol", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-typeof-symbol" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/README.md deleted file mode 100644 index 99a694cfa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-es2015-unicode-regex - -Compile ES2015 unicode regex to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-es2015-unicode-regex -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-es2015-unicode-regex"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-es2015-unicode-regex script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-es2015-unicode-regex"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/lib/index.js deleted file mode 100644 index 2c427e9ff..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/lib/index.js +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return { - visitor: { - RegExpLiteral: function RegExpLiteral(_ref) { - var node = _ref.node; - - if (!regex.is(node, "u")) return; - node.pattern = (0, _regexpuCore2.default)(node.pattern, node.flags); - regex.pullFlag(node, "u"); - } - } - }; -}; - -var _regexpuCore = require("regexpu-core"); - -var _regexpuCore2 = _interopRequireDefault(_regexpuCore); - -var _babelHelperRegex = require("babel-helper-regex"); - -var regex = _interopRequireWildcard(_babelHelperRegex); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/package.json deleted file mode 100644 index 9a1a0b44d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-unicode-regex/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-es2015-unicode-regex@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-es2015-unicode-regex@>=6.3.13 <7.0.0", - "_id": "babel-plugin-transform-es2015-unicode-regex@6.11.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-es2015-unicode-regex", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz_1466986887898_0.1680449959821999" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-es2015-unicode-regex", - "raw": "babel-plugin-transform-es2015-unicode-regex@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz", - "_shasum": "6298ceabaad88d50a3f4f392d8de997260f6ef2c", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-es2015-unicode-regex@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "dependencies": { - "babel-helper-regex": "^6.8.0", - "babel-runtime": "^6.0.0", - "regexpu-core": "^2.0.0" - }, - "description": "Compile ES2015 Unicode regex to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "6298ceabaad88d50a3f4f392d8de997260f6ef2c", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.11.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-es2015-unicode-regex", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-unicode-regex" - }, - "scripts": {}, - "version": "6.11.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/README.md deleted file mode 100644 index 0851d321f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-exponentiation-operator - -Compile exponentiation operator to ES5 - -## Installation - -```sh -$ npm install babel-plugin-transform-exponentiation-operator -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-exponentiation-operator"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-exponentiation-operator script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-exponentiation-operator"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/lib/index.js deleted file mode 100644 index 891c1c463..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/lib/index.js +++ /dev/null @@ -1,28 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -exports.default = function ( /*istanbul ignore next*/_ref) { - /*istanbul ignore next*/var t = _ref.types; - - return { - inherits: require("babel-plugin-syntax-exponentiation-operator"), - - visitor: /*istanbul ignore next*/(0, _babelHelperBuilderBinaryAssignmentOperatorVisitor2.default)({ - operator: "**", - - /*istanbul ignore next*/build: function build(left, right) { - return t.callExpression(t.memberExpression(t.identifier("Math"), t.identifier("pow")), [left, right]); - } - }) - }; -}; - -var /*istanbul ignore next*/_babelHelperBuilderBinaryAssignmentOperatorVisitor = require("babel-helper-builder-binary-assignment-operator-visitor"); - -/*istanbul ignore next*/ -var _babelHelperBuilderBinaryAssignmentOperatorVisitor2 = _interopRequireDefault(_babelHelperBuilderBinaryAssignmentOperatorVisitor); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/package.json deleted file mode 100644 index e17736a0c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-exponentiation-operator/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-exponentiation-operator@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3" - ] - ], - "_from": "babel-plugin-transform-exponentiation-operator@>=6.3.13 <7.0.0", - "_id": "babel-plugin-transform-exponentiation-operator@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-exponentiation-operator", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-exponentiation-operator-6.8.0.tgz_1462232697206_0.572749242419377" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-exponentiation-operator", - "raw": "babel-plugin-transform-exponentiation-operator@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-stage-3" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.8.0.tgz", - "_shasum": "db25742e9339eade676ca9acec46f955599a68a4", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-exponentiation-operator@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3", - "dependencies": { - "babel-helper-builder-binary-assignment-operator-visitor": "^6.8.0", - "babel-plugin-syntax-exponentiation-operator": "^6.8.0", - "babel-runtime": "^6.0.0" - }, - "description": "Compile exponentiation operator to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "db25742e9339eade676ca9acec46f955599a68a4", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.8.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-exponentiation-operator", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-exponentiation-operator" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/README.md deleted file mode 100644 index 13a8489fb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-plugin-transform-export-extensions - -Compile export extensions to ES2015 - -## Installation - -```sh -$ npm install babel-plugin-transform-export-extensions -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-export-extensions"] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-export-extensions script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-export-extensions"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/lib/index.js deleted file mode 100644 index 59a5b1ce4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/lib/index.js +++ /dev/null @@ -1,49 +0,0 @@ -/*istanbul ignore next*/"use strict"; - -exports.__esModule = true; - -exports.default = function ( /*istanbul ignore next*/_ref) { - /*istanbul ignore next*/var t = _ref.types; - - function build(node, nodes, scope) { - var first = node.specifiers[0]; - if (!t.isExportNamespaceSpecifier(first) && !t.isExportDefaultSpecifier(first)) return; - - var specifier = node.specifiers.shift(); - var uid = scope.generateUidIdentifier(specifier.exported.name); - - var newSpecifier = /*istanbul ignore next*/void 0; - if (t.isExportNamespaceSpecifier(specifier)) { - newSpecifier = t.importNamespaceSpecifier(uid); - } else { - newSpecifier = t.importDefaultSpecifier(uid); - } - - nodes.push(t.importDeclaration([newSpecifier], node.source)); - nodes.push(t.exportNamedDeclaration(null, [t.exportSpecifier(uid, specifier.exported)])); - - build(node, nodes, scope); - } - - return { - inherits: require("babel-plugin-syntax-export-extensions"), - - visitor: { /*istanbul ignore next*/ - ExportNamedDeclaration: function ExportNamedDeclaration(path) { - /*istanbul ignore next*/var node = path.node; - /*istanbul ignore next*/var scope = path.scope; - - var nodes = []; - build(node, nodes, scope); - if (!nodes.length) return; - - if (node.specifiers.length >= 1) { - nodes.push(node); - } - path.replaceWithMultiple(nodes); - } - } - }; -}; - -/*istanbul ignore next*/module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/package.json deleted file mode 100644 index 538f46490..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-export-extensions/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-export-extensions@^6.3.13", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1" - ] - ], - "_from": "babel-plugin-transform-export-extensions@>=6.3.13 <7.0.0", - "_id": "babel-plugin-transform-export-extensions@6.8.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-export-extensions", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-export-extensions-6.8.0.tgz_1462232697622_0.5576040744781494" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-export-extensions", - "raw": "babel-plugin-transform-export-extensions@^6.3.13", - "rawSpec": "^6.3.13", - "scope": null, - "spec": ">=6.3.13 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-stage-1" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.8.0.tgz", - "_shasum": "fa80ff655b636549431bfd38f6b817bd82e47f5b", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-export-extensions@^6.3.13", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1", - "dependencies": { - "babel-plugin-syntax-export-extensions": "^6.8.0", - "babel-runtime": "^6.0.0" - }, - "description": "Compile export extensions to ES2015", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "fa80ff655b636549431bfd38f6b817bd82e47f5b", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.8.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-export-extensions", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-export-extensions" - }, - "scripts": {}, - "version": "6.8.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/.npmignore deleted file mode 100644 index 31852902b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -*.log -src -test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/README.md deleted file mode 100644 index 622cfa208..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/README.md +++ /dev/null @@ -1,63 +0,0 @@ -# babel-plugin-transform-object-rest-spread - -Compile object rest and spread to ES5 - -```js -// source -z = { x, ...y }; - -// compiled -_extends = Object.assign || function(target) { ... } -z = _extends({ x }, y); -``` - -## Installation - -```sh -$ npm install babel-plugin-transform-object-rest-spread -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "plugins": ["transform-object-rest-spread"] -} -``` - -## Options - -This plugin will use babel's `extends` helper, which will polyfill `Object.assign` by default. - -* `useBuiltIns` - Do not use Babel's helper's and just transform to use the built-in method (Disabled by default). - -```js -{ - "plugins": [ - ["transform-object-rest-spread", { "useBuiltIns": true }] - ] -} - -// source -z = { x, ...y }; -// compiled -z = Object.assign({ x }, y); -``` - -### Via CLI - -```sh -$ babel --plugins transform-object-rest-spread script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-object-rest-spread"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/lib/index.js deleted file mode 100644 index 94833c1af..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/lib/index.js +++ /dev/null @@ -1,301 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function (_ref) { - var t = _ref.types; - - function hasRestProperty(node) { - for (var _iterator = node.properties, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref2; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref2 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref2 = _i.value; - } - - var property = _ref2; - - if (t.isRestProperty(property)) { - return true; - } - } - - return false; - } - - function variableDeclarationHasRestProperty(node) { - for (var _iterator2 = node.declarations, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref3; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref3 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref3 = _i2.value; - } - - var declar = _ref3; - - if (t.isObjectPattern(declar.id)) { - return hasRestProperty(declar.id); - } - } - return false; - } - - function hasSpread(node) { - for (var _iterator3 = node.properties, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref4; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref4 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref4 = _i3.value; - } - - var prop = _ref4; - - if (t.isSpreadProperty(prop)) { - return true; - } - } - return false; - } - - function createObjectSpread(file, props, objRef) { - var restProperty = props.pop(); - - var keys = []; - for (var _iterator4 = props, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { - var _ref5; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref5 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref5 = _i4.value; - } - - var prop = _ref5; - - var key = prop.key; - if (t.isIdentifier(key) && !prop.computed) { - key = t.stringLiteral(prop.key.name); - } - keys.push(key); - } - - return [restProperty.argument, t.callExpression(file.addHelper("objectWithoutProperties"), [objRef, t.arrayExpression(keys)])]; - } - - function replaceRestProperty(paramsPath, i, numParams) { - if (paramsPath.isObjectPattern() && hasRestProperty(paramsPath.node)) { - var parentPath = paramsPath.parentPath; - var uid = parentPath.scope.generateUidIdentifier("ref"); - - var declar = t.variableDeclaration("let", [t.variableDeclarator(paramsPath.node, uid)]); - declar._blockHoist = i ? numParams - i : 1; - - parentPath.ensureBlock(); - parentPath.get("body").unshiftContainer("body", declar); - paramsPath.replaceWith(uid); - } - } - - return { - inherits: require("babel-plugin-syntax-object-rest-spread"), - - visitor: { - Function: function Function(path) { - var params = path.get("params"); - for (var i = 0; i < params.length; i++) { - replaceRestProperty(params[i], i, params.length); - } - }, - VariableDeclarator: function VariableDeclarator(path, file) { - if (!path.get("id").isObjectPattern()) { - return; - } - var kind = path.parentPath.node.kind; - var nodes = []; - - path.traverse({ - RestProperty: function RestProperty(path) { - var ref = this.originalPath.node.init; - - path.findParent(function (path) { - if (path.isObjectProperty()) { - ref = t.memberExpression(ref, t.identifier(path.node.key.name)); - } else if (path.isVariableDeclarator()) { - return true; - } - }); - - var _createObjectSpread = createObjectSpread(file, path.parentPath.node.properties, ref), - argument = _createObjectSpread[0], - callExpression = _createObjectSpread[1]; - - nodes.push(t.variableDeclarator(argument, callExpression)); - - if (path.parentPath.node.properties.length === 0) { - path.findParent(function (path) { - return path.isObjectProperty() || path.isVariableDeclaration(); - }).remove(); - } - } - }, { - originalPath: path - }); - - if (nodes.length > 0) { - path.parentPath.getSibling(path.parentPath.key + 1).insertBefore(t.variableDeclaration(kind, nodes)); - } - }, - ExportNamedDeclaration: function ExportNamedDeclaration(path) { - var declaration = path.get("declaration"); - if (!declaration.isVariableDeclaration()) return; - if (!variableDeclarationHasRestProperty(declaration.node)) return; - - var specifiers = []; - - for (var name in path.getOuterBindingIdentifiers(path)) { - var id = t.identifier(name); - specifiers.push(t.exportSpecifier(id, id)); - } - - path.replaceWith(declaration.node); - path.insertAfter(t.exportNamedDeclaration(null, specifiers)); - }, - CatchClause: function CatchClause(path) { - replaceRestProperty(path.get("param")); - }, - AssignmentExpression: function AssignmentExpression(path, file) { - var leftPath = path.get("left"); - if (leftPath.isObjectPattern() && hasRestProperty(leftPath.node)) { - var nodes = []; - - var ref = void 0; - if (path.isCompletionRecord() || path.parentPath.isExpressionStatement()) { - ref = path.scope.generateUidIdentifierBasedOnNode(path.node.right, "ref"); - - nodes.push(t.variableDeclaration("var", [t.variableDeclarator(ref, path.node.right)])); - } - - var _createObjectSpread2 = createObjectSpread(file, path.node.left.properties, ref), - argument = _createObjectSpread2[0], - callExpression = _createObjectSpread2[1]; - - var nodeWithoutSpread = t.clone(path.node); - nodeWithoutSpread.right = ref; - nodes.push(t.expressionStatement(nodeWithoutSpread)); - nodes.push(t.assignmentExpression("=", argument, callExpression)); - - if (ref) { - nodes.push(t.expressionStatement(ref)); - } - - path.replaceWithMultiple(nodes); - } - }, - ForXStatement: function ForXStatement(path) { - var node = path.node, - scope = path.scope; - - var left = node.left; - - if (t.isObjectPattern(left) && hasRestProperty(left)) { - var temp = scope.generateUidIdentifier("ref"); - - node.left = t.variableDeclaration("var", [t.variableDeclarator(temp)]); - - path.ensureBlock(); - - node.body.body.unshift(t.variableDeclaration("var", [t.variableDeclarator(left, temp)])); - - return; - } - - if (!t.isVariableDeclaration(left)) return; - - var pattern = left.declarations[0].id; - if (!t.isObjectPattern(pattern)) return; - - var key = scope.generateUidIdentifier("ref"); - node.left = t.variableDeclaration(left.kind, [t.variableDeclarator(key, null)]); - - path.ensureBlock(); - - node.body.body.unshift(t.variableDeclaration(node.left.kind, [t.variableDeclarator(pattern, key)])); - }, - ObjectExpression: function ObjectExpression(path, file) { - if (!hasSpread(path.node)) return; - - var useBuiltIns = file.opts.useBuiltIns || false; - if (typeof useBuiltIns !== "boolean") { - throw new Error("transform-object-rest-spread currently only accepts a boolean option for useBuiltIns (defaults to false)"); - } - - var args = []; - var props = []; - - function push() { - if (!props.length) return; - args.push(t.objectExpression(props)); - props = []; - } - - for (var _iterator5 = path.node.properties, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) { - var _ref6; - - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref6 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref6 = _i5.value; - } - - var prop = _ref6; - - if (t.isSpreadProperty(prop)) { - push(); - args.push(prop.argument); - } else { - props.push(prop); - } - } - - push(); - - if (!t.isObjectExpression(args[0])) { - args.unshift(t.objectExpression([])); - } - - var helper = useBuiltIns ? t.memberExpression(t.identifier("Object"), t.identifier("assign")) : file.addHelper("extends"); - - path.replaceWith(t.callExpression(helper, args)); - } - } - }; -}; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/package.json deleted file mode 100644 index 72b029836..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-object-rest-spread/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-object-rest-spread@^6.16.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3" - ] - ], - "_from": "babel-plugin-transform-object-rest-spread@>=6.16.0 <7.0.0", - "_id": "babel-plugin-transform-object-rest-spread@6.19.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-object-rest-spread", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-object-rest-spread-6.19.0.tgz_1479312927668_0.7797193515580148" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-object-rest-spread", - "raw": "babel-plugin-transform-object-rest-spread@^6.16.0", - "rawSpec": "^6.16.0", - "scope": null, - "spec": ">=6.16.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-stage-3" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.19.0.tgz", - "_shasum": "f6ac428ee3cb4c6aa00943ed1422ce813603b34c", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-object-rest-spread@^6.16.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3", - "dependencies": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.0.0" - }, - "description": "Compile object rest and spread to ES5", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "f6ac428ee3cb4c6aa00943ed1422ce813603b34c", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.19.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-object-rest-spread", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-object-rest-spread" - }, - "scripts": {}, - "version": "6.19.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/.npmignore deleted file mode 100644 index e216ae5e1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -/node_modules -/test diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/.test/async.es6.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/.test/async.es6.js deleted file mode 100644 index 587e9b5f0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/.test/async.es6.js +++ /dev/null @@ -1,493 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * https://raw.github.com/facebook/regenerator/master/LICENSE file. An - * additional grant of patent rights can be found in the PATENTS file in - * the same directory. - */ - -var assert = require("assert"); - -describe("async functions and await expressions", function() { - Promise = require("promise"); - - describe("regeneratorRuntime", function() { - it("should be defined globally", function() { - var global = Function("return this")(); - assert.ok("regeneratorRuntime" in global); - assert.strictEqual(global.regeneratorRuntime, regeneratorRuntime); - }); - - it("should have a .wrap method", function() { - assert.strictEqual(typeof regeneratorRuntime.wrap, "function"); - }); - }); - - describe("Promise", function() { - it("should be defined globally", function() { - var global = Function("return this")(); - assert.ok("Promise" in global); - assert.strictEqual(global.Promise, Promise); - }); - - it("should be a function", function() { - assert.strictEqual(typeof Promise, "function"); - }); - }); - - describe("no-await async function", function() { - it("should return a Promise", function(done) { - var called = false; - - async function noAwait(value) { - called = true; - return value; - } - - var promise = noAwait("asdf"); - assert.strictEqual(called, true); - - promise.then(function(value) { - assert.strictEqual(called, true); - assert.strictEqual(value, "asdf"); - done(); - }).catch(done); - }); - }); - - describe("one-await async function", function() { - it("should finish asynchronously", function(done) { - var flag1 = false; - var flag2 = false; - - async function oneAwait(value) { - flag1 = true; - var result = await value; - flag2 = true; - return result; - } - - var promise = oneAwait("asdf"); - assert.strictEqual(flag1, true); - assert.strictEqual(flag2, false); - - promise.then(function(value) { - assert.strictEqual(flag2, true); - assert.strictEqual(value, "asdf"); - done(); - }).catch(done); - }); - }); - - describe("nested async function calls", function() { - it("should evaluate in the right order", function(done) { - var markers = []; - - async function innerMost(marker) { - markers.push(marker); - return await marker; - } - - async function inner(marker) { - markers.push(marker); - - assert.strictEqual( - await innerMost(marker + 1), - marker + 1 - ); - - markers.push(marker + 2); - - assert.strictEqual( - await innerMost(marker + 3), - marker + 3 - ); - - markers.push(marker + 4); - } - - async function outer() { - markers.push(0); - await inner(1); - markers.push(6); - await inner(7); - markers.push(12); - } - - outer().then(function() { - var expected = []; - for (var i = 0; i <= 12; ++i) - expected.push(i); - assert.deepEqual(markers, expected); - done(); - }).catch(done); - }); - }); - - describe("dependent promises", function() { - it("should be awaitable out of order", function(done) { - async function outer(value) { - var resolved = false; - var p1 = new Promise(function(resolve) { - setTimeout(function() { - resolve(value + 1); - resolved = true; - }, 0); - }); - - assert.strictEqual(resolved, false); - - var v2 = await p1.then(function(value) { - return value + 1; - }); - - assert.strictEqual(resolved, true); - - var v1 = await p1; - - return [v1, v2]; - } - - outer(1).then(function(pair) { - assert.deepEqual(pair, [2, 3]); - done(); - }).catch(done); - }); - }); - - describe("rejected promises", function() { - it("should cause await expressions to throw", function(done) { - var error = new Error("rejected"); - - async function f(arg) { - try { - return await arg; - } catch (e) { - assert.strictEqual(e, error); - return "did throw"; - } - } - - Promise.all([ - f(Promise.reject(error)), - f(Promise.resolve("did not throw")) - ]).then(function(results) { - assert.deepEqual(results, [ - "did throw", - "did not throw" - ]); - done(); - }).catch(done); - }); - - it("should be returned by exceptional async functions", function(done) { - var error = new Error("rejected"); - - async function e(arg) { - if (arg) { - throw arg; - } - return "did not throw"; - } - - async function f(arg) { - return await e(arg); - } - - async function g(arg) { - return await f(arg); - } - - async function h(arg) { - return await Promise.all([ - g(arg), - Promise.resolve("dummy") - ]); - } - - Promise.all([ - h(error).then(function() { - done(new Error("should not have resolved")); - }, function(e) { - assert.strictEqual(e, error); - return "ok1"; - }), - h(null).then(function(result) { - assert.deepEqual(result, [ - "did not throw", - "dummy" - ]); - return "ok2"; - }) - ]).then(function(results) { - assert.deepEqual(results, ["ok1", "ok2"]); - done(); - }).catch(done); - }); - - it("should propagate failure when returned", function() { - var rejection = new Error("rejection"); - - async function f() { - return new Promise(function(resolve, reject) { - reject(rejection); - }); - } - - return f().then(function(result) { - assert.ok(false, "should have been rejected"); - }, function(error) { - assert.strictEqual(error, rejection); - }); - }); - }); - - describe("async function expressions", function() { - it("should be allowed", function(done) { - (async function(arg) { - return await arg; - })(Promise.resolve(1234)).then(function(value) { - assert.strictEqual(value, 1234); - done(); - }).catch(done); - }); - }); -}); - -describe("async generator functions", function() { - it("should return a working AsyncIterator", function() { - var markers = []; - - async function *gen(arg) { - markers.push(0); - var sent = yield arg; - markers.push(1); - var result = await sent; - markers.push(2); - assert.strictEqual(await (yield "second"), "sent after second"); - markers.push(3); - return result; - } - - var iter = gen("initial argument"); - assert.deepEqual(markers, []); - - var firstPromise = iter.next(); - assert.deepEqual(markers, [0]); - - return firstPromise.then(function(firstResult) { - assert.deepEqual(firstResult, { - value: "initial argument", - done: false - }); - - assert.deepEqual(markers, [0]); - - return iter.next(new Promise(function(resolve) { - setTimeout(resolve, 100); - }).then(function() { - assert.deepEqual(markers, [0, 1]); - return "will become final result"; - })); - - }).then(function(secondResult) { - assert.deepEqual(secondResult, { - value: "second", - done: false - }); - - assert.deepEqual(markers, [0, 1, 2]); - - return iter.next("sent after second"); - - }).then(function(finalResult) { - assert.deepEqual(markers, [0, 1, 2, 3]); - assert.deepEqual(finalResult, { - value: "will become final result", - done: true - }); - }); - }); - - it("should keep results in order", function() { - async function *range(limit) { - var before = []; - var after = []; - for (var i = 0; i < limit; ++i) { - before.push(i); - yield i; - after.push(i); - } - assert.deepEqual(before, after); - return before; - } - - var limit = 10; - var iter = range(limit); - var promises = []; - var results = []; - - for (var i = 0; i < limit; ++i) { - var promise = iter.next(); - promises.push(promise); - - promise.then(function(result) { - assert.strictEqual(result.done, false); - results.push(result); - }); - } - - assert.deepEqual(results, []); - - return Promise.all(promises).then(function(promiseResults) { - assert.deepEqual(results, promiseResults); - - return iter.next(); - - }).then(function(finalResult) { - assert.deepEqual(results.map(function(result) { - return result.value; - }), finalResult.value); - - assert.strictEqual(finalResult.done, true); - }); - }); - - it("should be able to handle many awaits", function() { - var awaitCount = 0; - - function countAwait(i) { - return Promise.resolve(i).then(function() { - ++awaitCount; - }); - } - - async function *gen(limit) { - await countAwait(0); - yield 1; - await countAwait(2); - await countAwait(3); - yield 4; - await countAwait(5); - await countAwait(6); - await countAwait(7); - yield 8; - for (var i = 0; i < limit; ++i) { - await countAwait(i); - } - return "done"; - } - - var iter = gen(100); - - return iter.next().then(function(result) { - assert.strictEqual(awaitCount, 1); - - assert.deepEqual(result, { - value: 1, - done: false - }); - - return iter.next(); - - }).then(function(result) { - assert.strictEqual(awaitCount, 3); - - assert.deepEqual(result, { - value: 4, - done: false - }); - - return iter.next(); - - }).then(function(result) { - assert.strictEqual(awaitCount, 6); - - assert.deepEqual(result, { - value: 8, - done: false - }); - - return iter.next(); - - }).then(function(result) { - assert.strictEqual(awaitCount, 6 + 100); - - assert.deepEqual(result, { - value: "done", - done: true - }); - - return iter.next(); - - }).then(function(result) { - assert.deepEqual(result, { - value: void 0, - done: true - }); - }); - }); - - it("should not propagate exceptions between iterations", function() { - async function *gen() { - yield 1; - yield 2; - } - - var iter = gen(); - - return iter.next().then(function(result) { - assert.deepEqual(result, { - value: 1, - done: false - }); - - return iter.throw(new Error("thrown from first yield")); - - }).then(function() { - throw new Error("should have thrown"); - - }, function(error) { - assert.strictEqual(error.message, "thrown from first yield"); - return iter.next(); - - }).then(function(result) { - assert.deepEqual(result, { - value: void 0, - done: true - }); - }); - }); - - it("should allow yielding a rejected Promise", function() { - var yielded = new Error("yielded rejection"); - var returned = new Error("returned rejection"); - - async function *gen() { - assert.strictEqual(yield Promise.reject(yielded), "first sent"); - assert.strictEqual(yield "middle", "second sent"); - return Promise.reject(returned); - } - - var iter = gen(); - - return iter.next().then(function(result) { - assert.ok(false, "should have yielded a rejected Promise"); - }, function(error) { - assert.strictEqual(error, yielded); - return iter.next("first sent"); - }).then(function(result) { - assert.deepEqual(result, { - value: "middle", - done: false - }); - return iter.next("second sent"); - }).then(function(result) { - assert.ok(false, "should have returned a rejected Promise"); - }, function(error) { - assert.strictEqual(error, returned); - }); - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/.test/tests.es6.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/.test/tests.es6.js deleted file mode 100644 index 3df59e76e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/.test/tests.es6.js +++ /dev/null @@ -1,2560 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * https://raw.github.com/facebook/regenerator/master/LICENSE file. An - * additional grant of patent rights can be found in the PATENTS file in - * the same directory. - */ - -var assert = require("assert"); -var runningInTranslation = /\.wrap\(/.test(function*(){}); -var iteratorSymbol = typeof Symbol === "function" - && Symbol.iterator - || "@@iterator"; - -function check(g, yields, returnValue) { - for (var i = 0; i < yields.length; ++i) { - var info = g.next(i); - assert.deepEqual(info.value, yields[i]); - assert.strictEqual(info.done, false); - } - - assert.deepEqual( - i > 0 ? g.next(i) : g.next(), - { value: returnValue, done: true } - ); -} - -// A version of `throw` whose behavior can't be statically analyzed. -// Useful for testing dynamic exception dispatching. -function raise(argument) { - throw argument; -} - -function assertAlreadyFinished(generator) { - assert.deepEqual(generator.next(), { - value: void 0, - done: true - }); -} - -describe("regeneratorRuntime", function() { - it("should be defined globally", function() { - var global = Function("return this")(); - assert.ok("regeneratorRuntime" in global); - assert.strictEqual(global.regeneratorRuntime, regeneratorRuntime); - }); - - it("should have a .wrap method", function() { - assert.strictEqual(typeof regeneratorRuntime.wrap, "function"); - }); - - it("should have a .mark method", function() { - assert.strictEqual(typeof regeneratorRuntime.mark, "function"); - }); - - it("should be the object name returned by util.runtimeProperty", function() { - assert.strictEqual( - require("../lib/util").runtimeProperty("foo").object.name, - "regeneratorRuntime" - ); - }); -}); - -(runningInTranslation ? describe : xdescribe)("@@iterator", function() { - it("is defined on Generator.prototype and returns this", function() { - function *gen(){} - var iterator = gen(); - assert.ok(!iterator.hasOwnProperty(iteratorSymbol)); - assert.ok(!Object.getPrototypeOf(iterator).hasOwnProperty(iteratorSymbol)); - assert.ok(Object.getPrototypeOf( - Object.getPrototypeOf(iterator) - ).hasOwnProperty(iteratorSymbol)); - assert.strictEqual(iterator[iteratorSymbol](), iterator); - }); -}); - -describe("simple argument yielder", function() { - it("should yield only its first argument", function() { - function *gen(x) { - yield x; - } - - check(gen("oyez"), ["oyez"]); - check(gen("foo", "bar"), ["foo"]); - }); - - it("should support multiple yields in expression", function() { - function *gen() { return (yield 0) + (yield 0); } - var itr = gen(); - itr.next(); - itr.next(1); - assert.equal(itr.next(2).value, 3); - }); -}); - -function *range(n) { - for (var i = 0; i < n; ++i) { - yield i; - } -} - -describe("range generator", function() { - it("should yield the empty range", function() { - check(range(0), []); - }) - - it("should yield the range 0..n-1", function() { - check(range(5), [0, 1, 2, 3, 4]); - }); -}); - -describe("collatz generator", function() { - function *gen(n) { - var count = 0; - - yield n; - - while (n !== 1) { - count += 1; - - if (n % 2) { - yield n = n * 3 + 1; - } else { - yield n >>= 1; - } - } - - return count; - } - - function collatz(n) { - var result = [n]; - - while (n !== 1) { - if (n % 2) { - n *= 3; - n += 1; - } else { - n >>= 1; - } - - result.push(n); - } - - return result; - } - - var seven = collatz(7); - var fiftyTwo = seven.slice(seven.indexOf(52)); - var eightyTwo = collatz(82); - - it("seven", function() { - check(gen(7), seven, 16); - }); - - it("fifty two", function() { - check(gen(52), fiftyTwo, 11); - }); - - it("eighty two", function() { - check(gen(82), eightyTwo, 110); - }); -}); - -describe("throw", function() { - (runningInTranslation ? it : xit)("should complete generator", function() { - function *gen(x) { - throw 1; - } - - var u = gen(); - - try { - u.next(); - } catch (err) { - assert.strictEqual(err, 1); - } - - assertAlreadyFinished(u); - }); -}); - -describe("try-catch generator", function() { - function *usingThrow(x) { - yield 0; - try { - yield 1; - if (x % 2 === 0) - throw 2; - yield x; - } catch (x) { - yield x; - } - yield 3; - } - - function *usingRaise(x) { - yield 0; - try { - yield 1; - if (x % 2 === 0) - raise(2); - yield x; - } catch (x) { - yield x; - } - yield 3; - } - - it("should catch static exceptions properly", function() { - check(usingThrow(4), [0, 1, 2, 3]); - check(usingThrow(5), [0, 1, 5, 3]); - }); - - it("should catch dynamic exceptions properly", function() { - check(usingRaise(4), [0, 1, 2, 3]); - check(usingRaise(5), [0, 1, 5, 3]); - }); -}); - -describe("nested generators in try-catch", function() { - function *gen() { - try { - nonExistent; - } catch (e) { - yield function* () { - yield e; - } - } - } - - it('should get a reference to the caught error', function () { - var genFun2 = gen().next().value; - assert.ok(regeneratorRuntime.isGeneratorFunction(genFun2)); - var gen2 = genFun2(); - var res = gen2.next(); - assert.ok(res.value instanceof ReferenceError); - // Note that we don't do strict equality over the message because it varies - // across browsers (if we ever want to run tests in browsers). - assert.ok(res.value.message.match(/nonExistent/)); - }); - -}); - -describe("try-finally generator", function() { - function *usingThrow(condition) { - yield 0; - try { - yield 1; - throw 2; - yield 3; - } finally { - if (condition) { - yield 4; - return 5; - } - yield 6; - return 7; - } - } - - function *usingRaise(condition) { - yield 0; - try { - yield 1; - raise(2); - yield 3; - } finally { - if (condition) { - yield 4; - return 5; - } - yield 6; - return 7; - } - } - - function *usingAbrupt(abruptType, finallyAbruptType) { - yield 0; - for (;;) { - try { - yield 1; - if (abruptType === "return") { - return 2; - } else if (abruptType === "break") { - break; - } else if (abruptType === "continue") { - abruptType = "return"; - continue; - } - } - finally { - yield 3; - if (finallyAbruptType === "return") { - return 4; - } else if (finallyAbruptType === "break") { - break; - } else if (finallyAbruptType === "continue") { - finallyAbruptType = null; - continue; - } - } - } - return 5; - } - - it("should honor return", function() { - check(usingAbrupt("return", null), [0, 1, 3], 2); - }); - - it("should honor break", function() { - check(usingAbrupt("break", null), [0, 1, 3], 5); - }); - - it("should honor continue", function() { - check(usingAbrupt("continue", null), [0, 1, 3, 1, 3], 2); - }); - - it("should override abrupt with return", function() { - check(usingAbrupt("return", "return"), [0, 1, 3], 4); - check(usingAbrupt("break", "return"), [0, 1, 3], 4); - check(usingAbrupt("continue", "return"), [0, 1, 3], 4); - }); - - it("should override abrupt with break", function() { - check(usingAbrupt("return", "break"), [0, 1, 3], 5); - check(usingAbrupt("break", "break"), [0, 1, 3], 5); - check(usingAbrupt("continue", "break"), [0, 1, 3], 5); - }); - - it("should override abrupt with continue", function() { - check(usingAbrupt("return", "continue"), [0, 1, 3, 1, 3], 2); - check(usingAbrupt("break", "continue"), [0, 1, 3, 1, 3], 5); - check(usingAbrupt("continue", "continue"), [0, 1, 3, 1, 3], 2); - }); - - it("should execute finally blocks statically", function() { - check(usingThrow(true), [0, 1, 4], 5); - check(usingThrow(false), [0, 1, 6], 7); - }); - - it("should execute finally blocks dynamically", function() { - check(usingRaise(true), [0, 1, 4], 5); - check(usingRaise(false), [0, 1, 6], 7); - }); - - it("should execute finally blocks before throwing", function() { - var uncaughtError = new Error("uncaught"); - - function *uncaught(condition) { - try { - yield 0; - if (condition) { - yield 1; - raise(uncaughtError); - } - yield 2; - } finally { - yield 3; - } - yield 4; - } - - check(uncaught(false), [0, 2, 3, 4]); - - var u = uncaught(true); - - assert.deepEqual(u.next(), { value: 0, done: false }); - assert.deepEqual(u.next(), { value: 1, done: false }); - assert.deepEqual(u.next(), { value: 3, done: false }); - - try { - u.next(); - assert.ok(false, "should have thrown an exception"); - } catch (err) { - assert.strictEqual(err, uncaughtError); - } - }); - - it("should throw correct error when finally contains catch", function() { - var right = new Error("right"); - var wrong = new Error("wrong"); - - function *gen() { - try { - yield 0; - raise(right); - } finally { - yield 1; - try { - raise(wrong); - } catch (err) { - assert.strictEqual(err, wrong); - yield 2; - } - } - } - - var g = gen(); - - assert.deepEqual(g.next(), { - value: 0, - done: false - }); - - assert.deepEqual(g.next(), { - value: 1, - done: false - }); - - assert.deepEqual(g.next(), { - value: 2, - done: false - }); - - try { - g.next(); - assert.ok(false, "should have thrown an exception"); - } catch (err) { - assert.strictEqual(err, right); - } - }); - - it("should run finally after break within try", function() { - function *gen() { - try { - yield 0; - while (true) { - yield 1; - break; - } - } finally { - yield 2; - } - yield 3; - } - - check(gen(), [0, 1, 2, 3]); - }); -}); - -describe("try-catch-finally generator", function() { - function *usingThrow() { - yield 0; - try { - try { - yield 1; - throw 2; - yield 3; - } catch (x) { - throw yield x; - } finally { - yield 5; - } - } catch (thrown) { - yield thrown; - } - yield 6; - } - - function *usingRaise() { - yield 0; - try { - try { - yield 1; - raise(2); - yield 3; - } catch (x) { - throw yield x; - } finally { - yield 5; - } - } catch (thrown) { - yield thrown; - } - yield 6; - } - - it("should statically catch and then finalize", function() { - check(usingThrow(), [0, 1, 2, 5, 3, 6]); - }); - - it("should dynamically catch and then finalize", function() { - check(usingRaise(), [0, 1, 2, 5, 3, 6]); - }); - - it("should execute catch and finally blocks at most once", function() { - var error = new Error(); - - function *gen() { - try { - switch (1) { - case 1: - yield "a"; - break; - default: - break; - } - throw error; - } catch (e) { - assert.strictEqual(e, error); - yield "b"; - do { - do { - yield "c"; - break; - } while (false); - yield "d"; - break; - } while (false); - yield "e"; - } finally { - yield "f"; - } - } - - check(gen(), ["a", "b", "c", "d", "e", "f"]); - }); - - it("should handle backwards jumps in labeled loops", function() { - function *gen() { - var firstTime = true; - outer: - while (true) { - yield 0; - try { - while (true) { - yield 1; - if (firstTime) { - firstTime = false; - yield 2; - continue outer; - } else { - yield 3; - break; - } - } - yield 4; - break; - } finally { - yield 5; - } - yield 6; - } - yield 7; - } - - check(gen(), [0, 1, 2, 5, 0, 1, 3, 4, 5, 7]); - }); - - it("should handle loop continue statements properly", function() { - var error = new Error("thrown"); - var markers = []; - - function *gen() { - var c = 2; - while (c > 0) { - try { - markers.push("try"); - yield c; - } catch (e) { - assert.strictEqual(e, error); - markers.push("catch"); - continue; - } finally { - markers.push("finally"); - } - markers.push("decrement"); - --c; - } - } - - var g = gen(); - - assert.deepEqual(g.next(), { value: 2, done: false }); - assert.deepEqual(g.throw(error), { value: 2, done: false }); - assert.deepEqual(g.next(), { value: 1, done: false }); - assert.deepEqual(g.next(), { value: void 0, done: true }); - - assert.deepEqual(markers, [ - "try", - "catch", - "finally", - "try", - "finally", - "decrement", - "try", - "finally", - "decrement" - ]); - }); -}); - -describe("dynamic exception", function() { - function *gen(x, fname) { - try { - return fns[fname](x); - } catch (thrown) { - yield thrown; - } - } - - var fns = { - f: function(x) { - throw x; - }, - - g: function(x) { - return x; - } - }; - - it("should be dispatched correctly", function() { - check(gen("asdf", "f"), ["asdf"]); - check(gen("asdf", "g"), [], "asdf"); - }); -}); - -describe("nested finally blocks", function() { - function *usingThrow() { - try { - try { - try { - throw "thrown"; - } finally { - yield 1; - } - } catch (thrown) { - yield thrown; - } finally { - yield 2; - } - } finally { - yield 3; - } - } - - function *usingRaise() { - try { - try { - try { - raise("thrown"); - } finally { - yield 1; - } - } catch (thrown) { - yield thrown; - } finally { - yield 2; - } - } finally { - yield 3; - } - } - - it("should statically execute in order", function() { - check(usingThrow(), [1, "thrown", 2, 3]); - }); - - it("should dynamically execute in order", function() { - check(usingRaise(), [1, "thrown", 2, 3]); - }); -}); - -describe("for-in loop generator", function() { - it("should handle the simple case", function() { - function *gen() { - var count = 0; - var obj = {foo: 1, bar: 2}; - for (var key in obj) { - assert(obj.hasOwnProperty(key), key + " must be own property"); - yield [key, obj[key]]; - count += 1; - } - return count; - } - - check(gen(), [["foo", 1], ["bar", 2]], 2); - }); - - it("should handle break in loop", function() { - function *gen(obj) { - var count = 0; - for (var key in (yield "why not", obj)) { - if (obj.hasOwnProperty(key)) { - if (key === "skip") { - break; - } - count += 1; - yield [key, obj[key]]; - } - } - return count; - } - - check( - gen({ a: 1, b: 2, skip: 3, c: 4 }), - ["why not", ["a", 1], ["b", 2]], - 2 - ); - }); - - it("should handle property deletion in loop", function() { - function *gen() { - var count = 0; - var obj = {foo: 1, bar: 2}; - for (var key in obj) { - assert(obj.hasOwnProperty(key), key + " must be own property"); - yield [key, obj[key]]; - delete obj.bar; - count += 1; - } - return count; - } - - check(gen(), [["foo", 1]], 1); - }); - - it("should loop over inherited properties", function() { - function *gen() { - var count = 0; - function Foo() { - this.baz = 1 - } - Foo.prototype.bar = 2; - - var foo = new Foo(); - for (var key in foo) { - yield [key, foo[key]]; - count += 1; - } - return count; - } - - check(gen(), [["baz", 1], ["bar", 2]], 2); - }); - - it("should handle risky object expressions", function() { - function a(sent) { - assert.strictEqual(sent, 1); - a.called = true; - } - - function b(sent) { - assert.strictEqual(sent, 2); - b.called = true; - return { callee: b }; - } - - function *gen() { - assert.ok(!a.called); - assert.ok(!b.called); - for (var key in a(yield 0), b(yield 1)) { - assert.ok(a.called); - assert.ok(b.called); - assert.strictEqual(yield key, 3); - } - - for (var key in a(1), { foo: "foo", bar: "bar" }) { - yield key; - } - } - - check(gen(), [0, 1, "callee", "foo", "bar"]); - }); - - it("should allow non-Identifier left-hand expressions", function() { - var obj = {}; - var baz = { a: 1, b: 2, c: 3 }; - var markers = []; - - function foo() { - markers.push("called foo"); - return obj; - } - - function *gen() { - for (foo().bar in baz) { - markers.push(obj.bar); - yield obj.bar; - } - } - - check(gen(), ["a", "b", "c"]); - - assert.deepEqual(markers, [ - "called foo", - "a", - "called foo", - "b", - "called foo", - "c" - ]); - }); -}); - -describe("yield chain", function() { - function *gen(n) { - return yield yield yield yield n; - } - - it("should have correct associativity", function() { - check(gen(5), [5, 1, 2, 3], 4); - check(gen("asdf"), ["asdf", 1, 2, 3], 4); - }); -}); - -describe("object literal generator", function() { - function *gen(a, b) { - yield { - a: a - (yield a), - b: yield b - }; - } - - it("should yield the correct object", function() { - check(gen(1, 2), [1, 2, { a: 0, b: 2 }]); - check(gen(4, 2), [4, 2, { a: 3, b: 2 }]); - }); -}); - -describe("switch statement generator", function() { - function *gen(a) { - switch (yield a) { - case (yield "x") - a: - return "first case"; - case (yield "y") - a: - return "second case"; - } - } - - it("should jump to the correct cases", function() { - check(gen(1), [1, "x"], "first case"); - check(gen(2), [2, "x", "y"], "second case"); - }); -}); - -describe("infinite sequence generator", function() { - function *gen(start, step) { - step = step || 1; - while (true) { - yield start; - start += step; - } - } - - function *limit(g, stop) { - while (true) { - var info = g.next(); - if (info.done) { - return; - } else if (info.value < stop) { - yield info.value; - } else { - return; - } - } - } - - it("should generate a lot of plausible values", function() { - var g = gen(10, 2); - - assert.deepEqual(g.next(), { value: 10, done: false }); - assert.deepEqual(g.next(), { value: 12, done: false }); - assert.deepEqual(g.next(), { value: 14, done: false }); - assert.deepEqual(g.next(), { value: 16, done: false }); - - var sum = 10 + 12 + 14 + 16; - - for (var n = 0; n < 1000; ++n) { - var info = g.next(); - sum += info.value; - assert.strictEqual(info.done, false); - } - - assert.strictEqual(sum, 1017052); - }); - - it("should allow limiting", function() { - check(limit(gen(10, 3), 20), [10, 13, 16, 19]); - }); -}); - -describe("generator function expression", function() { - it("should behave just like a declared generator", function() { - check(function *(x, y) { - yield x; - yield y; - yield x + y; - return x * y; - }(3, 7), [3, 7, 10], 21); - }) -}); - -describe("generator reentry attempt", function() { - function *gen(x) { - try { - (yield x).next(x); - } catch (err) { - yield err; - } - return x + 1; - } - - it("should complain with a TypeError", function() { - var g = gen(3); - assert.deepEqual(g.next(), { value: 3, done: false }); - var complaint = g.next(g); // Sending the generator to itself. - assert.ok(complaint.value instanceof Error); - assert.strictEqual( - complaint.value.message, - "Generator is already running" - ); - assert.deepEqual(g.next(), { value: 4, done: true }); - }); -}); - -describe("completed generator", function() { - function *gen() { - return "ALL DONE"; - } - - (runningInTranslation ? it : xit) - ("should refuse to resume", function() { - var g = gen(); - - assert.deepEqual(g.next(), { - value: "ALL DONE", done: true - }); - - assertAlreadyFinished(g); - }); -}); - -describe("delegated yield", function() { - it("should delegate correctly", function() { - function *gen(condition) { - yield 0; - if (condition) { - yield 1; - yield* gen(false); - yield 2; - } - yield 3; - } - - check(gen(true), [0, 1, 0, 3, 2, 3]); - check(gen(false), [0, 3]); - }); - - it("should cope with empty delegatees", function() { - function *gen(condition) { - if (condition) { - yield 0; - yield* gen(false); - yield 1; - } - } - - check(gen(true), [0, 1]); - check(gen(false), []); - }); - - it("should support deeper nesting", function() { - function *outer(n) { - yield n; - yield* middle(n - 1, inner(n + 10)); - yield n + 1; - } - - function *middle(n, plusTen) { - yield n; - yield* inner(n - 1); - yield n + 1; - yield* plusTen; - } - - function *inner(n) { - yield n; - } - - check(outer(5), [5, 4, 3, 5, 15, 6]); - }); - - it("should pass sent values through", function() { - function *outer(n) { - yield* inner(n << 1); - yield "zxcv"; - } - - function *inner(n) { - return yield yield yield n; - } - - var g = outer(3); - assert.deepEqual(g.next(), { value: 6, done: false }); - assert.deepEqual(g.next(1), { value: 1, done: false }); - assert.deepEqual(g.next(2), { value: 2, done: false }); - assert.deepEqual(g.next(4), { value: "zxcv", done: false }); - assert.deepEqual(g.next(5), { value: void 0, done: true }); - }); - - it("should be governed by enclosing try statements", function() { - var error = new Error("thrown"); - - function *outer(n) { - try { - yield 0; - yield* inner(n); - yield 1; - } catch (err) { - yield err.message; - } - yield 4; - } - - function *inner(n) { - while (n --> 0) { - try { - if (n === 3) { - raise(error); - } - } finally { - yield n; - } - } - } - - check(outer(3), [0, 2, 1, 0, 1, 4]); - check(outer(5), [0, 4, 3, "thrown", 4]); - }); - - it("should dispatch .thrown exceptions correctly", function() { - var count = 0; - - function *gen() { - yield* inner(); - try { - yield* inner(); - } catch (err) { - // pass - } - return yield* inner(); - } - - function *inner() { - return yield count++; - } - - var g = gen(); - - assert.deepEqual(g.next(), { - value: 0, - done: false - }); - - assert.deepEqual(g.next(), { - value: 1, - done: false - }); - - assert.deepEqual(g.throw(new Error("lol")), { - value: 2, - done: false, - }); - - assert.deepEqual(g.next("sent"), { - value: "sent", - done: true - }); - }); - - it("should call .return methods of delegate iterators", function() { - var throwee = new Error("argument to gen.throw"); - var thrownFromThrow = new Error("thrown from throw method"); - var thrownFromReturn = new Error("thrown from return method"); - - function *gen(delegate) { - try { - return yield* delegate; - } catch (err) { - return err; - } - } - - function check(throwMethod, returnMethod) { - var throwCalled = false; - var returnCalled = false; - var count = 0; - var iterator = { - next: function() { - return { value: count++, done: false }; - } - }; - - iterator[iteratorSymbol] = function() { - return this; - }; - - if (throwMethod) { - iterator["throw"] = function() { - throwCalled = true; - return throwMethod.apply(this, arguments); - }; - } - - if (returnMethod) { - iterator["return"] = function() { - returnCalled = true; - return returnMethod.apply(this, arguments); - }; - } - - var g = gen(iterator); - - assert.deepEqual(g.next(), { value: 0, done: false }); - assert.deepEqual(g.next(), { value: 1, done: false }); - assert.deepEqual(g.next(), { value: 2, done: false }); - assert.deepEqual(g.next(), { value: 3, done: false }); - - assert.strictEqual(throwCalled, false); - assert.strictEqual(returnCalled, false); - - var result = {}; - - result.throwResult = g.throw(throwee); - result.throwCalled = throwCalled; - result.returnCalled = returnCalled; - - return result; - } - - var checkResult = check(undefined, function() { - throw thrownFromReturn; - }); - if (runningInTranslation) { - // BUG: Node v0.11 and v0.12 neglect to call .return here. - assert.strictEqual(checkResult.throwResult.value, thrownFromReturn); - } else { - // This is the TypeError that results from trying to call the - // undefined .throw method of the iterator. - assert.ok(checkResult.throwResult.value instanceof TypeError); - } - assert.strictEqual(checkResult.throwResult.done, true); - assert.strictEqual(checkResult.throwCalled, false); - // BUG: Node v0.11 and v0.12 neglect to call .return here. - assert.strictEqual(checkResult.returnCalled, runningInTranslation); - - checkResult = check(undefined, function() { - return { value: "from return", done: true }; - }); - assert.notStrictEqual(checkResult.throwResult.value, throwee); - // This is the TypeError that results from trying to call the - // undefined .throw method of the iterator. - assert.ok(checkResult.throwResult.value instanceof TypeError); - assert.strictEqual(checkResult.throwResult.done, true); - assert.strictEqual(checkResult.throwCalled, false); - // BUG: Node v0.11 and v0.12 neglect to call .return here. - assert.strictEqual(checkResult.returnCalled, runningInTranslation); - - var checkResult = check(function(thrown) { - return { value: "from throw", done: true }; - }, function() { - throw thrownFromReturn; - }); - assert.strictEqual(checkResult.throwResult.value, "from throw"); - assert.strictEqual(checkResult.throwResult.done, true); - assert.strictEqual(checkResult.throwCalled, true); - assert.strictEqual(checkResult.returnCalled, false); - - var checkResult = check(function(thrown) { - throw thrownFromThrow; - }, function() { - throw thrownFromReturn; - }); - assert.strictEqual(checkResult.throwResult.value, thrownFromThrow); - assert.strictEqual(checkResult.throwResult.done, true); - assert.strictEqual(checkResult.throwCalled, true); - assert.strictEqual(checkResult.returnCalled, false); - - var checkResult = check(undefined, undefined); - assert.notStrictEqual(checkResult.throwResult.value, throwee); - // This is the TypeError that results from trying to call the - // undefined .throw method of the iterator. - assert.ok(checkResult.throwResult.value instanceof TypeError); - assert.strictEqual(checkResult.throwResult.done, true); - assert.strictEqual(checkResult.throwCalled, false); - assert.strictEqual(checkResult.returnCalled, false); - }); - - it("should not be required to have a .return method", function() { - function *gen(delegate) { - return yield* delegate; - } - - var inner = range(5); - var iterator = { next: inner.next.bind(inner) }; - iterator[iteratorSymbol] = function() { - return this; - }; - - var g = gen(iterator); - assert.deepEqual(g.next(), { value: 0, done: false }); - assert.deepEqual(g.next(), { value: 1, done: false }); - assert.deepEqual(g.next(), { value: 2, done: false }); - - if (typeof g.return === "function") { - assert.deepEqual(g.return(-1), { value: -1, done: true }); - assert.deepEqual(g.next(), { value: void 0, done: true }); - } - }); - - (runningInTranslation ? it : xit) - ("should support any iterable argument", function() { - function *gen() { - yield 0; - yield* [ - yield "one", - yield "two", - yield "three" - ]; - yield 5; - } - - check(gen(), [0, "one", "two", "three", 2, 3, 4, 5]); - - function *string() { - return yield* "asdf"; - } - - check(string(), ["a", "s", "d", "f"]); - }); - - it("should evaluate to the return value of the delegate", function() { - function *inner() { - yield 1; - return 2; - } - - function *outer(delegate) { - return yield* delegate; - } - - check(outer(inner()), [1], 2); - - var arrayDelegate = [3, 4]; - if (!runningInTranslation) { - // Node v0.11 doesn't know how to turn arrays into iterators over - // their elements without a little help. - arrayDelegate = regeneratorRuntime.values(arrayDelegate); - } - check(outer(arrayDelegate), [3, 4], void 0); // See issue #143. - - if (!runningInTranslation) { - return; - } - - check(outer({ - next: function() { - return { value: "oyez", done: true }; - } - }), [], "oyez"); - }); - - it("should work as a subexpression", function() { - function *inner(arg) { - return arg; - } - - function *gen(delegate) { - // Unfortunately these parentheses appear to be necessary. - return 1 + (yield* delegate); - } - - check(gen(inner(2)), [], 3); - check(gen(inner(3)), [], 4); - - if (!runningInTranslation) { - return; - } - - check(gen({ - next: function() { - return { value: "foo", done: true }; - } - }), [], "1foo"); - }); -}); - -describe("function declaration hoisting", function() { - it("should work even if the declarations are out of order", function() { - function *gen(n) { - yield increment(n); - - function increment(x) { - return x + 1; - } - - if (n % 2) { - yield halve(decrement(n)); - - function halve(x) { - return x >> 1; - } - - function decrement(x) { - return x - 1; - } - } else { - // The behavior of function declarations nested inside conditional - // blocks is notoriously underspecified, and in V8 it appears the - // halve function is still defined when we take this branch, so - // "undefine" it for consistency with regenerator semantics. - halve = void 0; - } - - yield typeof halve; - - yield increment(increment(n)); - } - - check(gen(3), [4, 1, "function", 5]); - check(gen(4), [5, "undefined", 6]); - }); - - it("should work for nested generator function declarations", function() { - function *outer(n) { - yield 0; - assert.ok(regeneratorRuntime.isGeneratorFunction(inner)); - return yield* inner(n); - - // Note that this function declaration comes after everything else - // in the outer function, but needs to be fully available above. - function *inner(n) { - yield n - 1; - yield n; - return yield n + 1; - } - } - - check(outer(2), [0, 1, 2, 3], 4); - }); - - it("should not interfere with function rebinding", function() { - function rebindTo(value) { - var oldValue = toBeRebound; - toBeRebound = value; - return oldValue; - } - - function *toBeRebound() { - var originalValue = toBeRebound; - yield toBeRebound; - assert.strictEqual(rebindTo(42), originalValue); - yield toBeRebound; - assert.strictEqual(rebindTo("asdf"), 42); - yield toBeRebound; - } - - var original = toBeRebound; - check(toBeRebound(), [original, 42, "asdf"]); - - function attemptToRebind(value) { - var oldValue = safe; - safe = value; - return oldValue; - } - - var safe = function *safe() { - var originalValue = safe; - yield safe; - assert.strictEqual(attemptToRebind(42), originalValue); - yield safe; - assert.strictEqual(attemptToRebind("asdf"), 42); - yield safe; - } - - original = safe; - check(safe(), [safe, safe, safe]); - }); -}); - -describe("the arguments object", function() { - it("should work in simple variadic functions", function() { - function *sum() { - var result = 0; - - for (var i = 0; i < arguments.length; ++i) { - yield result += arguments[i]; - } - - return result; - } - - check(sum(1, 2, 3), [1, 3, 6], 6); - check(sum(9, -5, 3, 0, 2), [9, 4, 7, 7, 9], 9); - }); - - it("should alias function parameters", function() { - function *gen(x, y) { - yield x; - ++arguments[0]; - yield x; - - yield y; - --arguments[1]; - yield y; - - var temp = y; - y = x; - x = temp; - - yield x; - yield y; - } - - check(gen(3, 7), [3, 4, 7, 6, 6, 4]); - check(gen(10, -5), [10, 11, -5, -6, -6, 11]); - }); - - it("should be shadowable by explicit declarations", function() { - function *asParameter(x, arguments) { - arguments = arguments + 1; - yield x + arguments; - } - - check(asParameter(4, 5), [10]); - check(asParameter("asdf", "zxcv"), ["asdfzxcv1"]); - - function *asVariable(x) { - // TODO References to arguments before the variable declaration - // seem to see the object instead of the undefined value. - var arguments = x + 1; - yield arguments; - } - - check(asVariable(4), [5]); - check(asVariable("asdf"), ["asdf1"]); - }); - - it("should not get confused by properties", function() { - function *gen(args) { - var obj = { arguments: args }; - yield obj.arguments; - obj.arguments = "oyez"; - yield obj; - } - - check(gen(42), [42, { arguments: "oyez" }]); - }); - - it("supports .callee", function() { - function *gen(doYield) { - yield 1; - if (doYield) { - yield 2; - } else { - yield 3 - yield* arguments.callee(true); - yield 4 - } - yield 5; - } - - check(gen(false), [1, 3, 1, 2, 5, 4, 5]); - }); -}); - -describe("catch parameter shadowing", function() { - it("should leave outer variables unmodified", function() { - function *gen(x) { - var y = x + 1; - try { - throw x + 2; - } catch (x) { - yield x; - x += 1; - yield x; - } - yield x; - try { - throw x + 3; - } catch (y) { - yield y; - y *= 2; - yield y; - } - yield y; - } - - check(gen(1), [3, 4, 1, 4, 8, 2]); - check(gen(2), [4, 5, 2, 5, 10, 3]); - }); - - it("should not replace variables defined in inner scopes", function() { - function *gen(x) { - try { - throw x; - } catch (x) { - yield x; - - yield (function(x) { - return x += 1; - }(x + 1)); - - yield (function() { - var x = arguments[0]; - return x * 2; - }(x + 2)); - - yield (function() { - function notCalled(x) { - throw x; - } - - x >>= 1; - return x; - }()); - - yield x -= 1; - } - - yield x; - } - - check(gen(10), [10, 12, 24, 5, 4, 10]); - check(gen(11), [11, 13, 26, 5, 4, 11]); - }); - - it("should allow nested catch parameters of the same name", function() { - function *gen() { - try { - raise("e1"); - } catch (e) { - yield e; - try { - raise("e2"); - } catch (e) { - yield e; - } - yield e; - } - } - - check(gen(), ["e1", "e2", "e1"]); - }); - - it("should not interfere with non-referential identifiers", function() { - function *gen() { - try { - yield 1; - raise(new Error("oyez")); - yield 2; - } catch (e) { - yield 3; - e.e = "e.e"; - e[e.message] = "e.oyez"; - return { - e: e, - identity: function(x) { - var e = x; - return e; - } - }; - } - yield 4; - } - - var g = gen(); - assert.deepEqual(g.next(), { value: 1, done: false }); - assert.deepEqual(g.next(), { value: 3, done: false }); - - var info = g.next(); - assert.strictEqual(info.done, true); - assert.strictEqual(info.value.e.message, "oyez"); - assert.strictEqual(info.value.e.e, "e.e"); - assert.strictEqual(info.value.e.oyez, "e.oyez"); - assert.strictEqual(info.value.identity("same"), "same"); - }); -}); - -describe("empty while loops", function() { - it("should be preserved in generated code", function() { - function *gen(x) { - while (x) { - // empty while loop - } - - do { - // empty do-while loop - } while (x); - - return gen.toString(); - } - - var info = gen(false).next(); - assert.strictEqual(info.done, true); - assert.ok(/empty while loop/.test(info.value)); - assert.ok(/empty do-while loop/.test(info.value)); - }); -}); - -describe("object literals with multiple yields", function() { - it("should receive different sent values", function() { - function *gen(fn) { - return { - a: yield "a", - b: yield "b", - c: fn(yield "c", yield "d"), - d: [yield "e", yield "f"] - }; - } - - check(gen(function sum(x, y) { - return x + y; - }), ["a", "b", "c", "d", "e", "f"], { - a: 1, - b: 2, - c: 3 + 4, - d: [5, 6] - }); - }); -}); - -describe("generator .throw method", function() { - (runningInTranslation ? it : xit)("should complete generator", function() { - function *gen(x) { - yield 2; - throw 1; - } - - var u = gen(); - - u.next(); - - try { - u.throw(2); - } catch (err) { - assert.strictEqual(err, 2); - } - - assertAlreadyFinished(u); - }); - - it("should work after the final call to .next", function() { - function *gen() { - yield 1; - } - - var g = gen(); - assert.deepEqual(g.next(), { value: 1, done: false }); - - var exception = new Error("unhandled exception"); - try { - g.throw(exception); - assert.ok(false, "should have thrown an exception"); - } catch (err) { - assert.strictEqual(err, exception); - } - }); - - it("should immediately complete a new-born generator", function() { - var began = false; - - function *gen() { - began = true; - yield 1; - } - - var g = gen(); - var exception = new Error("unhandled exception"); - try { - g.throw(exception); - assert.ok(false, "should have thrown an exception"); - } catch (err) { - assert.strictEqual(err, exception); - assert.strictEqual(began, false); - } - }); - - it("should not propagate errors handled inside a delegate", function() { - function *outer() { - try { - yield* inner(); - } catch (err) { - return -1; - } - return 1; - } - - function *inner() { - try { - yield void 0; - } catch (e) { - return; - } - } - - var g = outer(); - g.next(); - assert.equal(g.throw(new Error('foo')).value, 1); - }); - - it("should propagate errors unhandled inside a delegate", function() { - function *outer() { - try { - yield* inner(); - } catch (err) { - return -1; - } - return 1; - } - - function *inner() { - yield void 0; - } - - var g = outer(); - g.next(); - assert.equal(g.throw(new Error('foo')).value, -1); - }); -}); - -describe("unqualified function calls", function() { - it("should have a global `this` object", function() { - function getThis() { - return this; - } - - // This is almost certainly the global object, but there's a chance it - // might be null or undefined (in strict mode). - var unqualifiedThis = getThis(); - - function *invoke() { - // It seems like a bug in the ES6 spec that we have to yield an - // argument instead of just calling (yield)(). - return (yield "dummy")(); - } - - var g = invoke(); - var info = g.next(); - - assert.deepEqual(info, { value: "dummy", done: false }); - - info = g.next(getThis); - - // Avoid using assert.strictEqual when the arguments might equal the - // global object, since JSON.stringify chokes on circular structures. - assert.ok(info.value === unqualifiedThis); - - assert.strictEqual(info.done, true); - }); -}); - -describe("yield* expression results", function () { - it("have correct values", function () { - function* foo() { - yield 0; - return yield* bar(); - } - - function* bar() { - yield 1; - return 2; - } - - check(foo(), [0, 1], 2); - }); - - it("can be used in complex expressions", function () { - function pumpNumber(gen) { - var n = 0; - - while (true) { - var res = n > 0 ? gen.next(n) : gen.next(); - n = res.value; - if (res.done) { - return n; - } - } - } - - function* foo() { - return (yield* bar()) + (yield* bar()); - } - - function* bar() { - return (yield 2) + (yield 3); - } - - assert.strictEqual(pumpNumber(bar()), 5); - assert.strictEqual(pumpNumber(foo()), 10); - }); -}); - -describe("isGeneratorFunction", function() { - it("should work for function declarations", function() { - // Do the assertions up here to make sure the generator function is - // marked at the beginning of the block the function is declared in. - assert.strictEqual( - regeneratorRuntime.isGeneratorFunction(genFun), - true - ); - - assert.strictEqual( - regeneratorRuntime.isGeneratorFunction(normalFun), - false - ); - - function normalFun() { - return 0; - } - - function *genFun() { - yield 0; - } - }); - - it("should work for function expressions", function() { - assert.strictEqual( - regeneratorRuntime.isGeneratorFunction(function *genFun() { - yield 0; - }), - true - ); - - assert.strictEqual( - regeneratorRuntime.isGeneratorFunction(function normalFun() { - return 0; - }), - false - ); - }); -}); - -describe("new expressions", function() { - it("should be able to contain yield sub-expressions", function() { - function A(first, second) { - this.first = first; - this.second = second; - } - - function *gen() { - return yield new (yield 0)(yield 1, yield 2); - } - - var g = gen(); - - assert.deepEqual(g.next(), { value: 0, done: false }); - assert.deepEqual(g.next(A), { value: 1, done: false }); - assert.deepEqual(g.next("asdf"), { value: 2, done: false }); - - var info = g.next("zxcv"); - assert.strictEqual(info.done, false); - assert.ok(info.value instanceof A); - assert.strictEqual(info.value.first, "asdf"); - assert.strictEqual(info.value.second, "zxcv"); - - assert.deepEqual(g.next("qwer"), { value: "qwer", done: true }); - }); -}); - -describe("block binding", function() { - it("should translate block binding correctly", function() { - "use strict"; - - function *gen() { - var a$0 = 0, a$1 = 1; - - let a = 3; - - { - let a = 1; - yield a + a$0; - } - - { - let a = 2; - yield a - 1 + a$1; - } - - yield a; - } - - var g = gen(); - - assert.deepEqual(g.next(), { value: 1, done: false }); - assert.deepEqual(g.next(), { value: 2, done: false }); - assert.deepEqual(g.next(), { value: 3, done: false }); - assert.deepEqual(g.next(), { value: void 0, done: true }); - }); - - it("should translate block binding with iife correctly", function() { - "use strict"; - - function *gen() { - let arr = []; - - for (let x = 0; x < 3; x++) { - let y = x; - arr.push(function() { return y; }); - } - - { - let x; - while( x = arr.pop() ) { - yield x; - } - } - } - - var g = gen(); - - assert.equal(g.next().value(), 2); - assert.equal(g.next().value(), 1); - assert.equal(g.next().value(), 0); - assert.deepEqual(g.next(), { value: void 0, done: true }); - }); -}); - -describe("newborn generators", function() { - it("should be able to yield* non-newborn generators", function() { - function *inner() { - return [yield 1, yield 2]; - } - - function *outer(delegate) { - return yield* delegate; - } - - var n = inner(); - - assert.deepEqual(n.next(), { - value: 1, - done: false - }); - - var g = outer(n); - - // I would really like to be able to pass 3 to g.next here, but V8 - // ignores values sent to newborn generators, and SpiderMonkey throws - // a TypeError. - assert.deepEqual(g.next(), { - value: 2, - done: false - }); - - assert.deepEqual(g.next(4), { - value: [void 0, 4], - done: true - }); - }); - - it("should support the ignore-initial-yield wrapper idiom", function() { - var markers = []; - - function *inner() { - markers.push(0); - var sent1 = yield 1; - markers.push(2); - var sent2 = yield 2; - markers.push(3); - return [sent1, sent2]; - } - - function wrapper(delegate) { - var gen = (function*() { - // This yield is the "initial yield" whose argument we ignore. - var sent = yield "ignored", info; - - markers.push(1); - - while (!(info = delegate.next(sent)).done) { - sent = yield info.value; - } - - markers.push(4); - - return info.value; - })(); - - // Ensure that gen is not newborn and that the next invocation of - // gen.next(value) can send value to the initial yield expression. - gen.next(); - - return gen; - } - - var n = inner(); - - assert.deepEqual(n.next(), { - value: 1, - done: false - }); - - var g = wrapper(n); - - // Unlike in the previous spec, it's fine to pass 3 to g.next here, - // because g is not newborn, because g.next was already called once - // before g was returned from the wrapper function. - assert.deepEqual(g.next(3), { - value: 2, - done: false - }); - - assert.deepEqual(g.next(4), { - value: [3, 4], - done: true - }); - - // Ensure we encountered the marker points in the expected order. - assert.deepEqual(markers, [0, 1, 2, 3, 4]); - }); - - it("should allow chaining newborn and non-newborn generators", function() { - function *range(n) { - for (var i = 0; i < n; ++i) { - yield i; - } - } - - function *chain(a, b) { - yield* a; - yield* b; - } - - check(chain(range(3), range(5)), [0, 1, 2, 0, 1, 2, 3, 4]); - - function *y3(x) { - return yield yield yield x; - } - - function *y5(x) { - return yield yield yield yield yield x; - } - - check( - chain(y3("foo"), y5("bar")), - ["foo", 1, 2, "bar", 4, 5, 6, 7] - ); - - var g3 = y3("three"); - assert.deepEqual(g3.next(), { - value: "three", - done: false - }); - - var g5 = y5("five"); - assert.deepEqual(g5.next(), { - value: "five", - done: false - }); - - var undef; // A little easier to read than void 0. - check(chain(g3, g5), [undef, 1, undef, 3, 4, 5]); - }); -}); - -describe("labeled break and continue statements", function() { - it("should be able to exit multiple try statements", function() { - var e1 = "first"; - var e2 = "second"; - var e3 = "third"; - var e4 = "fourth"; - - function *gen(n, which) { - try { - yield 0; - raise(e1); - - } finally { - yield 1; - - loop: - for (var i = 0; i < n; ++i) { - yield i; - - try { - raise(e2); - } finally { - yield 2; - - try { - raise(e3); - } finally { - yield 3; - - try { - raise(e4); - } finally { - yield 4; - - if (which === "break") { - yield "breaking"; - break loop; - } - - if (which === "continue") { - yield "continuing"; - continue loop; - } - - yield 5; - } - } - } - } - - yield 6; - } - } - - try { - check(gen(1, "break"), [ - 0, 1, 0, 2, 3, 4, "breaking", 6 - ]); - assert.ok(false, "should have thrown an exception"); - } catch (err) { - assert.strictEqual(err, e1); - } - - try { - check(gen(3, "continue"), [ - 0, 1, 0, 2, 3, 4, "continuing", - 1, 2, 3, 4, "continuing", - 2, 2, 3, 4, "continuing", - 6 // Loop finished naturally. - ]); - assert.ok(false, "should have thrown an exception"); - } catch (err) { - assert.strictEqual(err, e1); - } - - try { - check(gen(3, "neither"), [ - 0, 1, 0, 2, 3, 4, 5 - ]); - assert.ok(false, "should have thrown an exception"); - } catch (err) { - assert.strictEqual(err, e4); - } - }); - - it("should allow breaking from any labeled statement", function() { - function* gen(limit) { - yield 0; - - for (var i = 0; i < limit; ++i) { - yield 1; - - label1: { - yield 2; - break label1; - yield 3; - } - - label2: - if (limit === 3) label3: { - yield 4; - if (i === 0) break label2; - yield 5; - if (i === 1) break label3; - label4: yield 6; - // This should break from the for-loop. - if (i === 2) xxx: break; - yield 7; - } - - // This should be a no-op. - xxx: break xxx; - - yield 8 - } - - yield 9; - } - - check(gen(0), [0, 9]); - check(gen(1), [0, 1, 2, 8, 9]); - check(gen(2), [0, 1, 2, 8, 1, 2, 8, 9]); - check(gen(3), [0, 1, 2, 4, 8, 1, 2, 4, 5, 8, 1, 2, 4, 5, 6, 9]); - }); -}); - -describe("for loop with var decl and no update expression", function() { - // https://github.com/facebook/regenerator/issues/103 - function *range() { - for (var i = 0; false; ) { - } - } - - it("should compile and run", function() { - check(range(), []); - }); -}); - -describe("generator function prototype", function() { - function getProto(obj) { - return Object.getPrototypeOf - ? Object.getPrototypeOf(obj) - : obj.__proto__; - } - - it("should follow the expected object model", function() { - var GeneratorFunctionPrototype = getProto(f); - var GeneratorFunction = GeneratorFunctionPrototype.constructor; - - assert.strictEqual(GeneratorFunction.name, 'GeneratorFunction'); - assert.strictEqual(GeneratorFunction.prototype, - GeneratorFunctionPrototype); - assert.strictEqual(GeneratorFunctionPrototype.prototype.constructor, - GeneratorFunctionPrototype); - assert.strictEqual(GeneratorFunctionPrototype.prototype, - getProto(f.prototype)); - assert.strictEqual(getProto(GeneratorFunctionPrototype), - Function.prototype); - - if (typeof process === "undefined" || - process.version.slice(1, 3) === "0.") { - // Node version strings start with 0. - assert.strictEqual(GeneratorFunctionPrototype.name, - "GeneratorFunctionPrototype"); - } else if (process.version.slice(1, 3) === "1.") { - // iojs version strings start with 1., and iojs gets this .name - // property wrong. TODO report this? - assert.strictEqual(GeneratorFunctionPrototype.name, ""); - } - - assert.strictEqual(typeof f2, "function"); - assert.strictEqual(f2.constructor, GeneratorFunction); - assert.ok(f2 instanceof GeneratorFunction); - assert.strictEqual(f2.name, "f2"); - - var g = f(); - assert.ok(g instanceof f); - assert.strictEqual(getProto(g), f.prototype); - - assert.deepEqual([], Object.getOwnPropertyNames(f.prototype)); - // assert.deepEqual([], Object.getOwnPropertyNames(g)); - - f.prototype.x = 42; - - var g2 = f(); - assert.strictEqual(g2.x, 42); - - var g3 = new f(); - assert.strictEqual(g3.x, 42); - - function* f2() { - yield 1; - } - - assert.strictEqual(getProto(f), getProto(f2)); - assert.strictEqual(f.hasOwnProperty('constructor'), false); - assert.strictEqual(getProto(f).constructor.name, 'GeneratorFunction'); - - // Intentionally at the end to test hoisting. - function* f() { - yield this; - } - - function* f() { - yield 1; - } - - var f2 = f; - f = 42; - var g = f2(); - - assert.deepEqual(g.next(), { value: 1, done: false }); - assert.deepEqual(g.next(), { value: void 0, done: true }); - assert.ok(g instanceof f2); - }); -}); - -describe("for-of loops", function() { - (runningInTranslation ? it : xit) - ("should work for Arrays", function() { - var sum = 0; - for (var x of [1, 2].concat(3)) { - sum += x; - } - assert.strictEqual(sum, 6); - }); - - it("should work for generators", function() { - var value, values = []; - for (value of range(3)) - values.push(value); - assert.deepEqual(values, [0, 1, 2]); - }); - - it("should work inside of generators", function() { - function *yieldPermutations(list) { - if (list.length < 2) { - yield list; - return 1; - } - - var count = 0; - var first = list.slice(0, 1); - var genRest = yieldPermutations(list.slice(1)); - - for (var perm of genRest) { - for (var i = 0; i < list.length; ++i) { - var prefix = perm.slice(0, i); - var suffix = perm.slice(i); - yield prefix.concat(first, suffix); - } - - count += i; - } - - return count; - } - - var count = 0; - for (var perm of yieldPermutations([])) { - assert.deepEqual(perm, []); - ++count; - } - assert.strictEqual(count, 1); - - check(yieldPermutations([1]), [[1]], 1); - - check(yieldPermutations([2, 1]), [ - [2, 1], - [1, 2] - ], 2); - - check(yieldPermutations([1,3,2]), [ - [1, 3, 2], - [3, 1, 2], - [3, 2, 1], - [1, 2, 3], - [2, 1, 3], - [2, 3, 1] - ], 6); - }); -}); - -describe("generator return method", function() { - if (!runningInTranslation) { - // The return method has not been specified or implemented natively, - // yet, so these tests need only pass in translation. - return; - } - - it("should work with newborn generators", function() { - function *gen() { - yield 0; - } - - var g = gen(); - - assert.deepEqual(g.return("argument"), { - value: "argument", - done: true - }); - - assertAlreadyFinished(g); - }); - - it("should behave as if generator actually returned", function() { - var executedFinally = false; - - function *gen() { - try { - yield 0; - } catch (err) { - assert.ok(false, "should not have executed the catch handler"); - } finally { - executedFinally = true; - } - } - - var g = gen(); - assert.deepEqual(g.next(), { value: 0, done: false }); - - assert.deepEqual(g.return("argument"), { - value: "argument", - done: true - }); - - assert.strictEqual(executedFinally, true); - assertAlreadyFinished(g); - }); - - it("should return both delegate and delegator", function() { - var checkpoints = []; - - function* callee(errorToThrow) { - try { - yield 1; - yield 2; - } finally { - checkpoints.push("callee finally"); - if (errorToThrow) { - throw errorToThrow; - } - } - } - - function* caller(errorToThrow) { - try { - yield 0; - yield* callee(errorToThrow); - yield 3; - } finally { - checkpoints.push("caller finally"); - } - } - - var g1 = caller(); - - assert.deepEqual(g1.next(), { value: 0, done: false }); - assert.deepEqual(g1.next(), { value: 1, done: false }); - assert.deepEqual(g1.return(-1), { value: -1, done: true }); - assert.deepEqual(checkpoints, [ - "callee finally", - "caller finally" - ]); - - var error = new Error("thrown from callee"); - var g2 = caller(error); - - assert.deepEqual(g2.next(), { value: 0, done: false }); - assert.deepEqual(g2.next(), { value: 1, done: false }); - - try { - g2.return(-1); - assert.ok(false, "should have thrown an exception"); - } catch (thrown) { - assert.strictEqual(thrown, error); - } - - assert.deepEqual(checkpoints, [ - "callee finally", - "caller finally", - "callee finally", - "caller finally" - ]); - }); -}); - -describe("expressions containing yield subexpressions", function() { - it("should evaluate all subexpressions before yielding", function() { - function *gen(x) { - return x * (yield (function(y) { x = y })); - } - - var g = gen(2); - var result = g.next(); - assert.strictEqual(result.done, false); - - result.value(5); - - assert.deepEqual(g.next(5), { - value: 10, - done: true - }); - }); - - it("should work even with getter member expressions", function() { - function *gen() { - return a.b + (yield "asdf"); - } - - var a = {}; - var b = 0; - - Object.defineProperty(a, "b", { - get: function() { - return ++b; - } - }); - - var g = gen(); - - assert.strictEqual(a.b, 1); - - assert.deepEqual(g.next(), { - value: "asdf", - done: false - }); - - assert.strictEqual(a.b, 3); - - assert.deepEqual(g.next(2), { - value: 4, - done: true - }); - }); - - it("should evaluate all array elements before yielding", function() { - function *gen() { - return [a, yield "asdf", a]; - } - - var a = 1; - var g = gen(); - - assert.deepEqual(g.next(), { - value: "asdf", - done: false - }); - - a = 3; - - assert.deepEqual(g.next(2), { - value: [1, 2, 3], - done: true - }); - }); - - it("should handle callee member expressions correctly", function() { - function *gen() { - a = a.slice(0).concat(yield "asdf"); - return a; - } - - var a = []; - var g = gen(); - - assert.deepEqual(g.next(), { - value: "asdf", - done: false - }); - - a.push(1); - - assert.deepEqual(g.next(2), { - value: [2], - done: true - }); - }); - - it("should handle implicit stringification correctly", function() { - function *gen() { - return a + (yield "asdf"); - } - - var a = [1, 2]; - var g = gen(); - - assert.deepEqual(g.next(), { - value: "asdf", - done: false - }); - - a = [4,5]; - - assert.deepEqual(g.next(",3"), { - value: "1,2,3", - done: true - }); - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/LICENSE b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/LICENSE deleted file mode 100644 index 187bfe283..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/LICENSE +++ /dev/null @@ -1,14 +0,0 @@ -BSD License - -For "regenerator" software - -Copyright (c) 2014, Facebook, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/PATENTS b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/PATENTS deleted file mode 100644 index a2bd67d0d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/PATENTS +++ /dev/null @@ -1,33 +0,0 @@ -Additional Grant of Patent Rights Version 2 - -"Software" means the Regenerator software distributed by Facebook, Inc. - -Facebook, Inc. ("Facebook") hereby grants to each recipient of the Software -("you") a perpetual, worldwide, royalty-free, non-exclusive, irrevocable -(subject to the termination provision below) license under any Necessary -Claims, to make, have made, use, sell, offer to sell, import, and otherwise -transfer the Software. For avoidance of doubt, no license is granted under -Facebook's rights in any patent claims that are infringed by (i) modifications -to the Software made by you or any third party or (ii) the Software in -combination with any software or other technology. - -The license granted hereunder will terminate, automatically and without notice, -if you (or any of your subsidiaries, corporate affiliates or agents) initiate -directly or indirectly, or take a direct financial interest in, any Patent -Assertion: (i) against Facebook or any of its subsidiaries or corporate -affiliates, (ii) against any party if such Patent Assertion arises in whole or -in part from any software, technology, product or service of Facebook or any of -its subsidiaries or corporate affiliates, or (iii) against any party relating -to the Software. Notwithstanding the foregoing, if Facebook or any of its -subsidiaries or corporate affiliates files a lawsuit alleging patent -infringement against you in the first instance, and you respond by filing a -patent infringement counterclaim in that lawsuit against that party that is -unrelated to the Software, the license granted hereunder will not terminate -under section (i) of this paragraph due to such counterclaim. - -A "Necessary Claim" is a claim of a patent owned by Facebook that is -necessarily infringed by the Software standing alone. - -A "Patent Assertion" is any lawsuit or other action alleging direct, indirect, -or contributory infringement or inducement to infringe any patent, including a -cross-claim or counterclaim. diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/README.md deleted file mode 100644 index 0ee17fcf9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# babel-plugin-transform-regenerator - -Transform async/generator functions with [regenerator](https://github.com/facebook/regenerator) - -## Installation - -```sh -$ npm install babel-plugin-transform-regenerator -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```js -// without options -{ - "plugins": ["transform-regenerator"] -} -// with options -{ - "plugins": [ - ["transform-regenerator", { - asyncGenerators: false, // true by default - generators: false, // true by default - async: false // true by default - }] - ] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-regenerator script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-regenerator"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/emit.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/emit.js deleted file mode 100644 index ff86f6ad2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/emit.js +++ /dev/null @@ -1,834 +0,0 @@ -"use strict"; - -var _typeof2 = require("babel-runtime/helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _assert = require("assert"); - -var _assert2 = _interopRequireDefault(_assert); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _leap = require("./leap"); - -var leap = _interopRequireWildcard(_leap); - -var _meta = require("./meta"); - -var meta = _interopRequireWildcard(_meta); - -var _util = require("./util"); - -var util = _interopRequireWildcard(_util); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var hasOwn = Object.prototype.hasOwnProperty; - -function Emitter(contextId) { - _assert2.default.ok(this instanceof Emitter); - t.assertIdentifier(contextId); - - this.nextTempId = 0; - - this.contextId = contextId; - - this.listing = []; - - this.marked = [true]; - - this.finalLoc = loc(); - - this.tryEntries = []; - - this.leapManager = new leap.LeapManager(this); -} - -var Ep = Emitter.prototype; -exports.Emitter = Emitter; - -function loc() { - return t.numericLiteral(-1); -} - -Ep.mark = function (loc) { - t.assertLiteral(loc); - var index = this.listing.length; - if (loc.value === -1) { - loc.value = index; - } else { - _assert2.default.strictEqual(loc.value, index); - } - this.marked[index] = true; - return loc; -}; - -Ep.emit = function (node) { - if (t.isExpression(node)) { - node = t.expressionStatement(node); - } - - t.assertStatement(node); - this.listing.push(node); -}; - -Ep.emitAssign = function (lhs, rhs) { - this.emit(this.assign(lhs, rhs)); - return lhs; -}; - -Ep.assign = function (lhs, rhs) { - return t.expressionStatement(t.assignmentExpression("=", lhs, rhs)); -}; - -Ep.contextProperty = function (name, computed) { - return t.memberExpression(this.contextId, computed ? t.stringLiteral(name) : t.identifier(name), !!computed); -}; - -Ep.stop = function (rval) { - if (rval) { - this.setReturnValue(rval); - } - - this.jump(this.finalLoc); -}; - -Ep.setReturnValue = function (valuePath) { - t.assertExpression(valuePath.value); - - this.emitAssign(this.contextProperty("rval"), this.explodeExpression(valuePath)); -}; - -Ep.clearPendingException = function (tryLoc, assignee) { - t.assertLiteral(tryLoc); - - var catchCall = t.callExpression(this.contextProperty("catch", true), [tryLoc]); - - if (assignee) { - this.emitAssign(assignee, catchCall); - } else { - this.emit(catchCall); - } -}; - -Ep.jump = function (toLoc) { - this.emitAssign(this.contextProperty("next"), toLoc); - this.emit(t.breakStatement()); -}; - -Ep.jumpIf = function (test, toLoc) { - t.assertExpression(test); - t.assertLiteral(toLoc); - - this.emit(t.ifStatement(test, t.blockStatement([this.assign(this.contextProperty("next"), toLoc), t.breakStatement()]))); -}; - -Ep.jumpIfNot = function (test, toLoc) { - t.assertExpression(test); - t.assertLiteral(toLoc); - - var negatedTest = void 0; - if (t.isUnaryExpression(test) && test.operator === "!") { - negatedTest = test.argument; - } else { - negatedTest = t.unaryExpression("!", test); - } - - this.emit(t.ifStatement(negatedTest, t.blockStatement([this.assign(this.contextProperty("next"), toLoc), t.breakStatement()]))); -}; - -Ep.makeTempVar = function () { - return this.contextProperty("t" + this.nextTempId++); -}; - -Ep.getContextFunction = function (id) { - return t.functionExpression(id || null, [this.contextId], t.blockStatement([this.getDispatchLoop()]), false, false); -}; - -Ep.getDispatchLoop = function () { - var self = this; - var cases = []; - var current = void 0; - - var alreadyEnded = false; - - self.listing.forEach(function (stmt, i) { - if (self.marked.hasOwnProperty(i)) { - cases.push(t.switchCase(t.numericLiteral(i), current = [])); - alreadyEnded = false; - } - - if (!alreadyEnded) { - current.push(stmt); - if (t.isCompletionStatement(stmt)) alreadyEnded = true; - } - }); - - this.finalLoc.value = this.listing.length; - - cases.push(t.switchCase(this.finalLoc, []), t.switchCase(t.stringLiteral("end"), [t.returnStatement(t.callExpression(this.contextProperty("stop"), []))])); - - return t.whileStatement(t.numericLiteral(1), t.switchStatement(t.assignmentExpression("=", this.contextProperty("prev"), this.contextProperty("next")), cases)); -}; - -Ep.getTryLocsList = function () { - if (this.tryEntries.length === 0) { - return null; - } - - var lastLocValue = 0; - - return t.arrayExpression(this.tryEntries.map(function (tryEntry) { - var thisLocValue = tryEntry.firstLoc.value; - _assert2.default.ok(thisLocValue >= lastLocValue, "try entries out of order"); - lastLocValue = thisLocValue; - - var ce = tryEntry.catchEntry; - var fe = tryEntry.finallyEntry; - - var locs = [tryEntry.firstLoc, ce ? ce.firstLoc : null]; - - if (fe) { - locs[2] = fe.firstLoc; - locs[3] = fe.afterLoc; - } - - return t.arrayExpression(locs); - })); -}; - -Ep.explode = function (path, ignoreResult) { - var node = path.node; - var self = this; - - t.assertNode(node); - - if (t.isDeclaration(node)) throw getDeclError(node); - - if (t.isStatement(node)) return self.explodeStatement(path); - - if (t.isExpression(node)) return self.explodeExpression(path, ignoreResult); - - switch (node.type) { - case "Program": - return path.get("body").map(self.explodeStatement, self); - - case "VariableDeclarator": - throw getDeclError(node); - - case "Property": - case "SwitchCase": - case "CatchClause": - throw new Error(node.type + " nodes should be handled by their parents"); - - default: - throw new Error("unknown Node of type " + (0, _stringify2.default)(node.type)); - } -}; - -function getDeclError(node) { - return new Error("all declarations should have been transformed into " + "assignments before the Exploder began its work: " + (0, _stringify2.default)(node)); -} - -Ep.explodeStatement = function (path, labelId) { - var stmt = path.node; - var self = this; - var before = void 0, - after = void 0, - head = void 0; - - t.assertStatement(stmt); - - if (labelId) { - t.assertIdentifier(labelId); - } else { - labelId = null; - } - - if (t.isBlockStatement(stmt)) { - path.get("body").forEach(function (path) { - self.explodeStatement(path); - }); - return; - } - - if (!meta.containsLeap(stmt)) { - self.emit(stmt); - return; - } - - var _ret = function () { - switch (stmt.type) { - case "ExpressionStatement": - self.explodeExpression(path.get("expression"), true); - break; - - case "LabeledStatement": - after = loc(); - - self.leapManager.withEntry(new leap.LabeledEntry(after, stmt.label), function () { - self.explodeStatement(path.get("body"), stmt.label); - }); - - self.mark(after); - - break; - - case "WhileStatement": - before = loc(); - after = loc(); - - self.mark(before); - self.jumpIfNot(self.explodeExpression(path.get("test")), after); - self.leapManager.withEntry(new leap.LoopEntry(after, before, labelId), function () { - self.explodeStatement(path.get("body")); - }); - self.jump(before); - self.mark(after); - - break; - - case "DoWhileStatement": - var first = loc(); - var test = loc(); - after = loc(); - - self.mark(first); - self.leapManager.withEntry(new leap.LoopEntry(after, test, labelId), function () { - self.explode(path.get("body")); - }); - self.mark(test); - self.jumpIf(self.explodeExpression(path.get("test")), first); - self.mark(after); - - break; - - case "ForStatement": - head = loc(); - var update = loc(); - after = loc(); - - if (stmt.init) { - self.explode(path.get("init"), true); - } - - self.mark(head); - - if (stmt.test) { - self.jumpIfNot(self.explodeExpression(path.get("test")), after); - } else {} - - self.leapManager.withEntry(new leap.LoopEntry(after, update, labelId), function () { - self.explodeStatement(path.get("body")); - }); - - self.mark(update); - - if (stmt.update) { - self.explode(path.get("update"), true); - } - - self.jump(head); - - self.mark(after); - - break; - - case "TypeCastExpression": - return { - v: self.explodeExpression(path.get("expression")) - }; - - case "ForInStatement": - head = loc(); - after = loc(); - - var keyIterNextFn = self.makeTempVar(); - self.emitAssign(keyIterNextFn, t.callExpression(util.runtimeProperty("keys"), [self.explodeExpression(path.get("right"))])); - - self.mark(head); - - var keyInfoTmpVar = self.makeTempVar(); - self.jumpIf(t.memberExpression(t.assignmentExpression("=", keyInfoTmpVar, t.callExpression(keyIterNextFn, [])), t.identifier("done"), false), after); - - self.emitAssign(stmt.left, t.memberExpression(keyInfoTmpVar, t.identifier("value"), false)); - - self.leapManager.withEntry(new leap.LoopEntry(after, head, labelId), function () { - self.explodeStatement(path.get("body")); - }); - - self.jump(head); - - self.mark(after); - - break; - - case "BreakStatement": - self.emitAbruptCompletion({ - type: "break", - target: self.leapManager.getBreakLoc(stmt.label) - }); - - break; - - case "ContinueStatement": - self.emitAbruptCompletion({ - type: "continue", - target: self.leapManager.getContinueLoc(stmt.label) - }); - - break; - - case "SwitchStatement": - var disc = self.emitAssign(self.makeTempVar(), self.explodeExpression(path.get("discriminant"))); - - after = loc(); - var defaultLoc = loc(); - var condition = defaultLoc; - var caseLocs = []; - - var cases = stmt.cases || []; - - for (var i = cases.length - 1; i >= 0; --i) { - var c = cases[i]; - t.assertSwitchCase(c); - - if (c.test) { - condition = t.conditionalExpression(t.binaryExpression("===", disc, c.test), caseLocs[i] = loc(), condition); - } else { - caseLocs[i] = defaultLoc; - } - } - - var discriminant = path.get("discriminant"); - discriminant.replaceWith(condition); - self.jump(self.explodeExpression(discriminant)); - - self.leapManager.withEntry(new leap.SwitchEntry(after), function () { - path.get("cases").forEach(function (casePath) { - var i = casePath.key; - self.mark(caseLocs[i]); - - casePath.get("consequent").forEach(function (path) { - self.explodeStatement(path); - }); - }); - }); - - self.mark(after); - if (defaultLoc.value === -1) { - self.mark(defaultLoc); - _assert2.default.strictEqual(after.value, defaultLoc.value); - } - - break; - - case "IfStatement": - var elseLoc = stmt.alternate && loc(); - after = loc(); - - self.jumpIfNot(self.explodeExpression(path.get("test")), elseLoc || after); - - self.explodeStatement(path.get("consequent")); - - if (elseLoc) { - self.jump(after); - self.mark(elseLoc); - self.explodeStatement(path.get("alternate")); - } - - self.mark(after); - - break; - - case "ReturnStatement": - self.emitAbruptCompletion({ - type: "return", - value: self.explodeExpression(path.get("argument")) - }); - - break; - - case "WithStatement": - throw new Error("WithStatement not supported in generator functions."); - - case "TryStatement": - after = loc(); - - var handler = stmt.handler; - - var catchLoc = handler && loc(); - var catchEntry = catchLoc && new leap.CatchEntry(catchLoc, handler.param); - - var finallyLoc = stmt.finalizer && loc(); - var finallyEntry = finallyLoc && new leap.FinallyEntry(finallyLoc, after); - - var tryEntry = new leap.TryEntry(self.getUnmarkedCurrentLoc(), catchEntry, finallyEntry); - - self.tryEntries.push(tryEntry); - self.updateContextPrevLoc(tryEntry.firstLoc); - - self.leapManager.withEntry(tryEntry, function () { - self.explodeStatement(path.get("block")); - - if (catchLoc) { - (function () { - if (finallyLoc) { - self.jump(finallyLoc); - } else { - self.jump(after); - } - - self.updateContextPrevLoc(self.mark(catchLoc)); - - var bodyPath = path.get("handler.body"); - var safeParam = self.makeTempVar(); - self.clearPendingException(tryEntry.firstLoc, safeParam); - - bodyPath.traverse(catchParamVisitor, { - safeParam: safeParam, - catchParamName: handler.param.name - }); - - self.leapManager.withEntry(catchEntry, function () { - self.explodeStatement(bodyPath); - }); - })(); - } - - if (finallyLoc) { - self.updateContextPrevLoc(self.mark(finallyLoc)); - - self.leapManager.withEntry(finallyEntry, function () { - self.explodeStatement(path.get("finalizer")); - }); - - self.emit(t.returnStatement(t.callExpression(self.contextProperty("finish"), [finallyEntry.firstLoc]))); - } - }); - - self.mark(after); - - break; - - case "ThrowStatement": - self.emit(t.throwStatement(self.explodeExpression(path.get("argument")))); - - break; - - default: - throw new Error("unknown Statement of type " + (0, _stringify2.default)(stmt.type)); - } - }(); - - if ((typeof _ret === "undefined" ? "undefined" : (0, _typeof3.default)(_ret)) === "object") return _ret.v; -}; - -var catchParamVisitor = { - Identifier: function Identifier(path, state) { - if (path.node.name === state.catchParamName && util.isReference(path)) { - path.replaceWith(state.safeParam); - } - }, - - Scope: function Scope(path, state) { - if (path.scope.hasOwnBinding(state.catchParamName)) { - path.skip(); - } - } -}; - -Ep.emitAbruptCompletion = function (record) { - if (!isValidCompletion(record)) { - _assert2.default.ok(false, "invalid completion record: " + (0, _stringify2.default)(record)); - } - - _assert2.default.notStrictEqual(record.type, "normal", "normal completions are not abrupt"); - - var abruptArgs = [t.stringLiteral(record.type)]; - - if (record.type === "break" || record.type === "continue") { - t.assertLiteral(record.target); - abruptArgs[1] = record.target; - } else if (record.type === "return" || record.type === "throw") { - if (record.value) { - t.assertExpression(record.value); - abruptArgs[1] = record.value; - } - } - - this.emit(t.returnStatement(t.callExpression(this.contextProperty("abrupt"), abruptArgs))); -}; - -function isValidCompletion(record) { - var type = record.type; - - if (type === "normal") { - return !hasOwn.call(record, "target"); - } - - if (type === "break" || type === "continue") { - return !hasOwn.call(record, "value") && t.isLiteral(record.target); - } - - if (type === "return" || type === "throw") { - return hasOwn.call(record, "value") && !hasOwn.call(record, "target"); - } - - return false; -} - -Ep.getUnmarkedCurrentLoc = function () { - return t.numericLiteral(this.listing.length); -}; - -Ep.updateContextPrevLoc = function (loc) { - if (loc) { - t.assertLiteral(loc); - - if (loc.value === -1) { - loc.value = this.listing.length; - } else { - _assert2.default.strictEqual(loc.value, this.listing.length); - } - } else { - loc = this.getUnmarkedCurrentLoc(); - } - - this.emitAssign(this.contextProperty("prev"), loc); -}; - -Ep.explodeExpression = function (path, ignoreResult) { - var expr = path.node; - if (expr) { - t.assertExpression(expr); - } else { - return expr; - } - - var self = this; - var result = void 0; - var after = void 0; - - function finish(expr) { - t.assertExpression(expr); - if (ignoreResult) { - self.emit(expr); - } else { - return expr; - } - } - - if (!meta.containsLeap(expr)) { - return finish(expr); - } - - var hasLeapingChildren = meta.containsLeap.onlyChildren(expr); - - function explodeViaTempVar(tempVar, childPath, ignoreChildResult) { - _assert2.default.ok(!ignoreChildResult || !tempVar, "Ignoring the result of a child expression but forcing it to " + "be assigned to a temporary variable?"); - - var result = self.explodeExpression(childPath, ignoreChildResult); - - if (ignoreChildResult) {} else if (tempVar || hasLeapingChildren && !t.isLiteral(result)) { - result = self.emitAssign(tempVar || self.makeTempVar(), result); - } - return result; - } - - var _ret3 = function () { - - switch (expr.type) { - case "MemberExpression": - return { - v: finish(t.memberExpression(self.explodeExpression(path.get("object")), expr.computed ? explodeViaTempVar(null, path.get("property")) : expr.property, expr.computed)) - }; - - case "CallExpression": - var calleePath = path.get("callee"); - var argsPath = path.get("arguments"); - - var newCallee = void 0; - var newArgs = []; - - var hasLeapingArgs = false; - argsPath.forEach(function (argPath) { - hasLeapingArgs = hasLeapingArgs || meta.containsLeap(argPath.node); - }); - - if (t.isMemberExpression(calleePath.node)) { - if (hasLeapingArgs) { - - var newObject = explodeViaTempVar(self.makeTempVar(), calleePath.get("object")); - - var newProperty = calleePath.node.computed ? explodeViaTempVar(null, calleePath.get("property")) : calleePath.node.property; - - newArgs.unshift(newObject); - - newCallee = t.memberExpression(t.memberExpression(newObject, newProperty, calleePath.node.computed), t.identifier("call"), false); - } else { - newCallee = self.explodeExpression(calleePath); - } - } else { - newCallee = self.explodeExpression(calleePath); - - if (t.isMemberExpression(newCallee)) { - newCallee = t.sequenceExpression([t.numericLiteral(0), newCallee]); - } - } - - argsPath.forEach(function (argPath) { - newArgs.push(explodeViaTempVar(null, argPath)); - }); - - return { - v: finish(t.callExpression(newCallee, newArgs)) - }; - - case "NewExpression": - return { - v: finish(t.newExpression(explodeViaTempVar(null, path.get("callee")), path.get("arguments").map(function (argPath) { - return explodeViaTempVar(null, argPath); - }))) - }; - - case "ObjectExpression": - return { - v: finish(t.objectExpression(path.get("properties").map(function (propPath) { - if (propPath.isObjectProperty()) { - return t.objectProperty(propPath.node.key, explodeViaTempVar(null, propPath.get("value")), propPath.node.computed); - } else { - return propPath.node; - } - }))) - }; - - case "ArrayExpression": - return { - v: finish(t.arrayExpression(path.get("elements").map(function (elemPath) { - return explodeViaTempVar(null, elemPath); - }))) - }; - - case "SequenceExpression": - var lastIndex = expr.expressions.length - 1; - - path.get("expressions").forEach(function (exprPath) { - if (exprPath.key === lastIndex) { - result = self.explodeExpression(exprPath, ignoreResult); - } else { - self.explodeExpression(exprPath, true); - } - }); - - return { - v: result - }; - - case "LogicalExpression": - after = loc(); - - if (!ignoreResult) { - result = self.makeTempVar(); - } - - var left = explodeViaTempVar(result, path.get("left")); - - if (expr.operator === "&&") { - self.jumpIfNot(left, after); - } else { - _assert2.default.strictEqual(expr.operator, "||"); - self.jumpIf(left, after); - } - - explodeViaTempVar(result, path.get("right"), ignoreResult); - - self.mark(after); - - return { - v: result - }; - - case "ConditionalExpression": - var elseLoc = loc(); - after = loc(); - var test = self.explodeExpression(path.get("test")); - - self.jumpIfNot(test, elseLoc); - - if (!ignoreResult) { - result = self.makeTempVar(); - } - - explodeViaTempVar(result, path.get("consequent"), ignoreResult); - self.jump(after); - - self.mark(elseLoc); - explodeViaTempVar(result, path.get("alternate"), ignoreResult); - - self.mark(after); - - return { - v: result - }; - - case "UnaryExpression": - return { - v: finish(t.unaryExpression(expr.operator, self.explodeExpression(path.get("argument")), !!expr.prefix)) - }; - - case "BinaryExpression": - return { - v: finish(t.binaryExpression(expr.operator, explodeViaTempVar(null, path.get("left")), explodeViaTempVar(null, path.get("right")))) - }; - - case "AssignmentExpression": - return { - v: finish(t.assignmentExpression(expr.operator, self.explodeExpression(path.get("left")), self.explodeExpression(path.get("right")))) - }; - - case "UpdateExpression": - return { - v: finish(t.updateExpression(expr.operator, self.explodeExpression(path.get("argument")), expr.prefix)) - }; - - case "YieldExpression": - after = loc(); - var arg = expr.argument && self.explodeExpression(path.get("argument")); - - if (arg && expr.delegate) { - var _result = self.makeTempVar(); - - self.emit(t.returnStatement(t.callExpression(self.contextProperty("delegateYield"), [arg, t.stringLiteral(_result.property.name), after]))); - - self.mark(after); - - return { - v: _result - }; - } - - self.emitAssign(self.contextProperty("next"), after); - self.emit(t.returnStatement(arg || null)); - self.mark(after); - - return { - v: self.contextProperty("sent") - }; - - default: - throw new Error("unknown Expression of type " + (0, _stringify2.default)(expr.type)); - } - }(); - - if ((typeof _ret3 === "undefined" ? "undefined" : (0, _typeof3.default)(_ret3)) === "object") return _ret3.v; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/hoist.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/hoist.js deleted file mode 100644 index 12afe4a9b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/hoist.js +++ /dev/null @@ -1,115 +0,0 @@ -"use strict"; - -var _keys = require("babel-runtime/core-js/object/keys"); - -var _keys2 = _interopRequireDefault(_keys); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var hasOwn = Object.prototype.hasOwnProperty; - -exports.hoist = function (funPath) { - t.assertFunction(funPath.node); - - var vars = {}; - - function varDeclToExpr(vdec, includeIdentifiers) { - t.assertVariableDeclaration(vdec); - - var exprs = []; - - vdec.declarations.forEach(function (dec) { - vars[dec.id.name] = t.identifier(dec.id.name); - - if (dec.init) { - exprs.push(t.assignmentExpression("=", dec.id, dec.init)); - } else if (includeIdentifiers) { - exprs.push(dec.id); - } - }); - - if (exprs.length === 0) return null; - - if (exprs.length === 1) return exprs[0]; - - return t.sequenceExpression(exprs); - } - - funPath.get("body").traverse({ - VariableDeclaration: { - exit: function exit(path) { - var expr = varDeclToExpr(path.node, false); - if (expr === null) { - path.remove(); - } else { - path.replaceWith(t.expressionStatement(expr)); - } - - path.skip(); - } - }, - - ForStatement: function ForStatement(path) { - var init = path.node.init; - if (t.isVariableDeclaration(init)) { - path.get("init").replaceWith(varDeclToExpr(init, false)); - } - }, - - ForXStatement: function ForXStatement(path) { - var left = path.get("left"); - if (left.isVariableDeclaration()) { - left.replaceWith(varDeclToExpr(left.node, true)); - } - }, - - FunctionDeclaration: function FunctionDeclaration(path) { - var node = path.node; - vars[node.id.name] = node.id; - - var assignment = t.expressionStatement(t.assignmentExpression("=", node.id, t.functionExpression(node.id, node.params, node.body, node.generator, node.expression))); - - if (path.parentPath.isBlockStatement()) { - path.parentPath.unshiftContainer("body", assignment); - - path.remove(); - } else { - path.replaceWith(assignment); - } - - path.skip(); - }, - - FunctionExpression: function FunctionExpression(path) { - path.skip(); - } - }); - - var paramNames = {}; - funPath.get("params").forEach(function (paramPath) { - var param = paramPath.node; - if (t.isIdentifier(param)) { - paramNames[param.name] = param; - } else {} - }); - - var declarations = []; - - (0, _keys2.default)(vars).forEach(function (name) { - if (!hasOwn.call(paramNames, name)) { - declarations.push(t.variableDeclarator(vars[name], null)); - } - }); - - if (declarations.length === 0) { - return null; - } - - return t.variableDeclaration("var", declarations); -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/index.js deleted file mode 100644 index 3b9fe895a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/index.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () { - return require("./visit"); -}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/leap.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/leap.js deleted file mode 100644 index 4ca3a2fe1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/leap.js +++ /dev/null @@ -1,171 +0,0 @@ -"use strict"; - -var _assert = require("assert"); - -var _assert2 = _interopRequireDefault(_assert); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _util = require("util"); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function Entry() { - _assert2.default.ok(this instanceof Entry); -} - -function FunctionEntry(returnLoc) { - Entry.call(this); - t.assertLiteral(returnLoc); - this.returnLoc = returnLoc; -} - -(0, _util.inherits)(FunctionEntry, Entry); -exports.FunctionEntry = FunctionEntry; - -function LoopEntry(breakLoc, continueLoc, label) { - Entry.call(this); - - t.assertLiteral(breakLoc); - t.assertLiteral(continueLoc); - - if (label) { - t.assertIdentifier(label); - } else { - label = null; - } - - this.breakLoc = breakLoc; - this.continueLoc = continueLoc; - this.label = label; -} - -(0, _util.inherits)(LoopEntry, Entry); -exports.LoopEntry = LoopEntry; - -function SwitchEntry(breakLoc) { - Entry.call(this); - t.assertLiteral(breakLoc); - this.breakLoc = breakLoc; -} - -(0, _util.inherits)(SwitchEntry, Entry); -exports.SwitchEntry = SwitchEntry; - -function TryEntry(firstLoc, catchEntry, finallyEntry) { - Entry.call(this); - - t.assertLiteral(firstLoc); - - if (catchEntry) { - _assert2.default.ok(catchEntry instanceof CatchEntry); - } else { - catchEntry = null; - } - - if (finallyEntry) { - _assert2.default.ok(finallyEntry instanceof FinallyEntry); - } else { - finallyEntry = null; - } - - _assert2.default.ok(catchEntry || finallyEntry); - - this.firstLoc = firstLoc; - this.catchEntry = catchEntry; - this.finallyEntry = finallyEntry; -} - -(0, _util.inherits)(TryEntry, Entry); -exports.TryEntry = TryEntry; - -function CatchEntry(firstLoc, paramId) { - Entry.call(this); - - t.assertLiteral(firstLoc); - t.assertIdentifier(paramId); - - this.firstLoc = firstLoc; - this.paramId = paramId; -} - -(0, _util.inherits)(CatchEntry, Entry); -exports.CatchEntry = CatchEntry; - -function FinallyEntry(firstLoc, afterLoc) { - Entry.call(this); - t.assertLiteral(firstLoc); - t.assertLiteral(afterLoc); - this.firstLoc = firstLoc; - this.afterLoc = afterLoc; -} - -(0, _util.inherits)(FinallyEntry, Entry); -exports.FinallyEntry = FinallyEntry; - -function LabeledEntry(breakLoc, label) { - Entry.call(this); - - t.assertLiteral(breakLoc); - t.assertIdentifier(label); - - this.breakLoc = breakLoc; - this.label = label; -} - -(0, _util.inherits)(LabeledEntry, Entry); -exports.LabeledEntry = LabeledEntry; - -function LeapManager(emitter) { - _assert2.default.ok(this instanceof LeapManager); - - var Emitter = require("./emit").Emitter; - _assert2.default.ok(emitter instanceof Emitter); - - this.emitter = emitter; - this.entryStack = [new FunctionEntry(emitter.finalLoc)]; -} - -var LMp = LeapManager.prototype; -exports.LeapManager = LeapManager; - -LMp.withEntry = function (entry, callback) { - _assert2.default.ok(entry instanceof Entry); - this.entryStack.push(entry); - try { - callback.call(this.emitter); - } finally { - var popped = this.entryStack.pop(); - _assert2.default.strictEqual(popped, entry); - } -}; - -LMp._findLeapLocation = function (property, label) { - for (var i = this.entryStack.length - 1; i >= 0; --i) { - var entry = this.entryStack[i]; - var loc = entry[property]; - if (loc) { - if (label) { - if (entry.label && entry.label.name === label.name) { - return loc; - } - } else if (entry instanceof LabeledEntry) {} else { - return loc; - } - } - } - - return null; -}; - -LMp.getBreakLoc = function (label) { - return this._findLeapLocation("breakLoc", label); -}; - -LMp.getContinueLoc = function (label) { - return this._findLeapLocation("continueLoc", label); -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/meta.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/meta.js deleted file mode 100644 index 2c5ce3679..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/meta.js +++ /dev/null @@ -1,93 +0,0 @@ -"use strict"; - -var _assert = require("assert"); - -var _assert2 = _interopRequireDefault(_assert); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var m = require("private").makeAccessor(); - -var hasOwn = Object.prototype.hasOwnProperty; - -function makePredicate(propertyName, knownTypes) { - function onlyChildren(node) { - t.assertNode(node); - - var result = false; - - function check(child) { - if (result) {} else if (Array.isArray(child)) { - child.some(check); - } else if (t.isNode(child)) { - _assert2.default.strictEqual(result, false); - result = predicate(child); - } - return result; - } - - var keys = t.VISITOR_KEYS[node.type]; - if (keys) { - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - var child = node[key]; - check(child); - } - } - - return result; - } - - function predicate(node) { - t.assertNode(node); - - var meta = m(node); - if (hasOwn.call(meta, propertyName)) return meta[propertyName]; - - if (hasOwn.call(opaqueTypes, node.type)) return meta[propertyName] = false; - - if (hasOwn.call(knownTypes, node.type)) return meta[propertyName] = true; - - return meta[propertyName] = onlyChildren(node); - } - - predicate.onlyChildren = onlyChildren; - - return predicate; -} - -var opaqueTypes = { - FunctionExpression: true -}; - -var sideEffectTypes = { - CallExpression: true, - ForInStatement: true, - UnaryExpression: true, - BinaryExpression: true, - AssignmentExpression: true, - UpdateExpression: true, - NewExpression: true }; - -var leapTypes = { - YieldExpression: true, - BreakStatement: true, - ContinueStatement: true, - ReturnStatement: true, - ThrowStatement: true -}; - -for (var type in leapTypes) { - if (hasOwn.call(leapTypes, type)) { - sideEffectTypes[type] = leapTypes[type]; - } -} - -exports.hasSideEffects = makePredicate("hasSideEffects", sideEffectTypes); -exports.containsLeap = makePredicate("containsLeap", leapTypes); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/util.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/util.js deleted file mode 100644 index 768be48a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/util.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.runtimeProperty = runtimeProperty; -exports.isReference = isReference; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function runtimeProperty(name) { - return t.memberExpression(t.identifier("regeneratorRuntime"), t.identifier(name), false); -} - -function isReference(path) { - return path.isReferenced() || path.parentPath.isAssignmentExpression({ left: path.node }); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/visit.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/visit.js deleted file mode 100644 index 4144a9fe0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/lib/visit.js +++ /dev/null @@ -1,214 +0,0 @@ -"use strict"; - -var _assert = require("assert"); - -var _assert2 = _interopRequireDefault(_assert); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _hoist = require("./hoist"); - -var _emit = require("./emit"); - -var _util = require("./util"); - -var util = _interopRequireWildcard(_util); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var getMarkInfo = require("private").makeAccessor(); - -exports.visitor = { - Function: { - exit: function exit(path, state) { - var node = path.node; - - if (node.generator) { - if (node.async) { - if (state.opts.asyncGenerators === false) return; - } else { - if (state.opts.generators === false) return; - } - } else if (node.async) { - if (state.opts.async === false) return; - } else { - return; - } - - var contextId = path.scope.generateUidIdentifier("context"); - var argsId = path.scope.generateUidIdentifier("args"); - - path.ensureBlock(); - var bodyBlockPath = path.get("body"); - - if (node.async) { - bodyBlockPath.traverse(awaitVisitor); - } - - bodyBlockPath.traverse(functionSentVisitor, { - context: contextId - }); - - var outerBody = []; - var innerBody = []; - - bodyBlockPath.get("body").forEach(function (childPath) { - var node = childPath.node; - if (node && node._blockHoist != null) { - outerBody.push(node); - } else { - innerBody.push(node); - } - }); - - if (outerBody.length > 0) { - bodyBlockPath.node.body = innerBody; - } - - var outerFnExpr = getOuterFnExpr(path); - - t.assertIdentifier(node.id); - var innerFnId = t.identifier(node.id.name + "$"); - - var vars = (0, _hoist.hoist)(path); - - var didRenameArguments = renameArguments(path, argsId); - if (didRenameArguments) { - vars = vars || t.variableDeclaration("var", []); - vars.declarations.push(t.variableDeclarator(argsId, t.identifier("arguments"))); - } - - var emitter = new _emit.Emitter(contextId); - emitter.explode(path.get("body")); - - if (vars && vars.declarations.length > 0) { - outerBody.push(vars); - } - - var wrapArgs = [emitter.getContextFunction(innerFnId), node.generator ? outerFnExpr : t.nullLiteral(), t.thisExpression()]; - - var tryLocsList = emitter.getTryLocsList(); - if (tryLocsList) { - wrapArgs.push(tryLocsList); - } - - var wrapCall = t.callExpression(util.runtimeProperty(node.async ? "async" : "wrap"), wrapArgs); - - outerBody.push(t.returnStatement(wrapCall)); - node.body = t.blockStatement(outerBody); - - var wasGeneratorFunction = node.generator; - if (wasGeneratorFunction) { - node.generator = false; - } - - if (node.async) { - node.async = false; - } - - if (wasGeneratorFunction && t.isExpression(node)) { - path.replaceWith(t.callExpression(util.runtimeProperty("mark"), [node])); - } - - path.requeue(); - } - } -}; - -function getOuterFnExpr(funPath) { - var node = funPath.node; - t.assertFunction(node); - - if (!node.id) { - node.id = funPath.scope.parent.generateUidIdentifier("callee"); - } - - if (node.generator && t.isFunctionDeclaration(node)) { - var pp = funPath.findParent(function (path) { - return path.isProgram() || path.isBlockStatement(); - }); - - if (!pp) { - return node.id; - } - - var markDecl = getRuntimeMarkDecl(pp); - var markedArray = markDecl.declarations[0].id; - var funDeclIdArray = markDecl.declarations[0].init.callee.object; - t.assertArrayExpression(funDeclIdArray); - - var index = funDeclIdArray.elements.length; - funDeclIdArray.elements.push(node.id); - - return t.memberExpression(markedArray, t.numericLiteral(index), true); - } - - return node.id; -} - -function getRuntimeMarkDecl(blockPath) { - var block = blockPath.node; - _assert2.default.ok(Array.isArray(block.body)); - - var info = getMarkInfo(block); - if (info.decl) { - return info.decl; - } - - info.decl = t.variableDeclaration("var", [t.variableDeclarator(blockPath.scope.generateUidIdentifier("marked"), t.callExpression(t.memberExpression(t.arrayExpression([]), t.identifier("map"), false), [util.runtimeProperty("mark")]))]); - - blockPath.unshiftContainer("body", info.decl); - - return info.decl; -} - -function renameArguments(funcPath, argsId) { - var state = { - didRenameArguments: false, - argsId: argsId - }; - - funcPath.traverse(argumentsVisitor, state); - - return state.didRenameArguments; -} - -var argumentsVisitor = { - "FunctionExpression|FunctionDeclaration": function FunctionExpressionFunctionDeclaration(path) { - path.skip(); - }, - - Identifier: function Identifier(path, state) { - if (path.node.name === "arguments" && util.isReference(path)) { - path.replaceWith(state.argsId); - state.didRenameArguments = true; - } - } -}; - -var functionSentVisitor = { - MetaProperty: function MetaProperty(path) { - var node = path.node; - - - if (node.meta.name === "function" && node.property.name === "sent") { - path.replaceWith(t.memberExpression(this.context, t.identifier("_sent"))); - } - } -}; - -var awaitVisitor = { - Function: function Function(path) { - path.skip(); - }, - - AwaitExpression: function AwaitExpression(path) { - var argument = path.node.argument; - - path.replaceWith(t.yieldExpression(t.callExpression(util.runtimeProperty("awrap"), [argument]), false)); - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/package.json deleted file mode 100644 index a5c189b96..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-regenerator@^6.16.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015" - ] - ], - "_from": "babel-plugin-transform-regenerator@>=6.16.0 <7.0.0", - "_id": "babel-plugin-transform-regenerator@6.16.1", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-regenerator", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-regenerator-6.16.1.tgz_1475097914225_0.827174331760034" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-regenerator", - "raw": "babel-plugin-transform-regenerator@^6.16.0", - "rawSpec": "^6.16.0", - "scope": null, - "spec": ">=6.16.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-es2015" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.16.1.tgz", - "_shasum": "a75de6b048a14154aae14b0122756c5bed392f59", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-regenerator@^6.16.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015", - "author": { - "email": "bn@cs.stanford.edu", - "name": "Ben Newman" - }, - "dependencies": { - "babel-runtime": "^6.9.0", - "babel-types": "^6.16.0", - "private": "~0.1.5" - }, - "description": "Explode async and generator functions into a state machine.", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.8.0" - }, - "directories": {}, - "dist": { - "shasum": "a75de6b048a14154aae14b0122756c5bed392f59", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.16.1.tgz" - }, - "homepage": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-regenerator", - "license": "BSD", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-regenerator", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-regenerator" - }, - "scripts": {}, - "version": "6.16.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/emit.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/emit.js deleted file mode 100644 index b3378867b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/emit.js +++ /dev/null @@ -1,1184 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * https://raw.github.com/facebook/regenerator/master/LICENSE file. An - * additional grant of patent rights can be found in the PATENTS file in - * the same directory. - */ - -import assert from "assert"; -import * as t from "babel-types"; -import * as leap from "./leap"; -import * as meta from "./meta"; -import * as util from "./util"; - -let hasOwn = Object.prototype.hasOwnProperty; - -function Emitter(contextId) { - assert.ok(this instanceof Emitter); - t.assertIdentifier(contextId); - - // Used to generate unique temporary names. - this.nextTempId = 0; - - // In order to make sure the context object does not collide with - // anything in the local scope, we might have to rename it, so we - // refer to it symbolically instead of just assuming that it will be - // called "context". - this.contextId = contextId; - - // An append-only list of Statements that grows each time this.emit is - // called. - this.listing = []; - - // A sparse array whose keys correspond to locations in this.listing - // that have been marked as branch/jump targets. - this.marked = [true]; - - // The last location will be marked when this.getDispatchLoop is - // called. - this.finalLoc = loc(); - - // A list of all leap.TryEntry statements emitted. - this.tryEntries = []; - - // Each time we evaluate the body of a loop, we tell this.leapManager - // to enter a nested loop context that determines the meaning of break - // and continue statements therein. - this.leapManager = new leap.LeapManager(this); -} - -let Ep = Emitter.prototype; -exports.Emitter = Emitter; - -// Offsets into this.listing that could be used as targets for branches or -// jumps are represented as numeric Literal nodes. This representation has -// the amazingly convenient benefit of allowing the exact value of the -// location to be determined at any time, even after generating code that -// refers to the location. -function loc() { - return t.numericLiteral(-1); -} - -// Sets the exact value of the given location to the offset of the next -// Statement emitted. -Ep.mark = function(loc) { - t.assertLiteral(loc); - let index = this.listing.length; - if (loc.value === -1) { - loc.value = index; - } else { - // Locations can be marked redundantly, but their values cannot change - // once set the first time. - assert.strictEqual(loc.value, index); - } - this.marked[index] = true; - return loc; -}; - -Ep.emit = function(node) { - if (t.isExpression(node)) { - node = t.expressionStatement(node); - } - - t.assertStatement(node); - this.listing.push(node); -}; - -// Shorthand for emitting assignment statements. This will come in handy -// for assignments to temporary variables. -Ep.emitAssign = function(lhs, rhs) { - this.emit(this.assign(lhs, rhs)); - return lhs; -}; - -// Shorthand for an assignment statement. -Ep.assign = function(lhs, rhs) { - return t.expressionStatement( - t.assignmentExpression("=", lhs, rhs)); -}; - -// Convenience function for generating expressions like context.next, -// context.sent, and context.rval. -Ep.contextProperty = function(name, computed) { - return t.memberExpression( - this.contextId, - computed ? t.stringLiteral(name) : t.identifier(name), - !!computed - ); -}; - -// Shorthand for setting context.rval and jumping to `context.stop()`. -Ep.stop = function(rval) { - if (rval) { - this.setReturnValue(rval); - } - - this.jump(this.finalLoc); -}; - -Ep.setReturnValue = function(valuePath) { - t.assertExpression(valuePath.value); - - this.emitAssign( - this.contextProperty("rval"), - this.explodeExpression(valuePath) - ); -}; - -Ep.clearPendingException = function(tryLoc, assignee) { - t.assertLiteral(tryLoc); - - let catchCall = t.callExpression( - this.contextProperty("catch", true), - [tryLoc] - ); - - if (assignee) { - this.emitAssign(assignee, catchCall); - } else { - this.emit(catchCall); - } -}; - -// Emits code for an unconditional jump to the given location, even if the -// exact value of the location is not yet known. -Ep.jump = function(toLoc) { - this.emitAssign(this.contextProperty("next"), toLoc); - this.emit(t.breakStatement()); -}; - -// Conditional jump. -Ep.jumpIf = function(test, toLoc) { - t.assertExpression(test); - t.assertLiteral(toLoc); - - this.emit(t.ifStatement( - test, - t.blockStatement([ - this.assign(this.contextProperty("next"), toLoc), - t.breakStatement() - ]) - )); -}; - -// Conditional jump, with the condition negated. -Ep.jumpIfNot = function(test, toLoc) { - t.assertExpression(test); - t.assertLiteral(toLoc); - - let negatedTest; - if (t.isUnaryExpression(test) && - test.operator === "!") { - // Avoid double negation. - negatedTest = test.argument; - } else { - negatedTest = t.unaryExpression("!", test); - } - - this.emit(t.ifStatement( - negatedTest, - t.blockStatement([ - this.assign(this.contextProperty("next"), toLoc), - t.breakStatement() - ]) - )); -}; - -// Returns a unique MemberExpression that can be used to store and -// retrieve temporary values. Since the object of the member expression is -// the context object, which is presumed to coexist peacefully with all -// other local variables, and since we just increment `nextTempId` -// monotonically, uniqueness is assured. -Ep.makeTempVar = function() { - return this.contextProperty("t" + this.nextTempId++); -}; - -Ep.getContextFunction = function(id) { - return t.functionExpression( - id || null/*Anonymous*/, - [this.contextId], - t.blockStatement([this.getDispatchLoop()]), - false, // Not a generator anymore! - false // Nor an expression. - ); -}; - -// Turns this.listing into a loop of the form -// -// while (1) switch (context.next) { -// case 0: -// ... -// case n: -// return context.stop(); -// } -// -// Each marked location in this.listing will correspond to one generated -// case statement. -Ep.getDispatchLoop = function() { - let self = this; - let cases = []; - let current; - - // If we encounter a break, continue, or return statement in a switch - // case, we can skip the rest of the statements until the next case. - let alreadyEnded = false; - - self.listing.forEach(function(stmt, i) { - if (self.marked.hasOwnProperty(i)) { - cases.push(t.switchCase( - t.numericLiteral(i), - current = [])); - alreadyEnded = false; - } - - if (!alreadyEnded) { - current.push(stmt); - if (t.isCompletionStatement(stmt)) - alreadyEnded = true; - } - }); - - // Now that we know how many statements there will be in this.listing, - // we can finally resolve this.finalLoc.value. - this.finalLoc.value = this.listing.length; - - cases.push( - t.switchCase(this.finalLoc, [ - // Intentionally fall through to the "end" case... - ]), - - // So that the runtime can jump to the final location without having - // to know its offset, we provide the "end" case as a synonym. - t.switchCase(t.stringLiteral("end"), [ - // This will check/clear both context.thrown and context.rval. - t.returnStatement( - t.callExpression(this.contextProperty("stop"), []) - ) - ]) - ); - - return t.whileStatement( - t.numericLiteral(1), - t.switchStatement( - t.assignmentExpression( - "=", - this.contextProperty("prev"), - this.contextProperty("next") - ), - cases - ) - ); -}; - -Ep.getTryLocsList = function() { - if (this.tryEntries.length === 0) { - // To avoid adding a needless [] to the majority of runtime.wrap - // argument lists, force the caller to handle this case specially. - return null; - } - - let lastLocValue = 0; - - return t.arrayExpression( - this.tryEntries.map(function(tryEntry) { - let thisLocValue = tryEntry.firstLoc.value; - assert.ok(thisLocValue >= lastLocValue, "try entries out of order"); - lastLocValue = thisLocValue; - - let ce = tryEntry.catchEntry; - let fe = tryEntry.finallyEntry; - - let locs = [ - tryEntry.firstLoc, - // The null here makes a hole in the array. - ce ? ce.firstLoc : null - ]; - - if (fe) { - locs[2] = fe.firstLoc; - locs[3] = fe.afterLoc; - } - - return t.arrayExpression(locs); - }) - ); -}; - -// All side effects must be realized in order. - -// If any subexpression harbors a leap, all subexpressions must be -// neutered of side effects. - -// No destructive modification of AST nodes. - -Ep.explode = function(path, ignoreResult) { - let node = path.node; - let self = this; - - t.assertNode(node); - - if (t.isDeclaration(node)) - throw getDeclError(node); - - if (t.isStatement(node)) - return self.explodeStatement(path); - - if (t.isExpression(node)) - return self.explodeExpression(path, ignoreResult); - - switch (node.type) { - case "Program": - return path.get("body").map( - self.explodeStatement, - self - ); - - case "VariableDeclarator": - throw getDeclError(node); - - // These node types should be handled by their parent nodes - // (ObjectExpression, SwitchStatement, and TryStatement, respectively). - case "Property": - case "SwitchCase": - case "CatchClause": - throw new Error( - node.type + " nodes should be handled by their parents"); - - default: - throw new Error( - "unknown Node of type " + - JSON.stringify(node.type)); - } -}; - -function getDeclError(node) { - return new Error( - "all declarations should have been transformed into " + - "assignments before the Exploder began its work: " + - JSON.stringify(node)); -} - -Ep.explodeStatement = function(path, labelId) { - let stmt = path.node; - let self = this; - let before, after, head; - - t.assertStatement(stmt); - - if (labelId) { - t.assertIdentifier(labelId); - } else { - labelId = null; - } - - // Explode BlockStatement nodes even if they do not contain a yield, - // because we don't want or need the curly braces. - if (t.isBlockStatement(stmt)) { - path.get("body").forEach(function (path) { - self.explodeStatement(path); - }); - return; - } - - if (!meta.containsLeap(stmt)) { - // Technically we should be able to avoid emitting the statement - // altogether if !meta.hasSideEffects(stmt), but that leads to - // confusing generated code (for instance, `while (true) {}` just - // disappears) and is probably a more appropriate job for a dedicated - // dead code elimination pass. - self.emit(stmt); - return; - } - - switch (stmt.type) { - case "ExpressionStatement": - self.explodeExpression(path.get("expression"), true); - break; - - case "LabeledStatement": - after = loc(); - - // Did you know you can break from any labeled block statement or - // control structure? Well, you can! Note: when a labeled loop is - // encountered, the leap.LabeledEntry created here will immediately - // enclose a leap.LoopEntry on the leap manager's stack, and both - // entries will have the same label. Though this works just fine, it - // may seem a bit redundant. In theory, we could check here to - // determine if stmt knows how to handle its own label; for example, - // stmt happens to be a WhileStatement and so we know it's going to - // establish its own LoopEntry when we explode it (below). Then this - // LabeledEntry would be unnecessary. Alternatively, we might be - // tempted not to pass stmt.label down into self.explodeStatement, - // because we've handled the label here, but that's a mistake because - // labeled loops may contain labeled continue statements, which is not - // something we can handle in this generic case. All in all, I think a - // little redundancy greatly simplifies the logic of this case, since - // it's clear that we handle all possible LabeledStatements correctly - // here, regardless of whether they interact with the leap manager - // themselves. Also remember that labels and break/continue-to-label - // statements are rare, and all of this logic happens at transform - // time, so it has no additional runtime cost. - self.leapManager.withEntry( - new leap.LabeledEntry(after, stmt.label), - function() { - self.explodeStatement(path.get("body"), stmt.label); - } - ); - - self.mark(after); - - break; - - case "WhileStatement": - before = loc(); - after = loc(); - - self.mark(before); - self.jumpIfNot(self.explodeExpression(path.get("test")), after); - self.leapManager.withEntry( - new leap.LoopEntry(after, before, labelId), - function() { self.explodeStatement(path.get("body")); } - ); - self.jump(before); - self.mark(after); - - break; - - case "DoWhileStatement": - let first = loc(); - let test = loc(); - after = loc(); - - self.mark(first); - self.leapManager.withEntry( - new leap.LoopEntry(after, test, labelId), - function() { self.explode(path.get("body")); } - ); - self.mark(test); - self.jumpIf(self.explodeExpression(path.get("test")), first); - self.mark(after); - - break; - - case "ForStatement": - head = loc(); - let update = loc(); - after = loc(); - - if (stmt.init) { - // We pass true here to indicate that if stmt.init is an expression - // then we do not care about its result. - self.explode(path.get("init"), true); - } - - self.mark(head); - - if (stmt.test) { - self.jumpIfNot(self.explodeExpression(path.get("test")), after); - } else { - // No test means continue unconditionally. - } - - self.leapManager.withEntry( - new leap.LoopEntry(after, update, labelId), - function() { self.explodeStatement(path.get("body")); } - ); - - self.mark(update); - - if (stmt.update) { - // We pass true here to indicate that if stmt.update is an - // expression then we do not care about its result. - self.explode(path.get("update"), true); - } - - self.jump(head); - - self.mark(after); - - break; - - case "TypeCastExpression": - return self.explodeExpression(path.get("expression")); - - case "ForInStatement": - head = loc(); - after = loc(); - - let keyIterNextFn = self.makeTempVar(); - self.emitAssign( - keyIterNextFn, - t.callExpression( - util.runtimeProperty("keys"), - [self.explodeExpression(path.get("right"))] - ) - ); - - self.mark(head); - - let keyInfoTmpVar = self.makeTempVar(); - self.jumpIf( - t.memberExpression( - t.assignmentExpression( - "=", - keyInfoTmpVar, - t.callExpression(keyIterNextFn, []) - ), - t.identifier("done"), - false - ), - after - ); - - self.emitAssign( - stmt.left, - t.memberExpression( - keyInfoTmpVar, - t.identifier("value"), - false - ) - ); - - self.leapManager.withEntry( - new leap.LoopEntry(after, head, labelId), - function() { self.explodeStatement(path.get("body")); } - ); - - self.jump(head); - - self.mark(after); - - break; - - case "BreakStatement": - self.emitAbruptCompletion({ - type: "break", - target: self.leapManager.getBreakLoc(stmt.label) - }); - - break; - - case "ContinueStatement": - self.emitAbruptCompletion({ - type: "continue", - target: self.leapManager.getContinueLoc(stmt.label) - }); - - break; - - case "SwitchStatement": - // Always save the discriminant into a temporary variable in case the - // test expressions overwrite values like context.sent. - let disc = self.emitAssign( - self.makeTempVar(), - self.explodeExpression(path.get("discriminant")) - ); - - after = loc(); - let defaultLoc = loc(); - let condition = defaultLoc; - let caseLocs = []; - - // If there are no cases, .cases might be undefined. - let cases = stmt.cases || []; - - for (let i = cases.length - 1; i >= 0; --i) { - let c = cases[i]; - t.assertSwitchCase(c); - - if (c.test) { - condition = t.conditionalExpression( - t.binaryExpression("===", disc, c.test), - caseLocs[i] = loc(), - condition - ); - } else { - caseLocs[i] = defaultLoc; - } - } - - let discriminant = path.get("discriminant"); - discriminant.replaceWith(condition); - self.jump(self.explodeExpression(discriminant)); - - self.leapManager.withEntry( - new leap.SwitchEntry(after), - function() { - path.get("cases").forEach(function(casePath) { - let i = casePath.key; - self.mark(caseLocs[i]); - - casePath.get("consequent").forEach(function (path) { - self.explodeStatement(path); - }); - }); - } - ); - - self.mark(after); - if (defaultLoc.value === -1) { - self.mark(defaultLoc); - assert.strictEqual(after.value, defaultLoc.value); - } - - break; - - case "IfStatement": - let elseLoc = stmt.alternate && loc(); - after = loc(); - - self.jumpIfNot( - self.explodeExpression(path.get("test")), - elseLoc || after - ); - - self.explodeStatement(path.get("consequent")); - - if (elseLoc) { - self.jump(after); - self.mark(elseLoc); - self.explodeStatement(path.get("alternate")); - } - - self.mark(after); - - break; - - case "ReturnStatement": - self.emitAbruptCompletion({ - type: "return", - value: self.explodeExpression(path.get("argument")) - }); - - break; - - case "WithStatement": - throw new Error("WithStatement not supported in generator functions."); - - case "TryStatement": - after = loc(); - - let handler = stmt.handler; - - let catchLoc = handler && loc(); - let catchEntry = catchLoc && new leap.CatchEntry( - catchLoc, - handler.param - ); - - let finallyLoc = stmt.finalizer && loc(); - let finallyEntry = finallyLoc && - new leap.FinallyEntry(finallyLoc, after); - - let tryEntry = new leap.TryEntry( - self.getUnmarkedCurrentLoc(), - catchEntry, - finallyEntry - ); - - self.tryEntries.push(tryEntry); - self.updateContextPrevLoc(tryEntry.firstLoc); - - self.leapManager.withEntry(tryEntry, function() { - self.explodeStatement(path.get("block")); - - if (catchLoc) { - if (finallyLoc) { - // If we have both a catch block and a finally block, then - // because we emit the catch block first, we need to jump over - // it to the finally block. - self.jump(finallyLoc); - - } else { - // If there is no finally block, then we need to jump over the - // catch block to the fall-through location. - self.jump(after); - } - - self.updateContextPrevLoc(self.mark(catchLoc)); - - let bodyPath = path.get("handler.body"); - let safeParam = self.makeTempVar(); - self.clearPendingException(tryEntry.firstLoc, safeParam); - - bodyPath.traverse(catchParamVisitor, { - safeParam: safeParam, - catchParamName: handler.param.name - }); - - self.leapManager.withEntry(catchEntry, function() { - self.explodeStatement(bodyPath); - }); - } - - if (finallyLoc) { - self.updateContextPrevLoc(self.mark(finallyLoc)); - - self.leapManager.withEntry(finallyEntry, function() { - self.explodeStatement(path.get("finalizer")); - }); - - self.emit(t.returnStatement(t.callExpression( - self.contextProperty("finish"), - [finallyEntry.firstLoc] - ))); - } - }); - - self.mark(after); - - break; - - case "ThrowStatement": - self.emit(t.throwStatement( - self.explodeExpression(path.get("argument")) - )); - - break; - - default: - throw new Error( - "unknown Statement of type " + - JSON.stringify(stmt.type)); - } -}; - -let catchParamVisitor = { - Identifier: function(path, state) { - if (path.node.name === state.catchParamName && util.isReference(path)) { - path.replaceWith(state.safeParam); - } - }, - - Scope: function(path, state) { - if (path.scope.hasOwnBinding(state.catchParamName)) { - // Don't descend into nested scopes that shadow the catch - // parameter with their own declarations. - path.skip(); - } - } -}; - -Ep.emitAbruptCompletion = function(record) { - if (!isValidCompletion(record)) { - assert.ok( - false, - "invalid completion record: " + - JSON.stringify(record) - ); - } - - assert.notStrictEqual( - record.type, "normal", - "normal completions are not abrupt" - ); - - let abruptArgs = [t.stringLiteral(record.type)]; - - if (record.type === "break" || - record.type === "continue") { - t.assertLiteral(record.target); - abruptArgs[1] = record.target; - } else if (record.type === "return" || - record.type === "throw") { - if (record.value) { - t.assertExpression(record.value); - abruptArgs[1] = record.value; - } - } - - this.emit( - t.returnStatement( - t.callExpression( - this.contextProperty("abrupt"), - abruptArgs - ) - ) - ); -}; - -function isValidCompletion(record) { - let type = record.type; - - if (type === "normal") { - return !hasOwn.call(record, "target"); - } - - if (type === "break" || - type === "continue") { - return !hasOwn.call(record, "value") - && t.isLiteral(record.target); - } - - if (type === "return" || - type === "throw") { - return hasOwn.call(record, "value") - && !hasOwn.call(record, "target"); - } - - return false; -} - - -// Not all offsets into emitter.listing are potential jump targets. For -// example, execution typically falls into the beginning of a try block -// without jumping directly there. This method returns the current offset -// without marking it, so that a switch case will not necessarily be -// generated for this offset (I say "not necessarily" because the same -// location might end up being marked in the process of emitting other -// statements). There's no logical harm in marking such locations as jump -// targets, but minimizing the number of switch cases keeps the generated -// code shorter. -Ep.getUnmarkedCurrentLoc = function() { - return t.numericLiteral(this.listing.length); -}; - -// The context.prev property takes the value of context.next whenever we -// evaluate the switch statement discriminant, which is generally good -// enough for tracking the last location we jumped to, but sometimes -// context.prev needs to be more precise, such as when we fall -// successfully out of a try block and into a finally block without -// jumping. This method exists to update context.prev to the freshest -// available location. If we were implementing a full interpreter, we -// would know the location of the current instruction with complete -// precision at all times, but we don't have that luxury here, as it would -// be costly and verbose to set context.prev before every statement. -Ep.updateContextPrevLoc = function(loc) { - if (loc) { - t.assertLiteral(loc); - - if (loc.value === -1) { - // If an uninitialized location literal was passed in, set its value - // to the current this.listing.length. - loc.value = this.listing.length; - } else { - // Otherwise assert that the location matches the current offset. - assert.strictEqual(loc.value, this.listing.length); - } - - } else { - loc = this.getUnmarkedCurrentLoc(); - } - - // Make sure context.prev is up to date in case we fell into this try - // statement without jumping to it. TODO Consider avoiding this - // assignment when we know control must have jumped here. - this.emitAssign(this.contextProperty("prev"), loc); -}; - -Ep.explodeExpression = function(path, ignoreResult) { - let expr = path.node; - if (expr) { - t.assertExpression(expr); - } else { - return expr; - } - - let self = this; - let result; // Used optionally by several cases below. - let after; - - function finish(expr) { - t.assertExpression(expr); - if (ignoreResult) { - self.emit(expr); - } else { - return expr; - } - } - - // If the expression does not contain a leap, then we either emit the - // expression as a standalone statement or return it whole. - if (!meta.containsLeap(expr)) { - return finish(expr); - } - - // If any child contains a leap (such as a yield or labeled continue or - // break statement), then any sibling subexpressions will almost - // certainly have to be exploded in order to maintain the order of their - // side effects relative to the leaping child(ren). - let hasLeapingChildren = meta.containsLeap.onlyChildren(expr); - - // In order to save the rest of explodeExpression from a combinatorial - // trainwreck of special cases, explodeViaTempVar is responsible for - // deciding when a subexpression needs to be "exploded," which is my - // very technical term for emitting the subexpression as an assignment - // to a temporary variable and the substituting the temporary variable - // for the original subexpression. Think of exploded view diagrams, not - // Michael Bay movies. The point of exploding subexpressions is to - // control the precise order in which the generated code realizes the - // side effects of those subexpressions. - function explodeViaTempVar(tempVar, childPath, ignoreChildResult) { - assert.ok( - !ignoreChildResult || !tempVar, - "Ignoring the result of a child expression but forcing it to " + - "be assigned to a temporary variable?" - ); - - let result = self.explodeExpression(childPath, ignoreChildResult); - - if (ignoreChildResult) { - // Side effects already emitted above. - - } else if (tempVar || (hasLeapingChildren && - !t.isLiteral(result))) { - // If tempVar was provided, then the result will always be assigned - // to it, even if the result does not otherwise need to be assigned - // to a temporary variable. When no tempVar is provided, we have - // the flexibility to decide whether a temporary variable is really - // necessary. Unfortunately, in general, a temporary variable is - // required whenever any child contains a yield expression, since it - // is difficult to prove (at all, let alone efficiently) whether - // this result would evaluate to the same value before and after the - // yield (see #206). One narrow case where we can prove it doesn't - // matter (and thus we do not need a temporary variable) is when the - // result in question is a Literal value. - result = self.emitAssign( - tempVar || self.makeTempVar(), - result - ); - } - return result; - } - - // If ignoreResult is true, then we must take full responsibility for - // emitting the expression with all its side effects, and we should not - // return a result. - - switch (expr.type) { - case "MemberExpression": - return finish(t.memberExpression( - self.explodeExpression(path.get("object")), - expr.computed - ? explodeViaTempVar(null, path.get("property")) - : expr.property, - expr.computed - )); - - case "CallExpression": - let calleePath = path.get("callee"); - let argsPath = path.get("arguments"); - - let newCallee; - let newArgs = []; - - let hasLeapingArgs = false; - argsPath.forEach(function(argPath) { - hasLeapingArgs = hasLeapingArgs || - meta.containsLeap(argPath.node); - }); - - if (t.isMemberExpression(calleePath.node)) { - if (hasLeapingArgs) { - // If the arguments of the CallExpression contained any yield - // expressions, then we need to be sure to evaluate the callee - // before evaluating the arguments, but if the callee was a member - // expression, then we must be careful that the object of the - // member expression still gets bound to `this` for the call. - - let newObject = explodeViaTempVar( - // Assign the exploded callee.object expression to a temporary - // variable so that we can use it twice without reevaluating it. - self.makeTempVar(), - calleePath.get("object") - ); - - let newProperty = calleePath.node.computed - ? explodeViaTempVar(null, calleePath.get("property")) - : calleePath.node.property; - - newArgs.unshift(newObject); - - newCallee = t.memberExpression( - t.memberExpression( - newObject, - newProperty, - calleePath.node.computed - ), - t.identifier("call"), - false - ); - - } else { - newCallee = self.explodeExpression(calleePath); - } - - } else { - newCallee = self.explodeExpression(calleePath); - - if (t.isMemberExpression(newCallee)) { - // If the callee was not previously a MemberExpression, then the - // CallExpression was "unqualified," meaning its `this` object - // should be the global object. If the exploded expression has - // become a MemberExpression (e.g. a context property, probably a - // temporary variable), then we need to force it to be unqualified - // by using the (0, object.property)(...) trick; otherwise, it - // will receive the object of the MemberExpression as its `this` - // object. - newCallee = t.sequenceExpression([ - t.numericLiteral(0), - newCallee - ]); - } - } - - argsPath.forEach(function(argPath) { - newArgs.push(explodeViaTempVar(null, argPath)); - }); - - return finish(t.callExpression( - newCallee, - newArgs - )); - - case "NewExpression": - return finish(t.newExpression( - explodeViaTempVar(null, path.get("callee")), - path.get("arguments").map(function(argPath) { - return explodeViaTempVar(null, argPath); - }) - )); - - case "ObjectExpression": - return finish(t.objectExpression( - path.get("properties").map(function(propPath) { - if (propPath.isObjectProperty()) { - return t.objectProperty( - propPath.node.key, - explodeViaTempVar(null, propPath.get("value")), - propPath.node.computed - ); - } else { - return propPath.node; - } - }) - )); - - case "ArrayExpression": - return finish(t.arrayExpression( - path.get("elements").map(function(elemPath) { - return explodeViaTempVar(null, elemPath); - }) - )); - - case "SequenceExpression": - let lastIndex = expr.expressions.length - 1; - - path.get("expressions").forEach(function(exprPath) { - if (exprPath.key === lastIndex) { - result = self.explodeExpression(exprPath, ignoreResult); - } else { - self.explodeExpression(exprPath, true); - } - }); - - return result; - - case "LogicalExpression": - after = loc(); - - if (!ignoreResult) { - result = self.makeTempVar(); - } - - let left = explodeViaTempVar(result, path.get("left")); - - if (expr.operator === "&&") { - self.jumpIfNot(left, after); - } else { - assert.strictEqual(expr.operator, "||"); - self.jumpIf(left, after); - } - - explodeViaTempVar(result, path.get("right"), ignoreResult); - - self.mark(after); - - return result; - - case "ConditionalExpression": - let elseLoc = loc(); - after = loc(); - let test = self.explodeExpression(path.get("test")); - - self.jumpIfNot(test, elseLoc); - - if (!ignoreResult) { - result = self.makeTempVar(); - } - - explodeViaTempVar(result, path.get("consequent"), ignoreResult); - self.jump(after); - - self.mark(elseLoc); - explodeViaTempVar(result, path.get("alternate"), ignoreResult); - - self.mark(after); - - return result; - - case "UnaryExpression": - return finish(t.unaryExpression( - expr.operator, - // Can't (and don't need to) break up the syntax of the argument. - // Think about delete a[b]. - self.explodeExpression(path.get("argument")), - !!expr.prefix - )); - - case "BinaryExpression": - return finish(t.binaryExpression( - expr.operator, - explodeViaTempVar(null, path.get("left")), - explodeViaTempVar(null, path.get("right")) - )); - - case "AssignmentExpression": - return finish(t.assignmentExpression( - expr.operator, - self.explodeExpression(path.get("left")), - self.explodeExpression(path.get("right")) - )); - - case "UpdateExpression": - return finish(t.updateExpression( - expr.operator, - self.explodeExpression(path.get("argument")), - expr.prefix - )); - - case "YieldExpression": - after = loc(); - let arg = expr.argument && self.explodeExpression(path.get("argument")); - - if (arg && expr.delegate) { - let result = self.makeTempVar(); - - self.emit(t.returnStatement(t.callExpression( - self.contextProperty("delegateYield"), [ - arg, - t.stringLiteral(result.property.name), - after - ] - ))); - - self.mark(after); - - return result; - } - - self.emitAssign(self.contextProperty("next"), after); - self.emit(t.returnStatement(arg || null)); - self.mark(after); - - return self.contextProperty("sent"); - - default: - throw new Error( - "unknown Expression of type " + - JSON.stringify(expr.type)); - } -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/hoist.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/hoist.js deleted file mode 100644 index cac505fdf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/hoist.js +++ /dev/null @@ -1,150 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * https://raw.github.com/facebook/regenerator/master/LICENSE file. An - * additional grant of patent rights can be found in the PATENTS file in - * the same directory. - */ - -import * as t from "babel-types"; -let hasOwn = Object.prototype.hasOwnProperty; - -// The hoist function takes a FunctionExpression or FunctionDeclaration -// and replaces any Declaration nodes in its body with assignments, then -// returns a VariableDeclaration containing just the names of the removed -// declarations. -exports.hoist = function(funPath) { - t.assertFunction(funPath.node); - - let vars = {}; - - function varDeclToExpr(vdec, includeIdentifiers) { - t.assertVariableDeclaration(vdec); - // TODO assert.equal(vdec.kind, "var"); - let exprs = []; - - vdec.declarations.forEach(function(dec) { - // Note: We duplicate 'dec.id' here to ensure that the variable declaration IDs don't - // have the same 'loc' value, since that can make sourcemaps and retainLines behave poorly. - vars[dec.id.name] = t.identifier(dec.id.name); - - if (dec.init) { - exprs.push(t.assignmentExpression( - "=", dec.id, dec.init - )); - } else if (includeIdentifiers) { - exprs.push(dec.id); - } - }); - - if (exprs.length === 0) - return null; - - if (exprs.length === 1) - return exprs[0]; - - return t.sequenceExpression(exprs); - } - - funPath.get("body").traverse({ - VariableDeclaration: { - exit: function(path) { - let expr = varDeclToExpr(path.node, false); - if (expr === null) { - path.remove(); - } else { - // We don't need to traverse this expression any further because - // there can't be any new declarations inside an expression. - path.replaceWith(t.expressionStatement(expr)); - } - - // Since the original node has been either removed or replaced, - // avoid traversing it any further. - path.skip(); - } - }, - - ForStatement: function(path) { - let init = path.node.init; - if (t.isVariableDeclaration(init)) { - path.get("init").replaceWith(varDeclToExpr(init, false)); - } - }, - - ForXStatement: function(path) { - let left = path.get("left"); - if (left.isVariableDeclaration()) { - left.replaceWith(varDeclToExpr(left.node, true)); - } - }, - - FunctionDeclaration: function(path) { - let node = path.node; - vars[node.id.name] = node.id; - - let assignment = t.expressionStatement( - t.assignmentExpression( - "=", - node.id, - t.functionExpression( - node.id, - node.params, - node.body, - node.generator, - node.expression - ) - ) - ); - - if (path.parentPath.isBlockStatement()) { - // Insert the assignment form before the first statement in the - // enclosing block. - path.parentPath.unshiftContainer("body", assignment); - - // Remove the function declaration now that we've inserted the - // equivalent assignment form at the beginning of the block. - path.remove(); - } else { - // If the parent node is not a block statement, then we can just - // replace the declaration with the equivalent assignment form - // without worrying about hoisting it. - path.replaceWith(assignment); - } - - // Don't hoist variables out of inner functions. - path.skip(); - }, - - FunctionExpression: function(path) { - // Don't descend into nested function expressions. - path.skip(); - } - }); - - let paramNames = {}; - funPath.get("params").forEach(function(paramPath) { - let param = paramPath.node; - if (t.isIdentifier(param)) { - paramNames[param.name] = param; - } else { - // Variables declared by destructuring parameter patterns will be - // harmlessly re-declared. - } - }); - - let declarations = []; - - Object.keys(vars).forEach(function(name) { - if (!hasOwn.call(paramNames, name)) { - declarations.push(t.variableDeclarator(vars[name], null)); - } - }); - - if (declarations.length === 0) { - return null; // Be sure to handle this case! - } - - return t.variableDeclaration("var", declarations); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/index.js deleted file mode 100644 index 34fea7a15..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/index.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * https://raw.github.com/facebook/regenerator/master/LICENSE file. An - * additional grant of patent rights can be found in the PATENTS file in - * the same directory. - */ - -export default function () { - return require("./visit"); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/leap.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/leap.js deleted file mode 100644 index 047a2bf26..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/leap.js +++ /dev/null @@ -1,174 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * https://raw.github.com/facebook/regenerator/master/LICENSE file. An - * additional grant of patent rights can be found in the PATENTS file in - * the same directory. - */ - -import assert from "assert"; -import * as t from "babel-types"; -import { inherits } from "util"; - -function Entry() { - assert.ok(this instanceof Entry); -} - -function FunctionEntry(returnLoc) { - Entry.call(this); - t.assertLiteral(returnLoc); - this.returnLoc = returnLoc; -} - -inherits(FunctionEntry, Entry); -exports.FunctionEntry = FunctionEntry; - -function LoopEntry(breakLoc, continueLoc, label) { - Entry.call(this); - - t.assertLiteral(breakLoc); - t.assertLiteral(continueLoc); - - if (label) { - t.assertIdentifier(label); - } else { - label = null; - } - - this.breakLoc = breakLoc; - this.continueLoc = continueLoc; - this.label = label; -} - -inherits(LoopEntry, Entry); -exports.LoopEntry = LoopEntry; - -function SwitchEntry(breakLoc) { - Entry.call(this); - t.assertLiteral(breakLoc); - this.breakLoc = breakLoc; -} - -inherits(SwitchEntry, Entry); -exports.SwitchEntry = SwitchEntry; - -function TryEntry(firstLoc, catchEntry, finallyEntry) { - Entry.call(this); - - t.assertLiteral(firstLoc); - - if (catchEntry) { - assert.ok(catchEntry instanceof CatchEntry); - } else { - catchEntry = null; - } - - if (finallyEntry) { - assert.ok(finallyEntry instanceof FinallyEntry); - } else { - finallyEntry = null; - } - - // Have to have one or the other (or both). - assert.ok(catchEntry || finallyEntry); - - this.firstLoc = firstLoc; - this.catchEntry = catchEntry; - this.finallyEntry = finallyEntry; -} - -inherits(TryEntry, Entry); -exports.TryEntry = TryEntry; - -function CatchEntry(firstLoc, paramId) { - Entry.call(this); - - t.assertLiteral(firstLoc); - t.assertIdentifier(paramId); - - this.firstLoc = firstLoc; - this.paramId = paramId; -} - -inherits(CatchEntry, Entry); -exports.CatchEntry = CatchEntry; - -function FinallyEntry(firstLoc, afterLoc) { - Entry.call(this); - t.assertLiteral(firstLoc); - t.assertLiteral(afterLoc); - this.firstLoc = firstLoc; - this.afterLoc = afterLoc; -} - -inherits(FinallyEntry, Entry); -exports.FinallyEntry = FinallyEntry; - -function LabeledEntry(breakLoc, label) { - Entry.call(this); - - t.assertLiteral(breakLoc); - t.assertIdentifier(label); - - this.breakLoc = breakLoc; - this.label = label; -} - -inherits(LabeledEntry, Entry); -exports.LabeledEntry = LabeledEntry; - -function LeapManager(emitter) { - assert.ok(this instanceof LeapManager); - - let Emitter = require("./emit").Emitter; - assert.ok(emitter instanceof Emitter); - - this.emitter = emitter; - this.entryStack = [new FunctionEntry(emitter.finalLoc)]; -} - -let LMp = LeapManager.prototype; -exports.LeapManager = LeapManager; - -LMp.withEntry = function(entry, callback) { - assert.ok(entry instanceof Entry); - this.entryStack.push(entry); - try { - callback.call(this.emitter); - } finally { - let popped = this.entryStack.pop(); - assert.strictEqual(popped, entry); - } -}; - -LMp._findLeapLocation = function(property, label) { - for (let i = this.entryStack.length - 1; i >= 0; --i) { - let entry = this.entryStack[i]; - let loc = entry[property]; - if (loc) { - if (label) { - if (entry.label && - entry.label.name === label.name) { - return loc; - } - } else if (entry instanceof LabeledEntry) { - // Ignore LabeledEntry entries unless we are actually breaking to - // a label. - } else { - return loc; - } - } - } - - return null; -}; - -LMp.getBreakLoc = function(label) { - return this._findLeapLocation("breakLoc", label); -}; - -LMp.getContinueLoc = function(label) { - return this._findLeapLocation("continueLoc", label); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/meta.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/meta.js deleted file mode 100644 index dc7ffcdd4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/meta.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * https://raw.github.com/facebook/regenerator/master/LICENSE file. An - * additional grant of patent rights can be found in the PATENTS file in - * the same directory. - */ - -import assert from "assert"; -let m = require("private").makeAccessor(); -import * as t from "babel-types"; -let hasOwn = Object.prototype.hasOwnProperty; - -function makePredicate(propertyName, knownTypes) { - function onlyChildren(node) { - t.assertNode(node); - - // Assume no side effects until we find out otherwise. - let result = false; - - function check(child) { - if (result) { - // Do nothing. - } else if (Array.isArray(child)) { - child.some(check); - } else if (t.isNode(child)) { - assert.strictEqual(result, false); - result = predicate(child); - } - return result; - } - - let keys = t.VISITOR_KEYS[node.type]; - if (keys) { - for (let i = 0; i < keys.length; i++) { - let key = keys[i]; - let child = node[key]; - check(child); - } - } - - return result; - } - - function predicate(node) { - t.assertNode(node); - - let meta = m(node); - if (hasOwn.call(meta, propertyName)) - return meta[propertyName]; - - // Certain types are "opaque," which means they have no side - // effects or leaps and we don't care about their subexpressions. - if (hasOwn.call(opaqueTypes, node.type)) - return meta[propertyName] = false; - - if (hasOwn.call(knownTypes, node.type)) - return meta[propertyName] = true; - - return meta[propertyName] = onlyChildren(node); - } - - predicate.onlyChildren = onlyChildren; - - return predicate; -} - -let opaqueTypes = { - FunctionExpression: true -}; - -// These types potentially have side effects regardless of what side -// effects their subexpressions have. -let sideEffectTypes = { - CallExpression: true, // Anything could happen! - ForInStatement: true, // Modifies the key variable. - UnaryExpression: true, // Think delete. - BinaryExpression: true, // Might invoke .toString() or .valueOf(). - AssignmentExpression: true, // Side-effecting by definition. - UpdateExpression: true, // Updates are essentially assignments. - NewExpression: true // Similar to CallExpression. -}; - -// These types are the direct cause of all leaps in control flow. -let leapTypes = { - YieldExpression: true, - BreakStatement: true, - ContinueStatement: true, - ReturnStatement: true, - ThrowStatement: true -}; - -// All leap types are also side effect types. -for (let type in leapTypes) { - if (hasOwn.call(leapTypes, type)) { - sideEffectTypes[type] = leapTypes[type]; - } -} - -exports.hasSideEffects = makePredicate("hasSideEffects", sideEffectTypes); -exports.containsLeap = makePredicate("containsLeap", leapTypes); diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/util.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/util.js deleted file mode 100644 index 78bfa0f28..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/util.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * https://raw.github.com/facebook/regenerator/master/LICENSE file. An - * additional grant of patent rights can be found in the PATENTS file in - * the same directory. - */ - -import * as t from "babel-types"; - -export function runtimeProperty(name) { - return t.memberExpression( - t.identifier("regeneratorRuntime"), - t.identifier(name), - false - ); -} - -export function isReference(path) { - return path.isReferenced() || path.parentPath.isAssignmentExpression({ left: path.node }); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/visit.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/visit.js deleted file mode 100644 index 8d96f2b40..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-regenerator/src/visit.js +++ /dev/null @@ -1,269 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * https://raw.github.com/facebook/regenerator/master/LICENSE file. An - * additional grant of patent rights can be found in the PATENTS file in - * the same directory. - */ - -import assert from "assert"; -import * as t from "babel-types"; -import { hoist } from "./hoist"; -import { Emitter } from "./emit"; -import * as util from "./util"; - -let getMarkInfo = require("private").makeAccessor(); - -exports.visitor = { - Function: { - exit: function(path, state) { - let node = path.node; - - if (node.generator) { - if (node.async) { - // Async generator - if (state.opts.asyncGenerators === false) return; - } else { - // Plain generator - if (state.opts.generators === false) return; - } - } else if (node.async) { - // Async function - if (state.opts.async === false) return; - } else { - // Not a generator or async function. - return; - } - - let contextId = path.scope.generateUidIdentifier("context"); - let argsId = path.scope.generateUidIdentifier("args"); - - path.ensureBlock(); - let bodyBlockPath = path.get("body"); - - if (node.async) { - bodyBlockPath.traverse(awaitVisitor); - } - - bodyBlockPath.traverse(functionSentVisitor, { - context: contextId - }); - - let outerBody = []; - let innerBody = []; - - bodyBlockPath.get("body").forEach(function(childPath) { - let node = childPath.node; - if (node && node._blockHoist != null) { - outerBody.push(node); - } else { - innerBody.push(node); - } - }); - - if (outerBody.length > 0) { - // Only replace the inner body if we actually hoisted any statements - // to the outer body. - bodyBlockPath.node.body = innerBody; - } - - let outerFnExpr = getOuterFnExpr(path); - // Note that getOuterFnExpr has the side-effect of ensuring that the - // function has a name (so node.id will always be an Identifier), even - // if a temporary name has to be synthesized. - t.assertIdentifier(node.id); - let innerFnId = t.identifier(node.id.name + "$"); - - // Turn all declarations into vars, and replace the original - // declarations with equivalent assignment expressions. - let vars = hoist(path); - - let didRenameArguments = renameArguments(path, argsId); - if (didRenameArguments) { - vars = vars || t.variableDeclaration("var", []); - vars.declarations.push(t.variableDeclarator( - argsId, t.identifier("arguments") - )); - } - - let emitter = new Emitter(contextId); - emitter.explode(path.get("body")); - - if (vars && vars.declarations.length > 0) { - outerBody.push(vars); - } - - let wrapArgs = [ - emitter.getContextFunction(innerFnId), - // Async functions that are not generators don't care about the - // outer function because they don't need it to be marked and don't - // inherit from its .prototype. - node.generator ? outerFnExpr : t.nullLiteral(), - t.thisExpression() - ]; - - let tryLocsList = emitter.getTryLocsList(); - if (tryLocsList) { - wrapArgs.push(tryLocsList); - } - - let wrapCall = t.callExpression( - util.runtimeProperty(node.async ? "async" : "wrap"), - wrapArgs - ); - - outerBody.push(t.returnStatement(wrapCall)); - node.body = t.blockStatement(outerBody); - - let wasGeneratorFunction = node.generator; - if (wasGeneratorFunction) { - node.generator = false; - } - - if (node.async) { - node.async = false; - } - - if (wasGeneratorFunction && t.isExpression(node)) { - path.replaceWith(t.callExpression(util.runtimeProperty("mark"), [node])); - } - - // Generators are processed in 'exit' handlers so that regenerator only has to run on - // an ES5 AST, but that means traversal will not pick up newly inserted references - // to things like 'regeneratorRuntime'. To avoid this, we explicitly requeue. - path.requeue(); - } - } -}; - -// Given a NodePath for a Function, return an Expression node that can be -// used to refer reliably to the function object from inside the function. -// This expression is essentially a replacement for arguments.callee, with -// the key advantage that it works in strict mode. -function getOuterFnExpr(funPath) { - let node = funPath.node; - t.assertFunction(node); - - if (!node.id) { - // Default-exported function declarations, and function expressions may not - // have a name to reference, so we explicitly add one. - node.id = funPath.scope.parent.generateUidIdentifier("callee"); - } - - if (node.generator && // Non-generator functions don't need to be marked. - t.isFunctionDeclaration(node)) { - let pp = funPath.findParent(function (path) { - return path.isProgram() || path.isBlockStatement(); - }); - - if (!pp) { - return node.id; - } - - let markDecl = getRuntimeMarkDecl(pp); - let markedArray = markDecl.declarations[0].id; - let funDeclIdArray = markDecl.declarations[0].init.callee.object; - t.assertArrayExpression(funDeclIdArray); - - let index = funDeclIdArray.elements.length; - funDeclIdArray.elements.push(node.id); - - return t.memberExpression( - markedArray, - t.numericLiteral(index), - true - ); - } - - return node.id; -} - -function getRuntimeMarkDecl(blockPath) { - let block = blockPath.node; - assert.ok(Array.isArray(block.body)); - - let info = getMarkInfo(block); - if (info.decl) { - return info.decl; - } - - info.decl = t.variableDeclaration("var", [ - t.variableDeclarator( - blockPath.scope.generateUidIdentifier("marked"), - t.callExpression( - t.memberExpression( - t.arrayExpression([]), - t.identifier("map"), - false - ), - [util.runtimeProperty("mark")] - ) - ) - ]); - - blockPath.unshiftContainer("body", info.decl); - - return info.decl; -} - -function renameArguments(funcPath, argsId) { - let state = { - didRenameArguments: false, - argsId: argsId - }; - - funcPath.traverse(argumentsVisitor, state); - - // If the traversal replaced any arguments references, then we need to - // alias the outer function's arguments binding (be it the implicit - // arguments object or some other parameter or variable) to the variable - // named by argsId. - return state.didRenameArguments; -} - -let argumentsVisitor = { - "FunctionExpression|FunctionDeclaration": function(path) { - path.skip(); - }, - - Identifier: function(path, state) { - if (path.node.name === "arguments" && util.isReference(path)) { - path.replaceWith(state.argsId); - state.didRenameArguments = true; - } - } -}; - -let functionSentVisitor = { - MetaProperty(path) { - let { node } = path; - - if (node.meta.name === "function" && node.property.name === "sent") { - path.replaceWith(t.memberExpression(this.context, t.identifier("_sent"))); - } - } -}; - -let awaitVisitor = { - Function: function(path) { - path.skip(); // Don't descend into nested function scopes. - }, - - AwaitExpression: function(path) { - // Convert await expressions to yield expressions. - let argument = path.node.argument; - - // Transforming `await x` to `yield regeneratorRuntime.awrap(x)` - // causes the argument to be wrapped in such a way that the runtime - // can distinguish between awaited and merely yielded values. - path.replaceWith(t.yieldExpression( - t.callExpression( - util.runtimeProperty("awrap"), - [argument] - ), - false - )); - } -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/README.md deleted file mode 100644 index 638d1f83a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# babel-plugin-transform-strict-mode - -Add the `"use strict";` directive to the top of your files if it is not there -already. - -> This plugin may be enabled via `babel-plugin-transform-es2015-modules-commonjs`. -> If you wish to disable it you can either turn `strict` off or pass -> `strictMode: false` as an option to the commonjs transform. - -## Installation - -```sh -$ npm install babel-plugin-transform-strict-mode -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```js -// without options -{ - "plugins": ["transform-strict-mode"] -} - -// with options -{ - "plugins": [ - ["transform-strict-mode", { - "strict": true - }] - ] -} -``` - -### Via CLI - -```sh -$ babel --plugins transform-strict-mode script.js -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - plugins: ["transform-strict-mode"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/lib/index.js deleted file mode 100644 index 3b60e64f2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/lib/index.js +++ /dev/null @@ -1,49 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function () { - return { - visitor: { - Program: function Program(path, state) { - if (state.opts.strict === false || state.opts.strictMode === false) return; - - var node = path.node; - - - for (var _iterator = node.directives, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var directive = _ref; - - if (directive.value.value === "use strict") return; - } - - path.unshiftContainer("directives", t.directive(t.directiveLiteral("use strict"))); - } - } - }; -}; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/package.json deleted file mode 100644 index 934aec2dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-strict-mode/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "babel-plugin-transform-strict-mode@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs" - ] - ], - "_from": "babel-plugin-transform-strict-mode@>=6.18.0 <7.0.0", - "_id": "babel-plugin-transform-strict-mode@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-plugin-transform-strict-mode", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-plugin-transform-strict-mode-6.18.0.tgz_1477343948881_0.8199489524122328" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-plugin-transform-strict-mode", - "raw": "babel-plugin-transform-strict-mode@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-transform-es2015-modules-commonjs" - ], - "_resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.18.0.tgz", - "_shasum": "df7cf2991fe046f44163dcd110d5ca43bc652b9d", - "_shrinkwrap": null, - "_spec": "babel-plugin-transform-strict-mode@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-transform-es2015-modules-commonjs", - "dependencies": { - "babel-runtime": "^6.0.0", - "babel-types": "^6.18.0" - }, - "description": "This plugin places a 'use strict'; directive at the top of all files to enable strict mode", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "df7cf2991fe046f44163dcd110d5ca43bc652b9d", - "tarball": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.18.0.tgz" - }, - "keywords": [ - "babel-plugin" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-plugin-transform-strict-mode", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-strict-mode" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/README.md deleted file mode 100644 index 588606a94..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# babel-preset-es2015 - -> Babel preset for all es2015 plugins. - -## Install - -```sh -$ npm install --save-dev babel-preset-es2015 -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "presets": ["es2015"] -} -``` - -### Via CLI - -```sh -$ babel script.js --presets es2015 -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - presets: ["es2015"] -}); -``` - -## Options - -* `loose` - Enable "loose" transformations for any plugins in this preset that allow them (Disabled by default). -* `modules` - Enable transformation of ES6 module syntax to another module type (Enabled by default to "commonjs"). - * Can be `false` to not transform modules, or one of `["amd", "umd", "systemjs", "commonjs"]` - -``` -{ - presets: [ - ["es2015", {"loose": true, "modules": "amd"}] - ] -} -{ - presets: [ - ["es2015", {"loose": true, "modules": false}] - ] -} -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/lib/index.js deleted file mode 100644 index dcf46ab2f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/lib/index.js +++ /dev/null @@ -1,140 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _babelPluginTransformEs2015TemplateLiterals = require("babel-plugin-transform-es2015-template-literals"); - -var _babelPluginTransformEs2015TemplateLiterals2 = _interopRequireDefault(_babelPluginTransformEs2015TemplateLiterals); - -var _babelPluginTransformEs2015Literals = require("babel-plugin-transform-es2015-literals"); - -var _babelPluginTransformEs2015Literals2 = _interopRequireDefault(_babelPluginTransformEs2015Literals); - -var _babelPluginTransformEs2015FunctionName = require("babel-plugin-transform-es2015-function-name"); - -var _babelPluginTransformEs2015FunctionName2 = _interopRequireDefault(_babelPluginTransformEs2015FunctionName); - -var _babelPluginTransformEs2015ArrowFunctions = require("babel-plugin-transform-es2015-arrow-functions"); - -var _babelPluginTransformEs2015ArrowFunctions2 = _interopRequireDefault(_babelPluginTransformEs2015ArrowFunctions); - -var _babelPluginTransformEs2015BlockScopedFunctions = require("babel-plugin-transform-es2015-block-scoped-functions"); - -var _babelPluginTransformEs2015BlockScopedFunctions2 = _interopRequireDefault(_babelPluginTransformEs2015BlockScopedFunctions); - -var _babelPluginTransformEs2015Classes = require("babel-plugin-transform-es2015-classes"); - -var _babelPluginTransformEs2015Classes2 = _interopRequireDefault(_babelPluginTransformEs2015Classes); - -var _babelPluginTransformEs2015ObjectSuper = require("babel-plugin-transform-es2015-object-super"); - -var _babelPluginTransformEs2015ObjectSuper2 = _interopRequireDefault(_babelPluginTransformEs2015ObjectSuper); - -var _babelPluginTransformEs2015ShorthandProperties = require("babel-plugin-transform-es2015-shorthand-properties"); - -var _babelPluginTransformEs2015ShorthandProperties2 = _interopRequireDefault(_babelPluginTransformEs2015ShorthandProperties); - -var _babelPluginTransformEs2015DuplicateKeys = require("babel-plugin-transform-es2015-duplicate-keys"); - -var _babelPluginTransformEs2015DuplicateKeys2 = _interopRequireDefault(_babelPluginTransformEs2015DuplicateKeys); - -var _babelPluginTransformEs2015ComputedProperties = require("babel-plugin-transform-es2015-computed-properties"); - -var _babelPluginTransformEs2015ComputedProperties2 = _interopRequireDefault(_babelPluginTransformEs2015ComputedProperties); - -var _babelPluginTransformEs2015ForOf = require("babel-plugin-transform-es2015-for-of"); - -var _babelPluginTransformEs2015ForOf2 = _interopRequireDefault(_babelPluginTransformEs2015ForOf); - -var _babelPluginTransformEs2015StickyRegex = require("babel-plugin-transform-es2015-sticky-regex"); - -var _babelPluginTransformEs2015StickyRegex2 = _interopRequireDefault(_babelPluginTransformEs2015StickyRegex); - -var _babelPluginTransformEs2015UnicodeRegex = require("babel-plugin-transform-es2015-unicode-regex"); - -var _babelPluginTransformEs2015UnicodeRegex2 = _interopRequireDefault(_babelPluginTransformEs2015UnicodeRegex); - -var _babelPluginCheckEs2015Constants = require("babel-plugin-check-es2015-constants"); - -var _babelPluginCheckEs2015Constants2 = _interopRequireDefault(_babelPluginCheckEs2015Constants); - -var _babelPluginTransformEs2015Spread = require("babel-plugin-transform-es2015-spread"); - -var _babelPluginTransformEs2015Spread2 = _interopRequireDefault(_babelPluginTransformEs2015Spread); - -var _babelPluginTransformEs2015Parameters = require("babel-plugin-transform-es2015-parameters"); - -var _babelPluginTransformEs2015Parameters2 = _interopRequireDefault(_babelPluginTransformEs2015Parameters); - -var _babelPluginTransformEs2015Destructuring = require("babel-plugin-transform-es2015-destructuring"); - -var _babelPluginTransformEs2015Destructuring2 = _interopRequireDefault(_babelPluginTransformEs2015Destructuring); - -var _babelPluginTransformEs2015BlockScoping = require("babel-plugin-transform-es2015-block-scoping"); - -var _babelPluginTransformEs2015BlockScoping2 = _interopRequireDefault(_babelPluginTransformEs2015BlockScoping); - -var _babelPluginTransformEs2015TypeofSymbol = require("babel-plugin-transform-es2015-typeof-symbol"); - -var _babelPluginTransformEs2015TypeofSymbol2 = _interopRequireDefault(_babelPluginTransformEs2015TypeofSymbol); - -var _babelPluginTransformEs2015ModulesCommonjs = require("babel-plugin-transform-es2015-modules-commonjs"); - -var _babelPluginTransformEs2015ModulesCommonjs2 = _interopRequireDefault(_babelPluginTransformEs2015ModulesCommonjs); - -var _babelPluginTransformEs2015ModulesSystemjs = require("babel-plugin-transform-es2015-modules-systemjs"); - -var _babelPluginTransformEs2015ModulesSystemjs2 = _interopRequireDefault(_babelPluginTransformEs2015ModulesSystemjs); - -var _babelPluginTransformEs2015ModulesAmd = require("babel-plugin-transform-es2015-modules-amd"); - -var _babelPluginTransformEs2015ModulesAmd2 = _interopRequireDefault(_babelPluginTransformEs2015ModulesAmd); - -var _babelPluginTransformEs2015ModulesUmd = require("babel-plugin-transform-es2015-modules-umd"); - -var _babelPluginTransformEs2015ModulesUmd2 = _interopRequireDefault(_babelPluginTransformEs2015ModulesUmd); - -var _babelPluginTransformRegenerator = require("babel-plugin-transform-regenerator"); - -var _babelPluginTransformRegenerator2 = _interopRequireDefault(_babelPluginTransformRegenerator); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function preset(context) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var moduleTypes = ["commonjs", "amd", "umd", "systemjs"]; - var loose = false; - var modules = "commonjs"; - var spec = false; - - if (opts !== undefined) { - if (opts.loose !== undefined) loose = opts.loose; - if (opts.modules !== undefined) modules = opts.modules; - if (opts.spec !== undefined) spec = opts.spec; - } - - if (typeof loose !== "boolean") throw new Error("Preset es2015 'loose' option must be a boolean."); - if (typeof spec !== "boolean") throw new Error("Preset es2015 'spec' option must be a boolean."); - if (modules !== false && moduleTypes.indexOf(modules) === -1) { - throw new Error("Preset es2015 'modules' option must be 'false' to indicate no modules\n" + "or a module type which be be one of: 'commonjs' (default), 'amd', 'umd', 'systemjs'"); - } - - var optsLoose = { loose: loose }; - - return { - plugins: [[_babelPluginTransformEs2015TemplateLiterals2.default, { loose: loose, spec: spec }], _babelPluginTransformEs2015Literals2.default, _babelPluginTransformEs2015FunctionName2.default, [_babelPluginTransformEs2015ArrowFunctions2.default, { spec: spec }], _babelPluginTransformEs2015BlockScopedFunctions2.default, [_babelPluginTransformEs2015Classes2.default, optsLoose], _babelPluginTransformEs2015ObjectSuper2.default, _babelPluginTransformEs2015ShorthandProperties2.default, _babelPluginTransformEs2015DuplicateKeys2.default, [_babelPluginTransformEs2015ComputedProperties2.default, optsLoose], [_babelPluginTransformEs2015ForOf2.default, optsLoose], _babelPluginTransformEs2015StickyRegex2.default, _babelPluginTransformEs2015UnicodeRegex2.default, _babelPluginCheckEs2015Constants2.default, [_babelPluginTransformEs2015Spread2.default, optsLoose], _babelPluginTransformEs2015Parameters2.default, [_babelPluginTransformEs2015Destructuring2.default, optsLoose], _babelPluginTransformEs2015BlockScoping2.default, _babelPluginTransformEs2015TypeofSymbol2.default, modules === "commonjs" && [_babelPluginTransformEs2015ModulesCommonjs2.default, optsLoose], modules === "systemjs" && [_babelPluginTransformEs2015ModulesSystemjs2.default, optsLoose], modules === "amd" && [_babelPluginTransformEs2015ModulesAmd2.default, optsLoose], modules === "umd" && [_babelPluginTransformEs2015ModulesUmd2.default, optsLoose], [_babelPluginTransformRegenerator2.default, { async: false, asyncGenerators: false }]].filter(Boolean) }; -} - -var oldConfig = preset({}); - -exports.default = oldConfig; - -Object.defineProperty(oldConfig, "buildPreset", { - configurable: true, - writable: true, - - enumerable: false, - value: preset -}); -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/package.json deleted file mode 100644 index 4e36792b3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-es2015/package.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "_args": [ - [ - "babel-preset-es2015", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6" - ] - ], - "_from": "babel-preset-es2015@latest", - "_id": "babel-preset-es2015@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-preset-es2015", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-preset-es2015-6.18.0.tgz_1477343949614_0.9732493553310633" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-preset-es2015", - "raw": "babel-preset-es2015", - "rawSpec": "", - "scope": null, - "spec": "latest", - "type": "tag" - }, - "_requiredBy": [ - "#DEV:/" - ], - "_resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.18.0.tgz", - "_shasum": "b8c70df84ec948c43dcf2bf770e988eb7da88312", - "_shrinkwrap": null, - "_spec": "babel-preset-es2015", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "babel-plugin-check-es2015-constants": "^6.3.13", - "babel-plugin-transform-es2015-arrow-functions": "^6.3.13", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.3.13", - "babel-plugin-transform-es2015-block-scoping": "^6.18.0", - "babel-plugin-transform-es2015-classes": "^6.18.0", - "babel-plugin-transform-es2015-computed-properties": "^6.3.13", - "babel-plugin-transform-es2015-destructuring": "^6.18.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.6.0", - "babel-plugin-transform-es2015-for-of": "^6.18.0", - "babel-plugin-transform-es2015-function-name": "^6.9.0", - "babel-plugin-transform-es2015-literals": "^6.3.13", - "babel-plugin-transform-es2015-modules-amd": "^6.18.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.18.0", - "babel-plugin-transform-es2015-modules-systemjs": "^6.18.0", - "babel-plugin-transform-es2015-modules-umd": "^6.18.0", - "babel-plugin-transform-es2015-object-super": "^6.3.13", - "babel-plugin-transform-es2015-parameters": "^6.18.0", - "babel-plugin-transform-es2015-shorthand-properties": "^6.18.0", - "babel-plugin-transform-es2015-spread": "^6.3.13", - "babel-plugin-transform-es2015-sticky-regex": "^6.3.13", - "babel-plugin-transform-es2015-template-literals": "^6.6.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.18.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.3.13", - "babel-plugin-transform-regenerator": "^6.16.0" - }, - "description": "Babel preset for all es2015 plugins.", - "devDependencies": { - "babel-helper-plugin-test-runner": "^6.18.0", - "babel-helper-transform-fixture-test-runner": "^6.18.0" - }, - "directories": {}, - "dist": { - "shasum": "b8c70df84ec948c43dcf2bf770e988eb7da88312", - "tarball": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.18.0.tgz" - }, - "homepage": "https://babeljs.io/", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-preset-es2015", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-preset-es2015" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/README.md deleted file mode 100644 index e43ae3014..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-preset-jest - -> Babel preset for all Jest plugins. This preset is automatically included when using [babel-jest](https://github.com/facebook/jest/tree/master/packages/babel-jest). - -## Install - -```sh -$ npm install --save-dev babel-preset-jest -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "presets": ["jest"] -} -``` - -### Via CLI - -```sh -$ babel script.js --presets jest -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - presets: ["jest"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/index.js deleted file mode 100644 index b86522ff0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/index.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -module.exports = { - plugins: [ - require('babel-plugin-jest-hoist'), - ], -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/package.json deleted file mode 100644 index 23e39c1ba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-jest/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_args": [ - [ - "babel-preset-jest@^17.0.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-jest" - ] - ], - "_from": "babel-preset-jest@>=17.0.2 <18.0.0", - "_id": "babel-preset-jest@17.0.2", - "_inCache": true, - "_installable": true, - "_location": "/babel-preset-jest", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-preset-jest-17.0.2.tgz_1479170355634_0.8119601616635919" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "babel-preset-jest", - "raw": "babel-preset-jest@^17.0.2", - "rawSpec": "^17.0.2", - "scope": null, - "spec": ">=17.0.2 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-jest" - ], - "_resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-17.0.2.tgz", - "_shasum": "141e935debe164aaa0364c220d31ccb2176493b2", - "_shrinkwrap": null, - "_spec": "babel-preset-jest@^17.0.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-jest", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "babel-plugin-jest-hoist": "^17.0.2" - }, - "description": "> Babel preset for all Jest plugins. This preset is automatically included when using [babel-jest](https://github.com/facebook/jest/tree/master/packages/babel-jest).", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "141e935debe164aaa0364c220d31ccb2176493b2", - "tarball": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-17.0.2.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - } - ], - "name": "babel-preset-jest", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": {}, - "version": "17.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/README.md deleted file mode 100644 index 9b50a4be2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-preset-stage-1 - -> Babel preset for stage 1 plugins. - -## Install - -```sh -$ npm install --save-dev babel-preset-stage-1 -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "presets": ["stage-1"] -} -``` - -### Via CLI - -```sh -$ babel script.js --presets stage-1 -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - presets: ["stage-1"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/lib/index.js deleted file mode 100644 index c514f01e5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/lib/index.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _babelPresetStage = require("babel-preset-stage-2"); - -var _babelPresetStage2 = _interopRequireDefault(_babelPresetStage); - -var _babelPluginTransformClassConstructorCall = require("babel-plugin-transform-class-constructor-call"); - -var _babelPluginTransformClassConstructorCall2 = _interopRequireDefault(_babelPluginTransformClassConstructorCall); - -var _babelPluginTransformExportExtensions = require("babel-plugin-transform-export-extensions"); - -var _babelPluginTransformExportExtensions2 = _interopRequireDefault(_babelPluginTransformExportExtensions); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = { - presets: [_babelPresetStage2.default], - plugins: [_babelPluginTransformClassConstructorCall2.default, _babelPluginTransformExportExtensions2.default] -}; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/package.json deleted file mode 100644 index 78b74088f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_args": [ - [ - "babel-preset-stage-1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6" - ] - ], - "_from": "babel-preset-stage-1@latest", - "_id": "babel-preset-stage-1@6.16.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-preset-stage-1", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/babel-preset-stage-1-6.16.0.tgz_1475091542098_0.04124958463944495" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-preset-stage-1", - "raw": "babel-preset-stage-1", - "rawSpec": "", - "scope": null, - "spec": "latest", - "type": "tag" - }, - "_requiredBy": [ - "#DEV:/" - ], - "_resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.16.0.tgz", - "_shasum": "9d31fbbdae7b17c549fd3ac93e3cf6902695e479", - "_shrinkwrap": null, - "_spec": "babel-preset-stage-1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "babel-plugin-transform-class-constructor-call": "^6.3.13", - "babel-plugin-transform-export-extensions": "^6.3.13", - "babel-preset-stage-2": "^6.16.0" - }, - "description": "Babel preset for stage 1 plugins", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "9d31fbbdae7b17c549fd3ac93e3cf6902695e479", - "tarball": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.16.0.tgz" - }, - "homepage": "https://babeljs.io/", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - } - ], - "name": "babel-preset-stage-1", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-preset-stage-1" - }, - "scripts": {}, - "version": "6.16.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/README.md deleted file mode 100644 index aeadc27b7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-preset-stage-2 - -> Babel preset for stage 2 plugins. - -## Install - -```sh -$ npm install --save-dev babel-preset-stage-2 -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "presets": ["stage-2"] -} -``` - -### Via CLI - -```sh -$ babel script.js --presets stage-2 -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - presets: ["stage-2"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/lib/index.js deleted file mode 100644 index a2fced6f7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/lib/index.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _babelPresetStage = require("babel-preset-stage-3"); - -var _babelPresetStage2 = _interopRequireDefault(_babelPresetStage); - -var _babelPluginTransformClassProperties = require("babel-plugin-transform-class-properties"); - -var _babelPluginTransformClassProperties2 = _interopRequireDefault(_babelPluginTransformClassProperties); - -var _babelPluginTransformDecorators = require("babel-plugin-transform-decorators"); - -var _babelPluginTransformDecorators2 = _interopRequireDefault(_babelPluginTransformDecorators); - -var _babelPluginSyntaxDynamicImport = require("babel-plugin-syntax-dynamic-import"); - -var _babelPluginSyntaxDynamicImport2 = _interopRequireDefault(_babelPluginSyntaxDynamicImport); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = { - presets: [_babelPresetStage2.default], - plugins: [_babelPluginSyntaxDynamicImport2.default, _babelPluginTransformClassProperties2.default, _babelPluginTransformDecorators2.default] -}; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/package.json deleted file mode 100644 index d230b0603..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_args": [ - [ - "babel-preset-stage-2@^6.16.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1" - ] - ], - "_from": "babel-preset-stage-2@>=6.16.0 <7.0.0", - "_id": "babel-preset-stage-2@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-preset-stage-2", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-preset-stage-2-6.18.0.tgz_1477343950612_0.7897514707874507" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-preset-stage-2", - "raw": "babel-preset-stage-2@^6.16.0", - "rawSpec": "^6.16.0", - "scope": null, - "spec": ">=6.16.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-stage-1" - ], - "_resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.18.0.tgz", - "_shasum": "9eb7bf9a8e91c68260d5ba7500493caaada4b5b5", - "_shrinkwrap": null, - "_spec": "babel-preset-stage-2@^6.16.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-1", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "babel-plugin-syntax-dynamic-import": "^6.18.0", - "babel-plugin-transform-class-properties": "^6.18.0", - "babel-plugin-transform-decorators": "^6.13.0", - "babel-preset-stage-3": "^6.17.0" - }, - "description": "Babel preset for stage 2 plugins", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "9eb7bf9a8e91c68260d5ba7500493caaada4b5b5", - "tarball": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.18.0.tgz" - }, - "homepage": "https://babeljs.io/", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-preset-stage-2", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-preset-stage-2" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/README.md deleted file mode 100644 index a3807019a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# babel-preset-stage-3 - -> Babel preset for stage 3 plugins. - -## Install - -```sh -$ npm install --save-dev babel-preset-stage-3 -``` - -## Usage - -### Via `.babelrc` (Recommended) - -**.babelrc** - -```json -{ - "presets": ["stage-3"] -} -``` - -### Via CLI - -```sh -$ babel script.js --presets stage-3 -``` - -### Via Node API - -```javascript -require("babel-core").transform("code", { - presets: ["stage-3"] -}); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/lib/index.js deleted file mode 100644 index 8336b9582..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/lib/index.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _babelPluginSyntaxTrailingFunctionCommas = require("babel-plugin-syntax-trailing-function-commas"); - -var _babelPluginSyntaxTrailingFunctionCommas2 = _interopRequireDefault(_babelPluginSyntaxTrailingFunctionCommas); - -var _babelPluginTransformAsyncToGenerator = require("babel-plugin-transform-async-to-generator"); - -var _babelPluginTransformAsyncToGenerator2 = _interopRequireDefault(_babelPluginTransformAsyncToGenerator); - -var _babelPluginTransformExponentiationOperator = require("babel-plugin-transform-exponentiation-operator"); - -var _babelPluginTransformExponentiationOperator2 = _interopRequireDefault(_babelPluginTransformExponentiationOperator); - -var _babelPluginTransformObjectRestSpread = require("babel-plugin-transform-object-rest-spread"); - -var _babelPluginTransformObjectRestSpread2 = _interopRequireDefault(_babelPluginTransformObjectRestSpread); - -var _babelPluginTransformAsyncGeneratorFunctions = require("babel-plugin-transform-async-generator-functions"); - -var _babelPluginTransformAsyncGeneratorFunctions2 = _interopRequireDefault(_babelPluginTransformAsyncGeneratorFunctions); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = { - plugins: [_babelPluginSyntaxTrailingFunctionCommas2.default, _babelPluginTransformAsyncToGenerator2.default, _babelPluginTransformExponentiationOperator2.default, _babelPluginTransformAsyncGeneratorFunctions2.default, _babelPluginTransformObjectRestSpread2.default] -}; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/package.json deleted file mode 100644 index f4ab919d0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-3/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "babel-preset-stage-3@^6.17.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2" - ] - ], - "_from": "babel-preset-stage-3@>=6.17.0 <7.0.0", - "_id": "babel-preset-stage-3@6.17.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-preset-stage-3", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-preset-stage-3-6.17.0.tgz_1475349804192_0.48826116952113807" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-preset-stage-3", - "raw": "babel-preset-stage-3@^6.17.0", - "rawSpec": "^6.17.0", - "scope": null, - "spec": ">=6.17.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-preset-stage-2" - ], - "_resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.17.0.tgz", - "_shasum": "b6638e46db6e91e3f889013d8ce143917c685e39", - "_shrinkwrap": null, - "_spec": "babel-preset-stage-3@^6.17.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-preset-stage-2", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "babel-plugin-syntax-trailing-function-commas": "^6.3.13", - "babel-plugin-transform-async-generator-functions": "^6.17.0", - "babel-plugin-transform-async-to-generator": "^6.16.0", - "babel-plugin-transform-exponentiation-operator": "^6.3.13", - "babel-plugin-transform-object-rest-spread": "^6.16.0" - }, - "description": "Babel preset for stage 3 plugins", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "b6638e46db6e91e3f889013d8ce143917c685e39", - "tarball": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.17.0.tgz" - }, - "homepage": "https://babeljs.io/", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-preset-stage-3", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-preset-stage-3" - }, - "scripts": {}, - "version": "6.17.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-register/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-register/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-register/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-register/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-register/README.md deleted file mode 100644 index 13f79b2d9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-register/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# babel-register - -The require hook will bind itself to node's require and automatically compile files on the fly. - -## Install - -``` -$ npm install babel-register -``` - -## Usage - -```js -require("babel-register"); -``` - -All subsequent files required by node with the extensions `.es6`, `.es`, `.jsx` and `.js` will be transformed by Babel. - -See [documentation](http://babeljs.io/docs/usage/require/) for details. diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-register/lib/browser.js b/fundamentals/bug-challenge-es6/node_modules/babel-register/lib/browser.js deleted file mode 100644 index 47e585e56..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-register/lib/browser.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function () {}; - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-register/lib/cache.js b/fundamentals/bug-challenge-es6/node_modules/babel-register/lib/cache.js deleted file mode 100644 index d2e5931ce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-register/lib/cache.js +++ /dev/null @@ -1,65 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -exports.save = save; -exports.load = load; -exports.get = get; - -var _path = require("path"); - -var _path2 = _interopRequireDefault(_path); - -var _fs = require("fs"); - -var _fs2 = _interopRequireDefault(_fs); - -var _mkdirp = require("mkdirp"); - -var _homeOrTmp = require("home-or-tmp"); - -var _homeOrTmp2 = _interopRequireDefault(_homeOrTmp); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var FILENAME = process.env.BABEL_CACHE_PATH || _path2.default.join(_homeOrTmp2.default, ".babel.json"); -var data = {}; - -function save() { - var serialised = {}; - try { - serialised = (0, _stringify2.default)(data, null, " "); - } catch (err) { - if (err.message === "Invalid string length") { - err.message = "Cache too large so it's been cleared."; - console.error(err.stack); - } else { - throw err; - } - } - (0, _mkdirp.sync)(_path2.default.dirname(FILENAME)); - _fs2.default.writeFileSync(FILENAME, serialised); -} - -function load() { - if (process.env.BABEL_DISABLE_CACHE) return; - - process.on("exit", save); - process.nextTick(save); - - if (!_fs2.default.existsSync(FILENAME)) return; - - try { - data = JSON.parse(_fs2.default.readFileSync(FILENAME)); - } catch (err) { - return; - } -} - -function get() { - return data; -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-register/lib/node.js b/fundamentals/bug-challenge-es6/node_modules/babel-register/lib/node.js deleted file mode 100644 index 42447b52e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-register/lib/node.js +++ /dev/null @@ -1,178 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -exports.default = function () { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - if (opts.only != null) only = _babelCore.util.arrayify(opts.only, _babelCore.util.regexify); - if (opts.ignore != null) ignore = _babelCore.util.arrayify(opts.ignore, _babelCore.util.regexify); - - if (opts.extensions) hookExtensions(_babelCore.util.arrayify(opts.extensions)); - - if (opts.cache === false) cache = null; - - delete opts.extensions; - delete opts.ignore; - delete opts.cache; - delete opts.only; - - (0, _extend2.default)(transformOpts, opts); -}; - -var _cloneDeep = require("lodash/cloneDeep"); - -var _cloneDeep2 = _interopRequireDefault(_cloneDeep); - -var _sourceMapSupport = require("source-map-support"); - -var _sourceMapSupport2 = _interopRequireDefault(_sourceMapSupport); - -var _cache = require("./cache"); - -var registerCache = _interopRequireWildcard(_cache); - -var _extend = require("lodash/extend"); - -var _extend2 = _interopRequireDefault(_extend); - -var _babelCore = require("babel-core"); - -var babel = _interopRequireWildcard(_babelCore); - -var _each = require("lodash/each"); - -var _each2 = _interopRequireDefault(_each); - -var _fs = require("fs"); - -var _fs2 = _interopRequireDefault(_fs); - -var _path = require("path"); - -var _path2 = _interopRequireDefault(_path); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -_sourceMapSupport2.default.install({ - handleUncaughtExceptions: false, - environment: "node", - retrieveSourceMap: function retrieveSourceMap(source) { - var map = maps && maps[source]; - if (map) { - return { - url: null, - map: map - }; - } else { - return null; - } - } -}); - -registerCache.load(); -var cache = registerCache.get(); - -var transformOpts = {}; - -var ignore = void 0; -var only = void 0; - -var oldHandlers = {}; -var maps = {}; - -var cwd = process.cwd(); - -function getRelativePath(filename) { - return _path2.default.relative(cwd, filename); -} - -function mtime(filename) { - return +_fs2.default.statSync(filename).mtime; -} - -function compile(filename) { - var result = void 0; - - var opts = new _babelCore.OptionManager().init((0, _extend2.default)({ sourceRoot: _path2.default.dirname(filename) }, (0, _cloneDeep2.default)(transformOpts), { filename: filename })); - - var cacheKey = (0, _stringify2.default)(opts) + ":" + babel.version; - - var env = process.env.BABEL_ENV || process.env.NODE_ENV; - if (env) cacheKey += ":" + env; - - if (cache) { - var cached = cache[cacheKey]; - if (cached && cached.mtime === mtime(filename)) { - result = cached; - } - } - - if (!result) { - result = babel.transformFileSync(filename, (0, _extend2.default)(opts, { - babelrc: false, - sourceMaps: "both", - ast: false - })); - } - - if (cache) { - cache[cacheKey] = result; - result.mtime = mtime(filename); - } - - maps[filename] = result.map; - - return result.code; -} - -function shouldIgnore(filename) { - if (!ignore && !only) { - return getRelativePath(filename).split(_path2.default.sep).indexOf("node_modules") >= 0; - } else { - return _babelCore.util.shouldIgnore(filename, ignore || [], only); - } -} - -function loader(m, filename) { - m._compile(compile(filename), filename); -} - -function registerExtension(ext) { - var old = oldHandlers[ext] || oldHandlers[".js"] || require.extensions[".js"]; - - require.extensions[ext] = function (m, filename) { - if (shouldIgnore(filename)) { - old(m, filename); - } else { - loader(m, filename, old); - } - }; -} - -function hookExtensions(_exts) { - (0, _each2.default)(oldHandlers, function (old, ext) { - if (old === undefined) { - delete require.extensions[ext]; - } else { - require.extensions[ext] = old; - } - }); - - oldHandlers = {}; - - (0, _each2.default)(_exts, function (ext) { - oldHandlers[ext] = require.extensions[ext]; - registerExtension(ext); - }); -} - -hookExtensions(_babelCore.util.canCompile.EXTENSIONS); - -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-register/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-register/package.json deleted file mode 100644 index 3725cead1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-register/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "_args": [ - [ - "babel-register@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core" - ] - ], - "_from": "babel-register@>=6.18.0 <7.0.0", - "_id": "babel-register@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-register", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-register-6.18.0.tgz_1477343950702_0.14294588356278837" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-register", - "raw": "babel-register@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-core" - ], - "_resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.18.0.tgz", - "_shasum": "892e2e03865078dd90ad2c715111ec4449b32a68", - "_shrinkwrap": null, - "_spec": "babel-register@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "browser": "lib/browser.js", - "dependencies": { - "babel-core": "^6.18.0", - "babel-runtime": "^6.11.6", - "core-js": "^2.4.0", - "home-or-tmp": "^2.0.0", - "lodash": "^4.2.0", - "mkdirp": "^0.5.1", - "source-map-support": "^0.4.2" - }, - "description": "babel require hook", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "892e2e03865078dd90ad2c715111ec4449b32a68", - "tarball": "https://registry.npmjs.org/babel-register/-/babel-register-6.18.0.tgz" - }, - "license": "MIT", - "main": "lib/node.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-register", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-register" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/.npmignore deleted file mode 100644 index 3efd5b92d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -scripts -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/README.md deleted file mode 100644 index 8aa859368..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# babel-runtime - diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js.js deleted file mode 100644 index 7d5664380..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - "default": require("core-js/library"), - __esModule: true -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/concat.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/concat.js deleted file mode 100644 index f0a5ec77c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/concat.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/concat"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/copy-within.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/copy-within.js deleted file mode 100644 index e9352ed59..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/copy-within.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/copy-within"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/entries.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/entries.js deleted file mode 100644 index ee8b9e9c5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/entries.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/entries"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/every.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/every.js deleted file mode 100644 index adc93197b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/every.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/every"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/fill.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/fill.js deleted file mode 100644 index 3cc2fe1e7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/fill.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/fill"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/filter.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/filter.js deleted file mode 100644 index f73a5dbd1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/filter.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/filter"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/find-index.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/find-index.js deleted file mode 100644 index 560caa801..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/find-index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/find-index"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/find.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/find.js deleted file mode 100644 index 776399372..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/find.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/find"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/for-each.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/for-each.js deleted file mode 100644 index 4808c96ea..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/for-each.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/for-each"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/from.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/from.js deleted file mode 100644 index 8c92e8178..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/from.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/from"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/includes.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/includes.js deleted file mode 100644 index 602d0d8ac..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/includes.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/includes"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/index-of.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/index-of.js deleted file mode 100644 index eb4a6ac51..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/index-of.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/index-of"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/join.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/join.js deleted file mode 100644 index 7dc300bb8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/join.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/join"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/keys.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/keys.js deleted file mode 100644 index 5008ccbca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/keys.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/keys"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/last-index-of.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/last-index-of.js deleted file mode 100644 index ed92a55f5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/last-index-of.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/last-index-of"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/map.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/map.js deleted file mode 100644 index 0f58810ca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/map.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/map"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/of.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/of.js deleted file mode 100644 index d03ab62bf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/of.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/of"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/pop.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/pop.js deleted file mode 100644 index 9114d2f54..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/pop.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/pop"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/push.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/push.js deleted file mode 100644 index 0cd42be99..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/push.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/push"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/reduce-right.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/reduce-right.js deleted file mode 100644 index f56176cd8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/reduce-right.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/reduce-right"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/reduce.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/reduce.js deleted file mode 100644 index c0a200684..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/reduce.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/reduce"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/reverse.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/reverse.js deleted file mode 100644 index 8892c26b3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/reverse.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/reverse"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/shift.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/shift.js deleted file mode 100644 index 49e66cd99..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/shift.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/shift"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/slice.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/slice.js deleted file mode 100644 index 5f5fe1668..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/slice.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/slice"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/some.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/some.js deleted file mode 100644 index 72ca911de..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/some.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/some"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/sort.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/sort.js deleted file mode 100644 index 32dece8d7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/sort.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/sort"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/splice.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/splice.js deleted file mode 100644 index 6fdebb054..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/splice.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/splice"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/unshift.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/unshift.js deleted file mode 100644 index 3c237a4d3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/unshift.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/unshift"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/values.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/values.js deleted file mode 100644 index 6cc67aaee..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/array/values.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/array/values"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/asap.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/asap.js deleted file mode 100644 index a59e4d0d1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/asap.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/asap"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/clear-immediate.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/clear-immediate.js deleted file mode 100644 index f2090b70b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/clear-immediate.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/clear-immediate"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/error/is-error.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/error/is-error.js deleted file mode 100644 index 263754686..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/error/is-error.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/error/is-error"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/get-iterator.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/get-iterator.js deleted file mode 100644 index 8f9943af8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/get-iterator.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/get-iterator"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/is-iterable.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/is-iterable.js deleted file mode 100644 index d690ac863..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/is-iterable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/is-iterable"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/json/stringify.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/json/stringify.js deleted file mode 100644 index f09e2f932..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/json/stringify.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/json/stringify"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/map.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/map.js deleted file mode 100644 index ed02186fe..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/map.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/map"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/acosh.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/acosh.js deleted file mode 100644 index 37e2202d6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/acosh.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/acosh"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/asinh.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/asinh.js deleted file mode 100644 index b5147b3da..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/asinh.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/asinh"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/atanh.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/atanh.js deleted file mode 100644 index ad09bb7fd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/atanh.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/atanh"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/cbrt.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/cbrt.js deleted file mode 100644 index 24a69748c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/cbrt.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/cbrt"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/clz32.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/clz32.js deleted file mode 100644 index d2218b48a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/clz32.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/clz32"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/cosh.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/cosh.js deleted file mode 100644 index fa9d07944..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/cosh.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/cosh"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/expm1.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/expm1.js deleted file mode 100644 index 860921edf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/expm1.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/expm1"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/fround.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/fround.js deleted file mode 100644 index b62e43ab8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/fround.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/fround"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/hypot.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/hypot.js deleted file mode 100644 index b07335bf7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/hypot.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/hypot"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/iaddh.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/iaddh.js deleted file mode 100644 index 016eb07fe..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/iaddh.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/iaddh"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/imul.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/imul.js deleted file mode 100644 index 3bf89e842..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/imul.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/imul"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/imulh.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/imulh.js deleted file mode 100644 index 3fc7d7443..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/imulh.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/imulh"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/isubh.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/isubh.js deleted file mode 100644 index 6b6ea4f11..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/isubh.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/isubh"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/log10.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/log10.js deleted file mode 100644 index f384512d3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/log10.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/log10"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/log1p.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/log1p.js deleted file mode 100644 index 358fc4521..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/log1p.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/log1p"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/log2.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/log2.js deleted file mode 100644 index 1cbca00b9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/log2.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/log2"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/sign.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/sign.js deleted file mode 100644 index 8d0cfa322..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/sign.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/sign"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/sinh.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/sinh.js deleted file mode 100644 index 81afaddc9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/sinh.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/sinh"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/tanh.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/tanh.js deleted file mode 100644 index 76fad88a5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/tanh.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/tanh"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/trunc.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/trunc.js deleted file mode 100644 index 443a9581f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/trunc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/trunc"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/umulh.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/umulh.js deleted file mode 100644 index 357f389c1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/math/umulh.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/math/umulh"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/epsilon.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/epsilon.js deleted file mode 100644 index b5c786269..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/epsilon.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/number/epsilon"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-finite.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-finite.js deleted file mode 100644 index 7366242ea..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-finite.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/number/is-finite"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-integer.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-integer.js deleted file mode 100644 index 69b9bb71e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-integer.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/number/is-integer"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-nan.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-nan.js deleted file mode 100644 index 5402a71ad..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-nan.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/number/is-nan"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-safe-integer.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-safe-integer.js deleted file mode 100644 index 2d72dd45b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/is-safe-integer.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/number/is-safe-integer"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/max-safe-integer.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/max-safe-integer.js deleted file mode 100644 index 9b55c84e2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/max-safe-integer.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/number/max-safe-integer"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/min-safe-integer.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/min-safe-integer.js deleted file mode 100644 index b5e9785ab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/min-safe-integer.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/number/min-safe-integer"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/parse-float.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/parse-float.js deleted file mode 100644 index 0e0f0bcef..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/parse-float.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/number/parse-float"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/parse-int.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/parse-int.js deleted file mode 100644 index 6d454ea94..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/number/parse-int.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/number/parse-int"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/assign.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/assign.js deleted file mode 100644 index ca48f0c81..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/assign.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/assign"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/create.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/create.js deleted file mode 100644 index 130165c97..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/create.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/create"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/define-properties.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/define-properties.js deleted file mode 100644 index d39e15325..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/define-properties.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/define-properties"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/define-property.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/define-property.js deleted file mode 100644 index f41735b6e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/define-property.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/define-property"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/entries.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/entries.js deleted file mode 100644 index 32ed7a56b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/entries.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/entries"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/freeze.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/freeze.js deleted file mode 100644 index 8cc278b6f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/freeze.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/freeze"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-descriptor.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-descriptor.js deleted file mode 100644 index 8e9296e49..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-descriptor.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/get-own-property-descriptor"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-descriptors.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-descriptors.js deleted file mode 100644 index 23200d28f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-descriptors.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/get-own-property-descriptors"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-names.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-names.js deleted file mode 100644 index 7b9544555..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-names.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/get-own-property-names"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-symbols.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-symbols.js deleted file mode 100644 index c2fc78f87..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-own-property-symbols.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/get-own-property-symbols"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-prototype-of.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-prototype-of.js deleted file mode 100644 index 47d3f7279..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/get-prototype-of.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/get-prototype-of"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is-extensible.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is-extensible.js deleted file mode 100644 index 51175ad58..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is-extensible.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/is-extensible"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is-frozen.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is-frozen.js deleted file mode 100644 index e8ab5f150..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is-frozen.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/is-frozen"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is-sealed.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is-sealed.js deleted file mode 100644 index 77beda442..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is-sealed.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/is-sealed"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is.js deleted file mode 100644 index 652470437..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/is.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/is"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/keys.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/keys.js deleted file mode 100644 index 04a3f017e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/keys.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/keys"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/prevent-extensions.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/prevent-extensions.js deleted file mode 100644 index 3d4305fe5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/prevent-extensions.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/prevent-extensions"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/seal.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/seal.js deleted file mode 100644 index c969cab94..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/seal.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/seal"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/set-prototype-of.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/set-prototype-of.js deleted file mode 100644 index 63b1435e0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/set-prototype-of.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/set-prototype-of"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/values.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/values.js deleted file mode 100644 index c5870971d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/object/values.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/object/values"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/observable.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/observable.js deleted file mode 100644 index 04ca51e67..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/observable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/observable"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/promise.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/promise.js deleted file mode 100644 index 0cb9a23ec..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/promise.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/promise"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/apply.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/apply.js deleted file mode 100644 index cc578d4df..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/apply.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/apply"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/construct.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/construct.js deleted file mode 100644 index a2d991a25..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/construct.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/construct"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/define-metadata.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/define-metadata.js deleted file mode 100644 index 1ba7d4a10..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/define-metadata.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/define-metadata"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/define-property.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/define-property.js deleted file mode 100644 index aee1c3a1b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/define-property.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/define-property"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/delete-metadata.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/delete-metadata.js deleted file mode 100644 index 3396c42b7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/delete-metadata.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/delete-metadata"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/delete-property.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/delete-property.js deleted file mode 100644 index efa76abcb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/delete-property.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/delete-property"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/enumerate.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/enumerate.js deleted file mode 100644 index 041484bae..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/enumerate.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/enumerate"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-metadata-keys.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-metadata-keys.js deleted file mode 100644 index 722e09960..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-metadata-keys.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/get-metadata-keys"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-metadata.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-metadata.js deleted file mode 100644 index d725525b9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-metadata.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/get-metadata"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-own-metadata-keys.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-own-metadata-keys.js deleted file mode 100644 index feff3a6e5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-own-metadata-keys.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/get-own-metadata-keys"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-own-metadata.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-own-metadata.js deleted file mode 100644 index 1f8bd566e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-own-metadata.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/get-own-metadata"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-own-property-descriptor.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-own-property-descriptor.js deleted file mode 100644 index 67a50f5a2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-own-property-descriptor.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/get-own-property-descriptor"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-prototype-of.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-prototype-of.js deleted file mode 100644 index d3c8d4e3e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get-prototype-of.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/get-prototype-of"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get.js deleted file mode 100644 index a42e4fba4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/get.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/get"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/has-metadata.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/has-metadata.js deleted file mode 100644 index c1051a38e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/has-metadata.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/has-metadata"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/has-own-metadata.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/has-own-metadata.js deleted file mode 100644 index 1cefbf790..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/has-own-metadata.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/has-own-metadata"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/has.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/has.js deleted file mode 100644 index e2a966560..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/has.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/has"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/is-extensible.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/is-extensible.js deleted file mode 100644 index b0de7bff9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/is-extensible.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/is-extensible"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/metadata.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/metadata.js deleted file mode 100644 index cb85fdeee..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/metadata.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/metadata"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/own-keys.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/own-keys.js deleted file mode 100644 index d98fed2b9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/own-keys.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/own-keys"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/prevent-extensions.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/prevent-extensions.js deleted file mode 100644 index 5408d8905..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/prevent-extensions.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/prevent-extensions"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/set-prototype-of.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/set-prototype-of.js deleted file mode 100644 index 5433e2e3d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/set-prototype-of.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/set-prototype-of"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/set.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/set.js deleted file mode 100644 index 657bddc2d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/reflect/set.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/reflect/set"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/regexp/escape.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/regexp/escape.js deleted file mode 100644 index 12a25c3be..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/regexp/escape.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/regexp/escape"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/set-immediate.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/set-immediate.js deleted file mode 100644 index fc42eb4a5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/set-immediate.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/set-immediate"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/set.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/set.js deleted file mode 100644 index 22c14d46e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/set.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/set"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/at.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/at.js deleted file mode 100644 index 1c4b5952f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/at.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/at"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/code-point-at.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/code-point-at.js deleted file mode 100644 index 4332bdb63..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/code-point-at.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/code-point-at"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/ends-with.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/ends-with.js deleted file mode 100644 index ad3b55a2a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/ends-with.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/ends-with"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/from-code-point.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/from-code-point.js deleted file mode 100644 index 8c10782a8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/from-code-point.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/from-code-point"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/includes.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/includes.js deleted file mode 100644 index f7de27077..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/includes.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/includes"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/match-all.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/match-all.js deleted file mode 100644 index 813855c0e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/match-all.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/match-all"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-end.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-end.js deleted file mode 100644 index 5ff981462..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-end.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/pad-end"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-left.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-left.js deleted file mode 100644 index ee67e7048..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-left.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/pad-start"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-right.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-right.js deleted file mode 100644 index 5ff981462..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-right.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/pad-end"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-start.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-start.js deleted file mode 100644 index ee67e7048..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/pad-start.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/pad-start"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/raw.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/raw.js deleted file mode 100644 index 05c92dc15..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/raw.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/raw"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/repeat.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/repeat.js deleted file mode 100644 index 816ef2eed..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/repeat.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/repeat"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/starts-with.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/starts-with.js deleted file mode 100644 index 5d74716cb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/starts-with.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/starts-with"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-end.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-end.js deleted file mode 100644 index 7c426f5da..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-end.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/trim-end"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-left.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-left.js deleted file mode 100644 index b8a7e1e5a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-left.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/trim-left"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-right.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-right.js deleted file mode 100644 index ba3ca7452..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-right.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/trim-right"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-start.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-start.js deleted file mode 100644 index f1f035aa5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim-start.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/trim-start"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim.js deleted file mode 100644 index 7d51cf07d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/string/trim.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/string/trim"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol.js deleted file mode 100644 index 9aa95a028..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/async-iterator.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/async-iterator.js deleted file mode 100644 index 9dd3a570d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/async-iterator.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/async-iterator"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/for.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/for.js deleted file mode 100644 index de7424fb2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/for.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/for"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/has-instance.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/has-instance.js deleted file mode 100644 index f77118046..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/has-instance.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/has-instance"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/is-concat-spreadable.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/is-concat-spreadable.js deleted file mode 100644 index 0bc7f03da..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/is-concat-spreadable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/is-concat-spreadable"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/iterator.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/iterator.js deleted file mode 100644 index 3f9a0fbdc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/iterator.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/iterator"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/key-for.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/key-for.js deleted file mode 100644 index 15a6cfba5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/key-for.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/key-for"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/match.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/match.js deleted file mode 100644 index ed64810c4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/match.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/match"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/observable.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/observable.js deleted file mode 100644 index 876f9c023..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/observable.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/observable"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/replace.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/replace.js deleted file mode 100644 index 35f900bd5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/replace.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/replace"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/search.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/search.js deleted file mode 100644 index 4b81d319c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/search.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/search"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/species.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/species.js deleted file mode 100644 index 4481321da..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/species.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/species"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/split.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/split.js deleted file mode 100644 index 1f5795c05..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/split.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/split"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/to-primitive.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/to-primitive.js deleted file mode 100644 index b7f9e044f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/to-primitive.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/to-primitive"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/to-string-tag.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/to-string-tag.js deleted file mode 100644 index d9e4e4d6b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/to-string-tag.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/to-string-tag"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/unscopables.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/unscopables.js deleted file mode 100644 index cd3dac018..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/symbol/unscopables.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/symbol/unscopables"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/system/global.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/system/global.js deleted file mode 100644 index c442f179f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/system/global.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/system/global"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/weak-map.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/weak-map.js deleted file mode 100644 index de130d48a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/weak-map.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/weak-map"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/weak-set.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/weak-set.js deleted file mode 100644 index b96cb974c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/core-js/weak-set.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { "default": require("core-js/library/fn/weak-set"), __esModule: true }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-generator-delegate.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-generator-delegate.js deleted file mode 100644 index c1debb4a4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-generator-delegate.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./asyncGeneratorDelegate.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-generator.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-generator.js deleted file mode 100644 index ee87351f1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-generator.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./asyncGenerator.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-iterator.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-iterator.js deleted file mode 100644 index c014bbb79..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-iterator.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./asyncIterator.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-to-generator.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-to-generator.js deleted file mode 100644 index 5f81e900e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_async-to-generator.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./asyncToGenerator.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_class-call-check.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_class-call-check.js deleted file mode 100644 index d4514f0a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_class-call-check.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./classCallCheck.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_create-class.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_create-class.js deleted file mode 100644 index 2699d23fb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_create-class.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./createClass.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_defaults.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_defaults.js deleted file mode 100644 index a4274f5ea..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_defaults.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./defaults.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_define-enumerable-properties.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_define-enumerable-properties.js deleted file mode 100644 index c60bbfc33..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_define-enumerable-properties.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./defineEnumerableProperties.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_define-property.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_define-property.js deleted file mode 100644 index a265eab9c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_define-property.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./defineProperty.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_extends.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_extends.js deleted file mode 100644 index 2ecdb0edc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_extends.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./extends.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_get.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_get.js deleted file mode 100644 index 39aa38734..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_get.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./get.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_inherits.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_inherits.js deleted file mode 100644 index 29deff3fe..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_inherits.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./inherits.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_instanceof.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_instanceof.js deleted file mode 100644 index 4c612133d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_instanceof.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./instanceof.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_interop-require-default.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_interop-require-default.js deleted file mode 100644 index 10edad2c6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_interop-require-default.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./interopRequireDefault.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_interop-require-wildcard.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_interop-require-wildcard.js deleted file mode 100644 index ae19e01e0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_interop-require-wildcard.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./interopRequireWildcard.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_jsx.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_jsx.js deleted file mode 100644 index f21ab916e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_jsx.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./jsx.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_new-arrow-check.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_new-arrow-check.js deleted file mode 100644 index 6325419cd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_new-arrow-check.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./newArrowCheck.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_object-destructuring-empty.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_object-destructuring-empty.js deleted file mode 100644 index 9c6ffef54..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_object-destructuring-empty.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./objectDestructuringEmpty.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_object-without-properties.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_object-without-properties.js deleted file mode 100644 index 052b20788..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_object-without-properties.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./objectWithoutProperties.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_possible-constructor-return.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_possible-constructor-return.js deleted file mode 100644 index 09018d777..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_possible-constructor-return.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./possibleConstructorReturn.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_self-global.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_self-global.js deleted file mode 100644 index c3d45f331..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_self-global.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./selfGlobal.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_set.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_set.js deleted file mode 100644 index e4dd5eaff..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_set.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./set.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_sliced-to-array-loose.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_sliced-to-array-loose.js deleted file mode 100644 index 8bb56d333..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_sliced-to-array-loose.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./slicedToArrayLoose.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_sliced-to-array.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_sliced-to-array.js deleted file mode 100644 index 28d7fd82e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_sliced-to-array.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./slicedToArray.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_tagged-template-literal-loose.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_tagged-template-literal-loose.js deleted file mode 100644 index 8ffa3f715..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_tagged-template-literal-loose.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./taggedTemplateLiteralLoose.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_tagged-template-literal.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_tagged-template-literal.js deleted file mode 100644 index 160a91781..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_tagged-template-literal.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./taggedTemplateLiteral.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_temporal-ref.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_temporal-ref.js deleted file mode 100644 index cf2e4e459..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_temporal-ref.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./temporalRef.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_temporal-undefined.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_temporal-undefined.js deleted file mode 100644 index 234fc3394..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_temporal-undefined.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./temporalUndefined.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_to-array.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_to-array.js deleted file mode 100644 index d89ee39ab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_to-array.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./toArray.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_to-consumable-array.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_to-consumable-array.js deleted file mode 100644 index 0aad718d1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_to-consumable-array.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./toConsumableArray.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_typeof.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_typeof.js deleted file mode 100644 index 14fd11cd3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/_typeof.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./typeof.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-generator-delegate.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-generator-delegate.js deleted file mode 100644 index c1debb4a4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-generator-delegate.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./asyncGeneratorDelegate.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-generator.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-generator.js deleted file mode 100644 index ee87351f1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-generator.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./asyncGenerator.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-iterator.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-iterator.js deleted file mode 100644 index c014bbb79..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-iterator.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./asyncIterator.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-to-generator.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-to-generator.js deleted file mode 100644 index 5f81e900e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/async-to-generator.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./asyncToGenerator.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncGenerator.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncGenerator.js deleted file mode 100644 index 574b28a50..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncGenerator.js +++ /dev/null @@ -1,130 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _asyncIterator = require("../core-js/symbol/async-iterator"); - -var _asyncIterator2 = _interopRequireDefault(_asyncIterator); - -var _symbol = require("../core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -var _promise = require("../core-js/promise"); - -var _promise2 = _interopRequireDefault(_promise); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function () { - function AwaitValue(value) { - this.value = value; - } - - function AsyncGenerator(gen) { - var front, back; - - function send(key, arg) { - return new _promise2.default(function (resolve, reject) { - var request = { - key: key, - arg: arg, - resolve: resolve, - reject: reject, - next: null - }; - - if (back) { - back = back.next = request; - } else { - front = back = request; - resume(key, arg); - } - }); - } - - function resume(key, arg) { - try { - var result = gen[key](arg); - var value = result.value; - - if (value instanceof AwaitValue) { - _promise2.default.resolve(value.value).then(function (arg) { - resume("next", arg); - }, function (arg) { - resume("throw", arg); - }); - } else { - settle(result.done ? "return" : "normal", result.value); - } - } catch (err) { - settle("throw", err); - } - } - - function settle(type, value) { - switch (type) { - case "return": - front.resolve({ - value: value, - done: true - }); - break; - - case "throw": - front.reject(value); - break; - - default: - front.resolve({ - value: value, - done: false - }); - break; - } - - front = front.next; - - if (front) { - resume(front.key, front.arg); - } else { - back = null; - } - } - - this._invoke = send; - - if (typeof gen.return !== "function") { - this.return = undefined; - } - } - - if (typeof _symbol2.default === "function" && _asyncIterator2.default) { - AsyncGenerator.prototype[_asyncIterator2.default] = function () { - return this; - }; - } - - AsyncGenerator.prototype.next = function (arg) { - return this._invoke("next", arg); - }; - - AsyncGenerator.prototype.throw = function (arg) { - return this._invoke("throw", arg); - }; - - AsyncGenerator.prototype.return = function (arg) { - return this._invoke("return", arg); - }; - - return { - wrap: function wrap(fn) { - return function () { - return new AsyncGenerator(fn.apply(this, arguments)); - }; - }, - await: function await(value) { - return new AwaitValue(value); - } - }; -}(); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncGeneratorDelegate.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncGeneratorDelegate.js deleted file mode 100644 index 5fcc123e0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncGeneratorDelegate.js +++ /dev/null @@ -1,69 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _iterator = require("../core-js/symbol/iterator"); - -var _iterator2 = _interopRequireDefault(_iterator); - -var _symbol = require("../core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -var _promise = require("../core-js/promise"); - -var _promise2 = _interopRequireDefault(_promise); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (inner, awaitWrap) { - var iter = {}, - waiting = false; - - function pump(key, value) { - waiting = true; - value = new _promise2.default(function (resolve) { - resolve(inner[key](value)); - }); - return { - done: false, - value: awaitWrap(value) - }; - } - - ; - - if (typeof _symbol2.default === "function" && _iterator2.default) { - iter[_iterator2.default] = function () { - return this; - }; - } - - iter.next = function (value) { - if (waiting) { - waiting = false; - return value; - } - - return pump("next", value); - }; - - if (typeof inner.throw === "function") { - iter.throw = function (value) { - if (waiting) { - waiting = false; - throw value; - } - - return pump("throw", value); - }; - } - - if (typeof inner.return === "function") { - iter.return = function (value) { - return pump("return", value); - }; - } - - return iter; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncIterator.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncIterator.js deleted file mode 100644 index 03409891f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncIterator.js +++ /dev/null @@ -1,36 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("../core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _iterator = require("../core-js/symbol/iterator"); - -var _iterator2 = _interopRequireDefault(_iterator); - -var _asyncIterator = require("../core-js/symbol/async-iterator"); - -var _asyncIterator2 = _interopRequireDefault(_asyncIterator); - -var _symbol = require("../core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (iterable) { - if (typeof _symbol2.default === "function") { - if (_asyncIterator2.default) { - var method = iterable[_asyncIterator2.default]; - if (method != null) return method.call(iterable); - } - - if (_iterator2.default) { - return (0, _getIterator3.default)(iterable); - } - } - - throw new TypeError("Object is not async iterable"); -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncToGenerator.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncToGenerator.js deleted file mode 100644 index 50be669e1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/asyncToGenerator.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _promise = require("../core-js/promise"); - -var _promise2 = _interopRequireDefault(_promise); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (fn) { - return function () { - var gen = fn.apply(this, arguments); - return new _promise2.default(function (resolve, reject) { - function step(key, arg) { - try { - var info = gen[key](arg); - var value = info.value; - } catch (error) { - reject(error); - return; - } - - if (info.done) { - resolve(value); - } else { - return _promise2.default.resolve(value).then(function (value) { - step("next", value); - }, function (err) { - step("throw", err); - }); - } - } - - return step("next"); - }); - }; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/class-call-check.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/class-call-check.js deleted file mode 100644 index d4514f0a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/class-call-check.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./classCallCheck.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/classCallCheck.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/classCallCheck.js deleted file mode 100644 index 63d6d8f30..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/classCallCheck.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/create-class.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/create-class.js deleted file mode 100644 index 2699d23fb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/create-class.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./createClass.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/createClass.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/createClass.js deleted file mode 100644 index bee484d68..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/createClass.js +++ /dev/null @@ -1,27 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _defineProperty = require("../core-js/object/define-property"); - -var _defineProperty2 = _interopRequireDefault(_defineProperty); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - (0, _defineProperty2.default)(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; -}(); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/defaults.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/defaults.js deleted file mode 100644 index 9a721cec7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/defaults.js +++ /dev/null @@ -1,32 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _defineProperty = require("../core-js/object/define-property"); - -var _defineProperty2 = _interopRequireDefault(_defineProperty); - -var _getOwnPropertyDescriptor = require("../core-js/object/get-own-property-descriptor"); - -var _getOwnPropertyDescriptor2 = _interopRequireDefault(_getOwnPropertyDescriptor); - -var _getOwnPropertyNames = require("../core-js/object/get-own-property-names"); - -var _getOwnPropertyNames2 = _interopRequireDefault(_getOwnPropertyNames); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (obj, defaults) { - var keys = (0, _getOwnPropertyNames2.default)(defaults); - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - var value = (0, _getOwnPropertyDescriptor2.default)(defaults, key); - - if (value && value.configurable && obj[key] === undefined) { - (0, _defineProperty2.default)(obj, key, value); - } - } - - return obj; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/define-enumerable-properties.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/define-enumerable-properties.js deleted file mode 100644 index c60bbfc33..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/define-enumerable-properties.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./defineEnumerableProperties.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/define-property.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/define-property.js deleted file mode 100644 index a265eab9c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/define-property.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./defineProperty.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/defineEnumerableProperties.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/defineEnumerableProperties.js deleted file mode 100644 index 503a1ab23..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/defineEnumerableProperties.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _defineProperty = require("../core-js/object/define-property"); - -var _defineProperty2 = _interopRequireDefault(_defineProperty); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (obj, descs) { - for (var key in descs) { - var desc = descs[key]; - desc.configurable = desc.enumerable = true; - if ("value" in desc) desc.writable = true; - (0, _defineProperty2.default)(obj, key, desc); - } - - return obj; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/defineProperty.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/defineProperty.js deleted file mode 100644 index b0f46d804..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/defineProperty.js +++ /dev/null @@ -1,24 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _defineProperty = require("../core-js/object/define-property"); - -var _defineProperty2 = _interopRequireDefault(_defineProperty); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (obj, key, value) { - if (key in obj) { - (0, _defineProperty2.default)(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/extends.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/extends.js deleted file mode 100644 index 976aef1dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/extends.js +++ /dev/null @@ -1,23 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _assign = require("../core-js/object/assign"); - -var _assign2 = _interopRequireDefault(_assign); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = _assign2.default || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/get.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/get.js deleted file mode 100644 index 38b79b760..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/get.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getPrototypeOf = require("../core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _getOwnPropertyDescriptor = require("../core-js/object/get-own-property-descriptor"); - -var _getOwnPropertyDescriptor2 = _interopRequireDefault(_getOwnPropertyDescriptor); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function get(object, property, receiver) { - if (object === null) object = Function.prototype; - var desc = (0, _getOwnPropertyDescriptor2.default)(object, property); - - if (desc === undefined) { - var parent = (0, _getPrototypeOf2.default)(object); - - if (parent === null) { - return undefined; - } else { - return get(parent, property, receiver); - } - } else if ("value" in desc) { - return desc.value; - } else { - var getter = desc.get; - - if (getter === undefined) { - return undefined; - } - - return getter.call(receiver); - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/inherits.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/inherits.js deleted file mode 100644 index ae8a92db0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/inherits.js +++ /dev/null @@ -1,33 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _setPrototypeOf = require("../core-js/object/set-prototype-of"); - -var _setPrototypeOf2 = _interopRequireDefault(_setPrototypeOf); - -var _create = require("../core-js/object/create"); - -var _create2 = _interopRequireDefault(_create); - -var _typeof2 = require("../helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : (0, _typeof3.default)(superClass))); - } - - subClass.prototype = (0, _create2.default)(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: false, - writable: true, - configurable: true - } - }); - if (superClass) _setPrototypeOf2.default ? (0, _setPrototypeOf2.default)(subClass, superClass) : subClass.__proto__ = superClass; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/instanceof.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/instanceof.js deleted file mode 100644 index f2d90ecf5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/instanceof.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _hasInstance = require("../core-js/symbol/has-instance"); - -var _hasInstance2 = _interopRequireDefault(_hasInstance); - -var _symbol = require("../core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (left, right) { - if (right != null && typeof _symbol2.default !== "undefined" && right[_hasInstance2.default]) { - return right[_hasInstance2.default](left); - } else { - return left instanceof right; - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interop-require-default.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interop-require-default.js deleted file mode 100644 index 10edad2c6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interop-require-default.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./interopRequireDefault.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interop-require-wildcard.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interop-require-wildcard.js deleted file mode 100644 index ae19e01e0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interop-require-wildcard.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./interopRequireWildcard.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interopRequireDefault.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interopRequireDefault.js deleted file mode 100644 index df808f606..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interopRequireDefault.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (obj) { - return obj && obj.__esModule ? obj : { - default: obj - }; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interopRequireWildcard.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interopRequireWildcard.js deleted file mode 100644 index d95b6ac70..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/interopRequireWildcard.js +++ /dev/null @@ -1,20 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (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; - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/jsx.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/jsx.js deleted file mode 100644 index b2164d058..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/jsx.js +++ /dev/null @@ -1,56 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _for = require("../core-js/symbol/for"); - -var _for2 = _interopRequireDefault(_for); - -var _symbol = require("../core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function () { - var REACT_ELEMENT_TYPE = typeof _symbol2.default === "function" && _for2.default && (0, _for2.default)("react.element") || 0xeac7; - return function createRawReactElement(type, props, key, children) { - var defaultProps = type && type.defaultProps; - var childrenLength = arguments.length - 3; - - if (!props && childrenLength !== 0) { - props = {}; - } - - if (props && defaultProps) { - for (var propName in defaultProps) { - if (props[propName] === void 0) { - props[propName] = defaultProps[propName]; - } - } - } else if (!props) { - props = defaultProps || {}; - } - - if (childrenLength === 1) { - props.children = children; - } else if (childrenLength > 1) { - var childArray = Array(childrenLength); - - for (var i = 0; i < childrenLength; i++) { - childArray[i] = arguments[i + 3]; - } - - props.children = childArray; - } - - return { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key === undefined ? null : '' + key, - ref: null, - props: props, - _owner: null - }; - }; -}(); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/new-arrow-check.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/new-arrow-check.js deleted file mode 100644 index 6325419cd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/new-arrow-check.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./newArrowCheck.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/newArrowCheck.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/newArrowCheck.js deleted file mode 100644 index c15ee5c3b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/newArrowCheck.js +++ /dev/null @@ -1,9 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (innerThis, boundThis) { - if (innerThis !== boundThis) { - throw new TypeError("Cannot instantiate an arrow function"); - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/object-destructuring-empty.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/object-destructuring-empty.js deleted file mode 100644 index 9c6ffef54..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/object-destructuring-empty.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./objectDestructuringEmpty.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/object-without-properties.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/object-without-properties.js deleted file mode 100644 index 052b20788..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/object-without-properties.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./objectWithoutProperties.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/objectDestructuringEmpty.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/objectDestructuringEmpty.js deleted file mode 100644 index e2651c137..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/objectDestructuringEmpty.js +++ /dev/null @@ -1,7 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (obj) { - if (obj == null) throw new TypeError("Cannot destructure undefined"); -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/objectWithoutProperties.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/objectWithoutProperties.js deleted file mode 100644 index e9f07e68d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/objectWithoutProperties.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (obj, keys) { - var target = {}; - - for (var i in obj) { - if (keys.indexOf(i) >= 0) continue; - if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; - target[i] = obj[i]; - } - - return target; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/possible-constructor-return.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/possible-constructor-return.js deleted file mode 100644 index 09018d777..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/possible-constructor-return.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./possibleConstructorReturn.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/possibleConstructorReturn.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/possibleConstructorReturn.js deleted file mode 100644 index 957f425d4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/possibleConstructorReturn.js +++ /dev/null @@ -1,17 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _typeof2 = require("../helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return call && ((typeof call === "undefined" ? "undefined" : (0, _typeof3.default)(call)) === "object" || typeof call === "function") ? call : self; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/self-global.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/self-global.js deleted file mode 100644 index c3d45f331..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/self-global.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./selfGlobal.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/selfGlobal.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/selfGlobal.js deleted file mode 100644 index 378beb8e7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/selfGlobal.js +++ /dev/null @@ -1,4 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.default = typeof global === "undefined" ? self : global; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/set.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/set.js deleted file mode 100644 index 8780efb63..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/set.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getPrototypeOf = require("../core-js/object/get-prototype-of"); - -var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); - -var _getOwnPropertyDescriptor = require("../core-js/object/get-own-property-descriptor"); - -var _getOwnPropertyDescriptor2 = _interopRequireDefault(_getOwnPropertyDescriptor); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function set(object, property, value, receiver) { - var desc = (0, _getOwnPropertyDescriptor2.default)(object, property); - - if (desc === undefined) { - var parent = (0, _getPrototypeOf2.default)(object); - - if (parent !== null) { - set(parent, property, value, receiver); - } - } else if ("value" in desc && desc.writable) { - desc.value = value; - } else { - var setter = desc.set; - - if (setter !== undefined) { - setter.call(receiver, value); - } - } - - return value; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/sliced-to-array-loose.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/sliced-to-array-loose.js deleted file mode 100644 index 8bb56d333..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/sliced-to-array-loose.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./slicedToArrayLoose.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/sliced-to-array.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/sliced-to-array.js deleted file mode 100644 index 28d7fd82e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/sliced-to-array.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./slicedToArray.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/slicedToArray.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/slicedToArray.js deleted file mode 100644 index de1151248..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/slicedToArray.js +++ /dev/null @@ -1,51 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _isIterable2 = require("../core-js/is-iterable"); - -var _isIterable3 = _interopRequireDefault(_isIterable2); - -var _getIterator2 = require("../core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function () { - function sliceIterator(arr, i) { - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = (0, _getIterator3.default)(arr), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"]) _i["return"](); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - return function (arr, i) { - if (Array.isArray(arr)) { - return arr; - } else if ((0, _isIterable3.default)(Object(arr))) { - return sliceIterator(arr, i); - } else { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - }; -}(); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/slicedToArrayLoose.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/slicedToArrayLoose.js deleted file mode 100644 index 012bbd859..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/slicedToArrayLoose.js +++ /dev/null @@ -1,31 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("../core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _isIterable2 = require("../core-js/is-iterable"); - -var _isIterable3 = _interopRequireDefault(_isIterable2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (arr, i) { - if (Array.isArray(arr)) { - return arr; - } else if ((0, _isIterable3.default)(Object(arr))) { - var _arr = []; - - for (var _iterator = (0, _getIterator3.default)(arr), _step; !(_step = _iterator.next()).done;) { - _arr.push(_step.value); - - if (i && _arr.length === i) break; - } - - return _arr; - } else { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/tagged-template-literal-loose.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/tagged-template-literal-loose.js deleted file mode 100644 index 8ffa3f715..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/tagged-template-literal-loose.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./taggedTemplateLiteralLoose.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/tagged-template-literal.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/tagged-template-literal.js deleted file mode 100644 index 160a91781..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/tagged-template-literal.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./taggedTemplateLiteral.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/taggedTemplateLiteral.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/taggedTemplateLiteral.js deleted file mode 100644 index 060dcf9c9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/taggedTemplateLiteral.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _defineProperties = require("../core-js/object/define-properties"); - -var _defineProperties2 = _interopRequireDefault(_defineProperties); - -var _freeze = require("../core-js/object/freeze"); - -var _freeze2 = _interopRequireDefault(_freeze); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (strings, raw) { - return (0, _freeze2.default)((0, _defineProperties2.default)(strings, { - raw: { - value: (0, _freeze2.default)(raw) - } - })); -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/taggedTemplateLiteralLoose.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/taggedTemplateLiteralLoose.js deleted file mode 100644 index 76c493090..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/taggedTemplateLiteralLoose.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (strings, raw) { - strings.raw = raw; - return strings; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporal-ref.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporal-ref.js deleted file mode 100644 index cf2e4e459..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporal-ref.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./temporalRef.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporal-undefined.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporal-undefined.js deleted file mode 100644 index 234fc3394..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporal-undefined.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./temporalUndefined.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporalRef.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporalRef.js deleted file mode 100644 index 49b8b247c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporalRef.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -exports.default = function (val, name, undef) { - if (val === undef) { - throw new ReferenceError(name + " is not defined - temporal dead zone"); - } else { - return val; - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporalUndefined.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporalUndefined.js deleted file mode 100644 index 4066de1d7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/temporalUndefined.js +++ /dev/null @@ -1,4 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.default = {}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/to-array.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/to-array.js deleted file mode 100644 index d89ee39ab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/to-array.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./toArray.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/to-consumable-array.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/to-consumable-array.js deleted file mode 100644 index 0aad718d1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/to-consumable-array.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("./toConsumableArray.js"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/toArray.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/toArray.js deleted file mode 100644 index 8601a44e5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/toArray.js +++ /dev/null @@ -1,13 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _from = require("../core-js/array/from"); - -var _from2 = _interopRequireDefault(_from); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (arr) { - return Array.isArray(arr) ? arr : (0, _from2.default)(arr); -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/toConsumableArray.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/toConsumableArray.js deleted file mode 100644 index c4e34f51f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/toConsumableArray.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _from = require("../core-js/array/from"); - -var _from2 = _interopRequireDefault(_from); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = function (arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { - arr2[i] = arr[i]; - } - - return arr2; - } else { - return (0, _from2.default)(arr); - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/typeof.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/typeof.js deleted file mode 100644 index d22add808..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/helpers/typeof.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _iterator = require("../core-js/symbol/iterator"); - -var _iterator2 = _interopRequireDefault(_iterator); - -var _symbol = require("../core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; }; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) { - return typeof obj === "undefined" ? "undefined" : _typeof(obj); -} : function (obj) { - return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj); -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/package.json deleted file mode 100644 index c7e74f141..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_args": [ - [ - "babel-runtime@^6.9.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core" - ] - ], - "_from": "babel-runtime@>=6.9.1 <7.0.0", - "_id": "babel-runtime@6.18.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-runtime", - "_nodeVersion": "6.8.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-runtime-6.18.0.tgz_1477349187101_0.7913029720075428" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-runtime", - "raw": "babel-runtime@^6.9.1", - "rawSpec": "^6.9.1", - "scope": null, - "spec": ">=6.9.1 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-core", - "/babel-generator", - "/babel-helpers", - "/babel-messages", - "/babel-register", - "/babel-template", - "/babel-traverse", - "/babel-types" - ], - "_resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.18.0.tgz", - "_shasum": "0f4177ffd98492ef13b9f823e9994a02584c9078", - "_shrinkwrap": null, - "_spec": "babel-runtime@^6.9.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.9.5" - }, - "description": "babel selfContained runtime", - "devDependencies": { - "babel-helpers": "^6.6.0", - "babel-plugin-transform-runtime": "^6.9.0" - }, - "directories": {}, - "dist": { - "shasum": "0f4177ffd98492ef13b9f823e9994a02584c9078", - "tarball": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.18.0.tgz" - }, - "license": "MIT", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - } - ], - "name": "babel-runtime", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-runtime" - }, - "scripts": {}, - "version": "6.18.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/regenerator/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-runtime/regenerator/index.js deleted file mode 100644 index 9fd4158a6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-runtime/regenerator/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require("regenerator-runtime"); diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-template/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-template/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-template/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-template/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-template/README.md deleted file mode 100644 index 77f73a8c2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-template/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# babel-template - -> Generate an AST from a string template. - -In computer science, this is known as an implementation of quasiquotes. - -## Install - -```sh -$ npm install babel-template -``` - -## Usage - -```js -import template from 'babel-template'; -import generate from 'babel-generator'; -import * as t from 'babel-types'; - -const buildRequire = template(` - var IMPORT_NAME = require(SOURCE); -`); - -const ast = buildRequire({ - IMPORT_NAME: t.identifier('myModule'), - SOURCE: t.stringLiteral('my-module') -}); - -console.log(generate(ast).code); -``` - -```js -var myModule = require('my-module'); -``` - -## API - -### `template(code, [opts])` - -#### code - -Type: `string` - -#### options - -`babel-template` accepts all of the options from [babylon], and specifies -some defaults of its own: - -* `allowReturnOutsideFunction` is set to `true` by default. -* `allowSuperOutsideMethod` is set to `true` by default. - -##### preserveComments - -Type: `boolean` -Default: `false` - -Set this to `true` to preserve any comments from the `code` parameter. - -#### Return value - -`babel-template` returns a `function` which is invoked with an optional object -of replacements. See the usage section for an example. - -[babylon]: https://github.com/babel/babylon#options diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-template/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-template/lib/index.js deleted file mode 100644 index ecf0da4cc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-template/lib/index.js +++ /dev/null @@ -1,143 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _symbol = require("babel-runtime/core-js/symbol"); - -var _symbol2 = _interopRequireDefault(_symbol); - -exports.default = function (code, opts) { - var stack = void 0; - try { - throw new Error(); - } catch (error) { - if (error.stack) { - stack = error.stack.split("\n").slice(1).join("\n"); - } - } - - opts = (0, _assign2.default)({ - allowReturnOutsideFunction: true, - allowSuperOutsideMethod: true, - preserveComments: false - }, opts); - - var _getAst = function getAst() { - var ast = void 0; - - try { - ast = babylon.parse(code, opts); - - ast = _babelTraverse2.default.removeProperties(ast, { preserveComments: opts.preserveComments }); - - _babelTraverse2.default.cheap(ast, function (node) { - node[FROM_TEMPLATE] = true; - }); - } catch (err) { - err.stack = err.stack + "from\n" + stack; - throw err; - } - - _getAst = function getAst() { - return ast; - }; - - return ast; - }; - - return function () { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - return useTemplate(_getAst(), args); - }; -}; - -var _cloneDeep = require("lodash/cloneDeep"); - -var _cloneDeep2 = _interopRequireDefault(_cloneDeep); - -var _assign = require("lodash/assign"); - -var _assign2 = _interopRequireDefault(_assign); - -var _has = require("lodash/has"); - -var _has2 = _interopRequireDefault(_has); - -var _babelTraverse = require("babel-traverse"); - -var _babelTraverse2 = _interopRequireDefault(_babelTraverse); - -var _babylon = require("babylon"); - -var babylon = _interopRequireWildcard(_babylon); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var FROM_TEMPLATE = "_fromTemplate"; -var TEMPLATE_SKIP = (0, _symbol2.default)(); - -function useTemplate(ast, nodes) { - ast = (0, _cloneDeep2.default)(ast); - var _ast = ast; - var program = _ast.program; - - - if (nodes.length) { - (0, _babelTraverse2.default)(ast, templateVisitor, null, nodes); - } - - if (program.body.length > 1) { - return program.body; - } else { - return program.body[0]; - } -} - -var templateVisitor = { - noScope: true, - - enter: function enter(path, args) { - var node = path.node; - - if (node[TEMPLATE_SKIP]) return path.skip(); - - if (t.isExpressionStatement(node)) { - node = node.expression; - } - - var replacement = void 0; - - if (t.isIdentifier(node) && node[FROM_TEMPLATE]) { - if ((0, _has2.default)(args[0], node.name)) { - replacement = args[0][node.name]; - } else if (node.name[0] === "$") { - var i = +node.name.slice(1); - if (args[i]) replacement = args[i]; - } - } - - if (replacement === null) { - path.remove(); - } - - if (replacement) { - replacement[TEMPLATE_SKIP] = true; - path.replaceInline(replacement); - } - }, - exit: function exit(_ref) { - var node = _ref.node; - - if (!node.loc) _babelTraverse2.default.clearNode(node); - } -}; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-template/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-template/package.json deleted file mode 100644 index e2baf3487..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-template/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "_args": [ - [ - "babel-template@^6.16.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core" - ] - ], - "_from": "babel-template@>=6.16.0 <7.0.0", - "_id": "babel-template@6.16.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-template", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/babel-template-6.16.0.tgz_1475091544068_0.7295735867228359" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-template", - "raw": "babel-template@^6.16.0", - "rawSpec": "^6.16.0", - "scope": null, - "spec": ">=6.16.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-core", - "/babel-helpers", - "/istanbul-lib-instrument" - ], - "_resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.16.0.tgz", - "_shasum": "e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca", - "_shrinkwrap": null, - "_spec": "babel-template@^6.16.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "babel-runtime": "^6.9.0", - "babel-traverse": "^6.16.0", - "babel-types": "^6.16.0", - "babylon": "^6.11.0", - "lodash": "^4.2.0" - }, - "description": "Generate an AST from a string template.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca", - "tarball": "https://registry.npmjs.org/babel-template/-/babel-template-6.16.0.tgz" - }, - "homepage": "https://babeljs.io/", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-template", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-template" - }, - "scripts": {}, - "version": "6.16.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/README.md deleted file mode 100644 index 6addc1065..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/README.md +++ /dev/null @@ -1 +0,0 @@ -# babel-traverse diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/cache.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/cache.js deleted file mode 100644 index b337eec6b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/cache.js +++ /dev/null @@ -1,30 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.scope = exports.path = undefined; - -var _weakMap = require("babel-runtime/core-js/weak-map"); - -var _weakMap2 = _interopRequireDefault(_weakMap); - -exports.clear = clear; -exports.clearPath = clearPath; -exports.clearScope = clearScope; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var path = exports.path = new _weakMap2.default(); -var scope = exports.scope = new _weakMap2.default(); - -function clear() { - clearPath(); - clearScope(); -} - -function clearPath() { - exports.path = path = new _weakMap2.default(); -} - -function clearScope() { - exports.scope = scope = new _weakMap2.default(); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/context.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/context.js deleted file mode 100644 index 3b9ded814..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/context.js +++ /dev/null @@ -1,200 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _path2 = require("./path"); - -var _path3 = _interopRequireDefault(_path2); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var testing = process.env.NODE_ENV === "test"; - -var TraversalContext = function () { - function TraversalContext(scope, opts, state, parentPath) { - (0, _classCallCheck3.default)(this, TraversalContext); - this.queue = null; - - this.parentPath = parentPath; - this.scope = scope; - this.state = state; - this.opts = opts; - } - - TraversalContext.prototype.shouldVisit = function shouldVisit(node) { - var opts = this.opts; - if (opts.enter || opts.exit) return true; - - if (opts[node.type]) return true; - - var keys = t.VISITOR_KEYS[node.type]; - if (!keys || !keys.length) return false; - - for (var _iterator = keys, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var key = _ref; - - if (node[key]) return true; - } - - return false; - }; - - TraversalContext.prototype.create = function create(node, obj, key, listKey) { - return _path3.default.get({ - parentPath: this.parentPath, - parent: node, - container: obj, - key: key, - listKey: listKey - }); - }; - - TraversalContext.prototype.maybeQueue = function maybeQueue(path, notPriority) { - if (this.trap) { - throw new Error("Infinite cycle detected"); - } - - if (this.queue) { - if (notPriority) { - this.queue.push(path); - } else { - this.priorityQueue.push(path); - } - } - }; - - TraversalContext.prototype.visitMultiple = function visitMultiple(container, parent, listKey) { - if (container.length === 0) return false; - - var queue = []; - - for (var key = 0; key < container.length; key++) { - var node = container[key]; - if (node && this.shouldVisit(node)) { - queue.push(this.create(parent, container, key, listKey)); - } - } - - return this.visitQueue(queue); - }; - - TraversalContext.prototype.visitSingle = function visitSingle(node, key) { - if (this.shouldVisit(node[key])) { - return this.visitQueue([this.create(node, node, key)]); - } else { - return false; - } - }; - - TraversalContext.prototype.visitQueue = function visitQueue(queue) { - this.queue = queue; - this.priorityQueue = []; - - var visited = []; - var stop = false; - - for (var _iterator2 = queue, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var path = _ref2; - - path.resync(); - - if (path.contexts.length === 0 || path.contexts[path.contexts.length - 1] !== this) { - path.pushContext(this); - } - - if (path.key === null) continue; - - if (testing && queue.length >= 10000) { - this.trap = true; - } - - if (visited.indexOf(path.node) >= 0) continue; - visited.push(path.node); - - if (path.visit()) { - stop = true; - break; - } - - if (this.priorityQueue.length) { - stop = this.visitQueue(this.priorityQueue); - this.priorityQueue = []; - this.queue = queue; - if (stop) break; - } - } - - for (var _iterator3 = queue, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - var _path = _ref3; - - _path.popContext(); - } - - this.queue = null; - - return stop; - }; - - TraversalContext.prototype.visit = function visit(node, key) { - var nodes = node[key]; - if (!nodes) return false; - - if (Array.isArray(nodes)) { - return this.visitMultiple(nodes, node, key); - } else { - return this.visitSingle(node, key); - } - }; - - return TraversalContext; -}(); - -exports.default = TraversalContext; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/hub.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/hub.js deleted file mode 100644 index f989c4c61..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/hub.js +++ /dev/null @@ -1,19 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Hub = function Hub(file, options) { - (0, _classCallCheck3.default)(this, Hub); - - this.file = file; - this.options = options; -}; - -exports.default = Hub; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/index.js deleted file mode 100644 index 19a14cea5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/index.js +++ /dev/null @@ -1,165 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.visitors = exports.Hub = exports.Scope = exports.NodePath = undefined; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _path = require("./path"); - -Object.defineProperty(exports, "NodePath", { - enumerable: true, - get: function get() { - return _interopRequireDefault(_path).default; - } -}); - -var _scope = require("./scope"); - -Object.defineProperty(exports, "Scope", { - enumerable: true, - get: function get() { - return _interopRequireDefault(_scope).default; - } -}); - -var _hub = require("./hub"); - -Object.defineProperty(exports, "Hub", { - enumerable: true, - get: function get() { - return _interopRequireDefault(_hub).default; - } -}); -exports.default = traverse; - -var _context = require("./context"); - -var _context2 = _interopRequireDefault(_context); - -var _visitors = require("./visitors"); - -var visitors = _interopRequireWildcard(_visitors); - -var _babelMessages = require("babel-messages"); - -var messages = _interopRequireWildcard(_babelMessages); - -var _includes = require("lodash/includes"); - -var _includes2 = _interopRequireDefault(_includes); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _cache = require("./cache"); - -var cache = _interopRequireWildcard(_cache); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -exports.visitors = visitors; -function traverse(parent, opts, scope, state, parentPath) { - if (!parent) return; - if (!opts) opts = {}; - - if (!opts.noScope && !scope) { - if (parent.type !== "Program" && parent.type !== "File") { - throw new Error(messages.get("traverseNeedsParent", parent.type)); - } - } - - visitors.explode(opts); - - traverse.node(parent, opts, scope, state, parentPath); -} - -traverse.visitors = visitors; -traverse.verify = visitors.verify; -traverse.explode = visitors.explode; - -traverse.NodePath = require("./path"); -traverse.Scope = require("./scope"); -traverse.Hub = require("./hub"); - -traverse.cheap = function (node, enter) { - return t.traverseFast(node, enter); -}; - -traverse.node = function (node, opts, scope, state, parentPath, skipKeys) { - var keys = t.VISITOR_KEYS[node.type]; - if (!keys) return; - - var context = new _context2.default(scope, opts, state, parentPath); - for (var _iterator = keys, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var key = _ref; - - if (skipKeys && skipKeys[key]) continue; - if (context.visit(node, key)) return; - } -}; - -traverse.clearNode = function (node, opts) { - t.removeProperties(node, opts); - - cache.path.delete(node); -}; - -traverse.removeProperties = function (tree, opts) { - t.traverseFast(tree, traverse.clearNode, opts); - return tree; -}; - -function hasBlacklistedType(path, state) { - if (path.node.type === state.type) { - state.has = true; - path.stop(); - } -} - -traverse.hasType = function (tree, scope, type, blacklistTypes) { - if ((0, _includes2.default)(blacklistTypes, tree.type)) return false; - - if (tree.type === type) return true; - - var state = { - has: false, - type: type - }; - - traverse(tree, { - blacklist: blacklistTypes, - enter: hasBlacklistedType - }, scope, state); - - return state.has; -}; - -traverse.clearCache = function () { - cache.clear(); -}; - -traverse.clearCache.clearPath = cache.clearPath; -traverse.clearCache.clearScope = cache.clearScope; - -traverse.copyCache = function (source, destination) { - if (cache.path.has(source)) { - cache.path.set(destination, cache.path.get(source)); - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/ancestry.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/ancestry.js deleted file mode 100644 index 2a8c32272..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/ancestry.js +++ /dev/null @@ -1,238 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.findParent = findParent; -exports.find = find; -exports.getFunctionParent = getFunctionParent; -exports.getStatementParent = getStatementParent; -exports.getEarliestCommonAncestorFrom = getEarliestCommonAncestorFrom; -exports.getDeepestCommonAncestorFrom = getDeepestCommonAncestorFrom; -exports.getAncestry = getAncestry; -exports.isAncestor = isAncestor; -exports.isDescendant = isDescendant; -exports.inType = inType; -exports.inShadow = inShadow; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _index = require("./index"); - -var _index2 = _interopRequireDefault(_index); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function findParent(callback) { - var path = this; - while (path = path.parentPath) { - if (callback(path)) return path; - } - return null; -} - -function find(callback) { - var path = this; - do { - if (callback(path)) return path; - } while (path = path.parentPath); - return null; -} - -function getFunctionParent() { - return this.findParent(function (path) { - return path.isFunction() || path.isProgram(); - }); -} - -function getStatementParent() { - var path = this; - do { - if (Array.isArray(path.container)) { - return path; - } - } while (path = path.parentPath); -} - -function getEarliestCommonAncestorFrom(paths) { - return this.getDeepestCommonAncestorFrom(paths, function (deepest, i, ancestries) { - var earliest = void 0; - var keys = t.VISITOR_KEYS[deepest.type]; - - for (var _iterator = ancestries, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var ancestry = _ref; - - var path = ancestry[i + 1]; - - if (!earliest) { - earliest = path; - continue; - } - - if (path.listKey && earliest.listKey === path.listKey) { - if (path.key < earliest.key) { - earliest = path; - continue; - } - } - - var earliestKeyIndex = keys.indexOf(earliest.parentKey); - var currentKeyIndex = keys.indexOf(path.parentKey); - if (earliestKeyIndex > currentKeyIndex) { - earliest = path; - } - } - - return earliest; - }); -} - -function getDeepestCommonAncestorFrom(paths, filter) { - var _this = this; - - if (!paths.length) { - return this; - } - - if (paths.length === 1) { - return paths[0]; - } - - var minDepth = Infinity; - - var lastCommonIndex = void 0, - lastCommon = void 0; - - var ancestries = paths.map(function (path) { - var ancestry = []; - - do { - ancestry.unshift(path); - } while ((path = path.parentPath) && path !== _this); - - if (ancestry.length < minDepth) { - minDepth = ancestry.length; - } - - return ancestry; - }); - - var first = ancestries[0]; - - depthLoop: for (var i = 0; i < minDepth; i++) { - var shouldMatch = first[i]; - - for (var _iterator2 = ancestries, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var ancestry = _ref2; - - if (ancestry[i] !== shouldMatch) { - break depthLoop; - } - } - - lastCommonIndex = i; - lastCommon = shouldMatch; - } - - if (lastCommon) { - if (filter) { - return filter(lastCommon, lastCommonIndex, ancestries); - } else { - return lastCommon; - } - } else { - throw new Error("Couldn't find intersection"); - } -} - -function getAncestry() { - var path = this; - var paths = []; - do { - paths.push(path); - } while (path = path.parentPath); - return paths; -} - -function isAncestor(maybeDescendant) { - return maybeDescendant.isDescendant(this); -} - -function isDescendant(maybeAncestor) { - return !!this.findParent(function (parent) { - return parent === maybeAncestor; - }); -} - -function inType() { - var path = this; - while (path) { - for (var _iterator3 = arguments, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - var type = _ref3; - - if (path.node.type === type) return true; - } - path = path.parentPath; - } - - return false; -} - -function inShadow(key) { - var parentFn = this.isFunction() ? this : this.findParent(function (p) { - return p.isFunction(); - }); - if (!parentFn) return; - - if (parentFn.isFunctionExpression() || parentFn.isFunctionDeclaration()) { - var shadow = parentFn.node.shadow; - - if (shadow && (!key || shadow[key] !== false)) { - return parentFn; - } - } else if (parentFn.isArrowFunctionExpression()) { - return parentFn; - } - - return null; -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/comments.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/comments.js deleted file mode 100644 index 215add0d2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/comments.js +++ /dev/null @@ -1,45 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.shareCommentsWithSiblings = shareCommentsWithSiblings; -exports.addComment = addComment; -exports.addComments = addComments; -function shareCommentsWithSiblings() { - var node = this.node; - if (!node) return; - - var trailing = node.trailingComments; - var leading = node.leadingComments; - if (!trailing && !leading) return; - - var prev = this.getSibling(this.key - 1); - var next = this.getSibling(this.key + 1); - - if (!prev.node) prev = next; - if (!next.node) next = prev; - - prev.addComments("trailing", leading); - next.addComments("leading", trailing); -} - -function addComment(type, content, line) { - this.addComments(type, [{ - type: line ? "CommentLine" : "CommentBlock", - value: content - }]); -} - -function addComments(type, comments) { - if (!comments) return; - - var node = this.node; - if (!node) return; - - var key = type + "Comments"; - - if (node[key]) { - node[key] = node[key].concat(comments); - } else { - node[key] = comments; - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/context.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/context.js deleted file mode 100644 index 961e66e0c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/context.js +++ /dev/null @@ -1,281 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.call = call; -exports._call = _call; -exports.isBlacklisted = isBlacklisted; -exports.visit = visit; -exports.skip = skip; -exports.skipKey = skipKey; -exports.stop = stop; -exports.setScope = setScope; -exports.setContext = setContext; -exports.resync = resync; -exports._resyncParent = _resyncParent; -exports._resyncKey = _resyncKey; -exports._resyncList = _resyncList; -exports._resyncRemoved = _resyncRemoved; -exports.popContext = popContext; -exports.pushContext = pushContext; -exports.setup = setup; -exports.setKey = setKey; -exports.requeue = requeue; -exports._getQueueContexts = _getQueueContexts; - -var _index = require("../index"); - -var _index2 = _interopRequireDefault(_index); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function call(key) { - var opts = this.opts; - - this.debug(function () { - return key; - }); - - if (this.node) { - if (this._call(opts[key])) return true; - } - - if (this.node) { - return this._call(opts[this.node.type] && opts[this.node.type][key]); - } - - return false; -} - -function _call(fns) { - if (!fns) return false; - - for (var _iterator = fns, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var fn = _ref; - - if (!fn) continue; - - var node = this.node; - if (!node) return true; - - var ret = fn.call(this.state, this, this.state); - if (ret) throw new Error("Unexpected return value from visitor method " + fn); - - if (this.node !== node) return true; - - if (this.shouldStop || this.shouldSkip || this.removed) return true; - } - - return false; -} - -function isBlacklisted() { - var blacklist = this.opts.blacklist; - return blacklist && blacklist.indexOf(this.node.type) > -1; -} - -function visit() { - if (!this.node) { - return false; - } - - if (this.isBlacklisted()) { - return false; - } - - if (this.opts.shouldSkip && this.opts.shouldSkip(this)) { - return false; - } - - if (this.call("enter") || this.shouldSkip) { - this.debug(function () { - return "Skip..."; - }); - return this.shouldStop; - } - - this.debug(function () { - return "Recursing into..."; - }); - _index2.default.node(this.node, this.opts, this.scope, this.state, this, this.skipKeys); - - this.call("exit"); - - return this.shouldStop; -} - -function skip() { - this.shouldSkip = true; -} - -function skipKey(key) { - this.skipKeys[key] = true; -} - -function stop() { - this.shouldStop = true; - this.shouldSkip = true; -} - -function setScope() { - if (this.opts && this.opts.noScope) return; - - var target = this.context && this.context.scope; - - if (!target) { - var path = this.parentPath; - while (path && !target) { - if (path.opts && path.opts.noScope) return; - - target = path.scope; - path = path.parentPath; - } - } - - this.scope = this.getScope(target); - if (this.scope) this.scope.init(); -} - -function setContext(context) { - this.shouldSkip = false; - this.shouldStop = false; - this.removed = false; - this.skipKeys = {}; - - if (context) { - this.context = context; - this.state = context.state; - this.opts = context.opts; - } - - this.setScope(); - - return this; -} - -function resync() { - if (this.removed) return; - - this._resyncParent(); - this._resyncList(); - this._resyncKey(); -} - -function _resyncParent() { - if (this.parentPath) { - this.parent = this.parentPath.node; - } -} - -function _resyncKey() { - if (!this.container) return; - - if (this.node === this.container[this.key]) return; - - if (Array.isArray(this.container)) { - for (var i = 0; i < this.container.length; i++) { - if (this.container[i] === this.node) { - return this.setKey(i); - } - } - } else { - for (var key in this.container) { - if (this.container[key] === this.node) { - return this.setKey(key); - } - } - } - - this.key = null; -} - -function _resyncList() { - if (!this.parent || !this.inList) return; - - var newContainer = this.parent[this.listKey]; - if (this.container === newContainer) return; - - this.container = newContainer || null; -} - -function _resyncRemoved() { - if (this.key == null || !this.container || this.container[this.key] !== this.node) { - this._markRemoved(); - } -} - -function popContext() { - this.contexts.pop(); - this.setContext(this.contexts[this.contexts.length - 1]); -} - -function pushContext(context) { - this.contexts.push(context); - this.setContext(context); -} - -function setup(parentPath, container, listKey, key) { - this.inList = !!listKey; - this.listKey = listKey; - this.parentKey = listKey || key; - this.container = container; - - this.parentPath = parentPath || this.parentPath; - this.setKey(key); -} - -function setKey(key) { - this.key = key; - this.node = this.container[this.key]; - this.type = this.node && this.node.type; -} - -function requeue() { - var pathToQueue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this; - - if (pathToQueue.removed) return; - - var contexts = this.contexts; - - for (var _iterator2 = contexts, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var context = _ref2; - - context.maybeQueue(pathToQueue); - } -} - -function _getQueueContexts() { - var path = this; - var contexts = this.contexts; - while (!contexts.length) { - path = path.parentPath; - contexts = path.contexts; - } - return contexts; -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/conversion.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/conversion.js deleted file mode 100644 index 89892483f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/conversion.js +++ /dev/null @@ -1,47 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.toComputedKey = toComputedKey; -exports.ensureBlock = ensureBlock; -exports.arrowFunctionToShadowed = arrowFunctionToShadowed; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function toComputedKey() { - var node = this.node; - - var key = void 0; - if (this.isMemberExpression()) { - key = node.property; - } else if (this.isProperty() || this.isMethod()) { - key = node.key; - } else { - throw new ReferenceError("todo"); - } - - if (!node.computed) { - if (t.isIdentifier(key)) key = t.stringLiteral(key.name); - } - - return key; -} - -function ensureBlock() { - return t.ensureBlock(this.node); -} - -function arrowFunctionToShadowed() { - if (!this.isArrowFunctionExpression()) return; - - this.ensureBlock(); - - var node = this.node; - - node.expression = false; - node.type = "FunctionExpression"; - node.shadow = node.shadow || true; -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/evaluation.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/evaluation.js deleted file mode 100644 index 724d4728e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/evaluation.js +++ /dev/null @@ -1,394 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _typeof2 = require("babel-runtime/helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _map = require("babel-runtime/core-js/map"); - -var _map2 = _interopRequireDefault(_map); - -exports.evaluateTruthy = evaluateTruthy; -exports.evaluate = evaluate; - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var VALID_CALLEES = ["String", "Number", "Math"]; -var INVALID_METHODS = ["random"]; - -function evaluateTruthy() { - var res = this.evaluate(); - if (res.confident) return !!res.value; -} - -function evaluate() { - var confident = true; - var deoptPath = void 0; - var seen = new _map2.default(); - - function deopt(path) { - if (!confident) return; - deoptPath = path; - confident = false; - } - - var value = evaluate(this); - if (!confident) value = undefined; - return { - confident: confident, - deopt: deoptPath, - value: value - }; - - function evaluate(path) { - var node = path.node; - - - if (seen.has(node)) { - var existing = seen.get(node); - if (existing.resolved) { - return existing.value; - } else { - deopt(path); - return; - } - } else { - var item = { resolved: false }; - seen.set(node, item); - - var val = _evaluate(path); - if (confident) { - item.resolved = true; - item.value = val; - } - return val; - } - } - - function _evaluate(path) { - if (!confident) return; - - var node = path.node; - - - if (path.isSequenceExpression()) { - var exprs = path.get("expressions"); - return evaluate(exprs[exprs.length - 1]); - } - - if (path.isStringLiteral() || path.isNumericLiteral() || path.isBooleanLiteral()) { - return node.value; - } - - if (path.isNullLiteral()) { - return null; - } - - if (path.isTemplateLiteral()) { - var str = ""; - - var i = 0; - var _exprs = path.get("expressions"); - - for (var _iterator = node.quasis, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var elem = _ref; - - if (!confident) break; - - str += elem.value.cooked; - - var expr = _exprs[i++]; - if (expr) str += String(evaluate(expr)); - } - - if (!confident) return; - return str; - } - - if (path.isConditionalExpression()) { - var testResult = evaluate(path.get("test")); - if (!confident) return; - if (testResult) { - return evaluate(path.get("consequent")); - } else { - return evaluate(path.get("alternate")); - } - } - - if (path.isExpressionWrapper()) { - return evaluate(path.get("expression")); - } - - if (path.isMemberExpression() && !path.parentPath.isCallExpression({ callee: node })) { - var property = path.get("property"); - var object = path.get("object"); - - if (object.isLiteral() && property.isIdentifier()) { - var _value = object.node.value; - var type = typeof _value === "undefined" ? "undefined" : (0, _typeof3.default)(_value); - if (type === "number" || type === "string") { - return _value[property.node.name]; - } - } - } - - if (path.isReferencedIdentifier()) { - var binding = path.scope.getBinding(node.name); - - if (binding && binding.constantViolations.length > 0) { - return deopt(binding.path); - } - - if (binding && binding.hasValue) { - return binding.value; - } else { - if (node.name === "undefined") { - return undefined; - } else if (node.name === "Infinity") { - return Infinity; - } else if (node.name === "NaN") { - return NaN; - } - - var resolved = path.resolve(); - if (resolved === path) { - return deopt(path); - } else { - return evaluate(resolved); - } - } - } - - if (path.isUnaryExpression({ prefix: true })) { - if (node.operator === "void") { - return undefined; - } - - var argument = path.get("argument"); - if (node.operator === "typeof" && (argument.isFunction() || argument.isClass())) { - return "function"; - } - - var arg = evaluate(argument); - if (!confident) return; - switch (node.operator) { - case "!": - return !arg; - case "+": - return +arg; - case "-": - return -arg; - case "~": - return ~arg; - case "typeof": - return typeof arg === "undefined" ? "undefined" : (0, _typeof3.default)(arg); - } - } - - if (path.isArrayExpression()) { - var arr = []; - var elems = path.get("elements"); - for (var _iterator2 = elems, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var _elem = _ref2; - - _elem = _elem.evaluate(); - - if (_elem.confident) { - arr.push(_elem.value); - } else { - return deopt(_elem); - } - } - return arr; - } - - if (path.isObjectExpression()) { - var obj = {}; - var props = path.get("properties"); - for (var _iterator3 = props, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - var prop = _ref3; - - if (prop.isObjectMethod() || prop.isSpreadProperty()) { - return deopt(prop); - } - var keyPath = prop.get("key"); - var key = keyPath; - if (prop.node.computed) { - key = key.evaluate(); - if (!key.confident) { - return deopt(keyPath); - } - key = key.value; - } else if (key.isIdentifier()) { - key = key.node.name; - } else { - key = key.node.value; - } - var valuePath = prop.get("value"); - var _value2 = valuePath.evaluate(); - if (!_value2.confident) { - return deopt(valuePath); - } - _value2 = _value2.value; - obj[key] = _value2; - } - return obj; - } - - if (path.isLogicalExpression()) { - var wasConfident = confident; - var left = evaluate(path.get("left")); - var leftConfident = confident; - confident = wasConfident; - var right = evaluate(path.get("right")); - var rightConfident = confident; - confident = leftConfident && rightConfident; - - switch (node.operator) { - case "||": - if (left && leftConfident) { - confident = true; - return left; - } - - if (!confident) return; - - return left || right; - case "&&": - if (!left && leftConfident || !right && rightConfident) { - confident = true; - } - - if (!confident) return; - - return left && right; - } - } - - if (path.isBinaryExpression()) { - var _left = evaluate(path.get("left")); - if (!confident) return; - var _right = evaluate(path.get("right")); - if (!confident) return; - - switch (node.operator) { - case "-": - return _left - _right; - case "+": - return _left + _right; - case "/": - return _left / _right; - case "*": - return _left * _right; - case "%": - return _left % _right; - case "**": - return Math.pow(_left, _right); - case "<": - return _left < _right; - case ">": - return _left > _right; - case "<=": - return _left <= _right; - case ">=": - return _left >= _right; - case "==": - return _left == _right; - case "!=": - return _left != _right; - case "===": - return _left === _right; - case "!==": - return _left !== _right; - case "|": - return _left | _right; - case "&": - return _left & _right; - case "^": - return _left ^ _right; - case "<<": - return _left << _right; - case ">>": - return _left >> _right; - case ">>>": - return _left >>> _right; - } - } - - if (path.isCallExpression()) { - var callee = path.get("callee"); - var context = void 0; - var func = void 0; - - if (callee.isIdentifier() && !path.scope.getBinding(callee.node.name, true) && VALID_CALLEES.indexOf(callee.node.name) >= 0) { - func = global[node.callee.name]; - } - - if (callee.isMemberExpression()) { - var _object = callee.get("object"); - var _property = callee.get("property"); - - if (_object.isIdentifier() && _property.isIdentifier() && VALID_CALLEES.indexOf(_object.node.name) >= 0 && INVALID_METHODS.indexOf(_property.node.name) < 0) { - context = global[_object.node.name]; - func = context[_property.node.name]; - } - - if (_object.isLiteral() && _property.isIdentifier()) { - var _type = (0, _typeof3.default)(_object.node.value); - if (_type === "string" || _type === "number") { - context = _object.node.value; - func = context[_property.node.name]; - } - } - } - - if (func) { - var args = path.get("arguments").map(evaluate); - if (!confident) return; - - return func.apply(context, args); - } - } - - deopt(path); - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/family.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/family.js deleted file mode 100644 index c3a60fdfd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/family.js +++ /dev/null @@ -1,165 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.getStatementParent = getStatementParent; -exports.getOpposite = getOpposite; -exports.getCompletionRecords = getCompletionRecords; -exports.getSibling = getSibling; -exports.get = get; -exports._getKey = _getKey; -exports._getPattern = _getPattern; -exports.getBindingIdentifiers = getBindingIdentifiers; -exports.getOuterBindingIdentifiers = getOuterBindingIdentifiers; - -var _index = require("./index"); - -var _index2 = _interopRequireDefault(_index); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function getStatementParent() { - var path = this; - - do { - if (!path.parentPath || Array.isArray(path.container) && path.isStatement()) { - break; - } else { - path = path.parentPath; - } - } while (path); - - if (path && (path.isProgram() || path.isFile())) { - throw new Error("File/Program node, we can't possibly find a statement parent to this"); - } - - return path; -} - -function getOpposite() { - if (this.key === "left") { - return this.getSibling("right"); - } else if (this.key === "right") { - return this.getSibling("left"); - } -} - -function getCompletionRecords() { - var paths = []; - - var add = function add(path) { - if (path) paths = paths.concat(path.getCompletionRecords()); - }; - - if (this.isIfStatement()) { - add(this.get("consequent")); - add(this.get("alternate")); - } else if (this.isDoExpression() || this.isFor() || this.isWhile()) { - add(this.get("body")); - } else if (this.isProgram() || this.isBlockStatement()) { - add(this.get("body").pop()); - } else if (this.isFunction()) { - return this.get("body").getCompletionRecords(); - } else if (this.isTryStatement()) { - add(this.get("block")); - add(this.get("handler")); - add(this.get("finalizer")); - } else { - paths.push(this); - } - - return paths; -} - -function getSibling(key) { - return _index2.default.get({ - parentPath: this.parentPath, - parent: this.parent, - container: this.container, - listKey: this.listKey, - key: key - }); -} - -function get(key, context) { - if (context === true) context = this.context; - var parts = key.split("."); - if (parts.length === 1) { - return this._getKey(key, context); - } else { - return this._getPattern(parts, context); - } -} - -function _getKey(key, context) { - var _this = this; - - var node = this.node; - var container = node[key]; - - if (Array.isArray(container)) { - return container.map(function (_, i) { - return _index2.default.get({ - listKey: key, - parentPath: _this, - parent: node, - container: container, - key: i - }).setContext(context); - }); - } else { - return _index2.default.get({ - parentPath: this, - parent: node, - container: node, - key: key - }).setContext(context); - } -} - -function _getPattern(parts, context) { - var path = this; - for (var _iterator = parts, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var part = _ref; - - if (part === ".") { - path = path.parentPath; - } else { - if (Array.isArray(path)) { - path = path[part]; - } else { - path = path.get(part, context); - } - } - } - return path; -} - -function getBindingIdentifiers(duplicates) { - return t.getBindingIdentifiers(this.node, duplicates); -} - -function getOuterBindingIdentifiers(duplicates) { - return t.getOuterBindingIdentifiers(this.node, duplicates); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/index.js deleted file mode 100644 index dd8ae2464..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/index.js +++ /dev/null @@ -1,242 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _virtualTypes = require("./lib/virtual-types"); - -var virtualTypes = _interopRequireWildcard(_virtualTypes); - -var _debug2 = require("debug"); - -var _debug3 = _interopRequireDefault(_debug2); - -var _invariant = require("invariant"); - -var _invariant2 = _interopRequireDefault(_invariant); - -var _index = require("../index"); - -var _index2 = _interopRequireDefault(_index); - -var _assign = require("lodash/assign"); - -var _assign2 = _interopRequireDefault(_assign); - -var _scope = require("../scope"); - -var _scope2 = _interopRequireDefault(_scope); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _cache = require("../cache"); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var _debug = (0, _debug3.default)("babel"); - -var NodePath = function () { - function NodePath(hub, parent) { - (0, _classCallCheck3.default)(this, NodePath); - - this.parent = parent; - this.hub = hub; - this.contexts = []; - this.data = {}; - this.shouldSkip = false; - this.shouldStop = false; - this.removed = false; - this.state = null; - this.opts = null; - this.skipKeys = null; - this.parentPath = null; - this.context = null; - this.container = null; - this.listKey = null; - this.inList = false; - this.parentKey = null; - this.key = null; - this.node = null; - this.scope = null; - this.type = null; - this.typeAnnotation = null; - } - - NodePath.get = function get(_ref) { - var hub = _ref.hub, - parentPath = _ref.parentPath, - parent = _ref.parent, - container = _ref.container, - listKey = _ref.listKey, - key = _ref.key; - - if (!hub && parentPath) { - hub = parentPath.hub; - } - - (0, _invariant2.default)(parent, "To get a node path the parent needs to exist"); - - var targetNode = container[key]; - - var paths = _cache.path.get(parent) || []; - if (!_cache.path.has(parent)) { - _cache.path.set(parent, paths); - } - - var path = void 0; - - for (var i = 0; i < paths.length; i++) { - var pathCheck = paths[i]; - if (pathCheck.node === targetNode) { - path = pathCheck; - break; - } - } - - if (!path) { - path = new NodePath(hub, parent); - paths.push(path); - } - - path.setup(parentPath, container, listKey, key); - - return path; - }; - - NodePath.prototype.getScope = function getScope(scope) { - var ourScope = scope; - - if (this.isScope()) { - ourScope = new _scope2.default(this, scope); - } - - return ourScope; - }; - - NodePath.prototype.setData = function setData(key, val) { - return this.data[key] = val; - }; - - NodePath.prototype.getData = function getData(key, def) { - var val = this.data[key]; - if (!val && def) val = this.data[key] = def; - return val; - }; - - NodePath.prototype.buildCodeFrameError = function buildCodeFrameError(msg) { - var Error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SyntaxError; - - return this.hub.file.buildCodeFrameError(this.node, msg, Error); - }; - - NodePath.prototype.traverse = function traverse(visitor, state) { - (0, _index2.default)(this.node, visitor, this.scope, state, this); - }; - - NodePath.prototype.mark = function mark(type, message) { - this.hub.file.metadata.marked.push({ - type: type, - message: message, - loc: this.node.loc - }); - }; - - NodePath.prototype.set = function set(key, node) { - t.validate(this.node, key, node); - this.node[key] = node; - }; - - NodePath.prototype.getPathLocation = function getPathLocation() { - var parts = []; - var path = this; - do { - var key = path.key; - if (path.inList) key = path.listKey + "[" + key + "]"; - parts.unshift(key); - } while (path = path.parentPath); - return parts.join("."); - }; - - NodePath.prototype.debug = function debug(buildMessage) { - if (!_debug.enabled) return; - _debug(this.getPathLocation() + " " + this.type + ": " + buildMessage()); - }; - - return NodePath; -}(); - -exports.default = NodePath; - - -(0, _assign2.default)(NodePath.prototype, require("./ancestry")); -(0, _assign2.default)(NodePath.prototype, require("./inference")); -(0, _assign2.default)(NodePath.prototype, require("./replacement")); -(0, _assign2.default)(NodePath.prototype, require("./evaluation")); -(0, _assign2.default)(NodePath.prototype, require("./conversion")); -(0, _assign2.default)(NodePath.prototype, require("./introspection")); -(0, _assign2.default)(NodePath.prototype, require("./context")); -(0, _assign2.default)(NodePath.prototype, require("./removal")); -(0, _assign2.default)(NodePath.prototype, require("./modification")); -(0, _assign2.default)(NodePath.prototype, require("./family")); -(0, _assign2.default)(NodePath.prototype, require("./comments")); - -var _loop2 = function _loop2() { - if (_isArray) { - if (_i >= _iterator.length) return "break"; - _ref2 = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) return "break"; - _ref2 = _i.value; - } - - var type = _ref2; - - var typeKey = "is" + type; - NodePath.prototype[typeKey] = function (opts) { - return t[typeKey](this.node, opts); - }; - - NodePath.prototype["assert" + type] = function (opts) { - if (!this[typeKey](opts)) { - throw new TypeError("Expected node path of type " + type); - } - }; -}; - -for (var _iterator = t.TYPES, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref2; - - var _ret2 = _loop2(); - - if (_ret2 === "break") break; -} - -var _loop = function _loop(type) { - if (type[0] === "_") return "continue"; - if (t.TYPES.indexOf(type) < 0) t.TYPES.push(type); - - var virtualType = virtualTypes[type]; - - NodePath.prototype["is" + type] = function (opts) { - return virtualType.checkPath(this, opts); - }; -}; - -for (var type in virtualTypes) { - var _ret = _loop(type); - - if (_ret === "continue") continue; -} -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/inference/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/inference/index.js deleted file mode 100644 index d93966378..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/inference/index.js +++ /dev/null @@ -1,142 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.getTypeAnnotation = getTypeAnnotation; -exports._getTypeAnnotation = _getTypeAnnotation; -exports.isBaseType = isBaseType; -exports.couldBeBaseType = couldBeBaseType; -exports.baseTypeStrictlyMatches = baseTypeStrictlyMatches; -exports.isGenericType = isGenericType; - -var _inferers = require("./inferers"); - -var inferers = _interopRequireWildcard(_inferers); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function getTypeAnnotation() { - if (this.typeAnnotation) return this.typeAnnotation; - - var type = this._getTypeAnnotation() || t.anyTypeAnnotation(); - if (t.isTypeAnnotation(type)) type = type.typeAnnotation; - return this.typeAnnotation = type; -} - -function _getTypeAnnotation() { - var node = this.node; - - if (!node) { - if (this.key === "init" && this.parentPath.isVariableDeclarator()) { - var declar = this.parentPath.parentPath; - var declarParent = declar.parentPath; - - if (declar.key === "left" && declarParent.isForInStatement()) { - return t.stringTypeAnnotation(); - } - - if (declar.key === "left" && declarParent.isForOfStatement()) { - return t.anyTypeAnnotation(); - } - - return t.voidTypeAnnotation(); - } else { - return; - } - } - - if (node.typeAnnotation) { - return node.typeAnnotation; - } - - var inferer = inferers[node.type]; - if (inferer) { - return inferer.call(this, node); - } - - inferer = inferers[this.parentPath.type]; - if (inferer && inferer.validParent) { - return this.parentPath.getTypeAnnotation(); - } -} - -function isBaseType(baseName, soft) { - return _isBaseType(baseName, this.getTypeAnnotation(), soft); -} - -function _isBaseType(baseName, type, soft) { - if (baseName === "string") { - return t.isStringTypeAnnotation(type); - } else if (baseName === "number") { - return t.isNumberTypeAnnotation(type); - } else if (baseName === "boolean") { - return t.isBooleanTypeAnnotation(type); - } else if (baseName === "any") { - return t.isAnyTypeAnnotation(type); - } else if (baseName === "mixed") { - return t.isMixedTypeAnnotation(type); - } else if (baseName === "empty") { - return t.isEmptyTypeAnnotation(type); - } else if (baseName === "void") { - return t.isVoidTypeAnnotation(type); - } else { - if (soft) { - return false; - } else { - throw new Error("Unknown base type " + baseName); - } - } -} - -function couldBeBaseType(name) { - var type = this.getTypeAnnotation(); - if (t.isAnyTypeAnnotation(type)) return true; - - if (t.isUnionTypeAnnotation(type)) { - for (var _iterator = type.types, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var type2 = _ref; - - if (t.isAnyTypeAnnotation(type2) || _isBaseType(name, type2, true)) { - return true; - } - } - return false; - } else { - return _isBaseType(name, type, true); - } -} - -function baseTypeStrictlyMatches(right) { - var left = this.getTypeAnnotation(); - right = right.getTypeAnnotation(); - - if (!t.isAnyTypeAnnotation(left) && t.isFlowBaseAnnotation(left)) { - return right.type === left.type; - } -} - -function isGenericType(genericName) { - var type = this.getTypeAnnotation(); - return t.isGenericTypeAnnotation(type) && t.isIdentifier(type.id, { name: genericName }); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/inference/inferer-reference.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/inference/inferer-reference.js deleted file mode 100644 index 22ab3053a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/inference/inferer-reference.js +++ /dev/null @@ -1,187 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.default = function (node) { - if (!this.isReferenced()) return; - - var binding = this.scope.getBinding(node.name); - if (binding) { - if (binding.identifier.typeAnnotation) { - return binding.identifier.typeAnnotation; - } else { - return getTypeAnnotationBindingConstantViolations(this, node.name); - } - } - - if (node.name === "undefined") { - return t.voidTypeAnnotation(); - } else if (node.name === "NaN" || node.name === "Infinity") { - return t.numberTypeAnnotation(); - } else if (node.name === "arguments") {} -}; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function getTypeAnnotationBindingConstantViolations(path, name) { - var binding = path.scope.getBinding(name); - - var types = []; - path.typeAnnotation = t.unionTypeAnnotation(types); - - var functionConstantViolations = []; - var constantViolations = getConstantViolationsBefore(binding, path, functionConstantViolations); - - var testType = getConditionalAnnotation(path, name); - if (testType) { - (function () { - var testConstantViolations = getConstantViolationsBefore(binding, testType.ifStatement); - - constantViolations = constantViolations.filter(function (path) { - return testConstantViolations.indexOf(path) < 0; - }); - - types.push(testType.typeAnnotation); - })(); - } - - if (constantViolations.length) { - constantViolations = constantViolations.concat(functionConstantViolations); - - for (var _iterator = constantViolations, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var violation = _ref; - - types.push(violation.getTypeAnnotation()); - } - } - - if (types.length) { - return t.createUnionTypeAnnotation(types); - } -} - -function getConstantViolationsBefore(binding, path, functions) { - var violations = binding.constantViolations.slice(); - violations.unshift(binding.path); - return violations.filter(function (violation) { - violation = violation.resolve(); - var status = violation._guessExecutionStatusRelativeTo(path); - if (functions && status === "function") functions.push(violation); - return status === "before"; - }); -} - -function inferAnnotationFromBinaryExpression(name, path) { - var operator = path.node.operator; - - var right = path.get("right").resolve(); - var left = path.get("left").resolve(); - - var target = void 0; - if (left.isIdentifier({ name: name })) { - target = right; - } else if (right.isIdentifier({ name: name })) { - target = left; - } - if (target) { - if (operator === "===") { - return target.getTypeAnnotation(); - } else if (t.BOOLEAN_NUMBER_BINARY_OPERATORS.indexOf(operator) >= 0) { - return t.numberTypeAnnotation(); - } else { - return; - } - } else { - if (operator !== "===") return; - } - - var typeofPath = void 0; - var typePath = void 0; - if (left.isUnaryExpression({ operator: "typeof" })) { - typeofPath = left; - typePath = right; - } else if (right.isUnaryExpression({ operator: "typeof" })) { - typeofPath = right; - typePath = left; - } - if (!typePath && !typeofPath) return; - - typePath = typePath.resolve(); - if (!typePath.isLiteral()) return; - - var typeValue = typePath.node.value; - if (typeof typeValue !== "string") return; - - if (!typeofPath.get("argument").isIdentifier({ name: name })) return; - - return t.createTypeAnnotationBasedOnTypeof(typePath.node.value); -} - -function getParentConditionalPath(path) { - var parentPath = void 0; - while (parentPath = path.parentPath) { - if (parentPath.isIfStatement() || parentPath.isConditionalExpression()) { - if (path.key === "test") { - return; - } else { - return parentPath; - } - } else { - path = parentPath; - } - } -} - -function getConditionalAnnotation(path, name) { - var ifStatement = getParentConditionalPath(path); - if (!ifStatement) return; - - var test = ifStatement.get("test"); - var paths = [test]; - var types = []; - - do { - var _path = paths.shift().resolve(); - - if (_path.isLogicalExpression()) { - paths.push(_path.get("left")); - paths.push(_path.get("right")); - } - - if (_path.isBinaryExpression()) { - var type = inferAnnotationFromBinaryExpression(name, _path); - if (type) types.push(type); - } - } while (paths.length); - - if (types.length) { - return { - typeAnnotation: t.createUnionTypeAnnotation(types), - ifStatement: ifStatement - }; - } else { - return getConditionalAnnotation(ifStatement, name); - } -} -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/inference/inferers.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/inference/inferers.js deleted file mode 100644 index ecce2b482..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/inference/inferers.js +++ /dev/null @@ -1,195 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.ClassDeclaration = exports.ClassExpression = exports.FunctionDeclaration = exports.ArrowFunctionExpression = exports.FunctionExpression = exports.Identifier = undefined; - -var _infererReference = require("./inferer-reference"); - -Object.defineProperty(exports, "Identifier", { - enumerable: true, - get: function get() { - return _interopRequireDefault(_infererReference).default; - } -}); -exports.VariableDeclarator = VariableDeclarator; -exports.TypeCastExpression = TypeCastExpression; -exports.NewExpression = NewExpression; -exports.TemplateLiteral = TemplateLiteral; -exports.UnaryExpression = UnaryExpression; -exports.BinaryExpression = BinaryExpression; -exports.LogicalExpression = LogicalExpression; -exports.ConditionalExpression = ConditionalExpression; -exports.SequenceExpression = SequenceExpression; -exports.AssignmentExpression = AssignmentExpression; -exports.UpdateExpression = UpdateExpression; -exports.StringLiteral = StringLiteral; -exports.NumericLiteral = NumericLiteral; -exports.BooleanLiteral = BooleanLiteral; -exports.NullLiteral = NullLiteral; -exports.RegExpLiteral = RegExpLiteral; -exports.ObjectExpression = ObjectExpression; -exports.ArrayExpression = ArrayExpression; -exports.RestElement = RestElement; -exports.CallExpression = CallExpression; -exports.TaggedTemplateExpression = TaggedTemplateExpression; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function VariableDeclarator() { - var id = this.get("id"); - - if (id.isIdentifier()) { - return this.get("init").getTypeAnnotation(); - } else { - return; - } -} - -function TypeCastExpression(node) { - return node.typeAnnotation; -} - -TypeCastExpression.validParent = true; - -function NewExpression(node) { - if (this.get("callee").isIdentifier()) { - return t.genericTypeAnnotation(node.callee); - } -} - -function TemplateLiteral() { - return t.stringTypeAnnotation(); -} - -function UnaryExpression(node) { - var operator = node.operator; - - if (operator === "void") { - return t.voidTypeAnnotation(); - } else if (t.NUMBER_UNARY_OPERATORS.indexOf(operator) >= 0) { - return t.numberTypeAnnotation(); - } else if (t.STRING_UNARY_OPERATORS.indexOf(operator) >= 0) { - return t.stringTypeAnnotation(); - } else if (t.BOOLEAN_UNARY_OPERATORS.indexOf(operator) >= 0) { - return t.booleanTypeAnnotation(); - } -} - -function BinaryExpression(node) { - var operator = node.operator; - - if (t.NUMBER_BINARY_OPERATORS.indexOf(operator) >= 0) { - return t.numberTypeAnnotation(); - } else if (t.BOOLEAN_BINARY_OPERATORS.indexOf(operator) >= 0) { - return t.booleanTypeAnnotation(); - } else if (operator === "+") { - var right = this.get("right"); - var left = this.get("left"); - - if (left.isBaseType("number") && right.isBaseType("number")) { - return t.numberTypeAnnotation(); - } else if (left.isBaseType("string") || right.isBaseType("string")) { - return t.stringTypeAnnotation(); - } - - return t.unionTypeAnnotation([t.stringTypeAnnotation(), t.numberTypeAnnotation()]); - } -} - -function LogicalExpression() { - return t.createUnionTypeAnnotation([this.get("left").getTypeAnnotation(), this.get("right").getTypeAnnotation()]); -} - -function ConditionalExpression() { - return t.createUnionTypeAnnotation([this.get("consequent").getTypeAnnotation(), this.get("alternate").getTypeAnnotation()]); -} - -function SequenceExpression() { - return this.get("expressions").pop().getTypeAnnotation(); -} - -function AssignmentExpression() { - return this.get("right").getTypeAnnotation(); -} - -function UpdateExpression(node) { - var operator = node.operator; - if (operator === "++" || operator === "--") { - return t.numberTypeAnnotation(); - } -} - -function StringLiteral() { - return t.stringTypeAnnotation(); -} - -function NumericLiteral() { - return t.numberTypeAnnotation(); -} - -function BooleanLiteral() { - return t.booleanTypeAnnotation(); -} - -function NullLiteral() { - return t.nullLiteralTypeAnnotation(); -} - -function RegExpLiteral() { - return t.genericTypeAnnotation(t.identifier("RegExp")); -} - -function ObjectExpression() { - return t.genericTypeAnnotation(t.identifier("Object")); -} - -function ArrayExpression() { - return t.genericTypeAnnotation(t.identifier("Array")); -} - -function RestElement() { - return ArrayExpression(); -} - -RestElement.validParent = true; - -function Func() { - return t.genericTypeAnnotation(t.identifier("Function")); -} - -exports.FunctionExpression = Func; -exports.ArrowFunctionExpression = Func; -exports.FunctionDeclaration = Func; -exports.ClassExpression = Func; -exports.ClassDeclaration = Func; -function CallExpression() { - return resolveCall(this.get("callee")); -} - -function TaggedTemplateExpression() { - return resolveCall(this.get("tag")); -} - -function resolveCall(callee) { - callee = callee.resolve(); - - if (callee.isFunction()) { - if (callee.is("async")) { - if (callee.is("generator")) { - return t.genericTypeAnnotation(t.identifier("AsyncIterator")); - } else { - return t.genericTypeAnnotation(t.identifier("Promise")); - } - } else { - if (callee.node.returnType) { - return callee.node.returnType; - } else {} - } - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/introspection.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/introspection.js deleted file mode 100644 index a84f9d219..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/introspection.js +++ /dev/null @@ -1,400 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.is = undefined; - -var _typeof2 = require("babel-runtime/helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.matchesPattern = matchesPattern; -exports.has = has; -exports.isStatic = isStatic; -exports.isnt = isnt; -exports.equals = equals; -exports.isNodeType = isNodeType; -exports.canHaveVariableDeclarationOrExpression = canHaveVariableDeclarationOrExpression; -exports.canSwapBetweenExpressionAndStatement = canSwapBetweenExpressionAndStatement; -exports.isCompletionRecord = isCompletionRecord; -exports.isStatementOrBlock = isStatementOrBlock; -exports.referencesImport = referencesImport; -exports.getSource = getSource; -exports.willIMaybeExecuteBefore = willIMaybeExecuteBefore; -exports._guessExecutionStatusRelativeTo = _guessExecutionStatusRelativeTo; -exports._guessExecutionStatusRelativeToDifferentFunctions = _guessExecutionStatusRelativeToDifferentFunctions; -exports.resolve = resolve; -exports._resolve = _resolve; - -var _includes = require("lodash/includes"); - -var _includes2 = _interopRequireDefault(_includes); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function matchesPattern(pattern, allowPartial) { - if (!this.isMemberExpression()) return false; - - var parts = pattern.split("."); - var search = [this.node]; - var i = 0; - - function matches(name) { - var part = parts[i]; - return part === "*" || name === part; - } - - while (search.length) { - var node = search.shift(); - - if (allowPartial && i === parts.length) { - return true; - } - - if (t.isIdentifier(node)) { - if (!matches(node.name)) return false; - } else if (t.isLiteral(node)) { - if (!matches(node.value)) return false; - } else if (t.isMemberExpression(node)) { - if (node.computed && !t.isLiteral(node.property)) { - return false; - } else { - search.unshift(node.property); - search.unshift(node.object); - continue; - } - } else if (t.isThisExpression(node)) { - if (!matches("this")) return false; - } else { - return false; - } - - if (++i > parts.length) { - return false; - } - } - - return i === parts.length; -} - -function has(key) { - var val = this.node && this.node[key]; - if (val && Array.isArray(val)) { - return !!val.length; - } else { - return !!val; - } -} - -function isStatic() { - return this.scope.isStatic(this.node); -} - -var is = exports.is = has; - -function isnt(key) { - return !this.has(key); -} - -function equals(key, value) { - return this.node[key] === value; -} - -function isNodeType(type) { - return t.isType(this.type, type); -} - -function canHaveVariableDeclarationOrExpression() { - return (this.key === "init" || this.key === "left") && this.parentPath.isFor(); -} - -function canSwapBetweenExpressionAndStatement(replacement) { - if (this.key !== "body" || !this.parentPath.isArrowFunctionExpression()) { - return false; - } - - if (this.isExpression()) { - return t.isBlockStatement(replacement); - } else if (this.isBlockStatement()) { - return t.isExpression(replacement); - } - - return false; -} - -function isCompletionRecord(allowInsideFunction) { - var path = this; - var first = true; - - do { - var container = path.container; - - if (path.isFunction() && !first) { - return !!allowInsideFunction; - } - - first = false; - - if (Array.isArray(container) && path.key !== container.length - 1) { - return false; - } - } while ((path = path.parentPath) && !path.isProgram()); - - return true; -} - -function isStatementOrBlock() { - if (this.parentPath.isLabeledStatement() || t.isBlockStatement(this.container)) { - return false; - } else { - return (0, _includes2.default)(t.STATEMENT_OR_BLOCK_KEYS, this.key); - } -} - -function referencesImport(moduleSource, importName) { - if (!this.isReferencedIdentifier()) return false; - - var binding = this.scope.getBinding(this.node.name); - if (!binding || binding.kind !== "module") return false; - - var path = binding.path; - var parent = path.parentPath; - if (!parent.isImportDeclaration()) return false; - - if (parent.node.source.value === moduleSource) { - if (!importName) return true; - } else { - return false; - } - - if (path.isImportDefaultSpecifier() && importName === "default") { - return true; - } - - if (path.isImportNamespaceSpecifier() && importName === "*") { - return true; - } - - if (path.isImportSpecifier() && path.node.imported.name === importName) { - return true; - } - - return false; -} - -function getSource() { - var node = this.node; - if (node.end) { - return this.hub.file.code.slice(node.start, node.end); - } else { - return ""; - } -} - -function willIMaybeExecuteBefore(target) { - return this._guessExecutionStatusRelativeTo(target) !== "after"; -} - -function _guessExecutionStatusRelativeTo(target) { - var targetFuncParent = target.scope.getFunctionParent(); - var selfFuncParent = this.scope.getFunctionParent(); - - if (targetFuncParent.node !== selfFuncParent.node) { - var status = this._guessExecutionStatusRelativeToDifferentFunctions(targetFuncParent); - if (status) { - return status; - } else { - target = targetFuncParent.path; - } - } - - var targetPaths = target.getAncestry(); - if (targetPaths.indexOf(this) >= 0) return "after"; - - var selfPaths = this.getAncestry(); - - var commonPath = void 0; - var targetIndex = void 0; - var selfIndex = void 0; - for (selfIndex = 0; selfIndex < selfPaths.length; selfIndex++) { - var selfPath = selfPaths[selfIndex]; - targetIndex = targetPaths.indexOf(selfPath); - if (targetIndex >= 0) { - commonPath = selfPath; - break; - } - } - if (!commonPath) { - return "before"; - } - - var targetRelationship = targetPaths[targetIndex - 1]; - var selfRelationship = selfPaths[selfIndex - 1]; - if (!targetRelationship || !selfRelationship) { - return "before"; - } - - if (targetRelationship.listKey && targetRelationship.container === selfRelationship.container) { - return targetRelationship.key > selfRelationship.key ? "before" : "after"; - } - - var targetKeyPosition = t.VISITOR_KEYS[targetRelationship.type].indexOf(targetRelationship.key); - var selfKeyPosition = t.VISITOR_KEYS[selfRelationship.type].indexOf(selfRelationship.key); - return targetKeyPosition > selfKeyPosition ? "before" : "after"; -} - -function _guessExecutionStatusRelativeToDifferentFunctions(targetFuncParent) { - var targetFuncPath = targetFuncParent.path; - if (!targetFuncPath.isFunctionDeclaration()) return; - - var binding = targetFuncPath.scope.getBinding(targetFuncPath.node.id.name); - - if (!binding.references) return "before"; - - var referencePaths = binding.referencePaths; - - for (var _iterator = referencePaths, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var path = _ref; - - if (path.key !== "callee" || !path.parentPath.isCallExpression()) { - return; - } - } - - var allStatus = void 0; - - for (var _iterator2 = referencePaths, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var _path = _ref2; - - var childOfFunction = !!_path.find(function (path) { - return path.node === targetFuncPath.node; - }); - if (childOfFunction) continue; - - var status = this._guessExecutionStatusRelativeTo(_path); - - if (allStatus) { - if (allStatus !== status) return; - } else { - allStatus = status; - } - } - - return allStatus; -} - -function resolve(dangerous, resolved) { - return this._resolve(dangerous, resolved) || this; -} - -function _resolve(dangerous, resolved) { - var _this = this; - - if (resolved && resolved.indexOf(this) >= 0) return; - - resolved = resolved || []; - resolved.push(this); - - if (this.isVariableDeclarator()) { - if (this.get("id").isIdentifier()) { - return this.get("init").resolve(dangerous, resolved); - } else {} - } else if (this.isReferencedIdentifier()) { - var binding = this.scope.getBinding(this.node.name); - if (!binding) return; - - if (!binding.constant) return; - - if (binding.kind === "module") return; - - if (binding.path !== this) { - var _ret = function () { - var ret = binding.path.resolve(dangerous, resolved); - - if (_this.find(function (parent) { - return parent.node === ret.node; - })) return { - v: void 0 - }; - return { - v: ret - }; - }(); - - if ((typeof _ret === "undefined" ? "undefined" : (0, _typeof3.default)(_ret)) === "object") return _ret.v; - } - } else if (this.isTypeCastExpression()) { - return this.get("expression").resolve(dangerous, resolved); - } else if (dangerous && this.isMemberExpression()) { - - var targetKey = this.toComputedKey(); - if (!t.isLiteral(targetKey)) return; - - var targetName = targetKey.value; - - var target = this.get("object").resolve(dangerous, resolved); - - if (target.isObjectExpression()) { - var props = target.get("properties"); - for (var _iterator3 = props, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - var prop = _ref3; - - if (!prop.isProperty()) continue; - - var key = prop.get("key"); - - var match = prop.isnt("computed") && key.isIdentifier({ name: targetName }); - - match = match || key.isLiteral({ value: targetName }); - - if (match) return prop.get("value").resolve(dangerous, resolved); - } - } else if (target.isArrayExpression() && !isNaN(+targetName)) { - var elems = target.get("elements"); - var elem = elems[targetName]; - if (elem) return elem.resolve(dangerous, resolved); - } - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/lib/hoister.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/lib/hoister.js deleted file mode 100644 index bcf8d78c4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/lib/hoister.js +++ /dev/null @@ -1,180 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var referenceVisitor = { - ReferencedIdentifier: function ReferencedIdentifier(path, state) { - if (path.isJSXIdentifier() && _babelTypes.react.isCompatTag(path.node.name)) { - return; - } - - var binding = path.scope.getBinding(path.node.name); - if (!binding) return; - - if (binding !== state.scope.getBinding(path.node.name)) return; - - if (binding.constant) { - state.bindings[path.node.name] = binding; - } else { - for (var _iterator = binding.constantViolations, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var violationPath = _ref; - - state.breakOnScopePaths = state.breakOnScopePaths.concat(violationPath.getAncestry()); - } - } - } -}; - -var PathHoister = function () { - function PathHoister(path, scope) { - (0, _classCallCheck3.default)(this, PathHoister); - - this.breakOnScopePaths = []; - this.bindings = {}; - this.scopes = []; - this.scope = scope; - this.path = path; - } - - PathHoister.prototype.isCompatibleScope = function isCompatibleScope(scope) { - for (var key in this.bindings) { - var binding = this.bindings[key]; - if (!scope.bindingIdentifierEquals(key, binding.identifier)) { - return false; - } - } - - return true; - }; - - PathHoister.prototype.getCompatibleScopes = function getCompatibleScopes() { - var scope = this.path.scope; - do { - if (this.isCompatibleScope(scope)) { - this.scopes.push(scope); - } else { - break; - } - - if (this.breakOnScopePaths.indexOf(scope.path) >= 0) { - break; - } - } while (scope = scope.parent); - }; - - PathHoister.prototype.getAttachmentPath = function getAttachmentPath() { - var path = this._getAttachmentPath(); - if (!path) return; - - var targetScope = path.scope; - - if (targetScope.path === path) { - targetScope = path.scope.parent; - } - - if (targetScope.path.isProgram() || targetScope.path.isFunction()) { - for (var name in this.bindings) { - if (!targetScope.hasOwnBinding(name)) continue; - - var binding = this.bindings[name]; - - if (binding.kind === "param") continue; - - if (binding.path.getStatementParent().key > path.key) return; - } - } - - return path; - }; - - PathHoister.prototype._getAttachmentPath = function _getAttachmentPath() { - var scopes = this.scopes; - - var scope = scopes.pop(); - if (!scope) return; - - if (scope.path.isFunction()) { - if (this.hasOwnParamBindings(scope)) { - if (this.scope === scope) return; - - return scope.path.get("body").get("body")[0]; - } else { - return this.getNextScopeStatementParent(); - } - } else if (scope.path.isProgram()) { - return this.getNextScopeStatementParent(); - } - }; - - PathHoister.prototype.getNextScopeStatementParent = function getNextScopeStatementParent() { - var scope = this.scopes.pop(); - if (scope) return scope.path.getStatementParent(); - }; - - PathHoister.prototype.hasOwnParamBindings = function hasOwnParamBindings(scope) { - for (var name in this.bindings) { - if (!scope.hasOwnBinding(name)) continue; - - var binding = this.bindings[name]; - if (binding.kind === "param") return true; - } - return false; - }; - - PathHoister.prototype.run = function run() { - var node = this.path.node; - if (node._hoisted) return; - node._hoisted = true; - - this.path.traverse(referenceVisitor, this); - - this.getCompatibleScopes(); - - var attachTo = this.getAttachmentPath(); - if (!attachTo) return; - - if (attachTo.getFunctionParent() === this.path.getFunctionParent()) return; - - var uid = attachTo.scope.generateUidIdentifier("ref"); - attachTo.insertBefore([t.variableDeclaration("var", [t.variableDeclarator(uid, this.path.node)])]); - - var parent = this.path.parentPath; - if (parent.isJSXElement() && this.path.container === parent.node.children) { - uid = t.JSXExpressionContainer(uid); - } - - this.path.replaceWith(uid); - }; - - return PathHoister; -}(); - -exports.default = PathHoister; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/lib/removal-hooks.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/lib/removal-hooks.js deleted file mode 100644 index 6838b74d4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/lib/removal-hooks.js +++ /dev/null @@ -1,48 +0,0 @@ -"use strict"; - -exports.__esModule = true; -var hooks = exports.hooks = [function (self, parent) { - if (self.key === "body" && parent.isArrowFunctionExpression()) { - self.replaceWith(self.scope.buildUndefinedNode()); - return true; - } -}, function (self, parent) { - var removeParent = false; - - removeParent = removeParent || self.key === "test" && (parent.isWhile() || parent.isSwitchCase()); - - removeParent = removeParent || self.key === "declaration" && parent.isExportDeclaration(); - - removeParent = removeParent || self.key === "body" && parent.isLabeledStatement(); - - removeParent = removeParent || self.listKey === "declarations" && parent.isVariableDeclaration() && parent.node.declarations.length === 1; - - removeParent = removeParent || self.key === "expression" && parent.isExpressionStatement(); - - if (removeParent) { - parent.remove(); - return true; - } -}, function (self, parent) { - if (parent.isSequenceExpression() && parent.node.expressions.length === 1) { - parent.replaceWith(parent.node.expressions[0]); - return true; - } -}, function (self, parent) { - if (parent.isBinary()) { - if (self.key === "left") { - parent.replaceWith(parent.node.right); - } else { - parent.replaceWith(parent.node.left); - } - return true; - } -}, function (self, parent) { - if (parent.isIfStatement() && (self.key === 'consequent' || self.key === 'alternate') || parent.isLoop() && self.key === 'body') { - self.replaceWith({ - type: 'BlockStatement', - body: [] - }); - return true; - } -}]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/lib/virtual-types.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/lib/virtual-types.js deleted file mode 100644 index f4c1a7b78..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/lib/virtual-types.js +++ /dev/null @@ -1,139 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.Flow = exports.Pure = exports.Generated = exports.User = exports.Var = exports.BlockScoped = exports.Referenced = exports.Scope = exports.Expression = exports.Statement = exports.BindingIdentifier = exports.ReferencedMemberExpression = exports.ReferencedIdentifier = undefined; - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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 ReferencedIdentifier = exports.ReferencedIdentifier = { - types: ["Identifier", "JSXIdentifier"], - checkPath: function checkPath(_ref, opts) { - var node = _ref.node, - parent = _ref.parent; - - if (!t.isIdentifier(node, opts) && !t.isJSXMemberExpression(parent, opts)) { - if (t.isJSXIdentifier(node, opts)) { - if (_babelTypes.react.isCompatTag(node.name)) return false; - } else { - return false; - } - } - - return t.isReferenced(node, parent); - } -}; - -var ReferencedMemberExpression = exports.ReferencedMemberExpression = { - types: ["MemberExpression"], - checkPath: function checkPath(_ref2) { - var node = _ref2.node, - parent = _ref2.parent; - - return t.isMemberExpression(node) && t.isReferenced(node, parent); - } -}; - -var BindingIdentifier = exports.BindingIdentifier = { - types: ["Identifier"], - checkPath: function checkPath(_ref3) { - var node = _ref3.node, - parent = _ref3.parent; - - return t.isIdentifier(node) && t.isBinding(node, parent); - } -}; - -var Statement = exports.Statement = { - types: ["Statement"], - checkPath: function checkPath(_ref4) { - var node = _ref4.node, - parent = _ref4.parent; - - if (t.isStatement(node)) { - if (t.isVariableDeclaration(node)) { - if (t.isForXStatement(parent, { left: node })) return false; - if (t.isForStatement(parent, { init: node })) return false; - } - - return true; - } else { - return false; - } - } -}; - -var Expression = exports.Expression = { - types: ["Expression"], - checkPath: function checkPath(path) { - if (path.isIdentifier()) { - return path.isReferencedIdentifier(); - } else { - return t.isExpression(path.node); - } - } -}; - -var Scope = exports.Scope = { - types: ["Scopable"], - checkPath: function checkPath(path) { - return t.isScope(path.node, path.parent); - } -}; - -var Referenced = exports.Referenced = { - checkPath: function checkPath(path) { - return t.isReferenced(path.node, path.parent); - } -}; - -var BlockScoped = exports.BlockScoped = { - checkPath: function checkPath(path) { - return t.isBlockScoped(path.node); - } -}; - -var Var = exports.Var = { - types: ["VariableDeclaration"], - checkPath: function checkPath(path) { - return t.isVar(path.node); - } -}; - -var User = exports.User = { - checkPath: function checkPath(path) { - return path.node && !!path.node.loc; - } -}; - -var Generated = exports.Generated = { - checkPath: function checkPath(path) { - return !path.isUser(); - } -}; - -var Pure = exports.Pure = { - checkPath: function checkPath(path, opts) { - return path.scope.isPure(path.node, opts); - } -}; - -var Flow = exports.Flow = { - types: ["Flow", "ImportDeclaration", "ExportDeclaration"], - checkPath: function checkPath(_ref5) { - var node = _ref5.node; - - if (t.isFlow(node)) { - return true; - } else if (t.isImportDeclaration(node)) { - return node.importKind === "type" || node.importKind === "typeof"; - } else if (t.isExportDeclaration(node)) { - return node.exportKind === "type"; - } else { - return false; - } - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/modification.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/modification.js deleted file mode 100644 index a763f6d7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/modification.js +++ /dev/null @@ -1,264 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _typeof2 = require("babel-runtime/helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.insertBefore = insertBefore; -exports._containerInsert = _containerInsert; -exports._containerInsertBefore = _containerInsertBefore; -exports._containerInsertAfter = _containerInsertAfter; -exports._maybePopFromStatements = _maybePopFromStatements; -exports.insertAfter = insertAfter; -exports.updateSiblingKeys = updateSiblingKeys; -exports._verifyNodeList = _verifyNodeList; -exports.unshiftContainer = unshiftContainer; -exports.pushContainer = pushContainer; -exports.hoist = hoist; - -var _cache = require("../cache"); - -var _hoister = require("./lib/hoister"); - -var _hoister2 = _interopRequireDefault(_hoister); - -var _index = require("./index"); - -var _index2 = _interopRequireDefault(_index); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function insertBefore(nodes) { - this._assertUnremoved(); - - nodes = this._verifyNodeList(nodes); - - if (this.parentPath.isExpressionStatement() || this.parentPath.isLabeledStatement()) { - return this.parentPath.insertBefore(nodes); - } else if (this.isNodeType("Expression") || this.parentPath.isForStatement() && this.key === "init") { - if (this.node) nodes.push(this.node); - this.replaceExpressionWithStatements(nodes); - } else { - this._maybePopFromStatements(nodes); - if (Array.isArray(this.container)) { - return this._containerInsertBefore(nodes); - } else if (this.isStatementOrBlock()) { - if (this.node) nodes.push(this.node); - this._replaceWith(t.blockStatement(nodes)); - } else { - throw new Error("We don't know what to do with this node type. We were previously a Statement but we can't fit in here?"); - } - } - - return [this]; -} - -function _containerInsert(from, nodes) { - this.updateSiblingKeys(from, nodes.length); - - var paths = []; - - for (var i = 0; i < nodes.length; i++) { - var to = from + i; - var node = nodes[i]; - this.container.splice(to, 0, node); - - if (this.context) { - var path = this.context.create(this.parent, this.container, to, this.listKey); - - if (this.context.queue) path.pushContext(this.context); - paths.push(path); - } else { - paths.push(_index2.default.get({ - parentPath: this.parentPath, - parent: this.parent, - container: this.container, - listKey: this.listKey, - key: to - })); - } - } - - var contexts = this._getQueueContexts(); - - for (var _iterator = paths, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var _path = _ref; - - _path.setScope(); - _path.debug(function () { - return "Inserted."; - }); - - for (var _iterator2 = contexts, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var context = _ref2; - - context.maybeQueue(_path, true); - } - } - - return paths; -} - -function _containerInsertBefore(nodes) { - return this._containerInsert(this.key, nodes); -} - -function _containerInsertAfter(nodes) { - return this._containerInsert(this.key + 1, nodes); -} - -function _maybePopFromStatements(nodes) { - var last = nodes[nodes.length - 1]; - var isIdentifier = t.isIdentifier(last) || t.isExpressionStatement(last) && t.isIdentifier(last.expression); - - if (isIdentifier && !this.isCompletionRecord()) { - nodes.pop(); - } -} - -function insertAfter(nodes) { - this._assertUnremoved(); - - nodes = this._verifyNodeList(nodes); - - if (this.parentPath.isExpressionStatement() || this.parentPath.isLabeledStatement()) { - return this.parentPath.insertAfter(nodes); - } else if (this.isNodeType("Expression") || this.parentPath.isForStatement() && this.key === "init") { - if (this.node) { - var temp = this.scope.generateDeclaredUidIdentifier(); - nodes.unshift(t.expressionStatement(t.assignmentExpression("=", temp, this.node))); - nodes.push(t.expressionStatement(temp)); - } - this.replaceExpressionWithStatements(nodes); - } else { - this._maybePopFromStatements(nodes); - if (Array.isArray(this.container)) { - return this._containerInsertAfter(nodes); - } else if (this.isStatementOrBlock()) { - if (this.node) nodes.unshift(this.node); - this._replaceWith(t.blockStatement(nodes)); - } else { - throw new Error("We don't know what to do with this node type. We were previously a Statement but we can't fit in here?"); - } - } - - return [this]; -} - -function updateSiblingKeys(fromIndex, incrementBy) { - if (!this.parent) return; - - var paths = _cache.path.get(this.parent); - for (var i = 0; i < paths.length; i++) { - var path = paths[i]; - if (path.key >= fromIndex) { - path.key += incrementBy; - } - } -} - -function _verifyNodeList(nodes) { - if (!nodes) { - return []; - } - - if (nodes.constructor !== Array) { - nodes = [nodes]; - } - - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - var msg = void 0; - - if (!node) { - msg = "has falsy node"; - } else if ((typeof node === "undefined" ? "undefined" : (0, _typeof3.default)(node)) !== "object") { - msg = "contains a non-object node"; - } else if (!node.type) { - msg = "without a type"; - } else if (node instanceof _index2.default) { - msg = "has a NodePath when it expected a raw object"; - } - - if (msg) { - var type = Array.isArray(node) ? "array" : typeof node === "undefined" ? "undefined" : (0, _typeof3.default)(node); - throw new Error("Node list " + msg + " with the index of " + i + " and type of " + type); - } - } - - return nodes; -} - -function unshiftContainer(listKey, nodes) { - this._assertUnremoved(); - - nodes = this._verifyNodeList(nodes); - - var path = _index2.default.get({ - parentPath: this, - parent: this.node, - container: this.node[listKey], - listKey: listKey, - key: 0 - }); - - return path.insertBefore(nodes); -} - -function pushContainer(listKey, nodes) { - this._assertUnremoved(); - - nodes = this._verifyNodeList(nodes); - - var container = this.node[listKey]; - var path = _index2.default.get({ - parentPath: this, - parent: this.node, - container: container, - listKey: listKey, - key: container.length - }); - - return path.replaceWithMultiple(nodes); -} - -function hoist() { - var scope = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.scope; - - var hoister = new _hoister2.default(this, scope); - return hoister.run(); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/removal.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/removal.js deleted file mode 100644 index 04f314749..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/removal.js +++ /dev/null @@ -1,72 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.remove = remove; -exports._callRemovalHooks = _callRemovalHooks; -exports._remove = _remove; -exports._markRemoved = _markRemoved; -exports._assertUnremoved = _assertUnremoved; - -var _removalHooks = require("./lib/removal-hooks"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function remove() { - this._assertUnremoved(); - - this.resync(); - - if (this._callRemovalHooks()) { - this._markRemoved(); - return; - } - - this.shareCommentsWithSiblings(); - this._remove(); - this._markRemoved(); -} - -function _callRemovalHooks() { - for (var _iterator = _removalHooks.hooks, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var fn = _ref; - - if (fn(this, this.parentPath)) return true; - } -} - -function _remove() { - if (Array.isArray(this.container)) { - this.container.splice(this.key, 1); - this.updateSiblingKeys(this.key, -1); - } else { - this._replaceWith(null); - } -} - -function _markRemoved() { - this.shouldSkip = true; - this.removed = true; - this.node = null; -} - -function _assertUnremoved() { - if (this.removed) { - throw this.buildCodeFrameError("NodePath has been removed so is read-only."); - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/replacement.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/replacement.js deleted file mode 100644 index dc852334d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/path/replacement.js +++ /dev/null @@ -1,262 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.replaceWithMultiple = replaceWithMultiple; -exports.replaceWithSourceString = replaceWithSourceString; -exports.replaceWith = replaceWith; -exports._replaceWith = _replaceWith; -exports.replaceExpressionWithStatements = replaceExpressionWithStatements; -exports.replaceInline = replaceInline; - -var _babelCodeFrame = require("babel-code-frame"); - -var _babelCodeFrame2 = _interopRequireDefault(_babelCodeFrame); - -var _index = require("../index"); - -var _index2 = _interopRequireDefault(_index); - -var _index3 = require("./index"); - -var _index4 = _interopRequireDefault(_index3); - -var _babylon = require("babylon"); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var hoistVariablesVisitor = { - Function: function Function(path) { - path.skip(); - }, - VariableDeclaration: function VariableDeclaration(path) { - if (path.node.kind !== "var") return; - - var bindings = path.getBindingIdentifiers(); - for (var key in bindings) { - path.scope.push({ id: bindings[key] }); - } - - var exprs = []; - - for (var _iterator = path.node.declarations, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var declar = _ref; - - if (declar.init) { - exprs.push(t.expressionStatement(t.assignmentExpression("=", declar.id, declar.init))); - } - } - - path.replaceWithMultiple(exprs); - } -}; - -function replaceWithMultiple(nodes) { - this.resync(); - - nodes = this._verifyNodeList(nodes); - t.inheritLeadingComments(nodes[0], this.node); - t.inheritTrailingComments(nodes[nodes.length - 1], this.node); - this.node = this.container[this.key] = null; - this.insertAfter(nodes); - - if (this.node) { - this.requeue(); - } else { - this.remove(); - } -} - -function replaceWithSourceString(replacement) { - this.resync(); - - try { - replacement = "(" + replacement + ")"; - replacement = (0, _babylon.parse)(replacement); - } catch (err) { - var loc = err.loc; - if (loc) { - err.message += " - make sure this is an expression."; - err.message += "\n" + (0, _babelCodeFrame2.default)(replacement, loc.line, loc.column + 1); - } - throw err; - } - - replacement = replacement.program.body[0].expression; - _index2.default.removeProperties(replacement); - return this.replaceWith(replacement); -} - -function replaceWith(replacement) { - this.resync(); - - if (this.removed) { - throw new Error("You can't replace this node, we've already removed it"); - } - - if (replacement instanceof _index4.default) { - replacement = replacement.node; - } - - if (!replacement) { - throw new Error("You passed `path.replaceWith()` a falsy node, use `path.remove()` instead"); - } - - if (this.node === replacement) { - return; - } - - if (this.isProgram() && !t.isProgram(replacement)) { - throw new Error("You can only replace a Program root node with another Program node"); - } - - if (Array.isArray(replacement)) { - throw new Error("Don't use `path.replaceWith()` with an array of nodes, use `path.replaceWithMultiple()`"); - } - - if (typeof replacement === "string") { - throw new Error("Don't use `path.replaceWith()` with a source string, use `path.replaceWithSourceString()`"); - } - - if (this.isNodeType("Statement") && t.isExpression(replacement)) { - if (!this.canHaveVariableDeclarationOrExpression() && !this.canSwapBetweenExpressionAndStatement(replacement)) { - replacement = t.expressionStatement(replacement); - } - } - - if (this.isNodeType("Expression") && t.isStatement(replacement)) { - if (!this.canHaveVariableDeclarationOrExpression() && !this.canSwapBetweenExpressionAndStatement(replacement)) { - return this.replaceExpressionWithStatements([replacement]); - } - } - - var oldNode = this.node; - if (oldNode) { - t.inheritsComments(replacement, oldNode); - t.removeComments(oldNode); - } - - this._replaceWith(replacement); - this.type = replacement.type; - - this.setScope(); - - this.requeue(); -} - -function _replaceWith(node) { - if (!this.container) { - throw new ReferenceError("Container is falsy"); - } - - if (this.inList) { - t.validate(this.parent, this.key, [node]); - } else { - t.validate(this.parent, this.key, node); - } - - this.debug(function () { - return "Replace with " + (node && node.type); - }); - - this.node = this.container[this.key] = node; -} - -function replaceExpressionWithStatements(nodes) { - this.resync(); - - var toSequenceExpression = t.toSequenceExpression(nodes, this.scope); - - if (t.isSequenceExpression(toSequenceExpression)) { - var exprs = toSequenceExpression.expressions; - - if (exprs.length >= 2 && this.parentPath.isExpressionStatement()) { - this._maybePopFromStatements(exprs); - } - - if (exprs.length === 1) { - this.replaceWith(exprs[0]); - } else { - this.replaceWith(toSequenceExpression); - } - } else if (toSequenceExpression) { - this.replaceWith(toSequenceExpression); - } else { - var container = t.functionExpression(null, [], t.blockStatement(nodes)); - container.shadow = true; - - this.replaceWith(t.callExpression(container, [])); - this.traverse(hoistVariablesVisitor); - - var completionRecords = this.get("callee").getCompletionRecords(); - for (var _iterator2 = completionRecords, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var path = _ref2; - - if (!path.isExpressionStatement()) continue; - - var loop = path.findParent(function (path) { - return path.isLoop(); - }); - if (loop) { - var callee = this.get("callee"); - - var uid = callee.scope.generateDeclaredUidIdentifier("ret"); - callee.get("body").pushContainer("body", t.returnStatement(uid)); - - path.get("expression").replaceWith(t.assignmentExpression("=", uid, path.node.expression)); - } else { - path.replaceWith(t.returnStatement(path.node.expression)); - } - } - - return this.node; - } -} - -function replaceInline(nodes) { - this.resync(); - - if (Array.isArray(nodes)) { - if (Array.isArray(this.container)) { - nodes = this._verifyNodeList(nodes); - this._containerInsertAfter(nodes); - return this.remove(); - } else { - return this.replaceWithMultiple(nodes); - } - } else { - return this.replaceWith(nodes); - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/scope/binding.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/scope/binding.js deleted file mode 100644 index 0730cdfc0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/scope/binding.js +++ /dev/null @@ -1,82 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var Binding = function () { - function Binding(_ref) { - var existing = _ref.existing, - identifier = _ref.identifier, - scope = _ref.scope, - path = _ref.path, - kind = _ref.kind; - (0, _classCallCheck3.default)(this, Binding); - - this.identifier = identifier; - this.scope = scope; - this.path = path; - this.kind = kind; - - this.constantViolations = []; - this.constant = true; - - this.referencePaths = []; - this.referenced = false; - this.references = 0; - - this.clearValue(); - - if (existing) { - this.constantViolations = [].concat(existing.path, existing.constantViolations, this.constantViolations); - } - } - - Binding.prototype.deoptValue = function deoptValue() { - this.clearValue(); - this.hasDeoptedValue = true; - }; - - Binding.prototype.setValue = function setValue(value) { - if (this.hasDeoptedValue) return; - this.hasValue = true; - this.value = value; - }; - - Binding.prototype.clearValue = function clearValue() { - this.hasDeoptedValue = false; - this.hasValue = false; - this.value = null; - }; - - Binding.prototype.reassign = function reassign(path) { - this.constant = false; - if (this.constantViolations.indexOf(path) !== -1) { - return; - } - this.constantViolations.push(path); - }; - - Binding.prototype.reference = function reference(path) { - if (this.referencePaths.indexOf(path) !== -1) { - return; - } - this.referenced = true; - this.references++; - this.referencePaths.push(path); - }; - - Binding.prototype.dereference = function dereference() { - this.references--; - this.referenced = !!this.references; - }; - - return Binding; -}(); - -exports.default = Binding; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/scope/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/scope/index.js deleted file mode 100644 index 30236fb44..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/scope/index.js +++ /dev/null @@ -1,1099 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _keys = require("babel-runtime/core-js/object/keys"); - -var _keys2 = _interopRequireDefault(_keys); - -var _create = require("babel-runtime/core-js/object/create"); - -var _create2 = _interopRequireDefault(_create); - -var _map = require("babel-runtime/core-js/map"); - -var _map2 = _interopRequireDefault(_map); - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _includes = require("lodash/includes"); - -var _includes2 = _interopRequireDefault(_includes); - -var _repeat = require("lodash/repeat"); - -var _repeat2 = _interopRequireDefault(_repeat); - -var _renamer = require("./lib/renamer"); - -var _renamer2 = _interopRequireDefault(_renamer); - -var _index = require("../index"); - -var _index2 = _interopRequireDefault(_index); - -var _defaults = require("lodash/defaults"); - -var _defaults2 = _interopRequireDefault(_defaults); - -var _babelMessages = require("babel-messages"); - -var messages = _interopRequireWildcard(_babelMessages); - -var _binding2 = require("./binding"); - -var _binding3 = _interopRequireDefault(_binding2); - -var _globals = require("globals"); - -var _globals2 = _interopRequireDefault(_globals); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _cache = require("../cache"); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var _crawlCallsCount = 0; - -function getCache(path, parentScope, self) { - var scopes = _cache.scope.get(path.node) || []; - - for (var _iterator = scopes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var scope = _ref; - - if (scope.parent === parentScope && scope.path === path) return scope; - } - - scopes.push(self); - - if (!_cache.scope.has(path.node)) { - _cache.scope.set(path.node, scopes); - } -} - -var collectorVisitor = { - For: function For(path) { - for (var _iterator2 = t.FOR_INIT_KEYS, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var key = _ref2; - - var declar = path.get(key); - if (declar.isVar()) path.scope.getFunctionParent().registerBinding("var", declar); - } - }, - Declaration: function Declaration(path) { - if (path.isBlockScoped()) return; - - if (path.isExportDeclaration() && path.get("declaration").isDeclaration()) return; - - path.scope.getFunctionParent().registerDeclaration(path); - }, - ReferencedIdentifier: function ReferencedIdentifier(path, state) { - state.references.push(path); - }, - ForXStatement: function ForXStatement(path, state) { - var left = path.get("left"); - if (left.isPattern() || left.isIdentifier()) { - state.constantViolations.push(left); - } - }, - - - ExportDeclaration: { - exit: function exit(path) { - var node = path.node, - scope = path.scope; - - var declar = node.declaration; - if (t.isClassDeclaration(declar) || t.isFunctionDeclaration(declar)) { - var _id = declar.id; - if (!_id) return; - - var binding = scope.getBinding(_id.name); - if (binding) binding.reference(path); - } else if (t.isVariableDeclaration(declar)) { - for (var _iterator3 = declar.declarations, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - var decl = _ref3; - - var ids = t.getBindingIdentifiers(decl); - for (var name in ids) { - var _binding = scope.getBinding(name); - if (_binding) _binding.reference(path); - } - } - } - } - }, - - LabeledStatement: function LabeledStatement(path) { - path.scope.getProgramParent().addGlobal(path.node); - path.scope.getBlockParent().registerDeclaration(path); - }, - AssignmentExpression: function AssignmentExpression(path, state) { - state.assignments.push(path); - }, - UpdateExpression: function UpdateExpression(path, state) { - state.constantViolations.push(path.get("argument")); - }, - UnaryExpression: function UnaryExpression(path, state) { - if (path.node.operator === "delete") { - state.constantViolations.push(path.get("argument")); - } - }, - BlockScoped: function BlockScoped(path) { - var scope = path.scope; - if (scope.path === path) scope = scope.parent; - scope.getBlockParent().registerDeclaration(path); - }, - ClassDeclaration: function ClassDeclaration(path) { - var id = path.node.id; - if (!id) return; - - var name = id.name; - path.scope.bindings[name] = path.scope.getBinding(name); - }, - Block: function Block(path) { - var paths = path.get("body"); - for (var _iterator4 = paths, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { - var _ref4; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref4 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref4 = _i4.value; - } - - var bodyPath = _ref4; - - if (bodyPath.isFunctionDeclaration()) { - path.scope.getBlockParent().registerDeclaration(bodyPath); - } - } - } -}; - -var uid = 0; - -var Scope = function () { - function Scope(path, parentScope) { - (0, _classCallCheck3.default)(this, Scope); - - if (parentScope && parentScope.block === path.node) { - return parentScope; - } - - var cached = getCache(path, parentScope, this); - if (cached) return cached; - - this.uid = uid++; - this.parent = parentScope; - this.hub = path.hub; - - this.parentBlock = path.parent; - this.block = path.node; - this.path = path; - - this.labels = new _map2.default(); - } - - Scope.prototype.traverse = function traverse(node, opts, state) { - (0, _index2.default)(node, opts, this, state, this.path); - }; - - Scope.prototype.generateDeclaredUidIdentifier = function generateDeclaredUidIdentifier() { - var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "temp"; - - var id = this.generateUidIdentifier(name); - this.push({ id: id }); - return id; - }; - - Scope.prototype.generateUidIdentifier = function generateUidIdentifier() { - var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "temp"; - - return t.identifier(this.generateUid(name)); - }; - - Scope.prototype.generateUid = function generateUid() { - var name = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "temp"; - - name = t.toIdentifier(name).replace(/^_+/, "").replace(/[0-9]+$/g, ""); - - var uid = void 0; - var i = 0; - do { - uid = this._generateUid(name, i); - i++; - } while (this.hasLabel(uid) || this.hasBinding(uid) || this.hasGlobal(uid) || this.hasReference(uid)); - - var program = this.getProgramParent(); - program.references[uid] = true; - program.uids[uid] = true; - - return uid; - }; - - Scope.prototype._generateUid = function _generateUid(name, i) { - var id = name; - if (i > 1) id += i; - return "_" + id; - }; - - Scope.prototype.generateUidIdentifierBasedOnNode = function generateUidIdentifierBasedOnNode(parent, defaultName) { - var node = parent; - - if (t.isAssignmentExpression(parent)) { - node = parent.left; - } else if (t.isVariableDeclarator(parent)) { - node = parent.id; - } else if (t.isObjectProperty(node) || t.isObjectMethod(node)) { - node = node.key; - } - - var parts = []; - - var add = function add(node) { - if (t.isModuleDeclaration(node)) { - if (node.source) { - add(node.source); - } else if (node.specifiers && node.specifiers.length) { - for (var _iterator5 = node.specifiers, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) { - var _ref5; - - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref5 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref5 = _i5.value; - } - - var specifier = _ref5; - - add(specifier); - } - } else if (node.declaration) { - add(node.declaration); - } - } else if (t.isModuleSpecifier(node)) { - add(node.local); - } else if (t.isMemberExpression(node)) { - add(node.object); - add(node.property); - } else if (t.isIdentifier(node)) { - parts.push(node.name); - } else if (t.isLiteral(node)) { - parts.push(node.value); - } else if (t.isCallExpression(node)) { - add(node.callee); - } else if (t.isObjectExpression(node) || t.isObjectPattern(node)) { - for (var _iterator6 = node.properties, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : (0, _getIterator3.default)(_iterator6);;) { - var _ref6; - - if (_isArray6) { - if (_i6 >= _iterator6.length) break; - _ref6 = _iterator6[_i6++]; - } else { - _i6 = _iterator6.next(); - if (_i6.done) break; - _ref6 = _i6.value; - } - - var prop = _ref6; - - add(prop.key || prop.argument); - } - } - }; - - add(node); - - var id = parts.join("$"); - id = id.replace(/^_/, "") || defaultName || "ref"; - - return this.generateUidIdentifier(id.slice(0, 20)); - }; - - Scope.prototype.isStatic = function isStatic(node) { - if (t.isThisExpression(node) || t.isSuper(node)) { - return true; - } - - if (t.isIdentifier(node)) { - var binding = this.getBinding(node.name); - if (binding) { - return binding.constant; - } else { - return this.hasBinding(node.name); - } - } - - return false; - }; - - Scope.prototype.maybeGenerateMemoised = function maybeGenerateMemoised(node, dontPush) { - if (this.isStatic(node)) { - return null; - } else { - var _id2 = this.generateUidIdentifierBasedOnNode(node); - if (!dontPush) this.push({ id: _id2 }); - return _id2; - } - }; - - Scope.prototype.checkBlockScopedCollisions = function checkBlockScopedCollisions(local, kind, name, id) { - if (kind === "param") return; - - if (kind === "hoisted" && local.kind === "let") return; - - var duplicate = false; - - if (!duplicate) duplicate = kind === "let" || local.kind === "let" || local.kind === "const" || local.kind === "module"; - - if (!duplicate) duplicate = local.kind === "param" && (kind === "let" || kind === "const"); - - if (duplicate) { - throw this.hub.file.buildCodeFrameError(id, messages.get("scopeDuplicateDeclaration", name), TypeError); - } - }; - - Scope.prototype.rename = function rename(oldName, newName, block) { - var binding = this.getBinding(oldName); - if (binding) { - newName = newName || this.generateUidIdentifier(oldName).name; - return new _renamer2.default(binding, oldName, newName).rename(block); - } - }; - - Scope.prototype._renameFromMap = function _renameFromMap(map, oldName, newName, value) { - if (map[oldName]) { - map[newName] = value; - map[oldName] = null; - } - }; - - Scope.prototype.dump = function dump() { - var sep = (0, _repeat2.default)("-", 60); - console.log(sep); - var scope = this; - do { - console.log("#", scope.block.type); - for (var name in scope.bindings) { - var binding = scope.bindings[name]; - console.log(" -", name, { - constant: binding.constant, - references: binding.references, - violations: binding.constantViolations.length, - kind: binding.kind - }); - } - } while (scope = scope.parent); - console.log(sep); - }; - - Scope.prototype.toArray = function toArray(node, i) { - var file = this.hub.file; - - if (t.isIdentifier(node)) { - var binding = this.getBinding(node.name); - if (binding && binding.constant && binding.path.isGenericType("Array")) return node; - } - - if (t.isArrayExpression(node)) { - return node; - } - - if (t.isIdentifier(node, { name: "arguments" })) { - return t.callExpression(t.memberExpression(t.memberExpression(t.memberExpression(t.identifier("Array"), t.identifier("prototype")), t.identifier("slice")), t.identifier("call")), [node]); - } - - var helperName = "toArray"; - var args = [node]; - if (i === true) { - helperName = "toConsumableArray"; - } else if (i) { - args.push(t.numericLiteral(i)); - helperName = "slicedToArray"; - } - return t.callExpression(file.addHelper(helperName), args); - }; - - Scope.prototype.hasLabel = function hasLabel(name) { - return !!this.getLabel(name); - }; - - Scope.prototype.getLabel = function getLabel(name) { - return this.labels.get(name); - }; - - Scope.prototype.registerLabel = function registerLabel(path) { - this.labels.set(path.node.label.name, path); - }; - - Scope.prototype.registerDeclaration = function registerDeclaration(path) { - if (path.isLabeledStatement()) { - this.registerLabel(path); - } else if (path.isFunctionDeclaration()) { - this.registerBinding("hoisted", path.get("id"), path); - } else if (path.isVariableDeclaration()) { - var declarations = path.get("declarations"); - for (var _iterator7 = declarations, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : (0, _getIterator3.default)(_iterator7);;) { - var _ref7; - - if (_isArray7) { - if (_i7 >= _iterator7.length) break; - _ref7 = _iterator7[_i7++]; - } else { - _i7 = _iterator7.next(); - if (_i7.done) break; - _ref7 = _i7.value; - } - - var declar = _ref7; - - this.registerBinding(path.node.kind, declar); - } - } else if (path.isClassDeclaration()) { - this.registerBinding("let", path); - } else if (path.isImportDeclaration()) { - var specifiers = path.get("specifiers"); - for (var _iterator8 = specifiers, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : (0, _getIterator3.default)(_iterator8);;) { - var _ref8; - - if (_isArray8) { - if (_i8 >= _iterator8.length) break; - _ref8 = _iterator8[_i8++]; - } else { - _i8 = _iterator8.next(); - if (_i8.done) break; - _ref8 = _i8.value; - } - - var specifier = _ref8; - - this.registerBinding("module", specifier); - } - } else if (path.isExportDeclaration()) { - var _declar = path.get("declaration"); - if (_declar.isClassDeclaration() || _declar.isFunctionDeclaration() || _declar.isVariableDeclaration()) { - this.registerDeclaration(_declar); - } - } else { - this.registerBinding("unknown", path); - } - }; - - Scope.prototype.buildUndefinedNode = function buildUndefinedNode() { - if (this.hasBinding("undefined")) { - return t.unaryExpression("void", t.numericLiteral(0), true); - } else { - return t.identifier("undefined"); - } - }; - - Scope.prototype.registerConstantViolation = function registerConstantViolation(path) { - var ids = path.getBindingIdentifiers(); - for (var name in ids) { - var binding = this.getBinding(name); - if (binding) binding.reassign(path); - } - }; - - Scope.prototype.registerBinding = function registerBinding(kind, path) { - var bindingPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : path; - - if (!kind) throw new ReferenceError("no `kind`"); - - if (path.isVariableDeclaration()) { - var declarators = path.get("declarations"); - for (var _iterator9 = declarators, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : (0, _getIterator3.default)(_iterator9);;) { - var _ref9; - - if (_isArray9) { - if (_i9 >= _iterator9.length) break; - _ref9 = _iterator9[_i9++]; - } else { - _i9 = _iterator9.next(); - if (_i9.done) break; - _ref9 = _i9.value; - } - - var declar = _ref9; - - this.registerBinding(kind, declar); - } - return; - } - - var parent = this.getProgramParent(); - var ids = path.getBindingIdentifiers(true); - - for (var name in ids) { - for (var _iterator10 = ids[name], _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : (0, _getIterator3.default)(_iterator10);;) { - var _ref10; - - if (_isArray10) { - if (_i10 >= _iterator10.length) break; - _ref10 = _iterator10[_i10++]; - } else { - _i10 = _iterator10.next(); - if (_i10.done) break; - _ref10 = _i10.value; - } - - var _id3 = _ref10; - - var local = this.getOwnBinding(name); - if (local) { - if (local.identifier === _id3) continue; - - this.checkBlockScopedCollisions(local, kind, name, _id3); - } - - if (local && local.path.isFlow()) local = null; - - parent.references[name] = true; - - this.bindings[name] = new _binding3.default({ - identifier: _id3, - existing: local, - scope: this, - path: bindingPath, - kind: kind - }); - } - } - }; - - Scope.prototype.addGlobal = function addGlobal(node) { - this.globals[node.name] = node; - }; - - Scope.prototype.hasUid = function hasUid(name) { - var scope = this; - - do { - if (scope.uids[name]) return true; - } while (scope = scope.parent); - - return false; - }; - - Scope.prototype.hasGlobal = function hasGlobal(name) { - var scope = this; - - do { - if (scope.globals[name]) return true; - } while (scope = scope.parent); - - return false; - }; - - Scope.prototype.hasReference = function hasReference(name) { - var scope = this; - - do { - if (scope.references[name]) return true; - } while (scope = scope.parent); - - return false; - }; - - Scope.prototype.isPure = function isPure(node, constantsOnly) { - if (t.isIdentifier(node)) { - var binding = this.getBinding(node.name); - if (!binding) return false; - if (constantsOnly) return binding.constant; - return true; - } else if (t.isClass(node)) { - if (node.superClass && !this.isPure(node.superClass, constantsOnly)) return false; - return this.isPure(node.body, constantsOnly); - } else if (t.isClassBody(node)) { - for (var _iterator11 = node.body, _isArray11 = Array.isArray(_iterator11), _i11 = 0, _iterator11 = _isArray11 ? _iterator11 : (0, _getIterator3.default)(_iterator11);;) { - var _ref11; - - if (_isArray11) { - if (_i11 >= _iterator11.length) break; - _ref11 = _iterator11[_i11++]; - } else { - _i11 = _iterator11.next(); - if (_i11.done) break; - _ref11 = _i11.value; - } - - var method = _ref11; - - if (!this.isPure(method, constantsOnly)) return false; - } - return true; - } else if (t.isBinary(node)) { - return this.isPure(node.left, constantsOnly) && this.isPure(node.right, constantsOnly); - } else if (t.isArrayExpression(node)) { - for (var _iterator12 = node.elements, _isArray12 = Array.isArray(_iterator12), _i12 = 0, _iterator12 = _isArray12 ? _iterator12 : (0, _getIterator3.default)(_iterator12);;) { - var _ref12; - - if (_isArray12) { - if (_i12 >= _iterator12.length) break; - _ref12 = _iterator12[_i12++]; - } else { - _i12 = _iterator12.next(); - if (_i12.done) break; - _ref12 = _i12.value; - } - - var elem = _ref12; - - if (!this.isPure(elem, constantsOnly)) return false; - } - return true; - } else if (t.isObjectExpression(node)) { - for (var _iterator13 = node.properties, _isArray13 = Array.isArray(_iterator13), _i13 = 0, _iterator13 = _isArray13 ? _iterator13 : (0, _getIterator3.default)(_iterator13);;) { - var _ref13; - - if (_isArray13) { - if (_i13 >= _iterator13.length) break; - _ref13 = _iterator13[_i13++]; - } else { - _i13 = _iterator13.next(); - if (_i13.done) break; - _ref13 = _i13.value; - } - - var prop = _ref13; - - if (!this.isPure(prop, constantsOnly)) return false; - } - return true; - } else if (t.isClassMethod(node)) { - if (node.computed && !this.isPure(node.key, constantsOnly)) return false; - if (node.kind === "get" || node.kind === "set") return false; - return true; - } else if (t.isClassProperty(node) || t.isObjectProperty(node)) { - if (node.computed && !this.isPure(node.key, constantsOnly)) return false; - return this.isPure(node.value, constantsOnly); - } else if (t.isUnaryExpression(node)) { - return this.isPure(node.argument, constantsOnly); - } else { - return t.isPureish(node); - } - }; - - Scope.prototype.setData = function setData(key, val) { - return this.data[key] = val; - }; - - Scope.prototype.getData = function getData(key) { - var scope = this; - do { - var data = scope.data[key]; - if (data != null) return data; - } while (scope = scope.parent); - }; - - Scope.prototype.removeData = function removeData(key) { - var scope = this; - do { - var data = scope.data[key]; - if (data != null) scope.data[key] = null; - } while (scope = scope.parent); - }; - - Scope.prototype.init = function init() { - if (!this.references) this.crawl(); - }; - - Scope.prototype.crawl = function crawl() { - _crawlCallsCount++; - this._crawl(); - _crawlCallsCount--; - }; - - Scope.prototype._crawl = function _crawl() { - var path = this.path; - - this.references = (0, _create2.default)(null); - this.bindings = (0, _create2.default)(null); - this.globals = (0, _create2.default)(null); - this.uids = (0, _create2.default)(null); - this.data = (0, _create2.default)(null); - - if (path.isLoop()) { - for (var _iterator14 = t.FOR_INIT_KEYS, _isArray14 = Array.isArray(_iterator14), _i14 = 0, _iterator14 = _isArray14 ? _iterator14 : (0, _getIterator3.default)(_iterator14);;) { - var _ref14; - - if (_isArray14) { - if (_i14 >= _iterator14.length) break; - _ref14 = _iterator14[_i14++]; - } else { - _i14 = _iterator14.next(); - if (_i14.done) break; - _ref14 = _i14.value; - } - - var key = _ref14; - - var node = path.get(key); - if (node.isBlockScoped()) this.registerBinding(node.node.kind, node); - } - } - - if (path.isFunctionExpression() && path.has("id")) { - if (!path.get("id").node[t.NOT_LOCAL_BINDING]) { - this.registerBinding("local", path.get("id"), path); - } - } - - if (path.isClassExpression() && path.has("id")) { - if (!path.get("id").node[t.NOT_LOCAL_BINDING]) { - this.registerBinding("local", path); - } - } - - if (path.isFunction()) { - var params = path.get("params"); - for (var _iterator15 = params, _isArray15 = Array.isArray(_iterator15), _i15 = 0, _iterator15 = _isArray15 ? _iterator15 : (0, _getIterator3.default)(_iterator15);;) { - var _ref15; - - if (_isArray15) { - if (_i15 >= _iterator15.length) break; - _ref15 = _iterator15[_i15++]; - } else { - _i15 = _iterator15.next(); - if (_i15.done) break; - _ref15 = _i15.value; - } - - var param = _ref15; - - this.registerBinding("param", param); - } - } - - if (path.isCatchClause()) { - this.registerBinding("let", path); - } - - var parent = this.getProgramParent(); - if (parent.crawling) return; - - var state = { - references: [], - constantViolations: [], - assignments: [] - }; - - this.crawling = true; - path.traverse(collectorVisitor, state); - this.crawling = false; - - for (var _iterator16 = state.assignments, _isArray16 = Array.isArray(_iterator16), _i16 = 0, _iterator16 = _isArray16 ? _iterator16 : (0, _getIterator3.default)(_iterator16);;) { - var _ref16; - - if (_isArray16) { - if (_i16 >= _iterator16.length) break; - _ref16 = _iterator16[_i16++]; - } else { - _i16 = _iterator16.next(); - if (_i16.done) break; - _ref16 = _i16.value; - } - - var _path = _ref16; - - var ids = _path.getBindingIdentifiers(); - var programParent = void 0; - for (var name in ids) { - if (_path.scope.getBinding(name)) continue; - - programParent = programParent || _path.scope.getProgramParent(); - programParent.addGlobal(ids[name]); - } - - _path.scope.registerConstantViolation(_path); - } - - for (var _iterator17 = state.references, _isArray17 = Array.isArray(_iterator17), _i17 = 0, _iterator17 = _isArray17 ? _iterator17 : (0, _getIterator3.default)(_iterator17);;) { - var _ref17; - - if (_isArray17) { - if (_i17 >= _iterator17.length) break; - _ref17 = _iterator17[_i17++]; - } else { - _i17 = _iterator17.next(); - if (_i17.done) break; - _ref17 = _i17.value; - } - - var ref = _ref17; - - var binding = ref.scope.getBinding(ref.node.name); - if (binding) { - binding.reference(ref); - } else { - ref.scope.getProgramParent().addGlobal(ref.node); - } - } - - for (var _iterator18 = state.constantViolations, _isArray18 = Array.isArray(_iterator18), _i18 = 0, _iterator18 = _isArray18 ? _iterator18 : (0, _getIterator3.default)(_iterator18);;) { - var _ref18; - - if (_isArray18) { - if (_i18 >= _iterator18.length) break; - _ref18 = _iterator18[_i18++]; - } else { - _i18 = _iterator18.next(); - if (_i18.done) break; - _ref18 = _i18.value; - } - - var _path2 = _ref18; - - _path2.scope.registerConstantViolation(_path2); - } - }; - - Scope.prototype.push = function push(opts) { - var path = this.path; - - if (!path.isBlockStatement() && !path.isProgram()) { - path = this.getBlockParent().path; - } - - if (path.isSwitchStatement()) { - path = this.getFunctionParent().path; - } - - if (path.isLoop() || path.isCatchClause() || path.isFunction()) { - t.ensureBlock(path.node); - path = path.get("body"); - } - - var unique = opts.unique; - var kind = opts.kind || "var"; - var blockHoist = opts._blockHoist == null ? 2 : opts._blockHoist; - - var dataKey = "declaration:" + kind + ":" + blockHoist; - var declarPath = !unique && path.getData(dataKey); - - if (!declarPath) { - var declar = t.variableDeclaration(kind, []); - declar._generated = true; - declar._blockHoist = blockHoist; - - var _path$unshiftContaine = path.unshiftContainer("body", [declar]); - - declarPath = _path$unshiftContaine[0]; - - if (!unique) path.setData(dataKey, declarPath); - } - - var declarator = t.variableDeclarator(opts.id, opts.init); - declarPath.node.declarations.push(declarator); - this.registerBinding(kind, declarPath.get("declarations").pop()); - }; - - Scope.prototype.getProgramParent = function getProgramParent() { - var scope = this; - do { - if (scope.path.isProgram()) { - return scope; - } - } while (scope = scope.parent); - throw new Error("We couldn't find a Function or Program..."); - }; - - Scope.prototype.getFunctionParent = function getFunctionParent() { - var scope = this; - do { - if (scope.path.isFunctionParent()) { - return scope; - } - } while (scope = scope.parent); - throw new Error("We couldn't find a Function or Program..."); - }; - - Scope.prototype.getBlockParent = function getBlockParent() { - var scope = this; - do { - if (scope.path.isBlockParent()) { - return scope; - } - } while (scope = scope.parent); - throw new Error("We couldn't find a BlockStatement, For, Switch, Function, Loop or Program..."); - }; - - Scope.prototype.getAllBindings = function getAllBindings() { - var ids = (0, _create2.default)(null); - - var scope = this; - do { - (0, _defaults2.default)(ids, scope.bindings); - scope = scope.parent; - } while (scope); - - return ids; - }; - - Scope.prototype.getAllBindingsOfKind = function getAllBindingsOfKind() { - var ids = (0, _create2.default)(null); - - for (var _iterator19 = arguments, _isArray19 = Array.isArray(_iterator19), _i19 = 0, _iterator19 = _isArray19 ? _iterator19 : (0, _getIterator3.default)(_iterator19);;) { - var _ref19; - - if (_isArray19) { - if (_i19 >= _iterator19.length) break; - _ref19 = _iterator19[_i19++]; - } else { - _i19 = _iterator19.next(); - if (_i19.done) break; - _ref19 = _i19.value; - } - - var kind = _ref19; - - var scope = this; - do { - for (var name in scope.bindings) { - var binding = scope.bindings[name]; - if (binding.kind === kind) ids[name] = binding; - } - scope = scope.parent; - } while (scope); - } - - return ids; - }; - - Scope.prototype.bindingIdentifierEquals = function bindingIdentifierEquals(name, node) { - return this.getBindingIdentifier(name) === node; - }; - - Scope.prototype.warnOnFlowBinding = function warnOnFlowBinding(binding) { - if (_crawlCallsCount === 0 && binding && binding.path.isFlow()) { - console.warn("\n You or one of the Babel plugins you are using are using Flow declarations as bindings.\n Support for this will be removed in version 6.8. To find out the caller, grep for this\n message and change it to a `console.trace()`.\n "); - } - return binding; - }; - - Scope.prototype.getBinding = function getBinding(name) { - var scope = this; - - do { - var binding = scope.getOwnBinding(name); - if (binding) return this.warnOnFlowBinding(binding); - } while (scope = scope.parent); - }; - - Scope.prototype.getOwnBinding = function getOwnBinding(name) { - return this.warnOnFlowBinding(this.bindings[name]); - }; - - Scope.prototype.getBindingIdentifier = function getBindingIdentifier(name) { - var info = this.getBinding(name); - return info && info.identifier; - }; - - Scope.prototype.getOwnBindingIdentifier = function getOwnBindingIdentifier(name) { - var binding = this.bindings[name]; - return binding && binding.identifier; - }; - - Scope.prototype.hasOwnBinding = function hasOwnBinding(name) { - return !!this.getOwnBinding(name); - }; - - Scope.prototype.hasBinding = function hasBinding(name, noGlobals) { - if (!name) return false; - if (this.hasOwnBinding(name)) return true; - if (this.parentHasBinding(name, noGlobals)) return true; - if (this.hasUid(name)) return true; - if (!noGlobals && (0, _includes2.default)(Scope.globals, name)) return true; - if (!noGlobals && (0, _includes2.default)(Scope.contextVariables, name)) return true; - return false; - }; - - Scope.prototype.parentHasBinding = function parentHasBinding(name, noGlobals) { - return this.parent && this.parent.hasBinding(name, noGlobals); - }; - - Scope.prototype.moveBindingTo = function moveBindingTo(name, scope) { - var info = this.getBinding(name); - if (info) { - info.scope.removeOwnBinding(name); - info.scope = scope; - scope.bindings[name] = info; - } - }; - - Scope.prototype.removeOwnBinding = function removeOwnBinding(name) { - delete this.bindings[name]; - }; - - Scope.prototype.removeBinding = function removeBinding(name) { - var info = this.getBinding(name); - if (info) { - info.scope.removeOwnBinding(name); - } - - var scope = this; - do { - if (scope.uids[name]) { - scope.uids[name] = false; - } - } while (scope = scope.parent); - }; - - return Scope; -}(); - -Scope.globals = (0, _keys2.default)(_globals2.default.builtin); -Scope.contextVariables = ["arguments", "undefined", "Infinity", "NaN"]; -exports.default = Scope; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/scope/lib/renamer.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/scope/lib/renamer.js deleted file mode 100644 index a3b970515..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/scope/lib/renamer.js +++ /dev/null @@ -1,145 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); - -var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); - -var _binding = require("../binding"); - -var _binding2 = _interopRequireDefault(_binding); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var renameVisitor = { - ReferencedIdentifier: function ReferencedIdentifier(_ref, state) { - var node = _ref.node; - - if (node.name === state.oldName) { - node.name = state.newName; - } - }, - Scope: function Scope(path, state) { - if (!path.scope.bindingIdentifierEquals(state.oldName, state.binding.identifier)) { - path.skip(); - } - }, - "AssignmentExpression|Declaration": function AssignmentExpressionDeclaration(path, state) { - var ids = path.getOuterBindingIdentifiers(); - - for (var name in ids) { - if (name === state.oldName) ids[name].name = state.newName; - } - } -}; - -var Renamer = function () { - function Renamer(binding, oldName, newName) { - (0, _classCallCheck3.default)(this, Renamer); - - this.newName = newName; - this.oldName = oldName; - this.binding = binding; - } - - Renamer.prototype.maybeConvertFromExportDeclaration = function maybeConvertFromExportDeclaration(parentDeclar) { - var exportDeclar = parentDeclar.parentPath.isExportDeclaration() && parentDeclar.parentPath; - if (!exportDeclar) return; - - var isDefault = exportDeclar.isExportDefaultDeclaration(); - - if (isDefault && (parentDeclar.isFunctionDeclaration() || parentDeclar.isClassDeclaration()) && !parentDeclar.node.id) { - parentDeclar.node.id = parentDeclar.scope.generateUidIdentifier("default"); - } - - var bindingIdentifiers = parentDeclar.getOuterBindingIdentifiers(); - var specifiers = []; - - for (var name in bindingIdentifiers) { - var localName = name === this.oldName ? this.newName : name; - var exportedName = isDefault ? "default" : name; - specifiers.push(t.exportSpecifier(t.identifier(localName), t.identifier(exportedName))); - } - - if (specifiers.length) { - var aliasDeclar = t.exportNamedDeclaration(null, specifiers); - - if (parentDeclar.isFunctionDeclaration()) { - aliasDeclar._blockHoist = 3; - } - - exportDeclar.insertAfter(aliasDeclar); - exportDeclar.replaceWith(parentDeclar.node); - } - }; - - Renamer.prototype.maybeConvertFromClassFunctionDeclaration = function maybeConvertFromClassFunctionDeclaration(path) { - return; - - if (!path.isFunctionDeclaration() && !path.isClassDeclaration()) return; - if (this.binding.kind !== "hoisted") return; - - path.node.id = t.identifier(this.oldName); - path.node._blockHoist = 3; - - path.replaceWith(t.variableDeclaration("let", [t.variableDeclarator(t.identifier(this.newName), t.toExpression(path.node))])); - }; - - Renamer.prototype.maybeConvertFromClassFunctionExpression = function maybeConvertFromClassFunctionExpression(path) { - return; - - if (!path.isFunctionExpression() && !path.isClassExpression()) return; - if (this.binding.kind !== "local") return; - - path.node.id = t.identifier(this.oldName); - - this.binding.scope.parent.push({ - id: t.identifier(this.newName) - }); - - path.replaceWith(t.assignmentExpression("=", t.identifier(this.newName), path.node)); - }; - - Renamer.prototype.rename = function rename(block) { - var binding = this.binding, - oldName = this.oldName, - newName = this.newName; - var scope = binding.scope, - path = binding.path; - - - var parentDeclar = path.find(function (path) { - return path.isDeclaration() || path.isFunctionExpression(); - }); - if (parentDeclar) { - this.maybeConvertFromExportDeclaration(parentDeclar); - } - - scope.traverse(block || scope.block, renameVisitor, this); - - if (!block) { - scope.removeOwnBinding(oldName); - scope.bindings[newName] = binding; - this.binding.identifier.name = newName; - } - - if (binding.type === "hoisted") {} - - if (parentDeclar) { - this.maybeConvertFromClassFunctionDeclaration(parentDeclar); - this.maybeConvertFromClassFunctionExpression(parentDeclar); - } - }; - - return Renamer; -}(); - -exports.default = Renamer; -module.exports = exports["default"]; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/visitors.js b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/visitors.js deleted file mode 100644 index dadf5d061..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/lib/visitors.js +++ /dev/null @@ -1,341 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _typeof2 = require("babel-runtime/helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -var _keys = require("babel-runtime/core-js/object/keys"); - -var _keys2 = _interopRequireDefault(_keys); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.explode = explode; -exports.verify = verify; -exports.merge = merge; - -var _virtualTypes = require("./path/lib/virtual-types"); - -var virtualTypes = _interopRequireWildcard(_virtualTypes); - -var _babelMessages = require("babel-messages"); - -var messages = _interopRequireWildcard(_babelMessages); - -var _babelTypes = require("babel-types"); - -var t = _interopRequireWildcard(_babelTypes); - -var _clone = require("lodash/clone"); - -var _clone2 = _interopRequireDefault(_clone); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function explode(visitor) { - if (visitor._exploded) return visitor; - visitor._exploded = true; - - for (var nodeType in visitor) { - if (shouldIgnoreKey(nodeType)) continue; - - var parts = nodeType.split("|"); - if (parts.length === 1) continue; - - var fns = visitor[nodeType]; - delete visitor[nodeType]; - - for (var _iterator = parts, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var part = _ref; - - visitor[part] = fns; - } - } - - verify(visitor); - - delete visitor.__esModule; - - ensureEntranceObjects(visitor); - - ensureCallbackArrays(visitor); - - for (var _iterator2 = (0, _keys2.default)(visitor), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var _nodeType3 = _ref2; - - if (shouldIgnoreKey(_nodeType3)) continue; - - var wrapper = virtualTypes[_nodeType3]; - if (!wrapper) continue; - - var _fns2 = visitor[_nodeType3]; - for (var type in _fns2) { - _fns2[type] = wrapCheck(wrapper, _fns2[type]); - } - - delete visitor[_nodeType3]; - - if (wrapper.types) { - for (var _iterator4 = wrapper.types, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { - var _ref4; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref4 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref4 = _i4.value; - } - - var _type = _ref4; - - if (visitor[_type]) { - mergePair(visitor[_type], _fns2); - } else { - visitor[_type] = _fns2; - } - } - } else { - mergePair(visitor, _fns2); - } - } - - for (var _nodeType in visitor) { - if (shouldIgnoreKey(_nodeType)) continue; - - var _fns = visitor[_nodeType]; - - var aliases = t.FLIPPED_ALIAS_KEYS[_nodeType]; - - var deprecratedKey = t.DEPRECATED_KEYS[_nodeType]; - if (deprecratedKey) { - console.trace("Visitor defined for " + _nodeType + " but it has been renamed to " + deprecratedKey); - aliases = [deprecratedKey]; - } - - if (!aliases) continue; - - delete visitor[_nodeType]; - - for (var _iterator3 = aliases, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - var alias = _ref3; - - var existing = visitor[alias]; - if (existing) { - mergePair(existing, _fns); - } else { - visitor[alias] = (0, _clone2.default)(_fns); - } - } - } - - for (var _nodeType2 in visitor) { - if (shouldIgnoreKey(_nodeType2)) continue; - - ensureCallbackArrays(visitor[_nodeType2]); - } - - return visitor; -} - -function verify(visitor) { - if (visitor._verified) return; - - if (typeof visitor === "function") { - throw new Error(messages.get("traverseVerifyRootFunction")); - } - - for (var nodeType in visitor) { - if (nodeType === "enter" || nodeType === "exit") { - validateVisitorMethods(nodeType, visitor[nodeType]); - } - - if (shouldIgnoreKey(nodeType)) continue; - - if (t.TYPES.indexOf(nodeType) < 0) { - throw new Error(messages.get("traverseVerifyNodeType", nodeType)); - } - - var visitors = visitor[nodeType]; - if ((typeof visitors === "undefined" ? "undefined" : (0, _typeof3.default)(visitors)) === "object") { - for (var visitorKey in visitors) { - if (visitorKey === "enter" || visitorKey === "exit") { - validateVisitorMethods(nodeType + "." + visitorKey, visitors[visitorKey]); - } else { - throw new Error(messages.get("traverseVerifyVisitorProperty", nodeType, visitorKey)); - } - } - } - } - - visitor._verified = true; -} - -function validateVisitorMethods(path, val) { - var fns = [].concat(val); - for (var _iterator5 = fns, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) { - var _ref5; - - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref5 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref5 = _i5.value; - } - - var fn = _ref5; - - if (typeof fn !== "function") { - throw new TypeError("Non-function found defined in " + path + " with type " + (typeof fn === "undefined" ? "undefined" : (0, _typeof3.default)(fn))); - } - } -} - -function merge(visitors) { - var states = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - var wrapper = arguments[2]; - - var rootVisitor = {}; - - for (var i = 0; i < visitors.length; i++) { - var visitor = visitors[i]; - var state = states[i]; - - explode(visitor); - - for (var type in visitor) { - var visitorType = visitor[type]; - - if (state || wrapper) { - visitorType = wrapWithStateOrWrapper(visitorType, state, wrapper); - } - - var nodeVisitor = rootVisitor[type] = rootVisitor[type] || {}; - mergePair(nodeVisitor, visitorType); - } - } - - return rootVisitor; -} - -function wrapWithStateOrWrapper(oldVisitor, state, wrapper) { - var newVisitor = {}; - - var _loop = function _loop(key) { - var fns = oldVisitor[key]; - - if (!Array.isArray(fns)) return "continue"; - - fns = fns.map(function (fn) { - var newFn = fn; - - if (state) { - newFn = function newFn(path) { - return fn.call(state, path, state); - }; - } - - if (wrapper) { - newFn = wrapper(state.key, key, newFn); - } - - return newFn; - }); - - newVisitor[key] = fns; - }; - - for (var key in oldVisitor) { - var _ret = _loop(key); - - if (_ret === "continue") continue; - } - - return newVisitor; -} - -function ensureEntranceObjects(obj) { - for (var key in obj) { - if (shouldIgnoreKey(key)) continue; - - var fns = obj[key]; - if (typeof fns === "function") { - obj[key] = { enter: fns }; - } - } -} - -function ensureCallbackArrays(obj) { - if (obj.enter && !Array.isArray(obj.enter)) obj.enter = [obj.enter]; - if (obj.exit && !Array.isArray(obj.exit)) obj.exit = [obj.exit]; -} - -function wrapCheck(wrapper, fn) { - var newFn = function newFn(path) { - if (wrapper.checkPath(path)) { - return fn.apply(this, arguments); - } - }; - newFn.toString = function () { - return fn.toString(); - }; - return newFn; -} - -function shouldIgnoreKey(key) { - if (key[0] === "_") return true; - - if (key === "enter" || key === "exit" || key === "shouldSkip") return true; - - if (key === "blacklist" || key === "noScope" || key === "skipKeys") return true; - - return false; -} - -function mergePair(dest, src) { - for (var key in src) { - dest[key] = [].concat(dest[key] || [], src[key]); - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-traverse/package.json deleted file mode 100644 index b21e60b60..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-traverse/package.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "_args": [ - [ - "babel-traverse@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core" - ] - ], - "_from": "babel-traverse@>=6.18.0 <7.0.0", - "_id": "babel-traverse@6.19.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-traverse", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-traverse-6.19.0.tgz_1479312928128_0.19104824378155172" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-traverse", - "raw": "babel-traverse@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-core", - "/babel-template", - "/istanbul-lib-instrument" - ], - "_resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.19.0.tgz", - "_shasum": "68363fb821e26247d52a519a84b2ceab8df4f55a", - "_shrinkwrap": null, - "_spec": "babel-traverse@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "babel-code-frame": "^6.16.0", - "babel-messages": "^6.8.0", - "babel-runtime": "^6.9.0", - "babel-types": "^6.19.0", - "babylon": "^6.11.0", - "debug": "^2.2.0", - "globals": "^9.0.0", - "invariant": "^2.2.0", - "lodash": "^4.2.0" - }, - "description": "The Babel Traverse module maintains the overall tree state, and is responsible for replacing, removing, and adding nodes", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "68363fb821e26247d52a519a84b2ceab8df4f55a", - "tarball": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.19.0.tgz" - }, - "homepage": "https://babeljs.io/", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-traverse", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-traverse" - }, - "scripts": {}, - "version": "6.19.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/.npmignore b/fundamentals/bug-challenge-es6/node_modules/babel-types/.npmignore deleted file mode 100644 index 47cdd2c65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -src -test -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/README.md b/fundamentals/bug-challenge-es6/node_modules/babel-types/README.md deleted file mode 100644 index 4c0162feb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/README.md +++ /dev/null @@ -1,1243 +0,0 @@ -# babel-types - -This module contains methods for building ASTs manually and for checking the types of AST nodes. - -## API - - - -### t.anyTypeAnnotation() - -See also `t.isAnyTypeAnnotation(node, opts)` and `t.assertAnyTypeAnnotation(node, opts)`. - -Aliases: `Flow`, `FlowBaseAnnotation` - - -### t.arrayExpression(elements) - -See also `t.isArrayExpression(node, opts)` and `t.assertArrayExpression(node, opts)`. - -Aliases: `Expression` - - - `elements`: `Array` (default: `[]`) - -### t.arrayPattern(elements, typeAnnotation) - -See also `t.isArrayPattern(node, opts)` and `t.assertArrayPattern(node, opts)`. - -Aliases: `Pattern`, `LVal` - - - `elements`: `Array` (required) - - `typeAnnotation` (required) - - `decorators`: `Array` (default: `null`) - -### t.arrayTypeAnnotation(elementType) - -See also `t.isArrayTypeAnnotation(node, opts)` and `t.assertArrayTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - - `elementType` (required) - -### t.arrowFunctionExpression(params, body, async) - -See also `t.isArrowFunctionExpression(node, opts)` and `t.assertArrowFunctionExpression(node, opts)`. - -Aliases: `Scopable`, `Function`, `BlockParent`, `FunctionParent`, `Expression`, `Pureish` - - - `params`: `Array` (required) - - `body`: `BlockStatement | Expression` (required) - - `async`: `boolean` (default: `false`) - - `returnType` (default: `null`) - - `typeParameters` (default: `null`) - -### t.assignmentExpression(operator, left, right) - -See also `t.isAssignmentExpression(node, opts)` and `t.assertAssignmentExpression(node, opts)`. - -Aliases: `Expression` - - - `operator`: `string` (required) - - `left`: `LVal` (required) - - `right`: `Expression` (required) - -### t.assignmentPattern(left, right) - -See also `t.isAssignmentPattern(node, opts)` and `t.assertAssignmentPattern(node, opts)`. - -Aliases: `Pattern`, `LVal` - - - `left`: `Identifier` (required) - - `right`: `Expression` (required) - - `decorators`: `Array` (default: `null`) - -### t.awaitExpression(argument) - -See also `t.isAwaitExpression(node, opts)` and `t.assertAwaitExpression(node, opts)`. - -Aliases: `Expression`, `Terminatorless` - - - `argument`: `Expression` (required) - -### t.binaryExpression(operator, left, right) - -See also `t.isBinaryExpression(node, opts)` and `t.assertBinaryExpression(node, opts)`. - -Aliases: `Binary`, `Expression` - - - `operator`: `'+' | '-' | '/' | '%' | '*' | '**' | '&' | '|' | '>>' | '>>>' | '<<' | '^' | '==' | '===' | '!=' | '!==' | 'in' | 'instanceof' | '>' | '<' | '>=' | '<='` (required) - - `left`: `Expression` (required) - - `right`: `Expression` (required) - -### t.bindExpression(object, callee) - -See also `t.isBindExpression(node, opts)` and `t.assertBindExpression(node, opts)`. - -Aliases: `Expression` - - - `object` (required) - - `callee` (required) - -### t.blockStatement(body, directives) - -See also `t.isBlockStatement(node, opts)` and `t.assertBlockStatement(node, opts)`. - -Aliases: `Scopable`, `BlockParent`, `Block`, `Statement` - - - `body`: `Array` (required) - - `directives`: `Array` (default: `[]`) - -### t.booleanLiteral(value) - -See also `t.isBooleanLiteral(node, opts)` and `t.assertBooleanLiteral(node, opts)`. - -Aliases: `Expression`, `Pureish`, `Literal`, `Immutable` - - - `value`: `boolean` (required) - -### t.booleanLiteralTypeAnnotation() - -See also `t.isBooleanLiteralTypeAnnotation(node, opts)` and `t.assertBooleanLiteralTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - -### t.booleanTypeAnnotation() - -See also `t.isBooleanTypeAnnotation(node, opts)` and `t.assertBooleanTypeAnnotation(node, opts)`. - -Aliases: `Flow`, `FlowBaseAnnotation` - - -### t.breakStatement(label) - -See also `t.isBreakStatement(node, opts)` and `t.assertBreakStatement(node, opts)`. - -Aliases: `Statement`, `Terminatorless`, `CompletionStatement` - - - `label`: `Identifier` (default: `null`) - -### t.callExpression(callee, arguments) - -See also `t.isCallExpression(node, opts)` and `t.assertCallExpression(node, opts)`. - -Aliases: `Expression` - - - `callee`: `Expression` (required) - - `arguments`: `Array` (required) - -### t.catchClause(param, body) - -See also `t.isCatchClause(node, opts)` and `t.assertCatchClause(node, opts)`. - -Aliases: `Scopable` - - - `param`: `Identifier` (required) - - `body`: `BlockStatement` (required) - -### t.classBody(body) - -See also `t.isClassBody(node, opts)` and `t.assertClassBody(node, opts)`. - - - `body`: `Array` (required) - -### t.classDeclaration(id, superClass, body, decorators) - -See also `t.isClassDeclaration(node, opts)` and `t.assertClassDeclaration(node, opts)`. - -Aliases: `Scopable`, `Class`, `Statement`, `Declaration`, `Pureish` - - - `id`: `Identifier` (required) - - `superClass`: `Expression` (default: `null`) - - `body`: `ClassBody` (required) - - `decorators`: `Array` (required) - - `implements` (default: `null`) - - `mixins` (default: `null`) - - `superTypeParameters` (default: `null`) - - `typeParameters` (default: `null`) - -### t.classExpression(id, superClass, body, decorators) - -See also `t.isClassExpression(node, opts)` and `t.assertClassExpression(node, opts)`. - -Aliases: `Scopable`, `Class`, `Expression`, `Pureish` - - - `id`: `Identifier` (default: `null`) - - `superClass`: `Expression` (default: `null`) - - `body`: `ClassBody` (required) - - `decorators`: `Array` (required) - - `implements` (default: `null`) - - `mixins` (default: `null`) - - `superTypeParameters` (default: `null`) - - `typeParameters` (default: `null`) - -### t.classImplements(id, typeParameters) - -See also `t.isClassImplements(node, opts)` and `t.assertClassImplements(node, opts)`. - -Aliases: `Flow` - - - `id` (required) - - `typeParameters` (required) - -### t.classMethod(kind, key, params, body, computed, static) - -See also `t.isClassMethod(node, opts)` and `t.assertClassMethod(node, opts)`. - -Aliases: `Function`, `Scopable`, `BlockParent`, `FunctionParent`, `Method` - - - `kind`: `"get" | "set" | "method" | "constructor"` (default: `'method'`) - - `key`if computed then `Expression` else `Identifier | Literal` (required) - - `params`: `Array` (required) - - `body`: `BlockStatement` (required) - - `computed`: `boolean` (default: `false`) - - `static`: `boolean` (default: `false`) - - `async`: `boolean` (default: `false`) - - `decorators` (default: `null`) - - `generator`: `boolean` (default: `false`) - - `returnType` (default: `null`) - - `typeParameters` (default: `null`) - -### t.classProperty(key, value, typeAnnotation, decorators, computed) - -See also `t.isClassProperty(node, opts)` and `t.assertClassProperty(node, opts)`. - -Aliases: `Property` - - - `key` (required) - - `value` (required) - - `typeAnnotation` (required) - - `decorators` (required) - - `computed`: `boolean` (default: `false`) - -### t.conditionalExpression(test, consequent, alternate) - -See also `t.isConditionalExpression(node, opts)` and `t.assertConditionalExpression(node, opts)`. - -Aliases: `Expression`, `Conditional` - - - `test`: `Expression` (required) - - `consequent`: `Expression` (required) - - `alternate`: `Expression` (required) - -### t.continueStatement(label) - -See also `t.isContinueStatement(node, opts)` and `t.assertContinueStatement(node, opts)`. - -Aliases: `Statement`, `Terminatorless`, `CompletionStatement` - - - `label`: `Identifier` (default: `null`) - -### t.debuggerStatement() - -See also `t.isDebuggerStatement(node, opts)` and `t.assertDebuggerStatement(node, opts)`. - -Aliases: `Statement` - - -### t.declareClass(id, typeParameters, extends, body) - -See also `t.isDeclareClass(node, opts)` and `t.assertDeclareClass(node, opts)`. - -Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` - - - `id` (required) - - `typeParameters` (required) - - `extends` (required) - - `body` (required) - -### t.declareFunction(id) - -See also `t.isDeclareFunction(node, opts)` and `t.assertDeclareFunction(node, opts)`. - -Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` - - - `id` (required) - -### t.declareInterface(id, typeParameters, extends, body) - -See also `t.isDeclareInterface(node, opts)` and `t.assertDeclareInterface(node, opts)`. - -Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` - - - `id` (required) - - `typeParameters` (required) - - `extends` (required) - - `body` (required) - -### t.declareModule(id, body) - -See also `t.isDeclareModule(node, opts)` and `t.assertDeclareModule(node, opts)`. - -Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` - - - `id` (required) - - `body` (required) - -### t.declareModuleExports(typeAnnotation) - -See also `t.isDeclareModuleExports(node, opts)` and `t.assertDeclareModuleExports(node, opts)`. - -Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` - - - `typeAnnotation` (required) - -### t.declareTypeAlias(id, typeParameters, right) - -See also `t.isDeclareTypeAlias(node, opts)` and `t.assertDeclareTypeAlias(node, opts)`. - -Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` - - - `id` (required) - - `typeParameters` (required) - - `right` (required) - -### t.declareVariable(id) - -See also `t.isDeclareVariable(node, opts)` and `t.assertDeclareVariable(node, opts)`. - -Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` - - - `id` (required) - -### t.decorator(expression) - -See also `t.isDecorator(node, opts)` and `t.assertDecorator(node, opts)`. - - - `expression`: `Expression` (required) - -### t.directive(value) - -See also `t.isDirective(node, opts)` and `t.assertDirective(node, opts)`. - - - `value`: `DirectiveLiteral` (required) - -### t.directiveLiteral(value) - -See also `t.isDirectiveLiteral(node, opts)` and `t.assertDirectiveLiteral(node, opts)`. - - - `value`: `string` (required) - -### t.doExpression(body) - -See also `t.isDoExpression(node, opts)` and `t.assertDoExpression(node, opts)`. - -Aliases: `Expression` - - - `body`: `BlockStatement` (required) - -### t.doWhileStatement(test, body) - -See also `t.isDoWhileStatement(node, opts)` and `t.assertDoWhileStatement(node, opts)`. - -Aliases: `Statement`, `BlockParent`, `Loop`, `While`, `Scopable` - - - `test`: `Expression` (required) - - `body`: `Statement` (required) - -### t.emptyStatement() - -See also `t.isEmptyStatement(node, opts)` and `t.assertEmptyStatement(node, opts)`. - -Aliases: `Statement` - - -### t.emptyTypeAnnotation() - -See also `t.isEmptyTypeAnnotation(node, opts)` and `t.assertEmptyTypeAnnotation(node, opts)`. - -Aliases: `Flow`, `FlowBaseAnnotation` - - -### t.existentialTypeParam() - -See also `t.isExistentialTypeParam(node, opts)` and `t.assertExistentialTypeParam(node, opts)`. - -Aliases: `Flow` - - -### t.exportAllDeclaration(source) - -See also `t.isExportAllDeclaration(node, opts)` and `t.assertExportAllDeclaration(node, opts)`. - -Aliases: `Statement`, `Declaration`, `ModuleDeclaration`, `ExportDeclaration` - - - `source`: `StringLiteral` (required) - -### t.exportDefaultDeclaration(declaration) - -See also `t.isExportDefaultDeclaration(node, opts)` and `t.assertExportDefaultDeclaration(node, opts)`. - -Aliases: `Statement`, `Declaration`, `ModuleDeclaration`, `ExportDeclaration` - - - `declaration`: `FunctionDeclaration | ClassDeclaration | Expression` (required) - -### t.exportDefaultSpecifier(exported) - -See also `t.isExportDefaultSpecifier(node, opts)` and `t.assertExportDefaultSpecifier(node, opts)`. - -Aliases: `ModuleSpecifier` - - - `exported`: `Identifier` (required) - -### t.exportNamedDeclaration(declaration, specifiers, source) - -See also `t.isExportNamedDeclaration(node, opts)` and `t.assertExportNamedDeclaration(node, opts)`. - -Aliases: `Statement`, `Declaration`, `ModuleDeclaration`, `ExportDeclaration` - - - `declaration`: `Declaration` (default: `null`) - - `specifiers`: `Array` (required) - - `source`: `StringLiteral` (default: `null`) - -### t.exportNamespaceSpecifier(exported) - -See also `t.isExportNamespaceSpecifier(node, opts)` and `t.assertExportNamespaceSpecifier(node, opts)`. - -Aliases: `ModuleSpecifier` - - - `exported`: `Identifier` (required) - -### t.exportSpecifier(local, exported) - -See also `t.isExportSpecifier(node, opts)` and `t.assertExportSpecifier(node, opts)`. - -Aliases: `ModuleSpecifier` - - - `local`: `Identifier` (required) - - `exported`: `Identifier` (required) - -### t.expressionStatement(expression) - -See also `t.isExpressionStatement(node, opts)` and `t.assertExpressionStatement(node, opts)`. - -Aliases: `Statement`, `ExpressionWrapper` - - - `expression`: `Expression` (required) - -### t.file(program, comments, tokens) - -See also `t.isFile(node, opts)` and `t.assertFile(node, opts)`. - - - `program`: `Program` (required) - - `comments` (required) - - `tokens` (required) - -### t.forAwaitStatement(left, right, body) - -See also `t.isForAwaitStatement(node, opts)` and `t.assertForAwaitStatement(node, opts)`. - -Aliases: `Scopable`, `Statement`, `For`, `BlockParent`, `Loop`, `ForXStatement` - - - `left`: `VariableDeclaration | LVal` (required) - - `right`: `Expression` (required) - - `body`: `Statement` (required) - -### t.forInStatement(left, right, body) - -See also `t.isForInStatement(node, opts)` and `t.assertForInStatement(node, opts)`. - -Aliases: `Scopable`, `Statement`, `For`, `BlockParent`, `Loop`, `ForXStatement` - - - `left`: `VariableDeclaration | LVal` (required) - - `right`: `Expression` (required) - - `body`: `Statement` (required) - -### t.forOfStatement(left, right, body) - -See also `t.isForOfStatement(node, opts)` and `t.assertForOfStatement(node, opts)`. - -Aliases: `Scopable`, `Statement`, `For`, `BlockParent`, `Loop`, `ForXStatement` - - - `left`: `VariableDeclaration | LVal` (required) - - `right`: `Expression` (required) - - `body`: `Statement` (required) - -### t.forStatement(init, test, update, body) - -See also `t.isForStatement(node, opts)` and `t.assertForStatement(node, opts)`. - -Aliases: `Scopable`, `Statement`, `For`, `BlockParent`, `Loop` - - - `init`: `VariableDeclaration | Expression` (default: `null`) - - `test`: `Expression` (default: `null`) - - `update`: `Expression` (default: `null`) - - `body`: `Statement` (required) - -### t.functionDeclaration(id, params, body, generator, async) - -See also `t.isFunctionDeclaration(node, opts)` and `t.assertFunctionDeclaration(node, opts)`. - -Aliases: `Scopable`, `Function`, `BlockParent`, `FunctionParent`, `Statement`, `Pureish`, `Declaration` - - - `id`: `Identifier` (required) - - `params`: `Array` (required) - - `body`: `BlockStatement` (required) - - `generator`: `boolean` (default: `false`) - - `async`: `boolean` (default: `false`) - - `returnType` (default: `null`) - - `typeParameters` (default: `null`) - -### t.functionExpression(id, params, body, generator, async) - -See also `t.isFunctionExpression(node, opts)` and `t.assertFunctionExpression(node, opts)`. - -Aliases: `Scopable`, `Function`, `BlockParent`, `FunctionParent`, `Expression`, `Pureish` - - - `id`: `Identifier` (default: `null`) - - `params`: `Array` (required) - - `body`: `BlockStatement` (required) - - `generator`: `boolean` (default: `false`) - - `async`: `boolean` (default: `false`) - - `returnType` (default: `null`) - - `typeParameters` (default: `null`) - -### t.functionTypeAnnotation(typeParameters, params, rest, returnType) - -See also `t.isFunctionTypeAnnotation(node, opts)` and `t.assertFunctionTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - - `typeParameters` (required) - - `params` (required) - - `rest` (required) - - `returnType` (required) - -### t.functionTypeParam(name, typeAnnotation) - -See also `t.isFunctionTypeParam(node, opts)` and `t.assertFunctionTypeParam(node, opts)`. - -Aliases: `Flow` - - - `name` (required) - - `typeAnnotation` (required) - -### t.genericTypeAnnotation(id, typeParameters) - -See also `t.isGenericTypeAnnotation(node, opts)` and `t.assertGenericTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - - `id` (required) - - `typeParameters` (required) - -### t.identifier(name) - -See also `t.isIdentifier(node, opts)` and `t.assertIdentifier(node, opts)`. - -Aliases: `Expression`, `LVal` - - - `name``string` (required) - - `decorators`: `Array` (default: `null`) - - `typeAnnotation` (default: `null`) - -### t.ifStatement(test, consequent, alternate) - -See also `t.isIfStatement(node, opts)` and `t.assertIfStatement(node, opts)`. - -Aliases: `Statement`, `Conditional` - - - `test`: `Expression` (required) - - `consequent`: `Statement` (required) - - `alternate`: `Statement` (default: `null`) - -### t.importDeclaration(specifiers, source) - -See also `t.isImportDeclaration(node, opts)` and `t.assertImportDeclaration(node, opts)`. - -Aliases: `Statement`, `Declaration`, `ModuleDeclaration` - - - `specifiers`: `Array` (required) - - `source`: `StringLiteral` (required) - -### t.importDefaultSpecifier(local) - -See also `t.isImportDefaultSpecifier(node, opts)` and `t.assertImportDefaultSpecifier(node, opts)`. - -Aliases: `ModuleSpecifier` - - - `local`: `Identifier` (required) - -### t.importNamespaceSpecifier(local) - -See also `t.isImportNamespaceSpecifier(node, opts)` and `t.assertImportNamespaceSpecifier(node, opts)`. - -Aliases: `ModuleSpecifier` - - - `local`: `Identifier` (required) - -### t.importSpecifier(local, imported) - -See also `t.isImportSpecifier(node, opts)` and `t.assertImportSpecifier(node, opts)`. - -Aliases: `ModuleSpecifier` - - - `local`: `Identifier` (required) - - `imported`: `Identifier` (required) - -### t.interfaceDeclaration(id, typeParameters, extends, body) - -See also `t.isInterfaceDeclaration(node, opts)` and `t.assertInterfaceDeclaration(node, opts)`. - -Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` - - - `id` (required) - - `typeParameters` (required) - - `extends` (required) - - `body` (required) - -### t.interfaceExtends(id, typeParameters) - -See also `t.isInterfaceExtends(node, opts)` and `t.assertInterfaceExtends(node, opts)`. - -Aliases: `Flow` - - - `id` (required) - - `typeParameters` (required) - -### t.intersectionTypeAnnotation(types) - -See also `t.isIntersectionTypeAnnotation(node, opts)` and `t.assertIntersectionTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - - `types` (required) - -### t.jSXAttribute(name, value) - -See also `t.isJSXAttribute(node, opts)` and `t.assertJSXAttribute(node, opts)`. - -Aliases: `JSX`, `Immutable` - - - `name`: `JSXIdentifier | JSXNamespacedName` (required) - - `value`: `JSXElement | StringLiteral | JSXExpressionContainer` (default: `null`) - -### t.jSXClosingElement(name) - -See also `t.isJSXClosingElement(node, opts)` and `t.assertJSXClosingElement(node, opts)`. - -Aliases: `JSX`, `Immutable` - - - `name`: `JSXIdentifier | JSXMemberExpression` (required) - -### t.jSXElement(openingElement, closingElement, children, selfClosing) - -See also `t.isJSXElement(node, opts)` and `t.assertJSXElement(node, opts)`. - -Aliases: `JSX`, `Immutable`, `Expression` - - - `openingElement`: `JSXOpeningElement` (required) - - `closingElement`: `JSXClosingElement` (default: `null`) - - `children`: `Array` (required) - - `selfClosing` (required) - -### t.jSXEmptyExpression() - -See also `t.isJSXEmptyExpression(node, opts)` and `t.assertJSXEmptyExpression(node, opts)`. - -Aliases: `JSX`, `Expression` - - -### t.jSXExpressionContainer(expression) - -See also `t.isJSXExpressionContainer(node, opts)` and `t.assertJSXExpressionContainer(node, opts)`. - -Aliases: `JSX`, `Immutable` - - - `expression`: `Expression` (required) - -### t.jSXIdentifier(name) - -See also `t.isJSXIdentifier(node, opts)` and `t.assertJSXIdentifier(node, opts)`. - -Aliases: `JSX`, `Expression` - - - `name`: `string` (required) - -### t.jSXMemberExpression(object, property) - -See also `t.isJSXMemberExpression(node, opts)` and `t.assertJSXMemberExpression(node, opts)`. - -Aliases: `JSX`, `Expression` - - - `object`: `JSXMemberExpression | JSXIdentifier` (required) - - `property`: `JSXIdentifier` (required) - -### t.jSXNamespacedName(namespace, name) - -See also `t.isJSXNamespacedName(node, opts)` and `t.assertJSXNamespacedName(node, opts)`. - -Aliases: `JSX` - - - `namespace`: `JSXIdentifier` (required) - - `name`: `JSXIdentifier` (required) - -### t.jSXOpeningElement(name, attributes, selfClosing) - -See also `t.isJSXOpeningElement(node, opts)` and `t.assertJSXOpeningElement(node, opts)`. - -Aliases: `JSX`, `Immutable` - - - `name`: `JSXIdentifier | JSXMemberExpression` (required) - - `attributes`: `Array` (required) - - `selfClosing`: `boolean` (default: `false`) - -### t.jSXSpreadAttribute(argument) - -See also `t.isJSXSpreadAttribute(node, opts)` and `t.assertJSXSpreadAttribute(node, opts)`. - -Aliases: `JSX` - - - `argument`: `Expression` (required) - -### t.jSXText(value) - -See also `t.isJSXText(node, opts)` and `t.assertJSXText(node, opts)`. - -Aliases: `JSX`, `Immutable` - - - `value`: `string` (required) - -### t.labeledStatement(label, body) - -See also `t.isLabeledStatement(node, opts)` and `t.assertLabeledStatement(node, opts)`. - -Aliases: `Statement` - - - `label`: `Identifier` (required) - - `body`: `Statement` (required) - -### t.logicalExpression(operator, left, right) - -See also `t.isLogicalExpression(node, opts)` and `t.assertLogicalExpression(node, opts)`. - -Aliases: `Binary`, `Expression` - - - `operator`: `'||' | '&&'` (required) - - `left`: `Expression` (required) - - `right`: `Expression` (required) - -### t.memberExpression(object, property, computed) - -See also `t.isMemberExpression(node, opts)` and `t.assertMemberExpression(node, opts)`. - -Aliases: `Expression`, `LVal` - - - `object`: `Expression` (required) - - `property`if computed then `Expression` else `Identifier` (required) - - `computed`: `boolean` (default: `false`) - -### t.metaProperty(meta, property) - -See also `t.isMetaProperty(node, opts)` and `t.assertMetaProperty(node, opts)`. - -Aliases: `Expression` - - - `meta`: `string` (required) - - `property`: `string` (required) - -### t.mixedTypeAnnotation() - -See also `t.isMixedTypeAnnotation(node, opts)` and `t.assertMixedTypeAnnotation(node, opts)`. - -Aliases: `Flow`, `FlowBaseAnnotation` - - -### t.newExpression(callee, arguments) - -See also `t.isNewExpression(node, opts)` and `t.assertNewExpression(node, opts)`. - -Aliases: `Expression` - - - `callee`: `Expression` (required) - - `arguments`: `Array` (required) - -### t.noop() - -See also `t.isNoop(node, opts)` and `t.assertNoop(node, opts)`. - - -### t.nullLiteral() - -See also `t.isNullLiteral(node, opts)` and `t.assertNullLiteral(node, opts)`. - -Aliases: `Expression`, `Pureish`, `Literal`, `Immutable` - - -### t.nullLiteralTypeAnnotation() - -See also `t.isNullLiteralTypeAnnotation(node, opts)` and `t.assertNullLiteralTypeAnnotation(node, opts)`. - -Aliases: `Flow`, `FlowBaseAnnotation` - - -### t.nullableTypeAnnotation(typeAnnotation) - -See also `t.isNullableTypeAnnotation(node, opts)` and `t.assertNullableTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - - `typeAnnotation` (required) - -### t.numberTypeAnnotation() - -See also `t.isNumberTypeAnnotation(node, opts)` and `t.assertNumberTypeAnnotation(node, opts)`. - -Aliases: `Flow`, `FlowBaseAnnotation` - - -### t.numericLiteral(value) - -See also `t.isNumericLiteral(node, opts)` and `t.assertNumericLiteral(node, opts)`. - -Aliases: `Expression`, `Pureish`, `Literal`, `Immutable` - - - `value`: `number` (required) - -### t.numericLiteralTypeAnnotation() - -See also `t.isNumericLiteralTypeAnnotation(node, opts)` and `t.assertNumericLiteralTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - -### t.objectExpression(properties) - -See also `t.isObjectExpression(node, opts)` and `t.assertObjectExpression(node, opts)`. - -Aliases: `Expression` - - - `properties`: `Array` (required) - -### t.objectMethod(kind, key, params, body, computed) - -See also `t.isObjectMethod(node, opts)` and `t.assertObjectMethod(node, opts)`. - -Aliases: `UserWhitespacable`, `Function`, `Scopable`, `BlockParent`, `FunctionParent`, `Method`, `ObjectMember` - - - `kind`: `"method" | "get" | "set"` (default: `'method'`) - - `key`if computed then `Expression` else `Identifier | Literal` (required) - - `params` (required) - - `body`: `BlockStatement` (required) - - `computed`: `boolean` (default: `false`) - - `async`: `boolean` (default: `false`) - - `decorators`: `Array` (default: `null`) - - `generator`: `boolean` (default: `false`) - - `returnType` (default: `null`) - - `typeParameters` (default: `null`) - -### t.objectPattern(properties, typeAnnotation) - -See also `t.isObjectPattern(node, opts)` and `t.assertObjectPattern(node, opts)`. - -Aliases: `Pattern`, `LVal` - - - `properties`: `Array` (required) - - `typeAnnotation` (required) - - `decorators`: `Array` (default: `null`) - -### t.objectProperty(key, value, computed, shorthand, decorators) - -See also `t.isObjectProperty(node, opts)` and `t.assertObjectProperty(node, opts)`. - -Aliases: `UserWhitespacable`, `Property`, `ObjectMember` - - - `key`if computed then `Expression` else `Identifier | Literal` (required) - - `value`: `Expression` (required) - - `computed`: `boolean` (default: `false`) - - `shorthand`: `boolean` (default: `false`) - - `decorators`: `Array` (default: `null`) - -### t.objectTypeAnnotation(properties, indexers, callProperties) - -See also `t.isObjectTypeAnnotation(node, opts)` and `t.assertObjectTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - - `properties` (required) - - `indexers` (required) - - `callProperties` (required) - -### t.objectTypeCallProperty(value) - -See also `t.isObjectTypeCallProperty(node, opts)` and `t.assertObjectTypeCallProperty(node, opts)`. - -Aliases: `Flow`, `UserWhitespacable` - - - `value` (required) - -### t.objectTypeIndexer(id, key, value) - -See also `t.isObjectTypeIndexer(node, opts)` and `t.assertObjectTypeIndexer(node, opts)`. - -Aliases: `Flow`, `UserWhitespacable` - - - `id` (required) - - `key` (required) - - `value` (required) - -### t.objectTypeProperty(key, value) - -See also `t.isObjectTypeProperty(node, opts)` and `t.assertObjectTypeProperty(node, opts)`. - -Aliases: `Flow`, `UserWhitespacable` - - - `key` (required) - - `value` (required) - -### t.parenthesizedExpression(expression) - -See also `t.isParenthesizedExpression(node, opts)` and `t.assertParenthesizedExpression(node, opts)`. - -Aliases: `Expression`, `ExpressionWrapper` - - - `expression`: `Expression` (required) - -### t.program(body, directives) - -See also `t.isProgram(node, opts)` and `t.assertProgram(node, opts)`. - -Aliases: `Scopable`, `BlockParent`, `Block`, `FunctionParent` - - - `body`: `Array` (required) - - `directives`: `Array` (default: `[]`) - -### t.qualifiedTypeIdentifier(id, qualification) - -See also `t.isQualifiedTypeIdentifier(node, opts)` and `t.assertQualifiedTypeIdentifier(node, opts)`. - -Aliases: `Flow` - - - `id` (required) - - `qualification` (required) - -### t.regExpLiteral(pattern, flags) - -See also `t.isRegExpLiteral(node, opts)` and `t.assertRegExpLiteral(node, opts)`. - -Aliases: `Expression`, `Literal` - - - `pattern`: `string` (required) - - `flags`: `string` (default: `''`) - -### t.restElement(argument, typeAnnotation) - -See also `t.isRestElement(node, opts)` and `t.assertRestElement(node, opts)`. - -Aliases: `LVal` - - - `argument`: `LVal` (required) - - `typeAnnotation` (required) - - `decorators`: `Array` (default: `null`) - -### t.restProperty(argument) - -See also `t.isRestProperty(node, opts)` and `t.assertRestProperty(node, opts)`. - -Aliases: `UnaryLike` - - - `argument`: `LVal` (required) - -### t.returnStatement(argument) - -See also `t.isReturnStatement(node, opts)` and `t.assertReturnStatement(node, opts)`. - -Aliases: `Statement`, `Terminatorless`, `CompletionStatement` - - - `argument`: `Expression` (default: `null`) - -### t.sequenceExpression(expressions) - -See also `t.isSequenceExpression(node, opts)` and `t.assertSequenceExpression(node, opts)`. - -Aliases: `Expression` - - - `expressions`: `Array` (required) - -### t.spreadElement(argument) - -See also `t.isSpreadElement(node, opts)` and `t.assertSpreadElement(node, opts)`. - -Aliases: `UnaryLike` - - - `argument`: `Expression` (required) - -### t.spreadProperty(argument) - -See also `t.isSpreadProperty(node, opts)` and `t.assertSpreadProperty(node, opts)`. - -Aliases: `UnaryLike` - - - `argument`: `Expression` (required) - -### t.stringLiteral(value) - -See also `t.isStringLiteral(node, opts)` and `t.assertStringLiteral(node, opts)`. - -Aliases: `Expression`, `Pureish`, `Literal`, `Immutable` - - - `value`: `string` (required) - -### t.stringLiteralTypeAnnotation() - -See also `t.isStringLiteralTypeAnnotation(node, opts)` and `t.assertStringLiteralTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - -### t.stringTypeAnnotation() - -See also `t.isStringTypeAnnotation(node, opts)` and `t.assertStringTypeAnnotation(node, opts)`. - -Aliases: `Flow`, `FlowBaseAnnotation` - - -### t.super() - -See also `t.isSuper(node, opts)` and `t.assertSuper(node, opts)`. - -Aliases: `Expression` - - -### t.switchCase(test, consequent) - -See also `t.isSwitchCase(node, opts)` and `t.assertSwitchCase(node, opts)`. - - - `test`: `Expression` (default: `null`) - - `consequent`: `Array` (required) - -### t.switchStatement(discriminant, cases) - -See also `t.isSwitchStatement(node, opts)` and `t.assertSwitchStatement(node, opts)`. - -Aliases: `Statement`, `BlockParent`, `Scopable` - - - `discriminant`: `Expression` (required) - - `cases`: `Array` (required) - -### t.taggedTemplateExpression(tag, quasi) - -See also `t.isTaggedTemplateExpression(node, opts)` and `t.assertTaggedTemplateExpression(node, opts)`. - -Aliases: `Expression` - - - `tag`: `Expression` (required) - - `quasi`: `TemplateLiteral` (required) - -### t.templateElement(value, tail) - -See also `t.isTemplateElement(node, opts)` and `t.assertTemplateElement(node, opts)`. - - - `value` (required) - - `tail`: `boolean` (default: `false`) - -### t.templateLiteral(quasis, expressions) - -See also `t.isTemplateLiteral(node, opts)` and `t.assertTemplateLiteral(node, opts)`. - -Aliases: `Expression`, `Literal` - - - `quasis`: `Array` (required) - - `expressions`: `Array` (required) - -### t.thisExpression() - -See also `t.isThisExpression(node, opts)` and `t.assertThisExpression(node, opts)`. - -Aliases: `Expression` - - -### t.thisTypeAnnotation() - -See also `t.isThisTypeAnnotation(node, opts)` and `t.assertThisTypeAnnotation(node, opts)`. - -Aliases: `Flow`, `FlowBaseAnnotation` - - -### t.throwStatement(argument) - -See also `t.isThrowStatement(node, opts)` and `t.assertThrowStatement(node, opts)`. - -Aliases: `Statement`, `Terminatorless`, `CompletionStatement` - - - `argument`: `Expression` (required) - -### t.tryStatement(block, handler, finalizer) - -See also `t.isTryStatement(node, opts)` and `t.assertTryStatement(node, opts)`. - -Aliases: `Statement` - - - `block` (required) - - `handler` (default: `null`) - - `finalizer`: `BlockStatement` (default: `null`) - - `body`: `BlockStatement` (default: `null`) - -### t.tupleTypeAnnotation(types) - -See also `t.isTupleTypeAnnotation(node, opts)` and `t.assertTupleTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - - `types` (required) - -### t.typeAlias(id, typeParameters, right) - -See also `t.isTypeAlias(node, opts)` and `t.assertTypeAlias(node, opts)`. - -Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` - - - `id` (required) - - `typeParameters` (required) - - `right` (required) - -### t.typeAnnotation(typeAnnotation) - -See also `t.isTypeAnnotation(node, opts)` and `t.assertTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - - `typeAnnotation` (required) - -### t.typeCastExpression(expression, typeAnnotation) - -See also `t.isTypeCastExpression(node, opts)` and `t.assertTypeCastExpression(node, opts)`. - -Aliases: `Flow`, `ExpressionWrapper`, `Expression` - - - `expression` (required) - - `typeAnnotation` (required) - -### t.typeParameter(bound) - -See also `t.isTypeParameter(node, opts)` and `t.assertTypeParameter(node, opts)`. - -Aliases: `Flow` - - - `bound` (required) - -### t.typeParameterDeclaration(params) - -See also `t.isTypeParameterDeclaration(node, opts)` and `t.assertTypeParameterDeclaration(node, opts)`. - -Aliases: `Flow` - - - `params` (required) - -### t.typeParameterInstantiation(params) - -See also `t.isTypeParameterInstantiation(node, opts)` and `t.assertTypeParameterInstantiation(node, opts)`. - -Aliases: `Flow` - - - `params` (required) - -### t.typeofTypeAnnotation(argument) - -See also `t.isTypeofTypeAnnotation(node, opts)` and `t.assertTypeofTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - - `argument` (required) - -### t.unaryExpression(operator, argument, prefix) - -See also `t.isUnaryExpression(node, opts)` and `t.assertUnaryExpression(node, opts)`. - -Aliases: `UnaryLike`, `Expression` - - - `operator`: `'void' | 'delete' | '!' | '+' | '-' | '++' | '--' | '~' | 'typeof'` (required) - - `argument`: `Expression` (required) - - `prefix`: `boolean` (default: `true`) - -### t.unionTypeAnnotation(types) - -See also `t.isUnionTypeAnnotation(node, opts)` and `t.assertUnionTypeAnnotation(node, opts)`. - -Aliases: `Flow` - - - `types` (required) - -### t.updateExpression(operator, argument, prefix) - -See also `t.isUpdateExpression(node, opts)` and `t.assertUpdateExpression(node, opts)`. - -Aliases: `Expression` - - - `operator`: `'++' | '--'` (required) - - `argument`: `Expression` (required) - - `prefix`: `boolean` (default: `false`) - -### t.variableDeclaration(kind, declarations) - -See also `t.isVariableDeclaration(node, opts)` and `t.assertVariableDeclaration(node, opts)`. - -Aliases: `Statement`, `Declaration` - - - `kind`: `"var" | "let" | "const"` (required) - - `declarations`: `Array` (required) - -### t.variableDeclarator(id, init) - -See also `t.isVariableDeclarator(node, opts)` and `t.assertVariableDeclarator(node, opts)`. - - - `id`: `LVal` (required) - - `init`: `Expression` (default: `null`) - -### t.voidTypeAnnotation() - -See also `t.isVoidTypeAnnotation(node, opts)` and `t.assertVoidTypeAnnotation(node, opts)`. - -Aliases: `Flow`, `FlowBaseAnnotation` - - -### t.whileStatement(test, body) - -See also `t.isWhileStatement(node, opts)` and `t.assertWhileStatement(node, opts)`. - -Aliases: `Statement`, `BlockParent`, `Loop`, `While`, `Scopable` - - - `test`: `Expression` (required) - - `body`: `BlockStatement | Statement` (required) - -### t.withStatement(object, body) - -See also `t.isWithStatement(node, opts)` and `t.assertWithStatement(node, opts)`. - -Aliases: `Statement` - - - `object` (required) - - `body`: `BlockStatement | Statement` (required) - -### t.yieldExpression(argument, delegate) - -See also `t.isYieldExpression(node, opts)` and `t.assertYieldExpression(node, opts)`. - -Aliases: `Expression`, `Terminatorless` - - - `argument`: `Expression` (default: `null`) - - `delegate`: `boolean` (default: `false`) - - - - diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/constants.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/constants.js deleted file mode 100644 index ba15090b9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/constants.js +++ /dev/null @@ -1,38 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.NOT_LOCAL_BINDING = exports.BLOCK_SCOPED_SYMBOL = exports.INHERIT_KEYS = exports.UNARY_OPERATORS = exports.STRING_UNARY_OPERATORS = exports.NUMBER_UNARY_OPERATORS = exports.BOOLEAN_UNARY_OPERATORS = exports.BINARY_OPERATORS = exports.NUMBER_BINARY_OPERATORS = exports.BOOLEAN_BINARY_OPERATORS = exports.COMPARISON_BINARY_OPERATORS = exports.EQUALITY_BINARY_OPERATORS = exports.BOOLEAN_NUMBER_BINARY_OPERATORS = exports.UPDATE_OPERATORS = exports.LOGICAL_OPERATORS = exports.COMMENT_KEYS = exports.FOR_INIT_KEYS = exports.FLATTENABLE_KEYS = exports.STATEMENT_OR_BLOCK_KEYS = undefined; - -var _for = require("babel-runtime/core-js/symbol/for"); - -var _for2 = _interopRequireDefault(_for); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var STATEMENT_OR_BLOCK_KEYS = exports.STATEMENT_OR_BLOCK_KEYS = ["consequent", "body", "alternate"]; -var FLATTENABLE_KEYS = exports.FLATTENABLE_KEYS = ["body", "expressions"]; -var FOR_INIT_KEYS = exports.FOR_INIT_KEYS = ["left", "init"]; -var COMMENT_KEYS = exports.COMMENT_KEYS = ["leadingComments", "trailingComments", "innerComments"]; - -var LOGICAL_OPERATORS = exports.LOGICAL_OPERATORS = ["||", "&&"]; -var UPDATE_OPERATORS = exports.UPDATE_OPERATORS = ["++", "--"]; - -var BOOLEAN_NUMBER_BINARY_OPERATORS = exports.BOOLEAN_NUMBER_BINARY_OPERATORS = [">", "<", ">=", "<="]; -var EQUALITY_BINARY_OPERATORS = exports.EQUALITY_BINARY_OPERATORS = ["==", "===", "!=", "!=="]; -var COMPARISON_BINARY_OPERATORS = exports.COMPARISON_BINARY_OPERATORS = [].concat(EQUALITY_BINARY_OPERATORS, ["in", "instanceof"]); -var BOOLEAN_BINARY_OPERATORS = exports.BOOLEAN_BINARY_OPERATORS = [].concat(COMPARISON_BINARY_OPERATORS, BOOLEAN_NUMBER_BINARY_OPERATORS); -var NUMBER_BINARY_OPERATORS = exports.NUMBER_BINARY_OPERATORS = ["-", "/", "%", "*", "**", "&", "|", ">>", ">>>", "<<", "^"]; -var BINARY_OPERATORS = exports.BINARY_OPERATORS = ["+"].concat(NUMBER_BINARY_OPERATORS, BOOLEAN_BINARY_OPERATORS); - -var BOOLEAN_UNARY_OPERATORS = exports.BOOLEAN_UNARY_OPERATORS = ["delete", "!"]; -var NUMBER_UNARY_OPERATORS = exports.NUMBER_UNARY_OPERATORS = ["+", "-", "++", "--", "~"]; -var STRING_UNARY_OPERATORS = exports.STRING_UNARY_OPERATORS = ["typeof"]; -var UNARY_OPERATORS = exports.UNARY_OPERATORS = ["void"].concat(BOOLEAN_UNARY_OPERATORS, NUMBER_UNARY_OPERATORS, STRING_UNARY_OPERATORS); - -var INHERIT_KEYS = exports.INHERIT_KEYS = { - optional: ["typeAnnotation", "typeParameters", "returnType"], - force: ["start", "loc", "end"] -}; - -var BLOCK_SCOPED_SYMBOL = exports.BLOCK_SCOPED_SYMBOL = (0, _for2.default)("var used to be block scoped"); -var NOT_LOCAL_BINDING = exports.NOT_LOCAL_BINDING = (0, _for2.default)("should not be considered a local binding"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/converters.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/converters.js deleted file mode 100644 index bcf3942c2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/converters.js +++ /dev/null @@ -1,346 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _maxSafeInteger = require("babel-runtime/core-js/number/max-safe-integer"); - -var _maxSafeInteger2 = _interopRequireDefault(_maxSafeInteger); - -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.toComputedKey = toComputedKey; -exports.toSequenceExpression = toSequenceExpression; -exports.toKeyAlias = toKeyAlias; -exports.toIdentifier = toIdentifier; -exports.toBindingIdentifierName = toBindingIdentifierName; -exports.toStatement = toStatement; -exports.toExpression = toExpression; -exports.toBlock = toBlock; -exports.valueToNode = valueToNode; - -var _isPlainObject = require("lodash/isPlainObject"); - -var _isPlainObject2 = _interopRequireDefault(_isPlainObject); - -var _isNumber = require("lodash/isNumber"); - -var _isNumber2 = _interopRequireDefault(_isNumber); - -var _isRegExp = require("lodash/isRegExp"); - -var _isRegExp2 = _interopRequireDefault(_isRegExp); - -var _isString = require("lodash/isString"); - -var _isString2 = _interopRequireDefault(_isString); - -var _index = require("./index"); - -var t = _interopRequireWildcard(_index); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function toComputedKey(node) { - var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : node.key || node.property; - - if (!node.computed) { - if (t.isIdentifier(key)) key = t.stringLiteral(key.name); - } - return key; -} - -function toSequenceExpression(nodes, scope) { - if (!nodes || !nodes.length) return; - - var declars = []; - var bailed = false; - - var result = convert(nodes); - if (bailed) return; - - for (var i = 0; i < declars.length; i++) { - scope.push(declars[i]); - } - - return result; - - function convert(nodes) { - var ensureLastUndefined = false; - var exprs = []; - - for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var node = _ref; - - if (t.isExpression(node)) { - exprs.push(node); - } else if (t.isExpressionStatement(node)) { - exprs.push(node.expression); - } else if (t.isVariableDeclaration(node)) { - if (node.kind !== "var") return bailed = true; - - for (var _iterator2 = node.declarations, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var declar = _ref2; - - var bindings = t.getBindingIdentifiers(declar); - for (var key in bindings) { - declars.push({ - kind: node.kind, - id: bindings[key] - }); - } - - if (declar.init) { - exprs.push(t.assignmentExpression("=", declar.id, declar.init)); - } - } - - ensureLastUndefined = true; - continue; - } else if (t.isIfStatement(node)) { - var consequent = node.consequent ? convert([node.consequent]) : scope.buildUndefinedNode(); - var alternate = node.alternate ? convert([node.alternate]) : scope.buildUndefinedNode(); - if (!consequent || !alternate) return bailed = true; - - exprs.push(t.conditionalExpression(node.test, consequent, alternate)); - } else if (t.isBlockStatement(node)) { - exprs.push(convert(node.body)); - } else if (t.isEmptyStatement(node)) { - ensureLastUndefined = true; - continue; - } else { - return bailed = true; - } - - ensureLastUndefined = false; - } - - if (ensureLastUndefined || exprs.length === 0) { - exprs.push(scope.buildUndefinedNode()); - } - - if (exprs.length === 1) { - return exprs[0]; - } else { - return t.sequenceExpression(exprs); - } - } -} - -function toKeyAlias(node) { - var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : node.key; - - var alias = void 0; - - if (node.kind === "method") { - return toKeyAlias.increment() + ""; - } else if (t.isIdentifier(key)) { - alias = key.name; - } else if (t.isStringLiteral(key)) { - alias = (0, _stringify2.default)(key.value); - } else { - alias = (0, _stringify2.default)(t.removePropertiesDeep(t.cloneDeep(key))); - } - - if (node.computed) { - alias = "[" + alias + "]"; - } - - if (node.static) { - alias = "static:" + alias; - } - - return alias; -} - -toKeyAlias.uid = 0; - -toKeyAlias.increment = function () { - if (toKeyAlias.uid >= _maxSafeInteger2.default) { - return toKeyAlias.uid = 0; - } else { - return toKeyAlias.uid++; - } -}; - -function toIdentifier(name) { - name = name + ""; - - name = name.replace(/[^a-zA-Z0-9$_]/g, "-"); - - name = name.replace(/^[-0-9]+/, ""); - - name = name.replace(/[-\s]+(.)?/g, function (match, c) { - return c ? c.toUpperCase() : ""; - }); - - if (!t.isValidIdentifier(name)) { - name = "_" + name; - } - - return name || "_"; -} - -function toBindingIdentifierName(name) { - name = toIdentifier(name); - if (name === "eval" || name === "arguments") name = "_" + name; - return name; -} - -function toStatement(node, ignore) { - if (t.isStatement(node)) { - return node; - } - - var mustHaveId = false; - var newType = void 0; - - if (t.isClass(node)) { - mustHaveId = true; - newType = "ClassDeclaration"; - } else if (t.isFunction(node)) { - mustHaveId = true; - newType = "FunctionDeclaration"; - } else if (t.isAssignmentExpression(node)) { - return t.expressionStatement(node); - } - - if (mustHaveId && !node.id) { - newType = false; - } - - if (!newType) { - if (ignore) { - return false; - } else { - throw new Error("cannot turn " + node.type + " to a statement"); - } - } - - node.type = newType; - - return node; -} - -function toExpression(node) { - if (t.isExpressionStatement(node)) { - node = node.expression; - } - - if (t.isExpression(node)) { - return node; - } - - if (t.isClass(node)) { - node.type = "ClassExpression"; - } else if (t.isFunction(node)) { - node.type = "FunctionExpression"; - } - - if (!t.isExpression(node)) { - throw new Error("cannot turn " + node.type + " to an expression"); - } - - return node; -} - -function toBlock(node, parent) { - if (t.isBlockStatement(node)) { - return node; - } - - if (t.isEmptyStatement(node)) { - node = []; - } - - if (!Array.isArray(node)) { - if (!t.isStatement(node)) { - if (t.isFunction(parent)) { - node = t.returnStatement(node); - } else { - node = t.expressionStatement(node); - } - } - - node = [node]; - } - - return t.blockStatement(node); -} - -function valueToNode(value) { - if (value === undefined) { - return t.identifier("undefined"); - } - - if (value === true || value === false) { - return t.booleanLiteral(value); - } - - if (value === null) { - return t.nullLiteral(); - } - - if ((0, _isString2.default)(value)) { - return t.stringLiteral(value); - } - - if ((0, _isNumber2.default)(value)) { - return t.numericLiteral(value); - } - - if ((0, _isRegExp2.default)(value)) { - var pattern = value.source; - var flags = value.toString().match(/\/([a-z]+|)$/)[1]; - return t.regExpLiteral(pattern, flags); - } - - if (Array.isArray(value)) { - return t.arrayExpression(value.map(t.valueToNode)); - } - - if ((0, _isPlainObject2.default)(value)) { - var props = []; - for (var key in value) { - var nodeKey = void 0; - if (t.isValidIdentifier(key)) { - nodeKey = t.identifier(key); - } else { - nodeKey = t.stringLiteral(key); - } - props.push(t.objectProperty(nodeKey, t.valueToNode(value[key]))); - } - return t.objectExpression(props); - } - - throw new Error("don't know how to turn this value into a node"); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/core.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/core.js deleted file mode 100644 index 3b03262ff..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/core.js +++ /dev/null @@ -1,701 +0,0 @@ -"use strict"; - -var _index = require("../index"); - -var t = _interopRequireWildcard(_index); - -var _constants = require("../constants"); - -var _index2 = require("./index"); - -var _index3 = _interopRequireDefault(_index2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -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; } } - -(0, _index3.default)("ArrayExpression", { - fields: { - elements: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeOrValueType)("null", "Expression", "SpreadElement"))), - default: [] - } - }, - visitor: ["elements"], - aliases: ["Expression"] -}); - -(0, _index3.default)("AssignmentExpression", { - fields: { - operator: { - validate: (0, _index2.assertValueType)("string") - }, - left: { - validate: (0, _index2.assertNodeType)("LVal") - }, - right: { - validate: (0, _index2.assertNodeType)("Expression") - } - }, - builder: ["operator", "left", "right"], - visitor: ["left", "right"], - aliases: ["Expression"] -}); - -(0, _index3.default)("BinaryExpression", { - builder: ["operator", "left", "right"], - fields: { - operator: { - validate: _index2.assertOneOf.apply(undefined, _constants.BINARY_OPERATORS) - }, - left: { - validate: (0, _index2.assertNodeType)("Expression") - }, - right: { - validate: (0, _index2.assertNodeType)("Expression") - } - }, - visitor: ["left", "right"], - aliases: ["Binary", "Expression"] -}); - -(0, _index3.default)("Directive", { - visitor: ["value"], - fields: { - value: { - validate: (0, _index2.assertNodeType)("DirectiveLiteral") - } - } -}); - -(0, _index3.default)("DirectiveLiteral", { - builder: ["value"], - fields: { - value: { - validate: (0, _index2.assertValueType)("string") - } - } -}); - -(0, _index3.default)("BlockStatement", { - builder: ["body", "directives"], - visitor: ["directives", "body"], - fields: { - directives: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Directive"))), - default: [] - }, - body: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Statement"))) - } - }, - aliases: ["Scopable", "BlockParent", "Block", "Statement"] -}); - -(0, _index3.default)("BreakStatement", { - visitor: ["label"], - fields: { - label: { - validate: (0, _index2.assertNodeType)("Identifier"), - optional: true - } - }, - aliases: ["Statement", "Terminatorless", "CompletionStatement"] -}); - -(0, _index3.default)("CallExpression", { - visitor: ["callee", "arguments"], - fields: { - callee: { - validate: (0, _index2.assertNodeType)("Expression") - }, - arguments: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Expression", "SpreadElement"))) - } - }, - aliases: ["Expression"] -}); - -(0, _index3.default)("CatchClause", { - visitor: ["param", "body"], - fields: { - param: { - validate: (0, _index2.assertNodeType)("Identifier") - }, - body: { - validate: (0, _index2.assertNodeType)("BlockStatement") - } - }, - aliases: ["Scopable"] -}); - -(0, _index3.default)("ConditionalExpression", { - visitor: ["test", "consequent", "alternate"], - fields: { - test: { - validate: (0, _index2.assertNodeType)("Expression") - }, - consequent: { - validate: (0, _index2.assertNodeType)("Expression") - }, - alternate: { - validate: (0, _index2.assertNodeType)("Expression") - } - }, - aliases: ["Expression", "Conditional"] -}); - -(0, _index3.default)("ContinueStatement", { - visitor: ["label"], - fields: { - label: { - validate: (0, _index2.assertNodeType)("Identifier"), - optional: true - } - }, - aliases: ["Statement", "Terminatorless", "CompletionStatement"] -}); - -(0, _index3.default)("DebuggerStatement", { - aliases: ["Statement"] -}); - -(0, _index3.default)("DoWhileStatement", { - visitor: ["test", "body"], - fields: { - test: { - validate: (0, _index2.assertNodeType)("Expression") - }, - body: { - validate: (0, _index2.assertNodeType)("Statement") - } - }, - aliases: ["Statement", "BlockParent", "Loop", "While", "Scopable"] -}); - -(0, _index3.default)("EmptyStatement", { - aliases: ["Statement"] -}); - -(0, _index3.default)("ExpressionStatement", { - visitor: ["expression"], - fields: { - expression: { - validate: (0, _index2.assertNodeType)("Expression") - } - }, - aliases: ["Statement", "ExpressionWrapper"] -}); - -(0, _index3.default)("File", { - builder: ["program", "comments", "tokens"], - visitor: ["program"], - fields: { - program: { - validate: (0, _index2.assertNodeType)("Program") - } - } -}); - -(0, _index3.default)("ForInStatement", { - visitor: ["left", "right", "body"], - aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop", "ForXStatement"], - fields: { - left: { - validate: (0, _index2.assertNodeType)("VariableDeclaration", "LVal") - }, - right: { - validate: (0, _index2.assertNodeType)("Expression") - }, - body: { - validate: (0, _index2.assertNodeType)("Statement") - } - } -}); - -(0, _index3.default)("ForStatement", { - visitor: ["init", "test", "update", "body"], - aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop"], - fields: { - init: { - validate: (0, _index2.assertNodeType)("VariableDeclaration", "Expression"), - optional: true - }, - test: { - validate: (0, _index2.assertNodeType)("Expression"), - optional: true - }, - update: { - validate: (0, _index2.assertNodeType)("Expression"), - optional: true - }, - body: { - validate: (0, _index2.assertNodeType)("Statement") - } - } -}); - -(0, _index3.default)("FunctionDeclaration", { - builder: ["id", "params", "body", "generator", "async"], - visitor: ["id", "params", "body", "returnType", "typeParameters"], - fields: { - id: { - validate: (0, _index2.assertNodeType)("Identifier") - }, - params: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("LVal"))) - }, - body: { - validate: (0, _index2.assertNodeType)("BlockStatement") - }, - generator: { - default: false, - validate: (0, _index2.assertValueType)("boolean") - }, - async: { - default: false, - validate: (0, _index2.assertValueType)("boolean") - } - }, - aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Statement", "Pureish", "Declaration"] -}); - -(0, _index3.default)("FunctionExpression", { - inherits: "FunctionDeclaration", - aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Expression", "Pureish"], - fields: { - id: { - validate: (0, _index2.assertNodeType)("Identifier"), - optional: true - }, - params: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("LVal"))) - }, - body: { - validate: (0, _index2.assertNodeType)("BlockStatement") - }, - generator: { - default: false, - validate: (0, _index2.assertValueType)("boolean") - }, - async: { - default: false, - validate: (0, _index2.assertValueType)("boolean") - } - } -}); - -(0, _index3.default)("Identifier", { - builder: ["name"], - visitor: ["typeAnnotation"], - aliases: ["Expression", "LVal"], - fields: { - name: { - validate: function validate(node, key, val) { - if (!t.isValidIdentifier(val)) {} - } - }, - decorators: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Decorator"))) - } - } -}); - -(0, _index3.default)("IfStatement", { - visitor: ["test", "consequent", "alternate"], - aliases: ["Statement", "Conditional"], - fields: { - test: { - validate: (0, _index2.assertNodeType)("Expression") - }, - consequent: { - validate: (0, _index2.assertNodeType)("Statement") - }, - alternate: { - optional: true, - validate: (0, _index2.assertNodeType)("Statement") - } - } -}); - -(0, _index3.default)("LabeledStatement", { - visitor: ["label", "body"], - aliases: ["Statement"], - fields: { - label: { - validate: (0, _index2.assertNodeType)("Identifier") - }, - body: { - validate: (0, _index2.assertNodeType)("Statement") - } - } -}); - -(0, _index3.default)("StringLiteral", { - builder: ["value"], - fields: { - value: { - validate: (0, _index2.assertValueType)("string") - } - }, - aliases: ["Expression", "Pureish", "Literal", "Immutable"] -}); - -(0, _index3.default)("NumericLiteral", { - builder: ["value"], - deprecatedAlias: "NumberLiteral", - fields: { - value: { - validate: (0, _index2.assertValueType)("number") - } - }, - aliases: ["Expression", "Pureish", "Literal", "Immutable"] -}); - -(0, _index3.default)("NullLiteral", { - aliases: ["Expression", "Pureish", "Literal", "Immutable"] -}); - -(0, _index3.default)("BooleanLiteral", { - builder: ["value"], - fields: { - value: { - validate: (0, _index2.assertValueType)("boolean") - } - }, - aliases: ["Expression", "Pureish", "Literal", "Immutable"] -}); - -(0, _index3.default)("RegExpLiteral", { - builder: ["pattern", "flags"], - deprecatedAlias: "RegexLiteral", - aliases: ["Expression", "Literal"], - fields: { - pattern: { - validate: (0, _index2.assertValueType)("string") - }, - flags: { - validate: (0, _index2.assertValueType)("string"), - default: "" - } - } -}); - -(0, _index3.default)("LogicalExpression", { - builder: ["operator", "left", "right"], - visitor: ["left", "right"], - aliases: ["Binary", "Expression"], - fields: { - operator: { - validate: _index2.assertOneOf.apply(undefined, _constants.LOGICAL_OPERATORS) - }, - left: { - validate: (0, _index2.assertNodeType)("Expression") - }, - right: { - validate: (0, _index2.assertNodeType)("Expression") - } - } -}); - -(0, _index3.default)("MemberExpression", { - builder: ["object", "property", "computed"], - visitor: ["object", "property"], - aliases: ["Expression", "LVal"], - fields: { - object: { - validate: (0, _index2.assertNodeType)("Expression") - }, - property: { - validate: function validate(node, key, val) { - var expectedType = node.computed ? "Expression" : "Identifier"; - (0, _index2.assertNodeType)(expectedType)(node, key, val); - } - }, - computed: { - default: false - } - } -}); - -(0, _index3.default)("NewExpression", { - visitor: ["callee", "arguments"], - aliases: ["Expression"], - fields: { - callee: { - validate: (0, _index2.assertNodeType)("Expression") - }, - arguments: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Expression", "SpreadElement"))) - } - } -}); - -(0, _index3.default)("Program", { - visitor: ["directives", "body"], - builder: ["body", "directives"], - fields: { - directives: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Directive"))), - default: [] - }, - body: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Statement"))) - } - }, - aliases: ["Scopable", "BlockParent", "Block", "FunctionParent"] -}); - -(0, _index3.default)("ObjectExpression", { - visitor: ["properties"], - aliases: ["Expression"], - fields: { - properties: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("ObjectMethod", "ObjectProperty", "SpreadProperty"))) - } - } -}); - -(0, _index3.default)("ObjectMethod", { - builder: ["kind", "key", "params", "body", "computed"], - fields: { - kind: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("string"), (0, _index2.assertOneOf)("method", "get", "set")), - default: "method" - }, - computed: { - validate: (0, _index2.assertValueType)("boolean"), - default: false - }, - key: { - validate: function validate(node, key, val) { - var expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral", "NumericLiteral"]; - _index2.assertNodeType.apply(undefined, expectedTypes)(node, key, val); - } - }, - decorators: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Decorator"))) - }, - body: { - validate: (0, _index2.assertNodeType)("BlockStatement") - }, - generator: { - default: false, - validate: (0, _index2.assertValueType)("boolean") - }, - async: { - default: false, - validate: (0, _index2.assertValueType)("boolean") - } - }, - visitor: ["key", "params", "body", "decorators", "returnType", "typeParameters"], - aliases: ["UserWhitespacable", "Function", "Scopable", "BlockParent", "FunctionParent", "Method", "ObjectMember"] -}); - -(0, _index3.default)("ObjectProperty", { - builder: ["key", "value", "computed", "shorthand", "decorators"], - fields: { - computed: { - validate: (0, _index2.assertValueType)("boolean"), - default: false - }, - key: { - validate: function validate(node, key, val) { - var expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral", "NumericLiteral"]; - _index2.assertNodeType.apply(undefined, expectedTypes)(node, key, val); - } - }, - value: { - validate: (0, _index2.assertNodeType)("Expression") - }, - shorthand: { - validate: (0, _index2.assertValueType)("boolean"), - default: false - }, - decorators: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Decorator"))), - optional: true - } - }, - visitor: ["key", "value", "decorators"], - aliases: ["UserWhitespacable", "Property", "ObjectMember"] -}); - -(0, _index3.default)("RestElement", { - visitor: ["argument", "typeAnnotation"], - aliases: ["LVal"], - fields: { - argument: { - validate: (0, _index2.assertNodeType)("LVal") - }, - decorators: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Decorator"))) - } - } -}); - -(0, _index3.default)("ReturnStatement", { - visitor: ["argument"], - aliases: ["Statement", "Terminatorless", "CompletionStatement"], - fields: { - argument: { - validate: (0, _index2.assertNodeType)("Expression"), - optional: true - } - } -}); - -(0, _index3.default)("SequenceExpression", { - visitor: ["expressions"], - fields: { - expressions: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Expression"))) - } - }, - aliases: ["Expression"] -}); - -(0, _index3.default)("SwitchCase", { - visitor: ["test", "consequent"], - fields: { - test: { - validate: (0, _index2.assertNodeType)("Expression"), - optional: true - }, - consequent: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("Statement"))) - } - } -}); - -(0, _index3.default)("SwitchStatement", { - visitor: ["discriminant", "cases"], - aliases: ["Statement", "BlockParent", "Scopable"], - fields: { - discriminant: { - validate: (0, _index2.assertNodeType)("Expression") - }, - cases: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("SwitchCase"))) - } - } -}); - -(0, _index3.default)("ThisExpression", { - aliases: ["Expression"] -}); - -(0, _index3.default)("ThrowStatement", { - visitor: ["argument"], - aliases: ["Statement", "Terminatorless", "CompletionStatement"], - fields: { - argument: { - validate: (0, _index2.assertNodeType)("Expression") - } - } -}); - -(0, _index3.default)("TryStatement", { - visitor: ["block", "handler", "finalizer"], - aliases: ["Statement"], - fields: { - body: { - validate: (0, _index2.assertNodeType)("BlockStatement") - }, - handler: { - optional: true, - handler: (0, _index2.assertNodeType)("BlockStatement") - }, - finalizer: { - optional: true, - validate: (0, _index2.assertNodeType)("BlockStatement") - } - } -}); - -(0, _index3.default)("UnaryExpression", { - builder: ["operator", "argument", "prefix"], - fields: { - prefix: { - default: true - }, - argument: { - validate: (0, _index2.assertNodeType)("Expression") - }, - operator: { - validate: _index2.assertOneOf.apply(undefined, _constants.UNARY_OPERATORS) - } - }, - visitor: ["argument"], - aliases: ["UnaryLike", "Expression"] -}); - -(0, _index3.default)("UpdateExpression", { - builder: ["operator", "argument", "prefix"], - fields: { - prefix: { - default: false - }, - argument: { - validate: (0, _index2.assertNodeType)("Expression") - }, - operator: { - validate: _index2.assertOneOf.apply(undefined, _constants.UPDATE_OPERATORS) - } - }, - visitor: ["argument"], - aliases: ["Expression"] -}); - -(0, _index3.default)("VariableDeclaration", { - builder: ["kind", "declarations"], - visitor: ["declarations"], - aliases: ["Statement", "Declaration"], - fields: { - kind: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("string"), (0, _index2.assertOneOf)("var", "let", "const")) - }, - declarations: { - validate: (0, _index2.chain)((0, _index2.assertValueType)("array"), (0, _index2.assertEach)((0, _index2.assertNodeType)("VariableDeclarator"))) - } - } -}); - -(0, _index3.default)("VariableDeclarator", { - visitor: ["id", "init"], - fields: { - id: { - validate: (0, _index2.assertNodeType)("LVal") - }, - init: { - optional: true, - validate: (0, _index2.assertNodeType)("Expression") - } - } -}); - -(0, _index3.default)("WhileStatement", { - visitor: ["test", "body"], - aliases: ["Statement", "BlockParent", "Loop", "While", "Scopable"], - fields: { - test: { - validate: (0, _index2.assertNodeType)("Expression") - }, - body: { - validate: (0, _index2.assertNodeType)("BlockStatement", "Statement") - } - } -}); - -(0, _index3.default)("WithStatement", { - visitor: ["object", "body"], - aliases: ["Statement"], - fields: { - object: { - object: (0, _index2.assertNodeType)("Expression") - }, - body: { - validate: (0, _index2.assertNodeType)("BlockStatement", "Statement") - } - } -}); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/es2015.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/es2015.js deleted file mode 100644 index cbce5536d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/es2015.js +++ /dev/null @@ -1,351 +0,0 @@ -"use strict"; - -var _index = require("./index"); - -var _index2 = _interopRequireDefault(_index); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _index2.default)("AssignmentPattern", { - visitor: ["left", "right"], - aliases: ["Pattern", "LVal"], - fields: { - left: { - validate: (0, _index.assertNodeType)("Identifier") - }, - right: { - validate: (0, _index.assertNodeType)("Expression") - }, - decorators: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("Decorator"))) - } - } -}); - -(0, _index2.default)("ArrayPattern", { - visitor: ["elements", "typeAnnotation"], - aliases: ["Pattern", "LVal"], - fields: { - elements: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("Expression"))) - }, - decorators: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("Decorator"))) - } - } -}); - -(0, _index2.default)("ArrowFunctionExpression", { - builder: ["params", "body", "async"], - visitor: ["params", "body", "returnType", "typeParameters"], - aliases: ["Scopable", "Function", "BlockParent", "FunctionParent", "Expression", "Pureish"], - fields: { - params: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("LVal"))) - }, - body: { - validate: (0, _index.assertNodeType)("BlockStatement", "Expression") - }, - async: { - validate: (0, _index.assertValueType)("boolean"), - default: false - } - } -}); - -(0, _index2.default)("ClassBody", { - visitor: ["body"], - fields: { - body: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("ClassMethod", "ClassProperty"))) - } - } -}); - -(0, _index2.default)("ClassDeclaration", { - builder: ["id", "superClass", "body", "decorators"], - visitor: ["id", "body", "superClass", "mixins", "typeParameters", "superTypeParameters", "implements", "decorators"], - aliases: ["Scopable", "Class", "Statement", "Declaration", "Pureish"], - fields: { - id: { - validate: (0, _index.assertNodeType)("Identifier") - }, - body: { - validate: (0, _index.assertNodeType)("ClassBody") - }, - superClass: { - optional: true, - validate: (0, _index.assertNodeType)("Expression") - }, - decorators: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("Decorator"))) - } - } -}); - -(0, _index2.default)("ClassExpression", { - inherits: "ClassDeclaration", - aliases: ["Scopable", "Class", "Expression", "Pureish"], - fields: { - id: { - optional: true, - validate: (0, _index.assertNodeType)("Identifier") - }, - body: { - validate: (0, _index.assertNodeType)("ClassBody") - }, - superClass: { - optional: true, - validate: (0, _index.assertNodeType)("Expression") - }, - decorators: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("Decorator"))) - } - } -}); - -(0, _index2.default)("ExportAllDeclaration", { - visitor: ["source"], - aliases: ["Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration"], - fields: { - source: { - validate: (0, _index.assertNodeType)("StringLiteral") - } - } -}); - -(0, _index2.default)("ExportDefaultDeclaration", { - visitor: ["declaration"], - aliases: ["Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration"], - fields: { - declaration: { - validate: (0, _index.assertNodeType)("FunctionDeclaration", "ClassDeclaration", "Expression") - } - } -}); - -(0, _index2.default)("ExportNamedDeclaration", { - visitor: ["declaration", "specifiers", "source"], - aliases: ["Statement", "Declaration", "ModuleDeclaration", "ExportDeclaration"], - fields: { - declaration: { - validate: (0, _index.assertNodeType)("Declaration"), - optional: true - }, - specifiers: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("ExportSpecifier"))) - }, - source: { - validate: (0, _index.assertNodeType)("StringLiteral"), - optional: true - } - } -}); - -(0, _index2.default)("ExportSpecifier", { - visitor: ["local", "exported"], - aliases: ["ModuleSpecifier"], - fields: { - local: { - validate: (0, _index.assertNodeType)("Identifier") - }, - exported: { - validate: (0, _index.assertNodeType)("Identifier") - } - } -}); - -(0, _index2.default)("ForOfStatement", { - visitor: ["left", "right", "body"], - aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop", "ForXStatement"], - fields: { - left: { - validate: (0, _index.assertNodeType)("VariableDeclaration", "LVal") - }, - right: { - validate: (0, _index.assertNodeType)("Expression") - }, - body: { - validate: (0, _index.assertNodeType)("Statement") - } - } -}); - -(0, _index2.default)("ImportDeclaration", { - visitor: ["specifiers", "source"], - aliases: ["Statement", "Declaration", "ModuleDeclaration"], - fields: { - specifiers: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("ImportSpecifier", "ImportDefaultSpecifier", "ImportNamespaceSpecifier"))) - }, - source: { - validate: (0, _index.assertNodeType)("StringLiteral") - } - } -}); - -(0, _index2.default)("ImportDefaultSpecifier", { - visitor: ["local"], - aliases: ["ModuleSpecifier"], - fields: { - local: { - validate: (0, _index.assertNodeType)("Identifier") - } - } -}); - -(0, _index2.default)("ImportNamespaceSpecifier", { - visitor: ["local"], - aliases: ["ModuleSpecifier"], - fields: { - local: { - validate: (0, _index.assertNodeType)("Identifier") - } - } -}); - -(0, _index2.default)("ImportSpecifier", { - visitor: ["local", "imported"], - aliases: ["ModuleSpecifier"], - fields: { - local: { - validate: (0, _index.assertNodeType)("Identifier") - }, - imported: { - validate: (0, _index.assertNodeType)("Identifier") - } - } -}); - -(0, _index2.default)("MetaProperty", { - visitor: ["meta", "property"], - aliases: ["Expression"], - fields: { - meta: { - validate: (0, _index.assertValueType)("string") - }, - property: { - validate: (0, _index.assertValueType)("string") - } - } -}); - -(0, _index2.default)("ClassMethod", { - aliases: ["Function", "Scopable", "BlockParent", "FunctionParent", "Method"], - builder: ["kind", "key", "params", "body", "computed", "static"], - visitor: ["key", "params", "body", "decorators", "returnType", "typeParameters"], - fields: { - kind: { - validate: (0, _index.chain)((0, _index.assertValueType)("string"), (0, _index.assertOneOf)("get", "set", "method", "constructor")), - default: "method" - }, - computed: { - default: false, - validate: (0, _index.assertValueType)("boolean") - }, - static: { - default: false, - validate: (0, _index.assertValueType)("boolean") - }, - key: { - validate: function validate(node, key, val) { - var expectedTypes = node.computed ? ["Expression"] : ["Identifier", "StringLiteral", "NumericLiteral"]; - _index.assertNodeType.apply(undefined, expectedTypes)(node, key, val); - } - }, - params: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("LVal"))) - }, - body: { - validate: (0, _index.assertNodeType)("BlockStatement") - }, - generator: { - default: false, - validate: (0, _index.assertValueType)("boolean") - }, - async: { - default: false, - validate: (0, _index.assertValueType)("boolean") - } - } -}); - -(0, _index2.default)("ObjectPattern", { - visitor: ["properties", "typeAnnotation"], - aliases: ["Pattern", "LVal"], - fields: { - properties: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("RestProperty", "Property"))) - }, - decorators: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("Decorator"))) - } - } -}); - -(0, _index2.default)("SpreadElement", { - visitor: ["argument"], - aliases: ["UnaryLike"], - fields: { - argument: { - validate: (0, _index.assertNodeType)("Expression") - } - } -}); - -(0, _index2.default)("Super", { - aliases: ["Expression"] -}); - -(0, _index2.default)("TaggedTemplateExpression", { - visitor: ["tag", "quasi"], - aliases: ["Expression"], - fields: { - tag: { - validate: (0, _index.assertNodeType)("Expression") - }, - quasi: { - validate: (0, _index.assertNodeType)("TemplateLiteral") - } - } -}); - -(0, _index2.default)("TemplateElement", { - builder: ["value", "tail"], - fields: { - value: {}, - tail: { - validate: (0, _index.assertValueType)("boolean"), - default: false - } - } -}); - -(0, _index2.default)("TemplateLiteral", { - visitor: ["quasis", "expressions"], - aliases: ["Expression", "Literal"], - fields: { - quasis: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("TemplateElement"))) - }, - expressions: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("Expression"))) - } - } -}); - -(0, _index2.default)("YieldExpression", { - builder: ["argument", "delegate"], - visitor: ["argument"], - aliases: ["Expression", "Terminatorless"], - fields: { - delegate: { - validate: (0, _index.assertValueType)("boolean"), - default: false - }, - argument: { - optional: true, - validate: (0, _index.assertNodeType)("Expression") - } - } -}); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/experimental.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/experimental.js deleted file mode 100644 index 184bf3597..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/experimental.js +++ /dev/null @@ -1,99 +0,0 @@ -"use strict"; - -var _index = require("./index"); - -var _index2 = _interopRequireDefault(_index); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _index2.default)("AwaitExpression", { - builder: ["argument"], - visitor: ["argument"], - aliases: ["Expression", "Terminatorless"], - fields: { - argument: { - validate: (0, _index.assertNodeType)("Expression") - } - } -}); - -(0, _index2.default)("ForAwaitStatement", { - visitor: ["left", "right", "body"], - aliases: ["Scopable", "Statement", "For", "BlockParent", "Loop", "ForXStatement"], - fields: { - left: { - validate: (0, _index.assertNodeType)("VariableDeclaration", "LVal") - }, - right: { - validate: (0, _index.assertNodeType)("Expression") - }, - body: { - validate: (0, _index.assertNodeType)("Statement") - } - } -}); - -(0, _index2.default)("BindExpression", { - visitor: ["object", "callee"], - aliases: ["Expression"], - fields: {} -}); - -(0, _index2.default)("Decorator", { - visitor: ["expression"], - fields: { - expression: { - validate: (0, _index.assertNodeType)("Expression") - } - } -}); - -(0, _index2.default)("DoExpression", { - visitor: ["body"], - aliases: ["Expression"], - fields: { - body: { - validate: (0, _index.assertNodeType)("BlockStatement") - } - } -}); - -(0, _index2.default)("ExportDefaultSpecifier", { - visitor: ["exported"], - aliases: ["ModuleSpecifier"], - fields: { - exported: { - validate: (0, _index.assertNodeType)("Identifier") - } - } -}); - -(0, _index2.default)("ExportNamespaceSpecifier", { - visitor: ["exported"], - aliases: ["ModuleSpecifier"], - fields: { - exported: { - validate: (0, _index.assertNodeType)("Identifier") - } - } -}); - -(0, _index2.default)("RestProperty", { - visitor: ["argument"], - aliases: ["UnaryLike"], - fields: { - argument: { - validate: (0, _index.assertNodeType)("LVal") - } - } -}); - -(0, _index2.default)("SpreadProperty", { - visitor: ["argument"], - aliases: ["UnaryLike"], - fields: { - argument: { - validate: (0, _index.assertNodeType)("Expression") - } - } -}); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/flow.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/flow.js deleted file mode 100644 index dca21ec1f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/flow.js +++ /dev/null @@ -1,261 +0,0 @@ -"use strict"; - -var _index = require("./index"); - -var _index2 = _interopRequireDefault(_index); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _index2.default)("AnyTypeAnnotation", { - aliases: ["Flow", "FlowBaseAnnotation"], - fields: {} -}); - -(0, _index2.default)("ArrayTypeAnnotation", { - visitor: ["elementType"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("BooleanTypeAnnotation", { - aliases: ["Flow", "FlowBaseAnnotation"], - fields: {} -}); - -(0, _index2.default)("BooleanLiteralTypeAnnotation", { - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("NullLiteralTypeAnnotation", { - aliases: ["Flow", "FlowBaseAnnotation"], - fields: {} -}); - -(0, _index2.default)("ClassImplements", { - visitor: ["id", "typeParameters"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("ClassProperty", { - visitor: ["key", "value", "typeAnnotation", "decorators"], - builder: ["key", "value", "typeAnnotation", "decorators", "computed"], - aliases: ["Property"], - fields: { - computed: { - validate: (0, _index.assertValueType)("boolean"), - default: false - } - } -}); - -(0, _index2.default)("DeclareClass", { - visitor: ["id", "typeParameters", "extends", "body"], - aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], - fields: {} -}); - -(0, _index2.default)("DeclareFunction", { - visitor: ["id"], - aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], - fields: {} -}); - -(0, _index2.default)("DeclareInterface", { - visitor: ["id", "typeParameters", "extends", "body"], - aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], - fields: {} -}); - -(0, _index2.default)("DeclareModule", { - visitor: ["id", "body"], - aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], - fields: {} -}); - -(0, _index2.default)("DeclareModuleExports", { - visitor: ["typeAnnotation"], - aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], - fields: {} -}); - -(0, _index2.default)("DeclareTypeAlias", { - visitor: ["id", "typeParameters", "right"], - aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], - fields: {} -}); - -(0, _index2.default)("DeclareVariable", { - visitor: ["id"], - aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], - fields: {} -}); - -(0, _index2.default)("ExistentialTypeParam", { - aliases: ["Flow"] -}); - -(0, _index2.default)("FunctionTypeAnnotation", { - visitor: ["typeParameters", "params", "rest", "returnType"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("FunctionTypeParam", { - visitor: ["name", "typeAnnotation"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("GenericTypeAnnotation", { - visitor: ["id", "typeParameters"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("InterfaceExtends", { - visitor: ["id", "typeParameters"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("InterfaceDeclaration", { - visitor: ["id", "typeParameters", "extends", "body"], - aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], - fields: {} -}); - -(0, _index2.default)("IntersectionTypeAnnotation", { - visitor: ["types"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("MixedTypeAnnotation", { - aliases: ["Flow", "FlowBaseAnnotation"] -}); - -(0, _index2.default)("EmptyTypeAnnotation", { - aliases: ["Flow", "FlowBaseAnnotation"] -}); - -(0, _index2.default)("NullableTypeAnnotation", { - visitor: ["typeAnnotation"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("NumericLiteralTypeAnnotation", { - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("NumberTypeAnnotation", { - aliases: ["Flow", "FlowBaseAnnotation"], - fields: {} -}); - -(0, _index2.default)("StringLiteralTypeAnnotation", { - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("StringTypeAnnotation", { - aliases: ["Flow", "FlowBaseAnnotation"], - fields: {} -}); - -(0, _index2.default)("ThisTypeAnnotation", { - aliases: ["Flow", "FlowBaseAnnotation"], - fields: {} -}); - -(0, _index2.default)("TupleTypeAnnotation", { - visitor: ["types"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("TypeofTypeAnnotation", { - visitor: ["argument"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("TypeAlias", { - visitor: ["id", "typeParameters", "right"], - aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], - fields: {} -}); - -(0, _index2.default)("TypeAnnotation", { - visitor: ["typeAnnotation"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("TypeCastExpression", { - visitor: ["expression", "typeAnnotation"], - aliases: ["Flow", "ExpressionWrapper", "Expression"], - fields: {} -}); - -(0, _index2.default)("TypeParameter", { - visitor: ["bound"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("TypeParameterDeclaration", { - visitor: ["params"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("TypeParameterInstantiation", { - visitor: ["params"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("ObjectTypeAnnotation", { - visitor: ["properties", "indexers", "callProperties"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("ObjectTypeCallProperty", { - visitor: ["value"], - aliases: ["Flow", "UserWhitespacable"], - fields: {} -}); - -(0, _index2.default)("ObjectTypeIndexer", { - visitor: ["id", "key", "value"], - aliases: ["Flow", "UserWhitespacable"], - fields: {} -}); - -(0, _index2.default)("ObjectTypeProperty", { - visitor: ["key", "value"], - aliases: ["Flow", "UserWhitespacable"], - fields: {} -}); - -(0, _index2.default)("QualifiedTypeIdentifier", { - visitor: ["id", "qualification"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("UnionTypeAnnotation", { - visitor: ["types"], - aliases: ["Flow"], - fields: {} -}); - -(0, _index2.default)("VoidTypeAnnotation", { - aliases: ["Flow", "FlowBaseAnnotation"], - fields: {} -}); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/index.js deleted file mode 100644 index d5121144e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/index.js +++ /dev/null @@ -1,249 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.DEPRECATED_KEYS = exports.BUILDER_KEYS = exports.NODE_FIELDS = exports.ALIAS_KEYS = exports.VISITOR_KEYS = undefined; - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _typeof2 = require("babel-runtime/helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -exports.assertEach = assertEach; -exports.assertOneOf = assertOneOf; -exports.assertNodeType = assertNodeType; -exports.assertNodeOrValueType = assertNodeOrValueType; -exports.assertValueType = assertValueType; -exports.chain = chain; -exports.default = defineType; - -var _index = require("../index"); - -var t = _interopRequireWildcard(_index); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var VISITOR_KEYS = exports.VISITOR_KEYS = {}; -var ALIAS_KEYS = exports.ALIAS_KEYS = {}; -var NODE_FIELDS = exports.NODE_FIELDS = {}; -var BUILDER_KEYS = exports.BUILDER_KEYS = {}; -var DEPRECATED_KEYS = exports.DEPRECATED_KEYS = {}; - -function getType(val) { - if (Array.isArray(val)) { - return "array"; - } else if (val === null) { - return "null"; - } else if (val === undefined) { - return "undefined"; - } else { - return typeof val === "undefined" ? "undefined" : (0, _typeof3.default)(val); - } -} - -function assertEach(callback) { - function validator(node, key, val) { - if (!Array.isArray(val)) return; - - for (var i = 0; i < val.length; i++) { - callback(node, key + "[" + i + "]", val[i]); - } - } - validator.each = callback; - return validator; -} - -function assertOneOf() { - for (var _len = arguments.length, vals = Array(_len), _key = 0; _key < _len; _key++) { - vals[_key] = arguments[_key]; - } - - function validate(node, key, val) { - if (vals.indexOf(val) < 0) { - throw new TypeError("Property " + key + " expected value to be one of " + (0, _stringify2.default)(vals) + " but got " + (0, _stringify2.default)(val)); - } - } - - validate.oneOf = vals; - - return validate; -} - -function assertNodeType() { - for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - types[_key2] = arguments[_key2]; - } - - function validate(node, key, val) { - var valid = false; - - for (var _iterator = types, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var type = _ref; - - if (t.is(type, val)) { - valid = true; - break; - } - } - - if (!valid) { - throw new TypeError("Property " + key + " of " + node.type + " expected node to be of a type " + (0, _stringify2.default)(types) + " " + ("but instead got " + (0, _stringify2.default)(val && val.type))); - } - } - - validate.oneOfNodeTypes = types; - - return validate; -} - -function assertNodeOrValueType() { - for (var _len3 = arguments.length, types = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - types[_key3] = arguments[_key3]; - } - - function validate(node, key, val) { - var valid = false; - - for (var _iterator2 = types, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var type = _ref2; - - if (getType(val) === type || t.is(type, val)) { - valid = true; - break; - } - } - - if (!valid) { - throw new TypeError("Property " + key + " of " + node.type + " expected node to be of a type " + (0, _stringify2.default)(types) + " " + ("but instead got " + (0, _stringify2.default)(val && val.type))); - } - } - - validate.oneOfNodeOrValueTypes = types; - - return validate; -} - -function assertValueType(type) { - function validate(node, key, val) { - var valid = getType(val) === type; - - if (!valid) { - throw new TypeError("Property " + key + " expected type of " + type + " but got " + getType(val)); - } - } - - validate.type = type; - - return validate; -} - -function chain() { - for (var _len4 = arguments.length, fns = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { - fns[_key4] = arguments[_key4]; - } - - function validate() { - for (var _iterator3 = fns, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - var fn = _ref3; - - fn.apply(undefined, arguments); - } - } - validate.chainOf = fns; - return validate; -} - -function defineType(type) { - var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - var inherits = opts.inherits && store[opts.inherits] || {}; - - opts.fields = opts.fields || inherits.fields || {}; - opts.visitor = opts.visitor || inherits.visitor || []; - opts.aliases = opts.aliases || inherits.aliases || []; - opts.builder = opts.builder || inherits.builder || opts.visitor || []; - - if (opts.deprecatedAlias) { - DEPRECATED_KEYS[opts.deprecatedAlias] = type; - } - - for (var _iterator4 = opts.visitor.concat(opts.builder), _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { - var _ref4; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref4 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref4 = _i4.value; - } - - var _key5 = _ref4; - - opts.fields[_key5] = opts.fields[_key5] || {}; - } - - for (var key in opts.fields) { - var field = opts.fields[key]; - - if (opts.builder.indexOf(key) === -1) { - field.optional = true; - } - if (field.default === undefined) { - field.default = null; - } else if (!field.validate) { - field.validate = assertValueType(getType(field.default)); - } - } - - VISITOR_KEYS[type] = opts.visitor; - BUILDER_KEYS[type] = opts.builder; - NODE_FIELDS[type] = opts.fields; - ALIAS_KEYS[type] = opts.aliases; - - store[type] = opts; -} - -var store = {}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/init.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/init.js deleted file mode 100644 index a3334fedb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/init.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -require("./index"); - -require("./core"); - -require("./es2015"); - -require("./flow"); - -require("./jsx"); - -require("./misc"); - -require("./experimental"); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/jsx.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/jsx.js deleted file mode 100644 index 920332a4b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/jsx.js +++ /dev/null @@ -1,137 +0,0 @@ -"use strict"; - -var _index = require("./index"); - -var _index2 = _interopRequireDefault(_index); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _index2.default)("JSXAttribute", { - visitor: ["name", "value"], - aliases: ["JSX", "Immutable"], - fields: { - name: { - validate: (0, _index.assertNodeType)("JSXIdentifier", "JSXNamespacedName") - }, - value: { - optional: true, - validate: (0, _index.assertNodeType)("JSXElement", "StringLiteral", "JSXExpressionContainer") - } - } -}); - -(0, _index2.default)("JSXClosingElement", { - visitor: ["name"], - aliases: ["JSX", "Immutable"], - fields: { - name: { - validate: (0, _index.assertNodeType)("JSXIdentifier", "JSXMemberExpression") - } - } -}); - -(0, _index2.default)("JSXElement", { - builder: ["openingElement", "closingElement", "children", "selfClosing"], - visitor: ["openingElement", "children", "closingElement"], - aliases: ["JSX", "Immutable", "Expression"], - fields: { - openingElement: { - validate: (0, _index.assertNodeType)("JSXOpeningElement") - }, - closingElement: { - optional: true, - validate: (0, _index.assertNodeType)("JSXClosingElement") - }, - children: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("JSXText", "JSXExpressionContainer", "JSXElement"))) - } - } -}); - -(0, _index2.default)("JSXEmptyExpression", { - aliases: ["JSX", "Expression"] -}); - -(0, _index2.default)("JSXExpressionContainer", { - visitor: ["expression"], - aliases: ["JSX", "Immutable"], - fields: { - expression: { - validate: (0, _index.assertNodeType)("Expression") - } - } -}); - -(0, _index2.default)("JSXIdentifier", { - builder: ["name"], - aliases: ["JSX", "Expression"], - fields: { - name: { - validate: (0, _index.assertValueType)("string") - } - } -}); - -(0, _index2.default)("JSXMemberExpression", { - visitor: ["object", "property"], - aliases: ["JSX", "Expression"], - fields: { - object: { - validate: (0, _index.assertNodeType)("JSXMemberExpression", "JSXIdentifier") - }, - property: { - validate: (0, _index.assertNodeType)("JSXIdentifier") - } - } -}); - -(0, _index2.default)("JSXNamespacedName", { - visitor: ["namespace", "name"], - aliases: ["JSX"], - fields: { - namespace: { - validate: (0, _index.assertNodeType)("JSXIdentifier") - }, - name: { - validate: (0, _index.assertNodeType)("JSXIdentifier") - } - } -}); - -(0, _index2.default)("JSXOpeningElement", { - builder: ["name", "attributes", "selfClosing"], - visitor: ["name", "attributes"], - aliases: ["JSX", "Immutable"], - fields: { - name: { - validate: (0, _index.assertNodeType)("JSXIdentifier", "JSXMemberExpression") - }, - selfClosing: { - default: false, - validate: (0, _index.assertValueType)("boolean") - }, - attributes: { - validate: (0, _index.chain)((0, _index.assertValueType)("array"), (0, _index.assertEach)((0, _index.assertNodeType)("JSXAttribute", "JSXSpreadAttribute"))) - } - } -}); - -(0, _index2.default)("JSXSpreadAttribute", { - visitor: ["argument"], - aliases: ["JSX"], - fields: { - argument: { - validate: (0, _index.assertNodeType)("Expression") - } - } -}); - -(0, _index2.default)("JSXText", { - aliases: ["JSX", "Immutable"], - builder: ["value"], - fields: { - value: { - validate: (0, _index.assertValueType)("string") - } - } -}); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/misc.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/misc.js deleted file mode 100644 index f982b9a81..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/definitions/misc.js +++ /dev/null @@ -1,21 +0,0 @@ -"use strict"; - -var _index = require("./index"); - -var _index2 = _interopRequireDefault(_index); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -(0, _index2.default)("Noop", { - visitor: [] -}); - -(0, _index2.default)("ParenthesizedExpression", { - visitor: ["expression"], - aliases: ["Expression", "ExpressionWrapper"], - fields: { - expression: { - validate: (0, _index.assertNodeType)("Expression") - } - } -}); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/flow.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/flow.js deleted file mode 100644 index 28579157d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/flow.js +++ /dev/null @@ -1,108 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.createUnionTypeAnnotation = createUnionTypeAnnotation; -exports.removeTypeDuplicates = removeTypeDuplicates; -exports.createTypeAnnotationBasedOnTypeof = createTypeAnnotationBasedOnTypeof; - -var _index = require("./index"); - -var t = _interopRequireWildcard(_index); - -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; } } - -function createUnionTypeAnnotation(types) { - var flattened = removeTypeDuplicates(types); - - if (flattened.length === 1) { - return flattened[0]; - } else { - return t.unionTypeAnnotation(flattened); - } -} - -function removeTypeDuplicates(nodes) { - var generics = {}; - var bases = {}; - - var typeGroups = []; - - var types = []; - - for (var i = 0; i < nodes.length; i++) { - var node = nodes[i]; - if (!node) continue; - - if (types.indexOf(node) >= 0) { - continue; - } - - if (t.isAnyTypeAnnotation(node)) { - return [node]; - } - - if (t.isFlowBaseAnnotation(node)) { - bases[node.type] = node; - continue; - } - - if (t.isUnionTypeAnnotation(node)) { - if (typeGroups.indexOf(node.types) < 0) { - nodes = nodes.concat(node.types); - typeGroups.push(node.types); - } - continue; - } - - if (t.isGenericTypeAnnotation(node)) { - var name = node.id.name; - - if (generics[name]) { - var existing = generics[name]; - if (existing.typeParameters) { - if (node.typeParameters) { - existing.typeParameters.params = removeTypeDuplicates(existing.typeParameters.params.concat(node.typeParameters.params)); - } - } else { - existing = node.typeParameters; - } - } else { - generics[name] = node; - } - - continue; - } - - types.push(node); - } - - for (var type in bases) { - types.push(bases[type]); - } - - for (var _name in generics) { - types.push(generics[_name]); - } - - return types; -} - -function createTypeAnnotationBasedOnTypeof(type) { - if (type === "string") { - return t.stringTypeAnnotation(); - } else if (type === "number") { - return t.numberTypeAnnotation(); - } else if (type === "undefined") { - return t.voidTypeAnnotation(); - } else if (type === "boolean") { - return t.booleanTypeAnnotation(); - } else if (type === "function") { - return t.genericTypeAnnotation(t.identifier("Function")); - } else if (type === "object") { - return t.genericTypeAnnotation(t.identifier("Object")); - } else if (type === "symbol") { - return t.genericTypeAnnotation(t.identifier("Symbol")); - } else { - throw new Error("Invalid typeof value"); - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/index.js deleted file mode 100644 index 6f0cb2abd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/index.js +++ /dev/null @@ -1,839 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.createTypeAnnotationBasedOnTypeof = exports.removeTypeDuplicates = exports.createUnionTypeAnnotation = exports.valueToNode = exports.toBlock = exports.toExpression = exports.toStatement = exports.toBindingIdentifierName = exports.toIdentifier = exports.toKeyAlias = exports.toSequenceExpression = exports.toComputedKey = exports.isNodesEquivalent = exports.isImmutable = exports.isScope = exports.isSpecifierDefault = exports.isVar = exports.isBlockScoped = exports.isLet = exports.isValidIdentifier = exports.isReferenced = exports.isBinding = exports.getOuterBindingIdentifiers = exports.getBindingIdentifiers = exports.TYPES = exports.react = exports.DEPRECATED_KEYS = exports.BUILDER_KEYS = exports.NODE_FIELDS = exports.ALIAS_KEYS = exports.VISITOR_KEYS = exports.NOT_LOCAL_BINDING = exports.BLOCK_SCOPED_SYMBOL = exports.INHERIT_KEYS = exports.UNARY_OPERATORS = exports.STRING_UNARY_OPERATORS = exports.NUMBER_UNARY_OPERATORS = exports.BOOLEAN_UNARY_OPERATORS = exports.BINARY_OPERATORS = exports.NUMBER_BINARY_OPERATORS = exports.BOOLEAN_BINARY_OPERATORS = exports.COMPARISON_BINARY_OPERATORS = exports.EQUALITY_BINARY_OPERATORS = exports.BOOLEAN_NUMBER_BINARY_OPERATORS = exports.UPDATE_OPERATORS = exports.LOGICAL_OPERATORS = exports.COMMENT_KEYS = exports.FOR_INIT_KEYS = exports.FLATTENABLE_KEYS = exports.STATEMENT_OR_BLOCK_KEYS = undefined; - -var _getOwnPropertySymbols = require("babel-runtime/core-js/object/get-own-property-symbols"); - -var _getOwnPropertySymbols2 = _interopRequireDefault(_getOwnPropertySymbols); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -var _keys = require("babel-runtime/core-js/object/keys"); - -var _keys2 = _interopRequireDefault(_keys); - -var _stringify = require("babel-runtime/core-js/json/stringify"); - -var _stringify2 = _interopRequireDefault(_stringify); - -var _constants = require("./constants"); - -Object.defineProperty(exports, "STATEMENT_OR_BLOCK_KEYS", { - enumerable: true, - get: function get() { - return _constants.STATEMENT_OR_BLOCK_KEYS; - } -}); -Object.defineProperty(exports, "FLATTENABLE_KEYS", { - enumerable: true, - get: function get() { - return _constants.FLATTENABLE_KEYS; - } -}); -Object.defineProperty(exports, "FOR_INIT_KEYS", { - enumerable: true, - get: function get() { - return _constants.FOR_INIT_KEYS; - } -}); -Object.defineProperty(exports, "COMMENT_KEYS", { - enumerable: true, - get: function get() { - return _constants.COMMENT_KEYS; - } -}); -Object.defineProperty(exports, "LOGICAL_OPERATORS", { - enumerable: true, - get: function get() { - return _constants.LOGICAL_OPERATORS; - } -}); -Object.defineProperty(exports, "UPDATE_OPERATORS", { - enumerable: true, - get: function get() { - return _constants.UPDATE_OPERATORS; - } -}); -Object.defineProperty(exports, "BOOLEAN_NUMBER_BINARY_OPERATORS", { - enumerable: true, - get: function get() { - return _constants.BOOLEAN_NUMBER_BINARY_OPERATORS; - } -}); -Object.defineProperty(exports, "EQUALITY_BINARY_OPERATORS", { - enumerable: true, - get: function get() { - return _constants.EQUALITY_BINARY_OPERATORS; - } -}); -Object.defineProperty(exports, "COMPARISON_BINARY_OPERATORS", { - enumerable: true, - get: function get() { - return _constants.COMPARISON_BINARY_OPERATORS; - } -}); -Object.defineProperty(exports, "BOOLEAN_BINARY_OPERATORS", { - enumerable: true, - get: function get() { - return _constants.BOOLEAN_BINARY_OPERATORS; - } -}); -Object.defineProperty(exports, "NUMBER_BINARY_OPERATORS", { - enumerable: true, - get: function get() { - return _constants.NUMBER_BINARY_OPERATORS; - } -}); -Object.defineProperty(exports, "BINARY_OPERATORS", { - enumerable: true, - get: function get() { - return _constants.BINARY_OPERATORS; - } -}); -Object.defineProperty(exports, "BOOLEAN_UNARY_OPERATORS", { - enumerable: true, - get: function get() { - return _constants.BOOLEAN_UNARY_OPERATORS; - } -}); -Object.defineProperty(exports, "NUMBER_UNARY_OPERATORS", { - enumerable: true, - get: function get() { - return _constants.NUMBER_UNARY_OPERATORS; - } -}); -Object.defineProperty(exports, "STRING_UNARY_OPERATORS", { - enumerable: true, - get: function get() { - return _constants.STRING_UNARY_OPERATORS; - } -}); -Object.defineProperty(exports, "UNARY_OPERATORS", { - enumerable: true, - get: function get() { - return _constants.UNARY_OPERATORS; - } -}); -Object.defineProperty(exports, "INHERIT_KEYS", { - enumerable: true, - get: function get() { - return _constants.INHERIT_KEYS; - } -}); -Object.defineProperty(exports, "BLOCK_SCOPED_SYMBOL", { - enumerable: true, - get: function get() { - return _constants.BLOCK_SCOPED_SYMBOL; - } -}); -Object.defineProperty(exports, "NOT_LOCAL_BINDING", { - enumerable: true, - get: function get() { - return _constants.NOT_LOCAL_BINDING; - } -}); -exports.is = is; -exports.isType = isType; -exports.validate = validate; -exports.shallowEqual = shallowEqual; -exports.appendToMemberExpression = appendToMemberExpression; -exports.prependToMemberExpression = prependToMemberExpression; -exports.ensureBlock = ensureBlock; -exports.clone = clone; -exports.cloneWithoutLoc = cloneWithoutLoc; -exports.cloneDeep = cloneDeep; -exports.buildMatchMemberExpression = buildMatchMemberExpression; -exports.removeComments = removeComments; -exports.inheritsComments = inheritsComments; -exports.inheritTrailingComments = inheritTrailingComments; -exports.inheritLeadingComments = inheritLeadingComments; -exports.inheritInnerComments = inheritInnerComments; -exports.inherits = inherits; -exports.assertNode = assertNode; -exports.isNode = isNode; -exports.traverseFast = traverseFast; -exports.removeProperties = removeProperties; -exports.removePropertiesDeep = removePropertiesDeep; - -var _retrievers = require("./retrievers"); - -Object.defineProperty(exports, "getBindingIdentifiers", { - enumerable: true, - get: function get() { - return _retrievers.getBindingIdentifiers; - } -}); -Object.defineProperty(exports, "getOuterBindingIdentifiers", { - enumerable: true, - get: function get() { - return _retrievers.getOuterBindingIdentifiers; - } -}); - -var _validators = require("./validators"); - -Object.defineProperty(exports, "isBinding", { - enumerable: true, - get: function get() { - return _validators.isBinding; - } -}); -Object.defineProperty(exports, "isReferenced", { - enumerable: true, - get: function get() { - return _validators.isReferenced; - } -}); -Object.defineProperty(exports, "isValidIdentifier", { - enumerable: true, - get: function get() { - return _validators.isValidIdentifier; - } -}); -Object.defineProperty(exports, "isLet", { - enumerable: true, - get: function get() { - return _validators.isLet; - } -}); -Object.defineProperty(exports, "isBlockScoped", { - enumerable: true, - get: function get() { - return _validators.isBlockScoped; - } -}); -Object.defineProperty(exports, "isVar", { - enumerable: true, - get: function get() { - return _validators.isVar; - } -}); -Object.defineProperty(exports, "isSpecifierDefault", { - enumerable: true, - get: function get() { - return _validators.isSpecifierDefault; - } -}); -Object.defineProperty(exports, "isScope", { - enumerable: true, - get: function get() { - return _validators.isScope; - } -}); -Object.defineProperty(exports, "isImmutable", { - enumerable: true, - get: function get() { - return _validators.isImmutable; - } -}); -Object.defineProperty(exports, "isNodesEquivalent", { - enumerable: true, - get: function get() { - return _validators.isNodesEquivalent; - } -}); - -var _converters = require("./converters"); - -Object.defineProperty(exports, "toComputedKey", { - enumerable: true, - get: function get() { - return _converters.toComputedKey; - } -}); -Object.defineProperty(exports, "toSequenceExpression", { - enumerable: true, - get: function get() { - return _converters.toSequenceExpression; - } -}); -Object.defineProperty(exports, "toKeyAlias", { - enumerable: true, - get: function get() { - return _converters.toKeyAlias; - } -}); -Object.defineProperty(exports, "toIdentifier", { - enumerable: true, - get: function get() { - return _converters.toIdentifier; - } -}); -Object.defineProperty(exports, "toBindingIdentifierName", { - enumerable: true, - get: function get() { - return _converters.toBindingIdentifierName; - } -}); -Object.defineProperty(exports, "toStatement", { - enumerable: true, - get: function get() { - return _converters.toStatement; - } -}); -Object.defineProperty(exports, "toExpression", { - enumerable: true, - get: function get() { - return _converters.toExpression; - } -}); -Object.defineProperty(exports, "toBlock", { - enumerable: true, - get: function get() { - return _converters.toBlock; - } -}); -Object.defineProperty(exports, "valueToNode", { - enumerable: true, - get: function get() { - return _converters.valueToNode; - } -}); - -var _flow = require("./flow"); - -Object.defineProperty(exports, "createUnionTypeAnnotation", { - enumerable: true, - get: function get() { - return _flow.createUnionTypeAnnotation; - } -}); -Object.defineProperty(exports, "removeTypeDuplicates", { - enumerable: true, - get: function get() { - return _flow.removeTypeDuplicates; - } -}); -Object.defineProperty(exports, "createTypeAnnotationBasedOnTypeof", { - enumerable: true, - get: function get() { - return _flow.createTypeAnnotationBasedOnTypeof; - } -}); - -var _toFastProperties = require("to-fast-properties"); - -var _toFastProperties2 = _interopRequireDefault(_toFastProperties); - -var _compact = require("lodash/compact"); - -var _compact2 = _interopRequireDefault(_compact); - -var _clone = require("lodash/clone"); - -var _clone2 = _interopRequireDefault(_clone); - -var _each = require("lodash/each"); - -var _each2 = _interopRequireDefault(_each); - -var _uniq = require("lodash/uniq"); - -var _uniq2 = _interopRequireDefault(_uniq); - -require("./definitions/init"); - -var _definitions = require("./definitions"); - -var _react2 = require("./react"); - -var _react = _interopRequireWildcard(_react2); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var t = exports; - -function registerType(type) { - var is = t["is" + type]; - if (!is) { - is = t["is" + type] = function (node, opts) { - return t.is(type, node, opts); - }; - } - - t["assert" + type] = function (node, opts) { - opts = opts || {}; - if (!is(node, opts)) { - throw new Error("Expected type " + (0, _stringify2.default)(type) + " with option " + (0, _stringify2.default)(opts)); - } - }; -} - -exports.VISITOR_KEYS = _definitions.VISITOR_KEYS; -exports.ALIAS_KEYS = _definitions.ALIAS_KEYS; -exports.NODE_FIELDS = _definitions.NODE_FIELDS; -exports.BUILDER_KEYS = _definitions.BUILDER_KEYS; -exports.DEPRECATED_KEYS = _definitions.DEPRECATED_KEYS; -exports.react = _react; - - -for (var type in t.VISITOR_KEYS) { - registerType(type); -} - -t.FLIPPED_ALIAS_KEYS = {}; - -(0, _each2.default)(t.ALIAS_KEYS, function (aliases, type) { - (0, _each2.default)(aliases, function (alias) { - var types = t.FLIPPED_ALIAS_KEYS[alias] = t.FLIPPED_ALIAS_KEYS[alias] || []; - types.push(type); - }); -}); - -(0, _each2.default)(t.FLIPPED_ALIAS_KEYS, function (types, type) { - t[type.toUpperCase() + "_TYPES"] = types; - registerType(type); -}); - -var TYPES = exports.TYPES = (0, _keys2.default)(t.VISITOR_KEYS).concat((0, _keys2.default)(t.FLIPPED_ALIAS_KEYS)).concat((0, _keys2.default)(t.DEPRECATED_KEYS)); - -function is(type, node, opts) { - if (!node) return false; - - var matches = isType(node.type, type); - if (!matches) return false; - - if (typeof opts === "undefined") { - return true; - } else { - return t.shallowEqual(node, opts); - } -} - -function isType(nodeType, targetType) { - if (nodeType === targetType) return true; - - if (t.ALIAS_KEYS[targetType]) return false; - - var aliases = t.FLIPPED_ALIAS_KEYS[targetType]; - if (aliases) { - if (aliases[0] === nodeType) return true; - - for (var _iterator = aliases, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var alias = _ref; - - if (nodeType === alias) return true; - } - } - - return false; -} - -(0, _each2.default)(t.BUILDER_KEYS, function (keys, type) { - function builder() { - if (arguments.length > keys.length) { - throw new Error("t." + type + ": Too many arguments passed. Received " + arguments.length + " but can receive " + ("no more than " + keys.length)); - } - - var node = {}; - node.type = type; - - var i = 0; - - for (var _iterator2 = keys, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var _key = _ref2; - - var field = t.NODE_FIELDS[type][_key]; - - var arg = arguments[i++]; - if (arg === undefined) arg = (0, _clone2.default)(field.default); - - node[_key] = arg; - } - - for (var key in node) { - validate(node, key, node[key]); - } - - return node; - } - - t[type] = builder; - t[type[0].toLowerCase() + type.slice(1)] = builder; -}); - -var _loop = function _loop(_type) { - var newType = t.DEPRECATED_KEYS[_type]; - - function proxy(fn) { - return function () { - console.trace("The node type " + _type + " has been renamed to " + newType); - return fn.apply(this, arguments); - }; - } - - t[_type] = t[_type[0].toLowerCase() + _type.slice(1)] = proxy(t[newType]); - t["is" + _type] = proxy(t["is" + newType]); - t["assert" + _type] = proxy(t["assert" + newType]); -}; - -for (var _type in t.DEPRECATED_KEYS) { - _loop(_type); -} - -function validate(node, key, val) { - if (!node) return; - - var fields = t.NODE_FIELDS[node.type]; - if (!fields) return; - - var field = fields[key]; - if (!field || !field.validate) return; - if (field.optional && val == null) return; - - field.validate(node, key, val); -} - -function shallowEqual(actual, expected) { - var keys = (0, _keys2.default)(expected); - - for (var _iterator3 = keys, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : (0, _getIterator3.default)(_iterator3);;) { - var _ref3; - - if (_isArray3) { - if (_i3 >= _iterator3.length) break; - _ref3 = _iterator3[_i3++]; - } else { - _i3 = _iterator3.next(); - if (_i3.done) break; - _ref3 = _i3.value; - } - - var key = _ref3; - - if (actual[key] !== expected[key]) { - return false; - } - } - - return true; -} - -function appendToMemberExpression(member, append, computed) { - member.object = t.memberExpression(member.object, member.property, member.computed); - member.property = append; - member.computed = !!computed; - return member; -} - -function prependToMemberExpression(member, prepend) { - member.object = t.memberExpression(prepend, member.object); - return member; -} - -function ensureBlock(node) { - var key = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "body"; - - return node[key] = t.toBlock(node[key], node); -} - -function clone(node) { - var newNode = {}; - for (var key in node) { - if (key[0] === "_") continue; - newNode[key] = node[key]; - } - return newNode; -} - -function cloneWithoutLoc(node) { - var newNode = clone(node); - delete newNode.loc; - return newNode; -} - -function cloneDeep(node) { - var newNode = {}; - - for (var key in node) { - if (key[0] === "_") continue; - - var val = node[key]; - - if (val) { - if (val.type) { - val = t.cloneDeep(val); - } else if (Array.isArray(val)) { - val = val.map(t.cloneDeep); - } - } - - newNode[key] = val; - } - - return newNode; -} - -function buildMatchMemberExpression(match, allowPartial) { - var parts = match.split("."); - - return function (member) { - if (!t.isMemberExpression(member)) return false; - - var search = [member]; - var i = 0; - - while (search.length) { - var node = search.shift(); - - if (allowPartial && i === parts.length) { - return true; - } - - if (t.isIdentifier(node)) { - if (parts[i] !== node.name) return false; - } else if (t.isStringLiteral(node)) { - if (parts[i] !== node.value) return false; - } else if (t.isMemberExpression(node)) { - if (node.computed && !t.isStringLiteral(node.property)) { - return false; - } else { - search.push(node.object); - search.push(node.property); - continue; - } - } else { - return false; - } - - if (++i > parts.length) { - return false; - } - } - - return true; - }; -} - -function removeComments(node) { - for (var _iterator4 = t.COMMENT_KEYS, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : (0, _getIterator3.default)(_iterator4);;) { - var _ref4; - - if (_isArray4) { - if (_i4 >= _iterator4.length) break; - _ref4 = _iterator4[_i4++]; - } else { - _i4 = _iterator4.next(); - if (_i4.done) break; - _ref4 = _i4.value; - } - - var key = _ref4; - - delete node[key]; - } - return node; -} - -function inheritsComments(child, parent) { - inheritTrailingComments(child, parent); - inheritLeadingComments(child, parent); - inheritInnerComments(child, parent); - return child; -} - -function inheritTrailingComments(child, parent) { - _inheritComments("trailingComments", child, parent); -} - -function inheritLeadingComments(child, parent) { - _inheritComments("leadingComments", child, parent); -} - -function inheritInnerComments(child, parent) { - _inheritComments("innerComments", child, parent); -} - -function _inheritComments(key, child, parent) { - if (child && parent) { - child[key] = (0, _uniq2.default)((0, _compact2.default)([].concat(child[key], parent[key]))); - } -} - -function inherits(child, parent) { - if (!child || !parent) return child; - - for (var _iterator5 = t.INHERIT_KEYS.optional, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : (0, _getIterator3.default)(_iterator5);;) { - var _ref5; - - if (_isArray5) { - if (_i5 >= _iterator5.length) break; - _ref5 = _iterator5[_i5++]; - } else { - _i5 = _iterator5.next(); - if (_i5.done) break; - _ref5 = _i5.value; - } - - var _key2 = _ref5; - - if (child[_key2] == null) { - child[_key2] = parent[_key2]; - } - } - - for (var key in parent) { - if (key[0] === "_") child[key] = parent[key]; - } - - for (var _iterator6 = t.INHERIT_KEYS.force, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : (0, _getIterator3.default)(_iterator6);;) { - var _ref6; - - if (_isArray6) { - if (_i6 >= _iterator6.length) break; - _ref6 = _iterator6[_i6++]; - } else { - _i6 = _iterator6.next(); - if (_i6.done) break; - _ref6 = _i6.value; - } - - var _key3 = _ref6; - - child[_key3] = parent[_key3]; - } - - t.inheritsComments(child, parent); - - return child; -} - -function assertNode(node) { - if (!isNode(node)) { - throw new TypeError("Not a valid node " + (node && node.type)); - } -} - -function isNode(node) { - return !!(node && _definitions.VISITOR_KEYS[node.type]); -} - -(0, _toFastProperties2.default)(t); -(0, _toFastProperties2.default)(t.VISITOR_KEYS); - -function traverseFast(node, enter, opts) { - if (!node) return; - - var keys = t.VISITOR_KEYS[node.type]; - if (!keys) return; - - opts = opts || {}; - enter(node, opts); - - for (var _iterator7 = keys, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : (0, _getIterator3.default)(_iterator7);;) { - var _ref7; - - if (_isArray7) { - if (_i7 >= _iterator7.length) break; - _ref7 = _iterator7[_i7++]; - } else { - _i7 = _iterator7.next(); - if (_i7.done) break; - _ref7 = _i7.value; - } - - var key = _ref7; - - var subNode = node[key]; - - if (Array.isArray(subNode)) { - for (var _iterator8 = subNode, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : (0, _getIterator3.default)(_iterator8);;) { - var _ref8; - - if (_isArray8) { - if (_i8 >= _iterator8.length) break; - _ref8 = _iterator8[_i8++]; - } else { - _i8 = _iterator8.next(); - if (_i8.done) break; - _ref8 = _i8.value; - } - - var _node = _ref8; - - traverseFast(_node, enter, opts); - } - } else { - traverseFast(subNode, enter, opts); - } - } -} - -var CLEAR_KEYS = ["tokens", "start", "end", "loc", "raw", "rawValue"]; - -var CLEAR_KEYS_PLUS_COMMENTS = t.COMMENT_KEYS.concat(["comments"]).concat(CLEAR_KEYS); - -function removeProperties(node, opts) { - opts = opts || {}; - var map = opts.preserveComments ? CLEAR_KEYS : CLEAR_KEYS_PLUS_COMMENTS; - for (var _iterator9 = map, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : (0, _getIterator3.default)(_iterator9);;) { - var _ref9; - - if (_isArray9) { - if (_i9 >= _iterator9.length) break; - _ref9 = _iterator9[_i9++]; - } else { - _i9 = _iterator9.next(); - if (_i9.done) break; - _ref9 = _i9.value; - } - - var _key4 = _ref9; - - if (node[_key4] != null) node[_key4] = undefined; - } - - for (var key in node) { - if (key[0] === "_" && node[key] != null) node[key] = undefined; - } - - var syms = (0, _getOwnPropertySymbols2.default)(node); - for (var _iterator10 = syms, _isArray10 = Array.isArray(_iterator10), _i10 = 0, _iterator10 = _isArray10 ? _iterator10 : (0, _getIterator3.default)(_iterator10);;) { - var _ref10; - - if (_isArray10) { - if (_i10 >= _iterator10.length) break; - _ref10 = _iterator10[_i10++]; - } else { - _i10 = _iterator10.next(); - if (_i10.done) break; - _ref10 = _i10.value; - } - - var sym = _ref10; - - node[sym] = null; - } -} - -function removePropertiesDeep(tree, opts) { - traverseFast(tree, removeProperties, opts); - return tree; -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/react.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/react.js deleted file mode 100644 index 923ee1232..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/react.js +++ /dev/null @@ -1,80 +0,0 @@ -"use strict"; - -exports.__esModule = true; -exports.isReactComponent = undefined; -exports.isCompatTag = isCompatTag; -exports.buildChildren = buildChildren; - -var _index = require("./index"); - -var t = _interopRequireWildcard(_index); - -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 isReactComponent = exports.isReactComponent = t.buildMatchMemberExpression("React.Component"); - -function isCompatTag(tagName) { - return !!tagName && /^[a-z]|\-/.test(tagName); -} - -function cleanJSXElementLiteralChild(child, args) { - var lines = child.value.split(/\r\n|\n|\r/); - - var lastNonEmptyLine = 0; - - for (var i = 0; i < lines.length; i++) { - if (lines[i].match(/[^ \t]/)) { - lastNonEmptyLine = i; - } - } - - var str = ""; - - for (var _i = 0; _i < lines.length; _i++) { - var line = lines[_i]; - - var isFirstLine = _i === 0; - var isLastLine = _i === lines.length - 1; - var isLastNonEmptyLine = _i === lastNonEmptyLine; - - var trimmedLine = line.replace(/\t/g, " "); - - if (!isFirstLine) { - trimmedLine = trimmedLine.replace(/^[ ]+/, ""); - } - - if (!isLastLine) { - trimmedLine = trimmedLine.replace(/[ ]+$/, ""); - } - - if (trimmedLine) { - if (!isLastNonEmptyLine) { - trimmedLine += " "; - } - - str += trimmedLine; - } - } - - if (str) args.push(t.stringLiteral(str)); -} - -function buildChildren(node) { - var elems = []; - - for (var i = 0; i < node.children.length; i++) { - var child = node.children[i]; - - if (t.isJSXText(child)) { - cleanJSXElementLiteralChild(child, elems); - continue; - } - - if (t.isJSXExpressionContainer(child)) child = child.expression; - if (t.isJSXEmptyExpression(child)) continue; - - elems.push(child); - } - - return elems; -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/retrievers.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/retrievers.js deleted file mode 100644 index e141aad68..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/retrievers.js +++ /dev/null @@ -1,115 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _create = require("babel-runtime/core-js/object/create"); - -var _create2 = _interopRequireDefault(_create); - -exports.getBindingIdentifiers = getBindingIdentifiers; -exports.getOuterBindingIdentifiers = getOuterBindingIdentifiers; - -var _index = require("./index"); - -var t = _interopRequireWildcard(_index); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function getBindingIdentifiers(node, duplicates, outerOnly) { - var search = [].concat(node); - var ids = (0, _create2.default)(null); - - while (search.length) { - var id = search.shift(); - if (!id) continue; - - var keys = t.getBindingIdentifiers.keys[id.type]; - - if (t.isIdentifier(id)) { - if (duplicates) { - var _ids = ids[id.name] = ids[id.name] || []; - _ids.push(id); - } else { - ids[id.name] = id; - } - continue; - } - - if (t.isExportDeclaration(id)) { - if (t.isDeclaration(node.declaration)) { - search.push(node.declaration); - } - continue; - } - - if (outerOnly) { - if (t.isFunctionDeclaration(id)) { - search.push(id.id); - continue; - } - - if (t.isFunctionExpression(id)) { - continue; - } - } - - if (keys) { - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (id[key]) { - search = search.concat(id[key]); - } - } - } - } - - return ids; -} - -getBindingIdentifiers.keys = { - DeclareClass: ["id"], - DeclareFunction: ["id"], - DeclareModule: ["id"], - DeclareVariable: ["id"], - InterfaceDeclaration: ["id"], - TypeAlias: ["id"], - - CatchClause: ["param"], - LabeledStatement: ["label"], - UnaryExpression: ["argument"], - AssignmentExpression: ["left"], - - ImportSpecifier: ["local"], - ImportNamespaceSpecifier: ["local"], - ImportDefaultSpecifier: ["local"], - ImportDeclaration: ["specifiers"], - - ExportSpecifier: ["exported"], - ExportNamespaceSpecifier: ["exported"], - ExportDefaultSpecifier: ["exported"], - - FunctionDeclaration: ["id", "params"], - FunctionExpression: ["id", "params"], - - ClassDeclaration: ["id"], - ClassExpression: ["id"], - - RestElement: ["argument"], - UpdateExpression: ["argument"], - - RestProperty: ["argument"], - ObjectProperty: ["value"], - - AssignmentPattern: ["left"], - ArrayPattern: ["elements"], - ObjectPattern: ["properties"], - - VariableDeclaration: ["declarations"], - VariableDeclarator: ["id"] -}; - -function getOuterBindingIdentifiers(node, duplicates) { - return getBindingIdentifiers(node, duplicates, true); -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/validators.js b/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/validators.js deleted file mode 100644 index 23578a1d1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/lib/validators.js +++ /dev/null @@ -1,263 +0,0 @@ -"use strict"; - -exports.__esModule = true; - -var _keys = require("babel-runtime/core-js/object/keys"); - -var _keys2 = _interopRequireDefault(_keys); - -var _typeof2 = require("babel-runtime/helpers/typeof"); - -var _typeof3 = _interopRequireDefault(_typeof2); - -var _getIterator2 = require("babel-runtime/core-js/get-iterator"); - -var _getIterator3 = _interopRequireDefault(_getIterator2); - -exports.isBinding = isBinding; -exports.isReferenced = isReferenced; -exports.isValidIdentifier = isValidIdentifier; -exports.isLet = isLet; -exports.isBlockScoped = isBlockScoped; -exports.isVar = isVar; -exports.isSpecifierDefault = isSpecifierDefault; -exports.isScope = isScope; -exports.isImmutable = isImmutable; -exports.isNodesEquivalent = isNodesEquivalent; - -var _retrievers = require("./retrievers"); - -var _esutils = require("esutils"); - -var _esutils2 = _interopRequireDefault(_esutils); - -var _index = require("./index"); - -var t = _interopRequireWildcard(_index); - -var _constants = require("./constants"); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function isBinding(node, parent) { - var keys = _retrievers.getBindingIdentifiers.keys[parent.type]; - if (keys) { - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - var val = parent[key]; - if (Array.isArray(val)) { - if (val.indexOf(node) >= 0) return true; - } else { - if (val === node) return true; - } - } - } - - return false; -} - -function isReferenced(node, parent) { - switch (parent.type) { - case "BindExpression": - return parent.object === node || parent.callee === node; - - case "MemberExpression": - case "JSXMemberExpression": - if (parent.property === node && parent.computed) { - return true; - } else if (parent.object === node) { - return true; - } else { - return false; - } - - case "MetaProperty": - return false; - - case "ObjectProperty": - if (parent.key === node) { - return parent.computed; - } - - case "VariableDeclarator": - return parent.id !== node; - - case "ArrowFunctionExpression": - case "FunctionDeclaration": - case "FunctionExpression": - for (var _iterator = parent.params, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator);;) { - var _ref; - - if (_isArray) { - if (_i >= _iterator.length) break; - _ref = _iterator[_i++]; - } else { - _i = _iterator.next(); - if (_i.done) break; - _ref = _i.value; - } - - var param = _ref; - - if (param === node) return false; - } - - return parent.id !== node; - - case "ExportSpecifier": - if (parent.source) { - return false; - } else { - return parent.local === node; - } - - case "ExportNamespaceSpecifier": - case "ExportDefaultSpecifier": - return false; - - case "JSXAttribute": - return parent.name !== node; - - case "ClassProperty": - if (parent.key === node) { - return parent.computed; - } else { - return parent.value === node; - } - - case "ImportDefaultSpecifier": - case "ImportNamespaceSpecifier": - case "ImportSpecifier": - return false; - - case "ClassDeclaration": - case "ClassExpression": - return parent.id !== node; - - case "ClassMethod": - case "ObjectMethod": - return parent.key === node && parent.computed; - - case "LabeledStatement": - return false; - - case "CatchClause": - return parent.param !== node; - - case "RestElement": - return false; - - case "AssignmentExpression": - return parent.right === node; - - case "AssignmentPattern": - return parent.right === node; - - case "ObjectPattern": - case "ArrayPattern": - return false; - } - - return true; -} - -function isValidIdentifier(name) { - if (typeof name !== "string" || _esutils2.default.keyword.isReservedWordES6(name, true)) { - return false; - } else { - return _esutils2.default.keyword.isIdentifierNameES6(name); - } -} - -function isLet(node) { - return t.isVariableDeclaration(node) && (node.kind !== "var" || node[_constants.BLOCK_SCOPED_SYMBOL]); -} - -function isBlockScoped(node) { - return t.isFunctionDeclaration(node) || t.isClassDeclaration(node) || t.isLet(node); -} - -function isVar(node) { - return t.isVariableDeclaration(node, { kind: "var" }) && !node[_constants.BLOCK_SCOPED_SYMBOL]; -} - -function isSpecifierDefault(specifier) { - return t.isImportDefaultSpecifier(specifier) || t.isIdentifier(specifier.imported || specifier.exported, { name: "default" }); -} - -function isScope(node, parent) { - if (t.isBlockStatement(node) && t.isFunction(parent, { body: node })) { - return false; - } - - return t.isScopable(node); -} - -function isImmutable(node) { - if (t.isType(node.type, "Immutable")) return true; - - if (t.isIdentifier(node)) { - if (node.name === "undefined") { - return true; - } else { - return false; - } - } - - return false; -} - -function isNodesEquivalent(a, b) { - if ((typeof a === "undefined" ? "undefined" : (0, _typeof3.default)(a)) !== "object" || (typeof a === "undefined" ? "undefined" : (0, _typeof3.default)(a)) !== "object" || a == null || b == null) { - return a === b; - } - - if (a.type !== b.type) { - return false; - } - - var fields = (0, _keys2.default)(t.NODE_FIELDS[a.type] || a.type); - - for (var _iterator2 = fields, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : (0, _getIterator3.default)(_iterator2);;) { - var _ref2; - - if (_isArray2) { - if (_i2 >= _iterator2.length) break; - _ref2 = _iterator2[_i2++]; - } else { - _i2 = _iterator2.next(); - if (_i2.done) break; - _ref2 = _i2.value; - } - - var field = _ref2; - - if ((0, _typeof3.default)(a[field]) !== (0, _typeof3.default)(b[field])) { - return false; - } - - if (Array.isArray(a[field])) { - if (!Array.isArray(b[field])) { - return false; - } - if (a[field].length !== b[field].length) { - return false; - } - - for (var i = 0; i < a[field].length; i++) { - if (!isNodesEquivalent(a[field][i], b[field][i])) { - return false; - } - } - continue; - } - - if (!isNodesEquivalent(a[field], b[field])) { - return false; - } - } - - return true; -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/babel-types/package.json b/fundamentals/bug-challenge-es6/node_modules/babel-types/package.json deleted file mode 100644 index 69913fb43..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babel-types/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "babel-types@^6.18.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core" - ] - ], - "_from": "babel-types@>=6.18.0 <7.0.0", - "_id": "babel-types@6.19.0", - "_inCache": true, - "_installable": true, - "_location": "/babel-types", - "_nodeVersion": "6.9.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/babel-types-6.19.0.tgz_1479312929564_0.3655073696281761" - }, - "_npmUser": { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "babel-types", - "raw": "babel-types@^6.18.0", - "rawSpec": "^6.18.0", - "scope": null, - "spec": ">=6.18.0 <7.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-core", - "/babel-generator", - "/babel-template", - "/babel-traverse", - "/istanbul-lib-instrument" - ], - "_resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.19.0.tgz", - "_shasum": "8db2972dbed01f1192a8b602ba1e1e4c516240b9", - "_shrinkwrap": null, - "_spec": "babel-types@^6.18.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core", - "author": { - "email": "sebmck@gmail.com", - "name": "Sebastian McKenzie" - }, - "dependencies": { - "babel-runtime": "^6.9.1", - "esutils": "^2.0.2", - "lodash": "^4.2.0", - "to-fast-properties": "^1.0.1" - }, - "description": "Babel Types is a Lodash-esque utility library for AST nodes", - "devDependencies": { - "babylon": "^6.8.2" - }, - "directories": {}, - "dist": { - "shasum": "8db2972dbed01f1192a8b602ba1e1e4c516240b9", - "tarball": "https://registry.npmjs.org/babel-types/-/babel-types-6.19.0.tgz" - }, - "homepage": "https://babeljs.io/", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "amjad.masad@gmail.com", - "name": "amasad" - }, - { - "email": "hi@henryzoo.com", - "name": "hzoo" - }, - { - "email": "npm-public@jessemccarthy.net", - "name": "jmm" - }, - { - "email": "loganfsmyth@gmail.com", - "name": "loganfsmyth" - }, - { - "email": "sebmck@gmail.com", - "name": "sebmck" - }, - { - "email": "me@thejameskyle.com", - "name": "thejameskyle" - } - ], - "name": "babel-types", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "https://github.com/babel/babel/tree/master/packages/babel-types" - }, - "scripts": {}, - "version": "6.19.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/babylon/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/babylon/CHANGELOG.md deleted file mode 100644 index 393b05401..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babylon/CHANGELOG.md +++ /dev/null @@ -1,693 +0,0 @@ -# Changelog - -> **Tags:** -> - :boom: [Breaking Change] -> - :eyeglasses: [Spec Compliancy] -> - :rocket: [New Feature] -> - :bug: [Bug Fix] -> - :memo: [Documentation] -> - :house: [Internal] -> - :nail_care: [Polish] - -> Semver Policy: https://github.com/babel/babylon#semver - -_Note: Gaps between patch versions are faulty, broken or test releases._ - -See the [Babel Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md) for the pre-6.8.0 version Changelog. - -## 6.14.1 (2016-11-17) - -### :bug: Bug Fix - -Allow `"plugins": ["*"]` ([#229](https://github.com/babel/babylon/pull/229)) (Daniel Tschinder) - -```js -{ - "plugins": ["*"] -} -``` - -Will include all parser plugins instead of specifying each one individually. Useful for tools like babel-eslint, jscodeshift, and ast-explorer. - -## 6.14.0 (2016-11-16) - -### :eyeglasses: Spec Compliancy - -Throw error for reserved words `enum` and `await` ([#195](https://github.com/babel/babylon/pull/195)) (Kai Cataldo) - -[11.6.2.2 Future Reserved Words](http://www.ecma-international.org/ecma-262/6.0/#sec-future-reserved-words) - -Babylon will throw for more reserved words such as `enum` or `await` (in strict mode). - -``` -class enum {} // throws -class await {} // throws in strict mode (module) -``` - -Optional names for function types and object type indexers ([#197](https://github.com/babel/babylon/pull/197)) (Gabe Levi) - -So where you used to have to write - -```js -type A = (x: string, y: boolean) => number; -type B = (z: string) => number; -type C = { [key: string]: number }; -``` - -you can now write (with flow 0.34.0) - -```js -type A = (string, boolean) => number; -type B = string => number; -type C = { [string]: number }; -``` - -Parse flow nested array type annotations like `number[][]` ([#219](https://github.com/babel/babylon/pull/219)) (Bernhard Häussner) - -Supports these form now of specifying array types: - -```js -var a: number[][][][]; -var b: string[][]; -``` - -### :bug: Bug Fix - -Correctly eat semicolon at the end of `DelcareModuleExports` ([#223](https://github.com/babel/babylon/pull/223)) (Daniel Tschinder) - -``` -declare module "foo" { declare module.exports: number } -declare module "foo" { declare module.exports: number; } // also allowed now -``` - -### :house: Internal - - * Count Babel tests towards Babylon code coverage ([#182](https://github.com/babel/babylon/pull/182)) (Moti Zilberman) - * Fix strange line endings ([#214](https://github.com/babel/babylon/pull/214)) (Thomas Grainger) - * Add node 7 (Daniel Tschinder) - * chore(package): update flow-bin to version 0.34.0 ([#204](https://github.com/babel/babylon/pull/204)) (Greenkeeper) - -## v6.13.1 (2016-10-26) - -### :nail_care: Polish - -- Use rollup for bundling to speed up startup time ([#190](https://github.com/babel/babylon/pull/190)) ([@drewml](https://github.com/DrewML)) - -```js -const babylon = require('babylon'); -const ast = babylon.parse('var foo = "lol";'); -``` - -With that test case, there was a ~95ms savings by removing the need for node to build/traverse the dependency graph. - -**Without bundling** -![image](https://cloud.githubusercontent.com/assets/5233399/19420264/3133497e-93ad-11e6-9a6a-2da59c4f5c13.png) - -**With bundling** -![image](https://cloud.githubusercontent.com/assets/5233399/19420267/388f556e-93ad-11e6-813e-7c5c396be322.png) - -- add clean command [skip ci] ([#201](https://github.com/babel/babylon/pull/201)) (Henry Zhu) -- add ForAwaitStatement (async generator already added) [skip ci] ([#196](https://github.com/babel/babylon/pull/196)) (Henry Zhu) - -## v6.13.0 (2016-10-21) - -### :eyeglasses: Spec Compliancy - -Property variance type annotations for Flow plugin ([#161](https://github.com/babel/babylon/pull/161)) (Sam Goldman) - -> See https://flowtype.org/docs/variance.html for more information - -```js -type T = { +p: T }; -interface T { -p: T }; -declare class T { +[k:K]: V }; -class T { -[k:K]: V }; -class C2 { +p: T = e }; -``` - -Raise error on duplicate definition of __proto__ ([#183](https://github.com/babel/babylon/pull/183)) (Moti Zilberman) - -```js -({ __proto__: 1, __proto__: 2 }) // Throws an error now -``` - -### :bug: Bug Fix - -Flow: Allow class properties to be named `static` ([#184](https://github.com/babel/babylon/pull/184)) (Moti Zilberman) - -```js -declare class A { - static: T; -} -``` - -Allow "async" as identifier for object literal property shorthand ([#187](https://github.com/babel/babylon/pull/187)) (Andrew Levine) - -```js -var foo = { async, bar }; -``` - -### :nail_care: Polish - -Fix flowtype and add inType to state ([#189](https://github.com/babel/babylon/pull/189)) (Daniel Tschinder) - -> This improves the performance slightly (because of hidden classes) - -### :house: Internal - -Fix .gitattributes line ending setting ([#191](https://github.com/babel/babylon/pull/191)) (Moti Zilberman) - -Increase test coverage ([#175](https://github.com/babel/babylon/pull/175) (Moti Zilberman) - -Readd missin .eslinignore for IDEs (Daniel Tschinder) - -Error on missing expected.json fixture in CI ([#188](https://github.com/babel/babylon/pull/188)) (Moti Zilberman) - -Add .gitattributes and .editorconfig for LF line endings ([#179](https://github.com/babel/babylon/pull/179)) (Moti Zilberman) - -Fixes two tests that are failing after the merge of #172 ([#177](https://github.com/babel/babylon/pull/177)) (Moti Zilberman) - -## v6.12.0 (2016-10-14) - -### :eyeglasses: Spec Compliancy - -Implement import() syntax ([#163](https://github.com/babel/babylon/pull/163)) (Jordan Gensler) - -#### Dynamic Import - -- Proposal Repo: https://github.com/domenic/proposal-dynamic-import -- Championed by [@domenic](https://github.com/domenic) -- stage-2 -- [sept-28 tc39 notes](https://github.com/rwaldron/tc39-notes/blob/master/es7/2016-09/sept-28.md#113a-import) - -> This repository contains a proposal for adding a "function-like" import() module loading syntactic form to JavaScript - -```js -import(`./section-modules/${link.dataset.entryModule}.js`) -.then(module => { - module.loadPageInto(main); -}) -``` - -Add EmptyTypeAnnotation ([#171](https://github.com/babel/babylon/pull/171)) (Sam Goldman) - -#### EmptyTypeAnnotation - -Just wasn't covered before. - -```js -type T = empty; -``` - -### :bug: Bug Fix - -Fix crash when exporting with destructuring and sparse array ([#170](https://github.com/babel/babylon/pull/170)) (Jeroen Engels) - -```js -// was failing due to sparse array -export const { foo: [ ,, qux7 ] } = bar; -``` - -Allow keyword in Flow object declaration property names with type parameters ([#146](https://github.com/babel/babylon/pull/146)) (Dan Harper) - -```js -declare class X { - foobar(): void; - static foobar(): void; -} -``` - -Allow keyword in object/class property names with Flow type parameters ([#145](https://github.com/babel/babylon/pull/145)) (Dan Harper) - -```js -class Foo { - delete(item: T): T { - return item; - } -} -``` - -Allow typeAnnotations for yield expressions ([#174](https://github.com/babel/babylon/pull/174))) (Daniel Tschinder) - -```js -function *foo() { - const x = (yield 5: any); -} -``` - -### :nail_care: Polish - -Annotate more errors with expected token ([#172](https://github.com/babel/babylon/pull/172))) (Moti Zilberman) - -```js -// Unexpected token, expected ; (1:6) -{ set 1 } -``` - -### :house: Internal - -Remove kcheck ([#173](https://github.com/babel/babylon/pull/173))) (Daniel Tschinder) - -Also run flow, linting, babel tests on seperate instances (add back node 0.10) - -## v6.11.6 (2016-10-12) - -### :bug: Bug Fix/Regression - -Fix crash when exporting with destructuring and sparse array ([#170](https://github.com/babel/babylon/pull/170)) (Jeroen Engels) - -```js -// was failing with `Cannot read property 'type' of null` because of null identifiers -export const { foo: [ ,, qux7 ] } = bar; -``` - -## v6.11.5 (2016-10-12) - -### :eyeglasses: Spec Compliancy - -Fix: Check for duplicate named exports in exported destructuring assignments ([#144](https://github.com/babel/babylon/pull/144)) (Kai Cataldo) - -```js -// `foo` has already been exported. Exported identifiers must be unique. (2:20) -export function foo() {}; -export const { a: [{foo}] } = bar; -``` - -Fix: Check for duplicate named exports in exported rest elements/properties ([#164](https://github.com/babel/babylon/pull/164)) (Kai Cataldo) - -```js -// `foo` has already been exported. Exported identifiers must be unique. (2:22) -export const foo = 1; -export const [bar, ...foo] = baz; -``` - -### :bug: Bug Fix - -Fix: Allow identifier `async` for default param in arrow expression ([#165](https://github.com/babel/babylon/pull/165)) (Kai Cataldo) - -```js -// this is ok now -const test = ({async = true}) => {}; -``` - -### :nail_care: Polish - -Babylon will now print out the token it's expecting if there's a `SyntaxError` ([#150](https://github.com/babel/babylon/pull/150)) (Daniel Tschinder) - -```bash -# So in the case of a missing ending curly (`}`) -Module build failed: SyntaxError: Unexpected token, expected } (30:0) - 28 | } - 29 | -> 30 | - | ^ -``` - -## v6.11.4 (2016-10-03) - -Temporary rollback for erroring on trailing comma with spread (#154) (Henry Zhu) - -## v6.11.3 (2016-10-01) - -### :eyeglasses: Spec Compliancy - -Add static errors for object rest (#149) ([@danez](https://github.com/danez)) - -> https://github.com/sebmarkbage/ecmascript-rest-spread - -Object rest copies the *rest* of properties from the right hand side `obj` starting from the left to right. - -```js -let { x, y, ...z } = { x: 1, y: 2, z: 3 }; -// x = 1 -// y = 2 -// z = { z: 3 } -``` - -#### New Syntax Errors: - -**SyntaxError**: The rest element has to be the last element when destructuring (1:10) -```bash -> 1 | let { ...x, y, z } = { x: 1, y: 2, z: 3}; - | ^ -# Previous behavior: -# x = { x: 1, y: 2, z: 3 } -# y = 2 -# z = 3 -``` - -Before, this was just a more verbose way of shallow copying `obj` since it doesn't actually do what you think. - -**SyntaxError**: Cannot have multiple rest elements when destructuring (1:13) - -```bash -> 1 | let { x, ...y, ...z } = { x: 1, y: 2, z: 3}; - | ^ -# Previous behavior: -# x = 1 -# y = { y: 2, z: 3 } -# z = { y: 2, z: 3 } -``` - -Before y and z would just be the same value anyway so there is no reason to need to have both. - -**SyntaxError**: A trailing comma is not permitted after the rest element (1:16) - -```js -let { x, y, ...z, } = obj; -``` - -The rationale for this is that the use case for trailing comma is that you can add something at the end without affecting the line above. Since a RestProperty always has to be the last property it doesn't make sense. - ---- - -get / set are valid property names in default assignment (#142) ([@jezell](https://github.com/jezell)) - -```js -// valid -function something({ set = null, get = null }) {} -``` - -## v6.11.2 (2016-09-23) - -### Bug Fix - -- [#139](https://github.com/babel/babylon/issues/139) Don't do the duplicate check if not an identifier (#140) @hzoo - -```js -// regression with duplicate export check -SyntaxError: ./typography.js: `undefined` has already been exported. Exported identifiers must be unique. (22:13) - 20 | - 21 | export const { rhythm } = typography; -> 22 | export const { TypographyStyle } = typography -``` - -Bail out for now, and make a change to account for destructuring in the next release. - -## 6.11.1 (2016-09-22) - -### Bug Fix -- [#137](https://github.com/babel/babylon/pull/137) - Fix a regression with duplicate exports - it was erroring on all keys in `Object.prototype`. @danez - -```javascript -export toString from './toString'; -``` - -```bash -`toString` has already been exported. Exported identifiers must be unique. (1:7) -> 1 | export toString from './toString'; - | ^ - 2 | -``` - -## 6.11.0 (2016-09-22) - -### Spec Compliancy (will break CI) - -- Disallow duplicate named exports ([#107](https://github.com/babel/babylon/pull/107)) @kaicataldo - -```js -// Only one default export allowed per module. (2:9) -export default function() {}; -export { foo as default }; - -// Only one default export allowed per module. (2:0) -export default {}; -export default function() {}; - -// `Foo` has already been exported. Exported identifiers must be unique. (2:0) -export { Foo }; -export class Foo {}; -``` - -### New Feature (Syntax) - -- Add support for computed class property names ([#121](https://github.com/babel/babylon/pull/121)) @motiz88 - -```js -// AST -interface ClassProperty <: Node { - type: "ClassProperty"; - key: Identifier; - value: Expression; - computed: boolean; // added -} -``` - -```js -// with "plugins": ["classProperties"] -class Foo { - [x] - ['y'] -} - -class Bar { - [p] - [m] () {} -} - ``` - -### Bug Fix - -- Fix `static` property falling through in the declare class Flow AST ([#135](https://github.com/babel/babylon/pull/135)) @danharper - -```js -declare class X { - a: number; - static b: number; // static - c: number; // this was being marked as static in the AST as well -} -``` - -### Polish - -- Rephrase "assigning/binding to rvalue" errors to include context ([#119](https://github.com/babel/babylon/pull/119)) @motiz88 - -```js -// Used to error with: -// SyntaxError: Assigning to rvalue (1:0) - -// Now: -// Invalid left-hand side in assignment expression (1:0) -3 = 4 - -// Invalid left-hand side in for-in statement (1:5) -for (+i in {}); -``` - -### Internal - -- Fix call to `this.parseMaybeAssign` with correct arguments ([#133](https://github.com/babel/babylon/pull/133)) @danez -- Add semver note to changelog ([#131](https://github.com/babel/babylon/pull/131)) @hzoo - -## 6.10.0 (2016-09-19) - -> We plan to include some spec compliancy bugs in patch versions. An example was the multiple default exports issue. - -### Spec Compliancy - -* Implement ES2016 check for simple parameter list in strict mode ([#106](https://github.com/babel/babylon/pull/106)) (Timothy Gu) - -> It is a Syntax Error if ContainsUseStrict of FunctionBody is true and IsSimpleParameterList of FormalParameters is false. https://tc39.github.io/ecma262/2016/#sec-function-definitions-static-semantics-early-errors - -More Context: [tc39-notes](https://github.com/rwaldron/tc39-notes/blob/master/es7/2015-07/july-29.md#611-the-scope-of-use-strict-with-respect-to-destructuring-in-parameter-lists) - -For example: - -```js -// this errors because it uses destructuring and default parameters -// in a function with a "use strict" directive -function a([ option1, option2 ] = []) { - "use strict"; -} - ``` - -The solution would be to use a top level "use strict" or to remove the destructuring or default parameters when using a function + "use strict" or to. - -### New Feature - -* Exact object type annotations for Flow plugin ([#104](https://github.com/babel/babylon/pull/104)) (Basil Hosmer) - -Added to flow in https://github.com/facebook/flow/commit/c710c40aa2a115435098d6c0dfeaadb023cd39b8 - -Looks like: - -```js -var a : {| x: number, y: string |} = { x: 0, y: 'foo' }; -``` - -### Bug Fixes - -* Include `typeParameter` location in `ArrowFunctionExpression` ([#126](https://github.com/babel/babylon/pull/126)) (Daniel Tschinder) -* Error on invalid flow type annotation with default assignment ([#122](https://github.com/babel/babylon/pull/122)) (Dan Harper) -* Fix Flow return types on arrow functions ([#124](https://github.com/babel/babylon/pull/124)) (Dan Harper) - -### Misc - -* Add tests for export extensions ([#127](https://github.com/babel/babylon/pull/127)) (Daniel Tschinder) -* Fix Contributing guidelines [skip ci] (Daniel Tschinder) - -## 6.9.2 (2016-09-09) - -The only change is to remove the `babel-runtime` dependency by compiling with Babel's ES2015 loose mode. So using babylon standalone should be smaller. - -## 6.9.1 (2016-08-23) - -This release contains mainly small bugfixes but also updates babylons default mode to es2017. The features for `exponentiationOperator`, `asyncFunctions` and `trailingFunctionCommas` which previously needed to be activated via plugin are now enabled by default and the plugins are now no-ops. - -### Bug Fixes - -- Fix issues with default object params in async functions ([#96](https://github.com/babel/babylon/pull/96)) @danez -- Fix issues with flow-types and async function ([#95](https://github.com/babel/babylon/pull/95)) @danez -- Fix arrow functions with destructuring, types & default value ([#94](https://github.com/babel/babylon/pull/94)) @danharper -- Fix declare class with qualified type identifier ([#97](https://github.com/babel/babylon/pull/97)) @danez -- Remove exponentiationOperator, asyncFunctions, trailingFunctionCommas plugins and enable them by default ([#98](https://github.com/babel/babylon/pull/98)) @danez - -## 6.9.0 (2016-08-16) - -### New syntax support - -- Add JSX spread children ([#42](https://github.com/babel/babylon/pull/42)) @calebmer - -(Be aware that React is not going to support this syntax) - -```js -
- {...todos.map(todo => )} -
-``` - -- Add support for declare module.exports ([#72](https://github.com/babel/babylon/pull/72)) @danez - -```js -declare module "foo" { - declare module.exports: {} -} -``` - -### New Features - -- If supplied, attach filename property to comment node loc. ([#80](https://github.com/babel/babylon/pull/80)) @divmain -- Add identifier name to node loc field ([#90](https://github.com/babel/babylon/pull/90)) @kittens - -### Bug Fixes - -- Fix exponential operator to behave according to spec ([#75](https://github.com/babel/babylon/pull/75)) @danez -- Fix lookahead to not add comments to arrays which are not cloned ([#76](https://github.com/babel/babylon/pull/76)) @danez -- Fix accidental fall-through in Flow type parsing. ([#82](https://github.com/babel/babylon/pull/82)) @xiemaisi -- Only allow declares inside declare module ([#73](https://github.com/babel/babylon/pull/73)) @danez -- Small fix for parsing type parameter declarations ([#83](https://github.com/babel/babylon/pull/83)) @gabelevi -- Fix arrow param locations with flow types ([#57](https://github.com/babel/babylon/pull/57)) @danez -- Fixes SyntaxError position with flow optional type ([#65](https://github.com/babel/babylon/pull/65)) @danez - -### Internal - -- Add codecoverage to tests @danez -- Fix tests to not save expected output if we expect the test to fail @danez -- Make a shallow clone of babel for testing @danez -- chore(package): update cross-env to version 2.0.0 ([#77](https://github.com/babel/babylon/pull/77)) @greenkeeperio-bot -- chore(package): update ava to version 0.16.0 ([#86](https://github.com/babel/babylon/pull/86)) @greenkeeperio-bot -- chore(package): update babel-plugin-istanbul to version 2.0.0 ([#89](https://github.com/babel/babylon/pull/89)) @greenkeeperio-bot -- chore(package): update nyc to version 8.0.0 ([#88](https://github.com/babel/babylon/pull/88)) @greenkeeperio-bot - -## 6.8.4 (2016-07-06) - -### Bug Fixes - -- Fix the location of params, when flow and default value used ([#68](https://github.com/babel/babylon/pull/68)) @danez - -## 6.8.3 (2016-07-02) - -### Bug Fixes - -- Fix performance regression introduced in 6.8.2 with conditionals ([#63](https://github.com/babel/babylon/pull/63)) @danez - -## 6.8.2 (2016-06-24) - -### Bug Fixes - -- Fix parse error with yielding jsx elements in generators `function* it() { yield ; }` ([#31](https://github.com/babel/babylon/pull/31)) @eldereal -- When cloning nodes do not clone its comments ([#24](https://github.com/babel/babylon/pull/24)) @danez -- Fix parse errors when using arrow functions with an spread element and return type `(...props): void => {}` ([#10](https://github.com/babel/babylon/pull/10)) @danez -- Fix leading comments added from previous node ([#23](https://github.com/babel/babylon/pull/23)) @danez -- Fix parse errors with flow's optional arguments `(arg?) => {}` ([#19](https://github.com/babel/babylon/pull/19)) @danez -- Support negative numeric type literals @kittens -- Remove line terminator restriction after await keyword @kittens -- Remove grouped type arrow restriction as it seems flow no longer has it @kittens -- Fix parse error with generic methods that have the name `get` or `set` `class foo { get() {} }` ([#55](https://github.com/babel/babylon/pull/55)) @vkurchatkin -- Fix parse error with arrow functions that have flow type parameter declarations `(x: T): T => x;` ([#54](https://github.com/babel/babylon/pull/54)) @gabelevi - -### Documentation - -- Document AST differences from ESTree ([#41](https://github.com/babel/babylon/pull/41)) @nene -- Move ast spec from babel/babel ([#46](https://github.com/babel/babylon/pull/46)) @hzoo - -### Internal - -- Enable skipped tests ([#16](https://github.com/babel/babylon/pull/16)) @danez -- Add script to test latest version of babylon with babel ([#21](https://github.com/babel/babylon/pull/21)) @danez -- Upgrade test runner ava @kittens -- Add missing generate-identifier-regex script @kittens -- Rename parser context types @kittens -- Add node v6 to travis testing @hzoo -- Update to Unicode v9 ([#45](https://github.com/babel/babylon/pull/45)) @mathiasbynens - -## 6.8.1 (2016-06-06) - -### New Feature - -- Parse type parameter declarations with defaults like `type Foo = T` - -### Bug Fixes -- Type parameter declarations need 1 or more type parameters. -- The existential type `*` is not a valid type parameter. -- The existential type `*` is a primary type - -### Spec Compliancy -- The param list for type parameter declarations now consists of `TypeParameter` nodes -- New `TypeParameter` AST Node (replaces using the `Identifier` node before) - -``` -interface TypeParameter <: Node { - bound: TypeAnnotation; - default: TypeAnnotation; - name: string; - variance: "plus" | "minus"; -} -``` - -## 6.8.0 (2016-05-02) - -#### New Feature - -##### Parse Method Parameter Decorators ([#12](https://github.com/babel/babylon/pull/12)) - -> [Method Parameter Decorators](https://goo.gl/8MmCMG) is now a TC39 [stage 0 proposal](https://github.com/tc39/ecma262/blob/master/stage0.md). - -Examples: - -```js -class Foo { - constructor(@foo() x, @bar({ a: 123 }) @baz() y) {} -} - -export default function func(@foo() x, @bar({ a: 123 }) @baz() y) {} - -var obj = { - method(@foo() x, @bar({ a: 123 }) @baz() y) {} -}; -``` - -##### Parse for-await statements (w/ `asyncGenerators` plugin) ([#17](https://github.com/babel/babylon/pull/17)) - -There is also a new node type, `ForAwaitStatement`. - -> [Async generators and for-await](https://github.com/tc39/proposal-async-iteration) are now a [stage 2 proposal](https://github.com/tc39/ecma262#current-proposals). - -Example: - -```js -async function f() { - for await (let x of y); -} -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/babylon/LICENSE b/fundamentals/bug-challenge-es6/node_modules/babylon/LICENSE deleted file mode 100644 index d4c7fc583..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babylon/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -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/fundamentals/bug-challenge-es6/node_modules/babylon/README.md b/fundamentals/bug-challenge-es6/node_modules/babylon/README.md deleted file mode 100644 index f35802063..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babylon/README.md +++ /dev/null @@ -1,122 +0,0 @@ -

- babylon -

- -

- Babylon is a JavaScript parser used in Babel. -

- -

- Travis Status - Codecov Status -

- - - The latest ECMAScript version enabled by default (ES2017). - - Comment attachment. - - Support for JSX and Flow. - - Support for experimental language proposals (accepting PRs for anything at least [stage-0](https://github.com/tc39/proposals/blob/master/stage-0-proposals.md)). - -## Credits - -Heavily based on [acorn](https://github.com/marijnh/acorn) and [acorn-jsx](https://github.com/RReverser/acorn-jsx), -thanks to the awesome work of [@RReverser](https://github.com/RReverser) and [@marijnh](https://github.com/marijnh). - -Significant diversions are expected to occur in the future such as streaming, EBNF definitions, sweet.js integration, interspatial parsing and more. - -## API - -### `babylon.parse(code, [options])` - -### Options - -- **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. - -- **allowReturnOutsideFunction**: By default, a return statement at - the top level raises an error. Set this to `true` to accept such - code. - -- **allowSuperOutsideMethod** TODO - -- **sourceType**: Indicate the mode the code should be parsed in. Can be - either `"script"` or `"module"`. - -- **sourceFilename**: Correlate output AST nodes with their source filename. Useful when generating code and source maps from the ASTs of multiple input files. - -- **plugins**: Array containing the plugins that you want to enable. - -### Output - -Babylon generates AST according to [Babel AST format][]. -It is based on [ESTree spec][] with the following deviations: - -- [Literal][] token is replaced with [StringLiteral][], [NumericLiteral][], [BooleanLiteral][], [NullLiteral][], [RegExpLiteral][] -- [Property][] token is replaced with [ObjectProperty][] and [ObjectMethod][] -- [MethodDefinition][] is replaced with [ClassMethod][] -- [Program][] and [BlockStatement][] contain additional `directives` field with [Directive][] and [DirectiveLiteral][] -- [ClassMethod][], [ObjectProperty][], and [ObjectMethod][] value property's properties in [FunctionExpression][] is coerced/brought into the main method node. - -AST for JSX code is based on [Facebook JSX AST][] with the addition of one node type: - -- `JSXText` - -[Babel AST format]: https://github.com/babel/babylon/blob/master/ast/spec.md -[ESTree spec]: https://github.com/estree/estree - -[Literal]: https://github.com/estree/estree/blob/master/es5.md#literal -[Property]: https://github.com/estree/estree/blob/master/es5.md#property -[MethodDefinition]: https://github.com/estree/estree/blob/master/es2015.md#methoddefinition - -[StringLiteral]: https://github.com/babel/babylon/blob/master/ast/spec.md#stringliteral -[NumericLiteral]: https://github.com/babel/babylon/blob/master/ast/spec.md#numericliteral -[BooleanLiteral]: https://github.com/babel/babylon/blob/master/ast/spec.md#booleanliteral -[NullLiteral]: https://github.com/babel/babylon/blob/master/ast/spec.md#nullliteral -[RegExpLiteral]: https://github.com/babel/babylon/blob/master/ast/spec.md#regexpliteral -[ObjectProperty]: https://github.com/babel/babylon/blob/master/ast/spec.md#objectproperty -[ObjectMethod]: https://github.com/babel/babylon/blob/master/ast/spec.md#objectmethod -[ClassMethod]: https://github.com/babel/babylon/blob/master/ast/spec.md#classmethod -[Program]: https://github.com/babel/babylon/blob/master/ast/spec.md#programs -[BlockStatement]: https://github.com/babel/babylon/blob/master/ast/spec.md#blockstatement -[Directive]: https://github.com/babel/babylon/blob/master/ast/spec.md#directive -[DirectiveLiteral]: https://github.com/babel/babylon/blob/master/ast/spec.md#directiveliteral -[FunctionExpression]: https://github.com/babel/babylon/blob/master/ast/spec.md#functionexpression - -[Facebook JSX AST]: https://github.com/facebook/jsx/blob/master/AST.md - -### Semver - -Babylon follows semver in most situations. The only thing to note is that some spec-compliancy bug fixes may be released under patch versions. - -For example: We push a fix to early error on something like [#107](https://github.com/babel/babylon/pull/107) - multiple default exports per file. That would be considered a bug fix even though it would cause a build to fail. - -### Example - -```javascript -require("babylon").parse("code", { - // parse in strict mode and allow module declarations - sourceType: "module", - - plugins: [ - // enable jsx and flow syntax - "jsx", - "flow" - ] -}); -``` - -### Plugins - -> You can use `"*"` to include everything (may be useful in certain cases) - - - `jsx` - - `flow` - - `doExpressions` - - `objectRestSpread` - - `decorators` - - `classProperties` - - `exportExtensions` - - `asyncGenerators` - - `functionBind` - - `functionSent` - - `dynamicImport` diff --git a/fundamentals/bug-challenge-es6/node_modules/babylon/bin/babylon.js b/fundamentals/bug-challenge-es6/node_modules/babylon/bin/babylon.js deleted file mode 100755 index 449ddfed0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babylon/bin/babylon.js +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env node -/* eslint no-var: 0 */ - -var babylon = require(".."); -var fs = require("fs"); - -var filename = process.argv[2]; -if (!filename) { - console.error("no filename specified"); - process.exit(0); -} - -var file = fs.readFileSync(filename, "utf8"); -var ast = babylon.parse(file); - -console.log(JSON.stringify(ast, null, " ")); diff --git a/fundamentals/bug-challenge-es6/node_modules/babylon/bin/generate-identifier-regex.js b/fundamentals/bug-challenge-es6/node_modules/babylon/bin/generate-identifier-regex.js deleted file mode 100644 index 76cc7f304..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babylon/bin/generate-identifier-regex.js +++ /dev/null @@ -1,62 +0,0 @@ -"use strict"; - -// Which Unicode version should be used? -const version = "9.0.0"; - -const start = require("unicode-" + version + "/Binary_Property/ID_Start/code-points.js") - .filter(function(ch) { return ch > 0x7f; }); -let last = -1; -const cont = [0x200c, 0x200d].concat( - require("unicode-" + version + "/Binary_Property/ID_Continue/code-points.js") - .filter(function(ch) { - return ch > 0x7f && search(start, ch, last + 1) == -1; - }) - ); - -function search(arr, ch, starting) { - for (let i = starting; arr[i] <= ch && i < arr.length; last = i++) - if (arr[i] === ch) - return i; - return -1; -} - -function pad(str, width) { - while (str.length < width) str = "0" + str; - return str; -} - -function esc(code) { - const hex = code.toString(16); - if (hex.length <= 2) return "\\x" + pad(hex, 2); - else return "\\u" + pad(hex, 4); -} - -function generate(chars) { - const astral = []; - let re = ""; - for (let i = 0, at = 0x10000; i < chars.length; i++) { - const from = chars[i]; - let 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}; -} - -const startData = generate(start); -const contData = generate(cont); - -console.log("let nonASCIIidentifierStartChars = \"" + startData.nonASCII + "\";"); -console.log("let nonASCIIidentifierChars = \"" + contData.nonASCII + "\";"); -console.log("const astralIdentifierStartCodes = " + JSON.stringify(startData.astral) + ";"); -console.log("const astralIdentifierCodes = " + JSON.stringify(contData.astral) + ";"); diff --git a/fundamentals/bug-challenge-es6/node_modules/babylon/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/babylon/lib/index.js deleted file mode 100644 index 29f9d8ef5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/babylon/lib/index.js +++ /dev/null @@ -1,6470 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -/* eslint max-len: 0 */ - -// 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. - -function makePredicate(words) { - words = words.split(" "); - return function (str) { - return words.indexOf(str) >= 0; - }; -} - -// Reserved word lists for various dialects of the language - -var reservedWords = { - 6: makePredicate("enum await"), - strict: makePredicate("implements interface let package private protected public static yield"), - strictBind: makePredicate("eval arguments") -}; - -// And the keywords - -var isKeyword$1 = makePredicate("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 let const class extends export import yield super"); - -// ## 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 = "\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC"; -var nonASCIIidentifierChars = "\u200C\u200D\xB7\u0300-\u036F\u0387\u0483-\u0487\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u0669\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u06F0-\u06F9\u0711\u0730-\u074A\u07A6-\u07B0\u07C0-\u07C9\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0966-\u096F\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u09E6-\u09EF\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A66-\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B66-\u0B6F\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0CE6-\u0CEF\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D66-\u0D6F\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0E50-\u0E59\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0ED0-\u0ED9\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1040-\u1049\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F-\u109D\u135D-\u135F\u1369-\u1371\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u18A9\u1920-\u192B\u1930-\u193B\u1946-\u194F\u19D0-\u19DA\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AB0-\u1ABD\u1B00-\u1B04\u1B34-\u1B44\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BB0-\u1BB9\u1BE6-\u1BF3\u1C24-\u1C37\u1C40-\u1C49\u1C50-\u1C59\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u203F\u2040\u2054\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA620-\uA629\uA66F\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F1\uA900-\uA909\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9D0-\uA9D9\uA9E5\uA9F0-\uA9F9\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA50-\uAA59\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uABF0-\uABF9\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFF10-\uFF19\uFF3F"; - -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 `bin/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, 19, 35, 5, 35, 5, 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, 66, 18, 2, 1, 11, 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, 56, 50, 14, 50, 785, 52, 76, 44, 33, 24, 27, 35, 42, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 54, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 86, 25, 391, 63, 32, 0, 449, 56, 264, 8, 2, 36, 18, 0, 50, 29, 881, 921, 103, 110, 18, 195, 2749, 1070, 4050, 582, 8634, 568, 8, 30, 114, 29, 19, 47, 17, 3, 32, 20, 6, 18, 881, 68, 12, 0, 67, 12, 65, 0, 32, 6124, 20, 754, 9486, 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, 60, 67, 1213, 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, 3, 5761, 10591, 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, 10, 2, 4, 9, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 57, 0, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 87, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 423, 9, 838, 7, 2, 7, 17, 9, 57, 21, 2, 13, 19882, 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, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 2214, 6, 110, 6, 6, 9, 792487, 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) { - 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)); - return isInAstralSet(code, astralIdentifierStartCodes); -} - -// Test whether a given character is part of an identifier. - -function isIdentifierChar(code) { - 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)); - return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes); -} - -// A second optional argument can be given to further configure -var defaultOptions = { - // Source type ("script" or "module") for different semantics - sourceType: "script", - // Source filename. - sourceFilename: undefined, - // 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, - // TODO - allowSuperOutsideMethod: false, - // An array of plugins to enable - plugins: [], - // TODO - strictMode: null -}; - -// Interpret and default an options object - -function getOptions(opts) { - var options = {}; - for (var key in defaultOptions) { - options[key] = opts && key in opts ? opts[key] : defaultOptions[key]; - } - return options; -} - -function _classCallCheck$2(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -// ## Token types - -// The assignment of fine-grained, information-carrying type objects -// allows the tokenizer to store the information it has about a -// token in a way that is very cheap for the parser to look up. - -// All token type variables start with an underscore, to make them -// easy to recognize. - -// The `beforeExpr` property is used to disambiguate between regular -// expressions and divisions. It is set on all token types that can -// be followed by an expression (thus, a slash after them would be a -// regular expression). -// -// `isLoop` marks a keyword as starting a loop, which is important -// to know when parsing a label, in order to allow or disallow -// continue jumps to that label. - -var TokenType = function TokenType(label) { - var conf = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - _classCallCheck$2(this, TokenType); - - this.label = label; - this.keyword = conf.keyword; - this.beforeExpr = !!conf.beforeExpr; - this.startsExpr = !!conf.startsExpr; - this.rightAssociative = !!conf.rightAssociative; - this.isLoop = !!conf.isLoop; - this.isAssign = !!conf.isAssign; - this.prefix = !!conf.prefix; - this.postfix = !!conf.postfix; - this.binop = conf.binop || null; - this.updateContext = null; -}; - -function binop(name, prec) { - return new TokenType(name, { beforeExpr: true, binop: prec }); -} -var beforeExpr = { beforeExpr: true }; -var startsExpr = { startsExpr: true }; - -var types = { - num: new TokenType("num", startsExpr), - regexp: new TokenType("regexp", startsExpr), - string: new TokenType("string", startsExpr), - name: new TokenType("name", startsExpr), - eof: new TokenType("eof"), - - // Punctuation token types. - bracketL: new TokenType("[", { beforeExpr: true, startsExpr: true }), - bracketR: new TokenType("]"), - braceL: new TokenType("{", { beforeExpr: true, startsExpr: true }), - braceBarL: new TokenType("{|", { beforeExpr: true, startsExpr: true }), - braceR: new TokenType("}"), - braceBarR: new TokenType("|}"), - parenL: new TokenType("(", { beforeExpr: true, startsExpr: true }), - parenR: new TokenType(")"), - comma: new TokenType(",", beforeExpr), - semi: new TokenType(";", beforeExpr), - colon: new TokenType(":", beforeExpr), - doubleColon: new TokenType("::", beforeExpr), - dot: new TokenType("."), - question: new TokenType("?", beforeExpr), - arrow: new TokenType("=>", beforeExpr), - template: new TokenType("template"), - ellipsis: new TokenType("...", beforeExpr), - backQuote: new TokenType("`", startsExpr), - dollarBraceL: new TokenType("${", { beforeExpr: true, startsExpr: true }), - at: new TokenType("@"), - - // Operators. These carry several kinds of properties to help the - // parser use them properly (the presence of these properties is - // what categorizes them as operators). - // - // `binop`, when present, specifies that this operator is a binary - // operator, and will refer to its precedence. - // - // `prefix` and `postfix` mark the operator as a prefix or postfix - // unary operator. - // - // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as - // binary operators with a very low precedence, that should result - // in AssignmentExpression nodes. - - eq: new TokenType("=", { beforeExpr: true, isAssign: true }), - assign: new TokenType("_=", { beforeExpr: true, isAssign: true }), - incDec: new TokenType("++/--", { prefix: true, postfix: true, startsExpr: true }), - prefix: new TokenType("prefix", { beforeExpr: true, prefix: true, startsExpr: true }), - logicalOR: binop("||", 1), - logicalAND: binop("&&", 2), - bitwiseOR: binop("|", 3), - bitwiseXOR: binop("^", 4), - bitwiseAND: binop("&", 5), - equality: binop("==/!=", 6), - relational: binop("", 7), - bitShift: binop("<>", 8), - plusMin: new TokenType("+/-", { beforeExpr: true, binop: 9, prefix: true, startsExpr: true }), - modulo: binop("%", 10), - star: binop("*", 10), - slash: binop("/", 10), - exponent: new TokenType("**", { beforeExpr: true, binop: 11, rightAssociative: true }) -}; - -// Map keyword names to token types. - -var keywords = {}; - -// Succinct definitions of keyword token types -function kw(name) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - options.keyword = name; - keywords[name] = types["_" + name] = new TokenType(name, options); -} - -kw("break"); -kw("case", beforeExpr); -kw("catch"); -kw("continue"); -kw("debugger"); -kw("default", beforeExpr); -kw("do", { isLoop: true, beforeExpr: true }); -kw("else", beforeExpr); -kw("finally"); -kw("for", { isLoop: true }); -kw("function", startsExpr); -kw("if"); -kw("return", beforeExpr); -kw("switch"); -kw("throw", beforeExpr); -kw("try"); -kw("var"); -kw("let"); -kw("const"); -kw("while", { isLoop: true }); -kw("with"); -kw("new", { beforeExpr: true, startsExpr: true }); -kw("this", startsExpr); -kw("super", startsExpr); -kw("class"); -kw("extends", beforeExpr); -kw("export"); -kw("import"); -kw("yield", { beforeExpr: true, startsExpr: true }); -kw("null", startsExpr); -kw("true", startsExpr); -kw("false", startsExpr); -kw("in", { beforeExpr: true, binop: 7 }); -kw("instanceof", { beforeExpr: true, binop: 7 }); -kw("typeof", { beforeExpr: true, prefix: true, startsExpr: true }); -kw("void", { beforeExpr: true, prefix: true, startsExpr: true }); -kw("delete", { beforeExpr: true, prefix: true, startsExpr: true }); - -// Matches a whole line break (where CRLF is considered a single -// line break). Used to count lines. - -var lineBreak = /\r\n?|\n|\u2028|\u2029/; -var lineBreakG = new RegExp(lineBreak.source, "g"); - -function isNewLine(code) { - return code === 10 || code === 13 || code === 0x2028 || code === 0x2029; -} - -var nonASCIIwhitespace = /[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/; - -function _classCallCheck$3(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -// 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 - -var TokContext = function TokContext(token, isExpr, preserveSpace, override) { - _classCallCheck$3(this, TokContext); - - this.token = token; - this.isExpr = !!isExpr; - this.preserveSpace = !!preserveSpace; - this.override = override; -}; - -var types$1 = { - braceStatement: new TokContext("{", false), - braceExpression: new TokContext("{", true), - templateQuasi: new TokContext("${", true), - parenStatement: new TokContext("(", false), - parenExpression: new TokContext("(", true), - template: new TokContext("`", true, true, function (p) { - return p.readTmplToken(); - }), - functionExpression: new TokContext("function", true) -}; - -// Token-specific context update code - -types.parenR.updateContext = types.braceR.updateContext = function () { - if (this.state.context.length === 1) { - this.state.exprAllowed = true; - return; - } - - var out = this.state.context.pop(); - if (out === types$1.braceStatement && this.curContext() === types$1.functionExpression) { - this.state.context.pop(); - this.state.exprAllowed = false; - } else if (out === types$1.templateQuasi) { - this.state.exprAllowed = true; - } else { - this.state.exprAllowed = !out.isExpr; - } -}; - -types.name.updateContext = function (prevType) { - this.state.exprAllowed = false; - - if (prevType === types._let || prevType === types._const || prevType === types._var) { - if (lineBreak.test(this.input.slice(this.state.end))) { - this.state.exprAllowed = true; - } - } -}; - -types.braceL.updateContext = function (prevType) { - this.state.context.push(this.braceIsBlock(prevType) ? types$1.braceStatement : types$1.braceExpression); - this.state.exprAllowed = true; -}; - -types.dollarBraceL.updateContext = function () { - this.state.context.push(types$1.templateQuasi); - this.state.exprAllowed = true; -}; - -types.parenL.updateContext = function (prevType) { - var statementParens = prevType === types._if || prevType === types._for || prevType === types._with || prevType === types._while; - this.state.context.push(statementParens ? types$1.parenStatement : types$1.parenExpression); - this.state.exprAllowed = true; -}; - -types.incDec.updateContext = function () { - // tokExprAllowed stays unchanged -}; - -types._function.updateContext = function () { - if (this.curContext() !== types$1.braceStatement) { - this.state.context.push(types$1.functionExpression); - } - - this.state.exprAllowed = false; -}; - -types.backQuote.updateContext = function () { - if (this.curContext() === types$1.template) { - this.state.context.pop(); - } else { - this.state.context.push(types$1.template); - } - this.state.exprAllowed = false; -}; - -function _classCallCheck$4(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -// These are used when `options.locations` is on, for the -// `startLoc` and `endLoc` properties. - -var Position = function Position(line, col) { - _classCallCheck$4(this, Position); - - this.line = line; - this.column = col; -}; - -var SourceLocation = function SourceLocation(start, end) { - _classCallCheck$4(this, SourceLocation); - - this.start = start; - this.end = end; -}; - -// 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. - -function getLineInfo(input, offset) { - for (var line = 1, cur = 0;;) { - lineBreakG.lastIndex = cur; - var match = lineBreakG.exec(input); - if (match && match.index < offset) { - ++line; - cur = match.index + match[0].length; - } else { - return new Position(line, offset - cur); - } - } -} - -function _classCallCheck$5(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var State = function () { - function State() { - _classCallCheck$5(this, State); - } - - State.prototype.init = function init(options, input) { - this.strict = options.strictMode === false ? false : options.sourceType === "module"; - - this.input = input; - - this.potentialArrowAt = -1; - - this.inMethod = this.inFunction = this.inGenerator = this.inAsync = this.inType = this.noAnonFunctionType = false; - - this.labels = []; - - this.decorators = []; - - this.tokens = []; - - this.comments = []; - - this.trailingComments = []; - this.leadingComments = []; - this.commentStack = []; - - this.pos = this.lineStart = 0; - this.curLine = 1; - - this.type = types.eof; - this.value = null; - this.start = this.end = this.pos; - this.startLoc = this.endLoc = this.curPosition(); - - this.lastTokEndLoc = this.lastTokStartLoc = null; - this.lastTokStart = this.lastTokEnd = this.pos; - - this.context = [types$1.braceStatement]; - this.exprAllowed = true; - - this.containsEsc = this.containsOctal = false; - this.octalPosition = null; - - this.exportedIdentifiers = []; - - return this; - }; - - // TODO - - - // TODO - - - // Used to signify the start of a potential arrow function - - - // Flags to track whether we are in a function, a generator. - - - // Labels in scope. - - - // Leading decorators. - - - // Token store. - - - // Comment store. - - - // Comment attachment store - - - // The current position of the tokenizer in the input. - - - // Properties of the current token: - // Its type - - - // For tokens that include more information than their type, the value - - - // Its start and end offset - - - // And, if locations are used, the {line, column} object - // corresponding to those offsets - - - // Position information for the previous token - - - // The context stack is used to superficially track syntactic - // context to predict whether a regular expression is allowed in a - // given position. - - - // 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. - - - // TODO - - - // Names of exports store. `default` is stored as a name for both - // `export default foo;` and `export { foo as default };`. - - - State.prototype.curPosition = function curPosition() { - return new Position(this.curLine, this.pos - this.lineStart); - }; - - State.prototype.clone = function clone(skipArrays) { - var state = new State(); - for (var key in this) { - var val = this[key]; - - if ((!skipArrays || key === "context") && Array.isArray(val)) { - val = val.slice(); - } - - state[key] = val; - } - return state; - }; - - return State; -}(); - -function _classCallCheck$1(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/* eslint indent: 0 */ - -// 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(state) { - _classCallCheck$1(this, Token); - - this.type = state.type; - this.value = state.value; - this.start = state.start; - this.end = state.end; - this.loc = new SourceLocation(state.startLoc, state.endLoc); -}; - -// ## Tokenizer - -function codePointToString(code) { - // UTF-16 Decoding - if (code <= 0xFFFF) { - return String.fromCharCode(code); - } else { - return String.fromCharCode((code - 0x10000 >> 10) + 0xD800, (code - 0x10000 & 1023) + 0xDC00); - } -} - -var Tokenizer = function () { - function Tokenizer(options, input) { - _classCallCheck$1(this, Tokenizer); - - this.state = new State(); - this.state.init(options, input); - } - - // Move to the next token - - Tokenizer.prototype.next = function next() { - if (!this.isLookahead) { - this.state.tokens.push(new Token(this.state)); - } - - this.state.lastTokEnd = this.state.end; - this.state.lastTokStart = this.state.start; - this.state.lastTokEndLoc = this.state.endLoc; - this.state.lastTokStartLoc = this.state.startLoc; - this.nextToken(); - }; - - // TODO - - Tokenizer.prototype.eat = function eat(type) { - if (this.match(type)) { - this.next(); - return true; - } else { - return false; - } - }; - - // TODO - - Tokenizer.prototype.match = function match(type) { - return this.state.type === type; - }; - - // TODO - - Tokenizer.prototype.isKeyword = function isKeyword(word) { - return isKeyword$1(word); - }; - - // TODO - - Tokenizer.prototype.lookahead = function lookahead() { - var old = this.state; - this.state = old.clone(true); - - this.isLookahead = true; - this.next(); - this.isLookahead = false; - - var curr = this.state.clone(true); - this.state = old; - return curr; - }; - - // Toggle strict mode. Re-reads the next number or string to please - // pedantic tests (`"use strict"; 010;` should fail). - - Tokenizer.prototype.setStrict = function setStrict(strict) { - this.state.strict = strict; - if (!this.match(types.num) && !this.match(types.string)) return; - this.state.pos = this.state.start; - while (this.state.pos < this.state.lineStart) { - this.state.lineStart = this.input.lastIndexOf("\n", this.state.lineStart - 2) + 1; - --this.state.curLine; - } - this.nextToken(); - }; - - Tokenizer.prototype.curContext = function curContext() { - return this.state.context[this.state.context.length - 1]; - }; - - // Read a single token, updating the parser object's token-related - // properties. - - Tokenizer.prototype.nextToken = function nextToken() { - var curContext = this.curContext(); - if (!curContext || !curContext.preserveSpace) this.skipSpace(); - - this.state.containsOctal = false; - this.state.octalPosition = null; - this.state.start = this.state.pos; - this.state.startLoc = this.state.curPosition(); - if (this.state.pos >= this.input.length) return this.finishToken(types.eof); - - if (curContext.override) { - return curContext.override(this); - } else { - return this.readToken(this.fullCharCodeAtPos()); - } - }; - - Tokenizer.prototype.readToken = function readToken(code) { - // Identifier or keyword. '\uXXXX' sequences are allowed in - // identifiers, so '\' also dispatches to that. - if (isIdentifierStart(code) || code === 92 /* '\' */) { - return this.readWord(); - } else { - return this.getTokenFromCode(code); - } - }; - - Tokenizer.prototype.fullCharCodeAtPos = function fullCharCodeAtPos() { - var code = this.input.charCodeAt(this.state.pos); - if (code <= 0xd7ff || code >= 0xe000) return code; - - var next = this.input.charCodeAt(this.state.pos + 1); - return (code << 10) + next - 0x35fdc00; - }; - - Tokenizer.prototype.pushComment = function pushComment(block, text, start, end, startLoc, endLoc) { - var comment = { - type: block ? "CommentBlock" : "CommentLine", - value: text, - start: start, - end: end, - loc: new SourceLocation(startLoc, endLoc) - }; - - if (!this.isLookahead) { - this.state.tokens.push(comment); - this.state.comments.push(comment); - this.addComment(comment); - } - }; - - Tokenizer.prototype.skipBlockComment = function skipBlockComment() { - var startLoc = this.state.curPosition(); - var start = this.state.pos, - end = this.input.indexOf("*/", this.state.pos += 2); - if (end === -1) this.raise(this.state.pos - 2, "Unterminated comment"); - - this.state.pos = end + 2; - lineBreakG.lastIndex = start; - var match = void 0; - while ((match = lineBreakG.exec(this.input)) && match.index < this.state.pos) { - ++this.state.curLine; - this.state.lineStart = match.index + match[0].length; - } - - this.pushComment(true, this.input.slice(start + 2, end), start, this.state.pos, startLoc, this.state.curPosition()); - }; - - Tokenizer.prototype.skipLineComment = function skipLineComment(startSkip) { - var start = this.state.pos; - var startLoc = this.state.curPosition(); - var ch = this.input.charCodeAt(this.state.pos += startSkip); - while (this.state.pos < this.input.length && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) { - ++this.state.pos; - ch = this.input.charCodeAt(this.state.pos); - } - - this.pushComment(false, this.input.slice(start + startSkip, this.state.pos), start, this.state.pos, startLoc, this.state.curPosition()); - }; - - // Called at the start of the parse and after every token. Skips - // whitespace and comments, and. - - Tokenizer.prototype.skipSpace = function skipSpace() { - loop: while (this.state.pos < this.input.length) { - var ch = this.input.charCodeAt(this.state.pos); - switch (ch) { - case 32:case 160: - // ' ' - ++this.state.pos; - break; - - case 13: - if (this.input.charCodeAt(this.state.pos + 1) === 10) { - ++this.state.pos; - } - - case 10:case 8232:case 8233: - ++this.state.pos; - ++this.state.curLine; - this.state.lineStart = this.state.pos; - break; - - case 47: - // '/' - switch (this.input.charCodeAt(this.state.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 && nonASCIIwhitespace.test(String.fromCharCode(ch))) { - ++this.state.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. - - Tokenizer.prototype.finishToken = function finishToken(type, val) { - this.state.end = this.state.pos; - this.state.endLoc = this.state.curPosition(); - var prevType = this.state.type; - this.state.type = type; - this.state.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. - // - - - Tokenizer.prototype.readToken_dot = function readToken_dot() { - var next = this.input.charCodeAt(this.state.pos + 1); - if (next >= 48 && next <= 57) { - return this.readNumber(true); - } - - var next2 = this.input.charCodeAt(this.state.pos + 2); - if (next === 46 && next2 === 46) { - // 46 = dot '.' - this.state.pos += 3; - return this.finishToken(types.ellipsis); - } else { - ++this.state.pos; - return this.finishToken(types.dot); - } - }; - - Tokenizer.prototype.readToken_slash = function readToken_slash() { - // '/' - if (this.state.exprAllowed) { - ++this.state.pos; - return this.readRegexp(); - } - - var next = this.input.charCodeAt(this.state.pos + 1); - if (next === 61) { - return this.finishOp(types.assign, 2); - } else { - return this.finishOp(types.slash, 1); - } - }; - - Tokenizer.prototype.readToken_mult_modulo = function readToken_mult_modulo(code) { - // '%*' - var type = code === 42 ? types.star : types.modulo; - var width = 1; - var next = this.input.charCodeAt(this.state.pos + 1); - - if (next === 42) { - // '*' - width++; - next = this.input.charCodeAt(this.state.pos + 2); - type = types.exponent; - } - - if (next === 61) { - width++; - type = types.assign; - } - - return this.finishOp(type, width); - }; - - Tokenizer.prototype.readToken_pipe_amp = function readToken_pipe_amp(code) { - // '|&' - var next = this.input.charCodeAt(this.state.pos + 1); - if (next === code) return this.finishOp(code === 124 ? types.logicalOR : types.logicalAND, 2); - if (next === 61) return this.finishOp(types.assign, 2); - if (code === 124 && next === 125 && this.hasPlugin("flow")) return this.finishOp(types.braceBarR, 2); - return this.finishOp(code === 124 ? types.bitwiseOR : types.bitwiseAND, 1); - }; - - Tokenizer.prototype.readToken_caret = function readToken_caret() { - // '^' - var next = this.input.charCodeAt(this.state.pos + 1); - if (next === 61) { - return this.finishOp(types.assign, 2); - } else { - return this.finishOp(types.bitwiseXOR, 1); - } - }; - - Tokenizer.prototype.readToken_plus_min = function readToken_plus_min(code) { - // '+-' - var next = this.input.charCodeAt(this.state.pos + 1); - - if (next === code) { - if (next === 45 && this.input.charCodeAt(this.state.pos + 2) === 62 && lineBreak.test(this.input.slice(this.state.lastTokEnd, this.state.pos))) { - // A `-->` line comment - this.skipLineComment(3); - this.skipSpace(); - return this.nextToken(); - } - return this.finishOp(types.incDec, 2); - } - - if (next === 61) { - return this.finishOp(types.assign, 2); - } else { - return this.finishOp(types.plusMin, 1); - } - }; - - Tokenizer.prototype.readToken_lt_gt = function readToken_lt_gt(code) { - // '<>' - var next = this.input.charCodeAt(this.state.pos + 1); - var size = 1; - - if (next === code) { - size = code === 62 && this.input.charCodeAt(this.state.pos + 2) === 62 ? 3 : 2; - if (this.input.charCodeAt(this.state.pos + size) === 61) return this.finishOp(types.assign, size + 1); - return this.finishOp(types.bitShift, size); - } - - if (next === 33 && code === 60 && this.input.charCodeAt(this.state.pos + 2) === 45 && this.input.charCodeAt(this.state.pos + 3) === 45) { - if (this.inModule) this.unexpected(); - // `' is a single-line comment - index += 3; - skipSingleLineComment(3); - } else { - break; - } - } else if (ch === 0x3C) { // U+003C is '<' - if (source.slice(index + 1, index + 4) === '!--') { - ++index; // `<` - ++index; // `!` - ++index; // `-` - ++index; // `-` - skipSingleLineComment(4); - } else { - break; - } - } else { - break; - } - } - } - - function scanHexEscape(prefix) { - var i, len, ch, code = 0; - - len = (prefix === 'u') ? 4 : 2; - for (i = 0; i < len; ++i) { - if (index < length && isHexDigit(source[index])) { - ch = source[index++]; - code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); - } else { - return ''; - } - } - return String.fromCharCode(code); - } - - function scanUnicodeCodePointEscape() { - var ch, code; - - ch = source[index]; - code = 0; - - // At least, one hex digit is required. - if (ch === '}') { - throwUnexpectedToken(); - } - - while (index < length) { - ch = source[index++]; - if (!isHexDigit(ch)) { - break; - } - code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); - } - - if (code > 0x10FFFF || ch !== '}') { - throwUnexpectedToken(); - } - - return fromCodePoint(code); - } - - function codePointAt(i) { - var cp, first, second; - - cp = source.charCodeAt(i); - if (cp >= 0xD800 && cp <= 0xDBFF) { - second = source.charCodeAt(i + 1); - if (second >= 0xDC00 && second <= 0xDFFF) { - first = cp; - cp = (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000; - } - } - - return cp; - } - - function getComplexIdentifier() { - var cp, ch, id; - - cp = codePointAt(index); - id = fromCodePoint(cp); - index += id.length; - - // '\u' (U+005C, U+0075) denotes an escaped character. - if (cp === 0x5C) { - if (source.charCodeAt(index) !== 0x75) { - throwUnexpectedToken(); - } - ++index; - if (source[index] === '{') { - ++index; - ch = scanUnicodeCodePointEscape(); - } else { - ch = scanHexEscape('u'); - cp = ch.charCodeAt(0); - if (!ch || ch === '\\' || !isIdentifierStart(cp)) { - throwUnexpectedToken(); - } - } - id = ch; - } - - while (index < length) { - cp = codePointAt(index); - if (!isIdentifierPart(cp)) { - break; - } - ch = fromCodePoint(cp); - id += ch; - index += ch.length; - - // '\u' (U+005C, U+0075) denotes an escaped character. - if (cp === 0x5C) { - id = id.substr(0, id.length - 1); - if (source.charCodeAt(index) !== 0x75) { - throwUnexpectedToken(); - } - ++index; - if (source[index] === '{') { - ++index; - ch = scanUnicodeCodePointEscape(); - } else { - ch = scanHexEscape('u'); - cp = ch.charCodeAt(0); - if (!ch || ch === '\\' || !isIdentifierPart(cp)) { - throwUnexpectedToken(); - } - } - id += ch; - } - } - - return id; - } - - function getIdentifier() { - var start, ch; - - start = index++; - while (index < length) { - ch = source.charCodeAt(index); - if (ch === 0x5C) { - // Blackslash (U+005C) marks Unicode escape sequence. - index = start; - return getComplexIdentifier(); - } else if (ch >= 0xD800 && ch < 0xDFFF) { - // Need to handle surrogate pairs. - index = start; - return getComplexIdentifier(); - } - if (isIdentifierPart(ch)) { - ++index; - } else { - break; - } - } - - return source.slice(start, index); - } - - function scanIdentifier() { - var start, id, type; - - start = index; - - // Backslash (U+005C) starts an escaped character. - id = (source.charCodeAt(index) === 0x5C) ? getComplexIdentifier() : getIdentifier(); - - // There is no keyword or literal with only one character. - // Thus, it must be an identifier. - if (id.length === 1) { - type = Token.Identifier; - } else if (isKeyword(id)) { - type = Token.Keyword; - } else if (id === 'null') { - type = Token.NullLiteral; - } else if (id === 'true' || id === 'false') { - type = Token.BooleanLiteral; - } else { - type = Token.Identifier; - } - - return { - type: type, - value: id, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - - // ECMA-262 11.7 Punctuators - - function scanPunctuator() { - var token, str; - - token = { - type: Token.Punctuator, - value: '', - lineNumber: lineNumber, - lineStart: lineStart, - start: index, - end: index - }; - - // Check for most common single-character punctuators. - str = source[index]; - switch (str) { - - case '(': - if (extra.tokenize) { - extra.openParenToken = extra.tokenValues.length; - } - ++index; - break; - - case '{': - if (extra.tokenize) { - extra.openCurlyToken = extra.tokenValues.length; - } - state.curlyStack.push('{'); - ++index; - break; - - case '.': - ++index; - if (source[index] === '.' && source[index + 1] === '.') { - // Spread operator: ... - index += 2; - str = '...'; - } - break; - - case '}': - ++index; - state.curlyStack.pop(); - break; - case ')': - case ';': - case ',': - case '[': - case ']': - case ':': - case '?': - case '~': - ++index; - break; - - default: - // 4-character punctuator. - str = source.substr(index, 4); - if (str === '>>>=') { - index += 4; - } else { - - // 3-character punctuators. - str = str.substr(0, 3); - if (str === '===' || str === '!==' || str === '>>>' || - str === '<<=' || str === '>>=') { - index += 3; - } else { - - // 2-character punctuators. - str = str.substr(0, 2); - if (str === '&&' || str === '||' || str === '==' || str === '!=' || - str === '+=' || str === '-=' || str === '*=' || str === '/=' || - str === '++' || str === '--' || str === '<<' || str === '>>' || - str === '&=' || str === '|=' || str === '^=' || str === '%=' || - str === '<=' || str === '>=' || str === '=>') { - index += 2; - } else { - - // 1-character punctuators. - str = source[index]; - if ('<>=!+-*%&|^/'.indexOf(str) >= 0) { - ++index; - } - } - } - } - } - - if (index === token.start) { - throwUnexpectedToken(); - } - - token.end = index; - token.value = str; - return token; - } - - // ECMA-262 11.8.3 Numeric Literals - - function scanHexLiteral(start) { - var number = ''; - - while (index < length) { - if (!isHexDigit(source[index])) { - break; - } - number += source[index++]; - } - - if (number.length === 0) { - throwUnexpectedToken(); - } - - if (isIdentifierStart(source.charCodeAt(index))) { - throwUnexpectedToken(); - } - - return { - type: Token.NumericLiteral, - value: parseInt('0x' + number, 16), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - function scanBinaryLiteral(start) { - var ch, number; - - number = ''; - - while (index < length) { - ch = source[index]; - if (ch !== '0' && ch !== '1') { - break; - } - number += source[index++]; - } - - if (number.length === 0) { - // only 0b or 0B - throwUnexpectedToken(); - } - - if (index < length) { - ch = source.charCodeAt(index); - /* istanbul ignore else */ - if (isIdentifierStart(ch) || isDecimalDigit(ch)) { - throwUnexpectedToken(); - } - } - - return { - type: Token.NumericLiteral, - value: parseInt(number, 2), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - function scanOctalLiteral(prefix, start) { - var number, octal; - - if (isOctalDigit(prefix)) { - octal = true; - number = '0' + source[index++]; - } else { - octal = false; - ++index; - number = ''; - } - - while (index < length) { - if (!isOctalDigit(source[index])) { - break; - } - number += source[index++]; - } - - if (!octal && number.length === 0) { - // only 0o or 0O - throwUnexpectedToken(); - } - - if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) { - throwUnexpectedToken(); - } - - return { - type: Token.NumericLiteral, - value: parseInt(number, 8), - octal: octal, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - function isImplicitOctalLiteral() { - var i, ch; - - // Implicit octal, unless there is a non-octal digit. - // (Annex B.1.1 on Numeric Literals) - for (i = index + 1; i < length; ++i) { - ch = source[i]; - if (ch === '8' || ch === '9') { - return false; - } - if (!isOctalDigit(ch)) { - return true; - } - } - - return true; - } - - function scanNumericLiteral() { - var number, start, ch; - - ch = source[index]; - assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), - 'Numeric literal must start with a decimal digit or a decimal point'); - - start = index; - number = ''; - if (ch !== '.') { - number = source[index++]; - ch = source[index]; - - // Hex number starts with '0x'. - // Octal number starts with '0'. - // Octal number in ES6 starts with '0o'. - // Binary number in ES6 starts with '0b'. - if (number === '0') { - if (ch === 'x' || ch === 'X') { - ++index; - return scanHexLiteral(start); - } - if (ch === 'b' || ch === 'B') { - ++index; - return scanBinaryLiteral(start); - } - if (ch === 'o' || ch === 'O') { - return scanOctalLiteral(ch, start); - } - - if (isOctalDigit(ch)) { - if (isImplicitOctalLiteral()) { - return scanOctalLiteral(ch, start); - } - } - } - - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - ch = source[index]; - } - - if (ch === '.') { - number += source[index++]; - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - ch = source[index]; - } - - if (ch === 'e' || ch === 'E') { - number += source[index++]; - - ch = source[index]; - if (ch === '+' || ch === '-') { - number += source[index++]; - } - if (isDecimalDigit(source.charCodeAt(index))) { - while (isDecimalDigit(source.charCodeAt(index))) { - number += source[index++]; - } - } else { - throwUnexpectedToken(); - } - } - - if (isIdentifierStart(source.charCodeAt(index))) { - throwUnexpectedToken(); - } - - return { - type: Token.NumericLiteral, - value: parseFloat(number), - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // ECMA-262 11.8.4 String Literals - - function scanStringLiteral() { - var str = '', quote, start, ch, unescaped, octToDec, octal = false; - - quote = source[index]; - assert((quote === '\'' || quote === '"'), - 'String literal must starts with a quote'); - - start = index; - ++index; - - while (index < length) { - ch = source[index++]; - - if (ch === quote) { - quote = ''; - break; - } else if (ch === '\\') { - ch = source[index++]; - if (!ch || !isLineTerminator(ch.charCodeAt(0))) { - switch (ch) { - case 'u': - case 'x': - if (source[index] === '{') { - ++index; - str += scanUnicodeCodePointEscape(); - } else { - unescaped = scanHexEscape(ch); - if (!unescaped) { - throw throwUnexpectedToken(); - } - str += unescaped; - } - break; - case 'n': - str += '\n'; - break; - case 'r': - str += '\r'; - break; - case 't': - str += '\t'; - break; - case 'b': - str += '\b'; - break; - case 'f': - str += '\f'; - break; - case 'v': - str += '\x0B'; - break; - case '8': - case '9': - str += ch; - tolerateUnexpectedToken(); - break; - - default: - if (isOctalDigit(ch)) { - octToDec = octalToDecimal(ch); - - octal = octToDec.octal || octal; - str += String.fromCharCode(octToDec.code); - } else { - str += ch; - } - break; - } - } else { - ++lineNumber; - if (ch === '\r' && source[index] === '\n') { - ++index; - } - lineStart = index; - } - } else if (isLineTerminator(ch.charCodeAt(0))) { - break; - } else { - str += ch; - } - } - - if (quote !== '') { - index = start; - throwUnexpectedToken(); - } - - return { - type: Token.StringLiteral, - value: str, - octal: octal, - lineNumber: startLineNumber, - lineStart: startLineStart, - start: start, - end: index - }; - } - - // ECMA-262 11.8.6 Template Literal Lexical Components - - function scanTemplate() { - var cooked = '', ch, start, rawOffset, terminated, head, tail, restore, unescaped; - - terminated = false; - tail = false; - start = index; - head = (source[index] === '`'); - rawOffset = 2; - - ++index; - - while (index < length) { - ch = source[index++]; - if (ch === '`') { - rawOffset = 1; - tail = true; - terminated = true; - break; - } else if (ch === '$') { - if (source[index] === '{') { - state.curlyStack.push('${'); - ++index; - terminated = true; - break; - } - cooked += ch; - } else if (ch === '\\') { - ch = source[index++]; - if (!isLineTerminator(ch.charCodeAt(0))) { - switch (ch) { - case 'n': - cooked += '\n'; - break; - case 'r': - cooked += '\r'; - break; - case 't': - cooked += '\t'; - break; - case 'u': - case 'x': - if (source[index] === '{') { - ++index; - cooked += scanUnicodeCodePointEscape(); - } else { - restore = index; - unescaped = scanHexEscape(ch); - if (unescaped) { - cooked += unescaped; - } else { - index = restore; - cooked += ch; - } - } - break; - case 'b': - cooked += '\b'; - break; - case 'f': - cooked += '\f'; - break; - case 'v': - cooked += '\v'; - break; - - default: - if (ch === '0') { - if (isDecimalDigit(source.charCodeAt(index))) { - // Illegal: \01 \02 and so on - throwError(Messages.TemplateOctalLiteral); - } - cooked += '\0'; - } else if (isOctalDigit(ch)) { - // Illegal: \1 \2 - throwError(Messages.TemplateOctalLiteral); - } else { - cooked += ch; - } - break; - } - } else { - ++lineNumber; - if (ch === '\r' && source[index] === '\n') { - ++index; - } - lineStart = index; - } - } else if (isLineTerminator(ch.charCodeAt(0))) { - ++lineNumber; - if (ch === '\r' && source[index] === '\n') { - ++index; - } - lineStart = index; - cooked += '\n'; - } else { - cooked += ch; - } - } - - if (!terminated) { - throwUnexpectedToken(); - } - - if (!head) { - state.curlyStack.pop(); - } - - return { - type: Token.Template, - value: { - cooked: cooked, - raw: source.slice(start + 1, index - rawOffset) - }, - head: head, - tail: tail, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - // ECMA-262 11.8.5 Regular Expression Literals - - function testRegExp(pattern, flags) { - // The BMP character to use as a replacement for astral symbols when - // translating an ES6 "u"-flagged pattern to an ES5-compatible - // approximation. - // Note: replacing with '\uFFFF' enables false positives in unlikely - // scenarios. For example, `[\u{1044f}-\u{10440}]` is an invalid - // pattern that would not be detected by this substitution. - var astralSubstitute = '\uFFFF', - tmp = pattern; - - if (flags.indexOf('u') >= 0) { - tmp = tmp - // Replace every Unicode escape sequence with the equivalent - // BMP character or a constant ASCII code point in the case of - // astral symbols. (See the above note on `astralSubstitute` - // for more information.) - .replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g, function ($0, $1, $2) { - var codePoint = parseInt($1 || $2, 16); - if (codePoint > 0x10FFFF) { - throwUnexpectedToken(null, Messages.InvalidRegExp); - } - if (codePoint <= 0xFFFF) { - return String.fromCharCode(codePoint); - } - return astralSubstitute; - }) - // Replace each paired surrogate with a single ASCII symbol to - // avoid throwing on regular expressions that are only valid in - // combination with the "u" flag. - .replace( - /[\uD800-\uDBFF][\uDC00-\uDFFF]/g, - astralSubstitute - ); - } - - // First, detect invalid regular expressions. - try { - RegExp(tmp); - } catch (e) { - throwUnexpectedToken(null, Messages.InvalidRegExp); - } - - // Return a regular expression object for this pattern-flag pair, or - // `null` in case the current environment doesn't support the flags it - // uses. - try { - return new RegExp(pattern, flags); - } catch (exception) { - /* istanbul ignore next */ - return null; - } - } - - function scanRegExpBody() { - var ch, str, classMarker, terminated, body; - - ch = source[index]; - assert(ch === '/', 'Regular expression literal must start with a slash'); - str = source[index++]; - - classMarker = false; - terminated = false; - while (index < length) { - ch = source[index++]; - str += ch; - if (ch === '\\') { - ch = source[index++]; - // ECMA-262 7.8.5 - if (isLineTerminator(ch.charCodeAt(0))) { - throwUnexpectedToken(null, Messages.UnterminatedRegExp); - } - str += ch; - } else if (isLineTerminator(ch.charCodeAt(0))) { - throwUnexpectedToken(null, Messages.UnterminatedRegExp); - } else if (classMarker) { - if (ch === ']') { - classMarker = false; - } - } else { - if (ch === '/') { - terminated = true; - break; - } else if (ch === '[') { - classMarker = true; - } - } - } - - if (!terminated) { - throwUnexpectedToken(null, Messages.UnterminatedRegExp); - } - - // Exclude leading and trailing slash. - body = str.substr(1, str.length - 2); - return { - value: body, - literal: str - }; - } - - function scanRegExpFlags() { - var ch, str, flags, restore; - - str = ''; - flags = ''; - while (index < length) { - ch = source[index]; - if (!isIdentifierPart(ch.charCodeAt(0))) { - break; - } - - ++index; - if (ch === '\\' && index < length) { - ch = source[index]; - if (ch === 'u') { - ++index; - restore = index; - ch = scanHexEscape('u'); - if (ch) { - flags += ch; - for (str += '\\u'; restore < index; ++restore) { - str += source[restore]; - } - } else { - index = restore; - flags += 'u'; - str += '\\u'; - } - tolerateUnexpectedToken(); - } else { - str += '\\'; - tolerateUnexpectedToken(); - } - } else { - flags += ch; - str += ch; - } - } - - return { - value: flags, - literal: str - }; - } - - function scanRegExp() { - var start, body, flags, value; - scanning = true; - - lookahead = null; - skipComment(); - start = index; - - body = scanRegExpBody(); - flags = scanRegExpFlags(); - value = testRegExp(body.value, flags.value); - scanning = false; - if (extra.tokenize) { - return { - type: Token.RegularExpression, - value: value, - regex: { - pattern: body.value, - flags: flags.value - }, - lineNumber: lineNumber, - lineStart: lineStart, - start: start, - end: index - }; - } - - return { - literal: body.literal + flags.literal, - value: value, - regex: { - pattern: body.value, - flags: flags.value - }, - start: start, - end: index - }; - } - - function collectRegex() { - var pos, loc, regex, token; - - skipComment(); - - pos = index; - loc = { - start: { - line: lineNumber, - column: index - lineStart - } - }; - - regex = scanRegExp(); - - loc.end = { - line: lineNumber, - column: index - lineStart - }; - - /* istanbul ignore next */ - if (!extra.tokenize) { - // Pop the previous token, which is likely '/' or '/=' - if (extra.tokens.length > 0) { - token = extra.tokens[extra.tokens.length - 1]; - if (token.range[0] === pos && token.type === 'Punctuator') { - if (token.value === '/' || token.value === '/=') { - extra.tokens.pop(); - } - } - } - - extra.tokens.push({ - type: 'RegularExpression', - value: regex.literal, - regex: regex.regex, - range: [pos, index], - loc: loc - }); - } - - return regex; - } - - function isIdentifierName(token) { - return token.type === Token.Identifier || - token.type === Token.Keyword || - token.type === Token.BooleanLiteral || - token.type === Token.NullLiteral; - } - - // Using the following algorithm: - // https://github.com/mozilla/sweet.js/wiki/design - - function advanceSlash() { - var regex, previous, check; - - function testKeyword(value) { - return value && (value.length > 1) && (value[0] >= 'a') && (value[0] <= 'z'); - } - - previous = extra.tokenValues[extra.tokenValues.length - 1]; - regex = (previous !== null); - - switch (previous) { - case 'this': - case ']': - regex = false; - break; - - case ')': - check = extra.tokenValues[extra.openParenToken - 1]; - regex = (check === 'if' || check === 'while' || check === 'for' || check === 'with'); - break; - - case '}': - // Dividing a function by anything makes little sense, - // but we have to check for that. - regex = false; - if (testKeyword(extra.tokenValues[extra.openCurlyToken - 3])) { - // Anonymous function, e.g. function(){} /42 - check = extra.tokenValues[extra.openCurlyToken - 4]; - regex = check ? (FnExprTokens.indexOf(check) < 0) : false; - } else if (testKeyword(extra.tokenValues[extra.openCurlyToken - 4])) { - // Named function, e.g. function f(){} /42/ - check = extra.tokenValues[extra.openCurlyToken - 5]; - regex = check ? (FnExprTokens.indexOf(check) < 0) : true; - } - } - - return regex ? collectRegex() : scanPunctuator(); - } - - function advance() { - var cp, token; - - if (index >= length) { - return { - type: Token.EOF, - lineNumber: lineNumber, - lineStart: lineStart, - start: index, - end: index - }; - } - - cp = source.charCodeAt(index); - - if (isIdentifierStart(cp)) { - token = scanIdentifier(); - if (strict && isStrictModeReservedWord(token.value)) { - token.type = Token.Keyword; - } - return token; - } - - // Very common: ( and ) and ; - if (cp === 0x28 || cp === 0x29 || cp === 0x3B) { - return scanPunctuator(); - } - - // String literal starts with single quote (U+0027) or double quote (U+0022). - if (cp === 0x27 || cp === 0x22) { - return scanStringLiteral(); - } - - // Dot (.) U+002E can also start a floating-point number, hence the need - // to check the next character. - if (cp === 0x2E) { - if (isDecimalDigit(source.charCodeAt(index + 1))) { - return scanNumericLiteral(); - } - return scanPunctuator(); - } - - if (isDecimalDigit(cp)) { - return scanNumericLiteral(); - } - - // Slash (/) U+002F can also start a regex. - if (extra.tokenize && cp === 0x2F) { - return advanceSlash(); - } - - // Template literals start with ` (U+0060) for template head - // or } (U+007D) for template middle or template tail. - if (cp === 0x60 || (cp === 0x7D && state.curlyStack[state.curlyStack.length - 1] === '${')) { - return scanTemplate(); - } - - // Possible identifier start in a surrogate pair. - if (cp >= 0xD800 && cp < 0xDFFF) { - cp = codePointAt(index); - if (isIdentifierStart(cp)) { - return scanIdentifier(); - } - } - - return scanPunctuator(); - } - - function collectToken() { - var loc, token, value, entry; - - loc = { - start: { - line: lineNumber, - column: index - lineStart - } - }; - - token = advance(); - loc.end = { - line: lineNumber, - column: index - lineStart - }; - - if (token.type !== Token.EOF) { - value = source.slice(token.start, token.end); - entry = { - type: TokenName[token.type], - value: value, - range: [token.start, token.end], - loc: loc - }; - if (token.regex) { - entry.regex = { - pattern: token.regex.pattern, - flags: token.regex.flags - }; - } - if (extra.tokenValues) { - extra.tokenValues.push((entry.type === 'Punctuator' || entry.type === 'Keyword') ? entry.value : null); - } - if (extra.tokenize) { - if (!extra.range) { - delete entry.range; - } - if (!extra.loc) { - delete entry.loc; - } - if (extra.delegate) { - entry = extra.delegate(entry); - } - } - extra.tokens.push(entry); - } - - return token; - } - - function lex() { - var token; - scanning = true; - - lastIndex = index; - lastLineNumber = lineNumber; - lastLineStart = lineStart; - - skipComment(); - - token = lookahead; - - startIndex = index; - startLineNumber = lineNumber; - startLineStart = lineStart; - - lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance(); - scanning = false; - return token; - } - - function peek() { - scanning = true; - - skipComment(); - - lastIndex = index; - lastLineNumber = lineNumber; - lastLineStart = lineStart; - - startIndex = index; - startLineNumber = lineNumber; - startLineStart = lineStart; - - lookahead = (typeof extra.tokens !== 'undefined') ? collectToken() : advance(); - scanning = false; - } - - function Position() { - this.line = startLineNumber; - this.column = startIndex - startLineStart; - } - - function SourceLocation() { - this.start = new Position(); - this.end = null; - } - - function WrappingSourceLocation(startToken) { - this.start = { - line: startToken.lineNumber, - column: startToken.start - startToken.lineStart - }; - this.end = null; - } - - function Node() { - if (extra.range) { - this.range = [startIndex, 0]; - } - if (extra.loc) { - this.loc = new SourceLocation(); - } - } - - function WrappingNode(startToken) { - if (extra.range) { - this.range = [startToken.start, 0]; - } - if (extra.loc) { - this.loc = new WrappingSourceLocation(startToken); - } - } - - WrappingNode.prototype = Node.prototype = { - - processComment: function () { - var lastChild, - innerComments, - leadingComments, - trailingComments, - bottomRight = extra.bottomRightStack, - i, - comment, - last = bottomRight[bottomRight.length - 1]; - - if (this.type === Syntax.Program) { - if (this.body.length > 0) { - return; - } - } - /** - * patch innnerComments for properties empty block - * `function a() {/** comments **\/}` - */ - - if (this.type === Syntax.BlockStatement && this.body.length === 0) { - innerComments = []; - for (i = extra.leadingComments.length - 1; i >= 0; --i) { - comment = extra.leadingComments[i]; - if (this.range[1] >= comment.range[1]) { - innerComments.unshift(comment); - extra.leadingComments.splice(i, 1); - extra.trailingComments.splice(i, 1); - } - } - if (innerComments.length) { - this.innerComments = innerComments; - //bottomRight.push(this); - return; - } - } - - if (extra.trailingComments.length > 0) { - trailingComments = []; - for (i = extra.trailingComments.length - 1; i >= 0; --i) { - comment = extra.trailingComments[i]; - if (comment.range[0] >= this.range[1]) { - trailingComments.unshift(comment); - extra.trailingComments.splice(i, 1); - } - } - extra.trailingComments = []; - } else { - if (last && last.trailingComments && last.trailingComments[0].range[0] >= this.range[1]) { - trailingComments = last.trailingComments; - delete last.trailingComments; - } - } - - // Eating the stack. - while (last && last.range[0] >= this.range[0]) { - lastChild = bottomRight.pop(); - last = bottomRight[bottomRight.length - 1]; - } - - if (lastChild) { - if (lastChild.leadingComments) { - leadingComments = []; - for (i = lastChild.leadingComments.length - 1; i >= 0; --i) { - comment = lastChild.leadingComments[i]; - if (comment.range[1] <= this.range[0]) { - leadingComments.unshift(comment); - lastChild.leadingComments.splice(i, 1); - } - } - - if (!lastChild.leadingComments.length) { - lastChild.leadingComments = undefined; - } - } - } else if (extra.leadingComments.length > 0) { - leadingComments = []; - for (i = extra.leadingComments.length - 1; i >= 0; --i) { - comment = extra.leadingComments[i]; - if (comment.range[1] <= this.range[0]) { - leadingComments.unshift(comment); - extra.leadingComments.splice(i, 1); - } - } - } - - - if (leadingComments && leadingComments.length > 0) { - this.leadingComments = leadingComments; - } - if (trailingComments && trailingComments.length > 0) { - this.trailingComments = trailingComments; - } - - bottomRight.push(this); - }, - - finish: function () { - if (extra.range) { - this.range[1] = lastIndex; - } - if (extra.loc) { - this.loc.end = { - line: lastLineNumber, - column: lastIndex - lastLineStart - }; - if (extra.source) { - this.loc.source = extra.source; - } - } - - if (extra.attachComment) { - this.processComment(); - } - }, - - finishArrayExpression: function (elements) { - this.type = Syntax.ArrayExpression; - this.elements = elements; - this.finish(); - return this; - }, - - finishArrayPattern: function (elements) { - this.type = Syntax.ArrayPattern; - this.elements = elements; - this.finish(); - return this; - }, - - finishArrowFunctionExpression: function (params, defaults, body, expression) { - this.type = Syntax.ArrowFunctionExpression; - this.id = null; - this.params = params; - this.defaults = defaults; - this.body = body; - this.generator = false; - this.expression = expression; - this.finish(); - return this; - }, - - finishAssignmentExpression: function (operator, left, right) { - this.type = Syntax.AssignmentExpression; - this.operator = operator; - this.left = left; - this.right = right; - this.finish(); - return this; - }, - - finishAssignmentPattern: function (left, right) { - this.type = Syntax.AssignmentPattern; - this.left = left; - this.right = right; - this.finish(); - return this; - }, - - finishBinaryExpression: function (operator, left, right) { - this.type = (operator === '||' || operator === '&&') ? Syntax.LogicalExpression : Syntax.BinaryExpression; - this.operator = operator; - this.left = left; - this.right = right; - this.finish(); - return this; - }, - - finishBlockStatement: function (body) { - this.type = Syntax.BlockStatement; - this.body = body; - this.finish(); - return this; - }, - - finishBreakStatement: function (label) { - this.type = Syntax.BreakStatement; - this.label = label; - this.finish(); - return this; - }, - - finishCallExpression: function (callee, args) { - this.type = Syntax.CallExpression; - this.callee = callee; - this.arguments = args; - this.finish(); - return this; - }, - - finishCatchClause: function (param, body) { - this.type = Syntax.CatchClause; - this.param = param; - this.body = body; - this.finish(); - return this; - }, - - finishClassBody: function (body) { - this.type = Syntax.ClassBody; - this.body = body; - this.finish(); - return this; - }, - - finishClassDeclaration: function (id, superClass, body) { - this.type = Syntax.ClassDeclaration; - this.id = id; - this.superClass = superClass; - this.body = body; - this.finish(); - return this; - }, - - finishClassExpression: function (id, superClass, body) { - this.type = Syntax.ClassExpression; - this.id = id; - this.superClass = superClass; - this.body = body; - this.finish(); - return this; - }, - - finishConditionalExpression: function (test, consequent, alternate) { - this.type = Syntax.ConditionalExpression; - this.test = test; - this.consequent = consequent; - this.alternate = alternate; - this.finish(); - return this; - }, - - finishContinueStatement: function (label) { - this.type = Syntax.ContinueStatement; - this.label = label; - this.finish(); - return this; - }, - - finishDebuggerStatement: function () { - this.type = Syntax.DebuggerStatement; - this.finish(); - return this; - }, - - finishDoWhileStatement: function (body, test) { - this.type = Syntax.DoWhileStatement; - this.body = body; - this.test = test; - this.finish(); - return this; - }, - - finishEmptyStatement: function () { - this.type = Syntax.EmptyStatement; - this.finish(); - return this; - }, - - finishExpressionStatement: function (expression) { - this.type = Syntax.ExpressionStatement; - this.expression = expression; - this.finish(); - return this; - }, - - finishForStatement: function (init, test, update, body) { - this.type = Syntax.ForStatement; - this.init = init; - this.test = test; - this.update = update; - this.body = body; - this.finish(); - return this; - }, - - finishForOfStatement: function (left, right, body) { - this.type = Syntax.ForOfStatement; - this.left = left; - this.right = right; - this.body = body; - this.finish(); - return this; - }, - - finishForInStatement: function (left, right, body) { - this.type = Syntax.ForInStatement; - this.left = left; - this.right = right; - this.body = body; - this.each = false; - this.finish(); - return this; - }, - - finishFunctionDeclaration: function (id, params, defaults, body, generator) { - this.type = Syntax.FunctionDeclaration; - this.id = id; - this.params = params; - this.defaults = defaults; - this.body = body; - this.generator = generator; - this.expression = false; - this.finish(); - return this; - }, - - finishFunctionExpression: function (id, params, defaults, body, generator) { - this.type = Syntax.FunctionExpression; - this.id = id; - this.params = params; - this.defaults = defaults; - this.body = body; - this.generator = generator; - this.expression = false; - this.finish(); - return this; - }, - - finishIdentifier: function (name) { - this.type = Syntax.Identifier; - this.name = name; - this.finish(); - return this; - }, - - finishIfStatement: function (test, consequent, alternate) { - this.type = Syntax.IfStatement; - this.test = test; - this.consequent = consequent; - this.alternate = alternate; - this.finish(); - return this; - }, - - finishLabeledStatement: function (label, body) { - this.type = Syntax.LabeledStatement; - this.label = label; - this.body = body; - this.finish(); - return this; - }, - - finishLiteral: function (token) { - this.type = Syntax.Literal; - this.value = token.value; - this.raw = source.slice(token.start, token.end); - if (token.regex) { - this.regex = token.regex; - } - this.finish(); - return this; - }, - - finishMemberExpression: function (accessor, object, property) { - this.type = Syntax.MemberExpression; - this.computed = accessor === '['; - this.object = object; - this.property = property; - this.finish(); - return this; - }, - - finishMetaProperty: function (meta, property) { - this.type = Syntax.MetaProperty; - this.meta = meta; - this.property = property; - this.finish(); - return this; - }, - - finishNewExpression: function (callee, args) { - this.type = Syntax.NewExpression; - this.callee = callee; - this.arguments = args; - this.finish(); - return this; - }, - - finishObjectExpression: function (properties) { - this.type = Syntax.ObjectExpression; - this.properties = properties; - this.finish(); - return this; - }, - - finishObjectPattern: function (properties) { - this.type = Syntax.ObjectPattern; - this.properties = properties; - this.finish(); - return this; - }, - - finishPostfixExpression: function (operator, argument) { - this.type = Syntax.UpdateExpression; - this.operator = operator; - this.argument = argument; - this.prefix = false; - this.finish(); - return this; - }, - - finishProgram: function (body, sourceType) { - this.type = Syntax.Program; - this.body = body; - this.sourceType = sourceType; - this.finish(); - return this; - }, - - finishProperty: function (kind, key, computed, value, method, shorthand) { - this.type = Syntax.Property; - this.key = key; - this.computed = computed; - this.value = value; - this.kind = kind; - this.method = method; - this.shorthand = shorthand; - this.finish(); - return this; - }, - - finishRestElement: function (argument) { - this.type = Syntax.RestElement; - this.argument = argument; - this.finish(); - return this; - }, - - finishReturnStatement: function (argument) { - this.type = Syntax.ReturnStatement; - this.argument = argument; - this.finish(); - return this; - }, - - finishSequenceExpression: function (expressions) { - this.type = Syntax.SequenceExpression; - this.expressions = expressions; - this.finish(); - return this; - }, - - finishSpreadElement: function (argument) { - this.type = Syntax.SpreadElement; - this.argument = argument; - this.finish(); - return this; - }, - - finishSwitchCase: function (test, consequent) { - this.type = Syntax.SwitchCase; - this.test = test; - this.consequent = consequent; - this.finish(); - return this; - }, - - finishSuper: function () { - this.type = Syntax.Super; - this.finish(); - return this; - }, - - finishSwitchStatement: function (discriminant, cases) { - this.type = Syntax.SwitchStatement; - this.discriminant = discriminant; - this.cases = cases; - this.finish(); - return this; - }, - - finishTaggedTemplateExpression: function (tag, quasi) { - this.type = Syntax.TaggedTemplateExpression; - this.tag = tag; - this.quasi = quasi; - this.finish(); - return this; - }, - - finishTemplateElement: function (value, tail) { - this.type = Syntax.TemplateElement; - this.value = value; - this.tail = tail; - this.finish(); - return this; - }, - - finishTemplateLiteral: function (quasis, expressions) { - this.type = Syntax.TemplateLiteral; - this.quasis = quasis; - this.expressions = expressions; - this.finish(); - return this; - }, - - finishThisExpression: function () { - this.type = Syntax.ThisExpression; - this.finish(); - return this; - }, - - finishThrowStatement: function (argument) { - this.type = Syntax.ThrowStatement; - this.argument = argument; - this.finish(); - return this; - }, - - finishTryStatement: function (block, handler, finalizer) { - this.type = Syntax.TryStatement; - this.block = block; - this.guardedHandlers = []; - this.handlers = handler ? [handler] : []; - this.handler = handler; - this.finalizer = finalizer; - this.finish(); - return this; - }, - - finishUnaryExpression: function (operator, argument) { - this.type = (operator === '++' || operator === '--') ? Syntax.UpdateExpression : Syntax.UnaryExpression; - this.operator = operator; - this.argument = argument; - this.prefix = true; - this.finish(); - return this; - }, - - finishVariableDeclaration: function (declarations) { - this.type = Syntax.VariableDeclaration; - this.declarations = declarations; - this.kind = 'var'; - this.finish(); - return this; - }, - - finishLexicalDeclaration: function (declarations, kind) { - this.type = Syntax.VariableDeclaration; - this.declarations = declarations; - this.kind = kind; - this.finish(); - return this; - }, - - finishVariableDeclarator: function (id, init) { - this.type = Syntax.VariableDeclarator; - this.id = id; - this.init = init; - this.finish(); - return this; - }, - - finishWhileStatement: function (test, body) { - this.type = Syntax.WhileStatement; - this.test = test; - this.body = body; - this.finish(); - return this; - }, - - finishWithStatement: function (object, body) { - this.type = Syntax.WithStatement; - this.object = object; - this.body = body; - this.finish(); - return this; - }, - - finishExportSpecifier: function (local, exported) { - this.type = Syntax.ExportSpecifier; - this.exported = exported || local; - this.local = local; - this.finish(); - return this; - }, - - finishImportDefaultSpecifier: function (local) { - this.type = Syntax.ImportDefaultSpecifier; - this.local = local; - this.finish(); - return this; - }, - - finishImportNamespaceSpecifier: function (local) { - this.type = Syntax.ImportNamespaceSpecifier; - this.local = local; - this.finish(); - return this; - }, - - finishExportNamedDeclaration: function (declaration, specifiers, src) { - this.type = Syntax.ExportNamedDeclaration; - this.declaration = declaration; - this.specifiers = specifiers; - this.source = src; - this.finish(); - return this; - }, - - finishExportDefaultDeclaration: function (declaration) { - this.type = Syntax.ExportDefaultDeclaration; - this.declaration = declaration; - this.finish(); - return this; - }, - - finishExportAllDeclaration: function (src) { - this.type = Syntax.ExportAllDeclaration; - this.source = src; - this.finish(); - return this; - }, - - finishImportSpecifier: function (local, imported) { - this.type = Syntax.ImportSpecifier; - this.local = local || imported; - this.imported = imported; - this.finish(); - return this; - }, - - finishImportDeclaration: function (specifiers, src) { - this.type = Syntax.ImportDeclaration; - this.specifiers = specifiers; - this.source = src; - this.finish(); - return this; - }, - - finishYieldExpression: function (argument, delegate) { - this.type = Syntax.YieldExpression; - this.argument = argument; - this.delegate = delegate; - this.finish(); - return this; - } - }; - - - function recordError(error) { - var e, existing; - - for (e = 0; e < extra.errors.length; e++) { - existing = extra.errors[e]; - // Prevent duplicated error. - /* istanbul ignore next */ - if (existing.index === error.index && existing.message === error.message) { - return; - } - } - - extra.errors.push(error); - } - - function constructError(msg, column) { - var error = new Error(msg); - try { - throw error; - } catch (base) { - /* istanbul ignore else */ - if (Object.create && Object.defineProperty) { - error = Object.create(base); - Object.defineProperty(error, 'column', { value: column }); - } - } finally { - return error; - } - } - - function createError(line, pos, description) { - var msg, column, error; - - msg = 'Line ' + line + ': ' + description; - column = pos - (scanning ? lineStart : lastLineStart) + 1; - error = constructError(msg, column); - error.lineNumber = line; - error.description = description; - error.index = pos; - return error; - } - - // Throw an exception - - function throwError(messageFormat) { - var args, msg; - - args = Array.prototype.slice.call(arguments, 1); - msg = messageFormat.replace(/%(\d)/g, - function (whole, idx) { - assert(idx < args.length, 'Message reference must be in range'); - return args[idx]; - } - ); - - throw createError(lastLineNumber, lastIndex, msg); - } - - function tolerateError(messageFormat) { - var args, msg, error; - - args = Array.prototype.slice.call(arguments, 1); - /* istanbul ignore next */ - msg = messageFormat.replace(/%(\d)/g, - function (whole, idx) { - assert(idx < args.length, 'Message reference must be in range'); - return args[idx]; - } - ); - - error = createError(lineNumber, lastIndex, msg); - if (extra.errors) { - recordError(error); - } else { - throw error; - } - } - - // Throw an exception because of the token. - - function unexpectedTokenError(token, message) { - var value, msg = message || Messages.UnexpectedToken; - - if (token) { - if (!message) { - msg = (token.type === Token.EOF) ? Messages.UnexpectedEOS : - (token.type === Token.Identifier) ? Messages.UnexpectedIdentifier : - (token.type === Token.NumericLiteral) ? Messages.UnexpectedNumber : - (token.type === Token.StringLiteral) ? Messages.UnexpectedString : - (token.type === Token.Template) ? Messages.UnexpectedTemplate : - Messages.UnexpectedToken; - - if (token.type === Token.Keyword) { - if (isFutureReservedWord(token.value)) { - msg = Messages.UnexpectedReserved; - } else if (strict && isStrictModeReservedWord(token.value)) { - msg = Messages.StrictReservedWord; - } - } - } - - value = (token.type === Token.Template) ? token.value.raw : token.value; - } else { - value = 'ILLEGAL'; - } - - msg = msg.replace('%0', value); - - return (token && typeof token.lineNumber === 'number') ? - createError(token.lineNumber, token.start, msg) : - createError(scanning ? lineNumber : lastLineNumber, scanning ? index : lastIndex, msg); - } - - function throwUnexpectedToken(token, message) { - throw unexpectedTokenError(token, message); - } - - function tolerateUnexpectedToken(token, message) { - var error = unexpectedTokenError(token, message); - if (extra.errors) { - recordError(error); - } else { - throw error; - } - } - - // Expect the next token to match the specified punctuator. - // If not, an exception will be thrown. - - function expect(value) { - var token = lex(); - if (token.type !== Token.Punctuator || token.value !== value) { - throwUnexpectedToken(token); - } - } - - /** - * @name expectCommaSeparator - * @description Quietly expect a comma when in tolerant mode, otherwise delegates - * to expect(value) - * @since 2.0 - */ - function expectCommaSeparator() { - var token; - - if (extra.errors) { - token = lookahead; - if (token.type === Token.Punctuator && token.value === ',') { - lex(); - } else if (token.type === Token.Punctuator && token.value === ';') { - lex(); - tolerateUnexpectedToken(token); - } else { - tolerateUnexpectedToken(token, Messages.UnexpectedToken); - } - } else { - expect(','); - } - } - - // Expect the next token to match the specified keyword. - // If not, an exception will be thrown. - - function expectKeyword(keyword) { - var token = lex(); - if (token.type !== Token.Keyword || token.value !== keyword) { - throwUnexpectedToken(token); - } - } - - // Return true if the next token matches the specified punctuator. - - function match(value) { - return lookahead.type === Token.Punctuator && lookahead.value === value; - } - - // Return true if the next token matches the specified keyword - - function matchKeyword(keyword) { - return lookahead.type === Token.Keyword && lookahead.value === keyword; - } - - // Return true if the next token matches the specified contextual keyword - // (where an identifier is sometimes a keyword depending on the context) - - function matchContextualKeyword(keyword) { - return lookahead.type === Token.Identifier && lookahead.value === keyword; - } - - // Return true if the next token is an assignment operator - - function matchAssign() { - var op; - - if (lookahead.type !== Token.Punctuator) { - return false; - } - op = lookahead.value; - return op === '=' || - op === '*=' || - op === '/=' || - op === '%=' || - op === '+=' || - op === '-=' || - op === '<<=' || - op === '>>=' || - op === '>>>=' || - op === '&=' || - op === '^=' || - op === '|='; - } - - function consumeSemicolon() { - // Catch the very common case first: immediately a semicolon (U+003B). - if (source.charCodeAt(startIndex) === 0x3B || match(';')) { - lex(); - return; - } - - if (hasLineTerminator) { - return; - } - - // FIXME(ikarienator): this is seemingly an issue in the previous location info convention. - lastIndex = startIndex; - lastLineNumber = startLineNumber; - lastLineStart = startLineStart; - - if (lookahead.type !== Token.EOF && !match('}')) { - throwUnexpectedToken(lookahead); - } - } - - // Cover grammar support. - // - // When an assignment expression position starts with an left parenthesis, the determination of the type - // of the syntax is to be deferred arbitrarily long until the end of the parentheses pair (plus a lookahead) - // or the first comma. This situation also defers the determination of all the expressions nested in the pair. - // - // There are three productions that can be parsed in a parentheses pair that needs to be determined - // after the outermost pair is closed. They are: - // - // 1. AssignmentExpression - // 2. BindingElements - // 3. AssignmentTargets - // - // In order to avoid exponential backtracking, we use two flags to denote if the production can be - // binding element or assignment target. - // - // The three productions have the relationship: - // - // BindingElements ⊆ AssignmentTargets ⊆ AssignmentExpression - // - // with a single exception that CoverInitializedName when used directly in an Expression, generates - // an early error. Therefore, we need the third state, firstCoverInitializedNameError, to track the - // first usage of CoverInitializedName and report it when we reached the end of the parentheses pair. - // - // isolateCoverGrammar function runs the given parser function with a new cover grammar context, and it does not - // effect the current flags. This means the production the parser parses is only used as an expression. Therefore - // the CoverInitializedName check is conducted. - // - // inheritCoverGrammar function runs the given parse function with a new cover grammar context, and it propagates - // the flags outside of the parser. This means the production the parser parses is used as a part of a potential - // pattern. The CoverInitializedName check is deferred. - function isolateCoverGrammar(parser) { - var oldIsBindingElement = isBindingElement, - oldIsAssignmentTarget = isAssignmentTarget, - oldFirstCoverInitializedNameError = firstCoverInitializedNameError, - result; - isBindingElement = true; - isAssignmentTarget = true; - firstCoverInitializedNameError = null; - result = parser(); - if (firstCoverInitializedNameError !== null) { - throwUnexpectedToken(firstCoverInitializedNameError); - } - isBindingElement = oldIsBindingElement; - isAssignmentTarget = oldIsAssignmentTarget; - firstCoverInitializedNameError = oldFirstCoverInitializedNameError; - return result; - } - - function inheritCoverGrammar(parser) { - var oldIsBindingElement = isBindingElement, - oldIsAssignmentTarget = isAssignmentTarget, - oldFirstCoverInitializedNameError = firstCoverInitializedNameError, - result; - isBindingElement = true; - isAssignmentTarget = true; - firstCoverInitializedNameError = null; - result = parser(); - isBindingElement = isBindingElement && oldIsBindingElement; - isAssignmentTarget = isAssignmentTarget && oldIsAssignmentTarget; - firstCoverInitializedNameError = oldFirstCoverInitializedNameError || firstCoverInitializedNameError; - return result; - } - - // ECMA-262 13.3.3 Destructuring Binding Patterns - - function parseArrayPattern(params, kind) { - var node = new Node(), elements = [], rest, restNode; - expect('['); - - while (!match(']')) { - if (match(',')) { - lex(); - elements.push(null); - } else { - if (match('...')) { - restNode = new Node(); - lex(); - params.push(lookahead); - rest = parseVariableIdentifier(kind); - elements.push(restNode.finishRestElement(rest)); - break; - } else { - elements.push(parsePatternWithDefault(params, kind)); - } - if (!match(']')) { - expect(','); - } - } - - } - - expect(']'); - - return node.finishArrayPattern(elements); - } - - function parsePropertyPattern(params, kind) { - var node = new Node(), key, keyToken, computed = match('['), init; - if (lookahead.type === Token.Identifier) { - keyToken = lookahead; - key = parseVariableIdentifier(); - if (match('=')) { - params.push(keyToken); - lex(); - init = parseAssignmentExpression(); - - return node.finishProperty( - 'init', key, false, - new WrappingNode(keyToken).finishAssignmentPattern(key, init), false, true); - } else if (!match(':')) { - params.push(keyToken); - return node.finishProperty('init', key, false, key, false, true); - } - } else { - key = parseObjectPropertyKey(); - } - expect(':'); - init = parsePatternWithDefault(params, kind); - return node.finishProperty('init', key, computed, init, false, false); - } - - function parseObjectPattern(params, kind) { - var node = new Node(), properties = []; - - expect('{'); - - while (!match('}')) { - properties.push(parsePropertyPattern(params, kind)); - if (!match('}')) { - expect(','); - } - } - - lex(); - - return node.finishObjectPattern(properties); - } - - function parsePattern(params, kind) { - if (match('[')) { - return parseArrayPattern(params, kind); - } else if (match('{')) { - return parseObjectPattern(params, kind); - } else if (matchKeyword('let')) { - if (kind === 'const' || kind === 'let') { - tolerateUnexpectedToken(lookahead, Messages.UnexpectedToken); - } - } - - params.push(lookahead); - return parseVariableIdentifier(kind); - } - - function parsePatternWithDefault(params, kind) { - var startToken = lookahead, pattern, previousAllowYield, right; - pattern = parsePattern(params, kind); - if (match('=')) { - lex(); - previousAllowYield = state.allowYield; - state.allowYield = true; - right = isolateCoverGrammar(parseAssignmentExpression); - state.allowYield = previousAllowYield; - pattern = new WrappingNode(startToken).finishAssignmentPattern(pattern, right); - } - return pattern; - } - - // ECMA-262 12.2.5 Array Initializer - - function parseArrayInitializer() { - var elements = [], node = new Node(), restSpread; - - expect('['); - - while (!match(']')) { - if (match(',')) { - lex(); - elements.push(null); - } else if (match('...')) { - restSpread = new Node(); - lex(); - restSpread.finishSpreadElement(inheritCoverGrammar(parseAssignmentExpression)); - - if (!match(']')) { - isAssignmentTarget = isBindingElement = false; - expect(','); - } - elements.push(restSpread); - } else { - elements.push(inheritCoverGrammar(parseAssignmentExpression)); - - if (!match(']')) { - expect(','); - } - } - } - - lex(); - - return node.finishArrayExpression(elements); - } - - // ECMA-262 12.2.6 Object Initializer - - function parsePropertyFunction(node, paramInfo, isGenerator) { - var previousStrict, body; - - isAssignmentTarget = isBindingElement = false; - - previousStrict = strict; - body = isolateCoverGrammar(parseFunctionSourceElements); - - if (strict && paramInfo.firstRestricted) { - tolerateUnexpectedToken(paramInfo.firstRestricted, paramInfo.message); - } - if (strict && paramInfo.stricted) { - tolerateUnexpectedToken(paramInfo.stricted, paramInfo.message); - } - - strict = previousStrict; - return node.finishFunctionExpression(null, paramInfo.params, paramInfo.defaults, body, isGenerator); - } - - function parsePropertyMethodFunction() { - var params, method, node = new Node(), - previousAllowYield = state.allowYield; - - state.allowYield = false; - params = parseParams(); - state.allowYield = previousAllowYield; - - state.allowYield = false; - method = parsePropertyFunction(node, params, false); - state.allowYield = previousAllowYield; - - return method; - } - - function parseObjectPropertyKey() { - var token, node = new Node(), expr; - - token = lex(); - - // Note: This function is called only from parseObjectProperty(), where - // EOF and Punctuator tokens are already filtered out. - - switch (token.type) { - case Token.StringLiteral: - case Token.NumericLiteral: - if (strict && token.octal) { - tolerateUnexpectedToken(token, Messages.StrictOctalLiteral); - } - return node.finishLiteral(token); - case Token.Identifier: - case Token.BooleanLiteral: - case Token.NullLiteral: - case Token.Keyword: - return node.finishIdentifier(token.value); - case Token.Punctuator: - if (token.value === '[') { - expr = isolateCoverGrammar(parseAssignmentExpression); - expect(']'); - return expr; - } - break; - } - throwUnexpectedToken(token); - } - - function lookaheadPropertyName() { - switch (lookahead.type) { - case Token.Identifier: - case Token.StringLiteral: - case Token.BooleanLiteral: - case Token.NullLiteral: - case Token.NumericLiteral: - case Token.Keyword: - return true; - case Token.Punctuator: - return lookahead.value === '['; - } - return false; - } - - // This function is to try to parse a MethodDefinition as defined in 14.3. But in the case of object literals, - // it might be called at a position where there is in fact a short hand identifier pattern or a data property. - // This can only be determined after we consumed up to the left parentheses. - // - // In order to avoid back tracking, it returns `null` if the position is not a MethodDefinition and the caller - // is responsible to visit other options. - function tryParseMethodDefinition(token, key, computed, node) { - var value, options, methodNode, params, - previousAllowYield = state.allowYield; - - if (token.type === Token.Identifier) { - // check for `get` and `set`; - - if (token.value === 'get' && lookaheadPropertyName()) { - computed = match('['); - key = parseObjectPropertyKey(); - methodNode = new Node(); - expect('('); - expect(')'); - - state.allowYield = false; - value = parsePropertyFunction(methodNode, { - params: [], - defaults: [], - stricted: null, - firstRestricted: null, - message: null - }, false); - state.allowYield = previousAllowYield; - - return node.finishProperty('get', key, computed, value, false, false); - } else if (token.value === 'set' && lookaheadPropertyName()) { - computed = match('['); - key = parseObjectPropertyKey(); - methodNode = new Node(); - expect('('); - - options = { - params: [], - defaultCount: 0, - defaults: [], - firstRestricted: null, - paramSet: {} - }; - if (match(')')) { - tolerateUnexpectedToken(lookahead); - } else { - state.allowYield = false; - parseParam(options); - state.allowYield = previousAllowYield; - if (options.defaultCount === 0) { - options.defaults = []; - } - } - expect(')'); - - state.allowYield = false; - value = parsePropertyFunction(methodNode, options, false); - state.allowYield = previousAllowYield; - - return node.finishProperty('set', key, computed, value, false, false); - } - } else if (token.type === Token.Punctuator && token.value === '*' && lookaheadPropertyName()) { - computed = match('['); - key = parseObjectPropertyKey(); - methodNode = new Node(); - - state.allowYield = true; - params = parseParams(); - state.allowYield = previousAllowYield; - - state.allowYield = false; - value = parsePropertyFunction(methodNode, params, true); - state.allowYield = previousAllowYield; - - return node.finishProperty('init', key, computed, value, true, false); - } - - if (key && match('(')) { - value = parsePropertyMethodFunction(); - return node.finishProperty('init', key, computed, value, true, false); - } - - // Not a MethodDefinition. - return null; - } - - function parseObjectProperty(hasProto) { - var token = lookahead, node = new Node(), computed, key, maybeMethod, proto, value; - - computed = match('['); - if (match('*')) { - lex(); - } else { - key = parseObjectPropertyKey(); - } - maybeMethod = tryParseMethodDefinition(token, key, computed, node); - if (maybeMethod) { - return maybeMethod; - } - - if (!key) { - throwUnexpectedToken(lookahead); - } - - // Check for duplicated __proto__ - if (!computed) { - proto = (key.type === Syntax.Identifier && key.name === '__proto__') || - (key.type === Syntax.Literal && key.value === '__proto__'); - if (hasProto.value && proto) { - tolerateError(Messages.DuplicateProtoProperty); - } - hasProto.value |= proto; - } - - if (match(':')) { - lex(); - value = inheritCoverGrammar(parseAssignmentExpression); - return node.finishProperty('init', key, computed, value, false, false); - } - - if (token.type === Token.Identifier) { - if (match('=')) { - firstCoverInitializedNameError = lookahead; - lex(); - value = isolateCoverGrammar(parseAssignmentExpression); - return node.finishProperty('init', key, computed, - new WrappingNode(token).finishAssignmentPattern(key, value), false, true); - } - return node.finishProperty('init', key, computed, key, false, true); - } - - throwUnexpectedToken(lookahead); - } - - function parseObjectInitializer() { - var properties = [], hasProto = {value: false}, node = new Node(); - - expect('{'); - - while (!match('}')) { - properties.push(parseObjectProperty(hasProto)); - - if (!match('}')) { - expectCommaSeparator(); - } - } - - expect('}'); - - return node.finishObjectExpression(properties); - } - - function reinterpretExpressionAsPattern(expr) { - var i; - switch (expr.type) { - case Syntax.Identifier: - case Syntax.MemberExpression: - case Syntax.RestElement: - case Syntax.AssignmentPattern: - break; - case Syntax.SpreadElement: - expr.type = Syntax.RestElement; - reinterpretExpressionAsPattern(expr.argument); - break; - case Syntax.ArrayExpression: - expr.type = Syntax.ArrayPattern; - for (i = 0; i < expr.elements.length; i++) { - if (expr.elements[i] !== null) { - reinterpretExpressionAsPattern(expr.elements[i]); - } - } - break; - case Syntax.ObjectExpression: - expr.type = Syntax.ObjectPattern; - for (i = 0; i < expr.properties.length; i++) { - reinterpretExpressionAsPattern(expr.properties[i].value); - } - break; - case Syntax.AssignmentExpression: - expr.type = Syntax.AssignmentPattern; - reinterpretExpressionAsPattern(expr.left); - break; - default: - // Allow other node type for tolerant parsing. - break; - } - } - - // ECMA-262 12.2.9 Template Literals - - function parseTemplateElement(option) { - var node, token; - - if (lookahead.type !== Token.Template || (option.head && !lookahead.head)) { - throwUnexpectedToken(); - } - - node = new Node(); - token = lex(); - - return node.finishTemplateElement({ raw: token.value.raw, cooked: token.value.cooked }, token.tail); - } - - function parseTemplateLiteral() { - var quasi, quasis, expressions, node = new Node(); - - quasi = parseTemplateElement({ head: true }); - quasis = [quasi]; - expressions = []; - - while (!quasi.tail) { - expressions.push(parseExpression()); - quasi = parseTemplateElement({ head: false }); - quasis.push(quasi); - } - - return node.finishTemplateLiteral(quasis, expressions); - } - - // ECMA-262 12.2.10 The Grouping Operator - - function parseGroupExpression() { - var expr, expressions, startToken, i, params = []; - - expect('('); - - if (match(')')) { - lex(); - if (!match('=>')) { - expect('=>'); - } - return { - type: PlaceHolders.ArrowParameterPlaceHolder, - params: [], - rawParams: [] - }; - } - - startToken = lookahead; - if (match('...')) { - expr = parseRestElement(params); - expect(')'); - if (!match('=>')) { - expect('=>'); - } - return { - type: PlaceHolders.ArrowParameterPlaceHolder, - params: [expr] - }; - } - - isBindingElement = true; - expr = inheritCoverGrammar(parseAssignmentExpression); - - if (match(',')) { - isAssignmentTarget = false; - expressions = [expr]; - - while (startIndex < length) { - if (!match(',')) { - break; - } - lex(); - - if (match('...')) { - if (!isBindingElement) { - throwUnexpectedToken(lookahead); - } - expressions.push(parseRestElement(params)); - expect(')'); - if (!match('=>')) { - expect('=>'); - } - isBindingElement = false; - for (i = 0; i < expressions.length; i++) { - reinterpretExpressionAsPattern(expressions[i]); - } - return { - type: PlaceHolders.ArrowParameterPlaceHolder, - params: expressions - }; - } - - expressions.push(inheritCoverGrammar(parseAssignmentExpression)); - } - - expr = new WrappingNode(startToken).finishSequenceExpression(expressions); - } - - - expect(')'); - - if (match('=>')) { - if (expr.type === Syntax.Identifier && expr.name === 'yield') { - return { - type: PlaceHolders.ArrowParameterPlaceHolder, - params: [expr] - }; - } - - if (!isBindingElement) { - throwUnexpectedToken(lookahead); - } - - if (expr.type === Syntax.SequenceExpression) { - for (i = 0; i < expr.expressions.length; i++) { - reinterpretExpressionAsPattern(expr.expressions[i]); - } - } else { - reinterpretExpressionAsPattern(expr); - } - - expr = { - type: PlaceHolders.ArrowParameterPlaceHolder, - params: expr.type === Syntax.SequenceExpression ? expr.expressions : [expr] - }; - } - isBindingElement = false; - return expr; - } - - - // ECMA-262 12.2 Primary Expressions - - function parsePrimaryExpression() { - var type, token, expr, node; - - if (match('(')) { - isBindingElement = false; - return inheritCoverGrammar(parseGroupExpression); - } - - if (match('[')) { - return inheritCoverGrammar(parseArrayInitializer); - } - - if (match('{')) { - return inheritCoverGrammar(parseObjectInitializer); - } - - type = lookahead.type; - node = new Node(); - - if (type === Token.Identifier) { - if (state.sourceType === 'module' && lookahead.value === 'await') { - tolerateUnexpectedToken(lookahead); - } - expr = node.finishIdentifier(lex().value); - } else if (type === Token.StringLiteral || type === Token.NumericLiteral) { - isAssignmentTarget = isBindingElement = false; - if (strict && lookahead.octal) { - tolerateUnexpectedToken(lookahead, Messages.StrictOctalLiteral); - } - expr = node.finishLiteral(lex()); - } else if (type === Token.Keyword) { - if (!strict && state.allowYield && matchKeyword('yield')) { - return parseNonComputedProperty(); - } - if (!strict && matchKeyword('let')) { - return node.finishIdentifier(lex().value); - } - isAssignmentTarget = isBindingElement = false; - if (matchKeyword('function')) { - return parseFunctionExpression(); - } - if (matchKeyword('this')) { - lex(); - return node.finishThisExpression(); - } - if (matchKeyword('class')) { - return parseClassExpression(); - } - throwUnexpectedToken(lex()); - } else if (type === Token.BooleanLiteral) { - isAssignmentTarget = isBindingElement = false; - token = lex(); - token.value = (token.value === 'true'); - expr = node.finishLiteral(token); - } else if (type === Token.NullLiteral) { - isAssignmentTarget = isBindingElement = false; - token = lex(); - token.value = null; - expr = node.finishLiteral(token); - } else if (match('/') || match('/=')) { - isAssignmentTarget = isBindingElement = false; - index = startIndex; - - if (typeof extra.tokens !== 'undefined') { - token = collectRegex(); - } else { - token = scanRegExp(); - } - lex(); - expr = node.finishLiteral(token); - } else if (type === Token.Template) { - expr = parseTemplateLiteral(); - } else { - throwUnexpectedToken(lex()); - } - - return expr; - } - - // ECMA-262 12.3 Left-Hand-Side Expressions - - function parseArguments() { - var args = [], expr; - - expect('('); - - if (!match(')')) { - while (startIndex < length) { - if (match('...')) { - expr = new Node(); - lex(); - expr.finishSpreadElement(isolateCoverGrammar(parseAssignmentExpression)); - } else { - expr = isolateCoverGrammar(parseAssignmentExpression); - } - args.push(expr); - if (match(')')) { - break; - } - expectCommaSeparator(); - } - } - - expect(')'); - - return args; - } - - function parseNonComputedProperty() { - var token, node = new Node(); - - token = lex(); - - if (!isIdentifierName(token)) { - throwUnexpectedToken(token); - } - - return node.finishIdentifier(token.value); - } - - function parseNonComputedMember() { - expect('.'); - - return parseNonComputedProperty(); - } - - function parseComputedMember() { - var expr; - - expect('['); - - expr = isolateCoverGrammar(parseExpression); - - expect(']'); - - return expr; - } - - // ECMA-262 12.3.3 The new Operator - - function parseNewExpression() { - var callee, args, node = new Node(); - - expectKeyword('new'); - - if (match('.')) { - lex(); - if (lookahead.type === Token.Identifier && lookahead.value === 'target') { - if (state.inFunctionBody) { - lex(); - return node.finishMetaProperty('new', 'target'); - } - } - throwUnexpectedToken(lookahead); - } - - callee = isolateCoverGrammar(parseLeftHandSideExpression); - args = match('(') ? parseArguments() : []; - - isAssignmentTarget = isBindingElement = false; - - return node.finishNewExpression(callee, args); - } - - // ECMA-262 12.3.4 Function Calls - - function parseLeftHandSideExpressionAllowCall() { - var quasi, expr, args, property, startToken, previousAllowIn = state.allowIn; - - startToken = lookahead; - state.allowIn = true; - - if (matchKeyword('super') && state.inFunctionBody) { - expr = new Node(); - lex(); - expr = expr.finishSuper(); - if (!match('(') && !match('.') && !match('[')) { - throwUnexpectedToken(lookahead); - } - } else { - expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression); - } - - for (;;) { - if (match('.')) { - isBindingElement = false; - isAssignmentTarget = true; - property = parseNonComputedMember(); - expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property); - } else if (match('(')) { - isBindingElement = false; - isAssignmentTarget = false; - args = parseArguments(); - expr = new WrappingNode(startToken).finishCallExpression(expr, args); - } else if (match('[')) { - isBindingElement = false; - isAssignmentTarget = true; - property = parseComputedMember(); - expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property); - } else if (lookahead.type === Token.Template && lookahead.head) { - quasi = parseTemplateLiteral(); - expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi); - } else { - break; - } - } - state.allowIn = previousAllowIn; - - return expr; - } - - // ECMA-262 12.3 Left-Hand-Side Expressions - - function parseLeftHandSideExpression() { - var quasi, expr, property, startToken; - assert(state.allowIn, 'callee of new expression always allow in keyword.'); - - startToken = lookahead; - - if (matchKeyword('super') && state.inFunctionBody) { - expr = new Node(); - lex(); - expr = expr.finishSuper(); - if (!match('[') && !match('.')) { - throwUnexpectedToken(lookahead); - } - } else { - expr = inheritCoverGrammar(matchKeyword('new') ? parseNewExpression : parsePrimaryExpression); - } - - for (;;) { - if (match('[')) { - isBindingElement = false; - isAssignmentTarget = true; - property = parseComputedMember(); - expr = new WrappingNode(startToken).finishMemberExpression('[', expr, property); - } else if (match('.')) { - isBindingElement = false; - isAssignmentTarget = true; - property = parseNonComputedMember(); - expr = new WrappingNode(startToken).finishMemberExpression('.', expr, property); - } else if (lookahead.type === Token.Template && lookahead.head) { - quasi = parseTemplateLiteral(); - expr = new WrappingNode(startToken).finishTaggedTemplateExpression(expr, quasi); - } else { - break; - } - } - return expr; - } - - // ECMA-262 12.4 Postfix Expressions - - function parsePostfixExpression() { - var expr, token, startToken = lookahead; - - expr = inheritCoverGrammar(parseLeftHandSideExpressionAllowCall); - - if (!hasLineTerminator && lookahead.type === Token.Punctuator) { - if (match('++') || match('--')) { - // ECMA-262 11.3.1, 11.3.2 - if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { - tolerateError(Messages.StrictLHSPostfix); - } - - if (!isAssignmentTarget) { - tolerateError(Messages.InvalidLHSInAssignment); - } - - isAssignmentTarget = isBindingElement = false; - - token = lex(); - expr = new WrappingNode(startToken).finishPostfixExpression(token.value, expr); - } - } - - return expr; - } - - // ECMA-262 12.5 Unary Operators - - function parseUnaryExpression() { - var token, expr, startToken; - - if (lookahead.type !== Token.Punctuator && lookahead.type !== Token.Keyword) { - expr = parsePostfixExpression(); - } else if (match('++') || match('--')) { - startToken = lookahead; - token = lex(); - expr = inheritCoverGrammar(parseUnaryExpression); - // ECMA-262 11.4.4, 11.4.5 - if (strict && expr.type === Syntax.Identifier && isRestrictedWord(expr.name)) { - tolerateError(Messages.StrictLHSPrefix); - } - - if (!isAssignmentTarget) { - tolerateError(Messages.InvalidLHSInAssignment); - } - expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr); - isAssignmentTarget = isBindingElement = false; - } else if (match('+') || match('-') || match('~') || match('!')) { - startToken = lookahead; - token = lex(); - expr = inheritCoverGrammar(parseUnaryExpression); - expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr); - isAssignmentTarget = isBindingElement = false; - } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) { - startToken = lookahead; - token = lex(); - expr = inheritCoverGrammar(parseUnaryExpression); - expr = new WrappingNode(startToken).finishUnaryExpression(token.value, expr); - if (strict && expr.operator === 'delete' && expr.argument.type === Syntax.Identifier) { - tolerateError(Messages.StrictDelete); - } - isAssignmentTarget = isBindingElement = false; - } else { - expr = parsePostfixExpression(); - } - - return expr; - } - - function binaryPrecedence(token, allowIn) { - var prec = 0; - - if (token.type !== Token.Punctuator && token.type !== Token.Keyword) { - return 0; - } - - switch (token.value) { - case '||': - prec = 1; - break; - - case '&&': - prec = 2; - break; - - case '|': - prec = 3; - break; - - case '^': - prec = 4; - break; - - case '&': - prec = 5; - break; - - case '==': - case '!=': - case '===': - case '!==': - prec = 6; - break; - - case '<': - case '>': - case '<=': - case '>=': - case 'instanceof': - prec = 7; - break; - - case 'in': - prec = allowIn ? 7 : 0; - break; - - case '<<': - case '>>': - case '>>>': - prec = 8; - break; - - case '+': - case '-': - prec = 9; - break; - - case '*': - case '/': - case '%': - prec = 11; - break; - - default: - break; - } - - return prec; - } - - // ECMA-262 12.6 Multiplicative Operators - // ECMA-262 12.7 Additive Operators - // ECMA-262 12.8 Bitwise Shift Operators - // ECMA-262 12.9 Relational Operators - // ECMA-262 12.10 Equality Operators - // ECMA-262 12.11 Binary Bitwise Operators - // ECMA-262 12.12 Binary Logical Operators - - function parseBinaryExpression() { - var marker, markers, expr, token, prec, stack, right, operator, left, i; - - marker = lookahead; - left = inheritCoverGrammar(parseUnaryExpression); - - token = lookahead; - prec = binaryPrecedence(token, state.allowIn); - if (prec === 0) { - return left; - } - isAssignmentTarget = isBindingElement = false; - token.prec = prec; - lex(); - - markers = [marker, lookahead]; - right = isolateCoverGrammar(parseUnaryExpression); - - stack = [left, token, right]; - - while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) { - - // Reduce: make a binary expression from the three topmost entries. - while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) { - right = stack.pop(); - operator = stack.pop().value; - left = stack.pop(); - markers.pop(); - expr = new WrappingNode(markers[markers.length - 1]).finishBinaryExpression(operator, left, right); - stack.push(expr); - } - - // Shift. - token = lex(); - token.prec = prec; - stack.push(token); - markers.push(lookahead); - expr = isolateCoverGrammar(parseUnaryExpression); - stack.push(expr); - } - - // Final reduce to clean-up the stack. - i = stack.length - 1; - expr = stack[i]; - markers.pop(); - while (i > 1) { - expr = new WrappingNode(markers.pop()).finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr); - i -= 2; - } - - return expr; - } - - - // ECMA-262 12.13 Conditional Operator - - function parseConditionalExpression() { - var expr, previousAllowIn, consequent, alternate, startToken; - - startToken = lookahead; - - expr = inheritCoverGrammar(parseBinaryExpression); - if (match('?')) { - lex(); - previousAllowIn = state.allowIn; - state.allowIn = true; - consequent = isolateCoverGrammar(parseAssignmentExpression); - state.allowIn = previousAllowIn; - expect(':'); - alternate = isolateCoverGrammar(parseAssignmentExpression); - - expr = new WrappingNode(startToken).finishConditionalExpression(expr, consequent, alternate); - isAssignmentTarget = isBindingElement = false; - } - - return expr; - } - - // ECMA-262 14.2 Arrow Function Definitions - - function parseConciseBody() { - if (match('{')) { - return parseFunctionSourceElements(); - } - return isolateCoverGrammar(parseAssignmentExpression); - } - - function checkPatternParam(options, param) { - var i; - switch (param.type) { - case Syntax.Identifier: - validateParam(options, param, param.name); - break; - case Syntax.RestElement: - checkPatternParam(options, param.argument); - break; - case Syntax.AssignmentPattern: - checkPatternParam(options, param.left); - break; - case Syntax.ArrayPattern: - for (i = 0; i < param.elements.length; i++) { - if (param.elements[i] !== null) { - checkPatternParam(options, param.elements[i]); - } - } - break; - case Syntax.YieldExpression: - break; - default: - assert(param.type === Syntax.ObjectPattern, 'Invalid type'); - for (i = 0; i < param.properties.length; i++) { - checkPatternParam(options, param.properties[i].value); - } - break; - } - } - function reinterpretAsCoverFormalsList(expr) { - var i, len, param, params, defaults, defaultCount, options, token; - - defaults = []; - defaultCount = 0; - params = [expr]; - - switch (expr.type) { - case Syntax.Identifier: - break; - case PlaceHolders.ArrowParameterPlaceHolder: - params = expr.params; - break; - default: - return null; - } - - options = { - paramSet: {} - }; - - for (i = 0, len = params.length; i < len; i += 1) { - param = params[i]; - switch (param.type) { - case Syntax.AssignmentPattern: - params[i] = param.left; - if (param.right.type === Syntax.YieldExpression) { - if (param.right.argument) { - throwUnexpectedToken(lookahead); - } - param.right.type = Syntax.Identifier; - param.right.name = 'yield'; - delete param.right.argument; - delete param.right.delegate; - } - defaults.push(param.right); - ++defaultCount; - checkPatternParam(options, param.left); - break; - default: - checkPatternParam(options, param); - params[i] = param; - defaults.push(null); - break; - } - } - - if (strict || !state.allowYield) { - for (i = 0, len = params.length; i < len; i += 1) { - param = params[i]; - if (param.type === Syntax.YieldExpression) { - throwUnexpectedToken(lookahead); - } - } - } - - if (options.message === Messages.StrictParamDupe) { - token = strict ? options.stricted : options.firstRestricted; - throwUnexpectedToken(token, options.message); - } - - if (defaultCount === 0) { - defaults = []; - } - - return { - params: params, - defaults: defaults, - stricted: options.stricted, - firstRestricted: options.firstRestricted, - message: options.message - }; - } - - function parseArrowFunctionExpression(options, node) { - var previousStrict, previousAllowYield, body; - - if (hasLineTerminator) { - tolerateUnexpectedToken(lookahead); - } - expect('=>'); - - previousStrict = strict; - previousAllowYield = state.allowYield; - state.allowYield = true; - - body = parseConciseBody(); - - if (strict && options.firstRestricted) { - throwUnexpectedToken(options.firstRestricted, options.message); - } - if (strict && options.stricted) { - tolerateUnexpectedToken(options.stricted, options.message); - } - - strict = previousStrict; - state.allowYield = previousAllowYield; - - return node.finishArrowFunctionExpression(options.params, options.defaults, body, body.type !== Syntax.BlockStatement); - } - - // ECMA-262 14.4 Yield expression - - function parseYieldExpression() { - var argument, expr, delegate, previousAllowYield; - - argument = null; - expr = new Node(); - delegate = false; - - expectKeyword('yield'); - - if (!hasLineTerminator) { - previousAllowYield = state.allowYield; - state.allowYield = false; - delegate = match('*'); - if (delegate) { - lex(); - argument = parseAssignmentExpression(); - } else { - if (!match(';') && !match('}') && !match(')') && lookahead.type !== Token.EOF) { - argument = parseAssignmentExpression(); - } - } - state.allowYield = previousAllowYield; - } - - return expr.finishYieldExpression(argument, delegate); - } - - // ECMA-262 12.14 Assignment Operators - - function parseAssignmentExpression() { - var token, expr, right, list, startToken; - - startToken = lookahead; - token = lookahead; - - if (!state.allowYield && matchKeyword('yield')) { - return parseYieldExpression(); - } - - expr = parseConditionalExpression(); - - if (expr.type === PlaceHolders.ArrowParameterPlaceHolder || match('=>')) { - isAssignmentTarget = isBindingElement = false; - list = reinterpretAsCoverFormalsList(expr); - - if (list) { - firstCoverInitializedNameError = null; - return parseArrowFunctionExpression(list, new WrappingNode(startToken)); - } - - return expr; - } - - if (matchAssign()) { - if (!isAssignmentTarget) { - tolerateError(Messages.InvalidLHSInAssignment); - } - - // ECMA-262 12.1.1 - if (strict && expr.type === Syntax.Identifier) { - if (isRestrictedWord(expr.name)) { - tolerateUnexpectedToken(token, Messages.StrictLHSAssignment); - } - if (isStrictModeReservedWord(expr.name)) { - tolerateUnexpectedToken(token, Messages.StrictReservedWord); - } - } - - if (!match('=')) { - isAssignmentTarget = isBindingElement = false; - } else { - reinterpretExpressionAsPattern(expr); - } - - token = lex(); - right = isolateCoverGrammar(parseAssignmentExpression); - expr = new WrappingNode(startToken).finishAssignmentExpression(token.value, expr, right); - firstCoverInitializedNameError = null; - } - - return expr; - } - - // ECMA-262 12.15 Comma Operator - - function parseExpression() { - var expr, startToken = lookahead, expressions; - - expr = isolateCoverGrammar(parseAssignmentExpression); - - if (match(',')) { - expressions = [expr]; - - while (startIndex < length) { - if (!match(',')) { - break; - } - lex(); - expressions.push(isolateCoverGrammar(parseAssignmentExpression)); - } - - expr = new WrappingNode(startToken).finishSequenceExpression(expressions); - } - - return expr; - } - - // ECMA-262 13.2 Block - - function parseStatementListItem() { - if (lookahead.type === Token.Keyword) { - switch (lookahead.value) { - case 'export': - if (state.sourceType !== 'module') { - tolerateUnexpectedToken(lookahead, Messages.IllegalExportDeclaration); - } - return parseExportDeclaration(); - case 'import': - if (state.sourceType !== 'module') { - tolerateUnexpectedToken(lookahead, Messages.IllegalImportDeclaration); - } - return parseImportDeclaration(); - case 'const': - return parseLexicalDeclaration({inFor: false}); - case 'function': - return parseFunctionDeclaration(new Node()); - case 'class': - return parseClassDeclaration(); - } - } - - if (matchKeyword('let') && isLexicalDeclaration()) { - return parseLexicalDeclaration({inFor: false}); - } - - return parseStatement(); - } - - function parseStatementList() { - var list = []; - while (startIndex < length) { - if (match('}')) { - break; - } - list.push(parseStatementListItem()); - } - - return list; - } - - function parseBlock() { - var block, node = new Node(); - - expect('{'); - - block = parseStatementList(); - - expect('}'); - - return node.finishBlockStatement(block); - } - - // ECMA-262 13.3.2 Variable Statement - - function parseVariableIdentifier(kind) { - var token, node = new Node(); - - token = lex(); - - if (token.type === Token.Keyword && token.value === 'yield') { - if (strict) { - tolerateUnexpectedToken(token, Messages.StrictReservedWord); - } if (!state.allowYield) { - throwUnexpectedToken(token); - } - } else if (token.type !== Token.Identifier) { - if (strict && token.type === Token.Keyword && isStrictModeReservedWord(token.value)) { - tolerateUnexpectedToken(token, Messages.StrictReservedWord); - } else { - if (strict || token.value !== 'let' || kind !== 'var') { - throwUnexpectedToken(token); - } - } - } else if (state.sourceType === 'module' && token.type === Token.Identifier && token.value === 'await') { - tolerateUnexpectedToken(token); - } - - return node.finishIdentifier(token.value); - } - - function parseVariableDeclaration(options) { - var init = null, id, node = new Node(), params = []; - - id = parsePattern(params, 'var'); - - // ECMA-262 12.2.1 - if (strict && isRestrictedWord(id.name)) { - tolerateError(Messages.StrictVarName); - } - - if (match('=')) { - lex(); - init = isolateCoverGrammar(parseAssignmentExpression); - } else if (id.type !== Syntax.Identifier && !options.inFor) { - expect('='); - } - - return node.finishVariableDeclarator(id, init); - } - - function parseVariableDeclarationList(options) { - var opt, list; - - opt = { inFor: options.inFor }; - list = [parseVariableDeclaration(opt)]; - - while (match(',')) { - lex(); - list.push(parseVariableDeclaration(opt)); - } - - return list; - } - - function parseVariableStatement(node) { - var declarations; - - expectKeyword('var'); - - declarations = parseVariableDeclarationList({ inFor: false }); - - consumeSemicolon(); - - return node.finishVariableDeclaration(declarations); - } - - // ECMA-262 13.3.1 Let and Const Declarations - - function parseLexicalBinding(kind, options) { - var init = null, id, node = new Node(), params = []; - - id = parsePattern(params, kind); - - // ECMA-262 12.2.1 - if (strict && id.type === Syntax.Identifier && isRestrictedWord(id.name)) { - tolerateError(Messages.StrictVarName); - } - - if (kind === 'const') { - if (!matchKeyword('in') && !matchContextualKeyword('of')) { - expect('='); - init = isolateCoverGrammar(parseAssignmentExpression); - } - } else if ((!options.inFor && id.type !== Syntax.Identifier) || match('=')) { - expect('='); - init = isolateCoverGrammar(parseAssignmentExpression); - } - - return node.finishVariableDeclarator(id, init); - } - - function parseBindingList(kind, options) { - var list = [parseLexicalBinding(kind, options)]; - - while (match(',')) { - lex(); - list.push(parseLexicalBinding(kind, options)); - } - - return list; - } - - - function tokenizerState() { - return { - index: index, - lineNumber: lineNumber, - lineStart: lineStart, - hasLineTerminator: hasLineTerminator, - lastIndex: lastIndex, - lastLineNumber: lastLineNumber, - lastLineStart: lastLineStart, - startIndex: startIndex, - startLineNumber: startLineNumber, - startLineStart: startLineStart, - lookahead: lookahead, - tokenCount: extra.tokens ? extra.tokens.length : 0 - }; - } - - function resetTokenizerState(ts) { - index = ts.index; - lineNumber = ts.lineNumber; - lineStart = ts.lineStart; - hasLineTerminator = ts.hasLineTerminator; - lastIndex = ts.lastIndex; - lastLineNumber = ts.lastLineNumber; - lastLineStart = ts.lastLineStart; - startIndex = ts.startIndex; - startLineNumber = ts.startLineNumber; - startLineStart = ts.startLineStart; - lookahead = ts.lookahead; - if (extra.tokens) { - extra.tokens.splice(ts.tokenCount, extra.tokens.length); - } - } - - function isLexicalDeclaration() { - var lexical, ts; - - ts = tokenizerState(); - - lex(); - lexical = (lookahead.type === Token.Identifier) || match('[') || match('{') || - matchKeyword('let') || matchKeyword('yield'); - - resetTokenizerState(ts); - - return lexical; - } - - function parseLexicalDeclaration(options) { - var kind, declarations, node = new Node(); - - kind = lex().value; - assert(kind === 'let' || kind === 'const', 'Lexical declaration must be either let or const'); - - declarations = parseBindingList(kind, options); - - consumeSemicolon(); - - return node.finishLexicalDeclaration(declarations, kind); - } - - function parseRestElement(params) { - var param, node = new Node(); - - lex(); - - if (match('{')) { - throwError(Messages.ObjectPatternAsRestParameter); - } - - params.push(lookahead); - - param = parseVariableIdentifier(); - - if (match('=')) { - throwError(Messages.DefaultRestParameter); - } - - if (!match(')')) { - throwError(Messages.ParameterAfterRestParameter); - } - - return node.finishRestElement(param); - } - - // ECMA-262 13.4 Empty Statement - - function parseEmptyStatement(node) { - expect(';'); - return node.finishEmptyStatement(); - } - - // ECMA-262 12.4 Expression Statement - - function parseExpressionStatement(node) { - var expr = parseExpression(); - consumeSemicolon(); - return node.finishExpressionStatement(expr); - } - - // ECMA-262 13.6 If statement - - function parseIfStatement(node) { - var test, consequent, alternate; - - expectKeyword('if'); - - expect('('); - - test = parseExpression(); - - expect(')'); - - consequent = parseStatement(); - - if (matchKeyword('else')) { - lex(); - alternate = parseStatement(); - } else { - alternate = null; - } - - return node.finishIfStatement(test, consequent, alternate); - } - - // ECMA-262 13.7 Iteration Statements - - function parseDoWhileStatement(node) { - var body, test, oldInIteration; - - expectKeyword('do'); - - oldInIteration = state.inIteration; - state.inIteration = true; - - body = parseStatement(); - - state.inIteration = oldInIteration; - - expectKeyword('while'); - - expect('('); - - test = parseExpression(); - - expect(')'); - - if (match(';')) { - lex(); - } - - return node.finishDoWhileStatement(body, test); - } - - function parseWhileStatement(node) { - var test, body, oldInIteration; - - expectKeyword('while'); - - expect('('); - - test = parseExpression(); - - expect(')'); - - oldInIteration = state.inIteration; - state.inIteration = true; - - body = parseStatement(); - - state.inIteration = oldInIteration; - - return node.finishWhileStatement(test, body); - } - - function parseForStatement(node) { - var init, forIn, initSeq, initStartToken, test, update, left, right, kind, declarations, - body, oldInIteration, previousAllowIn = state.allowIn; - - init = test = update = null; - forIn = true; - - expectKeyword('for'); - - expect('('); - - if (match(';')) { - lex(); - } else { - if (matchKeyword('var')) { - init = new Node(); - lex(); - - state.allowIn = false; - declarations = parseVariableDeclarationList({ inFor: true }); - state.allowIn = previousAllowIn; - - if (declarations.length === 1 && matchKeyword('in')) { - init = init.finishVariableDeclaration(declarations); - lex(); - left = init; - right = parseExpression(); - init = null; - } else if (declarations.length === 1 && declarations[0].init === null && matchContextualKeyword('of')) { - init = init.finishVariableDeclaration(declarations); - lex(); - left = init; - right = parseAssignmentExpression(); - init = null; - forIn = false; - } else { - init = init.finishVariableDeclaration(declarations); - expect(';'); - } - } else if (matchKeyword('const') || matchKeyword('let')) { - init = new Node(); - kind = lex().value; - - if (!strict && lookahead.value === 'in') { - init = init.finishIdentifier(kind); - lex(); - left = init; - right = parseExpression(); - init = null; - } else { - state.allowIn = false; - declarations = parseBindingList(kind, {inFor: true}); - state.allowIn = previousAllowIn; - - if (declarations.length === 1 && declarations[0].init === null && matchKeyword('in')) { - init = init.finishLexicalDeclaration(declarations, kind); - lex(); - left = init; - right = parseExpression(); - init = null; - } else if (declarations.length === 1 && declarations[0].init === null && matchContextualKeyword('of')) { - init = init.finishLexicalDeclaration(declarations, kind); - lex(); - left = init; - right = parseAssignmentExpression(); - init = null; - forIn = false; - } else { - consumeSemicolon(); - init = init.finishLexicalDeclaration(declarations, kind); - } - } - } else { - initStartToken = lookahead; - state.allowIn = false; - init = inheritCoverGrammar(parseAssignmentExpression); - state.allowIn = previousAllowIn; - - if (matchKeyword('in')) { - if (!isAssignmentTarget) { - tolerateError(Messages.InvalidLHSInForIn); - } - - lex(); - reinterpretExpressionAsPattern(init); - left = init; - right = parseExpression(); - init = null; - } else if (matchContextualKeyword('of')) { - if (!isAssignmentTarget) { - tolerateError(Messages.InvalidLHSInForLoop); - } - - lex(); - reinterpretExpressionAsPattern(init); - left = init; - right = parseAssignmentExpression(); - init = null; - forIn = false; - } else { - if (match(',')) { - initSeq = [init]; - while (match(',')) { - lex(); - initSeq.push(isolateCoverGrammar(parseAssignmentExpression)); - } - init = new WrappingNode(initStartToken).finishSequenceExpression(initSeq); - } - expect(';'); - } - } - } - - if (typeof left === 'undefined') { - - if (!match(';')) { - test = parseExpression(); - } - expect(';'); - - if (!match(')')) { - update = parseExpression(); - } - } - - expect(')'); - - oldInIteration = state.inIteration; - state.inIteration = true; - - body = isolateCoverGrammar(parseStatement); - - state.inIteration = oldInIteration; - - return (typeof left === 'undefined') ? - node.finishForStatement(init, test, update, body) : - forIn ? node.finishForInStatement(left, right, body) : - node.finishForOfStatement(left, right, body); - } - - // ECMA-262 13.8 The continue statement - - function parseContinueStatement(node) { - var label = null, key; - - expectKeyword('continue'); - - // Optimize the most common form: 'continue;'. - if (source.charCodeAt(startIndex) === 0x3B) { - lex(); - - if (!state.inIteration) { - throwError(Messages.IllegalContinue); - } - - return node.finishContinueStatement(null); - } - - if (hasLineTerminator) { - if (!state.inIteration) { - throwError(Messages.IllegalContinue); - } - - return node.finishContinueStatement(null); - } - - if (lookahead.type === Token.Identifier) { - label = parseVariableIdentifier(); - - key = '$' + label.name; - if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) { - throwError(Messages.UnknownLabel, label.name); - } - } - - consumeSemicolon(); - - if (label === null && !state.inIteration) { - throwError(Messages.IllegalContinue); - } - - return node.finishContinueStatement(label); - } - - // ECMA-262 13.9 The break statement - - function parseBreakStatement(node) { - var label = null, key; - - expectKeyword('break'); - - // Catch the very common case first: immediately a semicolon (U+003B). - if (source.charCodeAt(lastIndex) === 0x3B) { - lex(); - - if (!(state.inIteration || state.inSwitch)) { - throwError(Messages.IllegalBreak); - } - - return node.finishBreakStatement(null); - } - - if (hasLineTerminator) { - if (!(state.inIteration || state.inSwitch)) { - throwError(Messages.IllegalBreak); - } - } else if (lookahead.type === Token.Identifier) { - label = parseVariableIdentifier(); - - key = '$' + label.name; - if (!Object.prototype.hasOwnProperty.call(state.labelSet, key)) { - throwError(Messages.UnknownLabel, label.name); - } - } - - consumeSemicolon(); - - if (label === null && !(state.inIteration || state.inSwitch)) { - throwError(Messages.IllegalBreak); - } - - return node.finishBreakStatement(label); - } - - // ECMA-262 13.10 The return statement - - function parseReturnStatement(node) { - var argument = null; - - expectKeyword('return'); - - if (!state.inFunctionBody) { - tolerateError(Messages.IllegalReturn); - } - - // 'return' followed by a space and an identifier is very common. - if (source.charCodeAt(lastIndex) === 0x20) { - if (isIdentifierStart(source.charCodeAt(lastIndex + 1))) { - argument = parseExpression(); - consumeSemicolon(); - return node.finishReturnStatement(argument); - } - } - - if (hasLineTerminator) { - // HACK - return node.finishReturnStatement(null); - } - - if (!match(';')) { - if (!match('}') && lookahead.type !== Token.EOF) { - argument = parseExpression(); - } - } - - consumeSemicolon(); - - return node.finishReturnStatement(argument); - } - - // ECMA-262 13.11 The with statement - - function parseWithStatement(node) { - var object, body; - - if (strict) { - tolerateError(Messages.StrictModeWith); - } - - expectKeyword('with'); - - expect('('); - - object = parseExpression(); - - expect(')'); - - body = parseStatement(); - - return node.finishWithStatement(object, body); - } - - // ECMA-262 13.12 The switch statement - - function parseSwitchCase() { - var test, consequent = [], statement, node = new Node(); - - if (matchKeyword('default')) { - lex(); - test = null; - } else { - expectKeyword('case'); - test = parseExpression(); - } - expect(':'); - - while (startIndex < length) { - if (match('}') || matchKeyword('default') || matchKeyword('case')) { - break; - } - statement = parseStatementListItem(); - consequent.push(statement); - } - - return node.finishSwitchCase(test, consequent); - } - - function parseSwitchStatement(node) { - var discriminant, cases, clause, oldInSwitch, defaultFound; - - expectKeyword('switch'); - - expect('('); - - discriminant = parseExpression(); - - expect(')'); - - expect('{'); - - cases = []; - - if (match('}')) { - lex(); - return node.finishSwitchStatement(discriminant, cases); - } - - oldInSwitch = state.inSwitch; - state.inSwitch = true; - defaultFound = false; - - while (startIndex < length) { - if (match('}')) { - break; - } - clause = parseSwitchCase(); - if (clause.test === null) { - if (defaultFound) { - throwError(Messages.MultipleDefaultsInSwitch); - } - defaultFound = true; - } - cases.push(clause); - } - - state.inSwitch = oldInSwitch; - - expect('}'); - - return node.finishSwitchStatement(discriminant, cases); - } - - // ECMA-262 13.14 The throw statement - - function parseThrowStatement(node) { - var argument; - - expectKeyword('throw'); - - if (hasLineTerminator) { - throwError(Messages.NewlineAfterThrow); - } - - argument = parseExpression(); - - consumeSemicolon(); - - return node.finishThrowStatement(argument); - } - - // ECMA-262 13.15 The try statement - - function parseCatchClause() { - var param, params = [], paramMap = {}, key, i, body, node = new Node(); - - expectKeyword('catch'); - - expect('('); - if (match(')')) { - throwUnexpectedToken(lookahead); - } - - param = parsePattern(params); - for (i = 0; i < params.length; i++) { - key = '$' + params[i].value; - if (Object.prototype.hasOwnProperty.call(paramMap, key)) { - tolerateError(Messages.DuplicateBinding, params[i].value); - } - paramMap[key] = true; - } - - // ECMA-262 12.14.1 - if (strict && isRestrictedWord(param.name)) { - tolerateError(Messages.StrictCatchVariable); - } - - expect(')'); - body = parseBlock(); - return node.finishCatchClause(param, body); - } - - function parseTryStatement(node) { - var block, handler = null, finalizer = null; - - expectKeyword('try'); - - block = parseBlock(); - - if (matchKeyword('catch')) { - handler = parseCatchClause(); - } - - if (matchKeyword('finally')) { - lex(); - finalizer = parseBlock(); - } - - if (!handler && !finalizer) { - throwError(Messages.NoCatchOrFinally); - } - - return node.finishTryStatement(block, handler, finalizer); - } - - // ECMA-262 13.16 The debugger statement - - function parseDebuggerStatement(node) { - expectKeyword('debugger'); - - consumeSemicolon(); - - return node.finishDebuggerStatement(); - } - - // 13 Statements - - function parseStatement() { - var type = lookahead.type, - expr, - labeledBody, - key, - node; - - if (type === Token.EOF) { - throwUnexpectedToken(lookahead); - } - - if (type === Token.Punctuator && lookahead.value === '{') { - return parseBlock(); - } - isAssignmentTarget = isBindingElement = true; - node = new Node(); - - if (type === Token.Punctuator) { - switch (lookahead.value) { - case ';': - return parseEmptyStatement(node); - case '(': - return parseExpressionStatement(node); - default: - break; - } - } else if (type === Token.Keyword) { - switch (lookahead.value) { - case 'break': - return parseBreakStatement(node); - case 'continue': - return parseContinueStatement(node); - case 'debugger': - return parseDebuggerStatement(node); - case 'do': - return parseDoWhileStatement(node); - case 'for': - return parseForStatement(node); - case 'function': - return parseFunctionDeclaration(node); - case 'if': - return parseIfStatement(node); - case 'return': - return parseReturnStatement(node); - case 'switch': - return parseSwitchStatement(node); - case 'throw': - return parseThrowStatement(node); - case 'try': - return parseTryStatement(node); - case 'var': - return parseVariableStatement(node); - case 'while': - return parseWhileStatement(node); - case 'with': - return parseWithStatement(node); - default: - break; - } - } - - expr = parseExpression(); - - // ECMA-262 12.12 Labelled Statements - if ((expr.type === Syntax.Identifier) && match(':')) { - lex(); - - key = '$' + expr.name; - if (Object.prototype.hasOwnProperty.call(state.labelSet, key)) { - throwError(Messages.Redeclaration, 'Label', expr.name); - } - - state.labelSet[key] = true; - labeledBody = parseStatement(); - delete state.labelSet[key]; - return node.finishLabeledStatement(expr, labeledBody); - } - - consumeSemicolon(); - - return node.finishExpressionStatement(expr); - } - - // ECMA-262 14.1 Function Definition - - function parseFunctionSourceElements() { - var statement, body = [], token, directive, firstRestricted, - oldLabelSet, oldInIteration, oldInSwitch, oldInFunctionBody, - node = new Node(); - - expect('{'); - - while (startIndex < length) { - if (lookahead.type !== Token.StringLiteral) { - break; - } - token = lookahead; - - statement = parseStatementListItem(); - body.push(statement); - if (statement.expression.type !== Syntax.Literal) { - // this is not directive - break; - } - directive = source.slice(token.start + 1, token.end - 1); - if (directive === 'use strict') { - strict = true; - if (firstRestricted) { - tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral); - } - } else { - if (!firstRestricted && token.octal) { - firstRestricted = token; - } - } - } - - oldLabelSet = state.labelSet; - oldInIteration = state.inIteration; - oldInSwitch = state.inSwitch; - oldInFunctionBody = state.inFunctionBody; - - state.labelSet = {}; - state.inIteration = false; - state.inSwitch = false; - state.inFunctionBody = true; - - while (startIndex < length) { - if (match('}')) { - break; - } - body.push(parseStatementListItem()); - } - - expect('}'); - - state.labelSet = oldLabelSet; - state.inIteration = oldInIteration; - state.inSwitch = oldInSwitch; - state.inFunctionBody = oldInFunctionBody; - - return node.finishBlockStatement(body); - } - - function validateParam(options, param, name) { - var key = '$' + name; - if (strict) { - if (isRestrictedWord(name)) { - options.stricted = param; - options.message = Messages.StrictParamName; - } - if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { - options.stricted = param; - options.message = Messages.StrictParamDupe; - } - } else if (!options.firstRestricted) { - if (isRestrictedWord(name)) { - options.firstRestricted = param; - options.message = Messages.StrictParamName; - } else if (isStrictModeReservedWord(name)) { - options.firstRestricted = param; - options.message = Messages.StrictReservedWord; - } else if (Object.prototype.hasOwnProperty.call(options.paramSet, key)) { - options.stricted = param; - options.message = Messages.StrictParamDupe; - } - } - options.paramSet[key] = true; - } - - function parseParam(options) { - var token, param, params = [], i, def; - - token = lookahead; - if (token.value === '...') { - param = parseRestElement(params); - validateParam(options, param.argument, param.argument.name); - options.params.push(param); - options.defaults.push(null); - return false; - } - - param = parsePatternWithDefault(params); - for (i = 0; i < params.length; i++) { - validateParam(options, params[i], params[i].value); - } - - if (param.type === Syntax.AssignmentPattern) { - def = param.right; - param = param.left; - ++options.defaultCount; - } - - options.params.push(param); - options.defaults.push(def); - - return !match(')'); - } - - function parseParams(firstRestricted) { - var options; - - options = { - params: [], - defaultCount: 0, - defaults: [], - firstRestricted: firstRestricted - }; - - expect('('); - - if (!match(')')) { - options.paramSet = {}; - while (startIndex < length) { - if (!parseParam(options)) { - break; - } - expect(','); - } - } - - expect(')'); - - if (options.defaultCount === 0) { - options.defaults = []; - } - - return { - params: options.params, - defaults: options.defaults, - stricted: options.stricted, - firstRestricted: options.firstRestricted, - message: options.message - }; - } - - function parseFunctionDeclaration(node, identifierIsOptional) { - var id = null, params = [], defaults = [], body, token, stricted, tmp, firstRestricted, message, previousStrict, - isGenerator, previousAllowYield; - - previousAllowYield = state.allowYield; - - expectKeyword('function'); - - isGenerator = match('*'); - if (isGenerator) { - lex(); - } - - if (!identifierIsOptional || !match('(')) { - token = lookahead; - id = parseVariableIdentifier(); - if (strict) { - if (isRestrictedWord(token.value)) { - tolerateUnexpectedToken(token, Messages.StrictFunctionName); - } - } else { - if (isRestrictedWord(token.value)) { - firstRestricted = token; - message = Messages.StrictFunctionName; - } else if (isStrictModeReservedWord(token.value)) { - firstRestricted = token; - message = Messages.StrictReservedWord; - } - } - } - - state.allowYield = !isGenerator; - tmp = parseParams(firstRestricted); - params = tmp.params; - defaults = tmp.defaults; - stricted = tmp.stricted; - firstRestricted = tmp.firstRestricted; - if (tmp.message) { - message = tmp.message; - } - - - previousStrict = strict; - body = parseFunctionSourceElements(); - if (strict && firstRestricted) { - throwUnexpectedToken(firstRestricted, message); - } - if (strict && stricted) { - tolerateUnexpectedToken(stricted, message); - } - - strict = previousStrict; - state.allowYield = previousAllowYield; - - return node.finishFunctionDeclaration(id, params, defaults, body, isGenerator); - } - - function parseFunctionExpression() { - var token, id = null, stricted, firstRestricted, message, tmp, - params = [], defaults = [], body, previousStrict, node = new Node(), - isGenerator, previousAllowYield; - - previousAllowYield = state.allowYield; - - expectKeyword('function'); - - isGenerator = match('*'); - if (isGenerator) { - lex(); - } - - state.allowYield = !isGenerator; - if (!match('(')) { - token = lookahead; - id = (!strict && !isGenerator && matchKeyword('yield')) ? parseNonComputedProperty() : parseVariableIdentifier(); - if (strict) { - if (isRestrictedWord(token.value)) { - tolerateUnexpectedToken(token, Messages.StrictFunctionName); - } - } else { - if (isRestrictedWord(token.value)) { - firstRestricted = token; - message = Messages.StrictFunctionName; - } else if (isStrictModeReservedWord(token.value)) { - firstRestricted = token; - message = Messages.StrictReservedWord; - } - } - } - - tmp = parseParams(firstRestricted); - params = tmp.params; - defaults = tmp.defaults; - stricted = tmp.stricted; - firstRestricted = tmp.firstRestricted; - if (tmp.message) { - message = tmp.message; - } - - previousStrict = strict; - body = parseFunctionSourceElements(); - if (strict && firstRestricted) { - throwUnexpectedToken(firstRestricted, message); - } - if (strict && stricted) { - tolerateUnexpectedToken(stricted, message); - } - strict = previousStrict; - state.allowYield = previousAllowYield; - - return node.finishFunctionExpression(id, params, defaults, body, isGenerator); - } - - // ECMA-262 14.5 Class Definitions - - function parseClassBody() { - var classBody, token, isStatic, hasConstructor = false, body, method, computed, key; - - classBody = new Node(); - - expect('{'); - body = []; - while (!match('}')) { - if (match(';')) { - lex(); - } else { - method = new Node(); - token = lookahead; - isStatic = false; - computed = match('['); - if (match('*')) { - lex(); - } else { - key = parseObjectPropertyKey(); - if (key.name === 'static' && (lookaheadPropertyName() || match('*'))) { - token = lookahead; - isStatic = true; - computed = match('['); - if (match('*')) { - lex(); - } else { - key = parseObjectPropertyKey(); - } - } - } - method = tryParseMethodDefinition(token, key, computed, method); - if (method) { - method['static'] = isStatic; // jscs:ignore requireDotNotation - if (method.kind === 'init') { - method.kind = 'method'; - } - if (!isStatic) { - if (!method.computed && (method.key.name || method.key.value.toString()) === 'constructor') { - if (method.kind !== 'method' || !method.method || method.value.generator) { - throwUnexpectedToken(token, Messages.ConstructorSpecialMethod); - } - if (hasConstructor) { - throwUnexpectedToken(token, Messages.DuplicateConstructor); - } else { - hasConstructor = true; - } - method.kind = 'constructor'; - } - } else { - if (!method.computed && (method.key.name || method.key.value.toString()) === 'prototype') { - throwUnexpectedToken(token, Messages.StaticPrototype); - } - } - method.type = Syntax.MethodDefinition; - delete method.method; - delete method.shorthand; - body.push(method); - } else { - throwUnexpectedToken(lookahead); - } - } - } - lex(); - return classBody.finishClassBody(body); - } - - function parseClassDeclaration(identifierIsOptional) { - var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict; - strict = true; - - expectKeyword('class'); - - if (!identifierIsOptional || lookahead.type === Token.Identifier) { - id = parseVariableIdentifier(); - } - - if (matchKeyword('extends')) { - lex(); - superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall); - } - classBody = parseClassBody(); - strict = previousStrict; - - return classNode.finishClassDeclaration(id, superClass, classBody); - } - - function parseClassExpression() { - var id = null, superClass = null, classNode = new Node(), classBody, previousStrict = strict; - strict = true; - - expectKeyword('class'); - - if (lookahead.type === Token.Identifier) { - id = parseVariableIdentifier(); - } - - if (matchKeyword('extends')) { - lex(); - superClass = isolateCoverGrammar(parseLeftHandSideExpressionAllowCall); - } - classBody = parseClassBody(); - strict = previousStrict; - - return classNode.finishClassExpression(id, superClass, classBody); - } - - // ECMA-262 15.2 Modules - - function parseModuleSpecifier() { - var node = new Node(); - - if (lookahead.type !== Token.StringLiteral) { - throwError(Messages.InvalidModuleSpecifier); - } - return node.finishLiteral(lex()); - } - - // ECMA-262 15.2.3 Exports - - function parseExportSpecifier() { - var exported, local, node = new Node(), def; - if (matchKeyword('default')) { - // export {default} from 'something'; - def = new Node(); - lex(); - local = def.finishIdentifier('default'); - } else { - local = parseVariableIdentifier(); - } - if (matchContextualKeyword('as')) { - lex(); - exported = parseNonComputedProperty(); - } - return node.finishExportSpecifier(local, exported); - } - - function parseExportNamedDeclaration(node) { - var declaration = null, - isExportFromIdentifier, - src = null, specifiers = []; - - // non-default export - if (lookahead.type === Token.Keyword) { - // covers: - // export var f = 1; - switch (lookahead.value) { - case 'let': - case 'const': - declaration = parseLexicalDeclaration({inFor: false}); - return node.finishExportNamedDeclaration(declaration, specifiers, null); - case 'var': - case 'class': - case 'function': - declaration = parseStatementListItem(); - return node.finishExportNamedDeclaration(declaration, specifiers, null); - } - } - - expect('{'); - while (!match('}')) { - isExportFromIdentifier = isExportFromIdentifier || matchKeyword('default'); - specifiers.push(parseExportSpecifier()); - if (!match('}')) { - expect(','); - if (match('}')) { - break; - } - } - } - expect('}'); - - if (matchContextualKeyword('from')) { - // covering: - // export {default} from 'foo'; - // export {foo} from 'foo'; - lex(); - src = parseModuleSpecifier(); - consumeSemicolon(); - } else if (isExportFromIdentifier) { - // covering: - // export {default}; // missing fromClause - throwError(lookahead.value ? - Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); - } else { - // cover - // export {foo}; - consumeSemicolon(); - } - return node.finishExportNamedDeclaration(declaration, specifiers, src); - } - - function parseExportDefaultDeclaration(node) { - var declaration = null, - expression = null; - - // covers: - // export default ... - expectKeyword('default'); - - if (matchKeyword('function')) { - // covers: - // export default function foo () {} - // export default function () {} - declaration = parseFunctionDeclaration(new Node(), true); - return node.finishExportDefaultDeclaration(declaration); - } - if (matchKeyword('class')) { - declaration = parseClassDeclaration(true); - return node.finishExportDefaultDeclaration(declaration); - } - - if (matchContextualKeyword('from')) { - throwError(Messages.UnexpectedToken, lookahead.value); - } - - // covers: - // export default {}; - // export default []; - // export default (1 + 2); - if (match('{')) { - expression = parseObjectInitializer(); - } else if (match('[')) { - expression = parseArrayInitializer(); - } else { - expression = parseAssignmentExpression(); - } - consumeSemicolon(); - return node.finishExportDefaultDeclaration(expression); - } - - function parseExportAllDeclaration(node) { - var src; - - // covers: - // export * from 'foo'; - expect('*'); - if (!matchContextualKeyword('from')) { - throwError(lookahead.value ? - Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); - } - lex(); - src = parseModuleSpecifier(); - consumeSemicolon(); - - return node.finishExportAllDeclaration(src); - } - - function parseExportDeclaration() { - var node = new Node(); - if (state.inFunctionBody) { - throwError(Messages.IllegalExportDeclaration); - } - - expectKeyword('export'); - - if (matchKeyword('default')) { - return parseExportDefaultDeclaration(node); - } - if (match('*')) { - return parseExportAllDeclaration(node); - } - return parseExportNamedDeclaration(node); - } - - // ECMA-262 15.2.2 Imports - - function parseImportSpecifier() { - // import {} ...; - var local, imported, node = new Node(); - - imported = parseNonComputedProperty(); - if (matchContextualKeyword('as')) { - lex(); - local = parseVariableIdentifier(); - } - - return node.finishImportSpecifier(local, imported); - } - - function parseNamedImports() { - var specifiers = []; - // {foo, bar as bas} - expect('{'); - while (!match('}')) { - specifiers.push(parseImportSpecifier()); - if (!match('}')) { - expect(','); - if (match('}')) { - break; - } - } - } - expect('}'); - return specifiers; - } - - function parseImportDefaultSpecifier() { - // import ...; - var local, node = new Node(); - - local = parseNonComputedProperty(); - - return node.finishImportDefaultSpecifier(local); - } - - function parseImportNamespaceSpecifier() { - // import <* as foo> ...; - var local, node = new Node(); - - expect('*'); - if (!matchContextualKeyword('as')) { - throwError(Messages.NoAsAfterImportNamespace); - } - lex(); - local = parseNonComputedProperty(); - - return node.finishImportNamespaceSpecifier(local); - } - - function parseImportDeclaration() { - var specifiers = [], src, node = new Node(); - - if (state.inFunctionBody) { - throwError(Messages.IllegalImportDeclaration); - } - - expectKeyword('import'); - - if (lookahead.type === Token.StringLiteral) { - // import 'foo'; - src = parseModuleSpecifier(); - } else { - - if (match('{')) { - // import {bar} - specifiers = specifiers.concat(parseNamedImports()); - } else if (match('*')) { - // import * as foo - specifiers.push(parseImportNamespaceSpecifier()); - } else if (isIdentifierName(lookahead) && !matchKeyword('default')) { - // import foo - specifiers.push(parseImportDefaultSpecifier()); - if (match(',')) { - lex(); - if (match('*')) { - // import foo, * as foo - specifiers.push(parseImportNamespaceSpecifier()); - } else if (match('{')) { - // import foo, {bar} - specifiers = specifiers.concat(parseNamedImports()); - } else { - throwUnexpectedToken(lookahead); - } - } - } else { - throwUnexpectedToken(lex()); - } - - if (!matchContextualKeyword('from')) { - throwError(lookahead.value ? - Messages.UnexpectedToken : Messages.MissingFromClause, lookahead.value); - } - lex(); - src = parseModuleSpecifier(); - } - - consumeSemicolon(); - return node.finishImportDeclaration(specifiers, src); - } - - // ECMA-262 15.1 Scripts - - function parseScriptBody() { - var statement, body = [], token, directive, firstRestricted; - - while (startIndex < length) { - token = lookahead; - if (token.type !== Token.StringLiteral) { - break; - } - - statement = parseStatementListItem(); - body.push(statement); - if (statement.expression.type !== Syntax.Literal) { - // this is not directive - break; - } - directive = source.slice(token.start + 1, token.end - 1); - if (directive === 'use strict') { - strict = true; - if (firstRestricted) { - tolerateUnexpectedToken(firstRestricted, Messages.StrictOctalLiteral); - } - } else { - if (!firstRestricted && token.octal) { - firstRestricted = token; - } - } - } - - while (startIndex < length) { - statement = parseStatementListItem(); - /* istanbul ignore if */ - if (typeof statement === 'undefined') { - break; - } - body.push(statement); - } - return body; - } - - function parseProgram() { - var body, node; - - peek(); - node = new Node(); - - body = parseScriptBody(); - return node.finishProgram(body, state.sourceType); - } - - function filterTokenLocation() { - var i, entry, token, tokens = []; - - for (i = 0; i < extra.tokens.length; ++i) { - entry = extra.tokens[i]; - token = { - type: entry.type, - value: entry.value - }; - if (entry.regex) { - token.regex = { - pattern: entry.regex.pattern, - flags: entry.regex.flags - }; - } - if (extra.range) { - token.range = entry.range; - } - if (extra.loc) { - token.loc = entry.loc; - } - tokens.push(token); - } - - extra.tokens = tokens; - } - - function tokenize(code, options, delegate) { - var toString, - tokens; - - toString = String; - if (typeof code !== 'string' && !(code instanceof String)) { - code = toString(code); - } - - source = code; - index = 0; - lineNumber = (source.length > 0) ? 1 : 0; - lineStart = 0; - startIndex = index; - startLineNumber = lineNumber; - startLineStart = lineStart; - length = source.length; - lookahead = null; - state = { - allowIn: true, - allowYield: true, - labelSet: {}, - inFunctionBody: false, - inIteration: false, - inSwitch: false, - lastCommentStart: -1, - curlyStack: [] - }; - - extra = {}; - - // Options matching. - options = options || {}; - - // Of course we collect tokens here. - options.tokens = true; - extra.tokens = []; - extra.tokenValues = []; - extra.tokenize = true; - extra.delegate = delegate; - - // The following two fields are necessary to compute the Regex tokens. - extra.openParenToken = -1; - extra.openCurlyToken = -1; - - extra.range = (typeof options.range === 'boolean') && options.range; - extra.loc = (typeof options.loc === 'boolean') && options.loc; - - if (typeof options.comment === 'boolean' && options.comment) { - extra.comments = []; - } - if (typeof options.tolerant === 'boolean' && options.tolerant) { - extra.errors = []; - } - - try { - peek(); - if (lookahead.type === Token.EOF) { - return extra.tokens; - } - - lex(); - while (lookahead.type !== Token.EOF) { - try { - lex(); - } catch (lexError) { - if (extra.errors) { - recordError(lexError); - // We have to break on the first error - // to avoid infinite loops. - break; - } else { - throw lexError; - } - } - } - - tokens = extra.tokens; - if (typeof extra.errors !== 'undefined') { - tokens.errors = extra.errors; - } - } catch (e) { - throw e; - } finally { - extra = {}; - } - return tokens; - } - - function parse(code, options) { - var program, toString; - - toString = String; - if (typeof code !== 'string' && !(code instanceof String)) { - code = toString(code); - } - - source = code; - index = 0; - lineNumber = (source.length > 0) ? 1 : 0; - lineStart = 0; - startIndex = index; - startLineNumber = lineNumber; - startLineStart = lineStart; - length = source.length; - lookahead = null; - state = { - allowIn: true, - allowYield: true, - labelSet: {}, - inFunctionBody: false, - inIteration: false, - inSwitch: false, - lastCommentStart: -1, - curlyStack: [], - sourceType: 'script' - }; - strict = false; - - extra = {}; - if (typeof options !== 'undefined') { - extra.range = (typeof options.range === 'boolean') && options.range; - extra.loc = (typeof options.loc === 'boolean') && options.loc; - extra.attachComment = (typeof options.attachComment === 'boolean') && options.attachComment; - - if (extra.loc && options.source !== null && options.source !== undefined) { - extra.source = toString(options.source); - } - - if (typeof options.tokens === 'boolean' && options.tokens) { - extra.tokens = []; - } - if (typeof options.comment === 'boolean' && options.comment) { - extra.comments = []; - } - if (typeof options.tolerant === 'boolean' && options.tolerant) { - extra.errors = []; - } - if (extra.attachComment) { - extra.range = true; - extra.comments = []; - extra.bottomRightStack = []; - extra.trailingComments = []; - extra.leadingComments = []; - } - if (options.sourceType === 'module') { - // very restrictive condition for now - state.sourceType = options.sourceType; - strict = true; - } - } - - try { - program = parseProgram(); - if (typeof extra.comments !== 'undefined') { - program.comments = extra.comments; - } - if (typeof extra.tokens !== 'undefined') { - filterTokenLocation(); - program.tokens = extra.tokens; - } - if (typeof extra.errors !== 'undefined') { - program.errors = extra.errors; - } - } catch (e) { - throw e; - } finally { - extra = {}; - } - - return program; - } - - // Sync with *.json manifests. - exports.version = '2.7.3'; - - exports.tokenize = tokenize; - - exports.parse = parse; - - // Deep copy. - /* istanbul ignore next */ - exports.Syntax = (function () { - var name, types = {}; - - if (typeof Object.create === 'function') { - types = Object.create(null); - } - - for (name in Syntax) { - if (Syntax.hasOwnProperty(name)) { - types[name] = Syntax[name]; - } - } - - if (typeof Object.freeze === 'function') { - Object.freeze(types); - } - - return types; - }()); - -})); -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/fundamentals/bug-challenge-es6/node_modules/esprima/package.json b/fundamentals/bug-challenge-es6/node_modules/esprima/package.json deleted file mode 100644 index 128caf5bb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/esprima/package.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "_args": [ - [ - "esprima@^2.6.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/js-yaml" - ] - ], - "_from": "esprima@>=2.6.0 <3.0.0", - "_id": "esprima@2.7.3", - "_inCache": true, - "_installable": true, - "_location": "/esprima", - "_nodeVersion": "6.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/esprima-2.7.3.tgz_1472013602345_0.010668299393728375" - }, - "_npmUser": { - "email": "ariya.hidayat@gmail.com", - "name": "ariya" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "esprima", - "raw": "esprima@^2.6.0", - "rawSpec": "^2.6.0", - "scope": null, - "spec": ">=2.6.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/escodegen", - "/istanbul", - "/js-yaml" - ], - "_resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "_shasum": "96e3b70d5779f6ad49cd032673d1c312767ba581", - "_shrinkwrap": null, - "_spec": "esprima@^2.6.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/js-yaml", - "author": { - "email": "ariya.hidayat@gmail.com", - "name": "Ariya Hidayat" - }, - "bin": { - "esparse": "./bin/esparse.js", - "esvalidate": "./bin/esvalidate.js" - }, - "bugs": { - "url": "https://github.com/jquery/esprima/issues" - }, - "dependencies": {}, - "description": "ECMAScript parsing infrastructure for multipurpose analysis", - "devDependencies": { - "codecov.io": "~0.1.6", - "escomplex-js": "1.2.0", - "eslint": "~1.7.2", - "everything.js": "~1.0.3", - "glob": "^5.0.15", - "istanbul": "~0.4.0", - "jscs": "~2.3.5", - "json-diff": "~0.3.1", - "karma": "^0.13.11", - "karma-chrome-launcher": "^0.2.1", - "karma-detect-browsers": "^2.0.2", - "karma-firefox-launcher": "^0.1.6", - "karma-ie-launcher": "^0.2.0", - "karma-mocha": "^0.2.0", - "karma-safari-launcher": "^0.1.1", - "karma-sauce-launcher": "^0.2.14", - "lodash": "^3.10.0", - "mocha": "^2.3.3", - "node-tick-processor": "~0.0.2", - "regenerate": "~1.2.1", - "temp": "~0.8.3", - "unicode-7.0.0": "~0.1.5" - }, - "directories": {}, - "dist": { - "shasum": "96e3b70d5779f6ad49cd032673d1c312767ba581", - "tarball": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "bin", - "unit-tests.js", - "esprima.js" - ], - "gitHead": "abaaf7f12040f0b31fac6fee342ffec8feab15d0", - "homepage": "http://esprima.org", - "keywords": [ - "ast", - "ecmascript", - "javascript", - "parser", - "syntax" - ], - "license": "BSD-2-Clause", - "main": "esprima.js", - "maintainers": [ - { - "email": "ariya.hidayat@gmail.com", - "name": "ariya" - } - ], - "name": "esprima", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jquery/esprima.git" - }, - "scripts": { - "all-tests": "npm run generate-fixtures && npm run unit-tests && npm run grammar-tests && npm run regression-tests", - "analyze-coverage": "istanbul cover test/unit-tests.js", - "appveyor": "npm run all-tests && npm run browser-tests && npm run dynamic-analysis", - "benchmark": "node test/benchmarks.js", - "benchmark-quick": "node test/benchmarks.js quick", - "browser-tests": "npm run generate-fixtures && cd test && karma start --single-run", - "check-coverage": "istanbul check-coverage --statement 100 --branch 100 --function 100", - "check-version": "node test/check-version.js", - "circleci": "npm test && npm run codecov && npm run downstream", - "codecov": "istanbul report cobertura && codecov < ./coverage/cobertura-coverage.xml", - "complexity": "node test/check-complexity.js", - "downstream": "node test/downstream.js", - "droneio": "npm test && npm run saucelabs-evergreen && npm run saucelabs-ie && npm run saucelabs-safari", - "dynamic-analysis": "npm run analyze-coverage && npm run check-coverage", - "eslint": "node node_modules/eslint/bin/eslint.js -c .lintrc esprima.js", - "generate-fixtures": "node tools/generate-fixtures.js", - "generate-regex": "node tools/generate-identifier-regex.js", - "grammar-tests": "node test/grammar-tests.js", - "jscs": "jscs -p crockford esprima.js && jscs -p crockford test/*.js", - "profile": "node --prof test/profile.js && mv isolate*.log v8.log && node-tick-processor", - "regression-tests": "node test/regression-tests.js", - "saucelabs-evergreen": "cd test && karma start saucelabs-evergreen.conf.js", - "saucelabs-ie": "cd test && karma start saucelabs-ie.conf.js", - "saucelabs-safari": "cd test && karma start saucelabs-safari.conf.js", - "static-analysis": "npm run check-version && npm run jscs && npm run eslint && npm run complexity", - "test": "npm run all-tests && npm run static-analysis && npm run dynamic-analysis", - "travis": "npm test", - "unit-tests": "node test/unit-tests.js" - }, - "version": "2.7.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/estraverse/.editorconfig b/fundamentals/bug-challenge-es6/node_modules/estraverse/.editorconfig deleted file mode 100644 index 1d4fc223a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/estraverse/.editorconfig +++ /dev/null @@ -1,10 +0,0 @@ -# top-most EditorConfig file -root = true - -[*] -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true -indent_style = space -indent_size = 4 -tab_width = 4 diff --git a/fundamentals/bug-challenge-es6/node_modules/estraverse/.jshintrc b/fundamentals/bug-challenge-es6/node_modules/estraverse/.jshintrc deleted file mode 100644 index f642dae76..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/estraverse/.jshintrc +++ /dev/null @@ -1,16 +0,0 @@ -{ - "curly": true, - "eqeqeq": true, - "immed": true, - "eqnull": true, - "latedef": true, - "noarg": true, - "noempty": true, - "quotmark": "single", - "undef": true, - "unused": true, - "strict": true, - "trailing": true, - - "node": true -} diff --git a/fundamentals/bug-challenge-es6/node_modules/estraverse/LICENSE.BSD b/fundamentals/bug-challenge-es6/node_modules/estraverse/LICENSE.BSD deleted file mode 100644 index 3e580c355..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/estraverse/LICENSE.BSD +++ /dev/null @@ -1,19 +0,0 @@ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/estraverse/README.md b/fundamentals/bug-challenge-es6/node_modules/estraverse/README.md deleted file mode 100644 index 4242c5133..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/estraverse/README.md +++ /dev/null @@ -1,124 +0,0 @@ -### Estraverse [![Build Status](https://secure.travis-ci.org/estools/estraverse.png)](http://travis-ci.org/estools/estraverse) - -Estraverse ([estraverse](http://github.com/estools/estraverse)) is -[ECMAScript](http://www.ecma-international.org/publications/standards/Ecma-262.htm) -traversal functions from [esmangle project](http://github.com/estools/esmangle). - -### Documentation - -You can find usage docs at [wiki page](https://github.com/estools/estraverse/wiki/Usage). - -### Example Usage - -The following code will output all variables declared at the root of a file. - -```javascript -estraverse.traverse(ast, { - enter: function (node, parent) { - if (node.type == 'FunctionExpression' || node.type == 'FunctionDeclaration') - return estraverse.VisitorOption.Skip; - }, - leave: function (node, parent) { - if (node.type == 'VariableDeclarator') - console.log(node.id.name); - } -}); -``` - -We can use `this.skip`, `this.remove` and `this.break` functions instead of using Skip, Remove and Break. - -```javascript -estraverse.traverse(ast, { - enter: function (node) { - this.break(); - } -}); -``` - -And estraverse provides `estraverse.replace` function. When returning node from `enter`/`leave`, current node is replaced with it. - -```javascript -result = estraverse.replace(tree, { - enter: function (node) { - // Replace it with replaced. - if (node.type === 'Literal') - return replaced; - } -}); -``` - -By passing `visitor.keys` mapping, we can extend estraverse traversing functionality. - -```javascript -// This tree contains a user-defined `TestExpression` node. -var tree = { - type: 'TestExpression', - - // This 'argument' is the property containing the other **node**. - argument: { - type: 'Literal', - value: 20 - }, - - // This 'extended' is the property not containing the other **node**. - extended: true -}; -estraverse.traverse(tree, { - enter: function (node) { }, - - // Extending the exising traversing rules. - keys: { - // TargetNodeName: [ 'keys', 'containing', 'the', 'other', '**node**' ] - TestExpression: ['argument'] - } -}); -``` - -By passing `visitor.fallback` option, we can control the behavior when encountering unknown nodes. -```javascript -// This tree contains a user-defined `TestExpression` node. -var tree = { - type: 'TestExpression', - - // This 'argument' is the property containing the other **node**. - argument: { - type: 'Literal', - value: 20 - }, - - // This 'extended' is the property not containing the other **node**. - extended: true -}; -estraverse.traverse(tree, { - enter: function (node) { }, - - // Iterating the child **nodes** of unknown nodes. - fallback: 'iteration' -}); -``` - -### License - -Copyright (C) 2012-2013 [Yusuke Suzuki](http://github.com/Constellation) - (twitter: [@Constellation](http://twitter.com/Constellation)) and other contributors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/estraverse/estraverse.js b/fundamentals/bug-challenge-es6/node_modules/estraverse/estraverse.js deleted file mode 100644 index 99bbb8c3b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/estraverse/estraverse.js +++ /dev/null @@ -1,845 +0,0 @@ -/* - Copyright (C) 2012-2013 Yusuke Suzuki - Copyright (C) 2012 Ariya Hidayat - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ -/*jslint vars:false, bitwise:true*/ -/*jshint indent:4*/ -/*global exports:true, define:true*/ -(function (root, factory) { - 'use strict'; - - // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, - // and plain browser loading, - if (typeof define === 'function' && define.amd) { - define(['exports'], factory); - } else if (typeof exports !== 'undefined') { - factory(exports); - } else { - factory((root.estraverse = {})); - } -}(this, function clone(exports) { - 'use strict'; - - var Syntax, - isArray, - VisitorOption, - VisitorKeys, - objectCreate, - objectKeys, - BREAK, - SKIP, - REMOVE; - - function ignoreJSHintError() { } - - isArray = Array.isArray; - if (!isArray) { - isArray = function isArray(array) { - return Object.prototype.toString.call(array) === '[object Array]'; - }; - } - - function deepCopy(obj) { - var ret = {}, key, val; - for (key in obj) { - if (obj.hasOwnProperty(key)) { - val = obj[key]; - if (typeof val === 'object' && val !== null) { - ret[key] = deepCopy(val); - } else { - ret[key] = val; - } - } - } - return ret; - } - - function shallowCopy(obj) { - var ret = {}, key; - for (key in obj) { - if (obj.hasOwnProperty(key)) { - ret[key] = obj[key]; - } - } - return ret; - } - ignoreJSHintError(shallowCopy); - - // based on LLVM libc++ upper_bound / lower_bound - // MIT License - - function upperBound(array, func) { - var diff, len, i, current; - - len = array.length; - i = 0; - - while (len) { - diff = len >>> 1; - current = i + diff; - if (func(array[current])) { - len = diff; - } else { - i = current + 1; - len -= diff + 1; - } - } - return i; - } - - function lowerBound(array, func) { - var diff, len, i, current; - - len = array.length; - i = 0; - - while (len) { - diff = len >>> 1; - current = i + diff; - if (func(array[current])) { - i = current + 1; - len -= diff + 1; - } else { - len = diff; - } - } - return i; - } - ignoreJSHintError(lowerBound); - - objectCreate = Object.create || (function () { - function F() { } - - return function (o) { - F.prototype = o; - return new F(); - }; - })(); - - objectKeys = Object.keys || function (o) { - var keys = [], key; - for (key in o) { - keys.push(key); - } - return keys; - }; - - function extend(to, from) { - var keys = objectKeys(from), key, i, len; - for (i = 0, len = keys.length; i < len; i += 1) { - key = keys[i]; - to[key] = from[key]; - } - return to; - } - - Syntax = { - AssignmentExpression: 'AssignmentExpression', - ArrayExpression: 'ArrayExpression', - ArrayPattern: 'ArrayPattern', - ArrowFunctionExpression: 'ArrowFunctionExpression', - AwaitExpression: 'AwaitExpression', // CAUTION: It's deferred to ES7. - BlockStatement: 'BlockStatement', - BinaryExpression: 'BinaryExpression', - BreakStatement: 'BreakStatement', - CallExpression: 'CallExpression', - CatchClause: 'CatchClause', - ClassBody: 'ClassBody', - ClassDeclaration: 'ClassDeclaration', - ClassExpression: 'ClassExpression', - ComprehensionBlock: 'ComprehensionBlock', // CAUTION: It's deferred to ES7. - ComprehensionExpression: 'ComprehensionExpression', // CAUTION: It's deferred to ES7. - ConditionalExpression: 'ConditionalExpression', - ContinueStatement: 'ContinueStatement', - DebuggerStatement: 'DebuggerStatement', - DirectiveStatement: 'DirectiveStatement', - DoWhileStatement: 'DoWhileStatement', - EmptyStatement: 'EmptyStatement', - ExportBatchSpecifier: 'ExportBatchSpecifier', - ExportDeclaration: 'ExportDeclaration', - ExportSpecifier: 'ExportSpecifier', - ExpressionStatement: 'ExpressionStatement', - ForStatement: 'ForStatement', - ForInStatement: 'ForInStatement', - ForOfStatement: 'ForOfStatement', - FunctionDeclaration: 'FunctionDeclaration', - FunctionExpression: 'FunctionExpression', - GeneratorExpression: 'GeneratorExpression', // CAUTION: It's deferred to ES7. - Identifier: 'Identifier', - IfStatement: 'IfStatement', - ImportDeclaration: 'ImportDeclaration', - ImportDefaultSpecifier: 'ImportDefaultSpecifier', - ImportNamespaceSpecifier: 'ImportNamespaceSpecifier', - ImportSpecifier: 'ImportSpecifier', - Literal: 'Literal', - LabeledStatement: 'LabeledStatement', - LogicalExpression: 'LogicalExpression', - MemberExpression: 'MemberExpression', - MethodDefinition: 'MethodDefinition', - ModuleSpecifier: 'ModuleSpecifier', - NewExpression: 'NewExpression', - ObjectExpression: 'ObjectExpression', - ObjectPattern: 'ObjectPattern', - Program: 'Program', - Property: 'Property', - ReturnStatement: 'ReturnStatement', - SequenceExpression: 'SequenceExpression', - SpreadElement: 'SpreadElement', - SwitchStatement: 'SwitchStatement', - SwitchCase: 'SwitchCase', - TaggedTemplateExpression: 'TaggedTemplateExpression', - TemplateElement: 'TemplateElement', - TemplateLiteral: 'TemplateLiteral', - ThisExpression: 'ThisExpression', - ThrowStatement: 'ThrowStatement', - TryStatement: 'TryStatement', - UnaryExpression: 'UnaryExpression', - UpdateExpression: 'UpdateExpression', - VariableDeclaration: 'VariableDeclaration', - VariableDeclarator: 'VariableDeclarator', - WhileStatement: 'WhileStatement', - WithStatement: 'WithStatement', - YieldExpression: 'YieldExpression' - }; - - VisitorKeys = { - AssignmentExpression: ['left', 'right'], - ArrayExpression: ['elements'], - ArrayPattern: ['elements'], - ArrowFunctionExpression: ['params', 'defaults', 'rest', 'body'], - AwaitExpression: ['argument'], // CAUTION: It's deferred to ES7. - BlockStatement: ['body'], - BinaryExpression: ['left', 'right'], - BreakStatement: ['label'], - CallExpression: ['callee', 'arguments'], - CatchClause: ['param', 'body'], - ClassBody: ['body'], - ClassDeclaration: ['id', 'body', 'superClass'], - ClassExpression: ['id', 'body', 'superClass'], - ComprehensionBlock: ['left', 'right'], // CAUTION: It's deferred to ES7. - ComprehensionExpression: ['blocks', 'filter', 'body'], // CAUTION: It's deferred to ES7. - ConditionalExpression: ['test', 'consequent', 'alternate'], - ContinueStatement: ['label'], - DebuggerStatement: [], - DirectiveStatement: [], - DoWhileStatement: ['body', 'test'], - EmptyStatement: [], - ExportBatchSpecifier: [], - ExportDeclaration: ['declaration', 'specifiers', 'source'], - ExportSpecifier: ['id', 'name'], - ExpressionStatement: ['expression'], - ForStatement: ['init', 'test', 'update', 'body'], - ForInStatement: ['left', 'right', 'body'], - ForOfStatement: ['left', 'right', 'body'], - FunctionDeclaration: ['id', 'params', 'defaults', 'rest', 'body'], - FunctionExpression: ['id', 'params', 'defaults', 'rest', 'body'], - GeneratorExpression: ['blocks', 'filter', 'body'], // CAUTION: It's deferred to ES7. - Identifier: [], - IfStatement: ['test', 'consequent', 'alternate'], - ImportDeclaration: ['specifiers', 'source'], - ImportDefaultSpecifier: ['id'], - ImportNamespaceSpecifier: ['id'], - ImportSpecifier: ['id', 'name'], - Literal: [], - LabeledStatement: ['label', 'body'], - LogicalExpression: ['left', 'right'], - MemberExpression: ['object', 'property'], - MethodDefinition: ['key', 'value'], - ModuleSpecifier: [], - NewExpression: ['callee', 'arguments'], - ObjectExpression: ['properties'], - ObjectPattern: ['properties'], - Program: ['body'], - Property: ['key', 'value'], - ReturnStatement: ['argument'], - SequenceExpression: ['expressions'], - SpreadElement: ['argument'], - SwitchStatement: ['discriminant', 'cases'], - SwitchCase: ['test', 'consequent'], - TaggedTemplateExpression: ['tag', 'quasi'], - TemplateElement: [], - TemplateLiteral: ['quasis', 'expressions'], - ThisExpression: [], - ThrowStatement: ['argument'], - TryStatement: ['block', 'handlers', 'handler', 'guardedHandlers', 'finalizer'], - UnaryExpression: ['argument'], - UpdateExpression: ['argument'], - VariableDeclaration: ['declarations'], - VariableDeclarator: ['id', 'init'], - WhileStatement: ['test', 'body'], - WithStatement: ['object', 'body'], - YieldExpression: ['argument'] - }; - - // unique id - BREAK = {}; - SKIP = {}; - REMOVE = {}; - - VisitorOption = { - Break: BREAK, - Skip: SKIP, - Remove: REMOVE - }; - - function Reference(parent, key) { - this.parent = parent; - this.key = key; - } - - Reference.prototype.replace = function replace(node) { - this.parent[this.key] = node; - }; - - Reference.prototype.remove = function remove() { - if (isArray(this.parent)) { - this.parent.splice(this.key, 1); - return true; - } else { - this.replace(null); - return false; - } - }; - - function Element(node, path, wrap, ref) { - this.node = node; - this.path = path; - this.wrap = wrap; - this.ref = ref; - } - - function Controller() { } - - // API: - // return property path array from root to current node - Controller.prototype.path = function path() { - var i, iz, j, jz, result, element; - - function addToPath(result, path) { - if (isArray(path)) { - for (j = 0, jz = path.length; j < jz; ++j) { - result.push(path[j]); - } - } else { - result.push(path); - } - } - - // root node - if (!this.__current.path) { - return null; - } - - // first node is sentinel, second node is root element - result = []; - for (i = 2, iz = this.__leavelist.length; i < iz; ++i) { - element = this.__leavelist[i]; - addToPath(result, element.path); - } - addToPath(result, this.__current.path); - return result; - }; - - // API: - // return type of current node - Controller.prototype.type = function () { - var node = this.current(); - return node.type || this.__current.wrap; - }; - - // API: - // return array of parent elements - Controller.prototype.parents = function parents() { - var i, iz, result; - - // first node is sentinel - result = []; - for (i = 1, iz = this.__leavelist.length; i < iz; ++i) { - result.push(this.__leavelist[i].node); - } - - return result; - }; - - // API: - // return current node - Controller.prototype.current = function current() { - return this.__current.node; - }; - - Controller.prototype.__execute = function __execute(callback, element) { - var previous, result; - - result = undefined; - - previous = this.__current; - this.__current = element; - this.__state = null; - if (callback) { - result = callback.call(this, element.node, this.__leavelist[this.__leavelist.length - 1].node); - } - this.__current = previous; - - return result; - }; - - // API: - // notify control skip / break - Controller.prototype.notify = function notify(flag) { - this.__state = flag; - }; - - // API: - // skip child nodes of current node - Controller.prototype.skip = function () { - this.notify(SKIP); - }; - - // API: - // break traversals - Controller.prototype['break'] = function () { - this.notify(BREAK); - }; - - // API: - // remove node - Controller.prototype.remove = function () { - this.notify(REMOVE); - }; - - Controller.prototype.__initialize = function(root, visitor) { - this.visitor = visitor; - this.root = root; - this.__worklist = []; - this.__leavelist = []; - this.__current = null; - this.__state = null; - this.__fallback = visitor.fallback === 'iteration'; - this.__keys = VisitorKeys; - if (visitor.keys) { - this.__keys = extend(objectCreate(this.__keys), visitor.keys); - } - }; - - function isNode(node) { - if (node == null) { - return false; - } - return typeof node === 'object' && typeof node.type === 'string'; - } - - function isProperty(nodeType, key) { - return (nodeType === Syntax.ObjectExpression || nodeType === Syntax.ObjectPattern) && 'properties' === key; - } - - Controller.prototype.traverse = function traverse(root, visitor) { - var worklist, - leavelist, - element, - node, - nodeType, - ret, - key, - current, - current2, - candidates, - candidate, - sentinel; - - this.__initialize(root, visitor); - - sentinel = {}; - - // reference - worklist = this.__worklist; - leavelist = this.__leavelist; - - // initialize - worklist.push(new Element(root, null, null, null)); - leavelist.push(new Element(null, null, null, null)); - - while (worklist.length) { - element = worklist.pop(); - - if (element === sentinel) { - element = leavelist.pop(); - - ret = this.__execute(visitor.leave, element); - - if (this.__state === BREAK || ret === BREAK) { - return; - } - continue; - } - - if (element.node) { - - ret = this.__execute(visitor.enter, element); - - if (this.__state === BREAK || ret === BREAK) { - return; - } - - worklist.push(sentinel); - leavelist.push(element); - - if (this.__state === SKIP || ret === SKIP) { - continue; - } - - node = element.node; - nodeType = element.wrap || node.type; - candidates = this.__keys[nodeType]; - if (!candidates) { - if (this.__fallback) { - candidates = objectKeys(node); - } else { - throw new Error('Unknown node type ' + nodeType + '.'); - } - } - - current = candidates.length; - while ((current -= 1) >= 0) { - key = candidates[current]; - candidate = node[key]; - if (!candidate) { - continue; - } - - if (isArray(candidate)) { - current2 = candidate.length; - while ((current2 -= 1) >= 0) { - if (!candidate[current2]) { - continue; - } - if (isProperty(nodeType, candidates[current])) { - element = new Element(candidate[current2], [key, current2], 'Property', null); - } else if (isNode(candidate[current2])) { - element = new Element(candidate[current2], [key, current2], null, null); - } else { - continue; - } - worklist.push(element); - } - } else if (isNode(candidate)) { - worklist.push(new Element(candidate, key, null, null)); - } - } - } - } - }; - - Controller.prototype.replace = function replace(root, visitor) { - function removeElem(element) { - var i, - key, - nextElem, - parent; - - if (element.ref.remove()) { - // When the reference is an element of an array. - key = element.ref.key; - parent = element.ref.parent; - - // If removed from array, then decrease following items' keys. - i = worklist.length; - while (i--) { - nextElem = worklist[i]; - if (nextElem.ref && nextElem.ref.parent === parent) { - if (nextElem.ref.key < key) { - break; - } - --nextElem.ref.key; - } - } - } - } - - var worklist, - leavelist, - node, - nodeType, - target, - element, - current, - current2, - candidates, - candidate, - sentinel, - outer, - key; - - this.__initialize(root, visitor); - - sentinel = {}; - - // reference - worklist = this.__worklist; - leavelist = this.__leavelist; - - // initialize - outer = { - root: root - }; - element = new Element(root, null, null, new Reference(outer, 'root')); - worklist.push(element); - leavelist.push(element); - - while (worklist.length) { - element = worklist.pop(); - - if (element === sentinel) { - element = leavelist.pop(); - - target = this.__execute(visitor.leave, element); - - // node may be replaced with null, - // so distinguish between undefined and null in this place - if (target !== undefined && target !== BREAK && target !== SKIP && target !== REMOVE) { - // replace - element.ref.replace(target); - } - - if (this.__state === REMOVE || target === REMOVE) { - removeElem(element); - } - - if (this.__state === BREAK || target === BREAK) { - return outer.root; - } - continue; - } - - target = this.__execute(visitor.enter, element); - - // node may be replaced with null, - // so distinguish between undefined and null in this place - if (target !== undefined && target !== BREAK && target !== SKIP && target !== REMOVE) { - // replace - element.ref.replace(target); - element.node = target; - } - - if (this.__state === REMOVE || target === REMOVE) { - removeElem(element); - element.node = null; - } - - if (this.__state === BREAK || target === BREAK) { - return outer.root; - } - - // node may be null - node = element.node; - if (!node) { - continue; - } - - worklist.push(sentinel); - leavelist.push(element); - - if (this.__state === SKIP || target === SKIP) { - continue; - } - - nodeType = element.wrap || node.type; - candidates = this.__keys[nodeType]; - if (!candidates) { - if (this.__fallback) { - candidates = objectKeys(node); - } else { - throw new Error('Unknown node type ' + nodeType + '.'); - } - } - - current = candidates.length; - while ((current -= 1) >= 0) { - key = candidates[current]; - candidate = node[key]; - if (!candidate) { - continue; - } - - if (isArray(candidate)) { - current2 = candidate.length; - while ((current2 -= 1) >= 0) { - if (!candidate[current2]) { - continue; - } - if (isProperty(nodeType, candidates[current])) { - element = new Element(candidate[current2], [key, current2], 'Property', new Reference(candidate, current2)); - } else if (isNode(candidate[current2])) { - element = new Element(candidate[current2], [key, current2], null, new Reference(candidate, current2)); - } else { - continue; - } - worklist.push(element); - } - } else if (isNode(candidate)) { - worklist.push(new Element(candidate, key, null, new Reference(node, key))); - } - } - } - - return outer.root; - }; - - function traverse(root, visitor) { - var controller = new Controller(); - return controller.traverse(root, visitor); - } - - function replace(root, visitor) { - var controller = new Controller(); - return controller.replace(root, visitor); - } - - function extendCommentRange(comment, tokens) { - var target; - - target = upperBound(tokens, function search(token) { - return token.range[0] > comment.range[0]; - }); - - comment.extendedRange = [comment.range[0], comment.range[1]]; - - if (target !== tokens.length) { - comment.extendedRange[1] = tokens[target].range[0]; - } - - target -= 1; - if (target >= 0) { - comment.extendedRange[0] = tokens[target].range[1]; - } - - return comment; - } - - function attachComments(tree, providedComments, tokens) { - // At first, we should calculate extended comment ranges. - var comments = [], comment, len, i, cursor; - - if (!tree.range) { - throw new Error('attachComments needs range information'); - } - - // tokens array is empty, we attach comments to tree as 'leadingComments' - if (!tokens.length) { - if (providedComments.length) { - for (i = 0, len = providedComments.length; i < len; i += 1) { - comment = deepCopy(providedComments[i]); - comment.extendedRange = [0, tree.range[0]]; - comments.push(comment); - } - tree.leadingComments = comments; - } - return tree; - } - - for (i = 0, len = providedComments.length; i < len; i += 1) { - comments.push(extendCommentRange(deepCopy(providedComments[i]), tokens)); - } - - // This is based on John Freeman's implementation. - cursor = 0; - traverse(tree, { - enter: function (node) { - var comment; - - while (cursor < comments.length) { - comment = comments[cursor]; - if (comment.extendedRange[1] > node.range[0]) { - break; - } - - if (comment.extendedRange[1] === node.range[0]) { - if (!node.leadingComments) { - node.leadingComments = []; - } - node.leadingComments.push(comment); - comments.splice(cursor, 1); - } else { - cursor += 1; - } - } - - // already out of owned node - if (cursor === comments.length) { - return VisitorOption.Break; - } - - if (comments[cursor].extendedRange[0] > node.range[1]) { - return VisitorOption.Skip; - } - } - }); - - cursor = 0; - traverse(tree, { - leave: function (node) { - var comment; - - while (cursor < comments.length) { - comment = comments[cursor]; - if (node.range[1] < comment.extendedRange[0]) { - break; - } - - if (node.range[1] === comment.extendedRange[0]) { - if (!node.trailingComments) { - node.trailingComments = []; - } - node.trailingComments.push(comment); - comments.splice(cursor, 1); - } else { - cursor += 1; - } - } - - // already out of owned node - if (cursor === comments.length) { - return VisitorOption.Break; - } - - if (comments[cursor].extendedRange[0] > node.range[1]) { - return VisitorOption.Skip; - } - } - }); - - return tree; - } - - exports.version = '1.8.1-dev'; - exports.Syntax = Syntax; - exports.traverse = traverse; - exports.replace = replace; - exports.attachComments = attachComments; - exports.VisitorKeys = VisitorKeys; - exports.VisitorOption = VisitorOption; - exports.Controller = Controller; - exports.cloneEnvironment = function () { return clone({}); }; - - return exports; -})); -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/fundamentals/bug-challenge-es6/node_modules/estraverse/gulpfile.js b/fundamentals/bug-challenge-es6/node_modules/estraverse/gulpfile.js deleted file mode 100644 index 8772bbcca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/estraverse/gulpfile.js +++ /dev/null @@ -1,70 +0,0 @@ -/* - Copyright (C) 2014 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -'use strict'; - -var gulp = require('gulp'), - git = require('gulp-git'), - bump = require('gulp-bump'), - filter = require('gulp-filter'), - tagVersion = require('gulp-tag-version'); - -var TEST = [ 'test/*.js' ]; -var POWERED = [ 'powered-test/*.js' ]; -var SOURCE = [ 'src/**/*.js' ]; - -/** - * Bumping version number and tagging the repository with it. - * Please read http://semver.org/ - * - * You can use the commands - * - * gulp patch # makes v0.1.0 -> v0.1.1 - * gulp feature # makes v0.1.1 -> v0.2.0 - * gulp release # makes v0.2.1 -> v1.0.0 - * - * To bump the version numbers accordingly after you did a patch, - * introduced a feature or made a backwards-incompatible release. - */ - -function inc(importance) { - // get all the files to bump version in - return gulp.src(['./package.json']) - // bump the version number in those files - .pipe(bump({type: importance})) - // save it back to filesystem - .pipe(gulp.dest('./')) - // commit the changed version number - .pipe(git.commit('Bumps package version')) - // read only one file to get the version number - .pipe(filter('package.json')) - // **tag it in the repository** - .pipe(tagVersion({ - prefix: '' - })); -} - -gulp.task('patch', [ ], function () { return inc('patch'); }) -gulp.task('minor', [ ], function () { return inc('minor'); }) -gulp.task('major', [ ], function () { return inc('major'); }) diff --git a/fundamentals/bug-challenge-es6/node_modules/estraverse/package.json b/fundamentals/bug-challenge-es6/node_modules/estraverse/package.json deleted file mode 100644 index 454dd88ee..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/estraverse/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_args": [ - [ - "estraverse@^1.9.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/escodegen" - ] - ], - "_from": "estraverse@>=1.9.1 <2.0.0", - "_id": "estraverse@1.9.3", - "_inCache": true, - "_installable": true, - "_location": "/estraverse", - "_npmUser": { - "email": "utatane.tea@gmail.com", - "name": "constellation" - }, - "_npmVersion": "1.4.28", - "_phantomChildren": {}, - "_requested": { - "name": "estraverse", - "raw": "estraverse@^1.9.1", - "rawSpec": "^1.9.1", - "scope": null, - "spec": ">=1.9.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/escodegen" - ], - "_resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "_shasum": "af67f2dc922582415950926091a4005d29c9bb44", - "_shrinkwrap": null, - "_spec": "estraverse@^1.9.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/escodegen", - "bugs": { - "url": "https://github.com/estools/estraverse/issues" - }, - "dependencies": {}, - "description": "ECMAScript JS AST traversal functions", - "devDependencies": { - "chai": "^2.1.1", - "coffee-script": "^1.8.0", - "gulp": "^3.8.10", - "gulp-bump": "^0.2.2", - "gulp-filter": "^2.0.0", - "gulp-git": "^1.0.1", - "gulp-tag-version": "^1.2.1", - "jshint": "^2.5.6", - "mocha": "^2.1.0" - }, - "directories": {}, - "dist": { - "shasum": "af67f2dc922582415950926091a4005d29c9bb44", - "tarball": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "gitHead": "9c249de6b2ea08655d3c68bfc30b5d7d81dc8703", - "homepage": "https://github.com/estools/estraverse", - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/estools/estraverse/raw/master/LICENSE.BSD" - } - ], - "main": "estraverse.js", - "maintainers": [ - { - "email": "utatane.tea@gmail.com", - "name": "constellation" - } - ], - "name": "estraverse", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/estools/estraverse.git" - }, - "scripts": { - "lint": "jshint estraverse.js", - "test": "npm run-script lint && npm run-script unit-test", - "unit-test": "mocha --compilers coffee:coffee-script/register" - }, - "version": "1.9.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/esutils/LICENSE.BSD b/fundamentals/bug-challenge-es6/node_modules/esutils/LICENSE.BSD deleted file mode 100644 index 3e580c355..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/esutils/LICENSE.BSD +++ /dev/null @@ -1,19 +0,0 @@ -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/esutils/README.md b/fundamentals/bug-challenge-es6/node_modules/esutils/README.md deleted file mode 100644 index 610d8bde6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/esutils/README.md +++ /dev/null @@ -1,169 +0,0 @@ -### esutils [![Build Status](https://secure.travis-ci.org/estools/esutils.svg)](http://travis-ci.org/estools/esutils) -esutils ([esutils](http://github.com/estools/esutils)) is -utility box for ECMAScript language tools. - -### API - -### ast - -#### ast.isExpression(node) - -Returns true if `node` is an Expression as defined in ECMA262 edition 5.1 section -[11](https://es5.github.io/#x11). - -#### ast.isStatement(node) - -Returns true if `node` is a Statement as defined in ECMA262 edition 5.1 section -[12](https://es5.github.io/#x12). - -#### ast.isIterationStatement(node) - -Returns true if `node` is an IterationStatement as defined in ECMA262 edition -5.1 section [12.6](https://es5.github.io/#x12.6). - -#### ast.isSourceElement(node) - -Returns true if `node` is a SourceElement as defined in ECMA262 edition 5.1 -section [14](https://es5.github.io/#x14). - -#### ast.trailingStatement(node) - -Returns `Statement?` if `node` has trailing `Statement`. -```js -if (cond) - consequent; -``` -When taking this `IfStatement`, returns `consequent;` statement. - -#### ast.isProblematicIfStatement(node) - -Returns true if `node` is a problematic IfStatement. If `node` is a problematic `IfStatement`, `node` cannot be represented as an one on one JavaScript code. -```js -{ - type: 'IfStatement', - consequent: { - type: 'WithStatement', - body: { - type: 'IfStatement', - consequent: {type: 'EmptyStatement'} - } - }, - alternate: {type: 'EmptyStatement'} -} -``` -The above node cannot be represented as a JavaScript code, since the top level `else` alternate belongs to an inner `IfStatement`. - - -### code - -#### code.isDecimalDigit(code) - -Return true if provided code is decimal digit. - -#### code.isHexDigit(code) - -Return true if provided code is hexadecimal digit. - -#### code.isOctalDigit(code) - -Return true if provided code is octal digit. - -#### code.isWhiteSpace(code) - -Return true if provided code is white space. White space characters are formally defined in ECMA262. - -#### code.isLineTerminator(code) - -Return true if provided code is line terminator. Line terminator characters are formally defined in ECMA262. - -#### code.isIdentifierStart(code) - -Return true if provided code can be the first character of ECMA262 Identifier. They are formally defined in ECMA262. - -#### code.isIdentifierPart(code) - -Return true if provided code can be the trailing character of ECMA262 Identifier. They are formally defined in ECMA262. - -### keyword - -#### keyword.isKeywordES5(id, strict) - -Returns `true` if provided identifier string is a Keyword or Future Reserved Word -in ECMA262 edition 5.1. They are formally defined in ECMA262 sections -[7.6.1.1](http://es5.github.io/#x7.6.1.1) and [7.6.1.2](http://es5.github.io/#x7.6.1.2), -respectively. If the `strict` flag is truthy, this function additionally checks whether -`id` is a Keyword or Future Reserved Word under strict mode. - -#### keyword.isKeywordES6(id, strict) - -Returns `true` if provided identifier string is a Keyword or Future Reserved Word -in ECMA262 edition 6. They are formally defined in ECMA262 sections -[11.6.2.1](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-keywords) and -[11.6.2.2](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-future-reserved-words), -respectively. If the `strict` flag is truthy, this function additionally checks whether -`id` is a Keyword or Future Reserved Word under strict mode. - -#### keyword.isReservedWordES5(id, strict) - -Returns `true` if provided identifier string is a Reserved Word in ECMA262 edition 5.1. -They are formally defined in ECMA262 section [7.6.1](http://es5.github.io/#x7.6.1). -If the `strict` flag is truthy, this function additionally checks whether `id` -is a Reserved Word under strict mode. - -#### keyword.isReservedWordES6(id, strict) - -Returns `true` if provided identifier string is a Reserved Word in ECMA262 edition 6. -They are formally defined in ECMA262 section [11.6.2](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-reserved-words). -If the `strict` flag is truthy, this function additionally checks whether `id` -is a Reserved Word under strict mode. - -#### keyword.isRestrictedWord(id) - -Returns `true` if provided identifier string is one of `eval` or `arguments`. -They are restricted in strict mode code throughout ECMA262 edition 5.1 and -in ECMA262 edition 6 section [12.1.1](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-identifiers-static-semantics-early-errors). - -#### keyword.isIdentifierName(id) - -Return true if provided identifier string is an IdentifierName as specified in -ECMA262 edition 5.1 section [7.6](https://es5.github.io/#x7.6). - -#### keyword.isIdentifierES5(id, strict) - -Return true if provided identifier string is an Identifier as specified in -ECMA262 edition 5.1 section [7.6](https://es5.github.io/#x7.6). If the `strict` -flag is truthy, this function additionally checks whether `id` is an Identifier -under strict mode. - -#### keyword.isIdentifierES6(id, strict) - -Return true if provided identifier string is an Identifier as specified in -ECMA262 edition 6 section [12.1](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-identifiers). -If the `strict` flag is truthy, this function additionally checks whether `id` -is an Identifier under strict mode. - -### License - -Copyright (C) 2013 [Yusuke Suzuki](http://github.com/Constellation) - (twitter: [@Constellation](http://twitter.com/Constellation)) and other contributors. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/esutils/lib/ast.js b/fundamentals/bug-challenge-es6/node_modules/esutils/lib/ast.js deleted file mode 100644 index 8faadae1c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/esutils/lib/ast.js +++ /dev/null @@ -1,144 +0,0 @@ -/* - Copyright (C) 2013 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -(function () { - 'use strict'; - - function isExpression(node) { - if (node == null) { return false; } - switch (node.type) { - case 'ArrayExpression': - case 'AssignmentExpression': - case 'BinaryExpression': - case 'CallExpression': - case 'ConditionalExpression': - case 'FunctionExpression': - case 'Identifier': - case 'Literal': - case 'LogicalExpression': - case 'MemberExpression': - case 'NewExpression': - case 'ObjectExpression': - case 'SequenceExpression': - case 'ThisExpression': - case 'UnaryExpression': - case 'UpdateExpression': - return true; - } - return false; - } - - function isIterationStatement(node) { - if (node == null) { return false; } - switch (node.type) { - case 'DoWhileStatement': - case 'ForInStatement': - case 'ForStatement': - case 'WhileStatement': - return true; - } - return false; - } - - function isStatement(node) { - if (node == null) { return false; } - switch (node.type) { - case 'BlockStatement': - case 'BreakStatement': - case 'ContinueStatement': - case 'DebuggerStatement': - case 'DoWhileStatement': - case 'EmptyStatement': - case 'ExpressionStatement': - case 'ForInStatement': - case 'ForStatement': - case 'IfStatement': - case 'LabeledStatement': - case 'ReturnStatement': - case 'SwitchStatement': - case 'ThrowStatement': - case 'TryStatement': - case 'VariableDeclaration': - case 'WhileStatement': - case 'WithStatement': - return true; - } - return false; - } - - function isSourceElement(node) { - return isStatement(node) || node != null && node.type === 'FunctionDeclaration'; - } - - function trailingStatement(node) { - switch (node.type) { - case 'IfStatement': - if (node.alternate != null) { - return node.alternate; - } - return node.consequent; - - case 'LabeledStatement': - case 'ForStatement': - case 'ForInStatement': - case 'WhileStatement': - case 'WithStatement': - return node.body; - } - return null; - } - - function isProblematicIfStatement(node) { - var current; - - if (node.type !== 'IfStatement') { - return false; - } - if (node.alternate == null) { - return false; - } - current = node.consequent; - do { - if (current.type === 'IfStatement') { - if (current.alternate == null) { - return true; - } - } - current = trailingStatement(current); - } while (current); - - return false; - } - - module.exports = { - isExpression: isExpression, - isStatement: isStatement, - isIterationStatement: isIterationStatement, - isSourceElement: isSourceElement, - isProblematicIfStatement: isProblematicIfStatement, - - trailingStatement: trailingStatement - }; -}()); -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/fundamentals/bug-challenge-es6/node_modules/esutils/lib/code.js b/fundamentals/bug-challenge-es6/node_modules/esutils/lib/code.js deleted file mode 100644 index 2a7c19d63..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/esutils/lib/code.js +++ /dev/null @@ -1,135 +0,0 @@ -/* - Copyright (C) 2013-2014 Yusuke Suzuki - Copyright (C) 2014 Ivan Nikulin - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -(function () { - 'use strict'; - - var ES6Regex, ES5Regex, NON_ASCII_WHITESPACES, IDENTIFIER_START, IDENTIFIER_PART, ch; - - // See `tools/generate-identifier-regex.js`. - ES5Regex = { - // ECMAScript 5.1/Unicode v7.0.0 NonAsciiIdentifierStart: - NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/, - // ECMAScript 5.1/Unicode v7.0.0 NonAsciiIdentifierPart: - NonAsciiIdentifierPart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/ - }; - - ES6Regex = { - // ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierStart: - NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B2\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDE00-\uDE11\uDE13-\uDE2B\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDE00-\uDE2F\uDE44\uDE80-\uDEAA]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]/, - // ECMAScript 6/Unicode v7.0.0 NonAsciiIdentifierPart: - NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B2\u08E4-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA69D\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA7AD\uA7B0\uA7B1\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB5F\uAB64\uAB65\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2D\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDD0-\uDDDA\uDE00-\uDE11\uDE13-\uDE37\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF01-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF98]|\uD809[\uDC00-\uDC6E]|[\uD80C\uD840-\uD868\uD86A-\uD86C][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/ - }; - - function isDecimalDigit(ch) { - return 0x30 <= ch && ch <= 0x39; // 0..9 - } - - function isHexDigit(ch) { - return 0x30 <= ch && ch <= 0x39 || // 0..9 - 0x61 <= ch && ch <= 0x66 || // a..f - 0x41 <= ch && ch <= 0x46; // A..F - } - - function isOctalDigit(ch) { - return ch >= 0x30 && ch <= 0x37; // 0..7 - } - - // 7.2 White Space - - NON_ASCII_WHITESPACES = [ - 0x1680, 0x180E, - 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, - 0x202F, 0x205F, - 0x3000, - 0xFEFF - ]; - - function isWhiteSpace(ch) { - return ch === 0x20 || ch === 0x09 || ch === 0x0B || ch === 0x0C || ch === 0xA0 || - ch >= 0x1680 && NON_ASCII_WHITESPACES.indexOf(ch) >= 0; - } - - // 7.3 Line Terminators - - function isLineTerminator(ch) { - return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029; - } - - // 7.6 Identifier Names and Identifiers - - function fromCodePoint(cp) { - if (cp <= 0xFFFF) { return String.fromCharCode(cp); } - var cu1 = String.fromCharCode(Math.floor((cp - 0x10000) / 0x400) + 0xD800); - var cu2 = String.fromCharCode(((cp - 0x10000) % 0x400) + 0xDC00); - return cu1 + cu2; - } - - IDENTIFIER_START = new Array(0x80); - for(ch = 0; ch < 0x80; ++ch) { - IDENTIFIER_START[ch] = - ch >= 0x61 && ch <= 0x7A || // a..z - ch >= 0x41 && ch <= 0x5A || // A..Z - ch === 0x24 || ch === 0x5F; // $ (dollar) and _ (underscore) - } - - IDENTIFIER_PART = new Array(0x80); - for(ch = 0; ch < 0x80; ++ch) { - IDENTIFIER_PART[ch] = - ch >= 0x61 && ch <= 0x7A || // a..z - ch >= 0x41 && ch <= 0x5A || // A..Z - ch >= 0x30 && ch <= 0x39 || // 0..9 - ch === 0x24 || ch === 0x5F; // $ (dollar) and _ (underscore) - } - - function isIdentifierStartES5(ch) { - return ch < 0x80 ? IDENTIFIER_START[ch] : ES5Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch)); - } - - function isIdentifierPartES5(ch) { - return ch < 0x80 ? IDENTIFIER_PART[ch] : ES5Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch)); - } - - function isIdentifierStartES6(ch) { - return ch < 0x80 ? IDENTIFIER_START[ch] : ES6Regex.NonAsciiIdentifierStart.test(fromCodePoint(ch)); - } - - function isIdentifierPartES6(ch) { - return ch < 0x80 ? IDENTIFIER_PART[ch] : ES6Regex.NonAsciiIdentifierPart.test(fromCodePoint(ch)); - } - - module.exports = { - isDecimalDigit: isDecimalDigit, - isHexDigit: isHexDigit, - isOctalDigit: isOctalDigit, - isWhiteSpace: isWhiteSpace, - isLineTerminator: isLineTerminator, - isIdentifierStartES5: isIdentifierStartES5, - isIdentifierPartES5: isIdentifierPartES5, - isIdentifierStartES6: isIdentifierStartES6, - isIdentifierPartES6: isIdentifierPartES6 - }; -}()); -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/fundamentals/bug-challenge-es6/node_modules/esutils/lib/keyword.js b/fundamentals/bug-challenge-es6/node_modules/esutils/lib/keyword.js deleted file mode 100644 index 13c8c6a96..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/esutils/lib/keyword.js +++ /dev/null @@ -1,165 +0,0 @@ -/* - Copyright (C) 2013 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -(function () { - 'use strict'; - - var code = require('./code'); - - function isStrictModeReservedWordES6(id) { - switch (id) { - case 'implements': - case 'interface': - case 'package': - case 'private': - case 'protected': - case 'public': - case 'static': - case 'let': - return true; - default: - return false; - } - } - - function isKeywordES5(id, strict) { - // yield should not be treated as keyword under non-strict mode. - if (!strict && id === 'yield') { - return false; - } - return isKeywordES6(id, strict); - } - - function isKeywordES6(id, strict) { - if (strict && isStrictModeReservedWordES6(id)) { - return true; - } - - switch (id.length) { - case 2: - return (id === 'if') || (id === 'in') || (id === 'do'); - case 3: - return (id === 'var') || (id === 'for') || (id === 'new') || (id === 'try'); - case 4: - return (id === 'this') || (id === 'else') || (id === 'case') || - (id === 'void') || (id === 'with') || (id === 'enum'); - case 5: - return (id === 'while') || (id === 'break') || (id === 'catch') || - (id === 'throw') || (id === 'const') || (id === 'yield') || - (id === 'class') || (id === 'super'); - case 6: - return (id === 'return') || (id === 'typeof') || (id === 'delete') || - (id === 'switch') || (id === 'export') || (id === 'import'); - case 7: - return (id === 'default') || (id === 'finally') || (id === 'extends'); - case 8: - return (id === 'function') || (id === 'continue') || (id === 'debugger'); - case 10: - return (id === 'instanceof'); - default: - return false; - } - } - - function isReservedWordES5(id, strict) { - return id === 'null' || id === 'true' || id === 'false' || isKeywordES5(id, strict); - } - - function isReservedWordES6(id, strict) { - return id === 'null' || id === 'true' || id === 'false' || isKeywordES6(id, strict); - } - - function isRestrictedWord(id) { - return id === 'eval' || id === 'arguments'; - } - - function isIdentifierNameES5(id) { - var i, iz, ch; - - if (id.length === 0) { return false; } - - ch = id.charCodeAt(0); - if (!code.isIdentifierStartES5(ch)) { - return false; - } - - for (i = 1, iz = id.length; i < iz; ++i) { - ch = id.charCodeAt(i); - if (!code.isIdentifierPartES5(ch)) { - return false; - } - } - return true; - } - - function decodeUtf16(lead, trail) { - return (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000; - } - - function isIdentifierNameES6(id) { - var i, iz, ch, lowCh, check; - - if (id.length === 0) { return false; } - - check = code.isIdentifierStartES6; - for (i = 0, iz = id.length; i < iz; ++i) { - ch = id.charCodeAt(i); - if (0xD800 <= ch && ch <= 0xDBFF) { - ++i; - if (i >= iz) { return false; } - lowCh = id.charCodeAt(i); - if (!(0xDC00 <= lowCh && lowCh <= 0xDFFF)) { - return false; - } - ch = decodeUtf16(ch, lowCh); - } - if (!check(ch)) { - return false; - } - check = code.isIdentifierPartES6; - } - return true; - } - - function isIdentifierES5(id, strict) { - return isIdentifierNameES5(id) && !isReservedWordES5(id, strict); - } - - function isIdentifierES6(id, strict) { - return isIdentifierNameES6(id) && !isReservedWordES6(id, strict); - } - - module.exports = { - isKeywordES5: isKeywordES5, - isKeywordES6: isKeywordES6, - isReservedWordES5: isReservedWordES5, - isReservedWordES6: isReservedWordES6, - isRestrictedWord: isRestrictedWord, - isIdentifierNameES5: isIdentifierNameES5, - isIdentifierNameES6: isIdentifierNameES6, - isIdentifierES5: isIdentifierES5, - isIdentifierES6: isIdentifierES6 - }; -}()); -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/fundamentals/bug-challenge-es6/node_modules/esutils/lib/utils.js b/fundamentals/bug-challenge-es6/node_modules/esutils/lib/utils.js deleted file mode 100644 index ce18faa6b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/esutils/lib/utils.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - Copyright (C) 2013 Yusuke Suzuki - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - - -(function () { - 'use strict'; - - exports.ast = require('./ast'); - exports.code = require('./code'); - exports.keyword = require('./keyword'); -}()); -/* vim: set sw=4 ts=4 et tw=80 : */ diff --git a/fundamentals/bug-challenge-es6/node_modules/esutils/package.json b/fundamentals/bug-challenge-es6/node_modules/esutils/package.json deleted file mode 100644 index d8abaf772..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/esutils/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "_args": [ - [ - "esutils@^2.0.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-code-frame" - ] - ], - "_from": "esutils@>=2.0.2 <3.0.0", - "_id": "esutils@2.0.2", - "_inCache": true, - "_installable": true, - "_location": "/esutils", - "_nodeVersion": "0.12.0", - "_npmUser": { - "email": "npm@michael.ficarra.me", - "name": "michaelficarra" - }, - "_npmVersion": "2.5.1", - "_phantomChildren": {}, - "_requested": { - "name": "esutils", - "raw": "esutils@^2.0.2", - "rawSpec": "^2.0.2", - "scope": null, - "spec": ">=2.0.2 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-code-frame", - "/babel-types" - ], - "_resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "_shasum": "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b", - "_shrinkwrap": null, - "_spec": "esutils@^2.0.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-code-frame", - "bugs": { - "url": "https://github.com/estools/esutils/issues" - }, - "dependencies": {}, - "description": "utility box for ECMAScript language tools", - "devDependencies": { - "chai": "~1.7.2", - "coffee-script": "~1.6.3", - "jshint": "2.6.3", - "mocha": "~2.2.1", - "regenerate": "~1.2.1", - "unicode-7.0.0": "^0.1.5" - }, - "directories": { - "lib": "./lib" - }, - "dist": { - "shasum": "0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b", - "tarball": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "LICENSE.BSD", - "README.md", - "lib" - ], - "gitHead": "3ffd1c403f3f29db9e8a9574b1895682e57b6a7f", - "homepage": "https://github.com/estools/esutils", - "licenses": [ - { - "type": "BSD", - "url": "http://github.com/estools/esutils/raw/master/LICENSE.BSD" - } - ], - "main": "lib/utils.js", - "maintainers": [ - { - "email": "utatane.tea@gmail.com", - "name": "constellation" - }, - { - "email": "npm@michael.ficarra.me", - "name": "michaelficarra" - } - ], - "name": "esutils", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/estools/esutils.git" - }, - "scripts": { - "generate-regex": "node tools/generate-identifier-regex.js", - "lint": "jshint lib/*.js", - "test": "npm run-script lint && npm run-script unit-test", - "unit-test": "mocha --compilers coffee:coffee-script -R spec" - }, - "version": "2.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/exec-sh/.jshintrc b/fundamentals/bug-challenge-es6/node_modules/exec-sh/.jshintrc deleted file mode 100644 index 52e7cc7e6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/exec-sh/.jshintrc +++ /dev/null @@ -1,120 +0,0 @@ -{ - // -------------------------------------------------------------------- - // JSHint Configuration, Strict Edition - // -------------------------------------------------------------------- - // - // This is a options template for [JSHint][1], using [JSHint example][2] - // and [Ory Band's example][3] as basis and setting config values to - // be most strict: - // - // * set all enforcing options to true - // * set all relaxing options to false - // * set all environment options to false, except the browser value - // * set all JSLint legacy options to false - // - // [1]: http://www.jshint.com/ - // [2]: https://github.com/jshint/node-jshint/blob/master/example/config.json - // [3]: https://github.com/oryband/dotfiles/blob/master/jshintrc - // - // @author http://michael.haschke.biz/ - // @license http://unlicense.org/ - - // == Enforcing Options =============================================== - // - // These options tell JSHint to be more strict towards your code. Use - // them if you want to allow only a safe subset of JavaScript, very - // useful when your codebase is shared with a big number of developers - // with different skill levels. - - "bitwise" : true, // Prohibit bitwise operators (&, |, ^, etc.). - "curly" : true, // Require {} for every new block or scope. - "eqeqeq" : true, // Require triple equals i.e. `===`. - "forin" : true, // Tolerate `for in` loops without `hasOwnPrototype`. - "immed" : true, // Require immediate invocations to be wrapped in parens e.g. `( function(){}() );` - "latedef" : true, // Prohibit variable use before definition. - "newcap" : true, // Require capitalization of all constructor functions e.g. `new F()`. - "noarg" : true, // Prohibit use of `arguments.caller` and `arguments.callee`. - "noempty" : true, // Prohibit use of empty blocks. - "nonew" : true, // Prohibit use of constructors for side-effects. - "plusplus" : true, // Prohibit use of `++` & `--`. - "regexp" : true, // Prohibit `.` and `[^...]` in regular expressions. - "undef" : true, // Require all non-global variables be declared before they are used. - "strict" : false, // Require `use strict` pragma in every file. - "trailing" : true, // Prohibit trailing whitespaces. - - // == Relaxing Options ================================================ - // - // These options allow you to suppress certain types of warnings. Use - // them only if you are absolutely positive that you know what you are - // doing. - - "asi" : false, // Tolerate Automatic Semicolon Insertion (no semicolons). - "boss" : false, // Tolerate assignments inside if, for & while. Usually conditions & loops are for comparison, not assignments. - "debug" : false, // Allow debugger statements e.g. browser breakpoints. - "eqnull" : false, // Tolerate use of `== null`. - "es5" : false, // Allow EcmaScript 5 syntax. - "esnext" : false, // Allow ES.next specific features such as `const` and `let`. - "evil" : false, // Tolerate use of `eval`. - "expr" : false, // Tolerate `ExpressionStatement` as Programs. - "funcscope" : false, // Tolerate declarations of variables inside of control structures while accessing them later from the outside. - "globalstrict" : false, // Allow global "use strict" (also enables 'strict'). - "iterator" : false, // Allow usage of __iterator__ property. - "lastsemic" : false, // Tolerat missing semicolons when the it is omitted for the last statement in a one-line block. - "laxbreak" : false, // Tolerate unsafe line breaks e.g. `return [\n] x` without semicolons. - "laxcomma" : false, // Suppress warnings about comma-first coding style. - "loopfunc" : false, // Allow functions to be defined within loops. - "multistr" : false, // Tolerate multi-line strings. - "onecase" : false, // Tolerate switches with just one case. - "proto" : false, // Tolerate __proto__ property. This property is deprecated. - "regexdash" : false, // Tolerate unescaped last dash i.e. `[-...]`. - "scripturl" : false, // Tolerate script-targeted URLs. - "smarttabs" : false, // Tolerate mixed tabs and spaces when the latter are used for alignmnent only. - "shadow" : false, // Allows re-define variables later in code e.g. `var x=1; x=2;`. - "sub" : false, // Tolerate all forms of subscript notation besides dot notation e.g. `dict['key']` instead of `dict.key`. - "supernew" : false, // Tolerate `new function () { ... };` and `new Object;`. - "validthis" : false, // Tolerate strict violations when the code is running in strict mode and you use this in a non-constructor function. - - // == Environments ==================================================== - // - // These options pre-define global variables that are exposed by - // popular JavaScript libraries and runtime environments—such as - // browser or node.js. - - "browser" : false, // Standard browser globals e.g. `window`, `document`. - "couch" : false, // Enable globals exposed by CouchDB. - "devel" : false, // Allow development statements e.g. `console.log();`. - "dojo" : false, // Enable globals exposed by Dojo Toolkit. - "jquery" : false, // Enable globals exposed by jQuery JavaScript library. - "mootools" : false, // Enable globals exposed by MooTools JavaScript framework. - "node" : true, // Enable globals available when code is running inside of the NodeJS runtime environment. - "nonstandard" : false, // Define non-standard but widely adopted globals such as escape and unescape. - "prototypejs" : false, // Enable globals exposed by Prototype JavaScript framework. - "rhino" : false, // Enable globals available when your code is running inside of the Rhino runtime environment. - "wsh" : false, // Enable globals available when your code is running as a script for the Windows Script Host. - - // == JSLint Legacy =================================================== - // - // These options are legacy from JSLint. Aside from bug fixes they will - // not be improved in any way and might be removed at any point. - - "nomen" : false, // Prohibit use of initial or trailing underbars in names. - "onevar" : false, // Allow only one `var` statement per function. - "passfail" : false, // Stop on first error. - "white" : false, // Check against strict whitespace and indentation rules. - - // == Undocumented Options ============================================ - // - // While I've found these options in [example1][2] and [example2][3] - // they are not described in the [JSHint Options documentation][4]. - // - // [4]: http://www.jshint.com/options/ - - "maxerr" : 100, // Maximum errors before stopping. - "predef" : [ // Extra globals. - //"exampleVar", - //"anotherCoolGlobal", - //"iLoveDouglas" - ], - "indent" : 2, // Specify indentation spacing - "maxlen" : 100 // The maximum number of characters in a line. -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/exec-sh/.npmignore b/fundamentals/bug-challenge-es6/node_modules/exec-sh/.npmignore deleted file mode 100644 index fd3807ca8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/exec-sh/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules/ -artifacts/ diff --git a/fundamentals/bug-challenge-es6/node_modules/exec-sh/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/exec-sh/.travis.yml deleted file mode 100644 index 109f476ea..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/exec-sh/.travis.yml +++ /dev/null @@ -1,38 +0,0 @@ -language: node_js -node_js: -- '0.10' -after_success: -- npm run jsdoc -- cat artifacts/coverage/lcov.info | node_modules/coveralls/bin/coveralls.js -notifications: - slack: - secure: k4kpAZcA1Mu7LHs58m4JkMbGtpWPI8BPYqmqKVfHBE21daaqRYgpHOiLyWiFhv83xkiOWWfDAS2svvS2h2jDmaRzieVBlonQlhGgDEu123Mobvi8nUxeu6bNxoFSRwKXVx8uTCGKmzwqWz870Y6d7+TUQnMhhdl0GRB2tqAhY0A= -deploy: -- provider: s3 - access_key_id: - secure: IQXPBnuNyREtmNN+W9bONLok5lFO9+JzQ3n5nK/uRHTuYDgS4ZbKJwaJ1dRNS6Zb8qAgVyIq8FBVa4olbvH6sfxGwVluwY0ujskvgA5hOMEpyjJ5zQx5+boWDTz9wNdMUe4ImygJjcpTjn33wMu9arFLMyIQdKysrlfU1HlRWB0= - secret_access_key: - secure: lIFQHzB5Sfzi0BmYM/b8PzEtdwOUQjtTPBGdTjX09b7OFVsb3M4FROaAsaTMrbZ+L6TyLD9fDBJMPHW7xZTnrZG1zcKIjZITT25Ec/2YQ9CCdAdbr+NobKrjaJ6dIcF2NKcUaRQQvRE9E8uC/KVveWGEC7ITtv0yssuADNSdcOU= - bucket: tsertkov-artifacts - local-dir: artifacts - upload-dir: exec-sh/master - acl: public_read - skip_cleanup: true - region: eu-central-1 - endpoint: s3.eu-central-1.amazonaws.com - on: - branch: master -- provider: s3 - access_key_id: - secure: IQXPBnuNyREtmNN+W9bONLok5lFO9+JzQ3n5nK/uRHTuYDgS4ZbKJwaJ1dRNS6Zb8qAgVyIq8FBVa4olbvH6sfxGwVluwY0ujskvgA5hOMEpyjJ5zQx5+boWDTz9wNdMUe4ImygJjcpTjn33wMu9arFLMyIQdKysrlfU1HlRWB0= - secret_access_key: - secure: lIFQHzB5Sfzi0BmYM/b8PzEtdwOUQjtTPBGdTjX09b7OFVsb3M4FROaAsaTMrbZ+L6TyLD9fDBJMPHW7xZTnrZG1zcKIjZITT25Ec/2YQ9CCdAdbr+NobKrjaJ6dIcF2NKcUaRQQvRE9E8uC/KVveWGEC7ITtv0yssuADNSdcOU= - bucket: tsertkov-artifacts - local-dir: artifacts - upload-dir: exec-sh/develop - acl: public_read - skip_cleanup: true - region: eu-central-1 - endpoint: s3.eu-central-1.amazonaws.com - on: - branch: develop diff --git a/fundamentals/bug-challenge-es6/node_modules/exec-sh/LICENSE b/fundamentals/bug-challenge-es6/node_modules/exec-sh/LICENSE deleted file mode 100644 index 78d2aba2b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/exec-sh/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Aleksandr Tsertkov - -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/fundamentals/bug-challenge-es6/node_modules/exec-sh/README.md b/fundamentals/bug-challenge-es6/node_modules/exec-sh/README.md deleted file mode 100644 index 47e96a5d9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/exec-sh/README.md +++ /dev/null @@ -1,100 +0,0 @@ -# exec-sh - -[![NPM](https://nodei.co/npm/exec-sh.png)](https://nodei.co/npm/exec-sh/) - -[![Build Status](https://travis-ci.org/tsertkov/exec-sh.svg?branch=master)](https://travis-ci.org/tsertkov/exec-sh) -[![Coverage Status](https://img.shields.io/coveralls/tsertkov/exec-sh.svg)](https://coveralls.io/r/tsertkov/exec-sh?branch=master) -[![David Status](https://david-dm.org/tsertkov/exec-sh.png)](https://david-dm.org/tsertkov/exec-sh) - -> Execute shell command forwarding all stdio streams. - -## Features - -exec-sh is a wrapper for [`child_process.spawn`](http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options) with some improvements: - -- Cross platform command execution: - - Windows: `cmd /C COMMAND` - - others: `sh -c COMMAND` -- Fowrards all stdio streams to current terminal (by default): - - `execSh("bash")` - - `execsh("echo -n Say: && read i && echo Said:$i")` -- stdout and stderr are passed to callback when available - - `execSh("pwd", console.log)` - -## Showcase -```javascript -// JavaScript - -execSh("echo hello exec-sh && bash", { cwd: "/home" }, function(err){ - if (err) { - console.log("Exit code: ", err.code); - } -}); -``` - -```sh -# Terminal output: interactive bash session - -hello exec-sh -bash-3.2$ pwd -/home -bash-3.2$ exit 99 -exit -Exit code: 99 -``` - -## Usage - -```javascript -var execSh = require("../"); - -// run interactive bash shell -execSh("echo lorem && bash", { cwd: "/home" }, function(err){ - if (err) { - console.log("Exit code: ", err.code); - return; - } - - // collect streams output - var child = execSh(["bash -c id", "echo lorem >&2"], true, - function(err, stdout, stderr){ - console.log("error: ", err); - console.log("stdout: ", stdout); - console.log("stderr: ", stderr); - }); -}); -``` - -## Public API - -### execSh(command, [options], [callback]) - -Execute shell command forwarding all stdio. - -**Parameters:** - -- *command* {String | Array} - The command to run, or array of commands -- *[options]* {Object | TRUE} - Options object passed directly to [`child_process.spawn`](http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options), when `TRUE` then `{ stdio: null }` used -- *[callback]* {Function} - `callback(err, stdout, stderr)` - - *err* {Error | NULL} - Error object. Has `code` property containing last command exit code when available - - *stdout* {String | NULL} - aggregated stdout or `NULL` if not available - - *stderr* {String | NULL} - aggregated stderr or `NULL` if not available - -**Return Values:** - -Returns [ChildProcess](http://nodejs.org/api/child_process.html#child_process_class_childprocess) object. - -## Private API -Complete API Documentation including private and public methods is generated from source code by JSDoc tool and is [available here](https://s3.eu-central-1.amazonaws.com/tsertkov-artifacts/exec-sh/master/jsdoc/index.html). - -## Code Coverage -Code coverage report for all files is [available here](https://s3.eu-central-1.amazonaws.com/tsertkov-artifacts/exec-sh/master/coverage/lcov-report/index.html). - -## Scripts - -- `npm test` - run tests -- `npm run jsdoc` - build jsdoc - -## License - -The MIT License (MIT) \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/exec-sh/example/example.js b/fundamentals/bug-challenge-es6/node_modules/exec-sh/example/example.js deleted file mode 100644 index 3d6c85625..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/exec-sh/example/example.js +++ /dev/null @@ -1,18 +0,0 @@ -var execSh = require("../"); - -// run interactive bash shell -execSh("echo ola && bash", { cwd: "/home" }, function(err){ - if (err) { - console.log("Exit code: ", err.code); - return; - } - - // collect streams output - var child = execSh(["bash -c id", "echo olaola >&2"], true, - function(err, stdout, stderr){ - console.log("error: ", err); - console.log("stdout: ", stdout); - console.log("stderr: ", stderr); - }); -}); - diff --git a/fundamentals/bug-challenge-es6/node_modules/exec-sh/lib/exec-sh.js b/fundamentals/bug-challenge-es6/node_modules/exec-sh/lib/exec-sh.js deleted file mode 100644 index a9defaea0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/exec-sh/lib/exec-sh.js +++ /dev/null @@ -1,89 +0,0 @@ -var - cp = require("child_process"), - merge = require("merge"); - -var - sh, cmd, - defSpawnOptions = { stdio: "inherit" }; - -/** - * @summary Get shell program meta for current platform - * @private - * @returns {Object} - */ -function getShell(){ - if (process.platform === "win32") { - return { cmd: "cmd", arg: "/C" }; - } else { - return { cmd: "sh", arg: "-c" }; - } -} - -/** - * Callback is called with the output when the process terminates. Output is - * available when true is passed as options argument or stdio: null set - * within given options. - * - * @summary Execute shell command forwarding all stdio - * @param {String|Array} command - * @param {Object|TRUE} [options] spawn() options or TRUE to set stdio: null - * @param {Function} [callback] - * @returns {ChildProcess} - */ -function execSh(command, options, callback){ - if (Array.isArray(command)) { - command = command.join(";"); - } - - if (options === true) { - options = { stdio: null }; - } - - if (typeof options === "function") { - callback = options; - options = defSpawnOptions; - } else { - options = options || {}; - options = merge(true, defSpawnOptions, options); - callback = callback || function(){}; - } - - var - child, - stdout = "", stderr = "", - shell = getShell(); - - try { - child = cp.spawn(shell.cmd, [shell.arg, command], options); - } catch (e) { - callback(e, stdout, stderr); - return; - } - - if (child.stdout) { - child.stdout.on("data", function(data){ - stdout += data; - }); - } - - if (child.stderr) { - child.stderr.on("data", function(data){ - stderr += data; - }); - } - - child.on("close", function(code){ - if (code) { - var e = new Error("Shell command exit with non zero code: " + code); - e.code = code; - callback(e, stdout, stderr); - } else { - callback(null, stdout, stderr); - } - }); - - return child; -} - -module.exports = execSh; - diff --git a/fundamentals/bug-challenge-es6/node_modules/exec-sh/package.json b/fundamentals/bug-challenge-es6/node_modules/exec-sh/package.json deleted file mode 100644 index ff5c6a70a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/exec-sh/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_args": [ - [ - "exec-sh@^0.2.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/sane" - ] - ], - "_from": "exec-sh@>=0.2.0 <0.3.0", - "_id": "exec-sh@0.2.0", - "_inCache": true, - "_installable": true, - "_location": "/exec-sh", - "_nodeVersion": "0.10.33", - "_npmUser": { - "email": "tsertkov@gmail.com", - "name": "tsertkov" - }, - "_npmVersion": "2.1.6", - "_phantomChildren": {}, - "_requested": { - "name": "exec-sh", - "raw": "exec-sh@^0.2.0", - "rawSpec": "^0.2.0", - "scope": null, - "spec": ">=0.2.0 <0.3.0", - "type": "range" - }, - "_requiredBy": [ - "/sane" - ], - "_resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.0.tgz", - "_shasum": "14f75de3f20d286ef933099b2ce50a90359cef10", - "_shrinkwrap": null, - "_spec": "exec-sh@^0.2.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/sane", - "author": { - "email": "tsertkov@gmail.com", - "name": "Aleksandr Tsertkov" - }, - "bugs": { - "url": "https://github.com/tsertkov/exec-sh/issues" - }, - "dependencies": { - "merge": "^1.1.3" - }, - "description": "Execute shell command forwarding all stdio.", - "devDependencies": { - "coveralls": "^2.11.2", - "istanbul": "^0.3.2", - "jsdoc": "^3.3.0-alpha8", - "jshint": "^2.5.1", - "mocha": "^1.20.1", - "sinon": "^1.10.2" - }, - "directories": {}, - "dist": { - "shasum": "14f75de3f20d286ef933099b2ce50a90359cef10", - "tarball": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.2.0.tgz" - }, - "gitHead": "33a0a3731e78838f7f56d31cfcb737b3d510a526", - "homepage": "https://github.com/tsertkov/exec-sh", - "keywords": [ - "exec", - "spawn", - "terminal", - "console", - "shell", - "command", - "child_process" - ], - "license": { - "type": "MIT", - "url": "https://github.com/tsertkov/exec-sh/blob/master/LICENSE" - }, - "main": "lib/exec-sh.js", - "maintainers": [ - { - "email": "tsertkov@gmail.com", - "name": "tsertkov" - } - ], - "name": "exec-sh", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/tsertkov/exec-sh.git" - }, - "scripts": { - "cover-test": "istanbul cover --dir artifacts/coverage _mocha -- --reporter spec", - "dev": "mocha --reporter spec --watch", - "jsdoc": "jsdoc --private --destination artifacts/jsdoc lib/", - "jshint": "jshint lib/ example/ test/", - "test": "npm run cover-test && jshint" - }, - "version": "0.2.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/exec-sh/test/exec-sh.js b/fundamentals/bug-challenge-es6/node_modules/exec-sh/test/exec-sh.js deleted file mode 100644 index 612ddba81..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/exec-sh/test/exec-sh.js +++ /dev/null @@ -1,151 +0,0 @@ -/*global describe, it, before, beforeEach, after, afterEach */ -var - execSh = require(".."), - assert = require("assert"), - sinon = require("sinon"), - merge = require("merge"), - cp = require("child_process"); - -describe("exec-sh", function(){ - - describe("module.exports", function(){ - it("should export a single function", function(){ - assert.strictEqual(typeof execSh, "function"); - }); - }); - - describe("#execSh() arguments", function(){ - var spawn, exitCode, stream; - - stream = { - on: function(e, c){ - if (e === "data") { - // execute callback two times to check if stream - // aggregation works correctly - c("1"); - c("2"); - } - } - }; - - beforeEach(function(){ - exitCode = 0; - spawn = sinon.stub(cp, "spawn"); - spawn.returns({ - spawn_return: true, - on: function(e, c){ - if (e === "close") { - c(exitCode); - } - }, - stdout: stream, - stderr: stream - }); - }); - - afterEach(function(){ - cp.spawn.restore(); - }); - - it("should pass command to spawn function", function(){ - execSh("command"); - sinon.assert.calledOnce(spawn); - assert.strictEqual("command", spawn.getCall(0).args[1][1]); - }); - - it("should accept array of commands to run", function(){ - execSh(["command1", "command2"]); - sinon.assert.calledOnce(spawn); - assert.strictEqual("command1;command2", spawn.getCall(0).args[1][1]); - }); - - it("should accept true as options argument", function(){ - execSh("command", true); - sinon.assert.calledOnce(spawn); - assert.strictEqual(spawn.getCall(0).args[2].stdio, null); - }); - - it("should merge defaults with options", function(){ - execSh("command"); - var defOptionsClone = merge(true, spawn.getCall(0).args[2]); - var options = { key: "value" }; - - execSh("command", options); - assert.deepEqual(spawn.getCall(1).args[2], merge(true, defOptionsClone, options)); - - // change value of the fist property in default options to null - assert.ok(Object.keys(defOptionsClone).length > 0); - defOptionsClone[Object.keys(defOptionsClone)[0]] = null; - - execSh("command", defOptionsClone); - assert.deepEqual(spawn.getCall(2).args[2], defOptionsClone); - }); - - it("should accept optional 'callback' parameter", function(){ - var callback = sinon.spy(); - execSh("command", callback); - execSh("command", { key: "value" }, callback); - sinon.assert.callCount(callback, 2); - }); - - it("should use 'cmd /C' command prefix on windows", function(){ - var platform = process.platform; - process.platform = "win32"; - execSh("command"); - process.platform = platform; - - sinon.assert.calledOnce(spawn); - assert.strictEqual(spawn.getCall(0).args[0], "cmd"); - }); - - it("should use 'sh -c' command prefix on *nix", function(){ - var platform = process.platform; - process.platform = "linux"; - execSh("command"); - process.platform = platform; - - sinon.assert.calledOnce(spawn); - assert.strictEqual(spawn.getCall(0).args[1][0], "-c"); - assert.strictEqual(spawn.getCall(0).args[0], "sh"); - }); - - it("should return spawn() result", function(){ - assert(execSh("command").spawn_return); - }); - - it("should aggregate stdoout and stderr", function(done){ - execSh("command", function(err, stdout, stderr){ - assert.strictEqual(stdout, "12"); - assert.strictEqual(stderr, "12"); - done(); - }); - }); - - it("should catch exceptions thrown by spawn", function(done){ - spawn.throws(); - execSh("command", function(err, stdout, stderr){ - assert(err instanceof Error); - done(); - }); - }); - - it("should return empty stdout and stderr when spawn throws", function(done){ - spawn.throws(); - stream = null; - execSh("command", function(err, stdout, stderr){ - assert.strictEqual(stderr, ""); - assert.strictEqual(stdout, ""); - done(); - }); - }); - - it("should run callback with error when shell exit with non-zero code", function(done){ - exitCode = 1; - execSh("command", function(err){ - assert(err instanceof Error); - assert.equal(exitCode, err.code); - done(); - }); - }); - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/expand-brackets/LICENSE b/fundamentals/bug-challenge-es6/node_modules/expand-brackets/LICENSE deleted file mode 100644 index 1e49edf81..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/expand-brackets/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/expand-brackets/README.md b/fundamentals/bug-challenge-es6/node_modules/expand-brackets/README.md deleted file mode 100644 index d3c913e7a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/expand-brackets/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# expand-brackets [![NPM version](https://img.shields.io/npm/v/expand-brackets.svg?style=flat)](https://www.npmjs.com/package/expand-brackets) [![NPM downloads](https://img.shields.io/npm/dm/expand-brackets.svg?style=flat)](https://npmjs.org/package/expand-brackets) [![Build Status](https://img.shields.io/travis/jonschlinkert/expand-brackets.svg?style=flat)](https://travis-ci.org/jonschlinkert/expand-brackets) - -> Expand POSIX bracket expressions (character classes) in glob patterns. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install expand-brackets --save -``` - -## Usage - -```js -var brackets = require('expand-brackets'); - -brackets('[![:lower:]]'); -//=> '[^a-z]' -``` - -## .isMatch - -Return true if the given string matches the bracket expression: - -```js -brackets.isMatch('A', '[![:lower:]]'); -//=> true - -brackets.isMatch('a', '[![:lower:]]'); -//=> false -``` - -## .makeRe - -Make a regular expression from a bracket expression: - -```js -brackets.makeRe('[![:lower:]]'); -//=> /[^a-z]/ -``` - -The following named POSIX bracket expressions are supported: - -* `[:alnum:]`: Alphanumeric characters (`a-zA-Z0-9]`) -* `[:alpha:]`: Alphabetic characters (`a-zA-Z]`) -* `[:blank:]`: Space and tab (`[ t]`) -* `[:digit:]`: Digits (`[0-9]`) -* `[:lower:]`: Lowercase letters (`[a-z]`) -* `[:punct:]`: Punctuation and symbols. (`[!"#$%&'()*+, -./:;<=>?@ [\]^_``{|}~]`) -* `[:upper:]`: Uppercase letters (`[A-Z]`) -* `[:word:]`: Word characters (letters, numbers and underscores) (`[A-Za-z0-9_]`) -* `[:xdigit:]`: Hexadecimal digits (`[A-Fa-f0-9]`) - -Collating sequences are not supported. - -## Related projects - -You might also be interested in these projects: - -* [extglob](https://www.npmjs.com/package/extglob): Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to… [more](https://www.npmjs.com/package/extglob) | [homepage](https://github.com/jonschlinkert/extglob) -* [is-extglob](https://www.npmjs.com/package/is-extglob): Returns true if a string has an extglob. | [homepage](https://github.com/jonschlinkert/is-extglob) -* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern.… [more](https://www.npmjs.com/package/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob) -* [is-posix-bracket](https://www.npmjs.com/package/is-posix-bracket): Returns true if the given string is a POSIX bracket expression (POSIX character class). | [homepage](https://github.com/jonschlinkert/is-posix-bracket) -* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just… [more](https://www.npmjs.com/package/micromatch) | [homepage](https://github.com/jonschlinkert/micromatch) - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/expand-brackets/issues/new). - -## Building docs - -Generate readme and API documentation with [verb](https://github.com/verbose/verb): - -```sh -$ npm install verb && npm run docs -``` - -Or, if [verb](https://github.com/verbose/verb) is installed globally: - -```sh -$ verb -``` - -## Running tests - -Install dev dependencies: - -```sh -$ npm install -d && npm test -``` - -## Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -verb © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). -Released under the [MIT license](https://github.com/jonschlinkert/expand-brackets/blob/master/LICENSE). - -*** - -_This file was generated by [verb](https://github.com/verbose/verb), v, on April 01, 2016._ \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/expand-brackets/index.js b/fundamentals/bug-challenge-es6/node_modules/expand-brackets/index.js deleted file mode 100644 index b843cc2b1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/expand-brackets/index.js +++ /dev/null @@ -1,163 +0,0 @@ -/*! - * expand-brackets - * - * Copyright (c) 2015 Jon Schlinkert. - * Licensed under the MIT license. - */ - -'use strict'; - -var isPosixBracket = require('is-posix-bracket'); - -/** - * POSIX character classes - */ - -var POSIX = { - alnum: 'a-zA-Z0-9', - alpha: 'a-zA-Z', - blank: ' \\t', - cntrl: '\\x00-\\x1F\\x7F', - digit: '0-9', - graph: '\\x21-\\x7E', - lower: 'a-z', - print: '\\x20-\\x7E', - punct: '-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~', - space: ' \\t\\r\\n\\v\\f', - upper: 'A-Z', - word: 'A-Za-z0-9_', - xdigit: 'A-Fa-f0-9', -}; - -/** - * Expose `brackets` - */ - -module.exports = brackets; - -function brackets(str) { - if (!isPosixBracket(str)) { - return str; - } - - var negated = false; - if (str.indexOf('[^') !== -1) { - negated = true; - str = str.split('[^').join('['); - } - if (str.indexOf('[!') !== -1) { - negated = true; - str = str.split('[!').join('['); - } - - var a = str.split('['); - var b = str.split(']'); - var imbalanced = a.length !== b.length; - - var parts = str.split(/(?::\]\[:|\[?\[:|:\]\]?)/); - var len = parts.length, i = 0; - var end = '', beg = ''; - var res = []; - - // start at the end (innermost) first - while (len--) { - var inner = parts[i++]; - if (inner === '^[!' || inner === '[!') { - inner = ''; - negated = true; - } - - var prefix = negated ? '^' : ''; - var ch = POSIX[inner]; - - if (ch) { - res.push('[' + prefix + ch + ']'); - } else if (inner) { - if (/^\[?\w-\w\]?$/.test(inner)) { - if (i === parts.length) { - res.push('[' + prefix + inner); - } else if (i === 1) { - res.push(prefix + inner + ']'); - } else { - res.push(prefix + inner); - } - } else { - if (i === 1) { - beg += inner; - } else if (i === parts.length) { - end += inner; - } else { - res.push('[' + prefix + inner + ']'); - } - } - } - } - - var result = res.join('|'); - var rlen = res.length || 1; - if (rlen > 1) { - result = '(?:' + result + ')'; - rlen = 1; - } - if (beg) { - rlen++; - if (beg.charAt(0) === '[') { - if (imbalanced) { - beg = '\\[' + beg.slice(1); - } else { - beg += ']'; - } - } - result = beg + result; - } - if (end) { - rlen++; - if (end.slice(-1) === ']') { - if (imbalanced) { - end = end.slice(0, end.length - 1) + '\\]'; - } else { - end = '[' + end; - } - } - result += end; - } - - if (rlen > 1) { - result = result.split('][').join(']|['); - if (result.indexOf('|') !== -1 && !/\(\?/.test(result)) { - result = '(?:' + result + ')'; - } - } - - result = result.replace(/\[+=|=\]+/g, '\\b'); - return result; -} - -brackets.makeRe = function(pattern) { - try { - return new RegExp(brackets(pattern)); - } catch (err) {} -}; - -brackets.isMatch = function(str, pattern) { - try { - return brackets.makeRe(pattern).test(str); - } catch (err) { - return false; - } -}; - -brackets.match = function(arr, pattern) { - var len = arr.length, i = 0; - var res = arr.slice(); - - var re = brackets.makeRe(pattern); - while (i < len) { - var ele = arr[i++]; - if (!re.test(ele)) { - continue; - } - res.splice(i, 1); - } - return res; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/expand-brackets/package.json b/fundamentals/bug-challenge-es6/node_modules/expand-brackets/package.json deleted file mode 100644 index 38cf267fd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/expand-brackets/package.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "_args": [ - [ - "expand-brackets@^0.1.4", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch" - ] - ], - "_from": "expand-brackets@>=0.1.4 <0.2.0", - "_id": "expand-brackets@0.1.5", - "_inCache": true, - "_installable": true, - "_location": "/expand-brackets", - "_nodeVersion": "5.5.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/expand-brackets-0.1.5.tgz_1459554506001_0.9547659594099969" - }, - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.6.0", - "_phantomChildren": {}, - "_requested": { - "name": "expand-brackets", - "raw": "expand-brackets@^0.1.4", - "rawSpec": "^0.1.4", - "scope": null, - "spec": ">=0.1.4 <0.2.0", - "type": "range" - }, - "_requiredBy": [ - "/micromatch" - ], - "_resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "_shasum": "df07284e342a807cd733ac5af72411e581d1177b", - "_shrinkwrap": null, - "_spec": "expand-brackets@^0.1.4", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/expand-brackets/issues" - }, - "dependencies": { - "is-posix-bracket": "^0.1.0" - }, - "description": "Expand POSIX bracket expressions (character classes) in glob patterns.", - "devDependencies": { - "gulp-format-md": "^0.1.7", - "mocha": "^2.2.5", - "should": "^7.0.2" - }, - "directories": {}, - "dist": { - "shasum": "df07284e342a807cd733ac5af72411e581d1177b", - "tarball": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "1b07fda8ee8b6426d95e6539785b74c57e9ee542", - "homepage": "https://github.com/jonschlinkert/expand-brackets", - "keywords": [ - "bracket", - "character class", - "expression", - "posix" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - { - "email": "elan.shanker+npm@gmail.com", - "name": "es128" - }, - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - } - ], - "name": "expand-brackets", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/expand-brackets.git" - }, - "scripts": { - "test": "mocha" - }, - "verb": { - "layout": "default", - "lint": { - "reflinks": true - }, - "plugins": [ - "gulp-format-md" - ], - "reflinks": [ - "verb" - ], - "related": { - "list": [ - "extglob", - "is-extglob", - "is-glob", - "is-posix-bracket", - "micromatch" - ] - }, - "run": true, - "tasks": [ - "readme" - ], - "toc": false - }, - "version": "0.1.5" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/expand-range/LICENSE b/fundamentals/bug-challenge-es6/node_modules/expand-range/LICENSE deleted file mode 100644 index b1e51ff71..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/expand-range/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/expand-range/README.md b/fundamentals/bug-challenge-es6/node_modules/expand-range/README.md deleted file mode 100644 index 72c7e8c6c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/expand-range/README.md +++ /dev/null @@ -1,145 +0,0 @@ -# expand-range [![NPM version](https://img.shields.io/npm/v/expand-range.svg?style=flat)](https://www.npmjs.com/package/expand-range) [![NPM downloads](https://img.shields.io/npm/dm/expand-range.svg?style=flat)](https://npmjs.org/package/expand-range) [![Build Status](https://img.shields.io/travis/jonschlinkert/expand-range.svg?style=flat)](https://travis-ci.org/jonschlinkert/expand-range) - -Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install expand-range --save -``` - -Wraps [fill-range] to do range expansion using `..` separated strings. See [fill-range] for the full list of options and features. - -## Example usage - -```js -var expand = require('expand-range'); -``` - -**Params** - -```js -expand(start, stop, increment); -``` - -* `start`: the number or letter to start with -* `end`: the number or letter to end with -* `increment`: optionally pass the increment to use. works for letters or numbers - -**Examples** - -```js -expand('a..e') -//=> ['a', 'b', 'c', 'd', 'e'] - -expand('a..e..2') -//=> ['a', 'c', 'e'] - -expand('A..E..2') -//=> ['A', 'C', 'E'] - -expand('1..3') -//=> ['1', '2', '3'] - -expand('0..-5') -//=> [ '0', '-1', '-2', '-3', '-4', '-5' ] - -expand('-9..9..3') -//=> [ '-9', '-6', '-3', '0', '3', '6', '9' ]) - -expand('-1..-10..-2') -//=> [ '-1', '-3', '-5', '-7', '-9' ] - -expand('1..10..2') -//=> [ '1', '3', '5', '7', '9' ] -``` - -### Custom function - -Optionally pass a custom function as the second argument: - -```js -expand('a..e', function (val, isNumber, pad, i) { - if (!isNumber) { - return String.fromCharCode(val) + i; - } - return val; -}); -//=> ['a0', 'b1', 'c2', 'd3', 'e4'] -``` - -## Benchmarks - -```sh -# benchmark/fixtures/alpha-lower.js (29 bytes) - brace-expansion x 145,653 ops/sec ±0.89% (87 runs sampled) - expand-range x 453,213 ops/sec ±1.66% (85 runs sampled) - minimatch x 152,193 ops/sec ±1.17% (86 runs sampled) - -# benchmark/fixtures/alpha-upper.js (29 bytes) - brace-expansion x 149,975 ops/sec ±1.10% (88 runs sampled) - expand-range x 459,390 ops/sec ±1.27% (84 runs sampled) - minimatch x 155,253 ops/sec ±1.25% (88 runs sampled) - -# benchmark/fixtures/padded.js (33 bytes) - brace-expansion x 14,694 ops/sec ±1.37% (85 runs sampled) - expand-range x 169,393 ops/sec ±1.76% (80 runs sampled) - minimatch x 15,052 ops/sec ±1.15% (88 runs sampled) - -# benchmark/fixtures/range.js (29 bytes) - brace-expansion x 142,968 ops/sec ±1.35% (86 runs sampled) - expand-range x 465,579 ops/sec ±1.43% (86 runs sampled) - minimatch x 126,872 ops/sec ±1.18% (90 runs sampled) -``` - -## Related projects - -You might also be interested in these projects: - -* [braces](https://www.npmjs.com/package/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces… [more](https://www.npmjs.com/package/braces) | [homepage](https://github.com/jonschlinkert/braces) -* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or multiplier to… [more](https://www.npmjs.com/package/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range) -* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. | [homepage](https://github.com/jonschlinkert/micromatch) - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/expand-range/issues/new). - -## Building docs - -Generate readme and API documentation with [verb](https://github.com/verbose/verb): - -```sh -$ npm install verb && npm run docs -``` - -Or, if [verb](https://github.com/verbose/verb) is installed globally: - -```sh -$ verb -``` - -## Running tests - -Install dev dependencies: - -```sh -$ npm install -d && npm test -``` - -## Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). -Released under the [MIT license](https://github.com/jonschlinkert/expand-range/blob/master/LICENSE). - -*** - -_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on May 05, 2016._ \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/expand-range/index.js b/fundamentals/bug-challenge-es6/node_modules/expand-range/index.js deleted file mode 100644 index 369962a87..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/expand-range/index.js +++ /dev/null @@ -1,43 +0,0 @@ -/*! - * expand-range - * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT license. - */ - -'use strict'; - -var fill = require('fill-range'); - -module.exports = function expandRange(str, options, fn) { - if (typeof str !== 'string') { - throw new TypeError('expand-range expects a string.'); - } - - if (typeof options === 'function') { - fn = options; - options = {}; - } - - if (typeof options === 'boolean') { - options = {}; - options.makeRe = true; - } - - // create arguments to pass to fill-range - var opts = options || {}; - var args = str.split('..'); - var len = args.length; - if (len > 3) { return str; } - - // if only one argument, it can't expand so return it - if (len === 1) { return args; } - - // if `true`, tell fill-range to regexify the string - if (typeof fn === 'boolean' && fn === true) { - opts.makeRe = true; - } - - args.push(opts); - return fill.apply(null, args.concat(fn)); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/expand-range/package.json b/fundamentals/bug-challenge-es6/node_modules/expand-range/package.json deleted file mode 100644 index 26a047cbc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/expand-range/package.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "_args": [ - [ - "expand-range@^1.8.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/braces" - ] - ], - "_from": "expand-range@>=1.8.1 <2.0.0", - "_id": "expand-range@1.8.2", - "_inCache": true, - "_installable": true, - "_location": "/expand-range", - "_nodeVersion": "5.5.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/expand-range-1.8.2.tgz_1462440434873_0.7174076174851507" - }, - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.6.0", - "_phantomChildren": {}, - "_requested": { - "name": "expand-range", - "raw": "expand-range@^1.8.1", - "rawSpec": "^1.8.1", - "scope": null, - "spec": ">=1.8.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/braces" - ], - "_resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "_shasum": "a299effd335fe2721ebae8e257ec79644fc85337", - "_shrinkwrap": null, - "_spec": "expand-range@^1.8.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/braces", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/expand-range/issues" - }, - "dependencies": { - "fill-range": "^2.1.0" - }, - "description": "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch.", - "devDependencies": { - "benchmarked": "^0.2.4", - "brace-expansion": "^1.1.4", - "glob": "^7.0.3", - "gulp-format-md": "^0.1.9", - "minimatch": "^3.0.0", - "mocha": "^2.4.5" - }, - "directories": {}, - "dist": { - "shasum": "a299effd335fe2721ebae8e257ec79644fc85337", - "tarball": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "4c873af0870df8382bafc66a93d5c89e3aad3d4d", - "homepage": "https://github.com/jonschlinkert/expand-range", - "keywords": [ - "alpha", - "alphabetical", - "bash", - "brace", - "expand", - "expansion", - "glob", - "match", - "matches", - "matching", - "number", - "numerical", - "range", - "ranges", - "sh" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - } - ], - "name": "expand-range", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/expand-range.git" - }, - "scripts": { - "test": "mocha" - }, - "verb": { - "layout": "default", - "lint": { - "reflinks": true - }, - "plugins": [ - "gulp-format-md" - ], - "reflinks": [ - "verb" - ], - "related": { - "list": [ - "micromatch", - "fill-range", - "braces" - ] - }, - "tasks": [ - "readme" - ], - "toc": false - }, - "version": "1.8.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/extend/.eslintrc b/fundamentals/bug-challenge-es6/node_modules/extend/.eslintrc deleted file mode 100644 index d49f17353..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extend/.eslintrc +++ /dev/null @@ -1,192 +0,0 @@ -{ - "env": { - "browser": false, - "node": true, - "amd": false, - "mocha": false, - "jasmine": false - }, - - "rules": { - "accessor-pairs": [2, { getWithoutSet: false, setWithoutGet: true }], - "array-bracket-spacing": [2, "never", { - "singleValue": false, - "objectsInArrays": false, - "arraysInArrays": false - }], - "block-scoped-var": [0], - "brace-style": [2, "1tbs", { "allowSingleLine": true }], - "camelcase": [2], - "comma-dangle": [2, "never"], - "comma-spacing": [2], - "comma-style": [2, "last"], - "complexity": [2, 15], - "computed-property-spacing": [2, "never"], - "consistent-return": [2], - "consistent-this": [0, "that"], - "constructor-super": [2], - "curly": [2, "all"], - "default-case": [2], - "dot-notation": [2, { "allowKeywords": true }], - "eol-last": [2], - "eqeqeq": [2], - "func-names": [0], - "func-style": [2, "expression"], - "generator-star-spacing": [2, { "before": false, "after": true }], - "global-strict": [0, "never"], - "guard-for-in": [0], - "handle-callback-err": [0], - "key-spacing": [2, { "beforeColon": false, "afterColon": true }], - "linebreak-style": [2, "unix"], - "lines-around-comment": [2, { - "beforeBlockComment": false, - "afterBlockComment": false, - "beforeLineComment": false, - "beforeLineComment": false, - "allowBlockStart": true, - "allowBlockEnd": true - }], - "quotes": [2, "single", "avoid-escape"], - "max-depth": [1, 4], - "max-len": [0, 80, 4], - "max-nested-callbacks": [2, 2], - "max-params": [2, 2], - "max-statements": [2, 21], - "new-parens": [2], - "new-cap": [2], - "newline-after-var": [0], - "no-alert": [2], - "no-array-constructor": [2], - "no-bitwise": [0], - "no-caller": [2], - "no-catch-shadow": [2], - "no-cond-assign": [2], - "no-console": [2], - "no-constant-condition": [2], - "no-continue": [2], - "no-control-regex": [2], - "no-debugger": [2], - "no-delete-var": [2], - "no-div-regex": [0], - "no-dupe-args": [2], - "no-dupe-keys": [2], - "no-duplicate-case": [2], - "no-else-return": [0], - "no-empty": [2], - "no-empty-character-class": [2], - "no-empty-label": [2], - "no-eq-null": [0], - "no-eval": [2], - "no-ex-assign": [2], - "no-extend-native": [2], - "no-extra-bind": [2], - "no-extra-boolean-cast": [2], - "no-extra-parens": [0], - "no-extra-semi": [2], - "no-fallthrough": [2], - "no-floating-decimal": [2], - "no-func-assign": [2], - "no-implied-eval": [2], - "no-inline-comments": [0], - "no-inner-declarations": [2, "functions"], - "no-invalid-regexp": [2], - "no-irregular-whitespace": [2], - "no-iterator": [2], - "no-label-var": [2], - "no-labels": [2], - "no-lone-blocks": [2], - "no-lonely-if": [2], - "no-loop-func": [2], - "no-mixed-requires": [0, false], - "no-mixed-spaces-and-tabs": [2, false], - "no-multi-spaces": [2], - "no-multi-str": [2], - "no-multiple-empty-lines": [2, {"max": 1}], - "no-native-reassign": [2], - "no-negated-in-lhs": [2], - "no-nested-ternary": [0], - "no-new": [2], - "no-new-func": [2], - "no-new-object": [2], - "no-new-require": [0], - "no-new-wrappers": [2], - "no-obj-calls": [2], - "no-octal": [2], - "no-octal-escape": [2], - "no-param-reassign": [2], - "no-path-concat": [0], - "no-plusplus": [0], - "no-process-env": [0], - "no-process-exit": [2], - "no-proto": [2], - "no-redeclare": [2], - "no-regex-spaces": [2], - "no-reserved-keys": [2], - "no-restricted-modules": [0], - "no-return-assign": [2, "always"], - "no-script-url": [2], - "no-self-compare": [0], - "no-sequences": [2], - "no-shadow": [2], - "no-shadow-restricted-names": [2], - "no-space-before-semi": [2], - "no-spaced-func": [2], - "no-sparse-arrays": [2], - "no-sync": [0], - "no-ternary": [0], - "no-this-before-super": [2], - "no-throw-literal": [2], - "no-trailing-spaces": [2, { "skipBlankLines": false }], - "no-undef": [2], - "no-undef-init": [2], - "no-undefined": [0], - "no-underscore-dangle": [2], - "no-unexpected-multiline": [2], - "no-unneeded-ternary": [2], - "no-unreachable": [2], - "no-unused-expressions": [2], - "no-unused-vars": [2, { "vars": "all", "args": "after-used" }], - "no-use-before-define": [2], - "no-void": [0], - "no-warning-comments": [0, { "terms": ["todo", "fixme", "xxx"], "location": "start" }], - "no-with": [2], - "no-wrap-func": [2], - "object-curly-spacing": [2, "always"], - "object-shorthand": [2, "never"], - "one-var": [0], - "operator-assignment": [0, "always"], - "operator-linebreak": [2, "none"], - "padded-blocks": [0], - "prefer-const": [0], - "quote-props": [0], - "radix": [0], - "semi": [2], - "semi-spacing": [2, { "before": false, "after": true }], - "sort-vars": [0], - "space-after-keywords": [2, "always"], - "space-before-function-paren": [2, { "anonymous": "always", "named": "never" }], - "space-before-blocks": [0, "always"], - "space-in-brackets": [0, "never", { - "singleValue": true, - "arraysInArrays": false, - "arraysInObjects": false, - "objectsInArrays": true, - "objectsInObjects": true, - "propertyName": false - }], - "space-in-parens": [2, "never"], - "space-infix-ops": [2], - "space-return-throw-case": [2], - "space-unary-ops": [2, { "words": true, "nonwords": false }], - "spaced-comment": [2, "always"], - "spaced-line-comment": [0, "always"], - "strict": [2, "global"], - "use-isnan": [2], - "valid-jsdoc": [0], - "valid-typeof": [2], - "vars-on-top": [0], - "wrap-iife": [2], - "wrap-regex": [2], - "yoda": [2, "never", { "exceptRange": true, "onlyEquality": false }] - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/extend/.jscs.json b/fundamentals/bug-challenge-es6/node_modules/extend/.jscs.json deleted file mode 100644 index 7e84b282b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extend/.jscs.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "additionalRules": [], - - "requireSemicolons": true, - - "disallowMultipleSpaces": true, - - "disallowIdentifierNames": [], - - "requireCurlyBraces": ["if", "else", "for", "while", "do", "try", "catch"], - - "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch", "function"], - - "disallowSpaceAfterKeywords": [], - - "requireSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true, "beforeOpeningCurlyBrace": true }, - "requireSpacesInNamedFunctionExpression": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true }, - "requireSpacesInFunctionDeclaration": { "beforeOpeningCurlyBrace": true }, - "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true }, - - "requireSpaceBetweenArguments": true, - - "disallowSpacesInsideParentheses": true, - - "disallowSpacesInsideArrayBrackets": true, - - "disallowQuotedKeysInObjects": "allButReserved", - - "disallowSpaceAfterObjectKeys": true, - - "requireCommaBeforeLineBreak": true, - - "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], - "requireSpaceAfterPrefixUnaryOperators": [], - - "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], - "requireSpaceBeforePostfixUnaryOperators": [], - - "disallowSpaceBeforeBinaryOperators": [], - "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - - "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], - "disallowSpaceAfterBinaryOperators": [], - - "disallowImplicitTypeConversion": ["binary", "string"], - - "disallowKeywords": ["with", "eval"], - - "requireKeywordsOnNewLine": [], - "disallowKeywordsOnNewLine": ["else"], - - "requireLineFeedAtFileEnd": true, - - "disallowTrailingWhitespace": true, - - "disallowTrailingComma": true, - - "excludeFiles": ["node_modules/**", "vendor/**"], - - "disallowMultipleLineStrings": true, - - "requireDotNotation": true, - - "requireParenthesesAroundIIFE": true, - - "validateLineBreaks": "LF", - - "validateQuoteMarks": { - "escape": true, - "mark": "'" - }, - - "disallowOperatorBeforeLineBreak": [], - - "requireSpaceBeforeKeywords": [ - "do", - "for", - "if", - "else", - "switch", - "case", - "try", - "catch", - "finally", - "while", - "with", - "return" - ], - - "validateAlignedFunctionParameters": { - "lineBreakAfterOpeningBraces": true, - "lineBreakBeforeClosingBraces": true - }, - - "requirePaddingNewLinesBeforeExport": true, - - "validateNewlineAfterArrayElements": { - "maximum": 6 - }, - - "requirePaddingNewLinesAfterUseStrict": true -} - diff --git a/fundamentals/bug-challenge-es6/node_modules/extend/.npmignore b/fundamentals/bug-challenge-es6/node_modules/extend/.npmignore deleted file mode 100644 index 30d74d258..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extend/.npmignore +++ /dev/null @@ -1 +0,0 @@ -test \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/extend/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/extend/.travis.yml deleted file mode 100644 index ebef64499..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extend/.travis.yml +++ /dev/null @@ -1,44 +0,0 @@ -language: node_js -node_js: - - "iojs-v2.3" - - "iojs-v2.2" - - "iojs-v2.1" - - "iojs-v2.0" - - "iojs-v1.8" - - "iojs-v1.7" - - "iojs-v1.6" - - "iojs-v1.5" - - "iojs-v1.4" - - "iojs-v1.3" - - "iojs-v1.2" - - "iojs-v1.1" - - "iojs-v1.0" - - "0.12" - - "0.11" - - "0.10" - - "0.9" - - "0.8" - - "0.6" - - "0.4" -before_install: - - '[ "${TRAVIS_NODE_VERSION}" = "0.6" ] || npm install -g npm@1.4.28 && npm install -g npm' -sudo: false -matrix: - fast_finish: true - allow_failures: - - node_js: "iojs-v2.2" - - node_js: "iojs-v2.1" - - node_js: "iojs-v2.0" - - node_js: "iojs-v1.7" - - node_js: "iojs-v1.6" - - node_js: "iojs-v1.5" - - node_js: "iojs-v1.4" - - node_js: "iojs-v1.3" - - node_js: "iojs-v1.2" - - node_js: "iojs-v1.1" - - node_js: "iojs-v1.0" - - node_js: "0.11" - - node_js: "0.9" - - node_js: "0.8" - - node_js: "0.6" - - node_js: "0.4" diff --git a/fundamentals/bug-challenge-es6/node_modules/extend/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/extend/CHANGELOG.md deleted file mode 100644 index ee0cfd6ad..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extend/CHANGELOG.md +++ /dev/null @@ -1,69 +0,0 @@ -3.0.0 / 2015-07-01 -================== - * [Possible breaking change] Use global "strict" directive (#32) - * [Tests] `int` is an ES3 reserved word - * [Tests] Test up to `io.js` `v2.3` - * [Tests] Add `npm run eslint` - * [Dev Deps] Update `covert`, `jscs` - -2.0.1 / 2015-04-25 -================== - * Use an inline `isArray` check, for ES3 browsers. (#27) - * Some old browsers fail when an identifier is `toString` - * Test latest `node` and `io.js` versions on `travis-ci`; speed up builds - * Add license info to package.json (#25) - * Update `tape`, `jscs` - * Adding a CHANGELOG - -2.0.0 / 2014-10-01 -================== - * Increase code coverage to 100%; run code coverage as part of tests - * Add `npm run lint`; Run linter as part of tests - * Remove nodeType and setInterval checks in isPlainObject - * Updating `tape`, `jscs`, `covert` - * General style and README cleanup - -1.3.0 / 2014-06-20 -================== - * Add component.json for browser support (#18) - * Use SVG for badges in README (#16) - * Updating `tape`, `covert` - * Updating travis-ci to work with multiple node versions - * Fix `deep === false` bug (returning target as {}) (#14) - * Fixing constructor checks in isPlainObject - * Adding additional test coverage - * Adding `npm run coverage` - * Add LICENSE (#13) - * Adding a warning about `false`, per #11 - * General style and whitespace cleanup - -1.2.1 / 2013-09-14 -================== - * Fixing hasOwnProperty bugs that would only have shown up in specific browsers. Fixes #8 - * Updating `tape` - -1.2.0 / 2013-09-02 -================== - * Updating the README: add badges - * Adding a missing variable reference. - * Using `tape` instead of `buster` for tests; add more tests (#7) - * Adding node 0.10 to Travis CI (#6) - * Enabling "npm test" and cleaning up package.json (#5) - * Add Travis CI. - -1.1.3 / 2012-12-06 -================== - * Added unit tests. - * Ensure extend function is named. (Looks nicer in a stack trace.) - * README cleanup. - -1.1.1 / 2012-11-07 -================== - * README cleanup. - * Added installation instructions. - * Added a missing semicolon - -1.0.0 / 2012-04-08 -================== - * Initial commit - diff --git a/fundamentals/bug-challenge-es6/node_modules/extend/LICENSE b/fundamentals/bug-challenge-es6/node_modules/extend/LICENSE deleted file mode 100644 index e16d6a56c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extend/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Stefan Thomas - -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/fundamentals/bug-challenge-es6/node_modules/extend/README.md b/fundamentals/bug-challenge-es6/node_modules/extend/README.md deleted file mode 100644 index 632fb0f96..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extend/README.md +++ /dev/null @@ -1,62 +0,0 @@ -[![Build Status][travis-svg]][travis-url] -[![dependency status][deps-svg]][deps-url] -[![dev dependency status][dev-deps-svg]][dev-deps-url] - -# extend() for Node.js [![Version Badge][npm-version-png]][npm-url] - -`node-extend` is a port of the classic extend() method from jQuery. It behaves as you expect. It is simple, tried and true. - -## Installation - -This package is available on [npm][npm-url] as: `extend` - -``` sh -npm install extend -``` - -## Usage - -**Syntax:** extend **(** [`deep`], `target`, `object1`, [`objectN`] **)** - -*Extend one object with one or more others, returning the modified object.* - -Keep in mind that the target object will be modified, and will be returned from extend(). - -If a boolean true is specified as the first argument, extend performs a deep copy, recursively copying any objects it finds. Otherwise, the copy will share structure with the original object(s). -Undefined properties are not copied. However, properties inherited from the object's prototype will be copied over. -Warning: passing `false` as the first argument is not supported. - -### Arguments - -* `deep` *Boolean* (optional) -If set, the merge becomes recursive (i.e. deep copy). -* `target` *Object* -The object to extend. -* `object1` *Object* -The object that will be merged into the first. -* `objectN` *Object* (Optional) -More objects to merge into the first. - -## License - -`node-extend` is licensed under the [MIT License][mit-license-url]. - -## Acknowledgements - -All credit to the jQuery authors for perfecting this amazing utility. - -Ported to Node.js by [Stefan Thomas][github-justmoon] with contributions by [Jonathan Buchanan][github-insin] and [Jordan Harband][github-ljharb]. - -[travis-svg]: https://travis-ci.org/justmoon/node-extend.svg -[travis-url]: https://travis-ci.org/justmoon/node-extend -[npm-url]: https://npmjs.org/package/extend -[mit-license-url]: http://opensource.org/licenses/MIT -[github-justmoon]: https://github.com/justmoon -[github-insin]: https://github.com/insin -[github-ljharb]: https://github.com/ljharb -[npm-version-png]: http://vb.teelaun.ch/justmoon/node-extend.svg -[deps-svg]: https://david-dm.org/justmoon/node-extend.svg -[deps-url]: https://david-dm.org/justmoon/node-extend -[dev-deps-svg]: https://david-dm.org/justmoon/node-extend/dev-status.svg -[dev-deps-url]: https://david-dm.org/justmoon/node-extend#info=devDependencies - diff --git a/fundamentals/bug-challenge-es6/node_modules/extend/component.json b/fundamentals/bug-challenge-es6/node_modules/extend/component.json deleted file mode 100644 index 1500a2f37..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extend/component.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "extend", - "author": "Stefan Thomas (http://www.justmoon.net)", - "version": "3.0.0", - "description": "Port of jQuery.extend for node.js and the browser.", - "scripts": [ - "index.js" - ], - "contributors": [ - { - "name": "Jordan Harband", - "url": "https://github.com/ljharb" - } - ], - "keywords": [ - "extend", - "clone", - "merge" - ], - "repository" : { - "type": "git", - "url": "https://github.com/justmoon/node-extend.git" - }, - "dependencies": { - }, - "devDependencies": { - "tape" : "~3.0.0", - "covert": "~0.4.0", - "jscs": "~1.6.2" - } -} - diff --git a/fundamentals/bug-challenge-es6/node_modules/extend/index.js b/fundamentals/bug-challenge-es6/node_modules/extend/index.js deleted file mode 100644 index f5ec75d52..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extend/index.js +++ /dev/null @@ -1,86 +0,0 @@ -'use strict'; - -var hasOwn = Object.prototype.hasOwnProperty; -var toStr = Object.prototype.toString; - -var isArray = function isArray(arr) { - if (typeof Array.isArray === 'function') { - return Array.isArray(arr); - } - - return toStr.call(arr) === '[object Array]'; -}; - -var isPlainObject = function isPlainObject(obj) { - if (!obj || toStr.call(obj) !== '[object Object]') { - return false; - } - - var hasOwnConstructor = hasOwn.call(obj, 'constructor'); - var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf'); - // Not own constructor property must be Object - if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) { - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - var key; - for (key in obj) {/**/} - - return typeof key === 'undefined' || hasOwn.call(obj, key); -}; - -module.exports = function extend() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0], - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if (typeof target === 'boolean') { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } else if ((typeof target !== 'object' && typeof target !== 'function') || target == null) { - target = {}; - } - - for (; i < length; ++i) { - options = arguments[i]; - // Only deal with non-null/undefined values - if (options != null) { - // Extend the base object - for (name in options) { - src = target[name]; - copy = options[name]; - - // Prevent never-ending loop - if (target !== copy) { - // Recurse if we're merging plain objects or arrays - if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { - if (copyIsArray) { - copyIsArray = false; - clone = src && isArray(src) ? src : []; - } else { - clone = src && isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[name] = extend(deep, clone, copy); - - // Don't bring in undefined values - } else if (typeof copy !== 'undefined') { - target[name] = copy; - } - } - } - } - } - - // Return the modified object - return target; -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/extend/package.json b/fundamentals/bug-challenge-es6/node_modules/extend/package.json deleted file mode 100644 index 44d99d9ac..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extend/package.json +++ /dev/null @@ -1,98 +0,0 @@ -{ - "_args": [ - [ - "extend@~3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request" - ] - ], - "_from": "extend@>=3.0.0 <3.1.0", - "_id": "extend@3.0.0", - "_inCache": true, - "_installable": true, - "_location": "/extend", - "_nodeVersion": "2.3.1", - "_npmUser": { - "email": "ljharb@gmail.com", - "name": "ljharb" - }, - "_npmVersion": "2.11.3", - "_phantomChildren": {}, - "_requested": { - "name": "extend", - "raw": "extend@~3.0.0", - "rawSpec": "~3.0.0", - "scope": null, - "spec": ">=3.0.0 <3.1.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "_shasum": "5a474353b9f3353ddd8176dfd37b91c83a46f1d4", - "_shrinkwrap": null, - "_spec": "extend@~3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request", - "author": { - "email": "justmoon@members.fsf.org", - "name": "Stefan Thomas", - "url": "http://www.justmoon.net" - }, - "bugs": { - "url": "https://github.com/justmoon/node-extend/issues" - }, - "contributors": [ - { - "name": "Jordan Harband", - "url": "https://github.com/ljharb" - } - ], - "dependencies": {}, - "description": "Port of jQuery.extend for node.js and the browser", - "devDependencies": { - "covert": "^1.1.0", - "eslint": "^0.24.0", - "jscs": "^1.13.1", - "tape": "^4.0.0" - }, - "directories": {}, - "dist": { - "shasum": "5a474353b9f3353ddd8176dfd37b91c83a46f1d4", - "tarball": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz" - }, - "gitHead": "148e7270cab2e9413af2cd0cab147070d755ed6d", - "homepage": "https://github.com/justmoon/node-extend#readme", - "keywords": [ - "extend", - "clone", - "merge" - ], - "license": "MIT", - "main": "index", - "maintainers": [ - { - "email": "justmoon@members.fsf.org", - "name": "justmoon" - }, - { - "email": "ljharb@gmail.com", - "name": "ljharb" - } - ], - "name": "extend", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/justmoon/node-extend.git" - }, - "scripts": { - "coverage": "covert test/index.js", - "coverage-quiet": "covert test/index.js --quiet", - "eslint": "eslint *.js */*.js", - "jscs": "jscs *.js */*.js", - "lint": "npm run jscs && npm run eslint", - "test": "npm run lint && node test/index.js && npm run coverage-quiet" - }, - "version": "3.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/extglob/LICENSE b/fundamentals/bug-challenge-es6/node_modules/extglob/LICENSE deleted file mode 100644 index 65f90aca8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extglob/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/extglob/README.md b/fundamentals/bug-challenge-es6/node_modules/extglob/README.md deleted file mode 100644 index 666440669..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extglob/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# extglob [![NPM version](https://badge.fury.io/js/extglob.svg)](http://badge.fury.io/js/extglob) [![Build Status](https://travis-ci.org/jonschlinkert/extglob.svg)](https://travis-ci.org/jonschlinkert/extglob) - -> Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to glob patterns. - -Install with [npm](https://www.npmjs.com/) - -```sh -$ npm i extglob --save -``` - -Used by [micromatch](https://github.com/jonschlinkert/micromatch). - -**Features** - -* Convert an extglob string to a regex-compatible string. **Only converts extglobs**, to handle full globs use [micromatch](https://github.com/jonschlinkert/micromatch). -* Pass `{regex: true}` to return a regex -* Handles nested patterns -* More complete (and correct) support than [minimatch](https://github.com/isaacs/minimatch) - -## Usage - -```js -var extglob = require('extglob'); - -extglob('?(z)'); -//=> '(?:z)?' -extglob('*(z)'); -//=> '(?:z)*' -extglob('+(z)'); -//=> '(?:z)+' -extglob('@(z)'); -//=> '(?:z)' -extglob('!(z)'); -//=> '(?!^(?:(?!z)[^/]*?)).*$' -``` - -**Optionally return regex** - -```js -extglob('!(z)', {regex: true}); -//=> /(?!^(?:(?!z)[^/]*?)).*$/ -``` - -## Extglob patterns - -To learn more about how extglobs work, see the docs for [Bash pattern matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html): - -* `?(pattern)`: Match zero or one occurrence of the given pattern. -* `*(pattern)`: Match zero or more occurrences of the given pattern. -* `+(pattern)`: Match one or more occurrences of the given pattern. -* `@(pattern)`: Match one of the given pattern. -* `!(pattern)`: Match anything except one of the given pattern. - -## Related - -* [braces](https://github.com/jonschlinkert/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces… [more](https://github.com/jonschlinkert/braces) -* [expand-brackets](https://github.com/jonschlinkert/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. -* [expand-range](https://github.com/jonschlinkert/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See… [more](https://github.com/jonschlinkert/expand-range) -* [fill-range](https://github.com/jonschlinkert/fill-range): Fill in a range of numbers or letters, optionally passing an increment or multiplier to… [more](https://github.com/jonschlinkert/fill-range) -* [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just… [more](https://github.com/jonschlinkert/micromatch) - -## Run tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/extglob/issues/new) - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 Jon Schlinkert -Released under the MIT license. - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 01, 2015._ \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/extglob/index.js b/fundamentals/bug-challenge-es6/node_modules/extglob/index.js deleted file mode 100644 index 2e774d4aa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extglob/index.js +++ /dev/null @@ -1,178 +0,0 @@ -/*! - * extglob - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -/** - * Module dependencies - */ - -var isExtglob = require('is-extglob'); -var re, cache = {}; - -/** - * Expose `extglob` - */ - -module.exports = extglob; - -/** - * Convert the given extglob `string` to a regex-compatible - * string. - * - * ```js - * var extglob = require('extglob'); - * extglob('!(a?(b))'); - * //=> '(?!a(?:b)?)[^/]*?' - * ``` - * - * @param {String} `str` The string to convert. - * @param {Object} `options` - * @option {Boolean} [options] `esc` If `false` special characters will not be escaped. Defaults to `true`. - * @option {Boolean} [options] `regex` If `true` a regular expression is returned instead of a string. - * @return {String} - * @api public - */ - - -function extglob(str, opts) { - opts = opts || {}; - var o = {}, i = 0; - - // fix common character reversals - // '*!(.js)' => '*.!(js)' - str = str.replace(/!\(([^\w*()])/g, '$1!('); - - // support file extension negation - str = str.replace(/([*\/])\.!\([*]\)/g, function (m, ch) { - if (ch === '/') { - return escape('\\/[^.]+'); - } - return escape('[^.]+'); - }); - - // create a unique key for caching by - // combining the string and options - var key = str - + String(!!opts.regex) - + String(!!opts.contains) - + String(!!opts.escape); - - if (cache.hasOwnProperty(key)) { - return cache[key]; - } - - if (!(re instanceof RegExp)) { - re = regex(); - } - - opts.negate = false; - var m; - - while (m = re.exec(str)) { - var prefix = m[1]; - var inner = m[3]; - if (prefix === '!') { - opts.negate = true; - } - - var id = '__EXTGLOB_' + (i++) + '__'; - // use the prefix of the _last_ (outtermost) pattern - o[id] = wrap(inner, prefix, opts.escape); - str = str.split(m[0]).join(id); - } - - var keys = Object.keys(o); - var len = keys.length; - - // we have to loop again to allow us to convert - // patterns in reverse order (starting with the - // innermost/last pattern first) - while (len--) { - var prop = keys[len]; - str = str.split(prop).join(o[prop]); - } - - var result = opts.regex - ? toRegex(str, opts.contains, opts.negate) - : str; - - result = result.split('.').join('\\.'); - - // cache the result and return it - return (cache[key] = result); -} - -/** - * Convert `string` to a regex string. - * - * @param {String} `str` - * @param {String} `prefix` Character that determines how to wrap the string. - * @param {Boolean} `esc` If `false` special characters will not be escaped. Defaults to `true`. - * @return {String} - */ - -function wrap(inner, prefix, esc) { - if (esc) inner = escape(inner); - - switch (prefix) { - case '!': - return '(?!' + inner + ')[^/]' + (esc ? '%%%~' : '*?'); - case '@': - return '(?:' + inner + ')'; - case '+': - return '(?:' + inner + ')+'; - case '*': - return '(?:' + inner + ')' + (esc ? '%%' : '*') - case '?': - return '(?:' + inner + '|)'; - default: - return inner; - } -} - -function escape(str) { - str = str.split('*').join('[^/]%%%~'); - str = str.split('.').join('\\.'); - return str; -} - -/** - * extglob regex. - */ - -function regex() { - return /(\\?[@?!+*$]\\?)(\(([^()]*?)\))/; -} - -/** - * Negation regex - */ - -function negate(str) { - return '(?!^' + str + ').*$'; -} - -/** - * Create the regex to do the matching. If - * the leading character in the `pattern` is `!` - * a negation regex is returned. - * - * @param {String} `pattern` - * @param {Boolean} `contains` Allow loose matching. - * @param {Boolean} `isNegated` True if the pattern is a negation pattern. - */ - -function toRegex(pattern, contains, isNegated) { - var prefix = contains ? '^' : ''; - var after = contains ? '$' : ''; - pattern = ('(?:' + pattern + ')' + after); - if (isNegated) { - pattern = prefix + negate(pattern); - } - return new RegExp(prefix + pattern); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/extglob/package.json b/fundamentals/bug-challenge-es6/node_modules/extglob/package.json deleted file mode 100644 index 4c5e88818..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extglob/package.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "_args": [ - [ - "extglob@^0.3.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch" - ] - ], - "_from": "extglob@>=0.3.1 <0.4.0", - "_id": "extglob@0.3.2", - "_inCache": true, - "_installable": true, - "_location": "/extglob", - "_nodeVersion": "5.3.0", - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "extglob", - "raw": "extglob@^0.3.1", - "rawSpec": "^0.3.1", - "scope": null, - "spec": ">=0.3.1 <0.4.0", - "type": "range" - }, - "_requiredBy": [ - "/micromatch" - ], - "_resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "_shasum": "2e18ff3d2f49ab2765cec9023f011daa8d8349a1", - "_shrinkwrap": null, - "_spec": "extglob@^0.3.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/extglob/issues" - }, - "dependencies": { - "is-extglob": "^1.0.0" - }, - "description": "Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to glob patterns.", - "devDependencies": { - "ansi-green": "^0.1.1", - "micromatch": "^2.1.6", - "minimatch": "^2.0.1", - "minimist": "^1.1.0", - "mocha": "*", - "should": "*", - "success-symbol": "^0.1.0" - }, - "directories": {}, - "dist": { - "shasum": "2e18ff3d2f49ab2765cec9023f011daa8d8349a1", - "tarball": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "8c3f38bbd9e0afaf31a87e411c0d15532434ef41", - "homepage": "https://github.com/jonschlinkert/extglob", - "keywords": [ - "bash", - "extended", - "extglob", - "glob", - "ksh", - "match", - "wildcard" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - } - ], - "name": "extglob", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/jonschlinkert/extglob.git" - }, - "scripts": { - "test": "mocha" - }, - "verb": { - "related": { - "list": [ - "micromatch", - "expand-brackets", - "braces", - "fill-range", - "expand-range" - ] - } - }, - "version": "0.3.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/extsprintf/.gitmodules b/fundamentals/bug-challenge-es6/node_modules/extsprintf/.gitmodules deleted file mode 100644 index 4e0f5e29d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extsprintf/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "deps/jsstyle"] - path = deps/jsstyle - url = git://github.com/davepacheco/jsstyle -[submodule "deps/javascriptlint"] - path = deps/javascriptlint - url = git://github.com/davepacheco/javascriptlint diff --git a/fundamentals/bug-challenge-es6/node_modules/extsprintf/LICENSE b/fundamentals/bug-challenge-es6/node_modules/extsprintf/LICENSE deleted file mode 100644 index cbc0bb3ba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extsprintf/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012, Joyent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE diff --git a/fundamentals/bug-challenge-es6/node_modules/extsprintf/Makefile b/fundamentals/bug-challenge-es6/node_modules/extsprintf/Makefile deleted file mode 100644 index 1deeb5fdf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extsprintf/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -# -# Copyright (c) 2012, Joyent, Inc. All rights reserved. -# -# Makefile: top-level Makefile -# -# This Makefile contains only repo-specific logic and uses included makefiles -# to supply common targets (javascriptlint, jsstyle, restdown, etc.), which are -# used by other repos as well. -# - -# -# Files -# -JS_FILES := $(shell find lib -name '*.js') -JSL_FILES_NODE = $(JS_FILES) -JSSTYLE_FILES = $(JS_FILES) -JSL_CONF_NODE = jsl.node.conf - -# Default target is "check" -check: - -include ./Makefile.deps -include ./Makefile.targ diff --git a/fundamentals/bug-challenge-es6/node_modules/extsprintf/Makefile.deps b/fundamentals/bug-challenge-es6/node_modules/extsprintf/Makefile.deps deleted file mode 100644 index 2811bde17..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extsprintf/Makefile.deps +++ /dev/null @@ -1,39 +0,0 @@ -# -*- mode: makefile -*- -# -# Copyright (c) 2012, Joyent, Inc. All rights reserved. -# -# Makefile.deps: Makefile for including common tools as dependencies -# -# NOTE: This makefile comes from the "eng" repo. It's designed to be dropped -# into other repos as-is without requiring any modifications. If you find -# yourself changing this file, you should instead update the original copy in -# eng.git and then update your repo to use the new version. -# -# This file is separate from Makefile.targ so that teams can choose -# independently whether to use the common targets in Makefile.targ and the -# common tools here. -# - -# -# javascriptlint -# -JSL_EXEC ?= deps/javascriptlint/build/install/jsl -JSL ?= python2.6 $(JSL_EXEC) - -$(JSL_EXEC): | deps/javascriptlint/.git - cd deps/javascriptlint && make install - -# -# jsstyle -# -JSSTYLE_EXEC ?= deps/jsstyle/jsstyle -JSSTYLE ?= $(JSSTYLE_EXEC) - -$(JSSTYLE_EXEC): | deps/jsstyle/.git - -# -# restdown -# -RESTDOWN_EXEC ?= deps/restdown/bin/restdown -RESTDOWN ?= python2.6 $(RESTDOWN_EXEC) -$(RESTDOWN_EXEC): | deps/restdown/.git diff --git a/fundamentals/bug-challenge-es6/node_modules/extsprintf/Makefile.targ b/fundamentals/bug-challenge-es6/node_modules/extsprintf/Makefile.targ deleted file mode 100644 index 2a64fe7e9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extsprintf/Makefile.targ +++ /dev/null @@ -1,285 +0,0 @@ -# -*- mode: makefile -*- -# -# Copyright (c) 2012, Joyent, Inc. All rights reserved. -# -# Makefile.targ: common targets. -# -# NOTE: This makefile comes from the "eng" repo. It's designed to be dropped -# into other repos as-is without requiring any modifications. If you find -# yourself changing this file, you should instead update the original copy in -# eng.git and then update your repo to use the new version. -# -# This Makefile defines several useful targets and rules. You can use it by -# including it from a Makefile that specifies some of the variables below. -# -# Targets defined in this Makefile: -# -# check Checks JavaScript files for lint and style -# Checks bash scripts for syntax -# Checks SMF manifests for validity against the SMF DTD -# -# clean Removes built files -# -# docs Builds restdown documentation in docs/ -# -# prepush Depends on "check" and "test" -# -# test Does nothing (you should override this) -# -# xref Generates cscope (source cross-reference index) -# -# For details on what these targets are supposed to do, see the Joyent -# Engineering Guide. -# -# To make use of these targets, you'll need to set some of these variables. Any -# variables left unset will simply not be used. -# -# BASH_FILES Bash scripts to check for syntax -# (paths relative to top-level Makefile) -# -# CLEAN_FILES Files to remove as part of the "clean" target. Note -# that files generated by targets in this Makefile are -# automatically included in CLEAN_FILES. These include -# restdown-generated HTML and JSON files. -# -# DOC_FILES Restdown (documentation source) files. These are -# assumed to be contained in "docs/", and must NOT -# contain the "docs/" prefix. -# -# JSL_CONF_NODE Specify JavaScriptLint configuration files -# JSL_CONF_WEB (paths relative to top-level Makefile) -# -# Node.js and Web configuration files are separate -# because you'll usually want different global variable -# configurations. If no file is specified, none is given -# to jsl, which causes it to use a default configuration, -# which probably isn't what you want. -# -# JSL_FILES_NODE JavaScript files to check with Node config file. -# JSL_FILES_WEB JavaScript files to check with Web config file. -# -# You can also override these variables: -# -# BASH Path to bash (default: bash) -# -# CSCOPE_DIRS Directories to search for source files for the cscope -# index. (default: ".") -# -# JSL Path to JavaScriptLint (default: "jsl") -# -# JSL_FLAGS_NODE Additional flags to pass through to JSL -# JSL_FLAGS_WEB -# JSL_FLAGS -# -# JSSTYLE Path to jsstyle (default: jsstyle) -# -# JSSTYLE_FLAGS Additional flags to pass through to jsstyle -# - -# -# Defaults for the various tools we use. -# -BASH ?= bash -BASHSTYLE ?= tools/bashstyle -CP ?= cp -CSCOPE ?= cscope -CSCOPE_DIRS ?= . -JSL ?= jsl -JSSTYLE ?= jsstyle -MKDIR ?= mkdir -p -MV ?= mv -RESTDOWN_FLAGS ?= -RMTREE ?= rm -rf -JSL_FLAGS ?= --nologo --nosummary - -ifeq ($(shell uname -s),SunOS) - TAR ?= gtar -else - TAR ?= tar -endif - - -# -# Defaults for other fixed values. -# -BUILD = build -DISTCLEAN_FILES += $(BUILD) -DOC_BUILD = $(BUILD)/docs/public - -# -# Configure JSL_FLAGS_{NODE,WEB} based on JSL_CONF_{NODE,WEB}. -# -ifneq ($(origin JSL_CONF_NODE), undefined) - JSL_FLAGS_NODE += --conf=$(JSL_CONF_NODE) -endif - -ifneq ($(origin JSL_CONF_WEB), undefined) - JSL_FLAGS_WEB += --conf=$(JSL_CONF_WEB) -endif - -# -# Targets. For descriptions on what these are supposed to do, see the -# Joyent Engineering Guide. -# - -# -# Instruct make to keep around temporary files. We have rules below that -# automatically update git submodules as needed, but they employ a deps/*/.git -# temporary file. Without this directive, make tries to remove these .git -# directories after the build has completed. -# -.SECONDARY: $($(wildcard deps/*):%=%/.git) - -# -# This rule enables other rules that use files from a git submodule to have -# those files depend on deps/module/.git and have "make" automatically check -# out the submodule as needed. -# -deps/%/.git: - git submodule update --init deps/$* - -# -# These recipes make heavy use of dynamically-created phony targets. The parent -# Makefile defines a list of input files like BASH_FILES. We then say that each -# of these files depends on a fake target called filename.bashchk, and then we -# define a pattern rule for those targets that runs bash in check-syntax-only -# mode. This mechanism has the nice properties that if you specify zero files, -# the rule becomes a noop (unlike a single rule to check all bash files, which -# would invoke bash with zero files), and you can check individual files from -# the command line with "make filename.bashchk". -# -.PHONY: check-bash -check-bash: $(BASH_FILES:%=%.bashchk) $(BASH_FILES:%=%.bashstyle) - -%.bashchk: % - $(BASH) -n $^ - -%.bashstyle: % - $(BASHSTYLE) $^ - -.PHONY: check-jsl check-jsl-node check-jsl-web -check-jsl: check-jsl-node check-jsl-web - -check-jsl-node: $(JSL_FILES_NODE:%=%.jslnodechk) - -check-jsl-web: $(JSL_FILES_WEB:%=%.jslwebchk) - -%.jslnodechk: % $(JSL_EXEC) - $(JSL) $(JSL_FLAGS) $(JSL_FLAGS_NODE) $< - -%.jslwebchk: % $(JSL_EXEC) - $(JSL) $(JSL_FLAGS) $(JSL_FLAGS_WEB) $< - -.PHONY: check-jsstyle -check-jsstyle: $(JSSTYLE_FILES:%=%.jsstylechk) - -%.jsstylechk: % $(JSSTYLE_EXEC) - $(JSSTYLE) $(JSSTYLE_FLAGS) $< - -.PHONY: check -check: check-jsl check-jsstyle check-bash - @echo check ok - -.PHONY: clean -clean:: - -$(RMTREE) $(CLEAN_FILES) - -.PHONY: distclean -distclean:: clean - -$(RMTREE) $(DISTCLEAN_FILES) - -CSCOPE_FILES = cscope.in.out cscope.out cscope.po.out -CLEAN_FILES += $(CSCOPE_FILES) - -.PHONY: xref -xref: cscope.files - $(CSCOPE) -bqR - -.PHONY: cscope.files -cscope.files: - find $(CSCOPE_DIRS) -name '*.c' -o -name '*.h' -o -name '*.cc' \ - -o -name '*.js' -o -name '*.s' -o -name '*.cpp' > $@ - -# -# The "docs" target is complicated because we do several things here: -# -# (1) Use restdown to build HTML and JSON files from each of DOC_FILES. -# -# (2) Copy these files into $(DOC_BUILD) (build/docs/public), which -# functions as a complete copy of the documentation that could be -# mirrored or served over HTTP. -# -# (3) Then copy any directories and media from docs/media into -# $(DOC_BUILD)/media. This allows projects to include their own media, -# including files that will override same-named files provided by -# restdown. -# -# Step (3) is the surprisingly complex part: in order to do this, we need to -# identify the subdirectories in docs/media, recreate them in -# $(DOC_BUILD)/media, then do the same with the files. -# -DOC_MEDIA_DIRS := $(shell find docs/media -type d 2>/dev/null | grep -v "^docs/media$$") -DOC_MEDIA_DIRS := $(DOC_MEDIA_DIRS:docs/media/%=%) -DOC_MEDIA_DIRS_BUILD := $(DOC_MEDIA_DIRS:%=$(DOC_BUILD)/media/%) - -DOC_MEDIA_FILES := $(shell find docs/media -type f 2>/dev/null) -DOC_MEDIA_FILES := $(DOC_MEDIA_FILES:docs/media/%=%) -DOC_MEDIA_FILES_BUILD := $(DOC_MEDIA_FILES:%=$(DOC_BUILD)/media/%) - -# -# Like the other targets, "docs" just depends on the final files we want to -# create in $(DOC_BUILD), leveraging other targets and recipes to define how -# to get there. -# -.PHONY: docs -docs: \ - $(DOC_FILES:%.restdown=$(DOC_BUILD)/%.html) \ - $(DOC_FILES:%.restdown=$(DOC_BUILD)/%.json) \ - $(DOC_MEDIA_FILES_BUILD) - -# -# We keep the intermediate files so that the next build can see whether the -# files in DOC_BUILD are up to date. -# -.PRECIOUS: \ - $(DOC_FILES:%.restdown=docs/%.html) \ - $(DOC_FILES:%.restdown=docs/%json) - -# -# We do clean those intermediate files, as well as all of DOC_BUILD. -# -CLEAN_FILES += \ - $(DOC_BUILD) \ - $(DOC_FILES:%.restdown=docs/%.html) \ - $(DOC_FILES:%.restdown=docs/%.json) - -# -# Before installing the files, we must make sure the directories exist. The | -# syntax tells make that the dependency need only exist, not be up to date. -# Otherwise, it might try to rebuild spuriously because the directory itself -# appears out of date. -# -$(DOC_MEDIA_FILES_BUILD): | $(DOC_MEDIA_DIRS_BUILD) - -$(DOC_BUILD)/%: docs/% | $(DOC_BUILD) - $(CP) $< $@ - -docs/%.json docs/%.html: docs/%.restdown | $(DOC_BUILD) $(RESTDOWN_EXEC) - $(RESTDOWN) $(RESTDOWN_FLAGS) -m $(DOC_BUILD) $< - -$(DOC_BUILD): - $(MKDIR) $@ - -$(DOC_MEDIA_DIRS_BUILD): - $(MKDIR) $@ - -# -# The default "test" target does nothing. This should usually be overridden by -# the parent Makefile. It's included here so we can define "prepush" without -# requiring the repo to define "test". -# -.PHONY: test -test: - -.PHONY: prepush -prepush: check test diff --git a/fundamentals/bug-challenge-es6/node_modules/extsprintf/README.md b/fundamentals/bug-challenge-es6/node_modules/extsprintf/README.md deleted file mode 100644 index 702e4e221..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extsprintf/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# extsprintf: extended POSIX-style sprintf - -Stripped down version of s[n]printf(3c). We make a best effort to throw an -exception when given a format string we don't understand, rather than ignoring -it, so that we won't break existing programs if/when we go implement the rest -of this. - -This implementation currently supports specifying - -* field alignment ('-' flag), -* zero-pad ('0' flag) -* always show numeric sign ('+' flag), -* field width -* conversions for strings, decimal integers, and floats (numbers). -* argument size specifiers. These are all accepted but ignored, since - Javascript has no notion of the physical size of an argument. - -Everything else is currently unsupported, most notably: precision, unsigned -numbers, non-decimal numbers, and characters. - -Besides the usual POSIX conversions, this implementation supports: - -* `%j`: pretty-print a JSON object (using node's "inspect") -* `%r`: pretty-print an Error object - -# Example - -First, install it: - - # npm install extsprintf - -Now, use it: - - var mod_extsprintf = require('extsprintf'); - console.log(mod_extsprintf.sprintf('hello %25s', 'world')); - -outputs: - - hello world diff --git a/fundamentals/bug-challenge-es6/node_modules/extsprintf/examples/simple.js b/fundamentals/bug-challenge-es6/node_modules/extsprintf/examples/simple.js deleted file mode 100644 index 9f342f5b1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extsprintf/examples/simple.js +++ /dev/null @@ -1,2 +0,0 @@ -var mod_extsprintf = require('extsprintf'); -console.log(mod_extsprintf.sprintf('hello %25s', 'world')); diff --git a/fundamentals/bug-challenge-es6/node_modules/extsprintf/jsl.node.conf b/fundamentals/bug-challenge-es6/node_modules/extsprintf/jsl.node.conf deleted file mode 100644 index 03f787ffb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extsprintf/jsl.node.conf +++ /dev/null @@ -1,137 +0,0 @@ -# -# Configuration File for JavaScript Lint -# -# This configuration file can be used to lint a collection of scripts, or to enable -# or disable warnings for scripts that are linted via the command line. -# - -### Warnings -# Enable or disable warnings based on requirements. -# Use "+WarningName" to display or "-WarningName" to suppress. -# -+ambiguous_else_stmt # the else statement could be matched with one of multiple if statements (use curly braces to indicate intent -+ambiguous_nested_stmt # block statements containing block statements should use curly braces to resolve ambiguity -+ambiguous_newline # unexpected end of line; it is ambiguous whether these lines are part of the same statement -+anon_no_return_value # anonymous function does not always return value -+assign_to_function_call # assignment to a function call --block_without_braces # block statement without curly braces -+comma_separated_stmts # multiple statements separated by commas (use semicolons?) -+comparison_type_conv # comparisons against null, 0, true, false, or an empty string allowing implicit type conversion (use === or !==) -+default_not_at_end # the default case is not at the end of the switch statement -+dup_option_explicit # duplicate "option explicit" control comment -+duplicate_case_in_switch # duplicate case in switch statement -+duplicate_formal # duplicate formal argument {name} -+empty_statement # empty statement or extra semicolon -+identifier_hides_another # identifer {name} hides an identifier in a parent scope --inc_dec_within_stmt # increment (++) and decrement (--) operators used as part of greater statement -+incorrect_version # Expected /*jsl:content-type*/ control comment. The script was parsed with the wrong version. -+invalid_fallthru # unexpected "fallthru" control comment -+invalid_pass # unexpected "pass" control comment -+jsl_cc_not_understood # couldn't understand control comment using /*jsl:keyword*/ syntax -+leading_decimal_point # leading decimal point may indicate a number or an object member -+legacy_cc_not_understood # couldn't understand control comment using /*@keyword@*/ syntax -+meaningless_block # meaningless block; curly braces have no impact -+mismatch_ctrl_comments # mismatched control comment; "ignore" and "end" control comments must have a one-to-one correspondence -+misplaced_regex # regular expressions should be preceded by a left parenthesis, assignment, colon, or comma -+missing_break # missing break statement -+missing_break_for_last_case # missing break statement for last case in switch -+missing_default_case # missing default case in switch statement -+missing_option_explicit # the "option explicit" control comment is missing -+missing_semicolon # missing semicolon -+missing_semicolon_for_lambda # missing semicolon for lambda assignment -+multiple_plus_minus # unknown order of operations for successive plus (e.g. x+++y) or minus (e.g. x---y) signs -+nested_comment # nested comment -+no_return_value # function {name} does not always return a value -+octal_number # leading zeros make an octal number -+parseint_missing_radix # parseInt missing radix parameter -+partial_option_explicit # the "option explicit" control comment, if used, must be in the first script tag -+redeclared_var # redeclaration of {name} -+trailing_comma_in_array # extra comma is not recommended in array initializers -+trailing_decimal_point # trailing decimal point may indicate a number or an object member -+undeclared_identifier # undeclared identifier: {name} -+unreachable_code # unreachable code --unreferenced_argument # argument declared but never referenced: {name} --unreferenced_function # function is declared but never referenced: {name} -+unreferenced_variable # variable is declared but never referenced: {name} -+unsupported_version # JavaScript {version} is not supported -+use_of_label # use of label -+useless_assign # useless assignment -+useless_comparison # useless comparison; comparing identical expressions --useless_quotes # the quotation marks are unnecessary -+useless_void # use of the void type may be unnecessary (void is always undefined) -+var_hides_arg # variable {name} hides argument -+want_assign_or_call # expected an assignment or function call -+with_statement # with statement hides undeclared variables; use temporary variable instead - - -### Output format -# Customize the format of the error message. -# __FILE__ indicates current file path -# __FILENAME__ indicates current file name -# __LINE__ indicates current line -# __COL__ indicates current column -# __ERROR__ indicates error message (__ERROR_PREFIX__: __ERROR_MSG__) -# __ERROR_NAME__ indicates error name (used in configuration file) -# __ERROR_PREFIX__ indicates error prefix -# __ERROR_MSG__ indicates error message -# -# For machine-friendly output, the output format can be prefixed with -# "encode:". If specified, all items will be encoded with C-slashes. -# -# Visual Studio syntax (default): -+output-format __FILE__(__LINE__): __ERROR__ -# Alternative syntax: -#+output-format __FILE__:__LINE__: __ERROR__ - - -### Context -# Show the in-line position of the error. -# Use "+context" to display or "-context" to suppress. -# -+context - - -### Control Comments -# Both JavaScript Lint and the JScript interpreter confuse each other with the syntax for -# the /*@keyword@*/ control comments and JScript conditional comments. (The latter is -# enabled in JScript with @cc_on@). The /*jsl:keyword*/ syntax is preferred for this reason, -# although legacy control comments are enabled by default for backward compatibility. -# --legacy_control_comments - - -### Defining identifiers -# By default, "option explicit" is enabled on a per-file basis. -# To enable this for all files, use "+always_use_option_explicit" --always_use_option_explicit - -# Define certain identifiers of which the lint is not aware. -# (Use this in conjunction with the "undeclared identifier" warning.) -# -# Common uses for webpages might be: -+define __dirname -+define clearInterval -+define clearTimeout -+define console -+define exports -+define global -+define process -+define require -+define setInterval -+define setTimeout -+define Buffer -+define JSON -+define Math - -### JavaScript Version -# To change the default JavaScript version: -#+default-type text/javascript;version=1.5 -#+default-type text/javascript;e4x=1 - -### Files -# Specify which files to lint -# Use "+recurse" to enable recursion (disabled by default). -# To add a set of files, use "+process FileName", "+process Folder\Path\*.js", -# or "+process Folder\Path\*.htm". -# - diff --git a/fundamentals/bug-challenge-es6/node_modules/extsprintf/lib/extsprintf.js b/fundamentals/bug-challenge-es6/node_modules/extsprintf/lib/extsprintf.js deleted file mode 100644 index 61ff891de..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extsprintf/lib/extsprintf.js +++ /dev/null @@ -1,166 +0,0 @@ -/* - * extsprintf.js: extended POSIX-style sprintf - */ - -var mod_assert = require('assert'); -var mod_util = require('util'); - -/* - * Public interface - */ -exports.sprintf = jsSprintf; - -/* - * Stripped down version of s[n]printf(3c). We make a best effort to throw an - * exception when given a format string we don't understand, rather than - * ignoring it, so that we won't break existing programs if/when we go implement - * the rest of this. - * - * This implementation currently supports specifying - * - field alignment ('-' flag), - * - zero-pad ('0' flag) - * - always show numeric sign ('+' flag), - * - field width - * - conversions for strings, decimal integers, and floats (numbers). - * - argument size specifiers. These are all accepted but ignored, since - * Javascript has no notion of the physical size of an argument. - * - * Everything else is currently unsupported, most notably precision, unsigned - * numbers, non-decimal numbers, and characters. - */ -function jsSprintf(fmt) -{ - var regex = [ - '([^%]*)', /* normal text */ - '%', /* start of format */ - '([\'\\-+ #0]*?)', /* flags (optional) */ - '([1-9]\\d*)?', /* width (optional) */ - '(\\.([1-9]\\d*))?', /* precision (optional) */ - '[lhjztL]*?', /* length mods (ignored) */ - '([diouxXfFeEgGaAcCsSp%jr])' /* conversion */ - ].join(''); - - var re = new RegExp(regex); - var args = Array.prototype.slice.call(arguments, 1); - var flags, width, precision, conversion; - var left, pad, sign, arg, match; - var ret = ''; - var argn = 1; - - mod_assert.equal('string', typeof (fmt)); - - while ((match = re.exec(fmt)) !== null) { - ret += match[1]; - fmt = fmt.substring(match[0].length); - - flags = match[2] || ''; - width = match[3] || 0; - precision = match[4] || ''; - conversion = match[6]; - left = false; - sign = false; - pad = ' '; - - if (conversion == '%') { - ret += '%'; - continue; - } - - if (args.length === 0) - throw (new Error('too few args to sprintf')); - - arg = args.shift(); - argn++; - - if (flags.match(/[\' #]/)) - throw (new Error( - 'unsupported flags: ' + flags)); - - if (precision.length > 0) - throw (new Error( - 'non-zero precision not supported')); - - if (flags.match(/-/)) - left = true; - - if (flags.match(/0/)) - pad = '0'; - - if (flags.match(/\+/)) - sign = true; - - switch (conversion) { - case 's': - if (arg === undefined || arg === null) - throw (new Error('argument ' + argn + - ': attempted to print undefined or null ' + - 'as a string')); - ret += doPad(pad, width, left, arg.toString()); - break; - - case 'd': - arg = Math.floor(arg); - /*jsl:fallthru*/ - case 'f': - sign = sign && arg > 0 ? '+' : ''; - ret += sign + doPad(pad, width, left, - arg.toString()); - break; - - case 'j': /* non-standard */ - if (width === 0) - width = 10; - ret += mod_util.inspect(arg, false, width); - break; - - case 'r': /* non-standard */ - ret += dumpException(arg); - break; - - default: - throw (new Error('unsupported conversion: ' + - conversion)); - } - } - - ret += fmt; - return (ret); -} - -function doPad(chr, width, left, str) -{ - var ret = str; - - while (ret.length < width) { - if (left) - ret += chr; - else - ret = chr + ret; - } - - return (ret); -} - -/* - * This function dumps long stack traces for exceptions having a cause() method. - * See node-verror for an example. - */ -function dumpException(ex) -{ - var ret; - - if (!(ex instanceof Error)) - throw (new Error(jsSprintf('invalid type for %%r: %j', ex))); - - /* Note that V8 prepends "ex.stack" with ex.toString(). */ - ret = 'EXCEPTION: ' + ex.constructor.name + ': ' + ex.stack; - - if (ex.cause && typeof (ex.cause) === 'function') { - var cex = ex.cause(); - if (cex) { - ret += '\nCaused by: ' + dumpException(cex); - } - } - - return (ret); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/extsprintf/package.json b/fundamentals/bug-challenge-es6/node_modules/extsprintf/package.json deleted file mode 100644 index a7f81c18a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/extsprintf/package.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "_args": [ - [ - "extsprintf@1.0.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jsprim" - ] - ], - "_from": "extsprintf@1.0.2", - "_id": "extsprintf@1.0.2", - "_inCache": true, - "_installable": true, - "_location": "/extsprintf", - "_npmUser": { - "email": "dap@cs.brown.edu", - "name": "dap" - }, - "_npmVersion": "1.1.65", - "_phantomChildren": {}, - "_requested": { - "name": "extsprintf", - "raw": "extsprintf@1.0.2", - "rawSpec": "1.0.2", - "scope": null, - "spec": "1.0.2", - "type": "version" - }, - "_requiredBy": [ - "/jsprim", - "/verror" - ], - "_resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz", - "_shasum": "e1080e0658e300b06294990cc70e1502235fd550", - "_shrinkwrap": null, - "_spec": "extsprintf@1.0.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jsprim", - "bugs": { - "url": "https://github.com/davepacheco/node-extsprintf/issues" - }, - "dependencies": {}, - "description": "extended POSIX-style sprintf", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "e1080e0658e300b06294990cc70e1502235fd550", - "tarball": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz" - }, - "engines": [ - "node >=0.6.0" - ], - "homepage": "https://github.com/davepacheco/node-extsprintf#readme", - "main": "./lib/extsprintf.js", - "maintainers": [ - { - "email": "dap@cs.brown.edu", - "name": "dap" - } - ], - "name": "extsprintf", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/davepacheco/node-extsprintf.git" - }, - "version": "1.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/LICENSE.md b/fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/LICENSE.md deleted file mode 100644 index 6212406b4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/LICENSE.md +++ /dev/null @@ -1,25 +0,0 @@ -(MIT License) - -Copyright (c) 2013 [Ramesh Nair](http://www.hiddentao.com/) - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - diff --git a/fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/README.md b/fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/README.md deleted file mode 100644 index a77899539..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/README.md +++ /dev/null @@ -1,104 +0,0 @@ -# fast-levenshtein - Levenshtein algorithm in Javascript - -[![Build Status](https://secure.travis-ci.org/hiddentao/fast-levenshtein.png)](http://travis-ci.org/hiddentao/fast-levenshtein) -[![NPM module](https://badge.fury.io/js/fast-levenshtein.png)](https://badge.fury.io/js/fast-levenshtein) -[![NPM downloads](https://img.shields.io/npm/dm/fast-levenshtein.svg?maxAge=2592000)](https://www.npmjs.com/package/fast-levenshtein) -[![Follow on Twitter](https://img.shields.io/twitter/url/http/shields.io.svg?style=social&label=Follow&maxAge=2592000)](https://twitter.com/hiddentao) - -An efficient Javascript implementation of the [Levenshtein algorithm](http://en.wikipedia.org/wiki/Levenshtein_distance) with locale-specific collator support. - -## Features - -* Works in node.js and in the browser. -* Better performance than other implementations by not needing to store the whole matrix ([more info](http://www.codeproject.com/Articles/13525/Fast-memory-efficient-Levenshtein-algorithm)). -* Locale-sensitive string comparisions if needed. -* Comprehensive test suite and performance benchmark. -* Small: <1 KB minified and gzipped - -## Installation - -### node.js - -Install using [npm](http://npmjs.org/): - -```bash -$ npm install fast-levenshtein -``` - -### Browser - -Using bower: - -```bash -$ bower install fast-levenshtein -``` - -If you are not using any module loader system then the API will then be accessible via the `window.Levenshtein` object. - -## Examples - -**Default usage** - -```javascript -var levenshtein = require('fast-levenshtein'); - -var distance = levenshtein.get('back', 'book'); // 2 -var distance = levenshtein.get('我愛你', '我叫你'); // 1 -``` - -**Locale-sensitive string comparisons** - -It supports using [Intl.Collator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Collator) for locale-sensitive string comparisons: - -```javascript -var levenshtein = require('fast-levenshtein'); - -levenshtein.get('mikailovitch', 'Mikhaïlovitch', { useCollator: true}); -// 1 -``` - -## Building and Testing - -To build the code and run the tests: - -```bash -$ npm install -g grunt-cli -$ npm install -$ npm run build -``` - -## Performance - -_Thanks to [Titus Wormer](https://github.com/wooorm) for [encouraging me](https://github.com/hiddentao/fast-levenshtein/issues/1) to do this._ - -Benchmarked against other node.js levenshtein distance modules (on Macbook Air 2012, Core i7, 8GB RAM): - -```bash -Running suite Implementation comparison [benchmark/speed.js]... ->> levenshtein-edit-distance x 234 ops/sec ±3.02% (73 runs sampled) ->> levenshtein-component x 422 ops/sec ±4.38% (83 runs sampled) ->> levenshtein-deltas x 283 ops/sec ±3.83% (78 runs sampled) ->> natural x 255 ops/sec ±0.76% (88 runs sampled) ->> levenshtein x 180 ops/sec ±3.55% (86 runs sampled) ->> fast-levenshtein x 1,792 ops/sec ±2.72% (95 runs sampled) -Benchmark done. -Fastest test is fast-levenshtein at 4.2x faster than levenshtein-component -``` - -You can run this benchmark yourself by doing: - -```bash -$ npm install -$ npm run build -$ npm run benchmark -``` - -## Contributing - -If you wish to submit a pull request please update and/or create new tests for any changes you make and ensure the grunt build passes. - -See [CONTRIBUTING.md](https://github.com/hiddentao/fast-levenshtein/blob/master/CONTRIBUTING.md) for details. - -## License - -MIT - see [LICENSE.md](https://github.com/hiddentao/fast-levenshtein/blob/master/LICENSE.md) diff --git a/fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/levenshtein.js b/fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/levenshtein.js deleted file mode 100644 index 404a31558..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/levenshtein.js +++ /dev/null @@ -1,102 +0,0 @@ -(function() { - 'use strict'; - - var collator; - try { - collator = (typeof Intl !== "undefined" && typeof Intl.Collator !== "undefined") ? Intl.Collator("generic", { sensitivity: "base" }) : null; - } catch (err){ - console.log("Collator could not be initialized and wouldn't be used"); - } - // arrays to re-use - var prevRow = [], - str2Char = []; - - /** - * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance. - */ - var Levenshtein = { - /** - * Calculate levenshtein distance of the two strings. - * - * @param str1 String the first string. - * @param str2 String the second string. - * @param [options] Additional options. - * @param [options.useCollator] Use `Intl.Collator` for locale-sensitive string comparison. - * @return Integer the levenshtein distance (0 and above). - */ - get: function(str1, str2, options) { - var useCollator = (options && collator && options.useCollator); - - var str1Len = str1.length, - str2Len = str2.length; - - // base cases - if (str1Len === 0) return str2Len; - if (str2Len === 0) return str1Len; - - // two rows - var curCol, nextCol, i, j, tmp; - - // initialise previous row - for (i=0; i tmp) { - nextCol = tmp; - } - // deletion - tmp = prevRow[j + 1] + 1; - if (nextCol > tmp) { - nextCol = tmp; - } - - // copy current col value into previous (in preparation for next iteration) - prevRow[j] = curCol; - } - - // copy last col value into previous (in preparation for next iteration) - prevRow[j] = nextCol; - } - - return nextCol; - } - - }; - - // amd - if (typeof define !== "undefined" && define !== null && define.amd) { - define(function() { - return Levenshtein; - }); - } - // commonjs - else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) { - module.exports = Levenshtein; - } - // web worker - else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') { - self.Levenshtein = Levenshtein; - } - // browser main thread - else if (typeof window !== "undefined" && window !== null) { - window.Levenshtein = Levenshtein; - } -}()); - diff --git a/fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/package.json b/fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/package.json deleted file mode 100644 index 694132238..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fast-levenshtein/package.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "_args": [ - [ - "fast-levenshtein@~2.0.4", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/optionator" - ] - ], - "_from": "fast-levenshtein@>=2.0.4 <2.1.0", - "_id": "fast-levenshtein@2.0.5", - "_inCache": true, - "_installable": true, - "_location": "/fast-levenshtein", - "_nodeVersion": "4.4.5", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/fast-levenshtein-2.0.5.tgz_1475102215149_0.23410583310760558" - }, - "_npmUser": { - "email": "ram@hiddentao.com", - "name": "hiddentao" - }, - "_npmVersion": "3.9.3", - "_phantomChildren": {}, - "_requested": { - "name": "fast-levenshtein", - "raw": "fast-levenshtein@~2.0.4", - "rawSpec": "~2.0.4", - "scope": null, - "spec": ">=2.0.4 <2.1.0", - "type": "range" - }, - "_requiredBy": [ - "/optionator" - ], - "_resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz", - "_shasum": "bd33145744519ab1c36c3ee9f31f08e9079b67f2", - "_shrinkwrap": null, - "_spec": "fast-levenshtein@~2.0.4", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/optionator", - "author": { - "email": "ram@hiddentao.com", - "name": "Ramesh Nair", - "url": "http://www.hiddentao.com/" - }, - "bugs": { - "url": "https://github.com/hiddentao/fast-levenshtein/issues" - }, - "dependencies": {}, - "description": "Efficient implementation of Levenshtein algorithm with locale-specific collator support.", - "devDependencies": { - "chai": "~1.5.0", - "grunt": "~0.4.1", - "grunt-benchmark": "~0.2.0", - "grunt-cli": "^1.2.0", - "grunt-contrib-jshint": "~0.4.3", - "grunt-contrib-uglify": "~0.2.0", - "grunt-mocha-test": "~0.2.2", - "grunt-npm-install": "~0.1.0", - "load-grunt-tasks": "~0.6.0", - "lodash": "^4.0.1", - "mocha": "~1.9.0" - }, - "directories": {}, - "dist": { - "shasum": "bd33145744519ab1c36c3ee9f31f08e9079b67f2", - "tarball": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.5.tgz" - }, - "files": [ - "levenshtein.js" - ], - "gitHead": "7c41122f8725a63587ec34bb19b12dd91f12465f", - "homepage": "https://github.com/hiddentao/fast-levenshtein#readme", - "keywords": [ - "levenshtein", - "distance", - "string" - ], - "license": "MIT", - "main": "levenshtein.js", - "maintainers": [ - { - "email": "ram@hiddentao.com", - "name": "hiddentao" - } - ], - "name": "fast-levenshtein", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/hiddentao/fast-levenshtein.git" - }, - "scripts": { - "benchmark": "grunt benchmark", - "build": "grunt build", - "prepublish": "npm run build", - "test": "mocha" - }, - "version": "2.0.5" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/fb-watchman/README.md b/fundamentals/bug-challenge-es6/node_modules/fb-watchman/README.md deleted file mode 100644 index 33da0ad5c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fb-watchman/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# fb-watchman - -`fb-watchman` is a filesystem watcher that uses the -[Watchman](https://facebook.github.io/watchman/) file watching service from -Facebook. - -Watchman provides file change notification services using very -efficient recursive watches and also allows more advanced change matching and -filesystem tree querying operations using -[a powerful expression syntax](https://facebook.github.io/watchman/docs/file-query.html#expressions). - -## Install - -You should [install Watchman]( -https://facebook.github.io/watchman/docs/install.html) to make the most of this -module. - -Then simply: - -``` -$ npm install fb-watchman -``` - -## Key Concepts - -- Watchman recursively watches directories. -- Each watched directory is called a `root`. -- You must initiate a `watch` on a `root` using the `watch-project` command prior to subscribing to changes -- Rather than separately watching many sibling directories, `watch-project` consolidates and re-uses existing watches relative to a project root (the location of your `.watchmanconfig` or source control repository root) -- change notifications are relative to the project root - -## How do I use it? - -[Read the NodeJS watchman documentation](https://facebook.github.io/watchman/docs/nodejs.html) diff --git a/fundamentals/bug-challenge-es6/node_modules/fb-watchman/index.js b/fundamentals/bug-challenge-es6/node_modules/fb-watchman/index.js deleted file mode 100644 index 4a60eda58..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fb-watchman/index.js +++ /dev/null @@ -1,321 +0,0 @@ -/* Copyright 2014-present Facebook, Inc. - * Licensed under the Apache License, Version 2.0 */ - -'use strict'; - -var net = require('net'); -var EE = require('events').EventEmitter; -var util = require('util'); -var childProcess = require('child_process'); -var bser = require('bser'); - -// We'll emit the responses to these when they get sent down to us -var unilateralTags = ['subscription', 'log']; - -/** - * @param options An object with the following optional keys: - * * 'watchmanBinaryPath' (string) Absolute path to the watchman binary. - * If not provided, the Client locates the binary using the PATH specified - * by the node child_process's default env. - */ -function Client(options) { - var self = this; - EE.call(this); - - this.watchmanBinaryPath = 'watchman'; - if (options && options.watchmanBinaryPath) { - this.watchmanBinaryPath = options.watchmanBinaryPath.trim(); - }; - this.commands = []; -} -util.inherits(Client, EE); - -module.exports.Client = Client; - -// Try to send the next queued command, if any -Client.prototype.sendNextCommand = function() { - if (this.currentCommand) { - // There's a command pending response, don't send this new one yet - return; - } - - this.currentCommand = this.commands.shift(); - if (!this.currentCommand) { - // No further commands are queued - return; - } - - this.socket.write(bser.dumpToBuffer(this.currentCommand.cmd)); -} - -Client.prototype.cancelCommands = function(why) { - var error = new Error(why); - - // Steal all pending commands before we start cancellation, in - // case something decides to schedule more commands - var cmds = this.commands; - this.commands = []; - - if (this.currentCommand) { - cmds.unshift(this.currentCommand); - this.currentCommand = null; - } - - // Synthesize an error condition for any commands that were queued - cmds.forEach(function(cmd) { - cmd.cb(error); - }); -} - -Client.prototype.connect = function() { - var self = this; - - function makeSock(sockname) { - // bunser will decode the watchman BSER protocol for us - self.bunser = new bser.BunserBuf(); - // For each decoded line: - self.bunser.on('value', function(obj) { - // Figure out if this is a unliteral response or if it is the - // response portion of a request-response sequence. At the time - // of writing, there are only two possible unilateral responses. - var unilateral = false; - for (var i = 0; i < unilateralTags.length; i++) { - var tag = unilateralTags[i]; - if (tag in obj) { - unilateral = tag; - } - } - - if (unilateral) { - self.emit(unilateral, obj); - } else if (self.currentCommand) { - var cmd = self.currentCommand; - self.currentCommand = null; - if ('error' in obj) { - var error = new Error(obj.error); - error.watchmanResponse = obj; - cmd.cb(error); - } else { - cmd.cb(null, obj); - } - } - - // See if we can dispatch the next queued command, if any - self.sendNextCommand(); - }); - self.bunser.on('error', function(err) { - self.emit('error', err); - }); - - self.socket = net.createConnection(sockname); - self.socket.on('connect', function() { - self.connecting = false; - self.emit('connect'); - self.sendNextCommand(); - }); - self.socket.on('error', function(err) { - self.connecting = false; - self.emit('error', err); - }); - self.socket.on('data', function(buf) { - if (self.bunser) { - self.bunser.append(buf); - } - }); - self.socket.on('end', function() { - self.socket = null; - self.bunser = null; - self.cancelCommands('The watchman connection was closed'); - self.emit('end'); - }); - } - - // triggers will export the sock path to the environment. - // If we're invoked in such a way, we can simply pick up the - // definition from the environment and avoid having to fork off - // a process to figure it out - if (process.env.WATCHMAN_SOCK) { - makeSock(process.env.WATCHMAN_SOCK); - return; - } - - // We need to ask the client binary where to find it. - // This will cause the service to start for us if it isn't - // already running. - var args = ['--no-pretty', 'get-sockname']; - - // We use the more elaborate spawn rather than exec because there - // are some error cases on Windows where process spawning can hang. - // It is desirable to pipe stderr directly to stderr live so that - // we can discover the problem. - var proc = null; - var spawnFailed = false; - - function spawnError(error) { - if (spawnFailed) { - // For ENOENT, proc 'close' will also trigger with a negative code, - // let's suppress that second error. - return; - } - spawnFailed = true; - if (error.errno === 'EACCES') { - error.message = 'The Watchman CLI is installed but cannot ' + - 'be spawned because of a permission problem'; - } else if (error.errno === 'ENOENT') { - error.message = 'Watchman was not found in PATH. See ' + - 'https://facebook.github.io/watchman/docs/install.html ' + - 'for installation instructions'; - } - console.log('Watchman: ', error.message); - self.emit('error', error); - } - - try { - proc = childProcess.spawn(this.watchmanBinaryPath, args, { - stdio: ['ignore', 'pipe', 'pipe'] - }); - } catch (error) { - spawnError(error); - return; - } - - var stdout = []; - var stderr = []; - proc.stdout.on('data', function(data) { - stdout.push(data); - }); - proc.stderr.on('data', function(data) { - data = data.toString('utf8'); - stderr.push(data); - console.log(data); - }); - proc.on('error', function(error) { - spawnError(error); - }); - - proc.on('close', function (code) { - if (code !== 0) { - spawnError(new Error( - self.watchmanBinaryPath + args.join(' ') + - ' returned with exit code ' + code + ' ' + stderr.join(''))); - return; - } - try { - var obj = JSON.parse(stdout.join('')); - if ('error' in obj) { - var error = new Error(obj.error); - error.watchmanResponse = obj; - self.emit('error', error); - return; - } - makeSock(obj.sockname); - } catch (e) { - self.emit('error', e); - } - }); -} - -Client.prototype.command = function(args, done) { - done = done || function() {}; - - // Queue up the command - this.commands.push({cmd: args, cb: done}); - - // Establish a connection if we don't already have one - if (!this.socket) { - if (!this.connecting) { - this.connecting = true; - this.connect(); - return; - } - return; - } - - // If we're already connected and idle, try sending the command immediately - this.sendNextCommand(); -} - -var cap_versions = { - "cmd-watch-del-all": "3.1.1", - "cmd-watch-project": "3.1", - "relative_root": "3.3", - "term-dirname": "3.1", - "term-idirname": "3.1", - "wildmatch": "3.7", -} - -// Compares a vs b, returns < 0 if a < b, > 0 if b > b, 0 if a == b -function vers_compare(a, b) { - a = a.split('.'); - b = b.split('.'); - for (var i = 0; i < 3; i++) { - var d = parseInt(a[i] || '0') - parseInt(b[i] || '0'); - if (d != 0) { - return d; - } - } - return 0; // Equal -} - -function have_cap(vers, name) { - if (name in cap_versions) { - return vers_compare(vers, cap_versions[name]) >= 0; - } - return false; -} - -// This is a helper that we expose for testing purposes -Client.prototype._synthesizeCapabilityCheck = function( - resp, optional, required) { - resp.capabilities = {} - var version = resp.version; - optional.forEach(function (name) { - resp.capabilities[name] = have_cap(version, name); - }); - required.forEach(function (name) { - var have = have_cap(version, name); - resp.capabilities[name] = have; - if (!have) { - resp.error = 'client required capability `' + name + - '` is not supported by this server'; - } - }); - return resp; -} - -Client.prototype.capabilityCheck = function(caps, done) { - var optional = caps.optional || []; - var required = caps.required || []; - var self = this; - this.command(['version', { - optional: optional, - required: required - }], function (error, resp) { - if (error) { - done(error); - return; - } - if (!('capabilities' in resp)) { - // Server doesn't support capabilities, so we need to - // synthesize the results based on the version - resp = self._synthesizeCapabilityCheck(resp, optional, required); - if (resp.error) { - error = new Error(resp.error); - error.watchmanResponse = resp; - done(error); - return; - } - } - done(null, resp); - }); -} - -// Close the connection to the service -Client.prototype.end = function() { - this.cancelCommands('The client was ended'); - if (this.socket) { - this.socket.end(); - this.socket = null; - } - this.bunser = null; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/fb-watchman/package.json b/fundamentals/bug-challenge-es6/node_modules/fb-watchman/package.json deleted file mode 100644 index d1c94cd6d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fb-watchman/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "fb-watchman@^1.9.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-haste-map" - ] - ], - "_from": "fb-watchman@>=1.9.0 <2.0.0", - "_id": "fb-watchman@1.9.0", - "_inCache": true, - "_installable": true, - "_location": "/fb-watchman", - "_nodeVersion": "5.2.0", - "_npmUser": { - "email": "wez@wezfurlong.org", - "name": "wez" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "fb-watchman", - "raw": "fb-watchman@^1.9.0", - "rawSpec": "^1.9.0", - "scope": null, - "spec": ">=1.9.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-haste-map", - "/sane" - ], - "_resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.0.tgz", - "_shasum": "6f268f1f347a6b3c875d1e89da7e1ed79adfc0ec", - "_shrinkwrap": null, - "_spec": "fb-watchman@^1.9.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-haste-map", - "author": { - "email": "wez@fb.com", - "name": "Wez Furlong", - "url": "http://wezfurlong.org" - }, - "bugs": { - "url": "https://github.com/facebook/watchman/issues" - }, - "dependencies": { - "bser": "^1.0.2" - }, - "description": "Bindings for the Watchman file watching service", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "6f268f1f347a6b3c875d1e89da7e1ed79adfc0ec", - "tarball": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-1.9.0.tgz" - }, - "files": [ - "index.js" - ], - "homepage": "https://facebook.github.io/watchman/", - "keywords": [ - "facebook", - "watchman", - "file", - "watch", - "watcher", - "watching", - "fs.watch", - "fswatcher", - "fs", - "glob", - "utility" - ], - "license": "Apache-2.0", - "main": "index.js", - "maintainers": [ - { - "email": "wez@wezfurlong.org", - "name": "wez" - } - ], - "name": "fb-watchman", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/facebook/watchman.git" - }, - "scripts": {}, - "version": "1.9.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/filename-regex/README.md b/fundamentals/bug-challenge-es6/node_modules/filename-regex/README.md deleted file mode 100644 index d001e7aae..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/filename-regex/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# filename-regex [![NPM version](https://badge.fury.io/js/filename-regex.svg)](http://badge.fury.io/js/filename-regex) - -> Regular expression for matching file names, with or without extension. - - -## Install with [npm](npmjs.org) - -```bash -npm i filename-regex --save -``` - -## Usage - -```js -var regex = require('filename-regex'); - -'a/b/c/d.min.js'.match(regex()); -//=> match[0] = 'd.min.js' - -'a/b/c/.dotfile'.match(regex()); -//=> match[0] = '.dotfile' -``` - - -## Run tests - -Install dev dependencies: - -```bash -npm i -d && npm test -``` - -## Contributing -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/regexps/filename-regex/issues) - - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - - -## License -Copyright (c) 2015 Jon Schlinkert -Released under the MIT license - -*** - -_This file was generated by [verb](https://github.com/assemble/verb) on January 24, 2015._ diff --git a/fundamentals/bug-challenge-es6/node_modules/filename-regex/index.js b/fundamentals/bug-challenge-es6/node_modules/filename-regex/index.js deleted file mode 100644 index bb1888b4a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/filename-regex/index.js +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * filename-regex - * - * Copyright (c) 2014-2015, Jon Schlinkert - * Licensed under the MIT license. - */ - -module.exports = function filenameRegex() { - return /([^\\\/]+)$/; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/filename-regex/package.json b/fundamentals/bug-challenge-es6/node_modules/filename-regex/package.json deleted file mode 100644 index 3ef1ac7e8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/filename-regex/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "filename-regex@^2.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch" - ] - ], - "_from": "filename-regex@>=2.0.0 <3.0.0", - "_id": "filename-regex@2.0.0", - "_inCache": true, - "_installable": true, - "_location": "/filename-regex", - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "1.4.28", - "_phantomChildren": {}, - "_requested": { - "name": "filename-regex", - "raw": "filename-regex@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/micromatch" - ], - "_resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz", - "_shasum": "996e3e80479b98b9897f15a8a58b3d084e926775", - "_shrinkwrap": null, - "_spec": "filename-regex@^2.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/regexps/filename-regex/issues" - }, - "dependencies": {}, - "description": "Regular expression for matching file names, with or without extension.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "996e3e80479b98b9897f15a8a58b3d084e926775", - "tarball": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "aa0f2933322d38cf547ff4c8ced882fbd8422866", - "homepage": "https://github.com/regexps/filename-regex", - "keywords": [ - "basename", - "regular expression", - "file", - "filename", - "filepath", - "match", - "name", - "path", - "regex", - "regexp" - ], - "license": { - "type": "MIT", - "url": "https://github.com/regexps/filename-regex/blob/master/LICENSE-MIT" - }, - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - } - ], - "name": "filename-regex", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/regexps/filename-regex.git" - }, - "scripts": { - "test": "mocha -R spec" - }, - "version": "2.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/.npmignore b/fundamentals/bug-challenge-es6/node_modules/fileset/.npmignore deleted file mode 100644 index 08b25532d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/fileset/.travis.yml deleted file mode 100644 index 1c01278eb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -language: node_js - -node_js: - - 'iojs' - - '0.12' - - '0.10' diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/fileset/CHANGELOG.md deleted file mode 100644 index 3aff6f0be..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/CHANGELOG.md +++ /dev/null @@ -1,25 +0,0 @@ -## Changelog - -- Releases: https://github.com/mklabs/node-fileset/releases - -### 0.2.1 - -- Sync API - -### 0.2.0 - -- Drop support for 0.8 -- PR mklabs/node-fileset#14 reapplied -- [Minor code style changes](bf8afae22a49cf64720177d6036090db2852d744) - -### 0.1.8 - -- PR mklabs/node-fileset#17 - Reverts PR#14 - -### 0.1.6 / 0.1.7 - -- PR mklabs/node-fileset#14 - -### 0.1.x - -- Initial commit diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/LICENSE-MIT b/fundamentals/bug-challenge-es6/node_modules/fileset/LICENSE-MIT deleted file mode 100644 index 63f400b97..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/LICENSE-MIT +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 Mickael Daniel - -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/fundamentals/bug-challenge-es6/node_modules/fileset/README.md b/fundamentals/bug-challenge-es6/node_modules/fileset/README.md deleted file mode 100644 index 8277df4bf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# node-fileset [![Build Status](https://secure.travis-ci.org/mklabs/node-fileset.png)](http://travis-ci.org/mklabs/node-fileset) - -Exposes a basic wrapper on top of -[Glob](https://github.com/isaacs/node-glob) / -[minimatch](https://github.com/isaacs/minimatch) combo both written by -@isaacs. Glob now uses JavaScript instead of C++ bindings which makes it -usable in Node.js 0.6.x and Windows platforms. - -[![NPM](https://nodei.co/npm/fileset.png?downloads=true&stars=true)](https://nodei.co/npm/fileset/) - -Adds multiples patterns matching and exlude ability. This is -basically just a sugar API syntax where you can specify a list of includes -and optional exclude patterns. It works by setting up the necessary -miniglob "fileset" and filtering out the results using minimatch. - -*[Changelog](https://github.com/mklabs/node-fileset/blob/master/CHANGELOG.md#changelog)* - -## Install - - npm install fileset - -## Usage - -Can be used with callback or emitter style. - -* **include**: list of glob patterns `foo/**/*.js *.md src/lib/**/*` -* **exclude**: *optional* list of glob patterns to filter include - results `foo/**/*.js *.md` -* **callback**: *optional* function that gets called with an error if - something wrong happend, otherwise null with an array of results - -The callback is optional since the fileset method return an instance of -EventEmitter which emit different events you might use: - -* *match*: Every time a match is found, miniglob emits this event with - the pattern. -* *include*: Emitted each time an include match is found. -* *exclude*: Emitted each time an exclude match is found and filtered - out from the fileset. -* *end*: Emitted when the matching is finished with all the matches - found, optionally filtered by the exclude patterns. - -#### Callback - -```js -var fileset = require('fileset'); - -fileset('**/*.js', '**.min.js', function(err, files) { - if (err) return console.error(err); - - console.log('Files: ', files.length); - console.log(files); -}); -``` - -#### Event emitter - -```js -var fileset = require('fileset'); - -fileset('**.coffee README.md *.json Cakefile **.js', 'node_modules/**') - .on('match', console.log.bind(console, 'error')) - .on('include', console.log.bind(console, 'includes')) - .on('exclude', console.log.bind(console, 'excludes')) - .on('end', console.log.bind(console, 'end')); -``` - -`fileset` returns an instance of EventEmitter, with an `includes` property -which is the array of Fileset objects (inheriting from -`miniglob.Miniglob`) that were used during the mathing process, should -you want to use them individually. - -Check out the -[tests](https://github.com/mklabs/node-fileset/tree/master/tests) for -more examples. - -## Sync usage - -```js -var results = fileset.sync('*.md *.js', 'CHANGELOG.md node_modules/**/*.md node_modules/**/*.js'); -``` - -The behavior should remain the same, although it lacks the last `options` arguments to pass to internal `glob` and `minimatch` dependencies. - -## Tests - -Run `npm test` - -## Why - -Mainly for a build tool with cake files, to provide me an easy way to get -a list of files by either using glob or path patterns, optionally -allowing exclude patterns to filter out the results. - -All the magic is happening in -[Glob](https://github.com/isaacs/node-glob) and -[minimatch](https://github.com/isaacs/minimatch). Check them out! diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/lib/fileset.js b/fundamentals/bug-challenge-es6/node_modules/fileset/lib/fileset.js deleted file mode 100644 index c0ec5084d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/lib/fileset.js +++ /dev/null @@ -1,102 +0,0 @@ -var util = require('util'); -var minimatch = require('minimatch'); -var glob = require('glob'); -var Glob = glob.Glob; -var EventEmitter = require('events').EventEmitter; - -module.exports = fileset; - -// Async API -function fileset(include, exclude, options, cb) { - if (typeof exclude === 'function') cb = exclude, exclude = ''; - else if (typeof options === 'function') cb = options, options = {}; - - var includes = (typeof include === 'string') ? include.split(' ') : include; - var excludes = (typeof exclude === 'string') ? exclude.split(' ') : exclude; - - var em = new EventEmitter; - var remaining = includes.length; - var results = []; - - if (!includes.length) return cb(new Error('Must provide an include pattern')); - - em.includes = includes.map(function(pattern) { - return new fileset.Fileset(pattern, options) - .on('error', cb ? cb : em.emit.bind(em, 'error')) - .on('match', em.emit.bind(em, 'match')) - .on('match', em.emit.bind(em, 'include')) - .on('end', next.bind({}, pattern)) - }); - - function next(pattern, matches) { - results = results.concat(matches); - - if (!(--remaining)) { - results = results.filter(function(file) { - return !excludes.filter(function(glob) { - var match = minimatch(file, glob, { matchBase: true }); - if(match) em.emit('exclude', file); - return match; - }).length; - }); - - if(cb) cb(null, results); - em.emit('end', results); - } - } - - return em; -} - -// Sync API -fileset.sync = function filesetSync(include, exclude) { - if (!exclude) exclude = ''; - - // includes / excludes, either an array or string separated by comma or whitespace - var includes = (typeof include === 'string') ? include.split(/[\s,]/g) : include; - var excludes = (typeof exclude === 'string') ? exclude.split(/[\s,]/g) : exclude; - - // Filter out any false positive '' empty strings - includes = includes.filter(function(pattern) { return pattern; }); - excludes = excludes.filter(function(pattern) { return pattern; }); - - // - todo: pass in glob options as last param - var options = { matchBase: true }; - - // First, glob match on all include patters into a single array - var results = includes.map(function(include) { - return glob.sync(include, options); - }).reduce(function(a, b) { - return a.concat(b); - }, []); - - // Then filters out on any exclude match - var ignored = excludes.map(function(exclude) { - return glob.sync(exclude, options); - }).reduce(function(a, b) { - return a.concat(b); - }, []); - - // And filter any exclude match - results = results.filter(function(file) { - return !ignored.filter(function(glob) { - return minimatch(file, glob, { matchBase: true }); - }).length; - }); - - return results; -}; - -fileset.Fileset = function Fileset(pattern, options, cb) { - if (typeof options === 'function') cb = options, options = {}; - if (!options) options = {}; - - Glob.call(this, pattern, options); - - if (typeof cb === 'function') { - this.on('error', cb); - this.on('end', function(matches) { cb(null, matches); }); - } -}; - -util.inherits(fileset.Fileset, Glob); diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/LICENSE b/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/LICENSE deleted file mode 100644 index 19129e315..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/README.md b/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/README.md deleted file mode 100644 index d458bc2e0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/README.md +++ /dev/null @@ -1,216 +0,0 @@ -# minimatch - -A minimal matching utility. - -[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.png)](http://travis-ci.org/isaacs/minimatch) - - -This is the matching library used internally by npm. - -It works by converting glob expressions into JavaScript `RegExp` -objects. - -## Usage - -```javascript -var minimatch = require("minimatch") - -minimatch("bar.foo", "*.foo") // true! -minimatch("bar.foo", "*.bar") // false! -minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy! -``` - -## Features - -Supports these glob features: - -* Brace Expansion -* Extended glob matching -* "Globstar" `**` matching - -See: - -* `man sh` -* `man bash` -* `man 3 fnmatch` -* `man 5 gitignore` - -## Minimatch Class - -Create a minimatch object by instanting the `minimatch.Minimatch` class. - -```javascript -var Minimatch = require("minimatch").Minimatch -var mm = new Minimatch(pattern, options) -``` - -### Properties - -* `pattern` The original pattern the minimatch object represents. -* `options` The options supplied to the constructor. -* `set` A 2-dimensional array of regexp or string expressions. - Each row in the - array corresponds to a brace-expanded pattern. Each item in the row - corresponds to a single path-part. For example, the pattern - `{a,b/c}/d` would expand to a set of patterns like: - - [ [ a, d ] - , [ b, c, d ] ] - - If a portion of the pattern doesn't have any "magic" in it - (that is, it's something like `"foo"` rather than `fo*o?`), then it - will be left as a string rather than converted to a regular - expression. - -* `regexp` Created by the `makeRe` method. A single regular expression - expressing the entire pattern. This is useful in cases where you wish - to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. -* `negate` True if the pattern is negated. -* `comment` True if the pattern is a comment. -* `empty` True if the pattern is `""`. - -### Methods - -* `makeRe` Generate the `regexp` member if necessary, and return it. - Will return `false` if the pattern is invalid. -* `match(fname)` Return true if the filename matches the pattern, or - false otherwise. -* `matchOne(fileArray, patternArray, partial)` Take a `/`-split - filename, and match it against a single row in the `regExpSet`. This - method is mainly for internal use, but is exposed so that it can be - used by a glob-walker that needs to avoid excessive filesystem calls. - -All other methods are internal, and will be called as necessary. - -## Functions - -The top-level exported function has a `cache` property, which is an LRU -cache set to store 100 items. So, calling these methods repeatedly -with the same pattern and options will use the same Minimatch object, -saving the cost of parsing it multiple times. - -### minimatch(path, pattern, options) - -Main export. Tests a path against the pattern using the options. - -```javascript -var isJS = minimatch(file, "*.js", { matchBase: true }) -``` - -### minimatch.filter(pattern, options) - -Returns a function that tests its -supplied argument, suitable for use with `Array.filter`. Example: - -```javascript -var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) -``` - -### minimatch.match(list, pattern, options) - -Match against the list of -files, in the style of fnmatch or glob. If nothing is matched, and -options.nonull is set, then return a list containing the pattern itself. - -```javascript -var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) -``` - -### minimatch.makeRe(pattern, options) - -Make a regular expression object from the pattern. - -## Options - -All options are `false` by default. - -### debug - -Dump a ton of stuff to stderr. - -### nobrace - -Do not expand `{a,b}` and `{1..3}` brace sets. - -### noglobstar - -Disable `**` matching against multiple folder names. - -### dot - -Allow patterns to match filenames starting with a period, even if -the pattern does not explicitly have a period in that spot. - -Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` -is set. - -### noext - -Disable "extglob" style patterns like `+(a|b)`. - -### nocase - -Perform a case-insensitive match. - -### nonull - -When a match is not found by `minimatch.match`, return a list containing -the pattern itself if this option is set. When not set, an empty list -is returned if there are no matches. - -### matchBase - -If set, then patterns without slashes will be matched -against the basename of the path if it contains slashes. For example, -`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. - -### nocomment - -Suppress the behavior of treating `#` at the start of a pattern as a -comment. - -### nonegate - -Suppress the behavior of treating a leading `!` character as negation. - -### flipNegate - -Returns from negate expressions the same as if they were not negated. -(Ie, true on a hit, false on a miss.) - - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between minimatch and other -implementations, and are intentional. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. - -If an escaped pattern has no matches, and the `nonull` flag is set, -then minimatch.match returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/browser.js b/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/browser.js deleted file mode 100644 index 7d0515920..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/browser.js +++ /dev/null @@ -1,1159 +0,0 @@ -(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.minimatch = 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 any number of characters -var star = qmark + '*?' - -// ** when dots are allowed. Anything goes, except .. and . -// not (^ or / followed by one or two dots followed by $ or /), -// followed by anything, any number of times. -var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' - -// not a ^ or / followed by a dot, -// followed by anything, any number of times. -var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' - -// characters that need to be escaped in RegExp. -var reSpecials = charSet('().*{}+?[]^$\\!') - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split('').reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - a = a || {} - b = b || {} - var t = {} - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch - - var orig = minimatch - - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch -} - -function minimatch (p, pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - return false - } - - // "" only matches "" - if (pattern.trim() === '') return p === '' - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options) - } - - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - pattern = pattern.trim() - - // windows support: need to use /, not \ - if (path.sep !== '/') { - pattern = pattern.split(path.sep).join('/') - } - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.debug = function () {} - -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return - - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) this.debug = console.error - - this.debug(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - this.debug(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - this.debug(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return s.indexOf(false) === -1 - }) - - this.debug(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - var negate = false - var options = this.options - var negateOffset = 0 - - if (options.nonegate) return - - for (var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === '!' - ; i++) { - negate = !negate - negateOffset++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return braceExpand(pattern, options) -} - -Minimatch.prototype.braceExpand = braceExpand - -function braceExpand (pattern, options) { - if (!options) { - if (this instanceof Minimatch) { - options = this.options - } else { - options = {} - } - } - - pattern = typeof pattern === 'undefined' - ? this.pattern : pattern - - if (typeof pattern === 'undefined') { - throw new Error('undefined pattern') - } - - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - - return expand(pattern) -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - var options = this.options - - // shortcuts - if (!options.noglobstar && pattern === '**') return GLOBSTAR - if (pattern === '') return '' - - var re = '' - var hasMagic = !!options.nocase - var escaping = false - // ? => one single character - var patternListStack = [] - var negativeLists = [] - var plType - var stateChar - var inClass = false - var reClassStart = -1 - var classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - var patternStart = pattern.charAt(0) === '.' ? '' // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' - : '(?!\\.)' - var self = this - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case '*': - re += star - hasMagic = true - break - case '?': - re += qmark - hasMagic = true - break - default: - re += '\\' + stateChar - break - } - self.debug('clearStateChar %j %j', stateChar, re) - stateChar = false - } - } - - for (var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i++) { - this.debug('%s\t%s %s %j', pattern, i, re, c) - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += '\\' + c - escaping = false - continue - } - - switch (c) { - case '/': - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - - case '\\': - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case '?': - case '*': - case '+': - case '@': - case '!': - this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class') - if (c === '!' && i === classStart + 1) c = '^' - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar) - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case '(': - if (inClass) { - re += '(' - continue - } - - if (!stateChar) { - re += '\\(' - continue - } - - plType = stateChar - patternListStack.push({ - type: plType, - start: i - 1, - reStart: re.length - }) - // negation is (?:(?!js)[^/]*) - re += stateChar === '!' ? '(?:(?!(?:' : '(?:' - this.debug('plType %j %j', stateChar, re) - stateChar = false - continue - - case ')': - if (inClass || !patternListStack.length) { - re += '\\)' - continue - } - - clearStateChar() - hasMagic = true - re += ')' - var pl = patternListStack.pop() - plType = pl.type - // negation is (?:(?!js)[^/]*) - // The others are (?:) - switch (plType) { - case '!': - negativeLists.push(pl) - re += ')[^/]*?)' - pl.reEnd = re.length - break - case '?': - case '+': - case '*': - re += plType - break - case '@': break // the default anyway - } - continue - - case '|': - if (inClass || !patternListStack.length || escaping) { - re += '\\|' - escaping = false - continue - } - - clearStateChar() - re += '|' - continue - - // these are mostly the same in regexp and glob - case '[': - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += '\\' + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case ']': - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += '\\' + c - escaping = false - continue - } - - // handle the case where we left a class open. - // "[z-a]" is valid, equivalent to "\[z-a\]" - if (inClass) { - // split where the last [ was, make sure we don't have - // an invalid re. if so, re-walk the contents of the - // would-be class to re-translate any characters that - // were passed through as-is - // TODO: It would probably be faster to determine this - // without a try/catch and a new RegExp, but it's tricky - // to do safely. For now, this is safe and works. - var cs = pattern.substring(classStart + 1, i) - try { - RegExp('[' + cs + ']') - } catch (er) { - // not a valid class! - var sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' - hasMagic = hasMagic || sp[1] - inClass = false - continue - } - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === '^' && inClass)) { - re += '\\' - } - - re += c - - } // switch - } // for - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - cs = pattern.substr(classStart + 1) - sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + 3) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = '\\' - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + '|' - }) - - this.debug('tail=%j\n %s', tail, tail) - var t = pl.type === '*' ? star - : pl.type === '?' ? qmark - : '\\' + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) + t + '\\(' + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += '\\\\' - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case '.': - case '[': - case '(': addPatternStart = true - } - - // Hack to work around lack of negative lookbehind in JS - // A pattern like: *.!(x).!(y|z) needs to ensure that a name - // like 'a.xyz.yz' doesn't match. So, the first negative - // lookahead, has to look ALL the way ahead, to the end of - // the pattern. - for (var n = negativeLists.length - 1; n > -1; n--) { - var nl = negativeLists[n] - - var nlBefore = re.slice(0, nl.reStart) - var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) - var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) - var nlAfter = re.slice(nl.reEnd) - - nlLast += nlAfter - - // Handle nested stuff like *(*.js|!(*.json)), where open parens - // mean that we should *not* include the ) in the bit that is considered - // "after" the negated section. - var openParensBefore = nlBefore.split('(').length - 1 - var cleanAfter = nlAfter - for (i = 0; i < openParensBefore; i++) { - cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') - } - nlAfter = cleanAfter - - var dollar = '' - if (nlAfter === '' && isSub !== SUBPARSE) { - dollar = '$' - } - var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast - re = newRe - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== '' && hasMagic) { - re = '(?=.)' + re - } - - if (addPatternStart) { - re = patternStart + re - } - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [re, hasMagic] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? 'i' : '' - var regExp = new RegExp('^' + re + '$', flags) - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) { - this.regexp = false - return this.regexp - } - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - var flags = options.nocase ? 'i' : '' - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === 'string') ? regExpEscape(p) - : p._src - }).join('\\\/') - }).join('|') - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = '^(?:' + re + ')$' - - // can match anything, as long as it's not this. - if (this.negate) re = '^(?!' + re + ').*$' - - try { - this.regexp = new RegExp(re, flags) - } catch (ex) { - this.regexp = false - } - return this.regexp -} - -minimatch.match = function (list, pattern, options) { - options = options || {} - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (mm.options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = match -function match (f, partial) { - this.debug('match', f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === '' - - if (f === '/' && partial) return true - - var options = this.options - - // windows: need to use /, not \ - if (path.sep !== '/') { - f = f.split(path.sep).join('/') - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - this.debug(this.pattern, 'split', f) - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - this.debug(this.pattern, 'set', set) - - // Find the basename of the path by looking for the last non-empty segment - var filename - var i - for (i = f.length - 1; i >= 0; i--) { - filename = f[i] - if (filename) break - } - - for (i = 0; i < set.length; i++) { - var pattern = set[i] - var file = f - if (options.matchBase && pattern.length === 1) { - file = [filename] - } - var hit = this.matchOne(file, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - this.debug('matchOne', - { 'this': this, file: file, pattern: pattern }) - - this.debug('matchOne', file.length, pattern.length) - - for (var fi = 0, - pi = 0, - fl = file.length, - pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi++, pi++) { - this.debug('matchOne loop') - var p = pattern[pi] - var f = file[fi] - - this.debug(pattern, p, f) - - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false - - if (p === GLOBSTAR) { - this.debug('GLOBSTAR', [pattern, p, f]) - - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - var pr = pi + 1 - if (pr === pl) { - this.debug('** at the end') - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for (; fi < fl; fi++) { - if (file[fi] === '.' || file[fi] === '..' || - (!options.dot && file[fi].charAt(0) === '.')) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - while (fr < fl) { - var swallowee = file[fr] - - this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee) - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === '.' || swallowee === '..' || - (!options.dot && swallowee.charAt(0) === '.')) { - this.debug('dot detected!', file, fr, pattern, pr) - break - } - - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue') - fr++ - } - } - - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - this.debug('\n>>> no match, partial?', file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === 'string') { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - this.debug('string match', p, f, hit) - } else { - hit = f.match(p) - this.debug('pattern match', p, f, hit) - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') - return emptyFileEnd - } - - // should be unreachable. - throw new Error('wtf?') -} - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, '$1') -} - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') -} - -},{"brace-expansion":2,"path":undefined}],2:[function(require,module,exports){ -var concatMap = require('concat-map'); -var balanced = require('balanced-match'); - -module.exports = expandTop; - -var escSlash = '\0SLASH'+Math.random()+'\0'; -var escOpen = '\0OPEN'+Math.random()+'\0'; -var escClose = '\0CLOSE'+Math.random()+'\0'; -var escComma = '\0COMMA'+Math.random()+'\0'; -var escPeriod = '\0PERIOD'+Math.random()+'\0'; - -function numeric(str) { - return parseInt(str, 10) == str - ? parseInt(str, 10) - : str.charCodeAt(0); -} - -function escapeBraces(str) { - return str.split('\\\\').join(escSlash) - .split('\\{').join(escOpen) - .split('\\}').join(escClose) - .split('\\,').join(escComma) - .split('\\.').join(escPeriod); -} - -function unescapeBraces(str) { - return str.split(escSlash).join('\\') - .split(escOpen).join('{') - .split(escClose).join('}') - .split(escComma).join(',') - .split(escPeriod).join('.'); -} - - -// Basically just str.split(","), but handling cases -// where we have nested braced sections, which should be -// treated as individual members, like {a,{b,c},d} -function parseCommaParts(str) { - if (!str) - return ['']; - - var parts = []; - var m = balanced('{', '}', str); - - if (!m) - return str.split(','); - - var pre = m.pre; - var body = m.body; - var post = m.post; - var p = pre.split(','); - - p[p.length-1] += '{' + body + '}'; - var postParts = parseCommaParts(post); - if (post.length) { - p[p.length-1] += postParts.shift(); - p.push.apply(p, postParts); - } - - parts.push.apply(parts, p); - - return parts; -} - -function expandTop(str) { - if (!str) - return []; - - var expansions = expand(escapeBraces(str)); - return expansions.filter(identity).map(unescapeBraces); -} - -function identity(e) { - return e; -} - -function embrace(str) { - return '{' + str + '}'; -} -function isPadded(el) { - return /^-?0\d/.test(el); -} - -function lte(i, y) { - return i <= y; -} -function gte(i, y) { - return i >= y; -} - -function expand(str) { - var expansions = []; - - var m = balanced('{', '}', str); - if (!m || /\$$/.test(m.pre)) return [str]; - - var isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body); - var isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body); - var isSequence = isNumericSequence || isAlphaSequence; - var isOptions = /^(.*,)+(.+)?$/.test(m.body); - if (!isSequence && !isOptions) { - // {a},b} - if (m.post.match(/,.*}/)) { - str = m.pre + '{' + m.body + escClose + m.post; - return expand(str); - } - return [str]; - } - - var n; - if (isSequence) { - n = m.body.split(/\.\./); - } else { - n = parseCommaParts(m.body); - if (n.length === 1) { - // x{{a,b}}y ==> x{a}y x{b}y - n = expand(n[0]).map(embrace); - if (n.length === 1) { - var post = m.post.length - ? expand(m.post) - : ['']; - return post.map(function(p) { - return m.pre + n[0] + p; - }); - } - } - } - - // at this point, n is the parts, and we know it's not a comma set - // with a single entry. - - // no need to expand pre, since it is guaranteed to be free of brace-sets - var pre = m.pre; - var post = m.post.length - ? expand(m.post) - : ['']; - - var N; - - if (isSequence) { - var x = numeric(n[0]); - var y = numeric(n[1]); - var width = Math.max(n[0].length, n[1].length) - var incr = n.length == 3 - ? Math.abs(numeric(n[2])) - : 1; - var test = lte; - var reverse = y < x; - if (reverse) { - incr *= -1; - test = gte; - } - var pad = n.some(isPadded); - - N = []; - - for (var i = x; test(i, y); i += incr) { - var c; - if (isAlphaSequence) { - c = String.fromCharCode(i); - if (c === '\\') - c = ''; - } else { - c = String(i); - if (pad) { - var need = width - c.length; - if (need > 0) { - var z = new Array(need + 1).join('0'); - if (i < 0) - c = '-' + z + c.slice(1); - else - c = z + c; - } - } - } - N.push(c); - } - } else { - N = concatMap(n, function(el) { return expand(el) }); - } - - for (var j = 0; j < N.length; j++) { - for (var k = 0; k < post.length; k++) { - expansions.push([pre, N[j], post[k]].join('')) - } - } - - return expansions; -} - - -},{"balanced-match":3,"concat-map":4}],3:[function(require,module,exports){ -module.exports = balanced; -function balanced(a, b, str) { - var bal = 0; - var m = {}; - var ended = false; - - for (var i = 0; i < str.length; i++) { - if (a == str.substr(i, a.length)) { - if (!('start' in m)) m.start = i; - bal++; - } - else if (b == str.substr(i, b.length) && 'start' in m) { - ended = true; - bal--; - if (!bal) { - m.end = i; - m.pre = str.substr(0, m.start); - m.body = (m.end - m.start > 1) - ? str.substring(m.start + a.length, m.end) - : ''; - m.post = str.slice(m.end + b.length); - return m; - } - } - } - - // if we opened more than we closed, find the one we closed - if (bal && ended) { - var start = m.start + a.length; - m = balanced(a, b, str.substr(start)); - if (m) { - m.start += start; - m.end += start; - m.pre = str.slice(0, start) + m.pre; - } - return m; - } -} - -},{}],4:[function(require,module,exports){ -module.exports = function (xs, fn) { - var res = []; - for (var i = 0; i < xs.length; i++) { - var x = fn(xs[i], i); - if (Array.isArray(x)) res.push.apply(res, x); - else res.push(x); - } - return res; -}; - -},{}]},{},[1])(1) -}); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/minimatch.js b/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/minimatch.js deleted file mode 100644 index ec4c05c57..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/minimatch.js +++ /dev/null @@ -1,912 +0,0 @@ -module.exports = minimatch -minimatch.Minimatch = Minimatch - -var path = { sep: '/' } -try { - path = require('path') -} catch (er) {} - -var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} -var expand = require('brace-expansion') - -// any single thing other than / -// don't need to escape / when using new RegExp() -var qmark = '[^/]' - -// * => any number of characters -var star = qmark + '*?' - -// ** when dots are allowed. Anything goes, except .. and . -// not (^ or / followed by one or two dots followed by $ or /), -// followed by anything, any number of times. -var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' - -// not a ^ or / followed by a dot, -// followed by anything, any number of times. -var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' - -// characters that need to be escaped in RegExp. -var reSpecials = charSet('().*{}+?[]^$\\!') - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split('').reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - a = a || {} - b = b || {} - var t = {} - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch - - var orig = minimatch - - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch -} - -function minimatch (p, pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - return false - } - - // "" only matches "" - if (pattern.trim() === '') return p === '' - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options) - } - - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - pattern = pattern.trim() - - // windows support: need to use /, not \ - if (path.sep !== '/') { - pattern = pattern.split(path.sep).join('/') - } - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.debug = function () {} - -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return - - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) this.debug = console.error - - this.debug(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - this.debug(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - this.debug(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return s.indexOf(false) === -1 - }) - - this.debug(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - var negate = false - var options = this.options - var negateOffset = 0 - - if (options.nonegate) return - - for (var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === '!' - ; i++) { - negate = !negate - negateOffset++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return braceExpand(pattern, options) -} - -Minimatch.prototype.braceExpand = braceExpand - -function braceExpand (pattern, options) { - if (!options) { - if (this instanceof Minimatch) { - options = this.options - } else { - options = {} - } - } - - pattern = typeof pattern === 'undefined' - ? this.pattern : pattern - - if (typeof pattern === 'undefined') { - throw new Error('undefined pattern') - } - - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - - return expand(pattern) -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - var options = this.options - - // shortcuts - if (!options.noglobstar && pattern === '**') return GLOBSTAR - if (pattern === '') return '' - - var re = '' - var hasMagic = !!options.nocase - var escaping = false - // ? => one single character - var patternListStack = [] - var negativeLists = [] - var plType - var stateChar - var inClass = false - var reClassStart = -1 - var classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - var patternStart = pattern.charAt(0) === '.' ? '' // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' - : '(?!\\.)' - var self = this - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case '*': - re += star - hasMagic = true - break - case '?': - re += qmark - hasMagic = true - break - default: - re += '\\' + stateChar - break - } - self.debug('clearStateChar %j %j', stateChar, re) - stateChar = false - } - } - - for (var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i++) { - this.debug('%s\t%s %s %j', pattern, i, re, c) - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += '\\' + c - escaping = false - continue - } - - switch (c) { - case '/': - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - - case '\\': - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case '?': - case '*': - case '+': - case '@': - case '!': - this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class') - if (c === '!' && i === classStart + 1) c = '^' - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar) - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case '(': - if (inClass) { - re += '(' - continue - } - - if (!stateChar) { - re += '\\(' - continue - } - - plType = stateChar - patternListStack.push({ - type: plType, - start: i - 1, - reStart: re.length - }) - // negation is (?:(?!js)[^/]*) - re += stateChar === '!' ? '(?:(?!(?:' : '(?:' - this.debug('plType %j %j', stateChar, re) - stateChar = false - continue - - case ')': - if (inClass || !patternListStack.length) { - re += '\\)' - continue - } - - clearStateChar() - hasMagic = true - re += ')' - var pl = patternListStack.pop() - plType = pl.type - // negation is (?:(?!js)[^/]*) - // The others are (?:) - switch (plType) { - case '!': - negativeLists.push(pl) - re += ')[^/]*?)' - pl.reEnd = re.length - break - case '?': - case '+': - case '*': - re += plType - break - case '@': break // the default anyway - } - continue - - case '|': - if (inClass || !patternListStack.length || escaping) { - re += '\\|' - escaping = false - continue - } - - clearStateChar() - re += '|' - continue - - // these are mostly the same in regexp and glob - case '[': - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += '\\' + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case ']': - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += '\\' + c - escaping = false - continue - } - - // handle the case where we left a class open. - // "[z-a]" is valid, equivalent to "\[z-a\]" - if (inClass) { - // split where the last [ was, make sure we don't have - // an invalid re. if so, re-walk the contents of the - // would-be class to re-translate any characters that - // were passed through as-is - // TODO: It would probably be faster to determine this - // without a try/catch and a new RegExp, but it's tricky - // to do safely. For now, this is safe and works. - var cs = pattern.substring(classStart + 1, i) - try { - RegExp('[' + cs + ']') - } catch (er) { - // not a valid class! - var sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' - hasMagic = hasMagic || sp[1] - inClass = false - continue - } - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === '^' && inClass)) { - re += '\\' - } - - re += c - - } // switch - } // for - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - cs = pattern.substr(classStart + 1) - sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + 3) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2})*)(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = '\\' - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + '|' - }) - - this.debug('tail=%j\n %s', tail, tail) - var t = pl.type === '*' ? star - : pl.type === '?' ? qmark - : '\\' + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) + t + '\\(' + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += '\\\\' - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case '.': - case '[': - case '(': addPatternStart = true - } - - // Hack to work around lack of negative lookbehind in JS - // A pattern like: *.!(x).!(y|z) needs to ensure that a name - // like 'a.xyz.yz' doesn't match. So, the first negative - // lookahead, has to look ALL the way ahead, to the end of - // the pattern. - for (var n = negativeLists.length - 1; n > -1; n--) { - var nl = negativeLists[n] - - var nlBefore = re.slice(0, nl.reStart) - var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) - var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) - var nlAfter = re.slice(nl.reEnd) - - nlLast += nlAfter - - // Handle nested stuff like *(*.js|!(*.json)), where open parens - // mean that we should *not* include the ) in the bit that is considered - // "after" the negated section. - var openParensBefore = nlBefore.split('(').length - 1 - var cleanAfter = nlAfter - for (i = 0; i < openParensBefore; i++) { - cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') - } - nlAfter = cleanAfter - - var dollar = '' - if (nlAfter === '' && isSub !== SUBPARSE) { - dollar = '$' - } - var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast - re = newRe - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== '' && hasMagic) { - re = '(?=.)' + re - } - - if (addPatternStart) { - re = patternStart + re - } - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [re, hasMagic] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? 'i' : '' - var regExp = new RegExp('^' + re + '$', flags) - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) { - this.regexp = false - return this.regexp - } - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - var flags = options.nocase ? 'i' : '' - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === 'string') ? regExpEscape(p) - : p._src - }).join('\\\/') - }).join('|') - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = '^(?:' + re + ')$' - - // can match anything, as long as it's not this. - if (this.negate) re = '^(?!' + re + ').*$' - - try { - this.regexp = new RegExp(re, flags) - } catch (ex) { - this.regexp = false - } - return this.regexp -} - -minimatch.match = function (list, pattern, options) { - options = options || {} - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (mm.options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = match -function match (f, partial) { - this.debug('match', f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === '' - - if (f === '/' && partial) return true - - var options = this.options - - // windows: need to use /, not \ - if (path.sep !== '/') { - f = f.split(path.sep).join('/') - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - this.debug(this.pattern, 'split', f) - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - this.debug(this.pattern, 'set', set) - - // Find the basename of the path by looking for the last non-empty segment - var filename - var i - for (i = f.length - 1; i >= 0; i--) { - filename = f[i] - if (filename) break - } - - for (i = 0; i < set.length; i++) { - var pattern = set[i] - var file = f - if (options.matchBase && pattern.length === 1) { - file = [filename] - } - var hit = this.matchOne(file, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - this.debug('matchOne', - { 'this': this, file: file, pattern: pattern }) - - this.debug('matchOne', file.length, pattern.length) - - for (var fi = 0, - pi = 0, - fl = file.length, - pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi++, pi++) { - this.debug('matchOne loop') - var p = pattern[pi] - var f = file[fi] - - this.debug(pattern, p, f) - - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false - - if (p === GLOBSTAR) { - this.debug('GLOBSTAR', [pattern, p, f]) - - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - var pr = pi + 1 - if (pr === pl) { - this.debug('** at the end') - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for (; fi < fl; fi++) { - if (file[fi] === '.' || file[fi] === '..' || - (!options.dot && file[fi].charAt(0) === '.')) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - while (fr < fl) { - var swallowee = file[fr] - - this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee) - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === '.' || swallowee === '..' || - (!options.dot && swallowee.charAt(0) === '.')) { - this.debug('dot detected!', file, fr, pattern, pr) - break - } - - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue') - fr++ - } - } - - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - this.debug('\n>>> no match, partial?', file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === 'string') { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - this.debug('string match', p, f, hit) - } else { - hit = f.match(p) - this.debug('pattern match', p, f, hit) - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') - return emptyFileEnd - } - - // should be unreachable. - throw new Error('wtf?') -} - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, '$1') -} - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') -} diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/package.json b/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/package.json deleted file mode 100644 index 6669692ae..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/node_modules/minimatch/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "minimatch@2.x", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/fileset" - ] - ], - "_from": "minimatch@>=2.0.0 <3.0.0", - "_id": "minimatch@2.0.10", - "_inCache": true, - "_installable": true, - "_location": "/fileset/minimatch", - "_nodeVersion": "2.2.1", - "_npmUser": { - "email": "isaacs@npmjs.com", - "name": "isaacs" - }, - "_npmVersion": "3.1.0", - "_phantomChildren": {}, - "_requested": { - "name": "minimatch", - "raw": "minimatch@2.x", - "rawSpec": "2.x", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/fileset" - ], - "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", - "_shasum": "8d087c39c6b38c001b97fca7ce6d0e1e80afbac7", - "_shrinkwrap": null, - "_spec": "minimatch@2.x", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/fileset", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter", - "url": "http://blog.izs.me" - }, - "bugs": { - "url": "https://github.com/isaacs/minimatch/issues" - }, - "dependencies": { - "brace-expansion": "^1.0.0" - }, - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", - "description": "a glob matcher in javascript", - "devDependencies": { - "browserify": "^9.0.3", - "standard": "^3.7.2", - "tap": "^1.2.0" - }, - "directories": {}, - "dist": { - "shasum": "8d087c39c6b38c001b97fca7ce6d0e1e80afbac7", - "tarball": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz" - }, - "engines": { - "node": "*" - }, - "files": [ - "minimatch.js", - "browser.js" - ], - "gitHead": "6afb85f0c324b321f76a38df81891e562693e257", - "homepage": "https://github.com/isaacs/minimatch#readme", - "license": "ISC", - "main": "minimatch.js", - "maintainers": [ - { - "email": "i@izs.me", - "name": "isaacs" - } - ], - "name": "minimatch", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "scripts": { - "posttest": "standard minimatch.js test/*.js", - "prepublish": "browserify -o browser.js -e minimatch.js -s minimatch --bare", - "test": "tap test/*.js" - }, - "version": "2.0.10" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/package.json b/fundamentals/bug-challenge-es6/node_modules/fileset/package.json deleted file mode 100644 index 3d2e8e551..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "_args": [ - [ - "fileset@0.2.x", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api" - ] - ], - "_from": "fileset@>=0.2.0 <0.3.0", - "_id": "fileset@0.2.1", - "_inCache": true, - "_installable": true, - "_location": "/fileset", - "_nodeVersion": "0.12.4", - "_npmUser": { - "email": "daniel.mickael@gmail.com", - "name": "mklabs" - }, - "_npmVersion": "2.10.1", - "_phantomChildren": { - "brace-expansion": "1.1.6" - }, - "_requested": { - "name": "fileset", - "raw": "fileset@0.2.x", - "rawSpec": "0.2.x", - "scope": null, - "spec": ">=0.2.0 <0.3.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul-api" - ], - "_resolved": "https://registry.npmjs.org/fileset/-/fileset-0.2.1.tgz", - "_shasum": "588ef8973c6623b2a76df465105696b96aac8067", - "_shrinkwrap": null, - "_spec": "fileset@0.2.x", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api", - "author": { - "name": "mklabs" - }, - "bugs": { - "url": "https://github.com/mklabs/node-fileset/issues" - }, - "dependencies": { - "glob": "5.x", - "minimatch": "2.x" - }, - "description": "Wrapper around miniglob / minimatch combo to allow multiple patterns matching and include-exclude ability", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "588ef8973c6623b2a76df465105696b96aac8067", - "tarball": "https://registry.npmjs.org/fileset/-/fileset-0.2.1.tgz" - }, - "gitHead": "3de76b59cbd8255a191bd9e91041c4fee7538092", - "homepage": "https://github.com/mklabs/node-fileset", - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/mklabs/node-fileset/blob/master/LICENSE-MIT" - } - ], - "main": "./lib/fileset", - "maintainers": [ - { - "email": "daniel.mickael@gmail.com", - "name": "mklabs" - } - ], - "name": "fileset", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/mklabs/node-fileset.git" - }, - "scripts": { - "test": "node tests/test.js && node tests/test-sync.js" - }, - "version": "0.2.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/tests/fixtures/an (odd) filename.js b/fundamentals/bug-challenge-es6/node_modules/fileset/tests/fixtures/an (odd) filename.js deleted file mode 100644 index fbf9f2b34..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/tests/fixtures/an (odd) filename.js +++ /dev/null @@ -1 +0,0 @@ -var odd = true; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/tests/helper.js b/fundamentals/bug-challenge-es6/node_modules/fileset/tests/helper.js deleted file mode 100644 index 73b307588..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/tests/helper.js +++ /dev/null @@ -1,61 +0,0 @@ - -var EventEmitter = require('events').EventEmitter; -var assert = require('assert'); -var tests = {}; - -module.exports = test; -test.run = run; - -// ## Test helpers - -function test(msg, handler) { - tests[msg] = handler; -} - -function run() { - var specs = Object.keys(tests); - var specsRemaining = specs.length; - - specs.forEach(function(spec) { - var handler = tests[spec]; - - // grab the set of asserts for this spec - var shoulds = handler(); - var keys = Object.keys(shoulds); - var remaining = keys.length; - - keys.forEach(function(should) { - var em = new EventEmitter(), - to = setTimeout(function() { - assert.fail('never ended'); - }, 5000); - - em - .on('error', function assertFail(err) { assert.fail(err) }) - .on('end', function assertOk() { - clearTimeout(to); - shoulds[should].status = true; - - // till we get to 0 - if (!(--remaining)) { - console.log([ - '', - '» ' + spec, - keys.map(function(k) { return ' » ' + k; }).join('\n'), - '', - ' Total: ' + keys.length, - ' Failed: ' + keys.map(function(item) { return shoulds[should].status; }).filter(function(status) { return !status; }).length, - '' - ].join('\n')); - - if (!(--specsRemaining)) { - console.log('All done'); - } - - } - }); - - shoulds[should](em); - }); - }); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/tests/test-sync.js b/fundamentals/bug-challenge-es6/node_modules/fileset/tests/test-sync.js deleted file mode 100644 index 9d4f45c39..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/tests/test-sync.js +++ /dev/null @@ -1,37 +0,0 @@ - -var EventEmitter = require('events').EventEmitter; -var fileset = require('../'); -var assert = require('assert'); -var test = require('./helper'); - -// Given a **.md pattern -test('Sync API - Given a **.md pattern', function() { - return { - 'should return the list of matching file in this repo': function(em) { - var results = fileset.sync('*.md', 'node_modules/**/*.md'); - - assert.ok(Array.isArray(results), 'should be an array'); - assert.ok(results.length, 'should return at least one element'); - assert.equal(results.length, 2, 'actually, should return only two'); - - em.emit('end'); - } - } -}); - -test('Sync API - Given a *.md and **.js pattern, and two exclude', function() { - return { - 'should return the list of matching file in this repo': function(em) { - var results = fileset.sync('*.md *.js', 'CHANGELOG.md node_modules/**/*.md node_modules/**/*.js'); - - assert.ok(Array.isArray(results), 'should be an array'); - assert.ok(results.length, 'should return at least one element'); - - assert.equal(results.length, 6, 'actually, should return only six'); - - em.emit('end'); - } - } -}); - -test.run(); diff --git a/fundamentals/bug-challenge-es6/node_modules/fileset/tests/test.js b/fundamentals/bug-challenge-es6/node_modules/fileset/tests/test.js deleted file mode 100644 index fef726b82..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fileset/tests/test.js +++ /dev/null @@ -1,137 +0,0 @@ - -var EventEmitter = require('events').EventEmitter; -var fileset = require('../'); -var assert = require('assert'); -var test = require('./helper'); - -// Given a **.md pattern -test('Given a **.md pattern', function() { - - return { - 'should return the list of matching file in this repo': function(em) { - fileset('*.md', function(err, results) { - if(err) return em.emit('error', err); - assert.ok(Array.isArray(results), 'should be an array'); - assert.ok(results.length, 'should return at least one element'); - assert.equal(results.length, 2, 'actually, should return only two'); - em.emit('end'); - }); - } - } -}); - -test('Say we want the **.js files, but not those in node_modules', function() { - - return { - 'Should recursively walk the dir and return the matching list': function(em) { - fileset('**/*.js', 'node_modules/**', function(err, results) { - if(err) return em.emit('error', err); - assert.ok(Array.isArray(results), 'should be an array'); - assert.equal(results.length, 5); - em.emit('end'); - }); - }, - - 'Should support multiple paths at once': function(em) { - fileset('**/*.js *.md', 'node_modules/**', function(err, results) { - if(err) return em.emit('error', err); - assert.ok(Array.isArray(results), 'should be an array'); - assert.equal(results.length, 7); - - assert.deepEqual(results, [ - 'CHANGELOG.md', - 'README.md', - 'lib/fileset.js', - 'tests/fixtures/an (odd) filename.js', - 'tests/helper.js', - 'tests/test-sync.js', - 'tests/test.js' - ]); - - em.emit('end'); - }); - }, - - 'Should support multiple paths for excludes as well': function(em) { - fileset('**/*.js *.md', 'node_modules/** **.md tests/*.js', function(err, results) { - if(err) return em.emit('error', err); - assert.ok(Array.isArray(results), 'should be an array'); - assert.equal(results.length, 2); - - assert.deepEqual(results, [ - 'lib/fileset.js', - 'tests/fixtures/an (odd) filename.js', - ]); - - em.emit('end'); - }); - } - } -}); - - -test('Testing out emmited events', function() { - - // todos: the tests for match, include, exclude events, but seems like it's ok - return { - 'Should recursively walk the dir and return the matching list': function(em) { - fileset('**/*.js', 'node_modules/**') - .on('error', em.emit.bind(em, 'error')) - .on('end', function(results) { - assert.ok(Array.isArray(results), 'should be an array'); - assert.equal(results.length, 5); - em.emit('end'); - }); - }, - - 'Should support multiple paths at once': function(em) { - fileset('**/*.js *.md', 'node_modules/**') - .on('error', em.emit.bind(em, 'error')) - .on('end', function(results) { - assert.ok(Array.isArray(results), 'should be an array'); - assert.equal(results.length, 7); - - assert.deepEqual(results, [ - 'CHANGELOG.md', - 'README.md', - 'lib/fileset.js', - 'tests/fixtures/an (odd) filename.js', - 'tests/helper.js', - 'tests/test-sync.js', - 'tests/test.js' - ]); - - em.emit('end'); - }); - } - } -}); - - -test('Testing patterns passed as arrays', function() { - - return { - 'Should match files passed as an array with odd filenames': function(em) { - fileset(['lib/*.js', 'tests/fixtures/an (odd) filename.js'], ['node_modules/**']) - .on('error', em.emit.bind(em, 'error')) - .on('end', function(results) { - assert.ok(Array.isArray(results), 'should be an array'); - assert.equal(results.length, 2); - - assert.deepEqual(results, [ - 'lib/fileset.js', - 'tests/fixtures/an (odd) filename.js', - ]); - - em.emit('end'); - }); - } - } - -}); - - - -test.run(); - - diff --git a/fundamentals/bug-challenge-es6/node_modules/fill-range/LICENSE b/fundamentals/bug-challenge-es6/node_modules/fill-range/LICENSE deleted file mode 100755 index fa30c4cb3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fill-range/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/fill-range/README.md b/fundamentals/bug-challenge-es6/node_modules/fill-range/README.md deleted file mode 100755 index c69694a38..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fill-range/README.md +++ /dev/null @@ -1,290 +0,0 @@ -# fill-range [![NPM version](https://badge.fury.io/js/fill-range.svg)](http://badge.fury.io/js/fill-range) [![Build Status](https://travis-ci.org/jonschlinkert/fill-range.svg)](https://travis-ci.org/jonschlinkert/fill-range) - -> Fill in a range of numbers or letters, optionally passing an increment or multiplier to use. - -## Install with [npm](npmjs.org) - -```bash -npm i fill-range --save -``` - - - -- [Usage](#usage) - * [Invalid ranges](#invalid-ranges) - * [Custom function](#custom-function) - * [Special characters](#special-characters) - + [plus](#plus) - + [pipe and tilde](#pipe-and-tilde) - + [angle bracket](#angle-bracket) - + [question mark](#question-mark) -- [Other useful libs](#other-useful-libs) -- [Running tests](#running-tests) -- [Contributing](#contributing) -- [Author](#author) -- [License](#license) - -_(Table of contents generated by [verb])_ - - - -## Usage - -```js -var range = require('fill-range'); - -range('a', 'e'); -//=> ['a', 'b', 'c', 'd', 'e'] -``` - -**Params** - -```js -range(start, stop, step, options, fn); -``` - - - `start`: **{String|Number}** the number or letter to start with - - `end`: **{String|Number}** the number or letter to end with - - `step`: **{String|Number}** optionally pass the step to use. works for letters or numbers. - - `options`: **{Object}**: - + `makeRe`: return a regex-compatible string (still returned as an array for consistency) - + `step`: pass the step on the options as an alternative to passing it as an argument - + `silent`: `true` by default, set to false to throw errors for invalid ranges. - - `fn`: **{Function}** optionally [pass a function](#custom-function) to modify each character - - -**Examples** - -```js -range(1, 3) -//=> ['1', '2', '3'] - -range('1', '3') -//=> ['1', '2', '3'] - -range('0', '-5') -//=> [ '0', '-1', '-2', '-3', '-4', '-5' ] - -range(-9, 9, 3) -//=> [ '-9', '-6', '-3', '0', '3', '6', '9' ]) - -range('-1', '-10', '-2') -//=> [ '-1', '-3', '-5', '-7', '-9' ] - -range('1', '10', '2') -//=> [ '1', '3', '5', '7', '9' ] - -range('a', 'e') -//=> ['a', 'b', 'c', 'd', 'e'] - -range('a', 'e', 2) -//=> ['a', 'c', 'e'] - -range('A', 'E', 2) -//=> ['A', 'C', 'E'] -``` - -### Invalid ranges - -When an invalid range is passed, `null` is returned. - -```js -range('1.1', '2'); -//=> null - -range('a', '2'); -//=> null - -range(1, 10, 'foo'); -//=> null -``` - -If you want errors to be throw, pass `silent: false` on the options: - - -### Custom function - -Optionally pass a custom function as the third or fourth argument: - -```js -range('a', 'e', function (val, isNumber, pad, i) { - if (!isNumber) { - return String.fromCharCode(val) + i; - } - return val; -}); -//=> ['a0', 'b1', 'c2', 'd3', 'e4'] -``` - -### Special characters - -A special character may be passed as the third arg instead of a step increment. These characters can be pretty useful for brace expansion, creating file paths, test fixtures and similar use case. - -```js -range('a', 'z', SPECIAL_CHARACTER_HERE); -``` - -**Supported characters** - - - `+`: repeat the given string `n` times - - `|`: create a regex-ready string, instead of an array - - `>`: join values to single array element - - `?`: randomize the given pattern using [randomatic] - -#### plus - -Character: _(`+`)_ - -Repeat the first argument the number of times passed on the second argument. - -**Examples:** - -```js -range('a', 3, '+'); -//=> ['a', 'a', 'a'] - -range('abc', 2, '+'); -//=> ['abc', 'abc'] -``` - -#### pipe and tilde - -Characters: _(`|` and `~`)_ - -Creates a regex-capable string (either a logical `or` or a character class) from the expanded arguments. - -**Examples:** - -```js -range('a', 'c', '|'); -//=> ['(a|b|c)' - -range('a', 'c', '~'); -//=> ['[a-c]' - -range('a', 'z', '|5'); -//=> ['(a|f|k|p|u|z)' -``` - -**Automatic separator correction** - -To avoid this error: - -> `Range out of order in character class` - -Fill-range detects invalid sequences and uses the correct syntax. For example: - -**invalid** (regex) - -If you pass these: - -```js -range('a', 'z', '~5'); -// which would result in this -//=> ['[a-f-k-p-u-z]'] - -range('10', '20', '~'); -// which would result in this -//=> ['[10-20]'] -``` - -**valid** (regex) - -fill-range corrects them to this: - -```js -range('a', 'z', '~5'); -//=> ['(a|f|k|p|u|z)' - -range('10', '20', '~'); -//=> ['(10-20)' -``` - -#### angle bracket - -Character: _(`>`)_ - -Joins all values in the returned array to a single value. - -**Examples:** - -```js -range('a', 'e', '>'); -//=> ['abcde'] - -range('5', '8', '>'); -//=> ['5678'] - -range('2', '20', '2>'); -//=> ['2468101214161820'] -``` - - -#### question mark - -Character: _(`?`)_ - -Uses [randomatic] to generate randomized alpha, numeric, or alpha-numeric patterns based on the provided arguments. - -**Examples:** - -_(actual results would obviously be randomized)_ - -Generate a 5-character, uppercase, alphabetical string: - -```js -range('A', 5, '?'); -//=> ['NSHAK'] -``` - -Generate a 5-digit random number: - -```js -range('0', 5, '?'); -//=> ['36583'] -``` - -Generate a 10-character alpha-numeric string: - -```js -range('A0', 10, '?'); -//=> ['5YJD60VQNN'] -``` - -See the [randomatic] repo for all available options and or to create issues or feature requests related to randomization. - -## Other useful libs - * [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just use `micromatch.isMatch()` instead of `minimatch()`, or use `micromatch()` instead of `multimatch()`. - * [expand-range](https://github.com/jonschlinkert/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch. - * [braces](https://github.com/jonschlinkert/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification. - * [is-glob](https://github.com/jonschlinkert/is-glob): Returns `true` if the given string looks like a glob pattern. - -## Running tests -Install dev dependencies: - -```bash -npm i -d && npm test -``` - -## Contributing -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/fill-range/issues) - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License -Copyright (c) 2014-2015 Jon Schlinkert -Released under the MIT license - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on April 07, 2015._ - -[randomatic]: https://github.com/jonschlinkert/randomatic -[expand-range]: https://github.com/jonschlinkert/expand-range -[micromatch]: https://github.com/jonschlinkert/micromatch -[braces]: https://github.com/jonschlinkert/braces \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/fill-range/index.js b/fundamentals/bug-challenge-es6/node_modules/fill-range/index.js deleted file mode 100644 index 5657051be..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fill-range/index.js +++ /dev/null @@ -1,408 +0,0 @@ -/*! - * fill-range - * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var isObject = require('isobject'); -var isNumber = require('is-number'); -var randomize = require('randomatic'); -var repeatStr = require('repeat-string'); -var repeat = require('repeat-element'); - -/** - * Expose `fillRange` - */ - -module.exports = fillRange; - -/** - * Return a range of numbers or letters. - * - * @param {String} `a` Start of the range - * @param {String} `b` End of the range - * @param {String} `step` Increment or decrement to use. - * @param {Function} `fn` Custom function to modify each element in the range. - * @return {Array} - */ - -function fillRange(a, b, step, options, fn) { - if (a == null || b == null) { - throw new Error('fill-range expects the first and second args to be strings.'); - } - - if (typeof step === 'function') { - fn = step; options = {}; step = null; - } - - if (typeof options === 'function') { - fn = options; options = {}; - } - - if (isObject(step)) { - options = step; step = ''; - } - - var expand, regex = false, sep = ''; - var opts = options || {}; - - if (typeof opts.silent === 'undefined') { - opts.silent = true; - } - - step = step || opts.step; - - // store a ref to unmodified arg - var origA = a, origB = b; - - b = (b.toString() === '-0') ? 0 : b; - - if (opts.optimize || opts.makeRe) { - step = step ? (step += '~') : step; - expand = true; - regex = true; - sep = '~'; - } - - // handle special step characters - if (typeof step === 'string') { - var match = stepRe().exec(step); - - if (match) { - var i = match.index; - var m = match[0]; - - // repeat string - if (m === '+') { - return repeat(a, b); - - // randomize a, `b` times - } else if (m === '?') { - return [randomize(a, b)]; - - // expand right, no regex reduction - } else if (m === '>') { - step = step.substr(0, i) + step.substr(i + 1); - expand = true; - - // expand to an array, or if valid create a reduced - // string for a regex logic `or` - } else if (m === '|') { - step = step.substr(0, i) + step.substr(i + 1); - expand = true; - regex = true; - sep = m; - - // expand to an array, or if valid create a reduced - // string for a regex range - } else if (m === '~') { - step = step.substr(0, i) + step.substr(i + 1); - expand = true; - regex = true; - sep = m; - } - } else if (!isNumber(step)) { - if (!opts.silent) { - throw new TypeError('fill-range: invalid step.'); - } - return null; - } - } - - if (/[.&*()[\]^%$#@!]/.test(a) || /[.&*()[\]^%$#@!]/.test(b)) { - if (!opts.silent) { - throw new RangeError('fill-range: invalid range arguments.'); - } - return null; - } - - // has neither a letter nor number, or has both letters and numbers - // this needs to be after the step logic - if (!noAlphaNum(a) || !noAlphaNum(b) || hasBoth(a) || hasBoth(b)) { - if (!opts.silent) { - throw new RangeError('fill-range: invalid range arguments.'); - } - return null; - } - - // validate arguments - var isNumA = isNumber(zeros(a)); - var isNumB = isNumber(zeros(b)); - - if ((!isNumA && isNumB) || (isNumA && !isNumB)) { - if (!opts.silent) { - throw new TypeError('fill-range: first range argument is incompatible with second.'); - } - return null; - } - - // by this point both are the same, so we - // can use A to check going forward. - var isNum = isNumA; - var num = formatStep(step); - - // is the range alphabetical? or numeric? - if (isNum) { - // if numeric, coerce to an integer - a = +a; b = +b; - } else { - // otherwise, get the charCode to expand alpha ranges - a = a.charCodeAt(0); - b = b.charCodeAt(0); - } - - // is the pattern descending? - var isDescending = a > b; - - // don't create a character class if the args are < 0 - if (a < 0 || b < 0) { - expand = false; - regex = false; - } - - // detect padding - var padding = isPadded(origA, origB); - var res, pad, arr = []; - var ii = 0; - - // character classes, ranges and logical `or` - if (regex) { - if (shouldExpand(a, b, num, isNum, padding, opts)) { - // make sure the correct separator is used - if (sep === '|' || sep === '~') { - sep = detectSeparator(a, b, num, isNum, isDescending); - } - return wrap([origA, origB], sep, opts); - } - } - - while (isDescending ? (a >= b) : (a <= b)) { - if (padding && isNum) { - pad = padding(a); - } - - // custom function - if (typeof fn === 'function') { - res = fn(a, isNum, pad, ii++); - - // letters - } else if (!isNum) { - if (regex && isInvalidChar(a)) { - res = null; - } else { - res = String.fromCharCode(a); - } - - // numbers - } else { - res = formatPadding(a, pad); - } - - // add result to the array, filtering any nulled values - if (res !== null) arr.push(res); - - // increment or decrement - if (isDescending) { - a -= num; - } else { - a += num; - } - } - - // now that the array is expanded, we need to handle regex - // character classes, ranges or logical `or` that wasn't - // already handled before the loop - if ((regex || expand) && !opts.noexpand) { - // make sure the correct separator is used - if (sep === '|' || sep === '~') { - sep = detectSeparator(a, b, num, isNum, isDescending); - } - if (arr.length === 1 || a < 0 || b < 0) { return arr; } - return wrap(arr, sep, opts); - } - - return arr; -} - -/** - * Wrap the string with the correct regex - * syntax. - */ - -function wrap(arr, sep, opts) { - if (sep === '~') { sep = '-'; } - var str = arr.join(sep); - var pre = opts && opts.regexPrefix; - - // regex logical `or` - if (sep === '|') { - str = pre ? pre + str : str; - str = '(' + str + ')'; - } - - // regex character class - if (sep === '-') { - str = (pre && pre === '^') - ? pre + str - : str; - str = '[' + str + ']'; - } - return [str]; -} - -/** - * Check for invalid characters - */ - -function isCharClass(a, b, step, isNum, isDescending) { - if (isDescending) { return false; } - if (isNum) { return a <= 9 && b <= 9; } - if (a < b) { return step === 1; } - return false; -} - -/** - * Detect the correct separator to use - */ - -function shouldExpand(a, b, num, isNum, padding, opts) { - if (isNum && (a > 9 || b > 9)) { return false; } - return !padding && num === 1 && a < b; -} - -/** - * Detect the correct separator to use - */ - -function detectSeparator(a, b, step, isNum, isDescending) { - var isChar = isCharClass(a, b, step, isNum, isDescending); - if (!isChar) { - return '|'; - } - return '~'; -} - -/** - * Correctly format the step based on type - */ - -function formatStep(step) { - return Math.abs(step >> 0) || 1; -} - -/** - * Format padding, taking leading `-` into account - */ - -function formatPadding(ch, pad) { - var res = pad ? pad + ch : ch; - if (pad && ch.toString().charAt(0) === '-') { - res = '-' + pad + ch.toString().substr(1); - } - return res.toString(); -} - -/** - * Check for invalid characters - */ - -function isInvalidChar(str) { - var ch = toStr(str); - return ch === '\\' - || ch === '[' - || ch === ']' - || ch === '^' - || ch === '(' - || ch === ')' - || ch === '`'; -} - -/** - * Convert to a string from a charCode - */ - -function toStr(ch) { - return String.fromCharCode(ch); -} - - -/** - * Step regex - */ - -function stepRe() { - return /\?|>|\||\+|\~/g; -} - -/** - * Return true if `val` has either a letter - * or a number - */ - -function noAlphaNum(val) { - return /[a-z0-9]/i.test(val); -} - -/** - * Return true if `val` has both a letter and - * a number (invalid) - */ - -function hasBoth(val) { - return /[a-z][0-9]|[0-9][a-z]/i.test(val); -} - -/** - * Normalize zeros for checks - */ - -function zeros(val) { - if (/^-*0+$/.test(val.toString())) { - return '0'; - } - return val; -} - -/** - * Return true if `val` has leading zeros, - * or a similar valid pattern. - */ - -function hasZeros(val) { - return /[^.]\.|^-*0+[0-9]/.test(val); -} - -/** - * If the string is padded, returns a curried function with - * the a cached padding string, or `false` if no padding. - * - * @param {*} `origA` String or number. - * @return {String|Boolean} - */ - -function isPadded(origA, origB) { - if (hasZeros(origA) || hasZeros(origB)) { - var alen = length(origA); - var blen = length(origB); - - var len = alen >= blen - ? alen - : blen; - - return function (a) { - return repeatStr('0', len - length(a)); - }; - } - return false; -} - -/** - * Get the string length of `val` - */ - -function length(val) { - return val.toString().length; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/fill-range/package.json b/fundamentals/bug-challenge-es6/node_modules/fill-range/package.json deleted file mode 100644 index 45910a05e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fill-range/package.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "_args": [ - [ - "fill-range@^2.1.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/expand-range" - ] - ], - "_from": "fill-range@>=2.1.0 <3.0.0", - "_id": "fill-range@2.2.3", - "_inCache": true, - "_installable": true, - "_location": "/fill-range", - "_nodeVersion": "5.0.0", - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.3.6", - "_phantomChildren": {}, - "_requested": { - "name": "fill-range", - "raw": "fill-range@^2.1.0", - "rawSpec": "^2.1.0", - "scope": null, - "spec": ">=2.1.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/expand-range" - ], - "_resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", - "_shasum": "50b77dfd7e469bc7492470963699fe7a8485a723", - "_shrinkwrap": null, - "_spec": "fill-range@^2.1.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/expand-range", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/fill-range/issues" - }, - "dependencies": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^1.1.3", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - }, - "description": "Fill in a range of numbers or letters, optionally passing an increment or multiplier to use.", - "devDependencies": { - "benchmarked": "^0.1.3", - "chalk": "^0.5.1", - "should": "*" - }, - "directories": {}, - "dist": { - "shasum": "50b77dfd7e469bc7492470963699fe7a8485a723", - "tarball": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "6cb50d5c679d9e6d9e8ad97bb2efd63a8c8da610", - "homepage": "https://github.com/jonschlinkert/fill-range", - "keywords": [ - "alpha", - "alphabetical", - "bash", - "brace", - "expand", - "expansion", - "glob", - "match", - "matches", - "matching", - "number", - "numerical", - "range", - "ranges", - "sh" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - }, - { - "email": "elan.shanker+npm@gmail.com", - "name": "es128" - } - ], - "name": "fill-range", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/fill-range.git" - }, - "scripts": { - "test": "mocha" - }, - "verb": { - "related": { - "list": [ - "micromatch", - "expand-range", - "braces", - "is-glob" - ] - } - }, - "version": "2.2.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/find-up/index.js b/fundamentals/bug-challenge-es6/node_modules/find-up/index.js deleted file mode 100644 index 7ff0e2b78..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/find-up/index.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; -var path = require('path'); -var pathExists = require('path-exists'); -var Promise = require('pinkie-promise'); - -function splitPath(x) { - return path.resolve(x || '').split(path.sep); -} - -function join(parts, filename) { - return path.resolve(parts.join(path.sep) + path.sep, filename); -} - -module.exports = function (filename, opts) { - opts = opts || {}; - - var parts = splitPath(opts.cwd); - - return new Promise(function (resolve) { - (function find() { - var fp = join(parts, filename); - - pathExists(fp).then(function (exists) { - if (exists) { - resolve(fp); - } else if (parts.pop()) { - find(); - } else { - resolve(null); - } - }); - })(); - }); -}; - -module.exports.sync = function (filename, opts) { - opts = opts || {}; - - var parts = splitPath(opts.cwd); - var len = parts.length; - - while (len--) { - var fp = join(parts, filename); - - if (pathExists.sync(fp)) { - return fp; - } - - parts.pop(); - } - - return null; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/find-up/license b/fundamentals/bug-challenge-es6/node_modules/find-up/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/find-up/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/find-up/package.json b/fundamentals/bug-challenge-es6/node_modules/find-up/package.json deleted file mode 100644 index 9c380fbe6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/find-up/package.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "_args": [ - [ - "find-up@^1.1.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul" - ] - ], - "_from": "find-up@>=1.1.2 <2.0.0", - "_id": "find-up@1.1.2", - "_inCache": true, - "_installable": true, - "_location": "/find-up", - "_nodeVersion": "4.3.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/find-up-1.1.2.tgz_1457199955637_0.3445317060686648" - }, - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.14.12", - "_phantomChildren": {}, - "_requested": { - "name": "find-up", - "raw": "find-up@^1.1.2", - "rawSpec": "^1.1.2", - "scope": null, - "spec": ">=1.1.2 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-istanbul", - "/read-pkg-up" - ], - "_resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "_shasum": "6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f", - "_shrinkwrap": null, - "_spec": "find-up@^1.1.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/find-up/issues" - }, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "description": "Find a file by walking up parent directories", - "devDependencies": { - "ava": "*", - "tempfile": "^1.1.1", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f", - "tarball": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "f2d7c1ff74fbac82b2cff038e311ef4b075d9184", - "homepage": "https://github.com/sindresorhus/find-up", - "keywords": [ - "find", - "up", - "find-up", - "findup", - "look-up", - "look", - "file", - "search", - "match", - "package", - "resolve", - "parent", - "parents", - "folder", - "directory", - "dir", - "walk", - "walking", - "path" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "find-up", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/find-up.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.1.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/find-up/readme.md b/fundamentals/bug-challenge-es6/node_modules/find-up/readme.md deleted file mode 100644 index 9ea0611c3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/find-up/readme.md +++ /dev/null @@ -1,72 +0,0 @@ -# find-up [![Build Status](https://travis-ci.org/sindresorhus/find-up.svg?branch=master)](https://travis-ci.org/sindresorhus/find-up) - -> Find a file by walking up parent directories - - -## Install - -``` -$ npm install --save find-up -``` - - -## Usage - -``` -/ -└── Users - └── sindresorhus - ├── unicorn.png - └── foo - └── bar - ├── baz - └── example.js -``` - -```js -// example.js -const findUp = require('find-up'); - -findUp('unicorn.png').then(filepath => { - console.log(filepath); - //=> '/Users/sindresorhus/unicorn.png' -}); -``` - - -## API - -### findUp(filename, [options]) - -Returns a promise for the filepath or `null`. - -### findUp.sync(filename, [options]) - -Returns a filepath or `null`. - -#### filename - -Type: `string` - -Filename of the file to find. - -#### options - -##### cwd - -Type: `string` -Default: `process.cwd()` - -Directory to start from. - - -## Related - -- [find-up-cli](https://github.com/sindresorhus/find-up-cli) - CLI for this module -- [pkg-up](https://github.com/sindresorhus/pkg-up) - Find the closest package.json file -- [pkg-dir](https://github.com/sindresorhus/pkg-dir) - Find the root directory of an npm package - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/for-in/LICENSE b/fundamentals/bug-challenge-es6/node_modules/for-in/LICENSE deleted file mode 100644 index 39245ac1c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/for-in/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/for-in/README.md b/fundamentals/bug-challenge-es6/node_modules/for-in/README.md deleted file mode 100644 index 85141657e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/for-in/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# for-in [![NPM version](https://img.shields.io/npm/v/for-in.svg?style=flat)](https://www.npmjs.com/package/for-in) [![NPM downloads](https://img.shields.io/npm/dm/for-in.svg?style=flat)](https://npmjs.org/package/for-in) [![Build Status](https://img.shields.io/travis/jonschlinkert/for-in.svg?style=flat)](https://travis-ci.org/jonschlinkert/for-in) - -> Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install for-in --save -``` - -## Usage - -```js -var forIn = require('for-in'); - -var obj = {a: 'foo', b: 'bar', c: 'baz'}; -var values = []; -var keys = []; - -forIn(obj, function (value, key, o) { - keys.push(key); - values.push(value); -}); - -console.log(keys); -//=> ['a', 'b', 'c']; - -console.log(values); -//=> ['foo', 'bar', 'baz']; -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/for-in/issues/new). - -## Building docs - -Generate readme and API documentation with [verb](https://github.com/verbose/verb): - -```sh -$ npm install verb && npm run docs -``` - -Or, if [verb](https://github.com/verbose/verb) is installed globally: - -```sh -$ verb -``` - -## Running tests - -Install dev dependencies: - -```sh -$ npm install -d && npm test -``` - -## Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). -Released under the [MIT license](https://github.com/jonschlinkert/for-in/blob/master/LICENSE). - -*** - -_This file was generated by [verb](https://github.com/verbose/verb), v, on March 27, 2016._ diff --git a/fundamentals/bug-challenge-es6/node_modules/for-in/index.js b/fundamentals/bug-challenge-es6/node_modules/for-in/index.js deleted file mode 100644 index 965755050..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/for-in/index.js +++ /dev/null @@ -1,16 +0,0 @@ -/*! - * for-in - * - * Copyright (c) 2014-2016, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -module.exports = function forIn(o, fn, thisArg) { - for (var key in o) { - if (fn.call(thisArg, o[key], key, o) === false) { - break; - } - } -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/for-in/package.json b/fundamentals/bug-challenge-es6/node_modules/for-in/package.json deleted file mode 100644 index f9125eaea..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/for-in/package.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "_args": [ - [ - "for-in@^0.1.5", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/for-own" - ] - ], - "_from": "for-in@>=0.1.5 <0.2.0", - "_id": "for-in@0.1.6", - "_inCache": true, - "_installable": true, - "_location": "/for-in", - "_nodeVersion": "6.3.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/for-in-0.1.6.tgz_1473858422358_0.2992941744159907" - }, - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "for-in", - "raw": "for-in@^0.1.5", - "rawSpec": "^0.1.5", - "scope": null, - "spec": ">=0.1.5 <0.2.0", - "type": "range" - }, - "_requiredBy": [ - "/for-own" - ], - "_resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz", - "_shasum": "c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8", - "_shrinkwrap": null, - "_spec": "for-in@^0.1.5", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/for-own", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/for-in/issues" - }, - "dependencies": {}, - "description": "Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js", - "devDependencies": { - "gulp-format-md": "^0.1.7", - "mocha": "^2.4.5", - "should": "^8.3.0" - }, - "directories": {}, - "dist": { - "shasum": "c9f96e89bfad18a545af5ec3ed352a1d9e5b4dc8", - "tarball": "https://registry.npmjs.org/for-in/-/for-in-0.1.6.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "c903a9c0e06747c31bed8634c7c8645c6dbf8da1", - "homepage": "https://github.com/jonschlinkert/for-in", - "keywords": [ - "for-in", - "for-own", - "has", - "has-own", - "hasOwn", - "key", - "keys", - "object", - "own", - "value" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - } - ], - "name": "for-in", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/for-in.git" - }, - "scripts": { - "test": "mocha" - }, - "verb": { - "layout": "default", - "lint": { - "reflinks": true - }, - "plugins": [ - "gulp-format-md" - ], - "reflinks": [ - "verb" - ], - "run": true, - "tasks": [ - "readme" - ], - "toc": false - }, - "version": "0.1.6" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/for-own/LICENSE b/fundamentals/bug-challenge-es6/node_modules/for-own/LICENSE deleted file mode 100644 index fa30c4cb3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/for-own/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/for-own/README.md b/fundamentals/bug-challenge-es6/node_modules/for-own/README.md deleted file mode 100644 index 16831ab7d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/for-own/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# for-own [![NPM version](https://badge.fury.io/js/for-own.svg)](http://badge.fury.io/js/for-own) - -> Iterate over the own and inherited enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. - -## Install -#### Install with [npm](https://www.npmjs.com/): - -```bash -npm i for-own --save -``` - -## Run tests - -```bash -npm test -``` - -## Usage - -```js -var forOwn = require('for-own'); - -var obj = {a: 'foo', b: 'bar', c: 'baz'}; -var values = []; -var keys = []; - -forOwn(obj, function (value, key, o) { - keys.push(key); - values.push(value); -}); - -console.log(keys); -//=> ['a', 'b', 'c']; - -console.log(values); -//=> ['foo', 'bar', 'baz']; -``` - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License -Copyright (c) 2014 Jon Schlinkert, contributors. -Released under the MIT license - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on September 20, 2014._ diff --git a/fundamentals/bug-challenge-es6/node_modules/for-own/index.js b/fundamentals/bug-challenge-es6/node_modules/for-own/index.js deleted file mode 100644 index d07256c7c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/for-own/index.js +++ /dev/null @@ -1,19 +0,0 @@ -/*! - * for-own - * - * Copyright (c) 2014-2016, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var forIn = require('for-in'); -var hasOwn = Object.prototype.hasOwnProperty; - -module.exports = function forOwn(o, fn, thisArg) { - forIn(o, function(val, key) { - if (hasOwn.call(o, key)) { - return fn.call(thisArg, o[key], key, o); - } - }); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/for-own/package.json b/fundamentals/bug-challenge-es6/node_modules/for-own/package.json deleted file mode 100644 index 40297f4e3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/for-own/package.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "_args": [ - [ - "for-own@^0.1.4", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/object.omit" - ] - ], - "_from": "for-own@>=0.1.4 <0.2.0", - "_id": "for-own@0.1.4", - "_inCache": true, - "_installable": true, - "_location": "/for-own", - "_nodeVersion": "5.5.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/for-own-0.1.4.tgz_1459091314670_0.658134751021862" - }, - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.6.0", - "_phantomChildren": {}, - "_requested": { - "name": "for-own", - "raw": "for-own@^0.1.4", - "rawSpec": "^0.1.4", - "scope": null, - "spec": ">=0.1.4 <0.2.0", - "type": "range" - }, - "_requiredBy": [ - "/object.omit" - ], - "_resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz", - "_shasum": "0149b41a39088c7515f51ebe1c1386d45f935072", - "_shrinkwrap": null, - "_spec": "for-own@^0.1.4", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/object.omit", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/for-own/issues" - }, - "dependencies": { - "for-in": "^0.1.5" - }, - "description": "Iterate over the own enumerable properties of an object, and return an object with properties that evaluate to true from the callback. Exit early by returning `false`. JavaScript/Node.js.", - "devDependencies": { - "gulp-format-md": "^0.1.7", - "mocha": "^2.4.5" - }, - "directories": {}, - "dist": { - "shasum": "0149b41a39088c7515f51ebe1c1386d45f935072", - "tarball": "https://registry.npmjs.org/for-own/-/for-own-0.1.4.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "475607dc923dcc399c1bfdbecc0df4b957eb3779", - "homepage": "https://github.com/jonschlinkert/for-own", - "keywords": [ - "for-in", - "for-own", - "has", - "has-own", - "hasOwn", - "key", - "keys", - "object", - "own", - "value" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - } - ], - "name": "for-own", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/for-own.git" - }, - "scripts": { - "test": "mocha" - }, - "verb": { - "layout": "default", - "lint": { - "reflinks": true - }, - "plugins": [ - "gulp-format-md" - ], - "reflinks": [ - "verb" - ], - "run": true, - "tasks": [ - "readme" - ], - "toc": false - }, - "version": "0.1.4" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/forever-agent/LICENSE b/fundamentals/bug-challenge-es6/node_modules/forever-agent/LICENSE deleted file mode 100644 index a4a9aee0c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/forever-agent/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/forever-agent/README.md b/fundamentals/bug-challenge-es6/node_modules/forever-agent/README.md deleted file mode 100644 index 9d5b66343..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/forever-agent/README.md +++ /dev/null @@ -1,4 +0,0 @@ -forever-agent -============= - -HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module. diff --git a/fundamentals/bug-challenge-es6/node_modules/forever-agent/index.js b/fundamentals/bug-challenge-es6/node_modules/forever-agent/index.js deleted file mode 100644 index 416c7abd7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/forever-agent/index.js +++ /dev/null @@ -1,138 +0,0 @@ -module.exports = ForeverAgent -ForeverAgent.SSL = ForeverAgentSSL - -var util = require('util') - , Agent = require('http').Agent - , net = require('net') - , tls = require('tls') - , AgentSSL = require('https').Agent - -function getConnectionName(host, port) { - var name = '' - if (typeof host === 'string') { - name = host + ':' + port - } else { - // For node.js v012.0 and iojs-v1.5.1, host is an object. And any existing localAddress is part of the connection name. - name = host.host + ':' + host.port + ':' + (host.localAddress ? (host.localAddress + ':') : ':') - } - return name -} - -function ForeverAgent(options) { - var self = this - self.options = options || {} - self.requests = {} - self.sockets = {} - self.freeSockets = {} - self.maxSockets = self.options.maxSockets || Agent.defaultMaxSockets - self.minSockets = self.options.minSockets || ForeverAgent.defaultMinSockets - self.on('free', function(socket, host, port) { - var name = getConnectionName(host, port) - - if (self.requests[name] && self.requests[name].length) { - self.requests[name].shift().onSocket(socket) - } else if (self.sockets[name].length < self.minSockets) { - if (!self.freeSockets[name]) self.freeSockets[name] = [] - self.freeSockets[name].push(socket) - - // if an error happens while we don't use the socket anyway, meh, throw the socket away - var onIdleError = function() { - socket.destroy() - } - socket._onIdleError = onIdleError - socket.on('error', onIdleError) - } else { - // If there are no pending requests just destroy the - // socket and it will get removed from the pool. This - // gets us out of timeout issues and allows us to - // default to Connection:keep-alive. - socket.destroy() - } - }) - -} -util.inherits(ForeverAgent, Agent) - -ForeverAgent.defaultMinSockets = 5 - - -ForeverAgent.prototype.createConnection = net.createConnection -ForeverAgent.prototype.addRequestNoreuse = Agent.prototype.addRequest -ForeverAgent.prototype.addRequest = function(req, host, port) { - var name = getConnectionName(host, port) - - if (typeof host !== 'string') { - var options = host - port = options.port - host = options.host - } - - if (this.freeSockets[name] && this.freeSockets[name].length > 0 && !req.useChunkedEncodingByDefault) { - var idleSocket = this.freeSockets[name].pop() - idleSocket.removeListener('error', idleSocket._onIdleError) - delete idleSocket._onIdleError - req._reusedSocket = true - req.onSocket(idleSocket) - } else { - this.addRequestNoreuse(req, host, port) - } -} - -ForeverAgent.prototype.removeSocket = function(s, name, host, port) { - if (this.sockets[name]) { - var index = this.sockets[name].indexOf(s) - if (index !== -1) { - this.sockets[name].splice(index, 1) - } - } else if (this.sockets[name] && this.sockets[name].length === 0) { - // don't leak - delete this.sockets[name] - delete this.requests[name] - } - - if (this.freeSockets[name]) { - var index = this.freeSockets[name].indexOf(s) - if (index !== -1) { - this.freeSockets[name].splice(index, 1) - if (this.freeSockets[name].length === 0) { - delete this.freeSockets[name] - } - } - } - - if (this.requests[name] && this.requests[name].length) { - // If we have pending requests and a socket gets closed a new one - // needs to be created to take over in the pool for the one that closed. - this.createSocket(name, host, port).emit('free') - } -} - -function ForeverAgentSSL (options) { - ForeverAgent.call(this, options) -} -util.inherits(ForeverAgentSSL, ForeverAgent) - -ForeverAgentSSL.prototype.createConnection = createConnectionSSL -ForeverAgentSSL.prototype.addRequestNoreuse = AgentSSL.prototype.addRequest - -function createConnectionSSL (port, host, options) { - if (typeof port === 'object') { - options = port; - } else if (typeof host === 'object') { - options = host; - } else if (typeof options === 'object') { - options = options; - } else { - options = {}; - } - - if (typeof port === 'number') { - options.port = port; - } - - if (typeof host === 'string') { - options.host = host; - } - - return tls.connect(options); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/forever-agent/package.json b/fundamentals/bug-challenge-es6/node_modules/forever-agent/package.json deleted file mode 100644 index 057e526af..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/forever-agent/package.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "_args": [ - [ - "forever-agent@~0.6.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request" - ] - ], - "_from": "forever-agent@>=0.6.1 <0.7.0", - "_id": "forever-agent@0.6.1", - "_inCache": true, - "_installable": true, - "_location": "/forever-agent", - "_npmUser": { - "email": "simeonvelichkov@gmail.com", - "name": "simov" - }, - "_npmVersion": "1.4.28", - "_phantomChildren": {}, - "_requested": { - "name": "forever-agent", - "raw": "forever-agent@~0.6.1", - "rawSpec": "~0.6.1", - "scope": null, - "spec": ">=0.6.1 <0.7.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "_shasum": "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91", - "_shrinkwrap": null, - "_spec": "forever-agent@~0.6.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request", - "author": { - "email": "mikeal.rogers@gmail.com", - "name": "Mikeal Rogers", - "url": "http://www.futurealoof.com" - }, - "bugs": { - "url": "https://github.com/mikeal/forever-agent/issues" - }, - "dependencies": {}, - "description": "HTTP Agent that keeps socket connections alive between keep-alive requests. Formerly part of mikeal/request, now a standalone module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "fbc71f0c41adeb37f96c577ad1ed42d8fdacca91", - "tarball": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" - }, - "engines": { - "node": "*" - }, - "gitHead": "1b3b6163f2b3c2c4122bbfa288c1325c0df9871d", - "homepage": "https://github.com/mikeal/forever-agent", - "license": "Apache-2.0", - "main": "index.js", - "maintainers": [ - { - "email": "mikeal.rogers@gmail.com", - "name": "mikeal" - }, - { - "email": "jnylen@gmail.com", - "name": "nylen" - }, - { - "email": "simeonvelichkov@gmail.com", - "name": "simov" - } - ], - "name": "forever-agent", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "url": "git+https://github.com/mikeal/forever-agent.git" - }, - "scripts": {}, - "version": "0.6.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/form-data/License b/fundamentals/bug-challenge-es6/node_modules/form-data/License deleted file mode 100644 index c7ff12a2f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/form-data/License +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/form-data/README.md b/fundamentals/bug-challenge-es6/node_modules/form-data/README.md deleted file mode 100644 index 642a9d14a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/form-data/README.md +++ /dev/null @@ -1,217 +0,0 @@ -# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data) - -A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. - -The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. - -[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface - -[![Linux Build](https://img.shields.io/travis/form-data/form-data/v2.1.2.svg?label=linux:0.12-6.x)](https://travis-ci.org/form-data/form-data) -[![MacOS Build](https://img.shields.io/travis/form-data/form-data/v2.1.2.svg?label=macos:0.12-6.x)](https://travis-ci.org/form-data/form-data) -[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/form-data/v2.1.2.svg?label=windows:0.12-6.x)](https://ci.appveyor.com/project/alexindigo/form-data) - -[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/v2.1.2.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master) -[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data) -[![bitHound Overall Score](https://www.bithound.io/github/form-data/form-data/badges/score.svg)](https://www.bithound.io/github/form-data/form-data) - -## Install - -``` -npm install --save form-data -``` - -## Usage - -In this example we are constructing a form with 3 fields that contain a string, -a buffer and a file stream. - -``` javascript -var FormData = require('form-data'); -var fs = require('fs'); - -var form = new FormData(); -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_file', fs.createReadStream('/foo/bar.jpg')); -``` - -Also you can use http-response stream: - -``` javascript -var FormData = require('form-data'); -var http = require('http'); - -var form = new FormData(); - -http.request('http://nodejs.org/images/logo.png', function(response) { - form.append('my_field', 'my value'); - form.append('my_buffer', new Buffer(10)); - form.append('my_logo', response); -}); -``` - -Or @mikeal's [request](https://github.com/request/request) stream: - -``` javascript -var FormData = require('form-data'); -var request = require('request'); - -var form = new FormData(); - -form.append('my_field', 'my value'); -form.append('my_buffer', new Buffer(10)); -form.append('my_logo', request('http://nodejs.org/images/logo.png')); -``` - -In order to submit this form to a web application, call ```submit(url, [callback])``` method: - -``` javascript -form.submit('http://example.org/', function(err, res) { - // res – response object (http.IncomingMessage) // - res.resume(); -}); - -``` - -For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. - -### Alternative submission methods - -You can use node's http client interface: - -``` javascript -var http = require('http'); - -var request = http.request({ - method: 'post', - host: 'example.org', - path: '/upload', - headers: form.getHeaders() -}); - -form.pipe(request); - -request.on('response', function(res) { - console.log(res.statusCode); -}); -``` - -Or if you would prefer the `'Content-Length'` header to be set for you: - -``` javascript -form.submit('example.org/upload', function(err, res) { - console.log(res.statusCode); -}); -``` - -To use custom headers and pre-known length in parts: - -``` javascript -var CRLF = '\r\n'; -var form = new FormData(); - -var options = { - header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, - knownLength: 1 -}; - -form.append('my_buffer', buffer, options); - -form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); -}); -``` - -Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: - -``` javascript -someModule.stream(function(err, stdout, stderr) { - if (err) throw err; - - var form = new FormData(); - - form.append('file', stdout, { - filename: 'unicycle.jpg', - contentType: 'image/jpg', - knownLength: 19806 - }); - - form.submit('http://example.com/', function(err, res) { - if (err) throw err; - console.log('Done'); - }); -}); -``` - -For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: - -``` javascript -form.submit({ - host: 'example.com', - path: '/probably.php?extra=params', - auth: 'username:password' -}, function(err, res) { - console.log(res.statusCode); -}); -``` - -In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`: - -``` javascript -form.submit({ - host: 'example.com', - path: '/surelynot.php', - headers: {'x-test-header': 'test-header-value'} -}, function(err, res) { - console.log(res.statusCode); -}); -``` - -### Integration with other libraries - -#### Request - -Form submission using [request](https://github.com/request/request): - -```javascript -var formData = { - my_field: 'my_value', - my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), -}; - -request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) { - if (err) { - return console.error('upload failed:', err); - } - console.log('Upload successful! Server responded with:', body); -}); -``` - -For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads). - -#### node-fetch - -You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch): - -```javascript -var form = new FormData(); - -form.append('a', 1); - -fetch('http://example.com', { method: 'POST', body: form }) - .then(function(res) { - return res.json(); - }).then(function(json) { - console.log(json); - }); -``` - -## Notes - -- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. -- Starting version `2.x` FormData has dropped support for `node@0.10.x`. - -## License - -Form-Data is released under the [MIT](License) license. diff --git a/fundamentals/bug-challenge-es6/node_modules/form-data/lib/browser.js b/fundamentals/bug-challenge-es6/node_modules/form-data/lib/browser.js deleted file mode 100644 index 09e7c70e6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/form-data/lib/browser.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-env browser */ -module.exports = typeof self == 'object' ? self.FormData : window.FormData; diff --git a/fundamentals/bug-challenge-es6/node_modules/form-data/lib/form_data.js b/fundamentals/bug-challenge-es6/node_modules/form-data/lib/form_data.js deleted file mode 100644 index d2cc92491..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/form-data/lib/form_data.js +++ /dev/null @@ -1,440 +0,0 @@ -var CombinedStream = require('combined-stream'); -var util = require('util'); -var path = require('path'); -var http = require('http'); -var https = require('https'); -var parseUrl = require('url').parse; -var fs = require('fs'); -var mime = require('mime-types'); -var asynckit = require('asynckit'); -var populate = require('./populate.js'); - -// Public API -module.exports = FormData; - -// make it a Stream -util.inherits(FormData, CombinedStream); - -/** - * Create readable "multipart/form-data" streams. - * Can be used to submit forms - * and file uploads to other web applications. - * - * @constructor - */ -function FormData() { - if (!(this instanceof FormData)) { - return new FormData(); - } - - this._overheadLength = 0; - this._valueLength = 0; - this._valuesToMeasure = []; - - CombinedStream.call(this); -} - -FormData.LINE_BREAK = '\r\n'; -FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream'; - -FormData.prototype.append = function(field, value, options) { - - options = options || {}; - - // allow filename as single option - if (typeof options == 'string') { - options = {filename: options}; - } - - var append = CombinedStream.prototype.append.bind(this); - - // all that streamy business can't handle numbers - if (typeof value == 'number') { - value = '' + value; - } - - // https://github.com/felixge/node-form-data/issues/38 - if (util.isArray(value)) { - // Please convert your array into string - // the way web server expects it - this._error(new Error('Arrays are not supported.')); - return; - } - - var header = this._multiPartHeader(field, value, options); - var footer = this._multiPartFooter(); - - append(header); - append(value); - append(footer); - - // pass along options.knownLength - this._trackLength(header, value, options); -}; - -FormData.prototype._trackLength = function(header, value, options) { - var valueLength = 0; - - // used w/ getLengthSync(), when length is known. - // e.g. for streaming directly from a remote server, - // w/ a known file a size, and not wanting to wait for - // incoming file to finish to get its size. - if (options.knownLength != null) { - valueLength += +options.knownLength; - } else if (Buffer.isBuffer(value)) { - valueLength = value.length; - } else if (typeof value === 'string') { - valueLength = Buffer.byteLength(value); - } - - this._valueLength += valueLength; - - // @check why add CRLF? does this account for custom/multiple CRLFs? - this._overheadLength += - Buffer.byteLength(header) + - FormData.LINE_BREAK.length; - - // empty or either doesn't have path or not an http response - if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) { - return; - } - - // no need to bother with the length - if (!options.knownLength) { - this._valuesToMeasure.push(value); - } -}; - -FormData.prototype._lengthRetriever = function(value, callback) { - - if (value.hasOwnProperty('fd')) { - - // take read range into a account - // `end` = Infinity –> read file till the end - // - // TODO: Looks like there is bug in Node fs.createReadStream - // it doesn't respect `end` options without `start` options - // Fix it when node fixes it. - // https://github.com/joyent/node/issues/7819 - if (value.end != undefined && value.end != Infinity && value.start != undefined) { - - // when end specified - // no need to calculate range - // inclusive, starts with 0 - callback(null, value.end + 1 - (value.start ? value.start : 0)); - - // not that fast snoopy - } else { - // still need to fetch file size from fs - fs.stat(value.path, function(err, stat) { - - var fileSize; - - if (err) { - callback(err); - return; - } - - // update final size based on the range options - fileSize = stat.size - (value.start ? value.start : 0); - callback(null, fileSize); - }); - } - - // or http response - } else if (value.hasOwnProperty('httpVersion')) { - callback(null, +value.headers['content-length']); - - // or request stream http://github.com/mikeal/request - } else if (value.hasOwnProperty('httpModule')) { - // wait till response come back - value.on('response', function(response) { - value.pause(); - callback(null, +response.headers['content-length']); - }); - value.resume(); - - // something else - } else { - callback('Unknown stream'); - } -}; - -FormData.prototype._multiPartHeader = function(field, value, options) { - // custom header specified (as string)? - // it becomes responsible for boundary - // (e.g. to handle extra CRLFs on .NET servers) - if (typeof options.header == 'string') { - return options.header; - } - - var contentDisposition = this._getContentDisposition(value, options); - var contentType = this._getContentType(value, options); - - var contents = ''; - var headers = { - // add custom disposition as third element or keep it two elements if not - 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []), - // if no content type. allow it to be empty array - 'Content-Type': [].concat(contentType || []) - }; - - // allow custom headers. - if (typeof options.header == 'object') { - populate(headers, options.header); - } - - var header; - for (var prop in headers) { - header = headers[prop]; - - // skip nullish headers. - if (header == null) { - continue; - } - - // convert all headers to arrays. - if (!Array.isArray(header)) { - header = [header]; - } - - // add non-empty headers. - if (header.length) { - contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK; - } - } - - return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK; -}; - -FormData.prototype._getContentDisposition = function(value, options) { - - var contentDisposition; - - // custom filename takes precedence - // fs- and request- streams have path property - // formidable and the browser add a name property. - var filename = options.filename || value.name || value.path; - - // or try http response - if (!filename && value.readable && value.hasOwnProperty('httpVersion')) { - filename = value.client._httpMessage.path; - } - - if (filename) { - contentDisposition = 'filename="' + path.basename(filename) + '"'; - } - - return contentDisposition; -}; - -FormData.prototype._getContentType = function(value, options) { - - // use custom content-type above all - var contentType = options.contentType; - - // or try `name` from formidable, browser - if (!contentType && value.name) { - contentType = mime.lookup(value.name); - } - - // or try `path` from fs-, request- streams - if (!contentType && value.path) { - contentType = mime.lookup(value.path); - } - - // or if it's http-reponse - if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) { - contentType = value.headers['content-type']; - } - - // or guess it from the filename - if (!contentType && options.filename) { - contentType = mime.lookup(options.filename); - } - - // fallback to the default content type if `value` is not simple value - if (!contentType && typeof value == 'object') { - contentType = FormData.DEFAULT_CONTENT_TYPE; - } - - return contentType; -}; - -FormData.prototype._multiPartFooter = function() { - return function(next) { - var footer = FormData.LINE_BREAK; - - var lastPart = (this._streams.length === 0); - if (lastPart) { - footer += this._lastBoundary(); - } - - next(footer); - }.bind(this); -}; - -FormData.prototype._lastBoundary = function() { - return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK; -}; - -FormData.prototype.getHeaders = function(userHeaders) { - var header; - var formHeaders = { - 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() - }; - - for (header in userHeaders) { - if (userHeaders.hasOwnProperty(header)) { - formHeaders[header.toLowerCase()] = userHeaders[header]; - } - } - - return formHeaders; -}; - -FormData.prototype.getBoundary = function() { - if (!this._boundary) { - this._generateBoundary(); - } - - return this._boundary; -}; - -FormData.prototype._generateBoundary = function() { - // This generates a 50 character boundary similar to those used by Firefox. - // They are optimized for boyer-moore parsing. - var boundary = '--------------------------'; - for (var i = 0; i < 24; i++) { - boundary += Math.floor(Math.random() * 10).toString(16); - } - - this._boundary = boundary; -}; - -// Note: getLengthSync DOESN'T calculate streams length -// As workaround one can calculate file size manually -// and add it as knownLength option -FormData.prototype.getLengthSync = function() { - var knownLength = this._overheadLength + this._valueLength; - - // Don't get confused, there are 3 "internal" streams for each keyval pair - // so it basically checks if there is any value added to the form - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - - // https://github.com/form-data/form-data/issues/40 - if (!this.hasKnownLength()) { - // Some async length retrievers are present - // therefore synchronous length calculation is false. - // Please use getLength(callback) to get proper length - this._error(new Error('Cannot calculate proper length in synchronous way.')); - } - - return knownLength; -}; - -// Public API to check if length of added values is known -// https://github.com/form-data/form-data/issues/196 -// https://github.com/form-data/form-data/issues/262 -FormData.prototype.hasKnownLength = function() { - var hasKnownLength = true; - - if (this._valuesToMeasure.length) { - hasKnownLength = false; - } - - return hasKnownLength; -}; - -FormData.prototype.getLength = function(cb) { - var knownLength = this._overheadLength + this._valueLength; - - if (this._streams.length) { - knownLength += this._lastBoundary().length; - } - - if (!this._valuesToMeasure.length) { - process.nextTick(cb.bind(this, null, knownLength)); - return; - } - - asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) { - if (err) { - cb(err); - return; - } - - values.forEach(function(length) { - knownLength += length; - }); - - cb(null, knownLength); - }); -}; - -FormData.prototype.submit = function(params, cb) { - var request - , options - , defaults = {method: 'post'} - ; - - // parse provided url if it's string - // or treat it as options object - if (typeof params == 'string') { - - params = parseUrl(params); - options = populate({ - port: params.port, - path: params.pathname, - host: params.hostname - }, defaults); - - // use custom params - } else { - - options = populate(params, defaults); - // if no port provided use default one - if (!options.port) { - options.port = options.protocol == 'https:' ? 443 : 80; - } - } - - // put that good code in getHeaders to some use - options.headers = this.getHeaders(params.headers); - - // https if specified, fallback to http in any other case - if (options.protocol == 'https:') { - request = https.request(options); - } else { - request = http.request(options); - } - - // get content length and fire away - this.getLength(function(err, length) { - if (err) { - this._error(err); - return; - } - - // add content length - request.setHeader('Content-Length', length); - - this.pipe(request); - if (cb) { - request.on('error', cb); - request.on('response', cb.bind(this, null)); - } - }.bind(this)); - - return request; -}; - -FormData.prototype._error = function(err) { - if (!this.error) { - this.error = err; - this.pause(); - this.emit('error', err); - } -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/form-data/lib/populate.js b/fundamentals/bug-challenge-es6/node_modules/form-data/lib/populate.js deleted file mode 100644 index 4d35738dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/form-data/lib/populate.js +++ /dev/null @@ -1,10 +0,0 @@ -// populates missing values -module.exports = function(dst, src) { - - Object.keys(src).forEach(function(prop) - { - dst[prop] = dst[prop] || src[prop]; - }); - - return dst; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/form-data/package.json b/fundamentals/bug-challenge-es6/node_modules/form-data/package.json deleted file mode 100644 index f14c6377e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/form-data/package.json +++ /dev/null @@ -1,137 +0,0 @@ -{ - "_args": [ - [ - "form-data@~2.1.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request" - ] - ], - "_from": "form-data@>=2.1.1 <2.2.0", - "_id": "form-data@2.1.2", - "_inCache": true, - "_installable": true, - "_location": "/form-data", - "_nodeVersion": "6.4.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/form-data-2.1.2.tgz_1478577739404_0.6574864208232611" - }, - "_npmUser": { - "email": "iam@alexindigo.com", - "name": "alexindigo" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "form-data", - "raw": "form-data@~2.1.1", - "rawSpec": "~2.1.1", - "scope": null, - "spec": ">=2.1.1 <2.2.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz", - "_shasum": "89c3534008b97eada4cbb157d58f6f5df025eae4", - "_shrinkwrap": null, - "_spec": "form-data@~2.1.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request", - "author": { - "email": "felix@debuggable.com", - "name": "Felix Geisendörfer", - "url": "http://debuggable.com/" - }, - "browser": "./lib/browser", - "bugs": { - "url": "https://github.com/form-data/form-data/issues" - }, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.12" - }, - "description": "A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.", - "devDependencies": { - "browserify": "^13.1.1", - "browserify-istanbul": "^2.0.0", - "coveralls": "^2.11.14", - "cross-spawn": "^4.0.2", - "eslint": "^3.9.1", - "fake": "^0.2.2", - "far": "^0.0.7", - "formidable": "^1.0.17", - "in-publish": "^2.0.0", - "is-node-modern": "^1.0.0", - "istanbul": "^0.4.5", - "obake": "^0.1.2", - "phantomjs-prebuilt": "^2.1.13", - "pkgfiles": "^2.3.0", - "pre-commit": "^1.1.3", - "request": "2.76.0", - "rimraf": "^2.5.4", - "tape": "^4.6.2" - }, - "directories": {}, - "dist": { - "shasum": "89c3534008b97eada4cbb157d58f6f5df025eae4", - "tarball": "https://registry.npmjs.org/form-data/-/form-data-2.1.2.tgz" - }, - "engines": { - "node": ">= 0.12" - }, - "gitHead": "03444d21961a7a44cdc2eae11ee3630f6969023d", - "homepage": "https://github.com/form-data/form-data#readme", - "license": "MIT", - "main": "./lib/form_data", - "maintainers": [ - { - "email": "iam@alexindigo.com", - "name": "alexindigo" - }, - { - "email": "pierceydylan@gmail.com", - "name": "dylanpiercey" - }, - { - "email": "felix@debuggable.com", - "name": "felixge" - }, - { - "email": "mikeal.rogers@gmail.com", - "name": "mikeal" - } - ], - "name": "form-data", - "optionalDependencies": {}, - "pre-commit": [ - "lint", - "ci-test", - "check" - ], - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/form-data/form-data.git" - }, - "scripts": { - "browser": "browserify -t browserify-istanbul test/run-browser.js | obake --coverage", - "check": "istanbul check-coverage coverage/coverage*.json", - "ci-lint": "is-node-modern 6 && npm run lint || is-node-not-modern 6", - "ci-test": "npm run test && npm run browser && npm run report", - "debug": "verbose=1 ./test/run.js", - "files": "pkgfiles --sort=name", - "get-version": "node -e \"console.log(require('./package.json').version)\"", - "lint": "eslint lib/*.js test/*.js test/integration/*.js", - "postpublish": "npm run restore-readme", - "posttest": "istanbul report lcov text", - "predebug": "rimraf coverage test/tmp", - "prepublish": "in-publish && npm run update-readme || not-in-publish", - "pretest": "rimraf coverage test/tmp", - "report": "istanbul report lcov text", - "restore-readme": "mv README.md.bak README.md", - "test": "istanbul cover test/run.js", - "update-readme": "sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md" - }, - "version": "2.1.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/fs.realpath/LICENSE b/fundamentals/bug-challenge-es6/node_modules/fs.realpath/LICENSE deleted file mode 100644 index 5bd884c25..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fs.realpath/LICENSE +++ /dev/null @@ -1,43 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----- - -This library bundles a version of the `fs.realpath` and `fs.realpathSync` -methods from Node.js v0.10 under the terms of the Node.js MIT license. - -Node's license follows, also included at the header of `old.js` which contains -the licensed code: - - Copyright Joyent, Inc. and other Node contributors. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/fs.realpath/README.md b/fundamentals/bug-challenge-es6/node_modules/fs.realpath/README.md deleted file mode 100644 index a42ceac62..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fs.realpath/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# fs.realpath - -A backwards-compatible fs.realpath for Node v6 and above - -In Node v6, the JavaScript implementation of fs.realpath was replaced -with a faster (but less resilient) native implementation. That raises -new and platform-specific errors and cannot handle long or excessively -symlink-looping paths. - -This module handles those cases by detecting the new errors and -falling back to the JavaScript implementation. On versions of Node -prior to v6, it has no effect. - -## USAGE - -```js -var rp = require('fs.realpath') - -// async version -rp.realpath(someLongAndLoopingPath, function (er, real) { - // the ELOOP was handled, but it was a bit slower -}) - -// sync version -var real = rp.realpathSync(someLongAndLoopingPath) - -// monkeypatch at your own risk! -// This replaces the fs.realpath/fs.realpathSync builtins -rp.monkeypatch() - -// un-do the monkeypatching -rp.unmonkeypatch() -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/fs.realpath/index.js b/fundamentals/bug-challenge-es6/node_modules/fs.realpath/index.js deleted file mode 100644 index b09c7c7e6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fs.realpath/index.js +++ /dev/null @@ -1,66 +0,0 @@ -module.exports = realpath -realpath.realpath = realpath -realpath.sync = realpathSync -realpath.realpathSync = realpathSync -realpath.monkeypatch = monkeypatch -realpath.unmonkeypatch = unmonkeypatch - -var fs = require('fs') -var origRealpath = fs.realpath -var origRealpathSync = fs.realpathSync - -var version = process.version -var ok = /^v[0-5]\./.test(version) -var old = require('./old.js') - -function newError (er) { - return er && er.syscall === 'realpath' && ( - er.code === 'ELOOP' || - er.code === 'ENOMEM' || - er.code === 'ENAMETOOLONG' - ) -} - -function realpath (p, cache, cb) { - if (ok) { - return origRealpath(p, cache, cb) - } - - if (typeof cache === 'function') { - cb = cache - cache = null - } - origRealpath(p, cache, function (er, result) { - if (newError(er)) { - old.realpath(p, cache, cb) - } else { - cb(er, result) - } - }) -} - -function realpathSync (p, cache) { - if (ok) { - return origRealpathSync(p, cache) - } - - try { - return origRealpathSync(p, cache) - } catch (er) { - if (newError(er)) { - return old.realpathSync(p, cache) - } else { - throw er - } - } -} - -function monkeypatch () { - fs.realpath = realpath - fs.realpathSync = realpathSync -} - -function unmonkeypatch () { - fs.realpath = origRealpath - fs.realpathSync = origRealpathSync -} diff --git a/fundamentals/bug-challenge-es6/node_modules/fs.realpath/old.js b/fundamentals/bug-challenge-es6/node_modules/fs.realpath/old.js deleted file mode 100644 index b40305e73..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fs.realpath/old.js +++ /dev/null @@ -1,303 +0,0 @@ -// Copyright Joyent, Inc. and other Node contributors. -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to permit -// persons to whom the Software is furnished to do so, subject to the -// following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -// USE OR OTHER DEALINGS IN THE SOFTWARE. - -var pathModule = require('path'); -var isWindows = process.platform === 'win32'; -var fs = require('fs'); - -// JavaScript implementation of realpath, ported from node pre-v6 - -var DEBUG = process.env.NODE_DEBUG && /fs/.test(process.env.NODE_DEBUG); - -function rethrow() { - // Only enable in debug mode. A backtrace uses ~1000 bytes of heap space and - // is fairly slow to generate. - var callback; - if (DEBUG) { - var backtrace = new Error; - callback = debugCallback; - } else - callback = missingCallback; - - return callback; - - function debugCallback(err) { - if (err) { - backtrace.message = err.message; - err = backtrace; - missingCallback(err); - } - } - - function missingCallback(err) { - if (err) { - if (process.throwDeprecation) - throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs - else if (!process.noDeprecation) { - var msg = 'fs: missing callback ' + (err.stack || err.message); - if (process.traceDeprecation) - console.trace(msg); - else - console.error(msg); - } - } - } -} - -function maybeCallback(cb) { - return typeof cb === 'function' ? cb : rethrow(); -} - -var normalize = pathModule.normalize; - -// Regexp that finds the next partion of a (partial) path -// result is [base_with_slash, base], e.g. ['somedir/', 'somedir'] -if (isWindows) { - var nextPartRe = /(.*?)(?:[\/\\]+|$)/g; -} else { - var nextPartRe = /(.*?)(?:[\/]+|$)/g; -} - -// Regex to find the device root, including trailing slash. E.g. 'c:\\'. -if (isWindows) { - var splitRootRe = /^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/; -} else { - var splitRootRe = /^[\/]*/; -} - -exports.realpathSync = function realpathSync(p, cache) { - // make p is absolute - p = pathModule.resolve(p); - - if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { - return cache[p]; - } - - var original = p, - seenLinks = {}, - knownHard = {}; - - // current character position in p - var pos; - // the partial path so far, including a trailing slash if any - var current; - // the partial path without a trailing slash (except when pointing at a root) - var base; - // the partial path scanned in the previous round, with slash - var previous; - - start(); - - function start() { - // Skip over roots - var m = splitRootRe.exec(p); - pos = m[0].length; - current = m[0]; - base = m[0]; - previous = ''; - - // On windows, check that the root exists. On unix there is no need. - if (isWindows && !knownHard[base]) { - fs.lstatSync(base); - knownHard[base] = true; - } - } - - // walk down the path, swapping out linked pathparts for their real - // values - // NB: p.length changes. - while (pos < p.length) { - // find the next part - nextPartRe.lastIndex = pos; - var result = nextPartRe.exec(p); - previous = current; - current += result[0]; - base = previous + result[1]; - pos = nextPartRe.lastIndex; - - // continue if not a symlink - if (knownHard[base] || (cache && cache[base] === base)) { - continue; - } - - var resolvedLink; - if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { - // some known symbolic link. no need to stat again. - resolvedLink = cache[base]; - } else { - var stat = fs.lstatSync(base); - if (!stat.isSymbolicLink()) { - knownHard[base] = true; - if (cache) cache[base] = base; - continue; - } - - // read the link if it wasn't read before - // dev/ino always return 0 on windows, so skip the check. - var linkTarget = null; - if (!isWindows) { - var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); - if (seenLinks.hasOwnProperty(id)) { - linkTarget = seenLinks[id]; - } - } - if (linkTarget === null) { - fs.statSync(base); - linkTarget = fs.readlinkSync(base); - } - resolvedLink = pathModule.resolve(previous, linkTarget); - // track this, if given a cache. - if (cache) cache[base] = resolvedLink; - if (!isWindows) seenLinks[id] = linkTarget; - } - - // resolve the link, then start over - p = pathModule.resolve(resolvedLink, p.slice(pos)); - start(); - } - - if (cache) cache[original] = p; - - return p; -}; - - -exports.realpath = function realpath(p, cache, cb) { - if (typeof cb !== 'function') { - cb = maybeCallback(cache); - cache = null; - } - - // make p is absolute - p = pathModule.resolve(p); - - if (cache && Object.prototype.hasOwnProperty.call(cache, p)) { - return process.nextTick(cb.bind(null, null, cache[p])); - } - - var original = p, - seenLinks = {}, - knownHard = {}; - - // current character position in p - var pos; - // the partial path so far, including a trailing slash if any - var current; - // the partial path without a trailing slash (except when pointing at a root) - var base; - // the partial path scanned in the previous round, with slash - var previous; - - start(); - - function start() { - // Skip over roots - var m = splitRootRe.exec(p); - pos = m[0].length; - current = m[0]; - base = m[0]; - previous = ''; - - // On windows, check that the root exists. On unix there is no need. - if (isWindows && !knownHard[base]) { - fs.lstat(base, function(err) { - if (err) return cb(err); - knownHard[base] = true; - LOOP(); - }); - } else { - process.nextTick(LOOP); - } - } - - // walk down the path, swapping out linked pathparts for their real - // values - function LOOP() { - // stop if scanned past end of path - if (pos >= p.length) { - if (cache) cache[original] = p; - return cb(null, p); - } - - // find the next part - nextPartRe.lastIndex = pos; - var result = nextPartRe.exec(p); - previous = current; - current += result[0]; - base = previous + result[1]; - pos = nextPartRe.lastIndex; - - // continue if not a symlink - if (knownHard[base] || (cache && cache[base] === base)) { - return process.nextTick(LOOP); - } - - if (cache && Object.prototype.hasOwnProperty.call(cache, base)) { - // known symbolic link. no need to stat again. - return gotResolvedLink(cache[base]); - } - - return fs.lstat(base, gotStat); - } - - function gotStat(err, stat) { - if (err) return cb(err); - - // if not a symlink, skip to the next path part - if (!stat.isSymbolicLink()) { - knownHard[base] = true; - if (cache) cache[base] = base; - return process.nextTick(LOOP); - } - - // stat & read the link if not read before - // call gotTarget as soon as the link target is known - // dev/ino always return 0 on windows, so skip the check. - if (!isWindows) { - var id = stat.dev.toString(32) + ':' + stat.ino.toString(32); - if (seenLinks.hasOwnProperty(id)) { - return gotTarget(null, seenLinks[id], base); - } - } - fs.stat(base, function(err) { - if (err) return cb(err); - - fs.readlink(base, function(err, target) { - if (!isWindows) seenLinks[id] = target; - gotTarget(err, target); - }); - }); - } - - function gotTarget(err, target, base) { - if (err) return cb(err); - - var resolvedLink = pathModule.resolve(previous, target); - if (cache) cache[base] = resolvedLink; - gotResolvedLink(resolvedLink); - } - - function gotResolvedLink(resolvedLink) { - // resolve the link, then start over - p = pathModule.resolve(resolvedLink, p.slice(pos)); - start(); - } -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/fs.realpath/package.json b/fundamentals/bug-challenge-es6/node_modules/fs.realpath/package.json deleted file mode 100644 index 81b543e18..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/fs.realpath/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_args": [ - [ - "fs.realpath@^1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/rimraf/node_modules/glob" - ] - ], - "_from": "fs.realpath@>=1.0.0 <2.0.0", - "_id": "fs.realpath@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/fs.realpath", - "_nodeVersion": "4.4.4", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/fs.realpath-1.0.0.tgz_1466015941059_0.3332864767871797" - }, - "_npmUser": { - "email": "i@izs.me", - "name": "isaacs" - }, - "_npmVersion": "3.9.1", - "_phantomChildren": {}, - "_requested": { - "name": "fs.realpath", - "raw": "fs.realpath@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/rimraf/glob" - ], - "_resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "_shasum": "1504ad2523158caa40db4a2787cb01411994ea4f", - "_shrinkwrap": null, - "_spec": "fs.realpath@^1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/rimraf/node_modules/glob", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/fs.realpath/issues" - }, - "dependencies": {}, - "description": "Use node's fs.realpath, but fall back to the JS implementation if the native one fails", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "1504ad2523158caa40db4a2787cb01411994ea4f", - "tarball": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - }, - "files": [ - "old.js", - "index.js" - ], - "gitHead": "03e7c884431fe185dfebbc9b771aeca339c1807a", - "homepage": "https://github.com/isaacs/fs.realpath#readme", - "keywords": [ - "realpath", - "fs", - "polyfill" - ], - "license": "ISC", - "main": "index.js", - "maintainers": [ - { - "email": "i@izs.me", - "name": "isaacs" - } - ], - "name": "fs.realpath", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/fs.realpath.git" - }, - "scripts": { - "test": "tap test/*.js --cov" - }, - "version": "1.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-function/.npmignore b/fundamentals/bug-challenge-es6/node_modules/generate-function/.npmignore deleted file mode 100644 index 3c3629e64..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-function/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-function/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/generate-function/.travis.yml deleted file mode 100644 index 6e5919de3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-function/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-function/README.md b/fundamentals/bug-challenge-es6/node_modules/generate-function/README.md deleted file mode 100644 index 693bff87c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-function/README.md +++ /dev/null @@ -1,72 +0,0 @@ -# generate-function - -Module that helps you write generated functions in Node - -``` -npm install generate-function -``` - -[![build status](http://img.shields.io/travis/mafintosh/generate-function.svg?style=flat)](http://travis-ci.org/mafintosh/generate-function) - -## Disclamer - -Writing code that generates code is hard. -You should only use this if you really, really, really need this for performance reasons (like schema validators / parsers etc). - -## Usage - -``` js -var genfun = require('generate-function') - -var addNumber = function(val) { - var fn = genfun() - ('function add(n) {') - ('return n + %d', val) // supports format strings to insert values - ('}') - - return fn.toFunction() // will compile the function -} - -var add2 = addNumber(2) - -console.log('1+2=', add2(1)) -console.log(add2.toString()) // prints the generated function -``` - -If you need to close over variables in your generated function pass them to `toFunction(scope)` - -``` js -var multiply = function(a, b) { - return a * b -} - -var addAndMultiplyNumber = function(val) { - var fn = genfun() - ('function(n) {') - ('if (typeof n !== "number") {') // ending a line with { will indent the source - ('throw new Error("argument should be a number")') - ('}') - ('var result = multiply(%d, n+%d)', val, val) - ('return result') - ('}') - - // use fn.toString() if you want to see the generated source - - return fn.toFunction({ - multiply: multiply - }) -} - -var addAndMultiply2 = addAndMultiplyNumber(2) - -console.log('(3 + 2) * 2 =', addAndMultiply2(3)) -``` - -## Related - -See [generate-object-property](https://github.com/mafintosh/generate-object-property) if you need to safely generate code that -can be used to reference an object property - -## License - -MIT \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-function/example.js b/fundamentals/bug-challenge-es6/node_modules/generate-function/example.js deleted file mode 100644 index 8d1fee162..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-function/example.js +++ /dev/null @@ -1,27 +0,0 @@ -var genfun = require('./') - -var multiply = function(a, b) { - return a * b -} - -var addAndMultiplyNumber = function(val) { - var fn = genfun() - ('function(n) {') - ('if (typeof n !== "number") {') // ending a line with { will indent the source - ('throw new Error("argument should be a number")') - ('}') - ('var result = multiply(%d, n+%d)', val, val) - ('return result') - ('}') - - // use fn.toString() if you want to see the generated source - - return fn.toFunction({ - multiply: multiply - }) -} - -var addAndMultiply2 = addAndMultiplyNumber(2) - -console.log(addAndMultiply2.toString()) -console.log('(3 + 2) * 2 =', addAndMultiply2(3)) \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-function/index.js b/fundamentals/bug-challenge-es6/node_modules/generate-function/index.js deleted file mode 100644 index 37e064bb4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-function/index.js +++ /dev/null @@ -1,61 +0,0 @@ -var util = require('util') - -var INDENT_START = /[\{\[]/ -var INDENT_END = /[\}\]]/ - -module.exports = function() { - var lines = [] - var indent = 0 - - var push = function(str) { - var spaces = '' - while (spaces.length < indent*2) spaces += ' ' - lines.push(spaces+str) - } - - var line = function(fmt) { - if (!fmt) return line - - if (INDENT_END.test(fmt.trim()[0]) && INDENT_START.test(fmt[fmt.length-1])) { - indent-- - push(util.format.apply(util, arguments)) - indent++ - return line - } - if (INDENT_START.test(fmt[fmt.length-1])) { - push(util.format.apply(util, arguments)) - indent++ - return line - } - if (INDENT_END.test(fmt.trim()[0])) { - indent-- - push(util.format.apply(util, arguments)) - return line - } - - push(util.format.apply(util, arguments)) - return line - } - - line.toString = function() { - return lines.join('\n') - } - - line.toFunction = function(scope) { - var src = 'return ('+line.toString()+')' - - var keys = Object.keys(scope || {}).map(function(key) { - return key - }) - - var vals = keys.map(function(key) { - return scope[key] - }) - - return Function.apply(null, keys.concat(src)).apply(null, vals) - } - - if (arguments.length) line.apply(null, arguments) - - return line -} diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-function/package.json b/fundamentals/bug-challenge-es6/node_modules/generate-function/package.json deleted file mode 100644 index 23656b4a8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-function/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "_args": [ - [ - "generate-function@^2.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/is-my-json-valid" - ] - ], - "_from": "generate-function@>=2.0.0 <3.0.0", - "_id": "generate-function@2.0.0", - "_inCache": true, - "_installable": true, - "_location": "/generate-function", - "_npmUser": { - "email": "mathiasbuus@gmail.com", - "name": "mafintosh" - }, - "_npmVersion": "1.4.23", - "_phantomChildren": {}, - "_requested": { - "name": "generate-function", - "raw": "generate-function@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/is-my-json-valid" - ], - "_resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "_shasum": "6858fe7c0969b7d4e9093337647ac79f60dfbe74", - "_shrinkwrap": null, - "_spec": "generate-function@^2.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/is-my-json-valid", - "author": { - "name": "Mathias Buus" - }, - "bugs": { - "url": "https://github.com/mafintosh/generate-function/issues" - }, - "dependencies": {}, - "description": "Module that helps you write generated functions in Node", - "devDependencies": { - "tape": "^2.13.4" - }, - "directories": {}, - "dist": { - "shasum": "6858fe7c0969b7d4e9093337647ac79f60dfbe74", - "tarball": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz" - }, - "gitHead": "3d5fc8de5859be95f58e3af9bfb5f663edd95149", - "homepage": "https://github.com/mafintosh/generate-function", - "keywords": [ - "generate", - "code", - "generation", - "function", - "performance" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "mathiasbuus@gmail.com", - "name": "mafintosh" - } - ], - "name": "generate-function", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/mafintosh/generate-function.git" - }, - "scripts": { - "test": "tape test.js" - }, - "version": "2.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-function/test.js b/fundamentals/bug-challenge-es6/node_modules/generate-function/test.js deleted file mode 100644 index 2768893eb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-function/test.js +++ /dev/null @@ -1,33 +0,0 @@ -var tape = require('tape') -var genfun = require('./') - -tape('generate add function', function(t) { - var fn = genfun() - ('function add(n) {') - ('return n + %d', 42) - ('}') - - t.same(fn.toString(), 'function add(n) {\n return n + 42\n}', 'code is indented') - t.same(fn.toFunction()(10), 52, 'function works') - t.end() -}) - -tape('generate function + closed variables', function(t) { - var fn = genfun() - ('function add(n) {') - ('return n + %d + number', 42) - ('}') - - var notGood = fn.toFunction() - var good = fn.toFunction({number:10}) - - try { - notGood(10) - t.ok(false, 'function should not work') - } catch (err) { - t.same(err.message, 'number is not defined', 'throws reference error') - } - - t.same(good(11), 63, 'function with closed var works') - t.end() -}) \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/.npmignore b/fundamentals/bug-challenge-es6/node_modules/generate-object-property/.npmignore deleted file mode 100644 index 3c3629e64..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/generate-object-property/.travis.yml deleted file mode 100644 index 6e5919de3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/LICENSE b/fundamentals/bug-challenge-es6/node_modules/generate-object-property/LICENSE deleted file mode 100644 index 757562ec5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Mathias Buus - -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/fundamentals/bug-challenge-es6/node_modules/generate-object-property/README.md b/fundamentals/bug-challenge-es6/node_modules/generate-object-property/README.md deleted file mode 100644 index 0ee04613d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# generate-object-property - -Generate safe JS code that can used to reference a object property - - npm install generate-object-property - -[![build status](http://img.shields.io/travis/mafintosh/generate-object-property.svg?style=flat)](http://travis-ci.org/mafintosh/generate-object-property) - -## Usage - -``` js -var gen = require('generate-object-property'); -console.log(gen('a','b')); // prints a.b -console.log(gen('a', 'foo-bar')); // prints a["foo-bar"] -``` - -## License - -MIT \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/index.js b/fundamentals/bug-challenge-es6/node_modules/generate-object-property/index.js deleted file mode 100644 index 5dc9f776d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/index.js +++ /dev/null @@ -1,12 +0,0 @@ -var isProperty = require('is-property') - -var gen = function(obj, prop) { - return isProperty(prop) ? obj+'.'+prop : obj+'['+JSON.stringify(prop)+']' -} - -gen.valid = isProperty -gen.property = function (prop) { - return isProperty(prop) ? prop : JSON.stringify(prop) -} - -module.exports = gen diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/package.json b/fundamentals/bug-challenge-es6/node_modules/generate-object-property/package.json deleted file mode 100644 index 1374eb80c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/package.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_args": [ - [ - "generate-object-property@^1.1.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/is-my-json-valid" - ] - ], - "_from": "generate-object-property@>=1.1.0 <2.0.0", - "_id": "generate-object-property@1.2.0", - "_inCache": true, - "_installable": true, - "_location": "/generate-object-property", - "_nodeVersion": "2.0.1", - "_npmUser": { - "email": "mathiasbuus@gmail.com", - "name": "mafintosh" - }, - "_npmVersion": "2.9.0", - "_phantomChildren": {}, - "_requested": { - "name": "generate-object-property", - "raw": "generate-object-property@^1.1.0", - "rawSpec": "^1.1.0", - "scope": null, - "spec": ">=1.1.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/is-my-json-valid" - ], - "_resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "_shasum": "9c0e1c40308ce804f4783618b937fa88f99d50d0", - "_shrinkwrap": null, - "_spec": "generate-object-property@^1.1.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/is-my-json-valid", - "author": { - "name": "Mathias Buus", - "url": "@mafintosh" - }, - "bugs": { - "url": "https://github.com/mafintosh/generate-object-property/issues" - }, - "dependencies": { - "is-property": "^1.0.0" - }, - "description": "Generate safe JS code that can used to reference a object property", - "devDependencies": { - "tape": "^2.13.0" - }, - "directories": {}, - "dist": { - "shasum": "9c0e1c40308ce804f4783618b937fa88f99d50d0", - "tarball": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz" - }, - "gitHead": "0dd7d411018de54b2eae63b424c15b3e50bd678c", - "homepage": "https://github.com/mafintosh/generate-object-property", - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "mathiasbuus@gmail.com", - "name": "mafintosh" - } - ], - "name": "generate-object-property", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/mafintosh/generate-object-property.git" - }, - "scripts": { - "test": "tape test.js" - }, - "version": "1.2.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/test.js b/fundamentals/bug-challenge-es6/node_modules/generate-object-property/test.js deleted file mode 100644 index 6c299c67f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/generate-object-property/test.js +++ /dev/null @@ -1,12 +0,0 @@ -var tape = require('tape') -var gen = require('./') - -tape('valid', function(t) { - t.same(gen('a', 'b'), 'a.b') - t.end() -}) - -tape('invalid', function(t) { - t.same(gen('a', '-b'), 'a["-b"]') - t.end() -}) \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/get-caller-file/README.md b/fundamentals/bug-challenge-es6/node_modules/get-caller-file/README.md deleted file mode 100644 index c32df54c3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/get-caller-file/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# get-caller-file - -[![Build Status](https://travis-ci.org/ember-cli/ember-cli.svg?branch=master)](https://travis-ci.org/ember-cli/ember-cli) -[![Build status](https://ci.appveyor.com/api/projects/status/ol2q94g1932cy14a/branch/master?svg=true)](https://ci.appveyor.com/project/embercli/get-caller-file/branch/master) diff --git a/fundamentals/bug-challenge-es6/node_modules/get-caller-file/index.js b/fundamentals/bug-challenge-es6/node_modules/get-caller-file/index.js deleted file mode 100644 index 03e7dfc39..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/get-caller-file/index.js +++ /dev/null @@ -1,20 +0,0 @@ -'use strict'; - -// Call this function in a another function to find out the file from -// which that function was called from. (Inspects the v8 stack trace) -// -// Inspired by http://stackoverflow.com/questions/13227489 - -module.exports = function getCallerFile(_position) { - var oldPrepareStackTrace = Error.prepareStackTrace; - Error.prepareStackTrace = function(err, stack) { return stack; }; - var stack = new Error().stack; - Error.prepareStackTrace = oldPrepareStackTrace; - - var position = _position ? _position : 2; - - // stack[0] holds this file - // stack[1] holds where this function was called - // stack[2] holds the file we're interested in - return stack[position] ? stack[position].getFileName() : undefined; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/get-caller-file/package.json b/fundamentals/bug-challenge-es6/node_modules/get-caller-file/package.json deleted file mode 100644 index 2db6cc035..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/get-caller-file/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_args": [ - [ - "get-caller-file@^1.0.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/yargs" - ] - ], - "_from": "get-caller-file@>=1.0.1 <2.0.0", - "_id": "get-caller-file@1.0.2", - "_inCache": true, - "_installable": true, - "_location": "/get-caller-file", - "_nodeVersion": "6.3.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/get-caller-file-1.0.2.tgz_1470703947025_0.16134989843703806" - }, - "_npmUser": { - "email": "stefan.penner@gmail.com", - "name": "stefanpenner" - }, - "_npmVersion": "3.10.5", - "_phantomChildren": {}, - "_requested": { - "name": "get-caller-file", - "raw": "get-caller-file@^1.0.1", - "rawSpec": "^1.0.1", - "scope": null, - "spec": ">=1.0.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/yargs" - ], - "_resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "_shasum": "f702e63127e7e231c160a80c1554acb70d5047e5", - "_shrinkwrap": null, - "_spec": "get-caller-file@^1.0.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/yargs", - "author": { - "name": "Stefan Penner" - }, - "bugs": { - "url": "https://github.com/stefanpenner/get-caller-file/issues" - }, - "dependencies": {}, - "description": "[![Build Status](https://travis-ci.org/ember-cli/ember-cli.svg?branch=master)](https://travis-ci.org/ember-cli/ember-cli) [![Build status](https://ci.appveyor.com/api/projects/status/ol2q94g1932cy14a/branch/master?svg=true)](https://ci.appveyor.com/projec", - "devDependencies": { - "chai": "^3.4.1", - "ensure-posix-path": "^1.0.1", - "mocha": "^2.3.4" - }, - "directories": { - "test": "tests" - }, - "dist": { - "shasum": "f702e63127e7e231c160a80c1554acb70d5047e5", - "tarball": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz" - }, - "files": [ - "index.js" - ], - "gitHead": "7545c5b0b7f55a1bfffea4a57e3671d771372025", - "homepage": "https://github.com/stefanpenner/get-caller-file#readme", - "license": "ISC", - "main": "index.js", - "maintainers": [ - { - "email": "stefan.penner@gmail.com", - "name": "stefanpenner" - } - ], - "name": "get-caller-file", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/stefanpenner/get-caller-file.git" - }, - "scripts": { - "test": "mocha test", - "test:debug": "mocha test" - }, - "version": "1.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/getpass/.npmignore b/fundamentals/bug-challenge-es6/node_modules/getpass/.npmignore deleted file mode 100644 index a4261fc06..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/getpass/.npmignore +++ /dev/null @@ -1,8 +0,0 @@ -.gitmodules -deps -docs -Makefile -node_modules -test -tools -coverage diff --git a/fundamentals/bug-challenge-es6/node_modules/getpass/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/getpass/.travis.yml deleted file mode 100644 index d8b5833a7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/getpass/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: node_js -node_js: - - "5.10" - - "4.4" - - "4.1" - - "0.12" - - "0.10" -before_install: - - "make check" diff --git a/fundamentals/bug-challenge-es6/node_modules/getpass/LICENSE b/fundamentals/bug-challenge-es6/node_modules/getpass/LICENSE deleted file mode 100644 index f6d947d2f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/getpass/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright Joyent, Inc. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/getpass/README.md b/fundamentals/bug-challenge-es6/node_modules/getpass/README.md deleted file mode 100644 index 6e4a50f63..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/getpass/README.md +++ /dev/null @@ -1,32 +0,0 @@ -## getpass - -Get a password from the terminal. Sounds simple? Sounds like the `readline` -module should be able to do it? NOPE. - -## Install and use it - -```bash -npm install --save getpass -``` - -```javascript -const mod_getpass = require('getpass'); -``` - -## API - -### `mod_getpass.getPass([options, ]callback)` - -Gets a password from the terminal. If available, this uses `/dev/tty` to avoid -interfering with any data being piped in or out of stdio. - -This function prints a prompt (by default `Password:`) and then accepts input -without echoing. - -Parameters: - - * `options`, an Object, with properties: - * `prompt`, an optional String - * `callback`, a `Func(error, password)`, with arguments: - * `error`, either `null` (no error) or an `Error` instance - * `password`, a String diff --git a/fundamentals/bug-challenge-es6/node_modules/getpass/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/getpass/lib/index.js deleted file mode 100644 index 55a7718c0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/getpass/lib/index.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright 2016, Joyent, Inc. All rights reserved. - * Author: Alex 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. -*/ - -module.exports = { - getPass: getPass -}; - -const mod_tty = require('tty'); -const mod_fs = require('fs'); -const mod_assert = require('assert-plus'); - -var BACKSPACE = String.fromCharCode(127); -var CTRLC = '\u0003'; -var CTRLD = '\u0004'; - -function getPass(opts, cb) { - if (typeof (opts) === 'function' && cb === undefined) { - cb = opts; - opts = {}; - } - mod_assert.object(opts, 'options'); - mod_assert.func(cb, 'callback'); - - mod_assert.optionalString(opts.prompt, 'options.prompt'); - if (opts.prompt === undefined) - opts.prompt = 'Password'; - - openTTY(function (err, rfd, wfd, rtty, wtty) { - if (err) { - cb(err); - return; - } - - wtty.write(opts.prompt + ':'); - rtty.resume(); - rtty.setRawMode(true); - rtty.resume(); - rtty.setEncoding('utf8'); - - var pw = ''; - rtty.on('data', onData); - - function onData(data) { - var str = data.toString('utf8'); - for (var i = 0; i < str.length; ++i) { - var ch = str[i]; - switch (ch) { - case '\r': - case '\n': - case CTRLD: - cleanup(); - cb(null, pw); - return; - case CTRLC: - cleanup(); - cb(new Error('Aborted')); - return; - case BACKSPACE: - pw = pw.slice(0, pw.length - 1); - break; - default: - pw += ch; - break; - } - } - } - - function cleanup() { - wtty.write('\r\n'); - rtty.setRawMode(false); - rtty.pause(); - rtty.removeListener('data', onData); - if (wfd !== undefined && wfd !== rfd) { - wtty.end(); - mod_fs.closeSync(wfd); - } - if (rfd !== undefined) { - rtty.end(); - mod_fs.closeSync(rfd); - } - } - }); -} - -function openTTY(cb) { - mod_fs.open('/dev/tty', 'r+', function (err, rttyfd) { - if ((err && (err.code === 'ENOENT' || err.code === 'EACCES')) || - (process.version.match(/^v0[.][0-8][.]/))) { - cb(null, undefined, undefined, process.stdin, - process.stdout); - return; - } - var rtty = new mod_tty.ReadStream(rttyfd); - mod_fs.open('/dev/tty', 'w+', function (err3, wttyfd) { - var wtty = new mod_tty.WriteStream(wttyfd); - if (err3) { - cb(err3); - return; - } - cb(null, rttyfd, wttyfd, rtty, wtty); - }); - }); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/AUTHORS b/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/AUTHORS deleted file mode 100644 index 1923524fe..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/AUTHORS +++ /dev/null @@ -1,6 +0,0 @@ -Dave Eddy -Fred Kuo -Lars-Magnus Skog -Mark Cavage -Patrick Mooney -Rob Gulewich diff --git a/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/CHANGES.md b/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/CHANGES.md deleted file mode 100644 index 57d92bfdb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/CHANGES.md +++ /dev/null @@ -1,14 +0,0 @@ -# assert-plus Changelog - -## 1.0.0 - -- *BREAKING* assert.number (and derivatives) now accept Infinity as valid input -- Add assert.finite check. Previous assert.number callers should use this if - they expect Infinity inputs to throw. - -## 0.2.0 - -- Fix `assert.object(null)` so it throws -- Fix optional/arrayOf exports for non-type-of asserts -- Add optiona/arrayOf exports for Stream/Date/Regex/uuid -- Add basic unit test coverage diff --git a/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/README.md b/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/README.md deleted file mode 100644 index ec200d161..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/README.md +++ /dev/null @@ -1,162 +0,0 @@ -# assert-plus - -This library is a super small wrapper over node's assert module that has two -things: (1) the ability to disable assertions with the environment variable -NODE\_NDEBUG, and (2) some API wrappers for argument testing. Like -`assert.string(myArg, 'myArg')`. As a simple example, most of my code looks -like this: - -```javascript - var assert = require('assert-plus'); - - function fooAccount(options, callback) { - assert.object(options, 'options'); - assert.number(options.id, 'options.id'); - assert.bool(options.isManager, 'options.isManager'); - assert.string(options.name, 'options.name'); - assert.arrayOfString(options.email, 'options.email'); - assert.func(callback, 'callback'); - - // Do stuff - callback(null, {}); - } -``` - -# API - -All methods that *aren't* part of node's core assert API are simply assumed to -take an argument, and then a string 'name' that's not a message; `AssertionError` -will be thrown if the assertion fails with a message like: - - AssertionError: foo (string) is required - at test (/home/mark/work/foo/foo.js:3:9) - at Object. (/home/mark/work/foo/foo.js:15:1) - at Module._compile (module.js:446:26) - at Object..js (module.js:464:10) - at Module.load (module.js:353:31) - at Function._load (module.js:311:12) - at Array.0 (module.js:484:10) - at EventEmitter._tickCallback (node.js:190:38) - -from: - -```javascript - function test(foo) { - assert.string(foo, 'foo'); - } -``` - -There you go. You can check that arrays are of a homogeneous type with `Arrayof$Type`: - -```javascript - function test(foo) { - assert.arrayOfString(foo, 'foo'); - } -``` - -You can assert IFF an argument is not `undefined` (i.e., an optional arg): - -```javascript - assert.optionalString(foo, 'foo'); -``` - -Lastly, you can opt-out of assertion checking altogether by setting the -environment variable `NODE_NDEBUG=1`. This is pseudo-useful if you have -lots of assertions, and don't want to pay `typeof ()` taxes to v8 in -production. Be advised: The standard functions re-exported from `assert` are -also disabled in assert-plus if NDEBUG is specified. Using them directly from -the `assert` module avoids this behavior. - -The complete list of APIs is: - -* assert.array -* assert.bool -* assert.buffer -* assert.func -* assert.number -* assert.finite -* assert.object -* assert.string -* assert.stream -* assert.date -* assert.regexp -* assert.uuid -* assert.arrayOfArray -* assert.arrayOfBool -* assert.arrayOfBuffer -* assert.arrayOfFunc -* assert.arrayOfNumber -* assert.arrayOfFinite -* assert.arrayOfObject -* assert.arrayOfString -* assert.arrayOfStream -* assert.arrayOfDate -* assert.arrayOfRegexp -* assert.arrayOfUuid -* assert.optionalArray -* assert.optionalBool -* assert.optionalBuffer -* assert.optionalFunc -* assert.optionalNumber -* assert.optionalFinite -* assert.optionalObject -* assert.optionalString -* assert.optionalStream -* assert.optionalDate -* assert.optionalRegexp -* assert.optionalUuid -* assert.optionalArrayOfArray -* assert.optionalArrayOfBool -* assert.optionalArrayOfBuffer -* assert.optionalArrayOfFunc -* assert.optionalArrayOfNumber -* assert.optionalArrayOfFinite -* assert.optionalArrayOfObject -* assert.optionalArrayOfString -* assert.optionalArrayOfStream -* assert.optionalArrayOfDate -* assert.optionalArrayOfRegexp -* assert.optionalArrayOfUuid -* assert.AssertionError -* assert.fail -* assert.ok -* assert.equal -* assert.notEqual -* assert.deepEqual -* assert.notDeepEqual -* assert.strictEqual -* assert.notStrictEqual -* assert.throws -* assert.doesNotThrow -* assert.ifError - -# Installation - - npm install assert-plus - -## License - -The MIT License (MIT) -Copyright (c) 2012 Mark Cavage - -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. - -## Bugs - -See . diff --git a/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/assert.js b/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/assert.js deleted file mode 100644 index 26f944eec..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/assert.js +++ /dev/null @@ -1,211 +0,0 @@ -// Copyright (c) 2012, Mark Cavage. All rights reserved. -// Copyright 2015 Joyent, Inc. - -var assert = require('assert'); -var Stream = require('stream').Stream; -var util = require('util'); - - -///--- Globals - -/* JSSTYLED */ -var UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/; - - -///--- Internal - -function _capitalize(str) { - return (str.charAt(0).toUpperCase() + str.slice(1)); -} - -function _toss(name, expected, oper, arg, actual) { - throw new assert.AssertionError({ - message: util.format('%s (%s) is required', name, expected), - actual: (actual === undefined) ? typeof (arg) : actual(arg), - expected: expected, - operator: oper || '===', - stackStartFunction: _toss.caller - }); -} - -function _getClass(arg) { - return (Object.prototype.toString.call(arg).slice(8, -1)); -} - -function noop() { - // Why even bother with asserts? -} - - -///--- Exports - -var types = { - bool: { - check: function (arg) { return typeof (arg) === 'boolean'; } - }, - func: { - check: function (arg) { return typeof (arg) === 'function'; } - }, - string: { - check: function (arg) { return typeof (arg) === 'string'; } - }, - object: { - check: function (arg) { - return typeof (arg) === 'object' && arg !== null; - } - }, - number: { - check: function (arg) { - return typeof (arg) === 'number' && !isNaN(arg); - } - }, - finite: { - check: function (arg) { - return typeof (arg) === 'number' && !isNaN(arg) && isFinite(arg); - } - }, - buffer: { - check: function (arg) { return Buffer.isBuffer(arg); }, - operator: 'Buffer.isBuffer' - }, - array: { - check: function (arg) { return Array.isArray(arg); }, - operator: 'Array.isArray' - }, - stream: { - check: function (arg) { return arg instanceof Stream; }, - operator: 'instanceof', - actual: _getClass - }, - date: { - check: function (arg) { return arg instanceof Date; }, - operator: 'instanceof', - actual: _getClass - }, - regexp: { - check: function (arg) { return arg instanceof RegExp; }, - operator: 'instanceof', - actual: _getClass - }, - uuid: { - check: function (arg) { - return typeof (arg) === 'string' && UUID_REGEXP.test(arg); - }, - operator: 'isUUID' - } -}; - -function _setExports(ndebug) { - var keys = Object.keys(types); - var out; - - /* re-export standard assert */ - if (process.env.NODE_NDEBUG) { - out = noop; - } else { - out = function (arg, msg) { - if (!arg) { - _toss(msg, 'true', arg); - } - }; - } - - /* standard checks */ - keys.forEach(function (k) { - if (ndebug) { - out[k] = noop; - return; - } - var type = types[k]; - out[k] = function (arg, msg) { - if (!type.check(arg)) { - _toss(msg, k, type.operator, arg, type.actual); - } - }; - }); - - /* optional checks */ - keys.forEach(function (k) { - var name = 'optional' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - out[name] = function (arg, msg) { - if (arg === undefined || arg === null) { - return; - } - if (!type.check(arg)) { - _toss(msg, k, type.operator, arg, type.actual); - } - }; - }); - - /* arrayOf checks */ - keys.forEach(function (k) { - var name = 'arrayOf' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - var expected = '[' + k + ']'; - out[name] = function (arg, msg) { - if (!Array.isArray(arg)) { - _toss(msg, expected, type.operator, arg, type.actual); - } - var i; - for (i = 0; i < arg.length; i++) { - if (!type.check(arg[i])) { - _toss(msg, expected, type.operator, arg, type.actual); - } - } - }; - }); - - /* optionalArrayOf checks */ - keys.forEach(function (k) { - var name = 'optionalArrayOf' + _capitalize(k); - if (ndebug) { - out[name] = noop; - return; - } - var type = types[k]; - var expected = '[' + k + ']'; - out[name] = function (arg, msg) { - if (arg === undefined || arg === null) { - return; - } - if (!Array.isArray(arg)) { - _toss(msg, expected, type.operator, arg, type.actual); - } - var i; - for (i = 0; i < arg.length; i++) { - if (!type.check(arg[i])) { - _toss(msg, expected, type.operator, arg, type.actual); - } - } - }; - }); - - /* re-export built-in assertions */ - Object.keys(assert).forEach(function (k) { - if (k === 'AssertionError') { - out[k] = assert[k]; - return; - } - if (ndebug) { - out[k] = noop; - return; - } - out[k] = assert[k]; - }); - - /* export ourselves (for unit tests _only_) */ - out._setExports = _setExports; - - return out; -} - -module.exports = _setExports(process.env.NODE_NDEBUG); diff --git a/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/package.json b/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/package.json deleted file mode 100644 index 348375537..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/getpass/node_modules/assert-plus/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_args": [ - [ - "assert-plus@^1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/getpass" - ] - ], - "_from": "assert-plus@>=1.0.0 <2.0.0", - "_id": "assert-plus@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/getpass/assert-plus", - "_nodeVersion": "0.10.40", - "_npmUser": { - "email": "patrick.f.mooney@gmail.com", - "name": "pfmooney" - }, - "_npmVersion": "3.3.9", - "_phantomChildren": {}, - "_requested": { - "name": "assert-plus", - "raw": "assert-plus@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/getpass" - ], - "_resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "_shasum": "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525", - "_shrinkwrap": null, - "_spec": "assert-plus@^1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/getpass", - "author": { - "email": "mcavage@gmail.com", - "name": "Mark Cavage" - }, - "bugs": { - "url": "https://github.com/mcavage/node-assert-plus/issues" - }, - "contributors": [ - { - "email": "dave@daveeddy.com", - "name": "Dave Eddy" - }, - { - "email": "fred.kuo@joyent.com", - "name": "Fred Kuo" - }, - { - "email": "ralphtheninja@riseup.net", - "name": "Lars-Magnus Skog" - }, - { - "email": "mcavage@gmail.com", - "name": "Mark Cavage" - }, - { - "email": "pmooney@pfmooney.com", - "name": "Patrick Mooney" - }, - { - "email": "robert.gulewich@joyent.com", - "name": "Rob Gulewich" - } - ], - "dependencies": {}, - "description": "Extra assertions on top of node's assert module", - "devDependencies": { - "faucet": "0.0.1", - "tape": "4.2.2" - }, - "directories": {}, - "dist": { - "shasum": "f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525", - "tarball": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" - }, - "engines": { - "node": ">=0.8" - }, - "homepage": "https://github.com/mcavage/node-assert-plus#readme", - "license": "MIT", - "main": "./assert.js", - "maintainers": [ - { - "email": "mcavage@gmail.com", - "name": "mcavage" - }, - { - "email": "patrick.f.mooney@gmail.com", - "name": "pfmooney" - } - ], - "name": "assert-plus", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/mcavage/node-assert-plus.git" - }, - "scripts": { - "test": "tape tests/*.js | ./node_modules/.bin/faucet" - }, - "version": "1.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/getpass/package.json b/fundamentals/bug-challenge-es6/node_modules/getpass/package.json deleted file mode 100644 index 30626deaa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/getpass/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_args": [ - [ - "getpass@^0.1.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/sshpk" - ] - ], - "_from": "getpass@>=0.1.1 <0.2.0", - "_id": "getpass@0.1.6", - "_inCache": true, - "_installable": true, - "_location": "/getpass", - "_nodeVersion": "0.12.9", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/getpass-0.1.6.tgz_1461907090215_0.6450737570412457" - }, - "_npmUser": { - "email": "alex@cooperi.net", - "name": "arekinath" - }, - "_npmVersion": "2.14.9", - "_phantomChildren": {}, - "_requested": { - "name": "getpass", - "raw": "getpass@^0.1.1", - "rawSpec": "^0.1.1", - "scope": null, - "spec": ">=0.1.1 <0.2.0", - "type": "range" - }, - "_requiredBy": [ - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz", - "_shasum": "283ffd9fc1256840875311c1b60e8c40187110e6", - "_shrinkwrap": null, - "_spec": "getpass@^0.1.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/sshpk", - "author": { - "email": "alex.wilson@joyent.com", - "name": "Alex Wilson" - }, - "bugs": { - "url": "https://github.com/arekinath/node-getpass/issues" - }, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "description": "getpass for node.js", - "devDependencies": { - "json": "^9.0.3", - "pty.js": "^0.3.0", - "tape": "^4.4.0" - }, - "directories": {}, - "dist": { - "shasum": "283ffd9fc1256840875311c1b60e8c40187110e6", - "tarball": "https://registry.npmjs.org/getpass/-/getpass-0.1.6.tgz" - }, - "gitHead": "e7fdf43ad60aa520f894d41856852aa320f36646", - "homepage": "https://github.com/arekinath/node-getpass#readme", - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "alex@cooperi.net", - "name": "arekinath" - } - ], - "name": "getpass", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/arekinath/node-getpass.git" - }, - "scripts": { - "test": "tape test/*.test.js" - }, - "version": "0.1.6" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/glob-base/LICENSE b/fundamentals/bug-challenge-es6/node_modules/glob-base/LICENSE deleted file mode 100644 index 65f90aca8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob-base/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/glob-base/README.md b/fundamentals/bug-challenge-es6/node_modules/glob-base/README.md deleted file mode 100644 index 1da2e82f1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob-base/README.md +++ /dev/null @@ -1,158 +0,0 @@ -# glob-base [![NPM version](https://badge.fury.io/js/glob-base.svg)](http://badge.fury.io/js/glob-base) [![Build Status](https://travis-ci.org/jonschlinkert/glob-base.svg)](https://travis-ci.org/jonschlinkert/glob-base) - -> Returns an object with the (non-glob) base path and the actual pattern. - -Use [glob-parent](https://github.com/es128/glob-parent) if you just want the base path. - -## Install with [npm](npmjs.org) - -```bash -npm i glob-base --save -``` - -## Related projects -* [glob-parent](https://github.com/es128/glob-parent): Strips glob magic from a string to provide the parent path -* [micromatch](https://github.com/jonschlinkert/micromatch): Glob matching for javascript/node.js. A faster alternative to minimatch (10-45x faster on avg), with all the features you're used to using in your Grunt and gulp tasks. -* [parse-glob](https://github.com/jonschlinkert/parse-glob): Parse a glob pattern into an object of tokens. -* [is-glob](https://github.com/jonschlinkert/is-glob): Returns `true` if the given string looks like a glob pattern. -* [braces](https://github.com/jonschlinkert/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification. -* [fill-range](https://github.com/jonschlinkert/fill-range): Fill in a range of numbers or letters, optionally passing an increment or multiplier to use. -* [expand-range](https://github.com/jonschlinkert/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch. - -## Usage - -```js -var globBase = require('glob-base'); - -globBase('a/b/.git/'); -//=> { base: 'a/b/.git/', isGlob: false, glob: '' }) - -globBase('a/b/**/e'); -//=> { base: 'a/b', isGlob: true, glob: '**/e' } - -globBase('a/b/*.{foo,bar}'); -//=> { base: 'a/b', isGlob: true, glob: '*.{foo,bar}' } - -globBase('a/b/.git/**'); -//=> { base: 'a/b/.git', isGlob: true, glob: '**' } - -globBase('a/b/c/*.md'); -//=> { base: 'a/b/c', isGlob: true, glob: '*.md' } - -globBase('a/b/c/.*.md'); -//=> { base: 'a/b/c', isGlob: true, glob: '.*.md' } - -globBase('a/b/{c,d}'); -//=> { base: 'a/b', isGlob: true, glob: '{c,d}' } - -globBase('!*.min.js'); -//=> { base: '.', isGlob: true, glob: '!*.min.js' } - -globBase('!foo'); -//=> { base: '.', isGlob: true, glob: '!foo' } - -globBase('!foo/(a|b).min.js'); -//=> { base: '.', isGlob: true, glob: '!foo/(a|b).min.js' } - -globBase(''); -//=> { base: '.', isGlob: false, glob: '' } - -globBase('**/*.md'); -//=> { base: '.', isGlob: true, glob: '**/*.md' } - -globBase('**/*.min.js'); -//=> { base: '.', isGlob: true, glob: '**/*.min.js' } - -globBase('**/.*'); -//=> { base: '.', isGlob: true, glob: '**/.*' } - -globBase('**/d'); -//=> { base: '.', isGlob: true, glob: '**/d' } - -globBase('*.*'); -//=> { base: '.', isGlob: true, glob: '*.*' } - -globBase('*.min.js'); -//=> { base: '.', isGlob: true, glob: '*.min.js' } - -globBase('*/*'); -//=> { base: '.', isGlob: true, glob: '*/*' } - -globBase('*b'); -//=> { base: '.', isGlob: true, glob: '*b' } - -globBase('.'); -//=> { base: '.', isGlob: false, glob: '.' } - -globBase('.*'); -//=> { base: '.', isGlob: true, glob: '.*' } - -globBase('./*'); -//=> { base: '.', isGlob: true, glob: '*' } - -globBase('/a'); -//=> { base: '/', isGlob: false, glob: 'a' } - -globBase('@(a|b)/e.f.g/'); -//=> { base: '.', isGlob: true, glob: '@(a|b)/e.f.g/' } - -globBase('[a-c]b*'); -//=> { base: '.', isGlob: true, glob: '[a-c]b*' } - -globBase('a'); -//=> { base: '.', isGlob: false, glob: 'a' } - -globBase('a.min.js'); -//=> { base: '.', isGlob: false, glob: 'a.min.js' } - -globBase('a/'); -//=> { base: 'a/', isGlob: false, glob: '' } - -globBase('a/**/j/**/z/*.md'); -//=> { base: 'a', isGlob: true, glob: '**/j/**/z/*.md' } - -globBase('a/*/c/*.md'); -//=> { base: 'a', isGlob: true, glob: '*/c/*.md' } - -globBase('a/?/c.md'); -//=> { base: 'a', isGlob: true, glob: '?/c.md' } - -globBase('a/??/c.js'); -//=> { base: 'a', isGlob: true, glob: '??/c.js' } - -globBase('a?b'); -//=> { base: '.', isGlob: true, glob: 'a?b' } - -globBase('bb'); -//=> { base: '.', isGlob: false, glob: 'bb' } - -globBase('c.md'); -//=> { base: '.', isGlob: false, glob: 'c.md' } -``` - -## Running tests -Install dev dependencies. - -```bash -npm i -d && npm test -``` - - -## Contributing -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/glob-base/issues) - - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License -Copyright (c) 2015 Jon Schlinkert -Released under the MIT license - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on March 08, 2015._ diff --git a/fundamentals/bug-challenge-es6/node_modules/glob-base/index.js b/fundamentals/bug-challenge-es6/node_modules/glob-base/index.js deleted file mode 100644 index 564b4a885..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob-base/index.js +++ /dev/null @@ -1,51 +0,0 @@ -/*! - * glob-base - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var path = require('path'); -var parent = require('glob-parent'); -var isGlob = require('is-glob'); - -module.exports = function globBase(pattern) { - if (typeof pattern !== 'string') { - throw new TypeError('glob-base expects a string.'); - } - - var res = {}; - res.base = parent(pattern); - res.isGlob = isGlob(pattern); - - if (res.base !== '.') { - res.glob = pattern.substr(res.base.length); - if (res.glob.charAt(0) === '/') { - res.glob = res.glob.substr(1); - } - } else { - res.glob = pattern; - } - - if (!res.isGlob) { - res.base = dirname(pattern); - res.glob = res.base !== '.' - ? pattern.substr(res.base.length) - : pattern; - } - - if (res.glob.substr(0, 2) === './') { - res.glob = res.glob.substr(2); - } - if (res.glob.charAt(0) === '/') { - res.glob = res.glob.substr(1); - } - return res; -}; - -function dirname(glob) { - if (glob.slice(-1) === '/') return glob; - return path.dirname(glob); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/glob-base/package.json b/fundamentals/bug-challenge-es6/node_modules/glob-base/package.json deleted file mode 100644 index 8bc12720f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob-base/package.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "_args": [ - [ - "glob-base@^0.3.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/parse-glob" - ] - ], - "_from": "glob-base@>=0.3.0 <0.4.0", - "_id": "glob-base@0.3.0", - "_inCache": true, - "_installable": true, - "_location": "/glob-base", - "_nodeVersion": "0.12.7", - "_npmUser": { - "email": "elan.shanker+npm@gmail.com", - "name": "es128" - }, - "_npmVersion": "2.11.3", - "_phantomChildren": {}, - "_requested": { - "name": "glob-base", - "raw": "glob-base@^0.3.0", - "rawSpec": "^0.3.0", - "scope": null, - "spec": ">=0.3.0 <0.4.0", - "type": "range" - }, - "_requiredBy": [ - "/parse-glob" - ], - "_resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "_shasum": "dbb164f6221b1c0b1ccf82aea328b497df0ea3c4", - "_shrinkwrap": null, - "_spec": "glob-base@^0.3.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/parse-glob", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/glob-base/issues" - }, - "dependencies": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "description": "Returns an object with the (non-glob) base path and the actual pattern.", - "devDependencies": { - "mocha": "*", - "should": "^5.1.0" - }, - "directories": {}, - "dist": { - "shasum": "dbb164f6221b1c0b1ccf82aea328b497df0ea3c4", - "tarball": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "adbc0ab07ec8a85f76ffd1b54dd41cdb9d1d0b83", - "homepage": "https://github.com/jonschlinkert/glob-base", - "keywords": [ - "base", - "directory", - "dirname", - "expression", - "glob", - "parent", - "path", - "pattern", - "regex", - "regular", - "root" - ], - "license": { - "type": "MIT", - "url": "https://github.com/jonschlinkert/glob-base/blob/master/LICENSE" - }, - "main": "index.js", - "maintainers": [ - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - }, - { - "email": "elan.shanker+npm@gmail.com", - "name": "es128" - }, - { - "email": "github@sellside.com", - "name": "jonschlinkert" - } - ], - "name": "glob-base", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/jonschlinkert/glob-base.git" - }, - "scripts": { - "test": "mocha" - }, - "version": "0.3.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/glob-parent/.npmignore b/fundamentals/bug-challenge-es6/node_modules/glob-parent/.npmignore deleted file mode 100644 index 33e391f0e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob-parent/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -.DS_Store -npm-debug.log -coverage diff --git a/fundamentals/bug-challenge-es6/node_modules/glob-parent/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/glob-parent/.travis.yml deleted file mode 100644 index 18fc42f69..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob-parent/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - "4" - - "iojs-v3" - - "iojs-v2" - - "iojs-v1" - - "0.12" - - "0.10" diff --git a/fundamentals/bug-challenge-es6/node_modules/glob-parent/LICENSE b/fundamentals/bug-challenge-es6/node_modules/glob-parent/LICENSE deleted file mode 100644 index 734076d8a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob-parent/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) 2015 Elan Shanker - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/glob-parent/README.md b/fundamentals/bug-challenge-es6/node_modules/glob-parent/README.md deleted file mode 100644 index ff5310d3b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob-parent/README.md +++ /dev/null @@ -1,43 +0,0 @@ -glob-parent [![Build Status](https://travis-ci.org/es128/glob-parent.svg)](https://travis-ci.org/es128/glob-parent) [![Coverage Status](https://img.shields.io/coveralls/es128/glob-parent.svg)](https://coveralls.io/r/es128/glob-parent?branch=master) -====== -Javascript module to extract the non-magic parent path from a glob string. - -[![NPM](https://nodei.co/npm/glob-parent.png?downloads=true&downloadRank=true&stars=true)](https://nodei.co/npm/glob-parent/) -[![NPM](https://nodei.co/npm-dl/glob-parent.png?height=3&months=9)](https://nodei.co/npm-dl/glob-parent/) - -Usage ------ -```sh -npm install glob-parent --save -``` - -```js -var globParent = require('glob-parent'); - -globParent('path/to/*.js'); // 'path/to' -globParent('/root/path/to/*.js'); // '/root/path/to' -globParent('/*.js'); // '/' -globParent('*.js'); // '.' -globParent('**/*.js'); // '.' -globParent('path/{to,from}'); // 'path' -globParent('path/!(to|from)'); // 'path' -globParent('path/?(to|from)'); // 'path' -globParent('path/+(to|from)'); // 'path' -globParent('path/*(to|from)'); // 'path' -globParent('path/@(to|from)'); // 'path' -globParent('path/**/*'); // 'path' - -// if provided a non-glob path, returns the nearest dir -globParent('path/foo/bar.js'); // 'path/foo' -globParent('path/foo/'); // 'path/foo' -globParent('path/foo'); // 'path' (see issue #3 for details) - -``` - -Change Log ----------- -[See release notes page on GitHub](https://github.com/es128/glob-parent/releases) - -License -------- -[ISC](https://raw.github.com/es128/glob-parent/master/LICENSE) diff --git a/fundamentals/bug-challenge-es6/node_modules/glob-parent/index.js b/fundamentals/bug-challenge-es6/node_modules/glob-parent/index.js deleted file mode 100644 index 61615f1ac..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob-parent/index.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -var path = require('path'); -var isglob = require('is-glob'); - -module.exports = function globParent(str) { - str += 'a'; // preserves full path in case of trailing path separator - do {str = path.dirname(str)} while (isglob(str)); - return str; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/glob-parent/package.json b/fundamentals/bug-challenge-es6/node_modules/glob-parent/package.json deleted file mode 100644 index 2458f9e40..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob-parent/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_args": [ - [ - "glob-parent@^2.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/glob-base" - ] - ], - "_from": "glob-parent@>=2.0.0 <3.0.0", - "_id": "glob-parent@2.0.0", - "_inCache": true, - "_installable": true, - "_location": "/glob-parent", - "_nodeVersion": "3.0.0", - "_npmUser": { - "email": "elan.shanker+npm@gmail.com", - "name": "es128" - }, - "_npmVersion": "2.13.3", - "_phantomChildren": {}, - "_requested": { - "name": "glob-parent", - "raw": "glob-parent@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/glob-base" - ], - "_resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "_shasum": "81383d72db054fcccf5336daa902f182f6edbb28", - "_shrinkwrap": null, - "_spec": "glob-parent@^2.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/glob-base", - "author": { - "name": "Elan Shanker" - }, - "bugs": { - "url": "https://github.com/es128/glob-parent/issues" - }, - "dependencies": { - "is-glob": "^2.0.0" - }, - "description": "Strips glob magic from a string to provide the parent path", - "devDependencies": { - "coveralls": "^2.11.2", - "istanbul": "^0.3.5", - "mocha": "^2.1.0" - }, - "directories": {}, - "dist": { - "shasum": "81383d72db054fcccf5336daa902f182f6edbb28", - "tarball": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz" - }, - "gitHead": "a956910c7ccb5eafd1b3fe900ceb6335cc5b6d3d", - "homepage": "https://github.com/es128/glob-parent", - "keywords": [ - "glob", - "parent", - "strip", - "path", - "directory", - "base" - ], - "license": "ISC", - "main": "index.js", - "maintainers": [ - { - "email": "elan.shanker+npm@gmail.com", - "name": "es128" - } - ], - "name": "glob-parent", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/es128/glob-parent.git" - }, - "scripts": { - "test": "istanbul cover _mocha && cat ./coverage/lcov.info | coveralls" - }, - "version": "2.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/glob-parent/test.js b/fundamentals/bug-challenge-es6/node_modules/glob-parent/test.js deleted file mode 100644 index 01156d2ff..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob-parent/test.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var gp = require('./'); -var assert = require('assert'); - -describe('glob-parent', function() { - it('should strip glob magic to return parent path', function() { - assert.equal(gp('path/to/*.js'), 'path/to'); - assert.equal(gp('/root/path/to/*.js'), '/root/path/to'); - assert.equal(gp('/*.js'), '/'); - assert.equal(gp('*.js'), '.'); - assert.equal(gp('**/*.js'), '.'); - assert.equal(gp('path/{to,from}'), 'path'); - assert.equal(gp('path/!(to|from)'), 'path'); - assert.equal(gp('path/?(to|from)'), 'path'); - assert.equal(gp('path/+(to|from)'), 'path'); - assert.equal(gp('path/*(to|from)'), 'path'); - assert.equal(gp('path/@(to|from)'), 'path'); - assert.equal(gp('path/**/*'), 'path'); - assert.equal(gp('path/**/subdir/foo.*'), 'path'); - }); - - it('should return parent dirname from non-glob paths', function() { - assert.equal(gp('path/foo/bar.js'), 'path/foo'); - assert.equal(gp('path/foo/'), 'path/foo'); - assert.equal(gp('path/foo'), 'path'); - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/glob/LICENSE b/fundamentals/bug-challenge-es6/node_modules/glob/LICENSE deleted file mode 100644 index 19129e315..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/glob/README.md b/fundamentals/bug-challenge-es6/node_modules/glob/README.md deleted file mode 100644 index 063cf950a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob/README.md +++ /dev/null @@ -1,377 +0,0 @@ -[![Build Status](https://travis-ci.org/isaacs/node-glob.svg?branch=master)](https://travis-ci.org/isaacs/node-glob/) [![Dependency Status](https://david-dm.org/isaacs/node-glob.svg)](https://david-dm.org/isaacs/node-glob) [![devDependency Status](https://david-dm.org/isaacs/node-glob/dev-status.svg)](https://david-dm.org/isaacs/node-glob#info=devDependencies) [![optionalDependency Status](https://david-dm.org/isaacs/node-glob/optional-status.svg)](https://david-dm.org/isaacs/node-glob#info=optionalDependencies) - -# Glob - -Match files using the patterns the shell uses, like stars and stuff. - -This is a glob implementation in JavaScript. It uses the `minimatch` -library to do its matching. - -![](oh-my-glob.gif) - -## Usage - -```javascript -var glob = require("glob") - -// options is optional -glob("**/*.js", options, function (er, files) { - // files is an array of filenames. - // If the `nonull` option is set, and nothing - // was found, then files is ["**/*.js"] - // er is an error object or null. -}) -``` - -## Glob Primer - -"Globs" are the patterns you type when you do stuff like `ls *.js` on -the command line, or put `build/*` in a `.gitignore` file. - -Before parsing the path part patterns, braced sections are expanded -into a set. Braced sections start with `{` and end with `}`, with any -number of comma-delimited sections within. Braced sections may contain -slash characters, so `a{/b/c,bcd}` would expand into `a/b/c` and `abcd`. - -The following characters have special magic meaning when used in a -path portion: - -* `*` Matches 0 or more characters in a single path portion -* `?` Matches 1 character -* `[...]` Matches a range of characters, similar to a RegExp range. - If the first character of the range is `!` or `^` then it matches - any character not in the range. -* `!(pattern|pattern|pattern)` Matches anything that does not match - any of the patterns provided. -* `?(pattern|pattern|pattern)` Matches zero or one occurrence of the - patterns provided. -* `+(pattern|pattern|pattern)` Matches one or more occurrences of the - patterns provided. -* `*(a|b|c)` Matches zero or more occurrences of the patterns provided -* `@(pattern|pat*|pat?erN)` Matches exactly one of the patterns - provided -* `**` If a "globstar" is alone in a path portion, then it matches - zero or more directories and subdirectories searching for matches. - It does not crawl symlinked directories. - -### Dots - -If a file or directory path portion has a `.` as the first character, -then it will not match any glob pattern unless that pattern's -corresponding path part also has a `.` as its first character. - -For example, the pattern `a/.*/c` would match the file at `a/.b/c`. -However the pattern `a/*/c` would not, because `*` does not start with -a dot character. - -You can make glob treat dots as normal characters by setting -`dot:true` in the options. - -### Basename Matching - -If you set `matchBase:true` in the options, and the pattern has no -slashes in it, then it will seek for any file anywhere in the tree -with a matching basename. For example, `*.js` would match -`test/simple/basic.js`. - -### Negation - -The intent for negation would be for a pattern starting with `!` to -match everything that *doesn't* match the supplied pattern. However, -the implementation is weird, and for the time being, this should be -avoided. The behavior is deprecated in version 5, and will be removed -entirely in version 6. - -### Empty Sets - -If no matching files are found, then an empty array is returned. This -differs from the shell, where the pattern itself is returned. For -example: - - $ echo a*s*d*f - a*s*d*f - -To get the bash-style behavior, set the `nonull:true` in the options. - -### See Also: - -* `man sh` -* `man bash` (Search for "Pattern Matching") -* `man 3 fnmatch` -* `man 5 gitignore` -* [minimatch documentation](https://github.com/isaacs/minimatch) - -## glob.hasMagic(pattern, [options]) - -Returns `true` if there are any special characters in the pattern, and -`false` otherwise. - -Note that the options affect the results. If `noext:true` is set in -the options object, then `+(a|b)` will not be considered a magic -pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}` -then that is considered magical, unless `nobrace:true` is set in the -options. - -## glob(pattern, [options], cb) - -* `pattern` {String} Pattern to be matched -* `options` {Object} -* `cb` {Function} - * `err` {Error | null} - * `matches` {Array} filenames found matching the pattern - -Perform an asynchronous glob search. - -## glob.sync(pattern, [options]) - -* `pattern` {String} Pattern to be matched -* `options` {Object} -* return: {Array} filenames found matching the pattern - -Perform a synchronous glob search. - -## Class: glob.Glob - -Create a Glob object by instantiating the `glob.Glob` class. - -```javascript -var Glob = require("glob").Glob -var mg = new Glob(pattern, options, cb) -``` - -It's an EventEmitter, and starts walking the filesystem to find matches -immediately. - -### new glob.Glob(pattern, [options], [cb]) - -* `pattern` {String} pattern to search for -* `options` {Object} -* `cb` {Function} Called when an error occurs, or matches are found - * `err` {Error | null} - * `matches` {Array} filenames found matching the pattern - -Note that if the `sync` flag is set in the options, then matches will -be immediately available on the `g.found` member. - -### Properties - -* `minimatch` The minimatch object that the glob uses. -* `options` The options object passed in. -* `aborted` Boolean which is set to true when calling `abort()`. There - is no way at this time to continue a glob search after aborting, but - you can re-use the statCache to avoid having to duplicate syscalls. -* `cache` Convenience object. Each field has the following possible - values: - * `false` - Path does not exist - * `true` - Path exists - * `'DIR'` - Path exists, and is not a directory - * `'FILE'` - Path exists, and is a directory - * `[file, entries, ...]` - Path exists, is a directory, and the - array value is the results of `fs.readdir` -* `statCache` Cache of `fs.stat` results, to prevent statting the same - path multiple times. -* `symlinks` A record of which paths are symbolic links, which is - relevant in resolving `**` patterns. -* `realpathCache` An optional object which is passed to `fs.realpath` - to minimize unnecessary syscalls. It is stored on the instantiated - Glob object, and may be re-used. - -### Events - -* `end` When the matching is finished, this is emitted with all the - matches found. If the `nonull` option is set, and no match was found, - then the `matches` list contains the original pattern. The matches - are sorted, unless the `nosort` flag is set. -* `match` Every time a match is found, this is emitted with the matched. -* `error` Emitted when an unexpected error is encountered, or whenever - any fs error occurs if `options.strict` is set. -* `abort` When `abort()` is called, this event is raised. - -### Methods - -* `pause` Temporarily stop the search -* `resume` Resume the search -* `abort` Stop the search forever - -### Options - -All the options that can be passed to Minimatch can also be passed to -Glob to change pattern matching behavior. Also, some have been added, -or have glob-specific ramifications. - -All options are false by default, unless otherwise noted. - -All options are added to the Glob object, as well. - -If you are running many `glob` operations, you can pass a Glob object -as the `options` argument to a subsequent operation to shortcut some -`stat` and `readdir` calls. At the very least, you may pass in shared -`symlinks`, `statCache`, `realpathCache`, and `cache` options, so that -parallel glob operations will be sped up by sharing information about -the filesystem. - -* `cwd` The current working directory in which to search. Defaults - to `process.cwd()`. -* `root` The place where patterns starting with `/` will be mounted - onto. Defaults to `path.resolve(options.cwd, "/")` (`/` on Unix - systems, and `C:\` or some such on Windows.) -* `dot` Include `.dot` files in normal matches and `globstar` matches. - Note that an explicit dot in a portion of the pattern will always - match dot files. -* `nomount` By default, a pattern starting with a forward-slash will be - "mounted" onto the root setting, so that a valid filesystem path is - returned. Set this flag to disable that behavior. -* `mark` Add a `/` character to directory matches. Note that this - requires additional stat calls. -* `nosort` Don't sort the results. -* `stat` Set to true to stat *all* results. This reduces performance - somewhat, and is completely unnecessary, unless `readdir` is presumed - to be an untrustworthy indicator of file existence. -* `silent` When an unusual error is encountered when attempting to - read a directory, a warning will be printed to stderr. Set the - `silent` option to true to suppress these warnings. -* `strict` When an unusual error is encountered when attempting to - read a directory, the process will just continue on in search of - other matches. Set the `strict` option to raise an error in these - cases. -* `cache` See `cache` property above. Pass in a previously generated - cache object to save some fs calls. -* `statCache` A cache of results of filesystem information, to prevent - unnecessary stat calls. While it should not normally be necessary - to set this, you may pass the statCache from one glob() call to the - options object of another, if you know that the filesystem will not - change between calls. (See "Race Conditions" below.) -* `symlinks` A cache of known symbolic links. You may pass in a - previously generated `symlinks` object to save `lstat` calls when - resolving `**` matches. -* `sync` DEPRECATED: use `glob.sync(pattern, opts)` instead. -* `nounique` In some cases, brace-expanded patterns can result in the - same file showing up multiple times in the result set. By default, - this implementation prevents duplicates in the result set. Set this - flag to disable that behavior. -* `nonull` Set to never return an empty set, instead returning a set - containing the pattern itself. This is the default in glob(3). -* `debug` Set to enable debug logging in minimatch and glob. -* `nobrace` Do not expand `{a,b}` and `{1..3}` brace sets. -* `noglobstar` Do not match `**` against multiple filenames. (Ie, - treat it as a normal `*` instead.) -* `noext` Do not match `+(a|b)` "extglob" patterns. -* `nocase` Perform a case-insensitive match. Note: on - case-insensitive filesystems, non-magic patterns will match by - default, since `stat` and `readdir` will not raise errors. -* `matchBase` Perform a basename-only match if the pattern does not - contain any slash characters. That is, `*.js` would be treated as - equivalent to `**/*.js`, matching all js files in all directories. -* `nodir` Do not match directories, only files. (Note: to match - *only* directories, simply put a `/` at the end of the pattern.) -* `ignore` Add a pattern or an array of patterns to exclude matches. -* `follow` Follow symlinked directories when expanding `**` patterns. - Note that this can result in a lot of duplicate references in the - presence of cyclic links. -* `realpath` Set to true to call `fs.realpath` on all of the results. - In the case of a symlink that cannot be resolved, the full absolute - path to the matched entry is returned (though it will usually be a - broken symlink) -* `nonegate` Suppress deprecated `negate` behavior. (See below.) - Default=true -* `nocomment` Suppress deprecated `comment` behavior. (See below.) - Default=true - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between node-glob and other -implementations, and are intentional. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.3, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. - -Note that symlinked directories are not crawled as part of a `**`, -though their contents may match against subsequent portions of the -pattern. This prevents infinite loops and duplicates and the like. - -If an escaped pattern has no matches, and the `nonull` flag is set, -then glob returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`glob.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. - -### Comments and Negation - -**Note**: In version 5 of this module, negation and comments are -**disabled** by default. You can explicitly set `nonegate:false` or -`nocomment:false` to re-enable them. They are going away entirely in -version 6. - -The intent for negation would be for a pattern starting with `!` to -match everything that *doesn't* match the supplied pattern. However, -the implementation is weird. It is better to use the `ignore` option -to set a pattern or set of patterns to exclude from matches. If you -want the "everything except *x*" type of behavior, you can use `**` as -the main pattern, and set an `ignore` for the things to exclude. - -The comments feature is added in minimatch, primarily to more easily -support use cases like ignore files, where a `#` at the start of a -line makes the pattern "empty". However, in the context of a -straightforward filesystem globber, "comments" don't make much sense. - -## Windows - -**Please only use forward-slashes in glob expressions.** - -Though windows uses either `/` or `\` as its path separator, only `/` -characters are used by this glob implementation. You must use -forward-slashes **only** in glob expressions. Back-slashes will always -be interpreted as escape characters, not path separators. - -Results from absolute patterns such as `/foo/*` are mounted onto the -root setting using `path.join`. On windows, this will by default result -in `/foo/*` matching `C:\foo\bar.txt`. - -## Race Conditions - -Glob searching, by its very nature, is susceptible to race conditions, -since it relies on directory walking and such. - -As a result, it is possible that a file that exists when glob looks for -it may have been deleted or modified by the time it returns the result. - -As part of its internal implementation, this program caches all stat -and readdir calls that it makes, in order to cut down on system -overhead. However, this also makes it even more susceptible to races, -especially if the cache or statCache objects are reused between glob -calls. - -Users are thus advised not to use a glob result as a guarantee of -filesystem state in the face of rapid changes. For the vast majority -of operations, this is never a problem. - -## Contributing - -Any change to behavior (including bugfixes) must come with a test. - -Patches that fail tests or reduce performance will be rejected. - -``` -# to run tests -npm test - -# to re-generate test fixtures -npm run test-regen - -# to benchmark against bash/zsh -npm run bench - -# to profile javascript -npm run prof -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/glob/common.js b/fundamentals/bug-challenge-es6/node_modules/glob/common.js deleted file mode 100644 index e36a631ca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob/common.js +++ /dev/null @@ -1,245 +0,0 @@ -exports.alphasort = alphasort -exports.alphasorti = alphasorti -exports.setopts = setopts -exports.ownProp = ownProp -exports.makeAbs = makeAbs -exports.finish = finish -exports.mark = mark -exports.isIgnored = isIgnored -exports.childrenIgnored = childrenIgnored - -function ownProp (obj, field) { - return Object.prototype.hasOwnProperty.call(obj, field) -} - -var path = require("path") -var minimatch = require("minimatch") -var isAbsolute = require("path-is-absolute") -var Minimatch = minimatch.Minimatch - -function alphasorti (a, b) { - return a.toLowerCase().localeCompare(b.toLowerCase()) -} - -function alphasort (a, b) { - return a.localeCompare(b) -} - -function setupIgnores (self, options) { - self.ignore = options.ignore || [] - - if (!Array.isArray(self.ignore)) - self.ignore = [self.ignore] - - if (self.ignore.length) { - self.ignore = self.ignore.map(ignoreMap) - } -} - -function ignoreMap (pattern) { - var gmatcher = null - if (pattern.slice(-3) === '/**') { - var gpattern = pattern.replace(/(\/\*\*)+$/, '') - gmatcher = new Minimatch(gpattern) - } - - return { - matcher: new Minimatch(pattern), - gmatcher: gmatcher - } -} - -function setopts (self, pattern, options) { - if (!options) - options = {} - - // base-matching: just use globstar for that. - if (options.matchBase && -1 === pattern.indexOf("/")) { - if (options.noglobstar) { - throw new Error("base matching requires globstar") - } - pattern = "**/" + pattern - } - - self.silent = !!options.silent - self.pattern = pattern - self.strict = options.strict !== false - self.realpath = !!options.realpath - self.realpathCache = options.realpathCache || Object.create(null) - self.follow = !!options.follow - self.dot = !!options.dot - self.mark = !!options.mark - self.nodir = !!options.nodir - if (self.nodir) - self.mark = true - self.sync = !!options.sync - self.nounique = !!options.nounique - self.nonull = !!options.nonull - self.nosort = !!options.nosort - self.nocase = !!options.nocase - self.stat = !!options.stat - self.noprocess = !!options.noprocess - - self.maxLength = options.maxLength || Infinity - self.cache = options.cache || Object.create(null) - self.statCache = options.statCache || Object.create(null) - self.symlinks = options.symlinks || Object.create(null) - - setupIgnores(self, options) - - self.changedCwd = false - var cwd = process.cwd() - if (!ownProp(options, "cwd")) - self.cwd = cwd - else { - self.cwd = options.cwd - self.changedCwd = path.resolve(options.cwd) !== cwd - } - - self.root = options.root || path.resolve(self.cwd, "/") - self.root = path.resolve(self.root) - if (process.platform === "win32") - self.root = self.root.replace(/\\/g, "/") - - self.nomount = !!options.nomount - - // disable comments and negation unless the user explicitly - // passes in false as the option. - options.nonegate = options.nonegate === false ? false : true - options.nocomment = options.nocomment === false ? false : true - deprecationWarning(options) - - self.minimatch = new Minimatch(pattern, options) - self.options = self.minimatch.options -} - -// TODO(isaacs): remove entirely in v6 -// exported to reset in tests -exports.deprecationWarned -function deprecationWarning(options) { - if (!options.nonegate || !options.nocomment) { - if (process.noDeprecation !== true && !exports.deprecationWarned) { - var msg = 'glob WARNING: comments and negation will be disabled in v6' - if (process.throwDeprecation) - throw new Error(msg) - else if (process.traceDeprecation) - console.trace(msg) - else - console.error(msg) - - exports.deprecationWarned = true - } - } -} - -function finish (self) { - var nou = self.nounique - var all = nou ? [] : Object.create(null) - - for (var i = 0, l = self.matches.length; i < l; i ++) { - var matches = self.matches[i] - if (!matches || Object.keys(matches).length === 0) { - if (self.nonull) { - // do like the shell, and spit out the literal glob - var literal = self.minimatch.globSet[i] - if (nou) - all.push(literal) - else - all[literal] = true - } - } else { - // had matches - var m = Object.keys(matches) - if (nou) - all.push.apply(all, m) - else - m.forEach(function (m) { - all[m] = true - }) - } - } - - if (!nou) - all = Object.keys(all) - - if (!self.nosort) - all = all.sort(self.nocase ? alphasorti : alphasort) - - // at *some* point we statted all of these - if (self.mark) { - for (var i = 0; i < all.length; i++) { - all[i] = self._mark(all[i]) - } - if (self.nodir) { - all = all.filter(function (e) { - return !(/\/$/.test(e)) - }) - } - } - - if (self.ignore.length) - all = all.filter(function(m) { - return !isIgnored(self, m) - }) - - self.found = all -} - -function mark (self, p) { - var abs = makeAbs(self, p) - var c = self.cache[abs] - var m = p - if (c) { - var isDir = c === 'DIR' || Array.isArray(c) - var slash = p.slice(-1) === '/' - - if (isDir && !slash) - m += '/' - else if (!isDir && slash) - m = m.slice(0, -1) - - if (m !== p) { - var mabs = makeAbs(self, m) - self.statCache[mabs] = self.statCache[abs] - self.cache[mabs] = self.cache[abs] - } - } - - return m -} - -// lotta situps... -function makeAbs (self, f) { - var abs = f - if (f.charAt(0) === '/') { - abs = path.join(self.root, f) - } else if (isAbsolute(f) || f === '') { - abs = f - } else if (self.changedCwd) { - abs = path.resolve(self.cwd, f) - } else { - abs = path.resolve(f) - } - return abs -} - - -// Return true, if pattern ends with globstar '**', for the accompanying parent directory. -// Ex:- If node_modules/** is the pattern, add 'node_modules' to ignore list along with it's contents -function isIgnored (self, path) { - if (!self.ignore.length) - return false - - return self.ignore.some(function(item) { - return item.matcher.match(path) || !!(item.gmatcher && item.gmatcher.match(path)) - }) -} - -function childrenIgnored (self, path) { - if (!self.ignore.length) - return false - - return self.ignore.some(function(item) { - return !!(item.gmatcher && item.gmatcher.match(path)) - }) -} diff --git a/fundamentals/bug-challenge-es6/node_modules/glob/glob.js b/fundamentals/bug-challenge-es6/node_modules/glob/glob.js deleted file mode 100644 index 022d2ac8c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob/glob.js +++ /dev/null @@ -1,752 +0,0 @@ -// Approach: -// -// 1. Get the minimatch set -// 2. For each pattern in the set, PROCESS(pattern, false) -// 3. Store matches per-set, then uniq them -// -// PROCESS(pattern, inGlobStar) -// Get the first [n] items from pattern that are all strings -// Join these together. This is PREFIX. -// If there is no more remaining, then stat(PREFIX) and -// add to matches if it succeeds. END. -// -// If inGlobStar and PREFIX is symlink and points to dir -// set ENTRIES = [] -// else readdir(PREFIX) as ENTRIES -// If fail, END -// -// with ENTRIES -// If pattern[n] is GLOBSTAR -// // handle the case where the globstar match is empty -// // by pruning it out, and testing the resulting pattern -// PROCESS(pattern[0..n] + pattern[n+1 .. $], false) -// // handle other cases. -// for ENTRY in ENTRIES (not dotfiles) -// // attach globstar + tail onto the entry -// // Mark that this entry is a globstar match -// PROCESS(pattern[0..n] + ENTRY + pattern[n .. $], true) -// -// else // not globstar -// for ENTRY in ENTRIES (not dotfiles, unless pattern[n] is dot) -// Test ENTRY against pattern[n] -// If fails, continue -// If passes, PROCESS(pattern[0..n] + item + pattern[n+1 .. $]) -// -// Caveat: -// Cache all stats and readdirs results to minimize syscall. Since all -// we ever care about is existence and directory-ness, we can just keep -// `true` for files, and [children,...] for directories, or `false` for -// things that don't exist. - -module.exports = glob - -var fs = require('fs') -var minimatch = require('minimatch') -var Minimatch = minimatch.Minimatch -var inherits = require('inherits') -var EE = require('events').EventEmitter -var path = require('path') -var assert = require('assert') -var isAbsolute = require('path-is-absolute') -var globSync = require('./sync.js') -var common = require('./common.js') -var alphasort = common.alphasort -var alphasorti = common.alphasorti -var setopts = common.setopts -var ownProp = common.ownProp -var inflight = require('inflight') -var util = require('util') -var childrenIgnored = common.childrenIgnored -var isIgnored = common.isIgnored - -var once = require('once') - -function glob (pattern, options, cb) { - if (typeof options === 'function') cb = options, options = {} - if (!options) options = {} - - if (options.sync) { - if (cb) - throw new TypeError('callback provided to sync glob') - return globSync(pattern, options) - } - - return new Glob(pattern, options, cb) -} - -glob.sync = globSync -var GlobSync = glob.GlobSync = globSync.GlobSync - -// old api surface -glob.glob = glob - -glob.hasMagic = function (pattern, options_) { - var options = util._extend({}, options_) - options.noprocess = true - - var g = new Glob(pattern, options) - var set = g.minimatch.set - if (set.length > 1) - return true - - for (var j = 0; j < set[0].length; j++) { - if (typeof set[0][j] !== 'string') - return true - } - - return false -} - -glob.Glob = Glob -inherits(Glob, EE) -function Glob (pattern, options, cb) { - if (typeof options === 'function') { - cb = options - options = null - } - - if (options && options.sync) { - if (cb) - throw new TypeError('callback provided to sync glob') - return new GlobSync(pattern, options) - } - - if (!(this instanceof Glob)) - return new Glob(pattern, options, cb) - - setopts(this, pattern, options) - this._didRealPath = false - - // process each pattern in the minimatch set - var n = this.minimatch.set.length - - // The matches are stored as {: true,...} so that - // duplicates are automagically pruned. - // Later, we do an Object.keys() on these. - // Keep them as a list so we can fill in when nonull is set. - this.matches = new Array(n) - - if (typeof cb === 'function') { - cb = once(cb) - this.on('error', cb) - this.on('end', function (matches) { - cb(null, matches) - }) - } - - var self = this - var n = this.minimatch.set.length - this._processing = 0 - this.matches = new Array(n) - - this._emitQueue = [] - this._processQueue = [] - this.paused = false - - if (this.noprocess) - return this - - if (n === 0) - return done() - - for (var i = 0; i < n; i ++) { - this._process(this.minimatch.set[i], i, false, done) - } - - function done () { - --self._processing - if (self._processing <= 0) - self._finish() - } -} - -Glob.prototype._finish = function () { - assert(this instanceof Glob) - if (this.aborted) - return - - if (this.realpath && !this._didRealpath) - return this._realpath() - - common.finish(this) - this.emit('end', this.found) -} - -Glob.prototype._realpath = function () { - if (this._didRealpath) - return - - this._didRealpath = true - - var n = this.matches.length - if (n === 0) - return this._finish() - - var self = this - for (var i = 0; i < this.matches.length; i++) - this._realpathSet(i, next) - - function next () { - if (--n === 0) - self._finish() - } -} - -Glob.prototype._realpathSet = function (index, cb) { - var matchset = this.matches[index] - if (!matchset) - return cb() - - var found = Object.keys(matchset) - var self = this - var n = found.length - - if (n === 0) - return cb() - - var set = this.matches[index] = Object.create(null) - found.forEach(function (p, i) { - // If there's a problem with the stat, then it means that - // one or more of the links in the realpath couldn't be - // resolved. just return the abs value in that case. - p = self._makeAbs(p) - fs.realpath(p, self.realpathCache, function (er, real) { - if (!er) - set[real] = true - else if (er.syscall === 'stat') - set[p] = true - else - self.emit('error', er) // srsly wtf right here - - if (--n === 0) { - self.matches[index] = set - cb() - } - }) - }) -} - -Glob.prototype._mark = function (p) { - return common.mark(this, p) -} - -Glob.prototype._makeAbs = function (f) { - return common.makeAbs(this, f) -} - -Glob.prototype.abort = function () { - this.aborted = true - this.emit('abort') -} - -Glob.prototype.pause = function () { - if (!this.paused) { - this.paused = true - this.emit('pause') - } -} - -Glob.prototype.resume = function () { - if (this.paused) { - this.emit('resume') - this.paused = false - if (this._emitQueue.length) { - var eq = this._emitQueue.slice(0) - this._emitQueue.length = 0 - for (var i = 0; i < eq.length; i ++) { - var e = eq[i] - this._emitMatch(e[0], e[1]) - } - } - if (this._processQueue.length) { - var pq = this._processQueue.slice(0) - this._processQueue.length = 0 - for (var i = 0; i < pq.length; i ++) { - var p = pq[i] - this._processing-- - this._process(p[0], p[1], p[2], p[3]) - } - } - } -} - -Glob.prototype._process = function (pattern, index, inGlobStar, cb) { - assert(this instanceof Glob) - assert(typeof cb === 'function') - - if (this.aborted) - return - - this._processing++ - if (this.paused) { - this._processQueue.push([pattern, index, inGlobStar, cb]) - return - } - - //console.error('PROCESS %d', this._processing, pattern) - - // Get the first [n] parts of pattern that are all strings. - var n = 0 - while (typeof pattern[n] === 'string') { - n ++ - } - // now n is the index of the first one that is *not* a string. - - // see if there's anything else - var prefix - switch (n) { - // if not, then this is rather simple - case pattern.length: - this._processSimple(pattern.join('/'), index, cb) - return - - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null - break - - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's 'absolute' like /foo/bar, - // or 'relative' like '../baz' - prefix = pattern.slice(0, n).join('/') - break - } - - var remain = pattern.slice(n) - - // get the list of entries. - var read - if (prefix === null) - read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { - if (!prefix || !isAbsolute(prefix)) - prefix = '/' + prefix - read = prefix - } else - read = prefix - - var abs = this._makeAbs(read) - - //if ignored, skip _processing - if (childrenIgnored(this, read)) - return cb() - - var isGlobStar = remain[0] === minimatch.GLOBSTAR - if (isGlobStar) - this._processGlobStar(prefix, read, abs, remain, index, inGlobStar, cb) - else - this._processReaddir(prefix, read, abs, remain, index, inGlobStar, cb) -} - -Glob.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar, cb) { - var self = this - this._readdir(abs, inGlobStar, function (er, entries) { - return self._processReaddir2(prefix, read, abs, remain, index, inGlobStar, entries, cb) - }) -} - -Glob.prototype._processReaddir2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { - - // if the abs isn't a dir, then nothing can match! - if (!entries) - return cb() - - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = remain[0] - var negate = !!this.minimatch.negate - var rawGlob = pn._glob - var dotOk = this.dot || rawGlob.charAt(0) === '.' - - var matchedEntries = [] - for (var i = 0; i < entries.length; i++) { - var e = entries[i] - if (e.charAt(0) !== '.' || dotOk) { - var m - if (negate && !prefix) { - m = !e.match(pn) - } else { - m = e.match(pn) - } - if (m) - matchedEntries.push(e) - } - } - - //console.error('prd2', prefix, entries, remain[0]._glob, matchedEntries) - - var len = matchedEntries.length - // If there are no matched entries, then nothing matches. - if (len === 0) - return cb() - - // if this is the last remaining pattern bit, then no need for - // an additional stat *unless* the user has specified mark or - // stat explicitly. We know they exist, since readdir returned - // them. - - if (remain.length === 1 && !this.mark && !this.stat) { - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - if (prefix) { - if (prefix !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - - if (e.charAt(0) === '/' && !this.nomount) { - e = path.join(this.root, e) - } - this._emitMatch(index, e) - } - // This was the last one, and no stats were needed - return cb() - } - - // now test all matched entries as stand-ins for that part - // of the pattern. - remain.shift() - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - var newPattern - if (prefix) { - if (prefix !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - this._process([e].concat(remain), index, inGlobStar, cb) - } - cb() -} - -Glob.prototype._emitMatch = function (index, e) { - if (this.aborted) - return - - if (this.matches[index][e]) - return - - if (isIgnored(this, e)) - return - - if (this.paused) { - this._emitQueue.push([index, e]) - return - } - - var abs = this._makeAbs(e) - - if (this.nodir) { - var c = this.cache[abs] - if (c === 'DIR' || Array.isArray(c)) - return - } - - if (this.mark) - e = this._mark(e) - - this.matches[index][e] = true - - var st = this.statCache[abs] - if (st) - this.emit('stat', e, st) - - this.emit('match', e) -} - -Glob.prototype._readdirInGlobStar = function (abs, cb) { - if (this.aborted) - return - - // follow all symlinked directories forever - // just proceed as if this is a non-globstar situation - if (this.follow) - return this._readdir(abs, false, cb) - - var lstatkey = 'lstat\0' + abs - var self = this - var lstatcb = inflight(lstatkey, lstatcb_) - - if (lstatcb) - fs.lstat(abs, lstatcb) - - function lstatcb_ (er, lstat) { - if (er) - return cb() - - var isSym = lstat.isSymbolicLink() - self.symlinks[abs] = isSym - - // If it's not a symlink or a dir, then it's definitely a regular file. - // don't bother doing a readdir in that case. - if (!isSym && !lstat.isDirectory()) { - self.cache[abs] = 'FILE' - cb() - } else - self._readdir(abs, false, cb) - } -} - -Glob.prototype._readdir = function (abs, inGlobStar, cb) { - if (this.aborted) - return - - cb = inflight('readdir\0'+abs+'\0'+inGlobStar, cb) - if (!cb) - return - - //console.error('RD %j %j', +inGlobStar, abs) - if (inGlobStar && !ownProp(this.symlinks, abs)) - return this._readdirInGlobStar(abs, cb) - - if (ownProp(this.cache, abs)) { - var c = this.cache[abs] - if (!c || c === 'FILE') - return cb() - - if (Array.isArray(c)) - return cb(null, c) - } - - var self = this - fs.readdir(abs, readdirCb(this, abs, cb)) -} - -function readdirCb (self, abs, cb) { - return function (er, entries) { - if (er) - self._readdirError(abs, er, cb) - else - self._readdirEntries(abs, entries, cb) - } -} - -Glob.prototype._readdirEntries = function (abs, entries, cb) { - if (this.aborted) - return - - // if we haven't asked to stat everything, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. - if (!this.mark && !this.stat) { - for (var i = 0; i < entries.length; i ++) { - var e = entries[i] - if (abs === '/') - e = abs + e - else - e = abs + '/' + e - this.cache[e] = true - } - } - - this.cache[abs] = entries - return cb(null, entries) -} - -Glob.prototype._readdirError = function (f, er, cb) { - if (this.aborted) - return - - // handle errors, and cache the information - switch (er.code) { - case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 - case 'ENOTDIR': // totally normal. means it *does* exist. - this.cache[this._makeAbs(f)] = 'FILE' - break - - case 'ENOENT': // not terribly unusual - case 'ELOOP': - case 'ENAMETOOLONG': - case 'UNKNOWN': - this.cache[this._makeAbs(f)] = false - break - - default: // some unusual error. Treat as failure. - this.cache[this._makeAbs(f)] = false - if (this.strict) { - this.emit('error', er) - // If the error is handled, then we abort - // if not, we threw out of here - this.abort() - } - if (!this.silent) - console.error('glob error', er) - break - } - - return cb() -} - -Glob.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar, cb) { - var self = this - this._readdir(abs, inGlobStar, function (er, entries) { - self._processGlobStar2(prefix, read, abs, remain, index, inGlobStar, entries, cb) - }) -} - - -Glob.prototype._processGlobStar2 = function (prefix, read, abs, remain, index, inGlobStar, entries, cb) { - //console.error('pgs2', prefix, remain[0], entries) - - // no entries means not a dir, so it can never have matches - // foo.txt/** doesn't match foo.txt - if (!entries) - return cb() - - // test without the globstar, and with every child both below - // and replacing the globstar. - var remainWithoutGlobStar = remain.slice(1) - var gspref = prefix ? [ prefix ] : [] - var noGlobStar = gspref.concat(remainWithoutGlobStar) - - // the noGlobStar pattern exits the inGlobStar state - this._process(noGlobStar, index, false, cb) - - var isSym = this.symlinks[abs] - var len = entries.length - - // If it's a symlink, and we're in a globstar, then stop - if (isSym && inGlobStar) - return cb() - - for (var i = 0; i < len; i++) { - var e = entries[i] - if (e.charAt(0) === '.' && !this.dot) - continue - - // these two cases enter the inGlobStar state - var instead = gspref.concat(entries[i], remainWithoutGlobStar) - this._process(instead, index, true, cb) - - var below = gspref.concat(entries[i], remain) - this._process(below, index, true, cb) - } - - cb() -} - -Glob.prototype._processSimple = function (prefix, index, cb) { - // XXX review this. Shouldn't it be doing the mounting etc - // before doing stat? kinda weird? - var self = this - this._stat(prefix, function (er, exists) { - self._processSimple2(prefix, index, er, exists, cb) - }) -} -Glob.prototype._processSimple2 = function (prefix, index, er, exists, cb) { - - //console.error('ps2', prefix, exists) - - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - // If it doesn't exist, then just mark the lack of results - if (!exists) - return cb() - - if (prefix && isAbsolute(prefix) && !this.nomount) { - var trail = /[\/\\]$/.test(prefix) - if (prefix.charAt(0) === '/') { - prefix = path.join(this.root, prefix) - } else { - prefix = path.resolve(this.root, prefix) - if (trail) - prefix += '/' - } - } - - if (process.platform === 'win32') - prefix = prefix.replace(/\\/g, '/') - - // Mark this as a match - this._emitMatch(index, prefix) - cb() -} - -// Returns either 'DIR', 'FILE', or false -Glob.prototype._stat = function (f, cb) { - var abs = this._makeAbs(f) - var needDir = f.slice(-1) === '/' - - if (f.length > this.maxLength) - return cb() - - if (!this.stat && ownProp(this.cache, abs)) { - var c = this.cache[abs] - - if (Array.isArray(c)) - c = 'DIR' - - // It exists, but maybe not how we need it - if (!needDir || c === 'DIR') - return cb(null, c) - - if (needDir && c === 'FILE') - return cb() - - // otherwise we have to stat, because maybe c=true - // if we know it exists, but not what it is. - } - - var exists - var stat = this.statCache[abs] - if (stat !== undefined) { - if (stat === false) - return cb(null, stat) - else { - var type = stat.isDirectory() ? 'DIR' : 'FILE' - if (needDir && type === 'FILE') - return cb() - else - return cb(null, type, stat) - } - } - - var self = this - var statcb = inflight('stat\0' + abs, lstatcb_) - if (statcb) - fs.lstat(abs, statcb) - - function lstatcb_ (er, lstat) { - if (lstat && lstat.isSymbolicLink()) { - // If it's a symlink, then treat it as the target, unless - // the target does not exist, then treat it as a file. - return fs.stat(abs, function (er, stat) { - if (er) - self._stat2(f, abs, null, lstat, cb) - else - self._stat2(f, abs, er, stat, cb) - }) - } else { - self._stat2(f, abs, er, lstat, cb) - } - } -} - -Glob.prototype._stat2 = function (f, abs, er, stat, cb) { - if (er) { - this.statCache[abs] = false - return cb() - } - - var needDir = f.slice(-1) === '/' - this.statCache[abs] = stat - - if (abs.slice(-1) === '/' && !stat.isDirectory()) - return cb(null, false, stat) - - var c = stat.isDirectory() ? 'DIR' : 'FILE' - this.cache[abs] = this.cache[abs] || c - - if (needDir && c !== 'DIR') - return cb() - - return cb(null, c, stat) -} diff --git a/fundamentals/bug-challenge-es6/node_modules/glob/package.json b/fundamentals/bug-challenge-es6/node_modules/glob/package.json deleted file mode 100644 index f1f28a820..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "_args": [ - [ - "glob@5.x", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/fileset" - ] - ], - "_from": "glob@>=5.0.0 <6.0.0", - "_id": "glob@5.0.15", - "_inCache": true, - "_installable": true, - "_location": "/glob", - "_nodeVersion": "4.0.0", - "_npmUser": { - "email": "isaacs@npmjs.com", - "name": "isaacs" - }, - "_npmVersion": "3.3.2", - "_phantomChildren": {}, - "_requested": { - "name": "glob", - "raw": "glob@5.x", - "rawSpec": "5.x", - "scope": null, - "spec": ">=5.0.0 <6.0.0", - "type": "range" - }, - "_requiredBy": [ - "/fileset", - "/istanbul" - ], - "_resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "_shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1", - "_shrinkwrap": null, - "_spec": "glob@5.x", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/fileset", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/node-glob/issues" - }, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "description": "a little globber", - "devDependencies": { - "mkdirp": "0", - "rimraf": "^2.2.8", - "tap": "^1.1.4", - "tick": "0.0.6" - }, - "directories": {}, - "dist": { - "shasum": "1bc936b9e02f4a603fcc222ecf7633d30b8b93b1", - "tarball": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz" - }, - "engines": { - "node": "*" - }, - "files": [ - "glob.js", - "sync.js", - "common.js" - ], - "gitHead": "3a7e71d453dd80e75b196fd262dd23ed54beeceb", - "homepage": "https://github.com/isaacs/node-glob#readme", - "license": "ISC", - "main": "glob.js", - "maintainers": [ - { - "email": "i@izs.me", - "name": "isaacs" - } - ], - "name": "glob", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/node-glob.git" - }, - "scripts": { - "bench": "bash benchmark.sh", - "benchclean": "node benchclean.js", - "prepublish": "npm run benchclean", - "prof": "bash prof.sh && cat profile.txt", - "profclean": "rm -f v8.log profile.txt", - "test": "tap test/*.js --cov", - "test-regen": "npm run profclean && TEST_REGEN=1 node test/00-setup.js" - }, - "version": "5.0.15" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/glob/sync.js b/fundamentals/bug-challenge-es6/node_modules/glob/sync.js deleted file mode 100644 index 09883d2ce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/glob/sync.js +++ /dev/null @@ -1,460 +0,0 @@ -module.exports = globSync -globSync.GlobSync = GlobSync - -var fs = require('fs') -var minimatch = require('minimatch') -var Minimatch = minimatch.Minimatch -var Glob = require('./glob.js').Glob -var util = require('util') -var path = require('path') -var assert = require('assert') -var isAbsolute = require('path-is-absolute') -var common = require('./common.js') -var alphasort = common.alphasort -var alphasorti = common.alphasorti -var setopts = common.setopts -var ownProp = common.ownProp -var childrenIgnored = common.childrenIgnored - -function globSync (pattern, options) { - if (typeof options === 'function' || arguments.length === 3) - throw new TypeError('callback provided to sync glob\n'+ - 'See: https://github.com/isaacs/node-glob/issues/167') - - return new GlobSync(pattern, options).found -} - -function GlobSync (pattern, options) { - if (!pattern) - throw new Error('must provide pattern') - - if (typeof options === 'function' || arguments.length === 3) - throw new TypeError('callback provided to sync glob\n'+ - 'See: https://github.com/isaacs/node-glob/issues/167') - - if (!(this instanceof GlobSync)) - return new GlobSync(pattern, options) - - setopts(this, pattern, options) - - if (this.noprocess) - return this - - var n = this.minimatch.set.length - this.matches = new Array(n) - for (var i = 0; i < n; i ++) { - this._process(this.minimatch.set[i], i, false) - } - this._finish() -} - -GlobSync.prototype._finish = function () { - assert(this instanceof GlobSync) - if (this.realpath) { - var self = this - this.matches.forEach(function (matchset, index) { - var set = self.matches[index] = Object.create(null) - for (var p in matchset) { - try { - p = self._makeAbs(p) - var real = fs.realpathSync(p, self.realpathCache) - set[real] = true - } catch (er) { - if (er.syscall === 'stat') - set[self._makeAbs(p)] = true - else - throw er - } - } - }) - } - common.finish(this) -} - - -GlobSync.prototype._process = function (pattern, index, inGlobStar) { - assert(this instanceof GlobSync) - - // Get the first [n] parts of pattern that are all strings. - var n = 0 - while (typeof pattern[n] === 'string') { - n ++ - } - // now n is the index of the first one that is *not* a string. - - // See if there's anything else - var prefix - switch (n) { - // if not, then this is rather simple - case pattern.length: - this._processSimple(pattern.join('/'), index) - return - - case 0: - // pattern *starts* with some non-trivial item. - // going to readdir(cwd), but not include the prefix in matches. - prefix = null - break - - default: - // pattern has some string bits in the front. - // whatever it starts with, whether that's 'absolute' like /foo/bar, - // or 'relative' like '../baz' - prefix = pattern.slice(0, n).join('/') - break - } - - var remain = pattern.slice(n) - - // get the list of entries. - var read - if (prefix === null) - read = '.' - else if (isAbsolute(prefix) || isAbsolute(pattern.join('/'))) { - if (!prefix || !isAbsolute(prefix)) - prefix = '/' + prefix - read = prefix - } else - read = prefix - - var abs = this._makeAbs(read) - - //if ignored, skip processing - if (childrenIgnored(this, read)) - return - - var isGlobStar = remain[0] === minimatch.GLOBSTAR - if (isGlobStar) - this._processGlobStar(prefix, read, abs, remain, index, inGlobStar) - else - this._processReaddir(prefix, read, abs, remain, index, inGlobStar) -} - - -GlobSync.prototype._processReaddir = function (prefix, read, abs, remain, index, inGlobStar) { - var entries = this._readdir(abs, inGlobStar) - - // if the abs isn't a dir, then nothing can match! - if (!entries) - return - - // It will only match dot entries if it starts with a dot, or if - // dot is set. Stuff like @(.foo|.bar) isn't allowed. - var pn = remain[0] - var negate = !!this.minimatch.negate - var rawGlob = pn._glob - var dotOk = this.dot || rawGlob.charAt(0) === '.' - - var matchedEntries = [] - for (var i = 0; i < entries.length; i++) { - var e = entries[i] - if (e.charAt(0) !== '.' || dotOk) { - var m - if (negate && !prefix) { - m = !e.match(pn) - } else { - m = e.match(pn) - } - if (m) - matchedEntries.push(e) - } - } - - var len = matchedEntries.length - // If there are no matched entries, then nothing matches. - if (len === 0) - return - - // if this is the last remaining pattern bit, then no need for - // an additional stat *unless* the user has specified mark or - // stat explicitly. We know they exist, since readdir returned - // them. - - if (remain.length === 1 && !this.mark && !this.stat) { - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - if (prefix) { - if (prefix.slice(-1) !== '/') - e = prefix + '/' + e - else - e = prefix + e - } - - if (e.charAt(0) === '/' && !this.nomount) { - e = path.join(this.root, e) - } - this.matches[index][e] = true - } - // This was the last one, and no stats were needed - return - } - - // now test all matched entries as stand-ins for that part - // of the pattern. - remain.shift() - for (var i = 0; i < len; i ++) { - var e = matchedEntries[i] - var newPattern - if (prefix) - newPattern = [prefix, e] - else - newPattern = [e] - this._process(newPattern.concat(remain), index, inGlobStar) - } -} - - -GlobSync.prototype._emitMatch = function (index, e) { - var abs = this._makeAbs(e) - if (this.mark) - e = this._mark(e) - - if (this.matches[index][e]) - return - - if (this.nodir) { - var c = this.cache[this._makeAbs(e)] - if (c === 'DIR' || Array.isArray(c)) - return - } - - this.matches[index][e] = true - if (this.stat) - this._stat(e) -} - - -GlobSync.prototype._readdirInGlobStar = function (abs) { - // follow all symlinked directories forever - // just proceed as if this is a non-globstar situation - if (this.follow) - return this._readdir(abs, false) - - var entries - var lstat - var stat - try { - lstat = fs.lstatSync(abs) - } catch (er) { - // lstat failed, doesn't exist - return null - } - - var isSym = lstat.isSymbolicLink() - this.symlinks[abs] = isSym - - // If it's not a symlink or a dir, then it's definitely a regular file. - // don't bother doing a readdir in that case. - if (!isSym && !lstat.isDirectory()) - this.cache[abs] = 'FILE' - else - entries = this._readdir(abs, false) - - return entries -} - -GlobSync.prototype._readdir = function (abs, inGlobStar) { - var entries - - if (inGlobStar && !ownProp(this.symlinks, abs)) - return this._readdirInGlobStar(abs) - - if (ownProp(this.cache, abs)) { - var c = this.cache[abs] - if (!c || c === 'FILE') - return null - - if (Array.isArray(c)) - return c - } - - try { - return this._readdirEntries(abs, fs.readdirSync(abs)) - } catch (er) { - this._readdirError(abs, er) - return null - } -} - -GlobSync.prototype._readdirEntries = function (abs, entries) { - // if we haven't asked to stat everything, then just - // assume that everything in there exists, so we can avoid - // having to stat it a second time. - if (!this.mark && !this.stat) { - for (var i = 0; i < entries.length; i ++) { - var e = entries[i] - if (abs === '/') - e = abs + e - else - e = abs + '/' + e - this.cache[e] = true - } - } - - this.cache[abs] = entries - - // mark and cache dir-ness - return entries -} - -GlobSync.prototype._readdirError = function (f, er) { - // handle errors, and cache the information - switch (er.code) { - case 'ENOTSUP': // https://github.com/isaacs/node-glob/issues/205 - case 'ENOTDIR': // totally normal. means it *does* exist. - this.cache[this._makeAbs(f)] = 'FILE' - break - - case 'ENOENT': // not terribly unusual - case 'ELOOP': - case 'ENAMETOOLONG': - case 'UNKNOWN': - this.cache[this._makeAbs(f)] = false - break - - default: // some unusual error. Treat as failure. - this.cache[this._makeAbs(f)] = false - if (this.strict) - throw er - if (!this.silent) - console.error('glob error', er) - break - } -} - -GlobSync.prototype._processGlobStar = function (prefix, read, abs, remain, index, inGlobStar) { - - var entries = this._readdir(abs, inGlobStar) - - // no entries means not a dir, so it can never have matches - // foo.txt/** doesn't match foo.txt - if (!entries) - return - - // test without the globstar, and with every child both below - // and replacing the globstar. - var remainWithoutGlobStar = remain.slice(1) - var gspref = prefix ? [ prefix ] : [] - var noGlobStar = gspref.concat(remainWithoutGlobStar) - - // the noGlobStar pattern exits the inGlobStar state - this._process(noGlobStar, index, false) - - var len = entries.length - var isSym = this.symlinks[abs] - - // If it's a symlink, and we're in a globstar, then stop - if (isSym && inGlobStar) - return - - for (var i = 0; i < len; i++) { - var e = entries[i] - if (e.charAt(0) === '.' && !this.dot) - continue - - // these two cases enter the inGlobStar state - var instead = gspref.concat(entries[i], remainWithoutGlobStar) - this._process(instead, index, true) - - var below = gspref.concat(entries[i], remain) - this._process(below, index, true) - } -} - -GlobSync.prototype._processSimple = function (prefix, index) { - // XXX review this. Shouldn't it be doing the mounting etc - // before doing stat? kinda weird? - var exists = this._stat(prefix) - - if (!this.matches[index]) - this.matches[index] = Object.create(null) - - // If it doesn't exist, then just mark the lack of results - if (!exists) - return - - if (prefix && isAbsolute(prefix) && !this.nomount) { - var trail = /[\/\\]$/.test(prefix) - if (prefix.charAt(0) === '/') { - prefix = path.join(this.root, prefix) - } else { - prefix = path.resolve(this.root, prefix) - if (trail) - prefix += '/' - } - } - - if (process.platform === 'win32') - prefix = prefix.replace(/\\/g, '/') - - // Mark this as a match - this.matches[index][prefix] = true -} - -// Returns either 'DIR', 'FILE', or false -GlobSync.prototype._stat = function (f) { - var abs = this._makeAbs(f) - var needDir = f.slice(-1) === '/' - - if (f.length > this.maxLength) - return false - - if (!this.stat && ownProp(this.cache, abs)) { - var c = this.cache[abs] - - if (Array.isArray(c)) - c = 'DIR' - - // It exists, but maybe not how we need it - if (!needDir || c === 'DIR') - return c - - if (needDir && c === 'FILE') - return false - - // otherwise we have to stat, because maybe c=true - // if we know it exists, but not what it is. - } - - var exists - var stat = this.statCache[abs] - if (!stat) { - var lstat - try { - lstat = fs.lstatSync(abs) - } catch (er) { - return false - } - - if (lstat.isSymbolicLink()) { - try { - stat = fs.statSync(abs) - } catch (er) { - stat = lstat - } - } else { - stat = lstat - } - } - - this.statCache[abs] = stat - - var c = stat.isDirectory() ? 'DIR' : 'FILE' - this.cache[abs] = this.cache[abs] || c - - if (needDir && c !== 'DIR') - return false - - return c -} - -GlobSync.prototype._mark = function (p) { - return common.mark(this, p) -} - -GlobSync.prototype._makeAbs = function (f) { - return common.makeAbs(this, f) -} diff --git a/fundamentals/bug-challenge-es6/node_modules/globals/globals.json b/fundamentals/bug-challenge-es6/node_modules/globals/globals.json deleted file mode 100644 index 38b2a89a4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/globals/globals.json +++ /dev/null @@ -1,1288 +0,0 @@ -{ - "builtin": { - "Array": false, - "ArrayBuffer": false, - "Boolean": false, - "constructor": false, - "DataView": false, - "Date": false, - "decodeURI": false, - "decodeURIComponent": false, - "encodeURI": false, - "encodeURIComponent": false, - "Error": false, - "escape": false, - "eval": false, - "EvalError": false, - "Float32Array": false, - "Float64Array": false, - "Function": false, - "hasOwnProperty": false, - "Infinity": false, - "Int16Array": false, - "Int32Array": false, - "Int8Array": false, - "isFinite": false, - "isNaN": false, - "isPrototypeOf": false, - "JSON": false, - "Map": false, - "Math": false, - "NaN": false, - "Number": false, - "Object": false, - "parseFloat": false, - "parseInt": false, - "Promise": false, - "propertyIsEnumerable": false, - "Proxy": false, - "RangeError": false, - "ReferenceError": false, - "Reflect": false, - "RegExp": false, - "Set": false, - "String": false, - "Symbol": false, - "SyntaxError": false, - "System": false, - "toLocaleString": false, - "toString": false, - "TypeError": false, - "Uint16Array": false, - "Uint32Array": false, - "Uint8Array": false, - "Uint8ClampedArray": false, - "undefined": false, - "unescape": false, - "URIError": false, - "valueOf": false, - "WeakMap": false, - "WeakSet": false - }, - "es5": { - "Array": false, - "Boolean": false, - "constructor": false, - "Date": false, - "decodeURI": false, - "decodeURIComponent": false, - "encodeURI": false, - "encodeURIComponent": false, - "Error": false, - "escape": false, - "eval": false, - "EvalError": false, - "Function": false, - "hasOwnProperty": false, - "Infinity": false, - "isFinite": false, - "isNaN": false, - "isPrototypeOf": false, - "JSON": false, - "Math": false, - "NaN": false, - "Number": false, - "Object": false, - "parseFloat": false, - "parseInt": false, - "propertyIsEnumerable": false, - "RangeError": false, - "ReferenceError": false, - "RegExp": false, - "String": false, - "SyntaxError": false, - "toLocaleString": false, - "toString": false, - "TypeError": false, - "undefined": false, - "unescape": false, - "URIError": false, - "valueOf": false - }, - "es6": { - "Array": false, - "ArrayBuffer": false, - "Boolean": false, - "constructor": false, - "DataView": false, - "Date": false, - "decodeURI": false, - "decodeURIComponent": false, - "encodeURI": false, - "encodeURIComponent": false, - "Error": false, - "escape": false, - "eval": false, - "EvalError": false, - "Float32Array": false, - "Float64Array": false, - "Function": false, - "hasOwnProperty": false, - "Infinity": false, - "Int16Array": false, - "Int32Array": false, - "Int8Array": false, - "isFinite": false, - "isNaN": false, - "isPrototypeOf": false, - "JSON": false, - "Map": false, - "Math": false, - "NaN": false, - "Number": false, - "Object": false, - "parseFloat": false, - "parseInt": false, - "Promise": false, - "propertyIsEnumerable": false, - "Proxy": false, - "RangeError": false, - "ReferenceError": false, - "Reflect": false, - "RegExp": false, - "Set": false, - "String": false, - "Symbol": false, - "SyntaxError": false, - "System": false, - "toLocaleString": false, - "toString": false, - "TypeError": false, - "Uint16Array": false, - "Uint32Array": false, - "Uint8Array": false, - "Uint8ClampedArray": false, - "undefined": false, - "unescape": false, - "URIError": false, - "valueOf": false, - "WeakMap": false, - "WeakSet": false - }, - "browser": { - "addEventListener": false, - "alert": false, - "AnalyserNode": false, - "Animation": false, - "AnimationEffectReadOnly": false, - "AnimationEffectTiming": false, - "AnimationEffectTimingReadOnly": false, - "AnimationEvent": false, - "AnimationPlaybackEvent": false, - "AnimationTimeline": false, - "applicationCache": false, - "ApplicationCache": false, - "ApplicationCacheErrorEvent": false, - "atob": false, - "Attr": false, - "Audio": false, - "AudioBuffer": false, - "AudioBufferSourceNode": false, - "AudioContext": false, - "AudioDestinationNode": false, - "AudioListener": false, - "AudioNode": false, - "AudioParam": false, - "AudioProcessingEvent": false, - "AutocompleteErrorEvent": false, - "BarProp": false, - "BatteryManager": false, - "BeforeUnloadEvent": false, - "BiquadFilterNode": false, - "Blob": false, - "blur": false, - "btoa": false, - "Cache": false, - "caches": false, - "CacheStorage": false, - "cancelAnimationFrame": false, - "CanvasGradient": false, - "CanvasPattern": false, - "CanvasRenderingContext2D": false, - "CDATASection": false, - "ChannelMergerNode": false, - "ChannelSplitterNode": false, - "CharacterData": false, - "clearInterval": false, - "clearTimeout": false, - "clientInformation": false, - "ClientRect": false, - "ClientRectList": false, - "ClipboardEvent": false, - "close": false, - "closed": false, - "CloseEvent": false, - "Comment": false, - "CompositionEvent": false, - "confirm": false, - "console": false, - "ConvolverNode": false, - "Credential": false, - "CredentialsContainer": false, - "crypto": false, - "Crypto": false, - "CryptoKey": false, - "CSS": false, - "CSSAnimation": false, - "CSSFontFaceRule": false, - "CSSImportRule": false, - "CSSKeyframeRule": false, - "CSSKeyframesRule": false, - "CSSMediaRule": false, - "CSSPageRule": false, - "CSSRule": false, - "CSSRuleList": false, - "CSSStyleDeclaration": false, - "CSSStyleRule": false, - "CSSStyleSheet": false, - "CSSSupportsRule": false, - "CSSTransition": false, - "CSSUnknownRule": false, - "CSSViewportRule": false, - "customElements": false, - "CustomEvent": false, - "DataTransfer": false, - "DataTransferItem": false, - "DataTransferItemList": false, - "Debug": false, - "defaultStatus": false, - "defaultstatus": false, - "DelayNode": false, - "DeviceMotionEvent": false, - "DeviceOrientationEvent": false, - "devicePixelRatio": false, - "dispatchEvent": false, - "document": false, - "Document": false, - "DocumentFragment": false, - "DocumentTimeline": false, - "DocumentType": false, - "DOMError": false, - "DOMException": false, - "DOMImplementation": false, - "DOMParser": false, - "DOMSettableTokenList": false, - "DOMStringList": false, - "DOMStringMap": false, - "DOMTokenList": false, - "DragEvent": false, - "DynamicsCompressorNode": false, - "Element": false, - "ElementTimeControl": false, - "ErrorEvent": false, - "event": false, - "Event": false, - "EventSource": false, - "EventTarget": false, - "external": false, - "FederatedCredential": false, - "fetch": false, - "File": false, - "FileError": false, - "FileList": false, - "FileReader": false, - "find": false, - "focus": false, - "FocusEvent": false, - "FontFace": false, - "FormData": false, - "frameElement": false, - "frames": false, - "GainNode": false, - "Gamepad": false, - "GamepadButton": false, - "GamepadEvent": false, - "getComputedStyle": false, - "getSelection": false, - "HashChangeEvent": false, - "Headers": false, - "history": false, - "History": false, - "HTMLAllCollection": false, - "HTMLAnchorElement": false, - "HTMLAppletElement": false, - "HTMLAreaElement": false, - "HTMLAudioElement": false, - "HTMLBaseElement": false, - "HTMLBlockquoteElement": false, - "HTMLBodyElement": false, - "HTMLBRElement": false, - "HTMLButtonElement": false, - "HTMLCanvasElement": false, - "HTMLCollection": false, - "HTMLContentElement": false, - "HTMLDataListElement": false, - "HTMLDetailsElement": false, - "HTMLDialogElement": false, - "HTMLDirectoryElement": false, - "HTMLDivElement": false, - "HTMLDListElement": false, - "HTMLDocument": false, - "HTMLElement": false, - "HTMLEmbedElement": false, - "HTMLFieldSetElement": false, - "HTMLFontElement": false, - "HTMLFormControlsCollection": false, - "HTMLFormElement": false, - "HTMLFrameElement": false, - "HTMLFrameSetElement": false, - "HTMLHeadElement": false, - "HTMLHeadingElement": false, - "HTMLHRElement": false, - "HTMLHtmlElement": false, - "HTMLIFrameElement": false, - "HTMLImageElement": false, - "HTMLInputElement": false, - "HTMLIsIndexElement": false, - "HTMLKeygenElement": false, - "HTMLLabelElement": false, - "HTMLLayerElement": false, - "HTMLLegendElement": false, - "HTMLLIElement": false, - "HTMLLinkElement": false, - "HTMLMapElement": false, - "HTMLMarqueeElement": false, - "HTMLMediaElement": false, - "HTMLMenuElement": false, - "HTMLMetaElement": false, - "HTMLMeterElement": false, - "HTMLModElement": false, - "HTMLObjectElement": false, - "HTMLOListElement": false, - "HTMLOptGroupElement": false, - "HTMLOptionElement": false, - "HTMLOptionsCollection": false, - "HTMLOutputElement": false, - "HTMLParagraphElement": false, - "HTMLParamElement": false, - "HTMLPictureElement": false, - "HTMLPreElement": false, - "HTMLProgressElement": false, - "HTMLQuoteElement": false, - "HTMLScriptElement": false, - "HTMLSelectElement": false, - "HTMLShadowElement": false, - "HTMLSourceElement": false, - "HTMLSpanElement": false, - "HTMLStyleElement": false, - "HTMLTableCaptionElement": false, - "HTMLTableCellElement": false, - "HTMLTableColElement": false, - "HTMLTableElement": false, - "HTMLTableRowElement": false, - "HTMLTableSectionElement": false, - "HTMLTemplateElement": false, - "HTMLTextAreaElement": false, - "HTMLTitleElement": false, - "HTMLTrackElement": false, - "HTMLUListElement": false, - "HTMLUnknownElement": false, - "HTMLVideoElement": false, - "IDBCursor": false, - "IDBCursorWithValue": false, - "IDBDatabase": false, - "IDBEnvironment": false, - "IDBFactory": false, - "IDBIndex": false, - "IDBKeyRange": false, - "IDBObjectStore": false, - "IDBOpenDBRequest": false, - "IDBRequest": false, - "IDBTransaction": false, - "IDBVersionChangeEvent": false, - "Image": false, - "ImageBitmap": false, - "ImageData": false, - "indexedDB": false, - "innerHeight": false, - "innerWidth": false, - "InputEvent": false, - "InputMethodContext": false, - "IntersectionObserver": false, - "IntersectionObserverEntry": false, - "Intl": false, - "KeyboardEvent": false, - "KeyframeEffect": false, - "KeyframeEffectReadOnly": false, - "length": false, - "localStorage": false, - "location": false, - "Location": false, - "locationbar": false, - "matchMedia": false, - "MediaElementAudioSourceNode": false, - "MediaEncryptedEvent": false, - "MediaError": false, - "MediaKeyError": false, - "MediaKeyEvent": false, - "MediaKeyMessageEvent": false, - "MediaKeys": false, - "MediaKeySession": false, - "MediaKeyStatusMap": false, - "MediaKeySystemAccess": false, - "MediaList": false, - "MediaQueryList": false, - "MediaQueryListEvent": false, - "MediaSource": false, - "MediaStream": false, - "MediaStreamAudioDestinationNode": false, - "MediaStreamAudioSourceNode": false, - "MediaStreamEvent": false, - "MediaStreamTrack": false, - "menubar": false, - "MessageChannel": false, - "MessageEvent": false, - "MessagePort": false, - "MIDIAccess": false, - "MIDIConnectionEvent": false, - "MIDIInput": false, - "MIDIInputMap": false, - "MIDIMessageEvent": false, - "MIDIOutput": false, - "MIDIOutputMap": false, - "MIDIPort": false, - "MimeType": false, - "MimeTypeArray": false, - "MouseEvent": false, - "moveBy": false, - "moveTo": false, - "MutationEvent": false, - "MutationObserver": false, - "MutationRecord": false, - "name": false, - "NamedNodeMap": false, - "navigator": false, - "Navigator": false, - "Node": false, - "NodeFilter": false, - "NodeIterator": false, - "NodeList": false, - "Notification": false, - "OfflineAudioCompletionEvent": false, - "OfflineAudioContext": false, - "offscreenBuffering": false, - "onbeforeunload": true, - "onblur": true, - "onerror": true, - "onfocus": true, - "onload": true, - "onresize": true, - "onunload": true, - "open": false, - "openDatabase": false, - "opener": false, - "opera": false, - "Option": false, - "OscillatorNode": false, - "outerHeight": false, - "outerWidth": false, - "PageTransitionEvent": false, - "pageXOffset": false, - "pageYOffset": false, - "parent": false, - "PasswordCredential": false, - "Path2D": false, - "performance": false, - "Performance": false, - "PerformanceEntry": false, - "PerformanceMark": false, - "PerformanceMeasure": false, - "PerformanceNavigation": false, - "PerformanceResourceTiming": false, - "PerformanceTiming": false, - "PeriodicWave": false, - "Permissions": false, - "PermissionStatus": false, - "personalbar": false, - "Plugin": false, - "PluginArray": false, - "PopStateEvent": false, - "postMessage": false, - "print": false, - "ProcessingInstruction": false, - "ProgressEvent": false, - "PromiseRejectionEvent": false, - "prompt": false, - "PushManager": false, - "PushSubscription": false, - "RadioNodeList": false, - "Range": false, - "ReadableByteStream": false, - "ReadableStream": false, - "removeEventListener": false, - "Request": false, - "requestAnimationFrame": false, - "requestIdleCallback": false, - "resizeBy": false, - "resizeTo": false, - "Response": false, - "RTCIceCandidate": false, - "RTCSessionDescription": false, - "RTCPeerConnection": false, - "screen": false, - "Screen": false, - "screenLeft": false, - "ScreenOrientation": false, - "screenTop": false, - "screenX": false, - "screenY": false, - "ScriptProcessorNode": false, - "scroll": false, - "scrollbars": false, - "scrollBy": false, - "scrollTo": false, - "scrollX": false, - "scrollY": false, - "SecurityPolicyViolationEvent": false, - "Selection": false, - "self": false, - "ServiceWorker": false, - "ServiceWorkerContainer": false, - "ServiceWorkerRegistration": false, - "sessionStorage": false, - "setInterval": false, - "setTimeout": false, - "ShadowRoot": false, - "SharedKeyframeList": false, - "SharedWorker": false, - "showModalDialog": false, - "SiteBoundCredential": false, - "speechSynthesis": false, - "SpeechSynthesisEvent": false, - "SpeechSynthesisUtterance": false, - "status": false, - "statusbar": false, - "stop": false, - "Storage": false, - "StorageEvent": false, - "styleMedia": false, - "StyleSheet": false, - "StyleSheetList": false, - "SubtleCrypto": false, - "SVGAElement": false, - "SVGAltGlyphDefElement": false, - "SVGAltGlyphElement": false, - "SVGAltGlyphItemElement": false, - "SVGAngle": false, - "SVGAnimateColorElement": false, - "SVGAnimatedAngle": false, - "SVGAnimatedBoolean": false, - "SVGAnimatedEnumeration": false, - "SVGAnimatedInteger": false, - "SVGAnimatedLength": false, - "SVGAnimatedLengthList": false, - "SVGAnimatedNumber": false, - "SVGAnimatedNumberList": false, - "SVGAnimatedPathData": false, - "SVGAnimatedPoints": false, - "SVGAnimatedPreserveAspectRatio": false, - "SVGAnimatedRect": false, - "SVGAnimatedString": false, - "SVGAnimatedTransformList": false, - "SVGAnimateElement": false, - "SVGAnimateMotionElement": false, - "SVGAnimateTransformElement": false, - "SVGAnimationElement": false, - "SVGCircleElement": false, - "SVGClipPathElement": false, - "SVGColor": false, - "SVGColorProfileElement": false, - "SVGColorProfileRule": false, - "SVGComponentTransferFunctionElement": false, - "SVGCSSRule": false, - "SVGCursorElement": false, - "SVGDefsElement": false, - "SVGDescElement": false, - "SVGDiscardElement": false, - "SVGDocument": false, - "SVGElement": false, - "SVGElementInstance": false, - "SVGElementInstanceList": false, - "SVGEllipseElement": false, - "SVGEvent": false, - "SVGExternalResourcesRequired": false, - "SVGFEBlendElement": false, - "SVGFEColorMatrixElement": false, - "SVGFEComponentTransferElement": false, - "SVGFECompositeElement": false, - "SVGFEConvolveMatrixElement": false, - "SVGFEDiffuseLightingElement": false, - "SVGFEDisplacementMapElement": false, - "SVGFEDistantLightElement": false, - "SVGFEDropShadowElement": false, - "SVGFEFloodElement": false, - "SVGFEFuncAElement": false, - "SVGFEFuncBElement": false, - "SVGFEFuncGElement": false, - "SVGFEFuncRElement": false, - "SVGFEGaussianBlurElement": false, - "SVGFEImageElement": false, - "SVGFEMergeElement": false, - "SVGFEMergeNodeElement": false, - "SVGFEMorphologyElement": false, - "SVGFEOffsetElement": false, - "SVGFEPointLightElement": false, - "SVGFESpecularLightingElement": false, - "SVGFESpotLightElement": false, - "SVGFETileElement": false, - "SVGFETurbulenceElement": false, - "SVGFilterElement": false, - "SVGFilterPrimitiveStandardAttributes": false, - "SVGFitToViewBox": false, - "SVGFontElement": false, - "SVGFontFaceElement": false, - "SVGFontFaceFormatElement": false, - "SVGFontFaceNameElement": false, - "SVGFontFaceSrcElement": false, - "SVGFontFaceUriElement": false, - "SVGForeignObjectElement": false, - "SVGGElement": false, - "SVGGeometryElement": false, - "SVGGlyphElement": false, - "SVGGlyphRefElement": false, - "SVGGradientElement": false, - "SVGGraphicsElement": false, - "SVGHKernElement": false, - "SVGICCColor": false, - "SVGImageElement": false, - "SVGLangSpace": false, - "SVGLength": false, - "SVGLengthList": false, - "SVGLinearGradientElement": false, - "SVGLineElement": false, - "SVGLocatable": false, - "SVGMarkerElement": false, - "SVGMaskElement": false, - "SVGMatrix": false, - "SVGMetadataElement": false, - "SVGMissingGlyphElement": false, - "SVGMPathElement": false, - "SVGNumber": false, - "SVGNumberList": false, - "SVGPaint": false, - "SVGPathElement": false, - "SVGPathSeg": false, - "SVGPathSegArcAbs": false, - "SVGPathSegArcRel": false, - "SVGPathSegClosePath": false, - "SVGPathSegCurvetoCubicAbs": false, - "SVGPathSegCurvetoCubicRel": false, - "SVGPathSegCurvetoCubicSmoothAbs": false, - "SVGPathSegCurvetoCubicSmoothRel": false, - "SVGPathSegCurvetoQuadraticAbs": false, - "SVGPathSegCurvetoQuadraticRel": false, - "SVGPathSegCurvetoQuadraticSmoothAbs": false, - "SVGPathSegCurvetoQuadraticSmoothRel": false, - "SVGPathSegLinetoAbs": false, - "SVGPathSegLinetoHorizontalAbs": false, - "SVGPathSegLinetoHorizontalRel": false, - "SVGPathSegLinetoRel": false, - "SVGPathSegLinetoVerticalAbs": false, - "SVGPathSegLinetoVerticalRel": false, - "SVGPathSegList": false, - "SVGPathSegMovetoAbs": false, - "SVGPathSegMovetoRel": false, - "SVGPatternElement": false, - "SVGPoint": false, - "SVGPointList": false, - "SVGPolygonElement": false, - "SVGPolylineElement": false, - "SVGPreserveAspectRatio": false, - "SVGRadialGradientElement": false, - "SVGRect": false, - "SVGRectElement": false, - "SVGRenderingIntent": false, - "SVGScriptElement": false, - "SVGSetElement": false, - "SVGStopElement": false, - "SVGStringList": false, - "SVGStylable": false, - "SVGStyleElement": false, - "SVGSVGElement": false, - "SVGSwitchElement": false, - "SVGSymbolElement": false, - "SVGTests": false, - "SVGTextContentElement": false, - "SVGTextElement": false, - "SVGTextPathElement": false, - "SVGTextPositioningElement": false, - "SVGTitleElement": false, - "SVGTransform": false, - "SVGTransformable": false, - "SVGTransformList": false, - "SVGTRefElement": false, - "SVGTSpanElement": false, - "SVGUnitTypes": false, - "SVGURIReference": false, - "SVGUseElement": false, - "SVGViewElement": false, - "SVGViewSpec": false, - "SVGVKernElement": false, - "SVGZoomAndPan": false, - "SVGZoomEvent": false, - "Text": false, - "TextDecoder": false, - "TextEncoder": false, - "TextEvent": false, - "TextMetrics": false, - "TextTrack": false, - "TextTrackCue": false, - "TextTrackCueList": false, - "TextTrackList": false, - "TimeEvent": false, - "TimeRanges": false, - "toolbar": false, - "top": false, - "Touch": false, - "TouchEvent": false, - "TouchList": false, - "TrackEvent": false, - "TransitionEvent": false, - "TreeWalker": false, - "UIEvent": false, - "URL": false, - "URLSearchParams": false, - "ValidityState": false, - "VTTCue": false, - "WaveShaperNode": false, - "WebGLActiveInfo": false, - "WebGLBuffer": false, - "WebGLContextEvent": false, - "WebGLFramebuffer": false, - "WebGLProgram": false, - "WebGLRenderbuffer": false, - "WebGLRenderingContext": false, - "WebGLShader": false, - "WebGLShaderPrecisionFormat": false, - "WebGLTexture": false, - "WebGLUniformLocation": false, - "WebSocket": false, - "WheelEvent": false, - "window": false, - "Window": false, - "Worker": false, - "XDomainRequest": false, - "XMLDocument": false, - "XMLHttpRequest": false, - "XMLHttpRequestEventTarget": false, - "XMLHttpRequestProgressEvent": false, - "XMLHttpRequestUpload": false, - "XMLSerializer": false, - "XPathEvaluator": false, - "XPathException": false, - "XPathExpression": false, - "XPathNamespace": false, - "XPathNSResolver": false, - "XPathResult": false, - "XSLTProcessor": false - }, - "worker": { - "applicationCache": false, - "atob": false, - "Blob": false, - "BroadcastChannel": false, - "btoa": false, - "Cache": false, - "caches": false, - "clearInterval": false, - "clearTimeout": false, - "close": true, - "console": false, - "fetch": false, - "FileReaderSync": false, - "FormData": false, - "Headers": false, - "IDBCursor": false, - "IDBCursorWithValue": false, - "IDBDatabase": false, - "IDBFactory": false, - "IDBIndex": false, - "IDBKeyRange": false, - "IDBObjectStore": false, - "IDBOpenDBRequest": false, - "IDBRequest": false, - "IDBTransaction": false, - "IDBVersionChangeEvent": false, - "ImageData": false, - "importScripts": true, - "indexedDB": false, - "location": false, - "MessageChannel": false, - "MessagePort": false, - "name": false, - "navigator": false, - "Notification": false, - "onclose": true, - "onconnect": true, - "onerror": true, - "onlanguagechange": true, - "onmessage": true, - "onoffline": true, - "ononline": true, - "onrejectionhandled": true, - "onunhandledrejection": true, - "performance": false, - "Performance": false, - "PerformanceEntry": false, - "PerformanceMark": false, - "PerformanceMeasure": false, - "PerformanceNavigation": false, - "PerformanceResourceTiming": false, - "PerformanceTiming": false, - "postMessage": true, - "Promise": false, - "Request": false, - "Response": false, - "self": true, - "ServiceWorkerRegistration": false, - "setInterval": false, - "setTimeout": false, - "TextDecoder": false, - "TextEncoder": false, - "URL": false, - "URLSearchParams": false, - "WebSocket": false, - "Worker": false, - "XMLHttpRequest": false - }, - "node": { - "__dirname": false, - "__filename": false, - "arguments": false, - "Buffer": false, - "clearImmediate": false, - "clearInterval": false, - "clearTimeout": false, - "console": false, - "exports": true, - "GLOBAL": false, - "global": false, - "Intl": false, - "module": false, - "process": false, - "require": false, - "root": false, - "setImmediate": false, - "setInterval": false, - "setTimeout": false - }, - "commonjs": { - "exports": true, - "module": false, - "require": false, - "global": false - }, - "amd": { - "define": false, - "require": false - }, - "mocha": { - "after": false, - "afterEach": false, - "before": false, - "beforeEach": false, - "context": false, - "describe": false, - "it": false, - "mocha": false, - "run": false, - "setup": false, - "specify": false, - "suite": false, - "suiteSetup": false, - "suiteTeardown": false, - "teardown": false, - "test": false, - "xcontext": false, - "xdescribe": false, - "xit": false, - "xspecify": false - }, - "jasmine": { - "afterAll": false, - "afterEach": false, - "beforeAll": false, - "beforeEach": false, - "describe": false, - "expect": false, - "fail": false, - "fdescribe": false, - "fit": false, - "it": false, - "jasmine": false, - "pending": false, - "runs": false, - "spyOn": false, - "waits": false, - "waitsFor": false, - "xdescribe": false, - "xit": false - }, - "jest": { - "afterAll": false, - "afterEach": false, - "beforeAll": false, - "beforeEach": false, - "check": false, - "describe": false, - "expect": false, - "gen": false, - "it": false, - "fit": false, - "jest": false, - "pit": false, - "require": false, - "test": false, - "xdescribe": false, - "xit": false, - "xtest": false - }, - "qunit": { - "asyncTest": false, - "deepEqual": false, - "equal": false, - "expect": false, - "module": false, - "notDeepEqual": false, - "notEqual": false, - "notOk": false, - "notPropEqual": false, - "notStrictEqual": false, - "ok": false, - "propEqual": false, - "QUnit": false, - "raises": false, - "start": false, - "stop": false, - "strictEqual": false, - "test": false, - "throws": false - }, - "phantomjs": { - "console": true, - "exports": true, - "phantom": true, - "require": true, - "WebPage": true - }, - "couch": { - "emit": false, - "exports": false, - "getRow": false, - "log": false, - "module": false, - "provides": false, - "require": false, - "respond": false, - "send": false, - "start": false, - "sum": false - }, - "rhino": { - "defineClass": false, - "deserialize": false, - "gc": false, - "help": false, - "importClass": false, - "importPackage": false, - "java": false, - "load": false, - "loadClass": false, - "Packages": false, - "print": false, - "quit": false, - "readFile": false, - "readUrl": false, - "runCommand": false, - "seal": false, - "serialize": false, - "spawn": false, - "sync": false, - "toint32": false, - "version": false - }, - "nashorn": { - "__DIR__": false, - "__FILE__": false, - "__LINE__": false, - "com": false, - "edu": false, - "exit": false, - "Java": false, - "java": false, - "javafx": false, - "JavaImporter": false, - "javax": false, - "JSAdapter": false, - "load": false, - "loadWithNewGlobal": false, - "org": false, - "Packages": false, - "print": false, - "quit": false - }, - "wsh": { - "ActiveXObject": true, - "Enumerator": true, - "GetObject": true, - "ScriptEngine": true, - "ScriptEngineBuildVersion": true, - "ScriptEngineMajorVersion": true, - "ScriptEngineMinorVersion": true, - "VBArray": true, - "WScript": true, - "WSH": true, - "XDomainRequest": true - }, - "jquery": { - "$": false, - "jQuery": false - }, - "yui": { - "Y": false, - "YUI": false, - "YUI_config": false - }, - "shelljs": { - "cat": false, - "cd": false, - "chmod": false, - "config": false, - "cp": false, - "dirs": false, - "echo": false, - "env": false, - "error": false, - "exec": false, - "exit": false, - "find": false, - "grep": false, - "ls": false, - "ln": false, - "mkdir": false, - "mv": false, - "popd": false, - "pushd": false, - "pwd": false, - "rm": false, - "sed": false, - "set": false, - "target": false, - "tempdir": false, - "test": false, - "touch": false, - "which": false - }, - "prototypejs": { - "$": false, - "$$": false, - "$A": false, - "$break": false, - "$continue": false, - "$F": false, - "$H": false, - "$R": false, - "$w": false, - "Abstract": false, - "Ajax": false, - "Autocompleter": false, - "Builder": false, - "Class": false, - "Control": false, - "Draggable": false, - "Draggables": false, - "Droppables": false, - "Effect": false, - "Element": false, - "Enumerable": false, - "Event": false, - "Field": false, - "Form": false, - "Hash": false, - "Insertion": false, - "ObjectRange": false, - "PeriodicalExecuter": false, - "Position": false, - "Prototype": false, - "Scriptaculous": false, - "Selector": false, - "Sortable": false, - "SortableObserver": false, - "Sound": false, - "Template": false, - "Toggle": false, - "Try": false - }, - "meteor": { - "$": false, - "_": false, - "Accounts": false, - "AccountsClient": false, - "AccountsServer": false, - "AccountsCommon": false, - "App": false, - "Assets": false, - "Blaze": false, - "check": false, - "Cordova": false, - "DDP": false, - "DDPServer": false, - "DDPRateLimiter": false, - "Deps": false, - "EJSON": false, - "Email": false, - "HTTP": false, - "Log": false, - "Match": false, - "Meteor": false, - "Mongo": false, - "MongoInternals": false, - "Npm": false, - "Package": false, - "Plugin": false, - "process": false, - "Random": false, - "ReactiveDict": false, - "ReactiveVar": false, - "Router": false, - "ServiceConfiguration": false, - "Session": false, - "share": false, - "Spacebars": false, - "Template": false, - "Tinytest": false, - "Tracker": false, - "UI": false, - "Utils": false, - "WebApp": false, - "WebAppInternals": false - }, - "mongo": { - "_isWindows": false, - "_rand": false, - "BulkWriteResult": false, - "cat": false, - "cd": false, - "connect": false, - "db": false, - "getHostName": false, - "getMemInfo": false, - "hostname": false, - "ISODate": false, - "listFiles": false, - "load": false, - "ls": false, - "md5sumFile": false, - "mkdir": false, - "Mongo": false, - "NumberInt": false, - "NumberLong": false, - "ObjectId": false, - "PlanCache": false, - "print": false, - "printjson": false, - "pwd": false, - "quit": false, - "removeFile": false, - "rs": false, - "sh": false, - "UUID": false, - "version": false, - "WriteResult": false - }, - "applescript": { - "$": false, - "Application": false, - "Automation": false, - "console": false, - "delay": false, - "Library": false, - "ObjC": false, - "ObjectSpecifier": false, - "Path": false, - "Progress": false, - "Ref": false - }, - "serviceworker": { - "caches": false, - "Cache": false, - "CacheStorage": false, - "Client": false, - "clients": false, - "Clients": false, - "ExtendableEvent": false, - "ExtendableMessageEvent": false, - "FetchEvent": false, - "importScripts": false, - "registration": false, - "self": false, - "ServiceWorker": false, - "ServiceWorkerContainer": false, - "ServiceWorkerGlobalScope": false, - "ServiceWorkerMessageEvent": false, - "ServiceWorkerRegistration": false, - "skipWaiting": false, - "WindowClient": false - }, - "atomtest": { - "advanceClock": false, - "fakeClearInterval": false, - "fakeClearTimeout": false, - "fakeSetInterval": false, - "fakeSetTimeout": false, - "resetTimeouts": false, - "waitsForPromise": false - }, - "embertest": { - "andThen": false, - "click": false, - "currentPath": false, - "currentRouteName": false, - "currentURL": false, - "fillIn": false, - "find": false, - "findWithAssert": false, - "keyEvent": false, - "pauseTest": false, - "triggerEvent": false, - "visit": false - }, - "protractor": { - "$": false, - "$$": false, - "browser": false, - "By": false, - "by": false, - "DartObject": false, - "element": false, - "protractor": false - }, - "shared-node-browser": { - "clearInterval": false, - "clearTimeout": false, - "console": false, - "setInterval": false, - "setTimeout": false - }, - "webextensions": { - "browser": false, - "chrome": false, - "opr": false - }, - "greasemonkey": { - "GM_addStyle": false, - "GM_deleteValue": false, - "GM_getResourceText": false, - "GM_getResourceURL": false, - "GM_getValue": false, - "GM_info": false, - "GM_listValues": false, - "GM_log": false, - "GM_openInTab": false, - "GM_registerMenuCommand": false, - "GM_setClipboard": false, - "GM_setValue": false, - "GM_xmlhttpRequest": false, - "unsafeWindow": false - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/globals/index.js b/fundamentals/bug-challenge-es6/node_modules/globals/index.js deleted file mode 100644 index a02ef2485..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/globals/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./globals.json'); diff --git a/fundamentals/bug-challenge-es6/node_modules/globals/license b/fundamentals/bug-challenge-es6/node_modules/globals/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/globals/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/globals/package.json b/fundamentals/bug-challenge-es6/node_modules/globals/package.json deleted file mode 100644 index 3e52b32c3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/globals/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_args": [ - [ - "globals@^9.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-traverse" - ] - ], - "_from": "globals@>=9.0.0 <10.0.0", - "_id": "globals@9.14.0", - "_inCache": true, - "_installable": true, - "_location": "/globals", - "_nodeVersion": "4.6.2", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/globals-9.14.0.tgz_1479623329065_0.9806821248494089" - }, - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.15.11", - "_phantomChildren": {}, - "_requested": { - "name": "globals", - "raw": "globals@^9.0.0", - "rawSpec": "^9.0.0", - "scope": null, - "spec": ">=9.0.0 <10.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-traverse" - ], - "_resolved": "https://registry.npmjs.org/globals/-/globals-9.14.0.tgz", - "_shasum": "8859936af0038741263053b39d0e76ca241e4034", - "_shrinkwrap": null, - "_spec": "globals@^9.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-traverse", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "http://sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/globals/issues" - }, - "dependencies": {}, - "description": "Global identifiers from different JavaScript environments", - "devDependencies": { - "mocha": "*" - }, - "directories": {}, - "dist": { - "shasum": "8859936af0038741263053b39d0e76ca241e4034", - "tarball": "https://registry.npmjs.org/globals/-/globals-9.14.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js", - "globals.json" - ], - "gitHead": "4159cd067369b8242131551beb09fafb52afc289", - "homepage": "https://github.com/sindresorhus/globals#readme", - "keywords": [ - "globals", - "global", - "identifiers", - "variables", - "vars", - "jshint", - "eslint", - "environments" - ], - "license": "MIT", - "maintainers": [ - { - "email": "ben@byk.im", - "name": "byk" - }, - { - "email": "schreck.mathias@gmail.com", - "name": "lo1tuma" - }, - { - "email": "nicholas@nczconsulting.com", - "name": "nzakas" - }, - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "globals", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/globals.git" - }, - "scripts": { - "test": "mocha" - }, - "version": "9.14.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/globals/readme.md b/fundamentals/bug-challenge-es6/node_modules/globals/readme.md deleted file mode 100644 index 5314bbb93..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/globals/readme.md +++ /dev/null @@ -1,41 +0,0 @@ -# globals [![Build Status](https://travis-ci.org/sindresorhus/globals.svg?branch=master)](https://travis-ci.org/sindresorhus/globals) - -> Global identifiers from different JavaScript environments - -Extracted from [JSHint](https://github.com/jshint/jshint/blob/3a8efa979dbb157bfb5c10b5826603a55a33b9ad/src/vars.js) and [ESLint](https://github.com/eslint/eslint/blob/b648406218f8a2d7302b98f5565e23199f44eb31/conf/environments.json) and merged. - -It's just a [JSON file](globals.json), so use it in whatever environment you like. - -**This module [no longer accepts](https://github.com/sindresorhus/globals/issues/82) new environments. If you need it for ESLint, just [create a plugin](http://eslint.org/docs/developer-guide/working-with-plugins#environments-in-plugins).** - - -## Install - -``` -$ npm install --save globals -``` - - -## Usage - -```js -var globals = require('globals'); - -console.log(globals.browser); -/* -{ - addEventListener: false, - applicationCache: false, - ArrayBuffer: false, - atob: false, - ... -} -*/ -``` - -Each global is given a value of `true` or `false`. A value of `true` indicates that the variable may be overwritten. A value of `false` indicates that the variable should be considered read-only. This information is used by static analysis tools to flag incorrect behavior. We assume all variables should be `false` unless we hear otherwise. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/LICENSE b/fundamentals/bug-challenge-es6/node_modules/graceful-fs/LICENSE deleted file mode 100644 index 9d2c80369..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter, Ben Noordhuis, and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/README.md b/fundamentals/bug-challenge-es6/node_modules/graceful-fs/README.md deleted file mode 100644 index 5273a50ad..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/README.md +++ /dev/null @@ -1,133 +0,0 @@ -# graceful-fs - -graceful-fs functions as a drop-in replacement for the fs module, -making various improvements. - -The improvements are meant to normalize behavior across different -platforms and environments, and to make filesystem access more -resilient to errors. - -## Improvements over [fs module](https://nodejs.org/api/fs.html) - -* Queues up `open` and `readdir` calls, and retries them once - something closes if there is an EMFILE error from too many file - descriptors. -* fixes `lchmod` for Node versions prior to 0.6.2. -* implements `fs.lutimes` if possible. Otherwise it becomes a noop. -* ignores `EINVAL` and `EPERM` errors in `chown`, `fchown` or - `lchown` if the user isn't root. -* makes `lchmod` and `lchown` become noops, if not available. -* retries reading a file if `read` results in EAGAIN error. - -On Windows, it retries renaming a file for up to one second if `EACCESS` -or `EPERM` error occurs, likely because antivirus software has locked -the directory. - -## USAGE - -```javascript -// use just like fs -var fs = require('graceful-fs') - -// now go and do stuff with it... -fs.readFileSync('some-file-or-whatever') -``` - -## Global Patching - -If you want to patch the global fs module (or any other fs-like -module) you can do this: - -```javascript -// Make sure to read the caveat below. -var realFs = require('fs') -var gracefulFs = require('graceful-fs') -gracefulFs.gracefulify(realFs) -``` - -This should only ever be done at the top-level application layer, in -order to delay on EMFILE errors from any fs-using dependencies. You -should **not** do this in a library, because it can cause unexpected -delays in other parts of the program. - -## Changes - -This module is fairly stable at this point, and used by a lot of -things. That being said, because it implements a subtle behavior -change in a core part of the node API, even modest changes can be -extremely breaking, and the versioning is thus biased towards -bumping the major when in doubt. - -The main change between major versions has been switching between -providing a fully-patched `fs` module vs monkey-patching the node core -builtin, and the approach by which a non-monkey-patched `fs` was -created. - -The goal is to trade `EMFILE` errors for slower fs operations. So, if -you try to open a zillion files, rather than crashing, `open` -operations will be queued up and wait for something else to `close`. - -There are advantages to each approach. Monkey-patching the fs means -that no `EMFILE` errors can possibly occur anywhere in your -application, because everything is using the same core `fs` module, -which is patched. However, it can also obviously cause undesirable -side-effects, especially if the module is loaded multiple times. - -Implementing a separate-but-identical patched `fs` module is more -surgical (and doesn't run the risk of patching multiple times), but -also imposes the challenge of keeping in sync with the core module. - -The current approach loads the `fs` module, and then creates a -lookalike object that has all the same methods, except a few that are -patched. It is safe to use in all versions of Node from 0.8 through -7.0. - -### v4 - -* Do not monkey-patch the fs module. This module may now be used as a - drop-in dep, and users can opt into monkey-patching the fs builtin - if their app requires it. - -### v3 - -* Monkey-patch fs, because the eval approach no longer works on recent - node. -* fixed possible type-error throw if rename fails on windows -* verify that we *never* get EMFILE errors -* Ignore ENOSYS from chmod/chown -* clarify that graceful-fs must be used as a drop-in - -### v2.1.0 - -* Use eval rather than monkey-patching fs. -* readdir: Always sort the results -* win32: requeue a file if error has an OK status - -### v2.0 - -* A return to monkey patching -* wrap process.cwd - -### v1.1 - -* wrap readFile -* Wrap fs.writeFile. -* readdir protection -* Don't clobber the fs builtin -* Handle fs.read EAGAIN errors by trying again -* Expose the curOpen counter -* No-op lchown/lchmod if not implemented -* fs.rename patch only for win32 -* Patch fs.rename to handle AV software on Windows -* Close #4 Chown should not fail on einval or eperm if non-root -* Fix isaacs/fstream#1 Only wrap fs one time -* Fix #3 Start at 1024 max files, then back off on EMFILE -* lutimes that doens't blow up on Linux -* A full on-rewrite using a queue instead of just swallowing the EMFILE error -* Wrap Read/Write streams as well - -### 1.0 - -* Update engines for node 0.6 -* Be lstat-graceful on Windows -* first diff --git a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/fs.js b/fundamentals/bug-challenge-es6/node_modules/graceful-fs/fs.js deleted file mode 100644 index 8ad4a3839..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/fs.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict' - -var fs = require('fs') - -module.exports = clone(fs) - -function clone (obj) { - if (obj === null || typeof obj !== 'object') - return obj - - if (obj instanceof Object) - var copy = { __proto__: obj.__proto__ } - else - var copy = Object.create(null) - - Object.getOwnPropertyNames(obj).forEach(function (key) { - Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key)) - }) - - return copy -} diff --git a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/graceful-fs.js b/fundamentals/bug-challenge-es6/node_modules/graceful-fs/graceful-fs.js deleted file mode 100644 index 33b30d2e9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/graceful-fs.js +++ /dev/null @@ -1,262 +0,0 @@ -var fs = require('fs') -var polyfills = require('./polyfills.js') -var legacy = require('./legacy-streams.js') -var queue = [] - -var util = require('util') - -function noop () {} - -var debug = noop -if (util.debuglog) - debug = util.debuglog('gfs4') -else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) - debug = function() { - var m = util.format.apply(util, arguments) - m = 'GFS4: ' + m.split(/\n/).join('\nGFS4: ') - console.error(m) - } - -if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) { - process.on('exit', function() { - debug(queue) - require('assert').equal(queue.length, 0) - }) -} - -module.exports = patch(require('./fs.js')) -if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH) { - module.exports = patch(fs) -} - -// Always patch fs.close/closeSync, because we want to -// retry() whenever a close happens *anywhere* in the program. -// This is essential when multiple graceful-fs instances are -// in play at the same time. -module.exports.close = -fs.close = (function (fs$close) { return function (fd, cb) { - return fs$close.call(fs, fd, function (err) { - if (!err) - retry() - - if (typeof cb === 'function') - cb.apply(this, arguments) - }) -}})(fs.close) - -module.exports.closeSync = -fs.closeSync = (function (fs$closeSync) { return function (fd) { - // Note that graceful-fs also retries when fs.closeSync() fails. - // Looks like a bug to me, although it's probably a harmless one. - var rval = fs$closeSync.apply(fs, arguments) - retry() - return rval -}})(fs.closeSync) - -function patch (fs) { - // Everything that references the open() function needs to be in here - polyfills(fs) - fs.gracefulify = patch - fs.FileReadStream = ReadStream; // Legacy name. - fs.FileWriteStream = WriteStream; // Legacy name. - fs.createReadStream = createReadStream - fs.createWriteStream = createWriteStream - var fs$readFile = fs.readFile - fs.readFile = readFile - function readFile (path, options, cb) { - if (typeof options === 'function') - cb = options, options = null - - return go$readFile(path, options, cb) - - function go$readFile (path, options, cb) { - return fs$readFile(path, options, function (err) { - if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) - enqueue([go$readFile, [path, options, cb]]) - else { - if (typeof cb === 'function') - cb.apply(this, arguments) - retry() - } - }) - } - } - - var fs$writeFile = fs.writeFile - fs.writeFile = writeFile - function writeFile (path, data, options, cb) { - if (typeof options === 'function') - cb = options, options = null - - return go$writeFile(path, data, options, cb) - - function go$writeFile (path, data, options, cb) { - return fs$writeFile(path, data, options, function (err) { - if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) - enqueue([go$writeFile, [path, data, options, cb]]) - else { - if (typeof cb === 'function') - cb.apply(this, arguments) - retry() - } - }) - } - } - - var fs$appendFile = fs.appendFile - if (fs$appendFile) - fs.appendFile = appendFile - function appendFile (path, data, options, cb) { - if (typeof options === 'function') - cb = options, options = null - - return go$appendFile(path, data, options, cb) - - function go$appendFile (path, data, options, cb) { - return fs$appendFile(path, data, options, function (err) { - if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) - enqueue([go$appendFile, [path, data, options, cb]]) - else { - if (typeof cb === 'function') - cb.apply(this, arguments) - retry() - } - }) - } - } - - var fs$readdir = fs.readdir - fs.readdir = readdir - function readdir (path, options, cb) { - var args = [path] - if (typeof options !== 'function') { - args.push(options) - } else { - cb = options - } - args.push(go$readdir$cb) - - return go$readdir(args) - - function go$readdir$cb (err, files) { - if (files && files.sort) - files.sort() - - if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) - enqueue([go$readdir, [args]]) - else { - if (typeof cb === 'function') - cb.apply(this, arguments) - retry() - } - } - } - - function go$readdir (args) { - return fs$readdir.apply(fs, args) - } - - if (process.version.substr(0, 4) === 'v0.8') { - var legStreams = legacy(fs) - ReadStream = legStreams.ReadStream - WriteStream = legStreams.WriteStream - } - - var fs$ReadStream = fs.ReadStream - ReadStream.prototype = Object.create(fs$ReadStream.prototype) - ReadStream.prototype.open = ReadStream$open - - var fs$WriteStream = fs.WriteStream - WriteStream.prototype = Object.create(fs$WriteStream.prototype) - WriteStream.prototype.open = WriteStream$open - - fs.ReadStream = ReadStream - fs.WriteStream = WriteStream - - function ReadStream (path, options) { - if (this instanceof ReadStream) - return fs$ReadStream.apply(this, arguments), this - else - return ReadStream.apply(Object.create(ReadStream.prototype), arguments) - } - - function ReadStream$open () { - var that = this - open(that.path, that.flags, that.mode, function (err, fd) { - if (err) { - if (that.autoClose) - that.destroy() - - that.emit('error', err) - } else { - that.fd = fd - that.emit('open', fd) - that.read() - } - }) - } - - function WriteStream (path, options) { - if (this instanceof WriteStream) - return fs$WriteStream.apply(this, arguments), this - else - return WriteStream.apply(Object.create(WriteStream.prototype), arguments) - } - - function WriteStream$open () { - var that = this - open(that.path, that.flags, that.mode, function (err, fd) { - if (err) { - that.destroy() - that.emit('error', err) - } else { - that.fd = fd - that.emit('open', fd) - } - }) - } - - function createReadStream (path, options) { - return new ReadStream(path, options) - } - - function createWriteStream (path, options) { - return new WriteStream(path, options) - } - - var fs$open = fs.open - fs.open = open - function open (path, flags, mode, cb) { - if (typeof mode === 'function') - cb = mode, mode = null - - return go$open(path, flags, mode, cb) - - function go$open (path, flags, mode, cb) { - return fs$open(path, flags, mode, function (err, fd) { - if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) - enqueue([go$open, [path, flags, mode, cb]]) - else { - if (typeof cb === 'function') - cb.apply(this, arguments) - retry() - } - }) - } - } - - return fs -} - -function enqueue (elem) { - debug('ENQUEUE', elem[0].name, elem[1]) - queue.push(elem) -} - -function retry () { - var elem = queue.shift() - if (elem) { - debug('RETRY', elem[0].name, elem[1]) - elem[0].apply(null, elem[1]) - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/legacy-streams.js b/fundamentals/bug-challenge-es6/node_modules/graceful-fs/legacy-streams.js deleted file mode 100644 index d617b50fc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/legacy-streams.js +++ /dev/null @@ -1,118 +0,0 @@ -var Stream = require('stream').Stream - -module.exports = legacy - -function legacy (fs) { - return { - ReadStream: ReadStream, - WriteStream: WriteStream - } - - function ReadStream (path, options) { - if (!(this instanceof ReadStream)) return new ReadStream(path, options); - - Stream.call(this); - - var self = this; - - this.path = path; - this.fd = null; - this.readable = true; - this.paused = false; - - this.flags = 'r'; - this.mode = 438; /*=0666*/ - this.bufferSize = 64 * 1024; - - options = options || {}; - - // Mixin options into this - var keys = Object.keys(options); - for (var index = 0, length = keys.length; index < length; index++) { - var key = keys[index]; - this[key] = options[key]; - } - - if (this.encoding) this.setEncoding(this.encoding); - - if (this.start !== undefined) { - if ('number' !== typeof this.start) { - throw TypeError('start must be a Number'); - } - if (this.end === undefined) { - this.end = Infinity; - } else if ('number' !== typeof this.end) { - throw TypeError('end must be a Number'); - } - - if (this.start > this.end) { - throw new Error('start must be <= end'); - } - - this.pos = this.start; - } - - if (this.fd !== null) { - process.nextTick(function() { - self._read(); - }); - return; - } - - fs.open(this.path, this.flags, this.mode, function (err, fd) { - if (err) { - self.emit('error', err); - self.readable = false; - return; - } - - self.fd = fd; - self.emit('open', fd); - self._read(); - }) - } - - function WriteStream (path, options) { - if (!(this instanceof WriteStream)) return new WriteStream(path, options); - - Stream.call(this); - - this.path = path; - this.fd = null; - this.writable = true; - - this.flags = 'w'; - this.encoding = 'binary'; - this.mode = 438; /*=0666*/ - this.bytesWritten = 0; - - options = options || {}; - - // Mixin options into this - var keys = Object.keys(options); - for (var index = 0, length = keys.length; index < length; index++) { - var key = keys[index]; - this[key] = options[key]; - } - - if (this.start !== undefined) { - if ('number' !== typeof this.start) { - throw TypeError('start must be a Number'); - } - if (this.start < 0) { - throw new Error('start must be >= zero'); - } - - this.pos = this.start; - } - - this.busy = false; - this._queue = []; - - if (this.fd === null) { - this._open = fs.open; - this._queue.push([this._open, this.path, this.flags, this.mode, undefined]); - this.flush(); - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/package.json b/fundamentals/bug-challenge-es6/node_modules/graceful-fs/package.json deleted file mode 100644 index 028941700..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_args": [ - [ - "graceful-fs@^4.1.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/load-json-file" - ] - ], - "_from": "graceful-fs@>=4.1.2 <5.0.0", - "_id": "graceful-fs@4.1.11", - "_inCache": true, - "_installable": true, - "_location": "/graceful-fs", - "_nodeVersion": "6.5.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/graceful-fs-4.1.11.tgz_1479843029430_0.2122855328489095" - }, - "_npmUser": { - "email": "i@izs.me", - "name": "isaacs" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "graceful-fs", - "raw": "graceful-fs@^4.1.2", - "rawSpec": "^4.1.2", - "scope": null, - "spec": ">=4.1.2 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/load-json-file", - "/path-type" - ], - "_resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "_shasum": "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658", - "_shrinkwrap": null, - "_spec": "graceful-fs@^4.1.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/load-json-file", - "bugs": { - "url": "https://github.com/isaacs/node-graceful-fs/issues" - }, - "dependencies": {}, - "description": "A drop-in replacement for fs, making various improvements.", - "devDependencies": { - "mkdirp": "^0.5.0", - "rimraf": "^2.2.8", - "tap": "^5.4.2" - }, - "directories": { - "test": "test" - }, - "dist": { - "shasum": "0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658", - "tarball": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz" - }, - "engines": { - "node": ">=0.4.0" - }, - "files": [ - "fs.js", - "graceful-fs.js", - "legacy-streams.js", - "polyfills.js" - ], - "gitHead": "65cf80d1fd3413b823c16c626c1e7c326452bee5", - "homepage": "https://github.com/isaacs/node-graceful-fs#readme", - "keywords": [ - "fs", - "module", - "reading", - "retry", - "retries", - "queue", - "error", - "errors", - "handling", - "EMFILE", - "EAGAIN", - "EINVAL", - "EPERM", - "EACCESS" - ], - "license": "ISC", - "main": "graceful-fs.js", - "maintainers": [ - { - "email": "i@izs.me", - "name": "isaacs" - } - ], - "name": "graceful-fs", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/isaacs/node-graceful-fs.git" - }, - "scripts": { - "test": "node test.js | tap -" - }, - "version": "4.1.11" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/polyfills.js b/fundamentals/bug-challenge-es6/node_modules/graceful-fs/polyfills.js deleted file mode 100644 index 4c6aca78a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-fs/polyfills.js +++ /dev/null @@ -1,330 +0,0 @@ -var fs = require('./fs.js') -var constants = require('constants') - -var origCwd = process.cwd -var cwd = null - -var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform - -process.cwd = function() { - if (!cwd) - cwd = origCwd.call(process) - return cwd -} -try { - process.cwd() -} catch (er) {} - -var chdir = process.chdir -process.chdir = function(d) { - cwd = null - chdir.call(process, d) -} - -module.exports = patch - -function patch (fs) { - // (re-)implement some things that are known busted or missing. - - // lchmod, broken prior to 0.6.2 - // back-port the fix here. - if (constants.hasOwnProperty('O_SYMLINK') && - process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) { - patchLchmod(fs) - } - - // lutimes implementation, or no-op - if (!fs.lutimes) { - patchLutimes(fs) - } - - // https://github.com/isaacs/node-graceful-fs/issues/4 - // Chown should not fail on einval or eperm if non-root. - // It should not fail on enosys ever, as this just indicates - // that a fs doesn't support the intended operation. - - fs.chown = chownFix(fs.chown) - fs.fchown = chownFix(fs.fchown) - fs.lchown = chownFix(fs.lchown) - - fs.chmod = chmodFix(fs.chmod) - fs.fchmod = chmodFix(fs.fchmod) - fs.lchmod = chmodFix(fs.lchmod) - - fs.chownSync = chownFixSync(fs.chownSync) - fs.fchownSync = chownFixSync(fs.fchownSync) - fs.lchownSync = chownFixSync(fs.lchownSync) - - fs.chmodSync = chmodFixSync(fs.chmodSync) - fs.fchmodSync = chmodFixSync(fs.fchmodSync) - fs.lchmodSync = chmodFixSync(fs.lchmodSync) - - fs.stat = statFix(fs.stat) - fs.fstat = statFix(fs.fstat) - fs.lstat = statFix(fs.lstat) - - fs.statSync = statFixSync(fs.statSync) - fs.fstatSync = statFixSync(fs.fstatSync) - fs.lstatSync = statFixSync(fs.lstatSync) - - // if lchmod/lchown do not exist, then make them no-ops - if (!fs.lchmod) { - fs.lchmod = function (path, mode, cb) { - if (cb) process.nextTick(cb) - } - fs.lchmodSync = function () {} - } - if (!fs.lchown) { - fs.lchown = function (path, uid, gid, cb) { - if (cb) process.nextTick(cb) - } - fs.lchownSync = function () {} - } - - // on Windows, A/V software can lock the directory, causing this - // to fail with an EACCES or EPERM if the directory contains newly - // created files. Try again on failure, for up to 60 seconds. - - // Set the timeout this long because some Windows Anti-Virus, such as Parity - // bit9, may lock files for up to a minute, causing npm package install - // failures. Also, take care to yield the scheduler. Windows scheduling gives - // CPU to a busy looping process, which can cause the program causing the lock - // contention to be starved of CPU by node, so the contention doesn't resolve. - if (platform === "win32") { - fs.rename = (function (fs$rename) { return function (from, to, cb) { - var start = Date.now() - var backoff = 0; - fs$rename(from, to, function CB (er) { - if (er - && (er.code === "EACCES" || er.code === "EPERM") - && Date.now() - start < 60000) { - setTimeout(function() { - fs.stat(to, function (stater, st) { - if (stater && stater.code === "ENOENT") - fs$rename(from, to, CB); - else - cb(er) - }) - }, backoff) - if (backoff < 100) - backoff += 10; - return; - } - if (cb) cb(er) - }) - }})(fs.rename) - } - - // if read() returns EAGAIN, then just try it again. - fs.read = (function (fs$read) { return function (fd, buffer, offset, length, position, callback_) { - var callback - if (callback_ && typeof callback_ === 'function') { - var eagCounter = 0 - callback = function (er, _, __) { - if (er && er.code === 'EAGAIN' && eagCounter < 10) { - eagCounter ++ - return fs$read.call(fs, fd, buffer, offset, length, position, callback) - } - callback_.apply(this, arguments) - } - } - return fs$read.call(fs, fd, buffer, offset, length, position, callback) - }})(fs.read) - - fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) { - var eagCounter = 0 - while (true) { - try { - return fs$readSync.call(fs, fd, buffer, offset, length, position) - } catch (er) { - if (er.code === 'EAGAIN' && eagCounter < 10) { - eagCounter ++ - continue - } - throw er - } - } - }})(fs.readSync) -} - -function patchLchmod (fs) { - fs.lchmod = function (path, mode, callback) { - fs.open( path - , constants.O_WRONLY | constants.O_SYMLINK - , mode - , function (err, fd) { - if (err) { - if (callback) callback(err) - return - } - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - fs.fchmod(fd, mode, function (err) { - fs.close(fd, function(err2) { - if (callback) callback(err || err2) - }) - }) - }) - } - - fs.lchmodSync = function (path, mode) { - var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode) - - // prefer to return the chmod error, if one occurs, - // but still try to close, and report closing errors if they occur. - var threw = true - var ret - try { - ret = fs.fchmodSync(fd, mode) - threw = false - } finally { - if (threw) { - try { - fs.closeSync(fd) - } catch (er) {} - } else { - fs.closeSync(fd) - } - } - return ret - } -} - -function patchLutimes (fs) { - if (constants.hasOwnProperty("O_SYMLINK")) { - fs.lutimes = function (path, at, mt, cb) { - fs.open(path, constants.O_SYMLINK, function (er, fd) { - if (er) { - if (cb) cb(er) - return - } - fs.futimes(fd, at, mt, function (er) { - fs.close(fd, function (er2) { - if (cb) cb(er || er2) - }) - }) - }) - } - - fs.lutimesSync = function (path, at, mt) { - var fd = fs.openSync(path, constants.O_SYMLINK) - var ret - var threw = true - try { - ret = fs.futimesSync(fd, at, mt) - threw = false - } finally { - if (threw) { - try { - fs.closeSync(fd) - } catch (er) {} - } else { - fs.closeSync(fd) - } - } - return ret - } - - } else { - fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) } - fs.lutimesSync = function () {} - } -} - -function chmodFix (orig) { - if (!orig) return orig - return function (target, mode, cb) { - return orig.call(fs, target, mode, function (er) { - if (chownErOk(er)) er = null - if (cb) cb.apply(this, arguments) - }) - } -} - -function chmodFixSync (orig) { - if (!orig) return orig - return function (target, mode) { - try { - return orig.call(fs, target, mode) - } catch (er) { - if (!chownErOk(er)) throw er - } - } -} - - -function chownFix (orig) { - if (!orig) return orig - return function (target, uid, gid, cb) { - return orig.call(fs, target, uid, gid, function (er) { - if (chownErOk(er)) er = null - if (cb) cb.apply(this, arguments) - }) - } -} - -function chownFixSync (orig) { - if (!orig) return orig - return function (target, uid, gid) { - try { - return orig.call(fs, target, uid, gid) - } catch (er) { - if (!chownErOk(er)) throw er - } - } -} - - -function statFix (orig) { - if (!orig) return orig - // Older versions of Node erroneously returned signed integers for - // uid + gid. - return function (target, cb) { - return orig.call(fs, target, function (er, stats) { - if (!stats) return cb.apply(this, arguments) - if (stats.uid < 0) stats.uid += 0x100000000 - if (stats.gid < 0) stats.gid += 0x100000000 - if (cb) cb.apply(this, arguments) - }) - } -} - -function statFixSync (orig) { - if (!orig) return orig - // Older versions of Node erroneously returned signed integers for - // uid + gid. - return function (target) { - var stats = orig.call(fs, target) - if (stats.uid < 0) stats.uid += 0x100000000 - if (stats.gid < 0) stats.gid += 0x100000000 - return stats; - } -} - -// ENOSYS means that the fs doesn't support the op. Just ignore -// that, because it doesn't matter. -// -// if there's no getuid, or if getuid() is something other -// than 0, and the error is EINVAL or EPERM, then just ignore -// it. -// -// This specific case is a silent failure in cp, install, tar, -// and most other unix tools that manage permissions. -// -// When running as root, or if other types of errors are -// encountered, then it's strict. -function chownErOk (er) { - if (!er) - return true - - if (er.code === "ENOSYS") - return true - - var nonroot = !process.getuid || process.getuid() !== 0 - if (nonroot) { - if (er.code === "EINVAL" || er.code === "EPERM") - return true - } - - return false -} diff --git a/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/.npmignore b/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/.npmignore deleted file mode 100644 index 3ac7d16c6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -.idea/ -.DS_Store -node_modules/ diff --git a/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/.travis.yml deleted file mode 100644 index baf9be7f6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.12" - - "io.js" diff --git a/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/LICENSE b/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/LICENSE deleted file mode 100644 index d1f842f0b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Zhiye Li - -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/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/README.md b/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/README.md deleted file mode 100644 index fc63b505a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# graceful-readlink -[![NPM Version](http://img.shields.io/npm/v/graceful-readlink.svg?style=flat)](https://www.npmjs.org/package/graceful-readlink) -[![NPM Downloads](https://img.shields.io/npm/dm/graceful-readlink.svg?style=flat)](https://www.npmjs.org/package/graceful-readlink) - - -## Usage - -```js -var readlinkSync = require('graceful-readlink').readlinkSync; -console.log(readlinkSync(f)); -// output -// the file pointed to when `f` is a symbolic link -// the `f` itself when `f` is not a symbolic link -``` -## Licence - -MIT License diff --git a/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/index.js b/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/index.js deleted file mode 100644 index 7e9fc70f0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/index.js +++ /dev/null @@ -1,12 +0,0 @@ -var fs = require('fs') - , lstat = fs.lstatSync; - -exports.readlinkSync = function (p) { - if (lstat(p).isSymbolicLink()) { - return fs.readlinkSync(p); - } else { - return p; - } -}; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/package.json b/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/package.json deleted file mode 100644 index 3b50fbdfa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/graceful-readlink/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "_args": [ - [ - "graceful-readlink@>= 1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/commander" - ] - ], - "_from": "graceful-readlink@>=1.0.0", - "_id": "graceful-readlink@1.0.1", - "_inCache": true, - "_installable": true, - "_location": "/graceful-readlink", - "_nodeVersion": "0.11.14", - "_npmUser": { - "email": "zhiyelee@gmail.com", - "name": "zhiyelee" - }, - "_npmVersion": "2.1.17", - "_phantomChildren": {}, - "_requested": { - "name": "graceful-readlink", - "raw": "graceful-readlink@>= 1.0.0", - "rawSpec": ">= 1.0.0", - "scope": null, - "spec": ">=1.0.0", - "type": "range" - }, - "_requiredBy": [ - "/commander" - ], - "_resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "_shasum": "4cafad76bc62f02fa039b2f94e9a3dd3a391a725", - "_shrinkwrap": null, - "_spec": "graceful-readlink@>= 1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/commander", - "author": { - "name": "zhiyelee" - }, - "bugs": { - "url": "https://github.com/zhiyelee/graceful-readlink/issues" - }, - "dependencies": {}, - "description": "graceful fs.readlink", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "4cafad76bc62f02fa039b2f94e9a3dd3a391a725", - "tarball": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz" - }, - "gitHead": "f6655275bebef706fb63fd01b5f062a7052419a5", - "homepage": "https://github.com/zhiyelee/graceful-readlink", - "keywords": [ - "fs.readlink", - "readlink" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "zhiyelee@gmail.com", - "name": "zhiyelee" - } - ], - "name": "graceful-readlink", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/zhiyelee/graceful-readlink.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "1.0.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/growly/HISTORY.md b/fundamentals/bug-challenge-es6/node_modules/growly/HISTORY.md deleted file mode 100644 index 1ea94f19d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/growly/HISTORY.md +++ /dev/null @@ -1,5 +0,0 @@ -1.1.0 / 2012-12-12 -================== - -- Default registration work lazily, and is performed on the first call to `Growly.notify()`. -- Added callback to `Growly.register()`. diff --git a/fundamentals/bug-challenge-es6/node_modules/growly/README.md b/fundamentals/bug-challenge-es6/node_modules/growly/README.md deleted file mode 100644 index ad4116f1f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/growly/README.md +++ /dev/null @@ -1,95 +0,0 @@ -# Growly # - -Simple zero-dependency Growl notifications using GNTP. - -## Installation ## - -Install growly using `npm`: - -``` -npm install growly -``` - -And then require it: - -```javascript -var growly = require('growly'); -``` - -This module uses the Growl Network Transport Protocol (GNTP) which was implemented in Growl since version 1.3, so you **must have an appropriate version of Growl installed** for Growly to work. - -## Example ## - -Sending a minimal Growl notification: - -```javascript -var growly = require('growly'); - -growly.notify('This is as easy as it gets', { title: 'Hello, World!' }); -``` - -More examples can be found in the *example/* directory. - -## Usage ## - -The growly module exposes only three methods: `Growly.register()`, `Growly.notify()`, and `Growly.setHost()`. - -### Growly.register(appname, [appicon], [notifications], [callback]) ### - -Registers a new application with Growl. Registration is completely optional since it will be performed automatically for you with sensible defaults. Useful if you want your application, with its own icon and types of notifications, to show up in Growl's prefence panel. - - - `appname` the name of the application (required.) - - `appicon` url, file path, or Buffer instance for an application icon image. - - `notifications` a list of defined notification types with the following properties: - - `.label` name used to identify the type of notification being used (required.) - - `.dispname` name users will see in Growl's preference panel (defaults to `.label`.) - - `.enabled` whether or not notifications of this type are enabled (defaults to true.) - - `callback` called when the registration completes; if registration fails, the first argument will be an Error object. - -An example: - -```javascript -growly.register('My Application', 'path/to/icon.png', [ - { label: 'success', dispname: 'Success' }, - { label: 'warning', dispname: 'Warning', enabled: false } -], function(err) { - console.log(err || 'Registration successful!'); -}); -``` - -### Growly.notify(text, [opts], [callback]) ### - -Sends a Growl notification. If an application wasn't registered beforehand with `growly.register()`, a default application will automatically be registered beforesending the notification. - - - `text` the body of the notification. - - `opts` an object with the following properties: - - `.title` title of the notification. - - `.icon` url, file path, or Buffer instance for the notification's icon. - - `.sticky` whether or not to sticky the notification (defaults to false.) - - `.label` type of notification to use (defaults to the first registered notification type.) - - `.priority` the priority of the notification from lowest (-2) to highest (2). - - `.coalescingId` replace/update the matching previous notification. May be ignored. - - `callback` called when the user has closed/clicked the notification. The callback is passed an Error object `err` as the first argument when the notification fails; otherwise, the second argument `action` is a string that'll describe which action has been taken by the user (either 'closed' or 'clicked'.) - -An example: - -```javascript -/* Assuming an application was registered with a notification type labeled 'warning'. */ -growly.notify('Stuffs broken!', { label: 'warning' }, function(err, action) { - console.log('Action:', action); -}); -``` - -### Growly.setHost(host, port) ### - -Set the host and port that Growl (GNTP) requests will be sent to. Using this method is optional since GNTP defaults to using host 'localhost' and port 23053. - -## License ## - -Copyright (C) 2014 Ibrahim Al-Rajhi - -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/fundamentals/bug-challenge-es6/node_modules/growly/example/bakery.js b/fundamentals/bug-challenge-es6/node_modules/growly/example/bakery.js deleted file mode 100644 index bcf47a8ce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/growly/example/bakery.js +++ /dev/null @@ -1,22 +0,0 @@ -var growly = require('../lib/growly.js'); - -var notifications = [ - { label: 'muffin', dispname: 'Muffin' }, - { label: 'cake', dispname: 'Cake' } - ], - muffinopts = { label: 'muffin', icon: 'muffin.png' }, - cakeopts = { label: 'cake', title: 'Cake is ready!', icon: 'cake.png', sticky: true }; - -growly.register('Bakery', 'muffin.png', notifications, function(err) { - if (err) { - console.log(err); - return; - } - - growly.notify('Looks like it is half past muffin time!', muffinopts); - - growly.notify('Click to deliver', cakeopts, function(err, action) { - console.log('You', action, 'the notification, so the cake is on its way!'); - }); -}); - diff --git a/fundamentals/bug-challenge-es6/node_modules/growly/example/cake.png b/fundamentals/bug-challenge-es6/node_modules/growly/example/cake.png deleted file mode 100644 index bc53679f5d2b4ec599ebab057829690dac93cbe3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14813 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 0) { - if (self.attempts <= self.maxAttempts) { - self.retry(callback); - } else { - var msg = 'GNTP request to "%s:%d" failed with error code %s (%s)'; - callback(new Error(format(msg, self.host, self.port, resp['Error-Code'], resp['Error-Description']))); - } - } else { - callback(undefined, resp); - } - }); - - socket.on('error', function() { - callback(new Error(format('Error while sending GNTP request to "%s:%d"', self.host, self.port))); - socket.destroy(); - }); -}; - -module.exports = GNTP; diff --git a/fundamentals/bug-challenge-es6/node_modules/growly/lib/growly.js b/fundamentals/bug-challenge-es6/node_modules/growly/lib/growly.js deleted file mode 100644 index 0bed53971..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/growly/lib/growly.js +++ /dev/null @@ -1,193 +0,0 @@ -var GNTP = require('./gntp.js'); - -/** - * Interface for registering Growl applications and sending Growl notifications. - * - * @api private - */ - -function Growly() { - this.appname = 'Growly'; - this.notifications = undefined; - this.labels = undefined; - this.count = 0; - this.registered = false; - this.host = undefined; - this.port = undefined; -} - -/** - * Returns an array of label strings extracted from each notification object in - * `Growly.notifications`. - * - * @param {Array} notifications - * @return {Array} notification labels - * @api private - */ - -Growly.prototype.getLabels = function() { - return this.notifications.map(function(notif) { - return notif.label; - }); -}; - -/** - * Set the host to be used by GNTP requests. - * - * @param {String} host - * @param {Number} port - * @api public - */ - -Growly.prototype.setHost = function(host, port) { - this.host = host; - this.port = port; -}; - -/** - * Register an application with the name `appname` (required), icon `appicon`, and - * a list of notification types `notifications`. If provided, `callback` will be - * called when the request completes with the first argument being an `err` error - * object if the request failed. - * - * Each object in the `notifications` array defines a type of notification the - * application will have with the following properties: - * - * - `.label` name used to identify the type of notification being used (required) - * - `.dispname` name users will see in Growl's preference panel (defaults to `.label`) - * - `.enabled` whether or not notifications of this type are enabled (defaults to true) - * - `.icon` default icon notifications of this type should use (url, file path, or Buffer object) - * - * Example registration: - * - * growl.register('My Application', 'path/to/icon.png', [ - * { label: 'success', dispname: 'Success', icon: 'path/to/success.png' }, - * { label: 'warning', dispname: 'Warning', icon: 'path/to/warning.png', enabled: false } - * ], function(err) { console.log(err || 'Registration successful!'); }); - * - * @param {String} appname - * @param {String|Buffer} appicon - * @param {Array} notifications - * @param {Function} callback - * @api public - */ - -Growly.prototype.register = function(appname, appicon, notifications, callback) { - var gntp; - - if (typeof appicon === 'object') { - notifications = appicon; - appicon = undefined; - } - - if (notifications === undefined || !notifications.length) { - notifications = [{ label: 'default', dispname: 'Default Notification', enabled: true }]; - } - - if (typeof arguments[arguments.length - 1] === 'function') { - callback = arguments[arguments.length - 1]; - } else { - callback = function() {}; - } - - this.appname = appname; - this.notifications = notifications; - this.labels = this.getLabels(); - this.registered = true; - - gntp = new GNTP('REGISTER', { host: this.host, port: this.port }); - gntp.add('Application-Name', appname); - gntp.add('Application-Icon', appicon); - gntp.add('Notifications-Count', notifications.length); - gntp.newline(); - - notifications.forEach(function(notif) { - if (notif.enabled === undefined) notif.enabled = true; - gntp.add('Notification-Name', notif.label); - gntp.add('Notification-Display-Name', notif.dispname); - gntp.add('Notification-Enabled', notif.enabled ? 'True' : 'False'); - gntp.add('Notification-Icon', notif.icon); - gntp.newline(); - }); - - gntp.send(callback); -}; - -/** - * Send a notification with `text` content. Growly will lazily register itself - * if the user hasn't already before sending the notification. - * - * A notification can have the following `opts` options: - * - * - `.label` type of notification to use (defaults to the first registered type) - * - `.title` title of the notification - * - `.icon` url, file path, or Buffer instance for the notification's icon. - * - `.sticky` whether or not to sticky the notification (defaults to false) - * - `.priority` the priority of the notification from lowest (-2) to highest (2) - * - `.coalescingId` replace/update the matching previous notification. May be ignored. - * - * If provided, `callback` will be called when the user interacts with the notification. - * The first argument will be an `err` error object, and the second argument an `action` - * string equal to either 'clicked' or 'closed' (whichever action the user took.) - * - * Example notification: - * - * growl.notify('Stuffs broken!', { label: 'warning' }, function(err, action) { - * console.log('Action:', action); - * }); - * - * @param {String} text - * @param {Object} opts - * @param {Function} callback - * @api public - */ - -Growly.prototype.notify = function(text, opts, callback) { - var self = this, - gntp; - - /* Lazy registration. */ - if (!this.registered) { - this.register(this.appname, function(err) { - if (err) console.log(err); - self.notify.call(self, text, opts, callback); - }); - return; - } - - opts = opts || {}; - - if (typeof opts === 'function') { - callback = opts; - opts = {}; - } - - gntp = new GNTP('NOTIFY', { host: this.host, port: this.port }); - gntp.add('Application-Name', this.appname); - gntp.add('Notification-Name', opts.label || this.labels[0]); - gntp.add('Notification-ID', ++this.count); - gntp.add('Notification-Title', opts.title); - gntp.add('Notification-Text', text); - gntp.add('Notification-Sticky', opts.sticky ? 'True' : 'False'); - gntp.add('Notification-Priority', opts.priority); - gntp.add('Notification-Icon', opts.icon); - gntp.add('Notification-Coalescing-ID', opts.coalescingId || undefined); - gntp.add('Notification-Callback-Context', callback ? 'context' : undefined); - gntp.add('Notification-Callback-Context-Type', callback ? 'string' : undefined); - gntp.add('Notification-Callback-Target', undefined); - gntp.newline(); - - gntp.send(function(err, resp) { - if (callback && err) { - callback(err); - } else if (callback && resp.state === 'CALLBACK') { - callback(undefined, resp['Notification-Callback-Result'].toLowerCase()); - } - }); -}; - -/** - * Expose an instance of the Growly object. - */ - -module.exports = new Growly(); diff --git a/fundamentals/bug-challenge-es6/node_modules/growly/package.json b/fundamentals/bug-challenge-es6/node_modules/growly/package.json deleted file mode 100644 index 7d7e091de..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/growly/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_args": [ - [ - "growly@^1.2.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/node-notifier" - ] - ], - "_from": "growly@>=1.2.0 <2.0.0", - "_id": "growly@1.3.0", - "_inCache": true, - "_installable": true, - "_location": "/growly", - "_nodeVersion": "0.12.7", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/growly-1.3.0.tgz_1459012218996_0.0014680565800517797" - }, - "_npmUser": { - "email": "abrahamalrajhi@gmail.com", - "name": "theabraham" - }, - "_npmVersion": "2.12.1", - "_phantomChildren": {}, - "_requested": { - "name": "growly", - "raw": "growly@^1.2.0", - "rawSpec": "^1.2.0", - "scope": null, - "spec": ">=1.2.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/node-notifier" - ], - "_resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "_shasum": "f10748cbe76af964b7c96c93c6bcc28af120c081", - "_shrinkwrap": null, - "_spec": "growly@^1.2.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/node-notifier", - "author": { - "email": "abrahamalrajhi@gmail.com", - "name": "Ibrahim Al-Rajhi", - "url": "http://ibrahimalrajhi.com/" - }, - "bugs": { - "url": "http://github.com/theabraham/growly/issues" - }, - "dependencies": {}, - "description": "Simple zero-dependency Growl notifications using GNTP.", - "devDependencies": {}, - "directories": { - "example": "example", - "lib": "lib" - }, - "dist": { - "shasum": "f10748cbe76af964b7c96c93c6bcc28af120c081", - "tarball": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz" - }, - "gitHead": "bb5d7cdffa7ca05f1430b978dbc8a5f4e776492b", - "homepage": "https://github.com/theabraham/growly#readme", - "keywords": [ - "growl", - "growly", - "snarl", - "notifications", - "gntp", - "messages" - ], - "license": "MIT", - "main": "lib/growly.js", - "maintainers": [ - { - "email": "abrahamalrajhi@gmail.com", - "name": "theabraham" - } - ], - "name": "growly", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/theabraham/growly.git" - }, - "scripts": {}, - "version": "1.3.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/.gitmodules b/fundamentals/bug-challenge-es6/node_modules/handlebars/.gitmodules deleted file mode 100644 index 1739275a8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "spec/mustache"] - path = spec/mustache - url = git://github.com/mustache/spec.git diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/.istanbul.yml b/fundamentals/bug-challenge-es6/node_modules/handlebars/.istanbul.yml deleted file mode 100644 index e6911f190..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/.istanbul.yml +++ /dev/null @@ -1,2 +0,0 @@ -instrumentation: - excludes: ['**/spec/**'] diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/.npmignore b/fundamentals/bug-challenge-es6/node_modules/handlebars/.npmignore deleted file mode 100644 index f10592c0f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/.npmignore +++ /dev/null @@ -1,25 +0,0 @@ -.DS_Store -.gitignore -.rvmrc -.eslintrc -.travis.yml -.rspec -Gemfile -Gemfile.lock -Rakefile -Gruntfile.js -*.gemspec -*.nuspec -*.log -bench/* -configurations/* -components/* -coverage/* -dist/cdnjs/* -dist/components/* -spec/* -src/* -tasks/* -tmp/* -publish/* -vendor/* diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/CONTRIBUTING.md b/fundamentals/bug-challenge-es6/node_modules/handlebars/CONTRIBUTING.md deleted file mode 100644 index 1ea246649..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/CONTRIBUTING.md +++ /dev/null @@ -1,99 +0,0 @@ -# How to Contribute - -## Reporting Issues - -Please see our [FAQ](https://github.com/wycats/handlebars.js/blob/master/FAQ.md) for common issues that people run into. - -Should you run into other issues with the project, please don't hesitate to let us know by filing an [issue][issue]! In general we are going to ask for an example of the problem failing, which can be as simple as a jsfiddle/jsbin/etc. We've put together a jsfiddle [template][jsfiddle] to ease this. (We will keep this link up to date as new releases occur, so feel free to check back here) - -Pull requests containing only failing tests demonstrating the issue are welcomed and this also helps ensure that your issue won't regress in the future once it's fixed. - -Documentation issues on the handlebarsjs.com site should be reported on [handlebars-site](https://github.com/wycats/handlebars-site). - -## Pull Requests - -We also accept [pull requests][pull-request]! - -Generally we like to see pull requests that -- Maintain the existing code style -- Are focused on a single change (i.e. avoid large refactoring or style adjustments in untouched code if not the primary goal of the pull request) -- Have [good commit messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) -- Have tests -- Don't significantly decrease the current code coverage (see coverage/lcov-report/index.html) - -## Building - -To build Handlebars.js you'll need a few things installed. - -* Node.js -* [Grunt](http://gruntjs.com/getting-started) - -Before building, you need to make sure that the Git submodule `spec/mustache` is included (i.e. the directory `spec/mustache` should not be empty). To include it, if using Git version 1.6.5 or newer, use `git clone --recursive` rather than `git clone`. Or, if you already cloned without `--recursive`, use `git submodule update --init`. - -Project dependencies may be installed via `npm install`. - -To build Handlebars.js from scratch, you'll want to run `grunt` -in the root of the project. That will build Handlebars and output the -results to the dist/ folder. To re-run tests, run `grunt test` or `npm test`. -You can also run our set of benchmarks with `grunt bench`. - -The `grunt dev` implements watching for tests and allows for in browser testing at `http://localhost:9999/spec/`. - -If you notice any problems, please report them to the GitHub issue tracker at -[http://github.com/wycats/handlebars.js/issues](http://github.com/wycats/handlebars.js/issues). - -##Running Tests - -To run tests locally, first install all dependencies. -```sh -npm install -``` - -Clone the mustache specs into the spec/mustache folder. -```sh -cd spec -rm -r mustache -git clone https://github.com/mustache/spec.git mustache -``` - -From the root directory, run the tests. -```sh -npm test -``` - -## Ember testing - -The current ember distribution should be tested as part of the handlebars release process. This requires building the `handlebars-source` gem locally and then executing the ember test script. - -```sh -npm link -grunt build release -cp dist/*.js $emberRepoDir/bower_components/handlebars/ - -cd $emberRepoDir -npm link handlebars -npm test -``` - -## Releasing - -Handlebars utilizes the [release yeoman generator][generator-release] to perform most release tasks. - -A full release may be completed with the following: - -``` -yo release -npm publish -yo release:publish components handlebars.js dist/components/ - -cd dist/components/ -gem build handlebars-source.gemspec -gem push handlebars-source-*.gem -``` - -After this point the handlebars site needs to be updated to point to the new version numbers. The jsfiddle link should be updated to point to the most recent distribution for all instances in our documentation. - -[generator-release]: https://github.com/walmartlabs/generator-release -[pull-request]: https://github.com/wycats/handlebars.js/pull/new/master -[issue]: https://github.com/wycats/handlebars.js/issues/new -[jsfiddle]: https://jsfiddle.net/9D88g/47/ diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/FAQ.md b/fundamentals/bug-challenge-es6/node_modules/handlebars/FAQ.md deleted file mode 100644 index 108e839af..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/FAQ.md +++ /dev/null @@ -1,60 +0,0 @@ -# Frequently Asked Questions - -1. How can I file a bug report: - - See our guidelines on [reporting issues](https://github.com/wycats/handlebars.js/blob/master/CONTRIBUTING.md#reporting-issues). - -1. Why isn't my Mustache template working? - - Handlebars deviates from Mustache slightly on a few behaviors. These variations are documented in our [readme](https://github.com/wycats/handlebars.js#differences-between-handlebarsjs-and-mustache). - -1. Why is it slower when compiling? - - The Handlebars compiler must parse the template and construct a JavaScript program which can then be run. Under some environments such as older mobile devices this can have a performance impact which can be avoided by precompiling. Generally it's recommended that precompilation and the runtime library be used on all clients. - -1. Why doesn't this work with Content Security Policy restrictions? - - When not using the precompiler, Handlebars generates a dynamic function for each template which can cause issues with pages that have enabled Content Policy. It's recommended that templates are precompiled or the `unsafe-eval` policy is enabled for sites that must generate dynamic templates at runtime. - -1. How can I include script tags in my template? - - If loading the template via an inlined ` - ``` - - It's generally recommended that templates are served through external, precompiled, files, which do not suffer from this issue. - -1. Why are my precompiled scripts throwing exceptions? - - When using the precompiler, it's important that a supporting version of the Handlebars runtime be loaded on the target page. In version 1.x there were rudimentary checks to compare the version but these did not always work. This is fixed under 2.x but the version checking does not work between these two versions. If you see unexpected errors such as `undefined is not a function` or similar, please verify that the same version is being used for both the precompiler and the client. This can be checked via: - - ```sh - handlebars --version - ``` - If using the integrated precompiler and - - ```javascript - console.log(Handlebars.VERSION); - ``` - On the client side. - - We include the built client libraries in the npm package for those who want to be certain that they are using the same client libraries as the compiler. - - Should these match, please file an issue with us, per our [issue filing guidelines](https://github.com/wycats/handlebars.js/blob/master/CONTRIBUTING.md#reporting-issues). - -1. Why doesn't IE like the `default` name in the AMD module? - - Some browsers such as particular versions of IE treat `default` as a reserved word in JavaScript source files. To safely use this you need to reference this via the `Handlebars['default']` lookup method. This is an unfortunate side effect of the shims necessary to backport the Handlebars ES6 code to all current browsers. - -1. How do I load the runtime library when using AMD? - - There are two options for loading under AMD environments. The first is to use the `handlebars.runtime.amd.js` file. This may require a [path mapping](https://github.com/wycats/handlebars.js/blob/master/spec/amd-runtime.html#L31) as well as access via the `default` field. - - The other option is to load the `handlebars.runtime.js` UMD build, which might not require path configuration and exposes the library as both the module root and the `default` field for compatibility. - - If not using ES6 transpilers or accessing submodules in the build the former option should be sufficient for most use cases. diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/LICENSE b/fundamentals/bug-challenge-es6/node_modules/handlebars/LICENSE deleted file mode 100644 index 307ebc1c2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2011-2016 by Yehuda Katz - -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/fundamentals/bug-challenge-es6/node_modules/handlebars/README.markdown b/fundamentals/bug-challenge-es6/node_modules/handlebars/README.markdown deleted file mode 100644 index 89e3fc59a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/README.markdown +++ /dev/null @@ -1,167 +0,0 @@ -[![Travis Build Status](https://img.shields.io/travis/wycats/handlebars.js/master.svg)](https://travis-ci.org/wycats/handlebars.js) -[![Selenium Test Status](https://saucelabs.com/buildstatus/handlebars)](https://saucelabs.com/u/handlebars) - -Handlebars.js -============= - -Handlebars.js is an extension to the [Mustache templating -language](http://mustache.github.com/) created by Chris Wanstrath. -Handlebars.js and Mustache are both logicless templating languages that -keep the view and the code separated like we all know they should be. - -Checkout the official Handlebars docs site at -[http://www.handlebarsjs.com](http://www.handlebarsjs.com) and the live demo at [http://tryhandlebarsjs.com/](http://tryhandlebarsjs.com/). - -Installing ----------- - -See our [installation documentation](http://handlebarsjs.com/installation.html). - -Usage ------ -In general, the syntax of Handlebars.js templates is a superset -of Mustache templates. For basic syntax, check out the [Mustache -manpage](http://mustache.github.com/mustache.5.html). - -Once you have a template, use the `Handlebars.compile` method to compile -the template into a function. The generated function takes a context -argument, which will be used to render the template. - -```js -var source = "

Hello, my name is {{name}}. I am from {{hometown}}. I have " + - "{{kids.length}} kids:

" + - "
    {{#kids}}
  • {{name}} is {{age}}
  • {{/kids}}
"; -var template = Handlebars.compile(source); - -var data = { "name": "Alan", "hometown": "Somewhere, TX", - "kids": [{"name": "Jimmy", "age": "12"}, {"name": "Sally", "age": "4"}]}; -var result = template(data); - -// Would render: -//

Hello, my name is Alan. I am from Somewhere, TX. I have 2 kids:

-//
    -//
  • Jimmy is 12
  • -//
  • Sally is 4
  • -//
-``` - -Full documentation and more examples are at [handlebarsjs.com](http://handlebarsjs.com/). - -Precompiling Templates ----------------------- - -Handlebars allows templates to be precompiled and included as javascript code rather than the handlebars template allowing for faster startup time. Full details are located [here](http://handlebarsjs.com/precompilation.html). - -Differences Between Handlebars.js and Mustache ----------------------------------------------- -Handlebars.js adds a couple of additional features to make writing -templates easier and also changes a tiny detail of how partials work. - -- [Nested Paths](http://handlebarsjs.com/#paths) -- [Helpers](http://handlebarsjs.com/#helpers) -- [Block Expressions](http://handlebarsjs.com/#block-expressions) -- [Literal Values](http://handlebarsjs.com/#literals) -- [Delimited Comments](http://handlebarsjs.com/#comments) - -Block expressions have the same syntax as mustache sections but should not be confused with one another. Sections are akin to an implicit `each` or `with` statement depending on the input data and helpers are explicit pieces of code that are free to implement whatever behavior they like. The [mustache spec](http://mustache.github.io/mustache.5.html) defines the exact behavior of sections. In the case of name conflicts, helpers are given priority. - -### Compatibility - -There are a few Mustache behaviors that Handlebars does not implement. -- Handlebars deviates from Mustache slightly in that it does not perform recursive lookup by default. The compile time `compat` flag must be set to enable this functionality. Users should note that there is a performance cost for enabling this flag. The exact cost varies by template, but it's recommended that performance sensitive operations should avoid this mode and instead opt for explicit path references. -- The optional Mustache-style lambdas are not supported. Instead Handlebars provides its own lambda resolution that follows the behaviors of helpers. -- Alternative delimiters are not supported. - - -Supported Environments ----------------------- - -Handlebars has been designed to work in any ECMAScript 3 environment. This includes - -- Node.js -- Chrome -- Firefox -- Safari 5+ -- Opera 11+ -- IE 6+ - -Older versions and other runtimes are likely to work but have not been formally -tested. The compiler requires `JSON.stringify` to be implemented natively or via a polyfill. If using the precompiler this is not necessary. - -[![Selenium Test Status](https://saucelabs.com/browser-matrix/handlebars.svg)](https://saucelabs.com/u/handlebars) - -Performance ------------ - -In a rough performance test, precompiled Handlebars.js templates (in -the original version of Handlebars.js) rendered in about half the -time of Mustache templates. It would be a shame if it were any other -way, since they were precompiled, but the difference in architecture -does have some big performance advantages. Justin Marney, a.k.a. -[gotascii](http://github.com/gotascii), confirmed that with an -[independent test](http://sorescode.com/2010/09/12/benchmarks.html). The -rewritten Handlebars (current version) is faster than the old version, -with many [performance tests](https://travis-ci.org/wycats/handlebars.js/builds/33392182#L538) being 5 to 7 times faster than the Mustache equivalent. - - -Upgrading ---------- - -See [release-notes.md](https://github.com/wycats/handlebars.js/blob/master/release-notes.md) for upgrade notes. - -Known Issues ------------- - -See [FAQ.md](https://github.com/wycats/handlebars.js/blob/master/FAQ.md) for known issues and common pitfalls. - - -Handlebars in the Wild ----------------------- - -* [Assemble](http://assemble.io), by [@jonschlinkert](https://github.com/jonschlinkert) - and [@doowb](https://github.com/doowb), is a static site generator that uses Handlebars.js - as its template engine. -* [Cory](https://github.com/leo/cory), by [@leo](https://github.com/leo), is another tiny static site generator -* [CoSchedule](http://coschedule.com) An editorial calendar for WordPress that uses Handlebars.js -* [dashbars](https://github.com/pismute/dashbars) A modern helper library for Handlebars.js. -* [Ember.js](http://www.emberjs.com) makes Handlebars.js the primary way to - structure your views, also with automatic data binding support. -* [Ghost](https://ghost.org/) Just a blogging platform. -* [handlebars_assets](http://github.com/leshill/handlebars_assets): A Rails Asset Pipeline gem - from Les Hill (@leshill). -* [handlebars-helpers](https://github.com/assemble/handlebars-helpers) is an extensive library - with 100+ handlebars helpers. -* [handlebars-layouts](https://github.com/shannonmoeller/handlebars-layouts) is a set of helpers which implement extendible and embeddable layout blocks as seen in other popular templating languages. -* [hbs](http://github.com/donpark/hbs): An Express.js view engine adapter for Handlebars.js, - from Don Park. -* [koa-hbs](https://github.com/jwilm/koa-hbs): [koa](https://github.com/koajs/koa) generator based - renderer for Handlebars.js. -* [jblotus](http://github.com/jblotus) created [http://tryhandlebarsjs.com](http://tryhandlebarsjs.com) - for anyone who would like to try out Handlebars.js in their browser. -* [jQuery plugin](http://71104.github.io/jquery-handlebars/): allows you to use - Handlebars.js with [jQuery](http://jquery.com/). -* [Lumbar](http://walmartlabs.github.io/lumbar) provides easy module-based template management for - handlebars projects. -* [Marionette.Handlebars](https://github.com/hashchange/marionette.handlebars) adds support for Handlebars and Mustache templates to Marionette. -* [sammy.js](http://github.com/quirkey/sammy) by Aaron Quint, a.k.a. quirkey, - supports Handlebars.js as one of its template plugins. -* [SproutCore](http://www.sproutcore.com) uses Handlebars.js as its main - templating engine, extending it with automatic data binding support. -* [YUI](http://yuilibrary.com/yui/docs/handlebars/) implements a port of handlebars -* [Swag](https://github.com/elving/swag) by [@elving](https://github.com/elving) is a growing collection of helpers for handlebars.js. Give your handlebars.js templates some swag son! -* [DOMBars](https://github.com/blakeembrey/dombars) is a DOM-based templating engine built on the Handlebars parser and runtime **DEPRECATED** -* [promised-handlebars](https://github.com/nknapp/promised-handlebars) is a wrapper for Handlebars that allows helpers to return Promises. -* [just-handlebars-helpers](https://github.com/leapfrogtechnology/just-handlebars-helpers) A fully tested lightweight package with common Handlebars helpers. - -External Resources ------------------- - -* [Gist about Synchronous and asynchronous loading of external handlebars templates](https://gist.github.com/2287070) - -Have a project using Handlebars? Send us a [pull request][pull-request]! - -License -------- -Handlebars.js is released under the MIT license. - -[pull-request]: https://github.com/wycats/handlebars.js/pull/new/master diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/bin/handlebars b/fundamentals/bug-challenge-es6/node_modules/handlebars/bin/handlebars deleted file mode 100755 index 7645adf36..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/bin/handlebars +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env node - -var optimist = require('optimist') - .usage('Precompile handlebar templates.\nUsage: $0 [template|directory]...', { - 'f': { - 'type': 'string', - 'description': 'Output File', - 'alias': 'output' - }, - 'map': { - 'type': 'string', - 'description': 'Source Map File' - }, - 'a': { - 'type': 'boolean', - 'description': 'Exports amd style (require.js)', - 'alias': 'amd' - }, - 'c': { - 'type': 'string', - 'description': 'Exports CommonJS style, path to Handlebars module', - 'alias': 'commonjs', - 'default': null - }, - 'h': { - 'type': 'string', - 'description': 'Path to handlebar.js (only valid for amd-style)', - 'alias': 'handlebarPath', - 'default': '' - }, - 'k': { - 'type': 'string', - 'description': 'Known helpers', - 'alias': 'known' - }, - 'o': { - 'type': 'boolean', - 'description': 'Known helpers only', - 'alias': 'knownOnly' - }, - 'm': { - 'type': 'boolean', - 'description': 'Minimize output', - 'alias': 'min' - }, - 'n': { - 'type': 'string', - 'description': 'Template namespace', - 'alias': 'namespace', - 'default': 'Handlebars.templates' - }, - 's': { - 'type': 'boolean', - 'description': 'Output template function only.', - 'alias': 'simple' - }, - 'N': { - 'type': 'string', - 'description': 'Name of passed string templates. Optional if running in a simple mode. Required when operating on multiple templates.', - 'alias': 'name' - }, - 'i': { - 'type': 'string', - 'description': 'Generates a template from the passed CLI argument.\n"-" is treated as a special value and causes stdin to be read for the template value.', - 'alias': 'string' - }, - 'r': { - 'type': 'string', - 'description': 'Template root. Base value that will be stripped from template names.', - 'alias': 'root' - }, - 'p': { - 'type': 'boolean', - 'description': 'Compiling a partial template', - 'alias': 'partial' - }, - 'd': { - 'type': 'boolean', - 'description': 'Include data when compiling', - 'alias': 'data' - }, - 'e': { - 'type': 'string', - 'description': 'Template extension.', - 'alias': 'extension', - 'default': 'handlebars' - }, - 'b': { - 'type': 'boolean', - 'description': 'Removes the BOM (Byte Order Mark) from the beginning of the templates.', - 'alias': 'bom' - }, - 'v': { - 'type': 'boolean', - 'description': 'Prints the current compiler version', - 'alias': 'version' - }, - - 'help': { - 'type': 'boolean', - 'description': 'Outputs this message' - } - }) - - .wrap(120) - .check(function(argv) { - if (argv.version) { - return; - } - }); - - -var argv = optimist.argv; -argv.files = argv._; -delete argv._; - -var Precompiler = require('../dist/cjs/precompiler'); -Precompiler.loadTemplates(argv, function(err, opts) { - if (err) { - throw err; - } - - if (opts.help || (!opts.templates.length && !opts.version)) { - optimist.showHelp(); - } else { - Precompiler.cli(opts); - } -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars.js deleted file mode 100644 index a9800bb3e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars.js +++ /dev/null @@ -1,51 +0,0 @@ -define(['exports', 'module', './handlebars.runtime', './handlebars/compiler/ast', './handlebars/compiler/base', './handlebars/compiler/compiler', './handlebars/compiler/javascript-compiler', './handlebars/compiler/visitor', './handlebars/no-conflict'], function (exports, module, _handlebarsRuntime, _handlebarsCompilerAst, _handlebarsCompilerBase, _handlebarsCompilerCompiler, _handlebarsCompilerJavascriptCompiler, _handlebarsCompilerVisitor, _handlebarsNoConflict) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _runtime = _interopRequireDefault(_handlebarsRuntime); - - // Compiler imports - - var _AST = _interopRequireDefault(_handlebarsCompilerAst); - - var _JavaScriptCompiler = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler); - - var _Visitor = _interopRequireDefault(_handlebarsCompilerVisitor); - - var _noConflict = _interopRequireDefault(_handlebarsNoConflict); - - var _create = _runtime['default'].create; - function create() { - var hb = _create(); - - hb.compile = function (input, options) { - return _handlebarsCompilerCompiler.compile(input, options, hb); - }; - hb.precompile = function (input, options) { - return _handlebarsCompilerCompiler.precompile(input, options, hb); - }; - - hb.AST = _AST['default']; - hb.Compiler = _handlebarsCompilerCompiler.Compiler; - hb.JavaScriptCompiler = _JavaScriptCompiler['default']; - hb.Parser = _handlebarsCompilerBase.parser; - hb.parse = _handlebarsCompilerBase.parse; - - return hb; - } - - var inst = create(); - inst.create = create; - - _noConflict['default'](inst); - - inst.Visitor = _Visitor['default']; - - inst['default'] = inst; - - module.exports = inst; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSxNQUFJLE9BQU8sR0FBRyxvQkFBUSxNQUFNLENBQUM7QUFDN0IsV0FBUyxNQUFNLEdBQUc7QUFDaEIsUUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7O0FBRW5CLE1BQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLGFBQU8sNEJBWFEsT0FBTyxDQVdQLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDcEMsQ0FBQztBQUNGLE1BQUUsQ0FBQyxVQUFVLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3ZDLGFBQU8sNEJBZGlCLFVBQVUsQ0FjaEIsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztLQUN2QyxDQUFDOztBQUVGLE1BQUUsQ0FBQyxHQUFHLGtCQUFNLENBQUM7QUFDYixNQUFFLENBQUMsUUFBUSwrQkFsQkosUUFBUSxBQWtCTyxDQUFDO0FBQ3ZCLE1BQUUsQ0FBQyxrQkFBa0IsaUNBQXFCLENBQUM7QUFDM0MsTUFBRSxDQUFDLE1BQU0sMkJBckJGLE1BQU0sQUFxQkssQ0FBQztBQUNuQixNQUFFLENBQUMsS0FBSywyQkF0QmlCLEtBQUssQUFzQmQsQ0FBQzs7QUFFakIsV0FBTyxFQUFFLENBQUM7R0FDWDs7QUFFRCxNQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIseUJBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLE1BQUksQ0FBQyxPQUFPLHNCQUFVLENBQUM7O0FBRXZCLE1BQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O21CQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy5ydW50aW1lJztcblxuLy8gQ29tcGlsZXIgaW1wb3J0c1xuaW1wb3J0IEFTVCBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvYXN0JztcbmltcG9ydCB7IHBhcnNlciBhcyBQYXJzZXIsIHBhcnNlIH0gZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UnO1xuaW1wb3J0IHsgQ29tcGlsZXIsIGNvbXBpbGUsIHByZWNvbXBpbGUgfSBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvY29tcGlsZXInO1xuaW1wb3J0IEphdmFTY3JpcHRDb21waWxlciBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvamF2YXNjcmlwdC1jb21waWxlcic7XG5pbXBvcnQgVmlzaXRvciBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvdmlzaXRvcic7XG5cbmltcG9ydCBub0NvbmZsaWN0IGZyb20gJy4vaGFuZGxlYmFycy9uby1jb25mbGljdCc7XG5cbmxldCBfY3JlYXRlID0gcnVudGltZS5jcmVhdGU7XG5mdW5jdGlvbiBjcmVhdGUoKSB7XG4gIGxldCBoYiA9IF9jcmVhdGUoKTtcblxuICBoYi5jb21waWxlID0gZnVuY3Rpb24oaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY29tcGlsZShpbnB1dCwgb3B0aW9ucywgaGIpO1xuICB9O1xuICBoYi5wcmVjb21waWxlID0gZnVuY3Rpb24oaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gcHJlY29tcGlsZShpbnB1dCwgb3B0aW9ucywgaGIpO1xuICB9O1xuXG4gIGhiLkFTVCA9IEFTVDtcbiAgaGIuQ29tcGlsZXIgPSBDb21waWxlcjtcbiAgaGIuSmF2YVNjcmlwdENvbXBpbGVyID0gSmF2YVNjcmlwdENvbXBpbGVyO1xuICBoYi5QYXJzZXIgPSBQYXJzZXI7XG4gIGhiLnBhcnNlID0gcGFyc2U7XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3QuVmlzaXRvciA9IFZpc2l0b3I7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0= diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars.runtime.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars.runtime.js deleted file mode 100644 index 62e563c1e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars.runtime.js +++ /dev/null @@ -1,44 +0,0 @@ -define(['exports', 'module', './handlebars/base', './handlebars/safe-string', './handlebars/exception', './handlebars/utils', './handlebars/runtime', './handlebars/no-conflict'], function (exports, module, _handlebarsBase, _handlebarsSafeString, _handlebarsException, _handlebarsUtils, _handlebarsRuntime, _handlebarsNoConflict) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - // Each of these augment the Handlebars object. No need to setup here. - // (This is done to easily share code between commonjs and browse envs) - - var _SafeString = _interopRequireDefault(_handlebarsSafeString); - - var _Exception = _interopRequireDefault(_handlebarsException); - - var _noConflict = _interopRequireDefault(_handlebarsNoConflict); - - // For compatibility and usage outside of module systems, make the Handlebars object a namespace - function create() { - var hb = new _handlebarsBase.HandlebarsEnvironment(); - - _handlebarsUtils.extend(hb, _handlebarsBase); - hb.SafeString = _SafeString['default']; - hb.Exception = _Exception['default']; - hb.Utils = _handlebarsUtils; - hb.escapeExpression = _handlebarsUtils.escapeExpression; - - hb.VM = _handlebarsRuntime; - hb.template = function (spec) { - return _handlebarsRuntime.template(spec, hb); - }; - - return hb; - } - - var inst = create(); - inst.create = create; - - _noConflict['default'](inst); - - inst['default'] = inst; - - module.exports = inst; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSxXQUFTLE1BQU0sR0FBRztBQUNoQixRQUFJLEVBQUUsR0FBRyxJQUFJLGdCQUFLLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLHFCQUFNLE1BQU0sQ0FBQyxFQUFFLGtCQUFPLENBQUM7QUFDdkIsTUFBRSxDQUFDLFVBQVUseUJBQWEsQ0FBQztBQUMzQixNQUFFLENBQUMsU0FBUyx3QkFBWSxDQUFDO0FBQ3pCLE1BQUUsQ0FBQyxLQUFLLG1CQUFRLENBQUM7QUFDakIsTUFBRSxDQUFDLGdCQUFnQixHQUFHLGlCQUFNLGdCQUFnQixDQUFDOztBQUU3QyxNQUFFLENBQUMsRUFBRSxxQkFBVSxDQUFDO0FBQ2hCLE1BQUUsQ0FBQyxRQUFRLEdBQUcsVUFBUyxJQUFJLEVBQUU7QUFDM0IsYUFBTyxtQkFBUSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ25DLENBQUM7O0FBRUYsV0FBTyxFQUFFLENBQUM7R0FDWDs7QUFFRCxNQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIseUJBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLE1BQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O21CQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5ydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYmFzZSBmcm9tICcuL2hhbmRsZWJhcnMvYmFzZSc7XG5cbi8vIEVhY2ggb2YgdGhlc2UgYXVnbWVudCB0aGUgSGFuZGxlYmFycyBvYmplY3QuIE5vIG5lZWQgdG8gc2V0dXAgaGVyZS5cbi8vIChUaGlzIGlzIGRvbmUgdG8gZWFzaWx5IHNoYXJlIGNvZGUgYmV0d2VlbiBjb21tb25qcyBhbmQgYnJvd3NlIGVudnMpXG5pbXBvcnQgU2FmZVN0cmluZyBmcm9tICcuL2hhbmRsZWJhcnMvc2FmZS1zdHJpbmcnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2hhbmRsZWJhcnMvZXhjZXB0aW9uJztcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4vaGFuZGxlYmFycy91dGlscyc7XG5pbXBvcnQgKiBhcyBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy9ydW50aW1lJztcblxuaW1wb3J0IG5vQ29uZmxpY3QgZnJvbSAnLi9oYW5kbGViYXJzL25vLWNvbmZsaWN0JztcblxuLy8gRm9yIGNvbXBhdGliaWxpdHkgYW5kIHVzYWdlIG91dHNpZGUgb2YgbW9kdWxlIHN5c3RlbXMsIG1ha2UgdGhlIEhhbmRsZWJhcnMgb2JqZWN0IGEgbmFtZXNwYWNlXG5mdW5jdGlvbiBjcmVhdGUoKSB7XG4gIGxldCBoYiA9IG5ldyBiYXNlLkhhbmRsZWJhcnNFbnZpcm9ubWVudCgpO1xuXG4gIFV0aWxzLmV4dGVuZChoYiwgYmFzZSk7XG4gIGhiLlNhZmVTdHJpbmcgPSBTYWZlU3RyaW5nO1xuICBoYi5FeGNlcHRpb24gPSBFeGNlcHRpb247XG4gIGhiLlV0aWxzID0gVXRpbHM7XG4gIGhiLmVzY2FwZUV4cHJlc3Npb24gPSBVdGlscy5lc2NhcGVFeHByZXNzaW9uO1xuXG4gIGhiLlZNID0gcnVudGltZTtcbiAgaGIudGVtcGxhdGUgPSBmdW5jdGlvbihzcGVjKSB7XG4gICAgcmV0dXJuIHJ1bnRpbWUudGVtcGxhdGUoc3BlYywgaGIpO1xuICB9O1xuXG4gIHJldHVybiBoYjtcbn1cblxubGV0IGluc3QgPSBjcmVhdGUoKTtcbmluc3QuY3JlYXRlID0gY3JlYXRlO1xuXG5ub0NvbmZsaWN0KGluc3QpO1xuXG5pbnN0WydkZWZhdWx0J10gPSBpbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBpbnN0O1xuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/base.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/base.js deleted file mode 100644 index b3dcf46e8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/base.js +++ /dev/null @@ -1,96 +0,0 @@ -define(['exports', './utils', './exception', './helpers', './decorators', './logger'], function (exports, _utils, _exception, _helpers, _decorators, _logger) { - 'use strict'; - - exports.__esModule = true; - exports.HandlebarsEnvironment = HandlebarsEnvironment; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - var _logger2 = _interopRequireDefault(_logger); - - var VERSION = '4.0.6'; - exports.VERSION = VERSION; - var COMPILER_REVISION = 7; - - exports.COMPILER_REVISION = COMPILER_REVISION; - var REVISION_CHANGES = { - 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it - 2: '== 1.0.0-rc.3', - 3: '== 1.0.0-rc.4', - 4: '== 1.x.x', - 5: '== 2.0.0-alpha.x', - 6: '>= 2.0.0-beta.1', - 7: '>= 4.0.0' - }; - - exports.REVISION_CHANGES = REVISION_CHANGES; - var objectType = '[object Object]'; - - function HandlebarsEnvironment(helpers, partials, decorators) { - this.helpers = helpers || {}; - this.partials = partials || {}; - this.decorators = decorators || {}; - - _helpers.registerDefaultHelpers(this); - _decorators.registerDefaultDecorators(this); - } - - HandlebarsEnvironment.prototype = { - constructor: HandlebarsEnvironment, - - logger: _logger2['default'], - log: _logger2['default'].log, - - registerHelper: function registerHelper(name, fn) { - if (_utils.toString.call(name) === objectType) { - if (fn) { - throw new _Exception['default']('Arg not supported with multiple helpers'); - } - _utils.extend(this.helpers, name); - } else { - this.helpers[name] = fn; - } - }, - unregisterHelper: function unregisterHelper(name) { - delete this.helpers[name]; - }, - - registerPartial: function registerPartial(name, partial) { - if (_utils.toString.call(name) === objectType) { - _utils.extend(this.partials, name); - } else { - if (typeof partial === 'undefined') { - throw new _Exception['default']('Attempting to register a partial called "' + name + '" as undefined'); - } - this.partials[name] = partial; - } - }, - unregisterPartial: function unregisterPartial(name) { - delete this.partials[name]; - }, - - registerDecorator: function registerDecorator(name, fn) { - if (_utils.toString.call(name) === objectType) { - if (fn) { - throw new _Exception['default']('Arg not supported with multiple decorators'); - } - _utils.extend(this.decorators, name); - } else { - this.decorators[name] = fn; - } - }, - unregisterDecorator: function unregisterDecorator(name) { - delete this.decorators[name]; - } - }; - - var log = _logger2['default'].log; - - exports.log = log; - exports.createFrame = _utils.createFrame; - exports.logger = _logger2['default']; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQU1PLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQzs7QUFDeEIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7OztBQUU1QixNQUFNLGdCQUFnQixHQUFHO0FBQzlCLEtBQUMsRUFBRSxhQUFhO0FBQ2hCLEtBQUMsRUFBRSxlQUFlO0FBQ2xCLEtBQUMsRUFBRSxlQUFlO0FBQ2xCLEtBQUMsRUFBRSxVQUFVO0FBQ2IsS0FBQyxFQUFFLGtCQUFrQjtBQUNyQixLQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEtBQUMsRUFBRSxVQUFVO0dBQ2QsQ0FBQzs7O0FBRUYsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7O0FBRTlCLFdBQVMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbkUsUUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzdCLFFBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMvQixRQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7O0FBRW5DLGFBeEJNLHNCQUFzQixDQXdCTCxJQUFJLENBQUMsQ0FBQztBQUM3QixnQkF4Qk0seUJBQXlCLENBd0JMLElBQUksQ0FBQyxDQUFDO0dBQ2pDOztBQUVELHVCQUFxQixDQUFDLFNBQVMsR0FBRztBQUNoQyxlQUFXLEVBQUUscUJBQXFCOztBQUVsQyxVQUFNLHFCQUFRO0FBQ2QsT0FBRyxFQUFFLG9CQUFPLEdBQUc7O0FBRWYsa0JBQWMsRUFBRSx3QkFBUyxJQUFJLEVBQUUsRUFBRSxFQUFFO0FBQ2pDLFVBQUksT0FyQ3FCLFFBQVEsQ0FxQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsWUFBSSxFQUFFLEVBQUU7QUFBRSxnQkFBTSwwQkFBYyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQUU7QUFDM0UsZUF2Q2UsTUFBTSxDQXVDZCxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzVCLE1BQU07QUFDTCxZQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztPQUN6QjtLQUNGO0FBQ0Qsb0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLGFBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQjs7QUFFRCxtQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsVUFBSSxPQWpEcUIsUUFBUSxDQWlEcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxlQWxEZSxNQUFNLENBa0RkLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDN0IsTUFBTTtBQUNMLFlBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGdCQUFNLHdFQUEwRCxJQUFJLG9CQUFpQixDQUFDO1NBQ3ZGO0FBQ0QsWUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7T0FDL0I7S0FDRjtBQUNELHFCQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRTtBQUNoQyxhQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDNUI7O0FBRUQscUJBQWlCLEVBQUUsMkJBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNwQyxVQUFJLE9BL0RxQixRQUFRLENBK0RwQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFlBQUksRUFBRSxFQUFFO0FBQUUsZ0JBQU0sMEJBQWMsNENBQTRDLENBQUMsQ0FBQztTQUFFO0FBQzlFLGVBakVlLE1BQU0sQ0FpRWQsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUMvQixNQUFNO0FBQ0wsWUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDNUI7S0FDRjtBQUNELHVCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxhQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDOztBQUVLLE1BQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1VBRXBCLFdBQVcsVUE3RVgsV0FBVztVQTZFRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZUZyYW1lLCBleHRlbmQsIHRvU3RyaW5nfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtyZWdpc3RlckRlZmF1bHRIZWxwZXJzfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtyZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC42JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDc7XG5cbmV4cG9ydCBjb25zdCBSRVZJU0lPTl9DSEFOR0VTID0ge1xuICAxOiAnPD0gMS4wLnJjLjInLCAvLyAxLjAucmMuMiBpcyBhY3R1YWxseSByZXYyIGJ1dCBkb2Vzbid0IHJlcG9ydCBpdFxuICAyOiAnPT0gMS4wLjAtcmMuMycsXG4gIDM6ICc9PSAxLjAuMC1yYy40JyxcbiAgNDogJz09IDEueC54JyxcbiAgNTogJz09IDIuMC4wLWFscGhhLngnLFxuICA2OiAnPj0gMi4wLjAtYmV0YS4xJyxcbiAgNzogJz49IDQuMC4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTsgfVxuICAgICAgZXh0ZW5kKHRoaXMuaGVscGVycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVscGVyc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckhlbHBlcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmhlbHBlcnNbbmFtZV07XG4gIH0sXG5cbiAgcmVnaXN0ZXJQYXJ0aWFsOiBmdW5jdGlvbihuYW1lLCBwYXJ0aWFsKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGV4dGVuZCh0aGlzLnBhcnRpYWxzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0aWFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGBBdHRlbXB0aW5nIHRvIHJlZ2lzdGVyIGEgcGFydGlhbCBjYWxsZWQgXCIke25hbWV9XCIgYXMgdW5kZWZpbmVkYCk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhcnRpYWxzW25hbWVdID0gcGFydGlhbDtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJQYXJ0aWFsOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMucGFydGlhbHNbbmFtZV07XG4gIH0sXG5cbiAgcmVnaXN0ZXJEZWNvcmF0b3I6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGRlY29yYXRvcnMnKTsgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHtjcmVhdGVGcmFtZSwgbG9nZ2VyfTtcbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/ast.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/ast.js deleted file mode 100644 index c28ffeb43..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/ast.js +++ /dev/null @@ -1,31 +0,0 @@ -define(['exports', 'module'], function (exports, module) { - 'use strict'; - - var AST = { - // Public API used to evaluate derived attributes regarding AST nodes - helpers: { - // a mustache is definitely a helper if: - // * it is an eligible helper, and - // * it has at least one parameter or hash segment - helperExpression: function helperExpression(node) { - return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash); - }, - - scopedId: function scopedId(path) { - return (/^\.|this\b/.test(path.original) - ); - }, - - // an ID is simple if it only has one part, and that part is not - // `..` or `this`. - simpleId: function simpleId(path) { - return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth; - } - } - }; - - // Must be exported as an object rather than the root of the module as the jison lexer - // must modify the object to operate properly. - module.exports = AST; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFJLEdBQUcsR0FBRzs7QUFFUixXQUFPLEVBQUU7Ozs7QUFJUCxzQkFBZ0IsRUFBRSwwQkFBUyxJQUFJLEVBQUU7QUFDL0IsZUFBTyxBQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUM3QixDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssbUJBQW1CLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQSxJQUNuRSxDQUFDLEVBQUUsQUFBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFLLElBQUksQ0FBQyxJQUFJLENBQUEsQUFBQyxBQUFDLENBQUM7T0FDaEU7O0FBRUQsY0FBUSxFQUFFLGtCQUFTLElBQUksRUFBRTtBQUN2QixlQUFPLEFBQUMsYUFBWSxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1VBQUM7T0FDM0M7Ozs7QUFJRCxjQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGVBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO09BQzlFO0tBQ0Y7R0FDRixDQUFDOzs7O21CQUthLEdBQUciLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IEFTVCA9IHtcbiAgLy8gUHVibGljIEFQSSB1c2VkIHRvIGV2YWx1YXRlIGRlcml2ZWQgYXR0cmlidXRlcyByZWdhcmRpbmcgQVNUIG5vZGVzXG4gIGhlbHBlcnM6IHtcbiAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdCBpcyBhbiBlbGlnaWJsZSBoZWxwZXIsIGFuZFxuICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50XG4gICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIChub2RlLnR5cGUgPT09ICdTdWJFeHByZXNzaW9uJylcbiAgICAgICAgICB8fCAoKG5vZGUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50JyB8fCBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpXG4gICAgICAgICAgICAmJiAhISgobm9kZS5wYXJhbXMgJiYgbm9kZS5wYXJhbXMubGVuZ3RoKSB8fCBub2RlLmhhc2gpKTtcbiAgICB9LFxuXG4gICAgc2NvcGVkSWQ6IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgIHJldHVybiAoL15cXC58dGhpc1xcYi8pLnRlc3QocGF0aC5vcmlnaW5hbCk7XG4gICAgfSxcblxuICAgIC8vIGFuIElEIGlzIHNpbXBsZSBpZiBpdCBvbmx5IGhhcyBvbmUgcGFydCwgYW5kIHRoYXQgcGFydCBpcyBub3RcbiAgICAvLyBgLi5gIG9yIGB0aGlzYC5cbiAgICBzaW1wbGVJZDogZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuIHBhdGgucGFydHMubGVuZ3RoID09PSAxICYmICFBU1QuaGVscGVycy5zY29wZWRJZChwYXRoKSAmJiAhcGF0aC5kZXB0aDtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gTXVzdCBiZSBleHBvcnRlZCBhcyBhbiBvYmplY3QgcmF0aGVyIHRoYW4gdGhlIHJvb3Qgb2YgdGhlIG1vZHVsZSBhcyB0aGUgamlzb24gbGV4ZXJcbi8vIG11c3QgbW9kaWZ5IHRoZSBvYmplY3QgdG8gb3BlcmF0ZSBwcm9wZXJseS5cbmV4cG9ydCBkZWZhdWx0IEFTVDtcbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/base.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/base.js deleted file mode 100644 index b4c65ccdb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/base.js +++ /dev/null @@ -1,36 +0,0 @@ -define(['exports', './parser', './whitespace-control', './helpers', '../utils'], function (exports, _parser, _whitespaceControl, _helpers, _utils) { - 'use strict'; - - exports.__esModule = true; - exports.parse = parse; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _parser2 = _interopRequireDefault(_parser); - - var _WhitespaceControl = _interopRequireDefault(_whitespaceControl); - - exports.parser = _parser2['default']; - - var yy = {}; - _utils.extend(yy, _helpers); - - function parse(input, options) { - // Just return if an already-compiled AST was passed in. - if (input.type === 'Program') { - return input; - } - - _parser2['default'].yy = yy; - - // Altering the shared object here, but this is ok as parser is a sync operation - yy.locInfo = function (locInfo) { - return new yy.SourceLocation(options && options.srcName, locInfo); - }; - - var strip = new _WhitespaceControl['default'](options); - return strip.accept(_parser2['default'].parse(input)); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztVQUtTLE1BQU07O0FBRWYsTUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1osU0FMUyxNQUFNLENBS1IsRUFBRSxXQUFVLENBQUM7O0FBRWIsV0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTs7QUFFcEMsUUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtBQUFFLGFBQU8sS0FBSyxDQUFDO0tBQUU7O0FBRS9DLHdCQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7OztBQUdmLE1BQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDN0IsYUFBTyxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbkUsQ0FBQzs7QUFFRixRQUFJLEtBQUssR0FBRyxrQ0FBc0IsT0FBTyxDQUFDLENBQUM7QUFDM0MsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLG9CQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0dBQzFDIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGFyc2VyIGZyb20gJy4vcGFyc2VyJztcbmltcG9ydCBXaGl0ZXNwYWNlQ29udHJvbCBmcm9tICcuL3doaXRlc3BhY2UtY29udHJvbCc7XG5pbXBvcnQgKiBhcyBIZWxwZXJzIGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCB7IHBhcnNlciB9O1xuXG5sZXQgeXkgPSB7fTtcbmV4dGVuZCh5eSwgSGVscGVycyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShpbnB1dCwgb3B0aW9ucykge1xuICAvLyBKdXN0IHJldHVybiBpZiBhbiBhbHJlYWR5LWNvbXBpbGVkIEFTVCB3YXMgcGFzc2VkIGluLlxuICBpZiAoaW5wdXQudHlwZSA9PT0gJ1Byb2dyYW0nKSB7IHJldHVybiBpbnB1dDsgfVxuXG4gIHBhcnNlci55eSA9IHl5O1xuXG4gIC8vIEFsdGVyaW5nIHRoZSBzaGFyZWQgb2JqZWN0IGhlcmUsIGJ1dCB0aGlzIGlzIG9rIGFzIHBhcnNlciBpcyBhIHN5bmMgb3BlcmF0aW9uXG4gIHl5LmxvY0luZm8gPSBmdW5jdGlvbihsb2NJbmZvKSB7XG4gICAgcmV0dXJuIG5ldyB5eS5Tb3VyY2VMb2NhdGlvbihvcHRpb25zICYmIG9wdGlvbnMuc3JjTmFtZSwgbG9jSW5mbyk7XG4gIH07XG5cbiAgbGV0IHN0cmlwID0gbmV3IFdoaXRlc3BhY2VDb250cm9sKG9wdGlvbnMpO1xuICByZXR1cm4gc3RyaXAuYWNjZXB0KHBhcnNlci5wYXJzZShpbnB1dCkpO1xufVxuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/code-gen.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/code-gen.js deleted file mode 100644 index f3cc80c0d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/code-gen.js +++ /dev/null @@ -1,163 +0,0 @@ -define(['exports', 'module', '../utils'], function (exports, module, _utils) { - /* global define */ - 'use strict'; - - var SourceNode = undefined; - - try { - /* istanbul ignore next */ - if (typeof define !== 'function' || !define.amd) { - // We don't support this in AMD environments. For these environments, we asusme that - // they are running on the browser and thus have no need for the source-map library. - var SourceMap = require('source-map'); - SourceNode = SourceMap.SourceNode; - } - } catch (err) {} - /* NOP */ - - /* istanbul ignore if: tested but not covered in istanbul due to dist build */ - if (!SourceNode) { - SourceNode = function (line, column, srcFile, chunks) { - this.src = ''; - if (chunks) { - this.add(chunks); - } - }; - /* istanbul ignore next */ - SourceNode.prototype = { - add: function add(chunks) { - if (_utils.isArray(chunks)) { - chunks = chunks.join(''); - } - this.src += chunks; - }, - prepend: function prepend(chunks) { - if (_utils.isArray(chunks)) { - chunks = chunks.join(''); - } - this.src = chunks + this.src; - }, - toStringWithSourceMap: function toStringWithSourceMap() { - return { code: this.toString() }; - }, - toString: function toString() { - return this.src; - } - }; - } - - function castChunk(chunk, codeGen, loc) { - if (_utils.isArray(chunk)) { - var ret = []; - - for (var i = 0, len = chunk.length; i < len; i++) { - ret.push(codeGen.wrap(chunk[i], loc)); - } - return ret; - } else if (typeof chunk === 'boolean' || typeof chunk === 'number') { - // Handle primitives that the SourceNode will throw up on - return chunk + ''; - } - return chunk; - } - - function CodeGen(srcFile) { - this.srcFile = srcFile; - this.source = []; - } - - CodeGen.prototype = { - isEmpty: function isEmpty() { - return !this.source.length; - }, - prepend: function prepend(source, loc) { - this.source.unshift(this.wrap(source, loc)); - }, - push: function push(source, loc) { - this.source.push(this.wrap(source, loc)); - }, - - merge: function merge() { - var source = this.empty(); - this.each(function (line) { - source.add([' ', line, '\n']); - }); - return source; - }, - - each: function each(iter) { - for (var i = 0, len = this.source.length; i < len; i++) { - iter(this.source[i]); - } - }, - - empty: function empty() { - var loc = this.currentLocation || { start: {} }; - return new SourceNode(loc.start.line, loc.start.column, this.srcFile); - }, - wrap: function wrap(chunk) { - var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1]; - - if (chunk instanceof SourceNode) { - return chunk; - } - - chunk = castChunk(chunk, this, loc); - - return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk); - }, - - functionCall: function functionCall(fn, type, params) { - params = this.generateList(params); - return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']); - }, - - quotedString: function quotedString(str) { - return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4 - .replace(/\u2029/g, '\\u2029') + '"'; - }, - - objectLiteral: function objectLiteral(obj) { - var pairs = []; - - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - var value = castChunk(obj[key], this); - if (value !== 'undefined') { - pairs.push([this.quotedString(key), ':', value]); - } - } - } - - var ret = this.generateList(pairs); - ret.prepend('{'); - ret.add('}'); - return ret; - }, - - generateList: function generateList(entries) { - var ret = this.empty(); - - for (var i = 0, len = entries.length; i < len; i++) { - if (i) { - ret.add(','); - } - - ret.add(castChunk(entries[i], this)); - } - - return ret; - }, - - generateArray: function generateArray(entries) { - var ret = this.generateList(entries); - ret.prepend('['); - ret.add(']'); - - return ret; - } - }; - - module.exports = CodeGen; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvZGUtZ2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSxNQUFJLFVBQVUsWUFBQSxDQUFDOztBQUVmLE1BQUk7O0FBRUYsUUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFOzs7QUFHL0MsVUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLGdCQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztLQUNuQztHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUUsRUFFYjs7OztBQUFBLEFBR0QsTUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNmLGNBQVUsR0FBRyxVQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUNuRCxVQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNkLFVBQUksTUFBTSxFQUFFO0FBQ1YsWUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUNsQjtLQUNGLENBQUM7O0FBRUYsY0FBVSxDQUFDLFNBQVMsR0FBRztBQUNyQixTQUFHLEVBQUUsYUFBUyxNQUFNLEVBQUU7QUFDcEIsWUFBSSxPQTNCRixPQUFPLENBMkJHLE1BQU0sQ0FBQyxFQUFFO0FBQ25CLGdCQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMxQjtBQUNELFlBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDO09BQ3BCO0FBQ0QsYUFBTyxFQUFFLGlCQUFTLE1BQU0sRUFBRTtBQUN4QixZQUFJLE9BakNGLE9BQU8sQ0FpQ0csTUFBTSxDQUFDLEVBQUU7QUFDbkIsZ0JBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzFCO0FBQ0QsWUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFD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QUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsU0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixTQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUViLGFBQU8sR0FBRyxDQUFDO0tBQ1o7R0FDRixDQUFDOzttQkFFYSxPQUFPIiwiZmlsZSI6ImNvZGUtZ2VuLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGRlZmluZSAqL1xuaW1wb3J0IHtpc0FycmF5fSBmcm9tICcuLi91dGlscyc7XG5cbmxldCBTb3VyY2VOb2RlO1xuXG50cnkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJyB8fCAhZGVmaW5lLmFtZCkge1xuICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBpbiBBTUQgZW52aXJvbm1lbnRzLiBGb3IgdGhlc2UgZW52aXJvbm1lbnRzLCB3ZSBhc3VzbWUgdGhhdFxuICAgIC8vIHRoZXkgYXJlIHJ1bm5pbmcgb24gdGhlIGJyb3dzZXIgYW5kIHRodXMgaGF2ZSBubyBuZWVkIGZvciB0aGUgc291cmNlLW1hcCBsaWJyYXJ5LlxuICAgIGxldCBTb3VyY2VNYXAgPSByZXF1aXJlKCdzb3VyY2UtbWFwJyk7XG4gICAgU291cmNlTm9kZSA9IFNvdXJjZU1hcC5Tb3VyY2VOb2RlO1xuICB9XG59IGNhdGNoIChlcnIpIHtcbiAgLyogTk9QICovXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZjogdGVzdGVkIGJ1dCBub3QgY292ZXJlZCBpbiBpc3RhbmJ1bCBkdWUgdG8gZGlzdCBidWlsZCAgKi9cbmlmICghU291cmNlTm9kZSkge1xuICBTb3VyY2VOb2RlID0gZnVuY3Rpb24obGluZSwgY29sdW1uLCBzcmNGaWxlLCBjaHVua3MpIHtcbiAgICB0aGlzLnNyYyA9ICcnO1xuICAgIGlmIChjaHVua3MpIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rcyk7XG4gICAgfVxuICB9O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZSA9IHtcbiAgICBhZGQ6IGZ1bmN0aW9uKGNodW5rcykge1xuICAgICAgaWYgKGlzQXJyYXkoY2h1bmtzKSkge1xuICAgICAgICBjaHVua3MgPSBjaHVua3Muam9pbignJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnNyYyArPSBjaHVua3M7XG4gICAgfSxcbiAgICBwcmVwZW5kOiBmdW5jdGlvbihjaHVua3MpIHtcbiAgICAgIGlmIChpc0FycmF5KGNodW5rcykpIHtcbiAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcmMgPSBjaHVua3MgKyB0aGlzLnNyYztcbiAgICB9LFxuICAgIHRvU3RyaW5nV2l0aFNvdXJjZU1hcDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge2NvZGU6IHRoaXMudG9TdHJpbmcoKX07XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuICB9O1xufVxuXG5cbmZ1bmN0aW9uIGNhc3RDaHVuayhjaHVuaywgY29kZUdlbiwgbG9jKSB7XG4gIGlmIChpc0FycmF5KGNodW5rKSkge1xuICAgIGxldCByZXQgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaHVuay5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgcmV0LnB1c2goY29kZUdlbi53cmFwKGNodW5rW2ldLCBsb2MpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgY2h1bmsgPT09ICdudW1iZXInKSB7XG4gICAgLy8gSGFuZGxlIHByaW1pdGl2ZXMgdGhhdCB0aGUgU291cmNlTm9kZSB3aWxsIHRocm93IHVwIG9uXG4gICAgcmV0dXJuIGNodW5rICsgJyc7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuXG5cbmZ1bmN0aW9uIENvZGVHZW4oc3JjRmlsZSkge1xuICB0aGlzLnNyY0ZpbGUgPSBzcmNGaWxlO1xuICB0aGlzLnNvdXJjZSA9IFtdO1xufVxuXG5Db2RlR2VuLnByb3RvdHlwZSA9IHtcbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gIXRoaXMuc291cmNlLmxlbmd0aDtcbiAgfSxcbiAgcHJlcGVuZDogZnVuY3Rpb24oc291cmNlLCBsb2MpIHtcbiAgICB0aGlzLnNvdXJjZS51bnNoaWZ0KHRoaXMud3JhcChzb3VyY2UsIGxvYykpO1xuICB9LFxuICBwdXNoOiBmdW5jdGlvbihzb3VyY2UsIGxvYykge1xuICAgIHRoaXMuc291cmNlLnB1c2godGhpcy53cmFwKHNvdXJjZSwgbG9jKSk7XG4gIH0sXG5cbiAgbWVyZ2U6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBzb3VyY2UgPSB0aGlzLmVtcHR5KCk7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHNvdXJjZS5hZGQoWycgICcsIGxpbmUsICdcXG4nXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfSxcblxuICBlYWNoOiBmdW5jdGlvbihpdGVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuc291cmNlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpdGVyKHRoaXMuc291cmNlW2ldKTtcbiAgICB9XG4gIH0sXG5cbiAgZW1wdHk6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhdGlvbiB8fCB7c3RhcnQ6IHt9fTtcbiAgICByZXR1cm4gbmV3IFNvdXJjZU5vZGUobG9jLnN0YXJ0LmxpbmUsIGxvYy5zdGFydC5jb2x1bW4sIHRoaXMuc3JjRmlsZSk7XG4gIH0sXG4gIHdyYXA6IGZ1bmN0aW9uKGNodW5rLCBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhdGlvbiB8fCB7c3RhcnQ6IHt9fSkge1xuICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG5cbiAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9jKTtcblxuICAgIHJldHVybiBuZXcgU291cmNlTm9kZShsb2Muc3RhcnQubGluZSwgbG9jLnN0YXJ0LmNvbHVtbiwgdGhpcy5zcmNGaWxlLCBjaHVuayk7XG4gIH0sXG5cbiAgZnVuY3Rpb25DYWxsOiBmdW5jdGlvbihmbiwgdHlwZSwgcGFyYW1zKSB7XG4gICAgcGFyYW1zID0gdGhpcy5nZW5lcmF0ZUxpc3QocGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcy53cmFwKFtmbiwgdHlwZSA/ICcuJyArIHR5cGUgKyAnKCcgOiAnKCcsIHBhcmFtcywgJyknXSk7XG4gIH0sXG5cbiAgcXVvdGVkU3RyaW5nOiBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gJ1wiJyArIChzdHIgKyAnJylcbiAgICAgIC5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpXG4gICAgICAucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpXG4gICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCAnXFxcXHUyMDI4JykgICAvLyBQZXIgRWNtYS0yNjIgNy4zICsgNy44LjRcbiAgICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKSArICdcIic7XG4gIH0sXG5cbiAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgbGV0IHBhaXJzID0gW107XG5cbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gY2FzdENodW5rKG9ialtrZXldLCB0aGlzKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHBhaXJzLnB1c2goW3RoaXMucXVvdGVkU3RyaW5nKGtleSksICc6JywgdmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChwYWlycyk7XG4gICAgcmV0LnByZXBlbmQoJ3snKTtcbiAgICByZXQuYWRkKCd9Jyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuXG4gIGdlbmVyYXRlTGlzdDogZnVuY3Rpb24oZW50cmllcykge1xuICAgIGxldCByZXQgPSB0aGlzLmVtcHR5KCk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZW50cmllcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGkpIHtcbiAgICAgICAgcmV0LmFkZCgnLCcpO1xuICAgICAgfVxuXG4gICAgICByZXQuYWRkKGNhc3RDaHVuayhlbnRyaWVzW2ldLCB0aGlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBnZW5lcmF0ZUFycmF5OiBmdW5jdGlvbihlbnRyaWVzKSB7XG4gICAgbGV0IHJldCA9IHRoaXMuZ2VuZXJhdGVMaXN0KGVudHJpZXMpO1xuICAgIHJldC5wcmVwZW5kKCdbJyk7XG4gICAgcmV0LmFkZCgnXScpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29kZUdlbjtcblxuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/compiler.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/compiler.js deleted file mode 100644 index 71edc15de..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/compiler.js +++ /dev/null @@ -1,568 +0,0 @@ -define(['exports', '../exception', '../utils', './ast'], function (exports, _exception, _utils, _ast) { - /* eslint-disable new-cap */ - - 'use strict'; - - exports.__esModule = true; - exports.Compiler = Compiler; - exports.precompile = precompile; - exports.compile = compile; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - var _AST = _interopRequireDefault(_ast); - - var slice = [].slice; - - function Compiler() {} - - // the foundHelper register will disambiguate helper lookup from finding a - // function in a context. This is necessary for mustache compatibility, which - // requires that context functions in blocks are evaluated by blockHelperMissing, - // and then proceed as if the resulting value was provided to blockHelperMissing. - - Compiler.prototype = { - compiler: Compiler, - - equals: function equals(other) { - var len = this.opcodes.length; - if (other.opcodes.length !== len) { - return false; - } - - for (var i = 0; i < len; i++) { - var opcode = this.opcodes[i], - otherOpcode = other.opcodes[i]; - if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) { - return false; - } - } - - // We know that length is the same between the two arrays because they are directly tied - // to the opcode behavior above. - len = this.children.length; - for (var i = 0; i < len; i++) { - if (!this.children[i].equals(other.children[i])) { - return false; - } - } - - return true; - }, - - guid: 0, - - compile: function compile(program, options) { - this.sourceNode = []; - this.opcodes = []; - this.children = []; - this.options = options; - this.stringParams = options.stringParams; - this.trackIds = options.trackIds; - - options.blockParams = options.blockParams || []; - - // These changes will propagate to the other compiler components - var knownHelpers = options.knownHelpers; - options.knownHelpers = { - 'helperMissing': true, - 'blockHelperMissing': true, - 'each': true, - 'if': true, - 'unless': true, - 'with': true, - 'log': true, - 'lookup': true - }; - if (knownHelpers) { - for (var _name in knownHelpers) { - /* istanbul ignore else */ - if (_name in knownHelpers) { - options.knownHelpers[_name] = knownHelpers[_name]; - } - } - } - - return this.accept(program); - }, - - compileProgram: function compileProgram(program) { - var childCompiler = new this.compiler(), - // eslint-disable-line new-cap - result = childCompiler.compile(program, this.options), - guid = this.guid++; - - this.usePartial = this.usePartial || result.usePartial; - - this.children[guid] = result; - this.useDepths = this.useDepths || result.useDepths; - - return guid; - }, - - accept: function accept(node) { - /* istanbul ignore next: Sanity code */ - if (!this[node.type]) { - throw new _Exception['default']('Unknown type: ' + node.type, node); - } - - this.sourceNode.unshift(node); - var ret = this[node.type](node); - this.sourceNode.shift(); - return ret; - }, - - Program: function Program(program) { - this.options.blockParams.unshift(program.blockParams); - - var body = program.body, - bodyLength = body.length; - for (var i = 0; i < bodyLength; i++) { - this.accept(body[i]); - } - - this.options.blockParams.shift(); - - this.isSimple = bodyLength === 1; - this.blockParams = program.blockParams ? program.blockParams.length : 0; - - return this; - }, - - BlockStatement: function BlockStatement(block) { - transformLiteralToPath(block); - - var program = block.program, - inverse = block.inverse; - - program = program && this.compileProgram(program); - inverse = inverse && this.compileProgram(inverse); - - var type = this.classifySexpr(block); - - if (type === 'helper') { - this.helperSexpr(block, program, inverse); - } else if (type === 'simple') { - this.simpleSexpr(block); - - // now that the simple mustache is resolved, we need to - // evaluate it by executing `blockHelperMissing` - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - this.opcode('emptyHash'); - this.opcode('blockValue', block.path.original); - } else { - this.ambiguousSexpr(block, program, inverse); - - // now that the simple mustache is resolved, we need to - // evaluate it by executing `blockHelperMissing` - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - this.opcode('emptyHash'); - this.opcode('ambiguousBlockValue'); - } - - this.opcode('append'); - }, - - DecoratorBlock: function DecoratorBlock(decorator) { - var program = decorator.program && this.compileProgram(decorator.program); - var params = this.setupFullMustacheParams(decorator, program, undefined), - path = decorator.path; - - this.useDecorators = true; - this.opcode('registerDecorator', params.length, path.original); - }, - - PartialStatement: function PartialStatement(partial) { - this.usePartial = true; - - var program = partial.program; - if (program) { - program = this.compileProgram(partial.program); - } - - var params = partial.params; - if (params.length > 1) { - throw new _Exception['default']('Unsupported number of partial arguments: ' + params.length, partial); - } else if (!params.length) { - if (this.options.explicitPartialContext) { - this.opcode('pushLiteral', 'undefined'); - } else { - params.push({ type: 'PathExpression', parts: [], depth: 0 }); - } - } - - var partialName = partial.name.original, - isDynamic = partial.name.type === 'SubExpression'; - if (isDynamic) { - this.accept(partial.name); - } - - this.setupFullMustacheParams(partial, program, undefined, true); - - var indent = partial.indent || ''; - if (this.options.preventIndent && indent) { - this.opcode('appendContent', indent); - indent = ''; - } - - this.opcode('invokePartial', isDynamic, partialName, indent); - this.opcode('append'); - }, - PartialBlockStatement: function PartialBlockStatement(partialBlock) { - this.PartialStatement(partialBlock); - }, - - MustacheStatement: function MustacheStatement(mustache) { - this.SubExpression(mustache); - - if (mustache.escaped && !this.options.noEscape) { - this.opcode('appendEscaped'); - } else { - this.opcode('append'); - } - }, - Decorator: function Decorator(decorator) { - this.DecoratorBlock(decorator); - }, - - ContentStatement: function ContentStatement(content) { - if (content.value) { - this.opcode('appendContent', content.value); - } - }, - - CommentStatement: function CommentStatement() {}, - - SubExpression: function SubExpression(sexpr) { - transformLiteralToPath(sexpr); - var type = this.classifySexpr(sexpr); - - if (type === 'simple') { - this.simpleSexpr(sexpr); - } else if (type === 'helper') { - this.helperSexpr(sexpr); - } else { - this.ambiguousSexpr(sexpr); - } - }, - ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) { - var path = sexpr.path, - name = path.parts[0], - isBlock = program != null || inverse != null; - - this.opcode('getContext', path.depth); - - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - - path.strict = true; - this.accept(path); - - this.opcode('invokeAmbiguous', name, isBlock); - }, - - simpleSexpr: function simpleSexpr(sexpr) { - var path = sexpr.path; - path.strict = true; - this.accept(path); - this.opcode('resolvePossibleLambda'); - }, - - helperSexpr: function helperSexpr(sexpr, program, inverse) { - var params = this.setupFullMustacheParams(sexpr, program, inverse), - path = sexpr.path, - name = path.parts[0]; - - if (this.options.knownHelpers[name]) { - this.opcode('invokeKnownHelper', params.length, name); - } else if (this.options.knownHelpersOnly) { - throw new _Exception['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr); - } else { - path.strict = true; - path.falsy = true; - - this.accept(path); - this.opcode('invokeHelper', params.length, path.original, _AST['default'].helpers.simpleId(path)); - } - }, - - PathExpression: function PathExpression(path) { - this.addDepth(path.depth); - this.opcode('getContext', path.depth); - - var name = path.parts[0], - scoped = _AST['default'].helpers.scopedId(path), - blockParamId = !path.depth && !scoped && this.blockParamIndex(name); - - if (blockParamId) { - this.opcode('lookupBlockParam', blockParamId, path.parts); - } else if (!name) { - // Context reference, i.e. `{{foo .}}` or `{{foo ..}}` - this.opcode('pushContext'); - } else if (path.data) { - this.options.data = true; - this.opcode('lookupData', path.depth, path.parts, path.strict); - } else { - this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped); - } - }, - - StringLiteral: function StringLiteral(string) { - this.opcode('pushString', string.value); - }, - - NumberLiteral: function NumberLiteral(number) { - this.opcode('pushLiteral', number.value); - }, - - BooleanLiteral: function BooleanLiteral(bool) { - this.opcode('pushLiteral', bool.value); - }, - - UndefinedLiteral: function UndefinedLiteral() { - this.opcode('pushLiteral', 'undefined'); - }, - - NullLiteral: function NullLiteral() { - this.opcode('pushLiteral', 'null'); - }, - - Hash: function Hash(hash) { - var pairs = hash.pairs, - i = 0, - l = pairs.length; - - this.opcode('pushHash'); - - for (; i < l; i++) { - this.pushParam(pairs[i].value); - } - while (i--) { - this.opcode('assignToHash', pairs[i].key); - } - this.opcode('popHash'); - }, - - // HELPERS - opcode: function opcode(name) { - this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc }); - }, - - addDepth: function addDepth(depth) { - if (!depth) { - return; - } - - this.useDepths = true; - }, - - classifySexpr: function classifySexpr(sexpr) { - var isSimple = _AST['default'].helpers.simpleId(sexpr.path); - - var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]); - - // a mustache is an eligible helper if: - // * its id is simple (a single part, not `this` or `..`) - var isHelper = !isBlockParam && _AST['default'].helpers.helperExpression(sexpr); - - // if a mustache is an eligible helper but not a definite - // helper, it is ambiguous, and will be resolved in a later - // pass or at runtime. - var isEligible = !isBlockParam && (isHelper || isSimple); - - // if ambiguous, we can possibly resolve the ambiguity now - // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc. - if (isEligible && !isHelper) { - var _name2 = sexpr.path.parts[0], - options = this.options; - - if (options.knownHelpers[_name2]) { - isHelper = true; - } else if (options.knownHelpersOnly) { - isEligible = false; - } - } - - if (isHelper) { - return 'helper'; - } else if (isEligible) { - return 'ambiguous'; - } else { - return 'simple'; - } - }, - - pushParams: function pushParams(params) { - for (var i = 0, l = params.length; i < l; i++) { - this.pushParam(params[i]); - } - }, - - pushParam: function pushParam(val) { - var value = val.value != null ? val.value : val.original || ''; - - if (this.stringParams) { - if (value.replace) { - value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.'); - } - - if (val.depth) { - this.addDepth(val.depth); - } - this.opcode('getContext', val.depth || 0); - this.opcode('pushStringParam', value, val.type); - - if (val.type === 'SubExpression') { - // SubExpressions get evaluated and passed in - // in string params mode. - this.accept(val); - } - } else { - if (this.trackIds) { - var blockParamIndex = undefined; - if (val.parts && !_AST['default'].helpers.scopedId(val) && !val.depth) { - blockParamIndex = this.blockParamIndex(val.parts[0]); - } - if (blockParamIndex) { - var blockParamChild = val.parts.slice(1).join('.'); - this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild); - } else { - value = val.original || value; - if (value.replace) { - value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, ''); - } - - this.opcode('pushId', val.type, value); - } - } - this.accept(val); - } - }, - - setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) { - var params = sexpr.params; - this.pushParams(params); - - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - - if (sexpr.hash) { - this.accept(sexpr.hash); - } else { - this.opcode('emptyHash', omitEmpty); - } - - return params; - }, - - blockParamIndex: function blockParamIndex(name) { - for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) { - var blockParams = this.options.blockParams[depth], - param = blockParams && _utils.indexOf(blockParams, name); - if (blockParams && param >= 0) { - return [depth, param]; - } - } - } - }; - - function precompile(input, options, env) { - if (input == null || typeof input !== 'string' && input.type !== 'Program') { - throw new _Exception['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input); - } - - options = options || {}; - if (!('data' in options)) { - options.data = true; - } - if (options.compat) { - options.useDepths = true; - } - - var ast = env.parse(input, options), - environment = new env.Compiler().compile(ast, options); - return new env.JavaScriptCompiler().compile(environment, options); - } - - function compile(input, options, env) { - if (options === undefined) options = {}; - - if (input == null || typeof input !== 'string' && input.type !== 'Program') { - throw new _Exception['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input); - } - - if (!('data' in options)) { - options.data = true; - } - if (options.compat) { - options.useDepths = true; - } - - var compiled = undefined; - - function compileInput() { - var ast = env.parse(input, options), - environment = new env.Compiler().compile(ast, options), - templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true); - return env.template(templateSpec); - } - - // Template is only compiled on first use and cached after that point. - function ret(context, execOptions) { - if (!compiled) { - compiled = compileInput(); - } - return compiled.call(this, context, execOptions); - } - ret._setup = function (setupOptions) { - if (!compiled) { - compiled = compileInput(); - } - return compiled._setup(setupOptions); - }; - ret._child = function (i, data, blockParams, depths) { - if (!compiled) { - compiled = compileInput(); - } - return compiled._child(i, data, blockParams, depths); - }; - return ret; - } - - function argEquals(a, b) { - if (a === b) { - return true; - } - - if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) { - for (var i = 0; i < a.length; i++) { - if (!argEquals(a[i], b[i])) { - return false; - } - } - return true; - } - } - - function transformLiteralToPath(sexpr) { - if (!sexpr.path.parts) { - var literal = sexpr.path; - // Casting to string here to make false and 0 literal values play nicely with the rest - // of the system. - sexpr.path = { - type: 'PathExpression', - data: false, - depth: 0, - parts: [literal.original + ''], - original: literal.original + '', - loc: literal.loc - }; - } - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQzs7QUFFaEIsV0FBUyxRQUFRLEdBQUcsRUFBRTs7Ozs7OztBQU83QixVQUFRLENBQUMsU0FBUyxHQUFHO0FBQ25CLFlBQVEsRUFBRSxRQUFROztBQUVsQixVQUFNLEVBQUUsZ0JBQVMsS0FBSyxFQUFFO0FBQ3RCLFVBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzlCLFVBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO0FBQ2hDLGVBQU8sS0FBSyxDQUFDO09BQ2Q7O0FBRUQsV0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QixZQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN4QixXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxZQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyRixpQkFBTyxLQUFLLENBQUM7U0FDZDtPQUNGOzs7O0FBSUQsU0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQzNCLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUIsWUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FB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S0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3JELFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pDLFlBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzFCLGlCQUFPLEtBQUssQ0FBQztTQUNkO09BQ0Y7QUFDRCxhQUFPLElBQUksQ0FBQztLQUNiO0dBQ0Y7O0FBRUQsV0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7QUFDckMsUUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3JCLFVBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7OztBQUd6QixXQUFLLENBQUMsSUFBSSxHQUFHO0FBQ1gsWUFBSSxFQUFFLGdCQUFnQjtBQUN0QixZQUFJLEVBQUUsS0FBSztBQUNYLGFBQUssRUFBRSxDQUFDO0FBQ1IsYUFBSyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDOUIsZ0JBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUU7QUFDL0IsV0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO09BQ2pCLENBQUM7S0FDSDtHQUNGIiwiZmlsZSI6ImNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbmV3LWNhcCAqL1xuXG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5pbXBvcnQge2lzQXJyYXksIGluZGV4T2Z9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBBU1QgZnJvbSAnLi9hc3QnO1xuXG5jb25zdCBzbGljZSA9IFtdLnNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tcGlsZXIoKSB7fVxuXG4vLyB0aGUgZm91bmRIZWxwZXIgcmVnaXN0ZXIgd2lsbCBkaXNhbWJpZ3VhdGUgaGVscGVyIGxvb2t1cCBmcm9tIGZpbmRpbmcgYVxuLy8gZnVuY3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVzdGFjaGUgY29tcGF0aWJpbGl0eSwgd2hpY2hcbi8vIHJlcXVpcmVzIHRoYXQgY29udGV4dCBmdW5jdGlvbnMgaW4gYmxvY2tzIGFyZSBldmFsdWF0ZWQgYnkgYmxvY2tIZWxwZXJNaXNzaW5nLFxuLy8gYW5kIHRoZW4gcHJvY2VlZCBhcyBpZiB0aGUgcmVzdWx0aW5nIHZhbHVlIHdhcyBwcm92aWRlZCB0byBibG9ja0hlbHBlck1pc3NpbmcuXG5cbkNvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgY29tcGlsZXI6IENvbXBpbGVyLFxuXG4gIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5vcGNvZGVzLmxlbmd0aDtcbiAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5ndGggIT09IGxlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sXG4gICAgICAgICAgb3RoZXJPcGNvZGUgPSBvdGhlci5vcGNvZGVzW2ldO1xuICAgICAgaWYgKG9wY29kZS5vcGNvZGUgIT09IG90aGVyT3Bjb2RlLm9wY29kZSB8fCAhYXJnRXF1YWxzKG9wY29kZS5hcmdzLCBvdGhlck9wY29kZS5hcmdzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2Uga25vdyB0aGF0IGxlbmd0aCBpcyB0aGUgc2FtZSBiZXR3ZWVuIHRoZSB0d28gYXJyYXlzIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgdGllZFxuICAgIC8vIHRvIHRoZSBvcGNvZGUgYmVoYXZpb3IgYWJvdmUuXG4gICAgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmNoaWxkcmVuW2ldLmVxdWFscyhvdGhlci5jaGlsZHJlbltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG4gIGd1aWQ6IDAsXG5cbiAgY29tcGlsZTogZnVuY3Rpb24ocHJvZ3JhbSwgb3B0aW9ucykge1xuICAgIHRoaXMuc291cmNlTm9kZSA9IFtdO1xuICAgIHRoaXMub3Bjb2RlcyA9IFtdO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc3RyaW5nUGFyYW1zID0gb3B0aW9ucy5zdHJpbmdQYXJhbXM7XG4gICAgdGhpcy50cmFja0lkcyA9IG9wdGlvbnMudHJhY2tJZHM7XG5cbiAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gb3B0aW9ucy5ibG9ja1BhcmFtcyB8fCBbXTtcblxuICAgIC8vIFRoZXNlIGNoYW5nZXMgd2lsbCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGNvbXBpbGVyIGNvbXBvbmVudHNcbiAgICBsZXQga25vd25IZWxwZXJzID0gb3B0aW9ucy5rbm93bkhlbHBlcnM7XG4gICAgb3B0aW9ucy5rbm93bkhlbHBlcnMgPSB7XG4gICAgICAnaGVscGVyTWlzc2luZyc6IHRydWUsXG4gICAgICAnYmxvY2tIZWxwZXJNaXNzaW5nJzogdHJ1ZSxcbiAgICAgICdlYWNoJzogdHJ1ZSxcbiAgICAgICdpZic6IHRydWUsXG4gICAgICAndW5sZXNzJzogdHJ1ZSxcbiAgICAgICd3aXRoJzogdHJ1ZSxcbiAgICAgICdsb2cnOiB0cnVlLFxuICAgICAgJ2xvb2t1cCc6IHRydWVcbiAgICB9O1xuICAgIGlmIChrbm93bkhlbHBlcnMpIHtcbiAgICAgIGZvciAobGV0IG5hbWUgaW4ga25vd25IZWxwZXJzKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChuYW1lIGluIGtub3duSGVscGVycykge1xuICAgICAgICAgIG9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdID0ga25vd25IZWxwZXJzW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWNjZXB0KHByb2dyYW0pO1xuICB9LFxuXG4gIGNvbXBpbGVQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgbGV0IGNoaWxkQ29tcGlsZXIgPSBuZXcgdGhpcy5jb21waWxlcigpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbiAgICAgICAgcmVzdWx0ID0gY2hpbGRDb21waWxlci5jb21waWxlKHByb2dyYW0sIHRoaXMub3B0aW9ucyksXG4gICAgICAgIGd1aWQgPSB0aGlzLmd1aWQrKztcblxuICAgIHRoaXMudXNlUGFydGlhbCA9IHRoaXMudXNlUGFydGlhbCB8fCByZXN1bHQudXNlUGFydGlhbDtcblxuICAgIHRoaXMuY2hpbGRyZW5bZ3VpZF0gPSByZXN1bHQ7XG4gICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCByZXN1bHQudXNlRGVwdGhzO1xuXG4gICAgcmV0dXJuIGd1aWQ7XG4gIH0sXG5cbiAgYWNjZXB0OiBmdW5jdGlvbihub2RlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IFNhbml0eSBjb2RlICovXG4gICAgaWYgKCF0aGlzW25vZGUudHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdHlwZTogJyArIG5vZGUudHlwZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2VOb2RlLnVuc2hpZnQobm9kZSk7XG4gICAgbGV0IHJldCA9IHRoaXNbbm9kZS50eXBlXShub2RlKTtcbiAgICB0aGlzLnNvdXJjZU5vZGUuc2hpZnQoKTtcbiAgICByZXR1cm4gcmV0O1xuICB9LFxuXG4gIFByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICB0aGlzLm9wdGlvbnMuYmxvY2tQYXJhbXMudW5zaGlmdChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcblxuICAgIGxldCBib2R5ID0gcHJvZ3JhbS5ib2R5LFxuICAgICAgICBib2R5TGVuZ3RoID0gYm9keS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0KGJvZHlbaV0pO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy5zaGlmdCgpO1xuXG4gICAgdGhpcy5pc1NpbXBsZSA9IGJvZHlMZW5ndGggPT09IDE7XG4gICAgdGhpcy5ibG9ja1BhcmFtcyA9IHByb2dyYW0uYmxvY2tQYXJhbXMgPyBwcm9ncmFtLmJsb2NrUGFyYW1zLmxlbmd0aCA6IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24oYmxvY2spIHtcbiAgICB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKGJsb2NrKTtcblxuICAgIGxldCBwcm9ncmFtID0gYmxvY2sucHJvZ3JhbSxcbiAgICAgICAgaW52ZXJzZSA9IGJsb2NrLmludmVyc2U7XG5cbiAgICBwcm9ncmFtID0gcHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKHByb2dyYW0pO1xuICAgIGludmVyc2UgPSBpbnZlcnNlICYmIHRoaXMuY29tcGlsZVByb2dyYW0oaW52ZXJzZSk7XG5cbiAgICBsZXQgdHlwZSA9IHRoaXMuY2xhc3NpZnlTZXhwcihibG9jayk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2hlbHBlcicpIHtcbiAgICAgIHRoaXMuaGVscGVyU2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NpbXBsZScpIHtcbiAgICAgIHRoaXMuc2ltcGxlU2V4cHIoYmxvY2spO1xuXG4gICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVyTWlzc2luZ2BcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG4gICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7XG4gICAgICB0aGlzLm9wY29kZSgnYmxvY2tWYWx1ZScsIGJsb2NrLnBhdGgub3JpZ2luYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFtYmlndW91c1NleHByKGJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlKTtcblxuICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0b1xuICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgXG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FtYmlndW91c0Jsb2NrVmFsdWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG5cbiAgRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb2dyYW0gPSBkZWNvcmF0b3IucHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKGRlY29yYXRvci5wcm9ncmFtKTtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhkZWNvcmF0b3IsIHByb2dyYW0sIHVuZGVmaW5lZCksXG4gICAgICAgIHBhdGggPSBkZWNvcmF0b3IucGF0aDtcblxuICAgIHRoaXMudXNlRGVjb3JhdG9ycyA9IHRydWU7XG4gICAgdGhpcy5vcGNvZGUoJ3JlZ2lzdGVyRGVjb3JhdG9yJywgcGFyYW1zLmxlbmd0aCwgcGF0aC5vcmlnaW5hbCk7XG4gIH0sXG5cbiAgUGFydGlhbFN0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbCkge1xuICAgIHRoaXMudXNlUGFydGlhbCA9IHRydWU7XG5cbiAgICBsZXQgcHJvZ3JhbSA9IHBhcnRpYWwucHJvZ3JhbTtcbiAgICBpZiAocHJvZ3JhbSkge1xuICAgICAgcHJvZ3JhbSA9IHRoaXMuY29tcGlsZVByb2dyYW0ocGFydGlhbC5wcm9ncmFtKTtcbiAgICB9XG5cbiAgICBsZXQgcGFyYW1zID0gcGFydGlhbC5wYXJhbXM7XG4gICAgaWYgKHBhcmFtcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBudW1iZXIgb2YgcGFydGlhbCBhcmd1bWVudHM6ICcgKyBwYXJhbXMubGVuZ3RoLCBwYXJ0aWFsKTtcbiAgICB9IGVsc2UgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmV4cGxpY2l0UGFydGlhbENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgJ3VuZGVmaW5lZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnB1c2goe3R5cGU6ICdQYXRoRXhwcmVzc2lvbicsIHBhcnRzOiBbXSwgZGVwdGg6IDB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcGFydGlhbE5hbWUgPSBwYXJ0aWFsLm5hbWUub3JpZ2luYWwsXG4gICAgICAgIGlzRHluYW1pYyA9IHBhcnRpYWwubmFtZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbic7XG4gICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgdGhpcy5hY2NlcHQocGFydGlhbC5uYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKHBhcnRpYWwsIHByb2dyYW0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBsZXQgaW5kZW50ID0gcGFydGlhbC5pbmRlbnQgfHwgJyc7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcmV2ZW50SW5kZW50ICYmIGluZGVudCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZENvbnRlbnQnLCBpbmRlbnQpO1xuICAgICAgaW5kZW50ID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ2ludm9rZVBhcnRpYWwnLCBpc0R5bmFtaWMsIHBhcnRpYWxOYW1lLCBpbmRlbnQpO1xuICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTtcbiAgfSxcbiAgUGFydGlhbEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihwYXJ0aWFsQmxvY2spIHtcbiAgICB0aGlzLlBhcnRpYWxTdGF0ZW1lbnQocGFydGlhbEJsb2NrKTtcbiAgfSxcblxuICBNdXN0YWNoZVN0YXRlbWVudDogZnVuY3Rpb24obXVzdGFjaGUpIHtcbiAgICB0aGlzLlN1YkV4cHJlc3Npb24obXVzdGFjaGUpO1xuXG4gICAgaWYgKG11c3RhY2hlLmVzY2FwZWQgJiYgIXRoaXMub3B0aW9ucy5ub0VzY2FwZSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZEVzY2FwZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcpO1xuICAgIH1cbiAgfSxcbiAgRGVjb3JhdG9yKGRlY29yYXRvcikge1xuICAgIHRoaXMuRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKTtcbiAgfSxcblxuXG4gIENvbnRlbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgICBpZiAoY29udGVudC52YWx1ZSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZENvbnRlbnQnLCBjb250ZW50LnZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgQ29tbWVudFN0YXRlbWVudDogZnVuY3Rpb24oKSB7fSxcblxuICBTdWJFeHByZXNzaW9uOiBmdW5jdGlvbihzZXhwcikge1xuICAgIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoc2V4cHIpO1xuICAgIGxldCB0eXBlID0gdGhpcy5jbGFzc2lmeVNleHByKHNleHByKTtcblxuICAgIGlmICh0eXBlID09PSAnc2ltcGxlJykge1xuICAgICAgdGhpcy5zaW1wbGVTZXhwcihzZXhwcik7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnaGVscGVyJykge1xuICAgICAgdGhpcy5oZWxwZXJTZXhwcihzZXhwcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYW1iaWd1b3VzU2V4cHIoc2V4cHIpO1xuICAgIH1cbiAgfSxcbiAgYW1iaWd1b3VzU2V4cHI6IGZ1bmN0aW9uKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSB7XG4gICAgbGV0IHBhdGggPSBzZXhwci5wYXRoLFxuICAgICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXSxcbiAgICAgICAgaXNCbG9jayA9IHByb2dyYW0gIT0gbnVsbCB8fCBpbnZlcnNlICE9IG51bGw7XG5cbiAgICB0aGlzLm9wY29kZSgnZ2V0Q29udGV4dCcsIHBhdGguZGVwdGgpO1xuXG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG5cbiAgICBwYXRoLnN0cmljdCA9IHRydWU7XG4gICAgdGhpcy5hY2NlcHQocGF0aCk7XG5cbiAgICB0aGlzLm9wY29kZSgnaW52b2tlQW1iaWd1b3VzJywgbmFtZSwgaXNCbG9jayk7XG4gIH0sXG5cbiAgc2ltcGxlU2V4cHI6IGZ1bmN0aW9uKHNleHByKSB7XG4gICAgbGV0IHBhdGggPSBzZXhwci5wYXRoO1xuICAgIHBhdGguc3RyaWN0ID0gdHJ1ZTtcbiAgICB0aGlzLmFjY2VwdChwYXRoKTtcbiAgICB0aGlzLm9wY29kZSgncmVzb2x2ZVBvc3NpYmxlTGFtYmRhJyk7XG4gIH0sXG5cbiAgaGVscGVyU2V4cHI6IGZ1bmN0aW9uKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMuc2V0dXBGdWxsTXVzdGFjaGVQYXJhbXMoc2V4cHIsIHByb2dyYW0sIGludmVyc2UpLFxuICAgICAgICBwYXRoID0gc2V4cHIucGF0aCxcbiAgICAgICAgbmFtZSA9IHBhdGgucGFydHNbMF07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUtub3duSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignWW91IHNwZWNpZmllZCBrbm93bkhlbHBlcnNPbmx5LCBidXQgdXNlZCB0aGUgdW5rbm93biBoZWxwZXIgJyArIG5hbWUsIHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgICAgcGF0aC5mYWxzeSA9IHRydWU7XG5cbiAgICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUhlbHBlcicsIHBhcmFtcy5sZW5ndGgsIHBhdGgub3JpZ2luYWwsIEFTVC5oZWxwZXJzLnNpbXBsZUlkKHBhdGgpKTtcbiAgICB9XG4gIH0sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICB0aGlzLmFkZERlcHRoKHBhdGguZGVwdGgpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7XG5cbiAgICBsZXQgbmFtZSA9IHBhdGgucGFydHNbMF0sXG4gICAgICAgIHNjb3BlZCA9IEFTVC5oZWxwZXJzLnNjb3BlZElkKHBhdGgpLFxuICAgICAgICBibG9ja1BhcmFtSWQgPSAhcGF0aC5kZXB0aCAmJiAhc2NvcGVkICYmIHRoaXMuYmxvY2tQYXJhbUluZGV4KG5hbWUpO1xuXG4gICAgaWYgKGJsb2NrUGFyYW1JZCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cEJsb2NrUGFyYW0nLCBibG9ja1BhcmFtSWQsIHBhdGgucGFydHMpO1xuICAgIH0gZWxzZSBpZiAoIW5hbWUpIHtcbiAgICAgIC8vIENvbnRleHQgcmVmZXJlbmNlLCBpLmUuIGB7e2ZvbyAufX1gIG9yIGB7e2ZvbyAuLn19YFxuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hDb250ZXh0Jyk7XG4gICAgfSBlbHNlIGlmIChwYXRoLmRhdGEpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5kYXRhID0gdHJ1ZTtcbiAgICAgIHRoaXMub3Bjb2RlKCdsb29rdXBEYXRhJywgcGF0aC5kZXB0aCwgcGF0aC5wYXJ0cywgcGF0aC5zdHJpY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnbG9va3VwT25Db250ZXh0JywgcGF0aC5wYXJ0cywgcGF0aC5mYWxzeSwgcGF0aC5zdHJpY3QsIHNjb3BlZCk7XG4gICAgfVxuICB9LFxuXG4gIFN0cmluZ0xpdGVyYWw6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoU3RyaW5nJywgc3RyaW5nLnZhbHVlKTtcbiAgfSxcblxuICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbihudW1iZXIpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBudW1iZXIudmFsdWUpO1xuICB9LFxuXG4gIEJvb2xlYW5MaXRlcmFsOiBmdW5jdGlvbihib29sKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgYm9vbC52YWx1ZSk7XG4gIH0sXG5cbiAgVW5kZWZpbmVkTGl0ZXJhbDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgJ3VuZGVmaW5lZCcpO1xuICB9LFxuXG4gIE51bGxMaXRlcmFsOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAnbnVsbCcpO1xuICB9LFxuXG4gIEhhc2g6IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzLFxuICAgICAgICBpID0gMCxcbiAgICAgICAgbCA9IHBhaXJzLmxlbmd0aDtcblxuICAgIHRoaXMub3Bjb2RlKCdwdXNoSGFzaCcpO1xuXG4gICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMucHVzaFBhcmFtKHBhaXJzW2ldLnZhbHVlKTtcbiAgICB9XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2Fzc2lnblRvSGFzaCcsIHBhaXJzW2ldLmtleSk7XG4gICAgfVxuICAgIHRoaXMub3Bjb2RlKCdwb3BIYXNoJyk7XG4gIH0sXG5cbiAgLy8gSEVMUEVSU1xuICBvcGNvZGU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB0aGlzLm9wY29kZXMucHVzaCh7IG9wY29kZTogbmFtZSwgYXJnczogc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLCBsb2M6IHRoaXMuc291cmNlTm9kZVswXS5sb2MgfSk7XG4gIH0sXG5cbiAgYWRkRGVwdGg6IGZ1bmN0aW9uKGRlcHRoKSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfSxcblxuICBjbGFzc2lmeVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBpc1NpbXBsZSA9IEFTVC5oZWxwZXJzLnNpbXBsZUlkKHNleHByLnBhdGgpO1xuXG4gICAgbGV0IGlzQmxvY2tQYXJhbSA9IGlzU2ltcGxlICYmICEhdGhpcy5ibG9ja1BhcmFtSW5kZXgoc2V4cHIucGF0aC5wYXJ0c1swXSk7XG5cbiAgICAvLyBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBpZjpcbiAgICAvLyAqIGl0cyBpZCBpcyBzaW1wbGUgKGEgc2luZ2xlIHBhcnQsIG5vdCBgdGhpc2Agb3IgYC4uYClcbiAgICBsZXQgaXNIZWxwZXIgPSAhaXNCbG9ja1BhcmFtICYmIEFTVC5oZWxwZXJzLmhlbHBlckV4cHJlc3Npb24oc2V4cHIpO1xuXG4gICAgLy8gaWYgYSBtdXN0YWNoZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgYnV0IG5vdCBhIGRlZmluaXRlXG4gICAgLy8gaGVscGVyLCBpdCBpcyBhbWJpZ3VvdXMsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGluIGEgbGF0ZXJcbiAgICAvLyBwYXNzIG9yIGF0IHJ1bnRpbWUuXG4gICAgbGV0IGlzRWxpZ2libGUgPSAhaXNCbG9ja1BhcmFtICYmIChpc0hlbHBlciB8fCBpc1NpbXBsZSk7XG5cbiAgICAvLyBpZiBhbWJpZ3VvdXMsIHdlIGNhbiBwb3NzaWJseSByZXNvbHZlIHRoZSBhbWJpZ3VpdHkgbm93XG4gICAgLy8gQW4gZWxpZ2libGUgaGVscGVyIGlzIG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb21wbGV4IHBhdGgsIGkuZS4gYHRoaXMuZm9vYCwgYC4uL2Zvb2AgZXRjLlxuICAgIGlmIChpc0VsaWdpYmxlICYmICFpc0hlbHBlcikge1xuICAgICAgbGV0IG5hbWUgPSBzZXhwci5wYXRoLnBhcnRzWzBdLFxuICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgIGlmIChvcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgICBpc0hlbHBlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgICBpc0VsaWdpYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzSGVscGVyKSB7XG4gICAgICByZXR1cm4gJ2hlbHBlcic7XG4gICAgfSBlbHNlIGlmIChpc0VsaWdpYmxlKSB7XG4gICAgICByZXR1cm4gJ2FtYmlndW91cyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnc2ltcGxlJztcbiAgICB9XG4gIH0sXG5cbiAgcHVzaFBhcmFtczogZnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLnB1c2hQYXJhbShwYXJhbXNbaV0pO1xuICAgIH1cbiAgfSxcblxuICBwdXNoUGFyYW06IGZ1bmN0aW9uKHZhbCkge1xuICAgIGxldCB2YWx1ZSA9IHZhbC52YWx1ZSAhPSBudWxsID8gdmFsLnZhbHVlIDogdmFsLm9yaWdpbmFsIHx8ICcnO1xuXG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXC4/XFwuXFwvKSovZywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICcuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWwuZGVwdGgpIHtcbiAgICAgICAgdGhpcy5hZGREZXB0aCh2YWwuZGVwdGgpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCB2YWwuZGVwdGggfHwgMCk7XG4gICAgICB0aGlzLm9wY29kZSgncHVzaFN0cmluZ1BhcmFtJywgdmFsdWUsIHZhbC50eXBlKTtcblxuICAgICAgaWYgKHZhbC50eXBlID09PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgICAgLy8gU3ViRXhwcmVzc2lvbnMgZ2V0IGV2YWx1YXRlZCBhbmQgcGFzc2VkIGluXG4gICAgICAgIC8vIGluIHN0cmluZyBwYXJhbXMgbW9kZS5cbiAgICAgICAgdGhpcy5hY2NlcHQodmFsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgbGV0IGJsb2NrUGFyYW1JbmRleDtcbiAgICAgICAgaWYgKHZhbC5wYXJ0cyAmJiAhQVNULmhlbHBlcnMuc2NvcGVkSWQodmFsKSAmJiAhdmFsLmRlcHRoKSB7XG4gICAgICAgICAgIGJsb2NrUGFyYW1JbmRleCA9IHRoaXMuYmxvY2tQYXJhbUluZGV4KHZhbC5wYXJ0c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrUGFyYW1JbmRleCkge1xuICAgICAgICAgIGxldCBibG9ja1BhcmFtQ2hpbGQgPSB2YWwucGFydHMuc2xpY2UoMSkuam9pbignLicpO1xuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCAnQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JbmRleCwgYmxvY2tQYXJhbUNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbC5vcmlnaW5hbCB8fCB2YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9edGhpcyg/OlxcLnwkKS8sICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eXFwuXFwvLywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC4kLywgJycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCB2YWwudHlwZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjY2VwdCh2YWwpO1xuICAgIH1cbiAgfSxcblxuICBzZXR1cEZ1bGxNdXN0YWNoZVBhcmFtczogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UsIG9taXRFbXB0eSkge1xuICAgIGxldCBwYXJhbXMgPSBzZXhwci5wYXJhbXM7XG4gICAgdGhpcy5wdXNoUGFyYW1zKHBhcmFtcyk7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcblxuICAgIGlmIChzZXhwci5oYXNoKSB7XG4gICAgICB0aGlzLmFjY2VwdChzZXhwci5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcsIG9taXRFbXB0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfSxcblxuICBibG9ja1BhcmFtSW5kZXg6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBmb3IgKGxldCBkZXB0aCA9IDAsIGxlbiA9IHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy5sZW5ndGg7IGRlcHRoIDwgbGVuOyBkZXB0aCsrKSB7XG4gICAgICBsZXQgYmxvY2tQYXJhbXMgPSB0aGlzLm9wdGlvbnMuYmxvY2tQYXJhbXNbZGVwdGhdLFxuICAgICAgICAgIHBhcmFtID0gYmxvY2tQYXJhbXMgJiYgaW5kZXhPZihibG9ja1BhcmFtcywgbmFtZSk7XG4gICAgICBpZiAoYmxvY2tQYXJhbXMgJiYgcGFyYW0gPj0gMCkge1xuICAgICAgICByZXR1cm4gW2RlcHRoLCBwYXJhbV07XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlY29tcGlsZShpbnB1dCwgb3B0aW9ucywgZW52KSB7XG4gIGlmIChpbnB1dCA9PSBudWxsIHx8ICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LnR5cGUgIT09ICdQcm9ncmFtJykpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdZb3UgbXVzdCBwYXNzIGEgc3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMucHJlY29tcGlsZS4gWW91IHBhc3NlZCAnICsgaW5wdXQpO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmICghKCdkYXRhJyBpbiBvcHRpb25zKSkge1xuICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7XG4gIH1cbiAgaWYgKG9wdGlvbnMuY29tcGF0KSB7XG4gICAgb3B0aW9ucy51c2VEZXB0aHMgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGFzdCA9IGVudi5wYXJzZShpbnB1dCwgb3B0aW9ucyksXG4gICAgICBlbnZpcm9ubWVudCA9IG5ldyBlbnYuQ29tcGlsZXIoKS5jb21waWxlKGFzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBuZXcgZW52LkphdmFTY3JpcHRDb21waWxlcigpLmNvbXBpbGUoZW52aXJvbm1lbnQsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZShpbnB1dCwgb3B0aW9ucyA9IHt9LCBlbnYpIHtcbiAgaWYgKGlucHV0ID09IG51bGwgfHwgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgJiYgaW5wdXQudHlwZSAhPT0gJ1Byb2dyYW0nKSkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1lvdSBtdXN0IHBhc3MgYSBzdHJpbmcgb3IgSGFuZGxlYmFycyBBU1QgdG8gSGFuZGxlYmFycy5jb21waWxlLiBZb3UgcGFzc2VkICcgKyBpbnB1dCk7XG4gIH1cblxuICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHtcbiAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbXBhdCkge1xuICAgIG9wdGlvbnMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBjb21waWxlZDtcblxuICBmdW5jdGlvbiBjb21waWxlSW5wdXQoKSB7XG4gICAgbGV0IGFzdCA9IGVudi5wYXJzZShpbnB1dCwgb3B0aW9ucyksXG4gICAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKSxcbiAgICAgICAgdGVtcGxhdGVTcGVjID0gbmV3IGVudi5KYXZhU2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGVudmlyb25tZW50LCBvcHRpb25zLCB1bmRlZmluZWQsIHRydWUpO1xuICAgIHJldHVybiBlbnYudGVtcGxhdGUodGVtcGxhdGVTcGVjKTtcbiAgfVxuXG4gIC8vIFRlbXBsYXRlIGlzIG9ubHkgY29tcGlsZWQgb24gZmlyc3QgdXNlIGFuZCBjYWNoZWQgYWZ0ZXIgdGhhdCBwb2ludC5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIGV4ZWNPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLmNhbGwodGhpcywgY29udGV4dCwgZXhlY09wdGlvbnMpO1xuICB9XG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihzZXR1cE9wdGlvbnMpIHtcbiAgICBpZiAoIWNvbXBpbGVkKSB7XG4gICAgICBjb21waWxlZCA9IGNvbXBpbGVJbnB1dCgpO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGlsZWQuX3NldHVwKHNldHVwT3B0aW9ucyk7XG4gIH07XG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLl9jaGlsZChpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gYXJnRXF1YWxzKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGEpICYmIGlzQXJyYXkoYikgJiYgYS5sZW5ndGggPT09IGIubGVuZ3RoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWFyZ0VxdWFscyhhW2ldLCBiW2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoc2V4cHIpIHtcbiAgaWYgKCFzZXhwci5wYXRoLnBhcnRzKSB7XG4gICAgbGV0IGxpdGVyYWwgPSBzZXhwci5wYXRoO1xuICAgIC8vIENhc3RpbmcgdG8gc3RyaW5nIGhlcmUgdG8gbWFrZSBmYWxzZSBhbmQgMCBsaXRlcmFsIHZhbHVlcyBwbGF5IG5pY2VseSB3aXRoIHRoZSByZXN0XG4gICAgLy8gb2YgdGhlIHN5c3RlbS5cbiAgICBzZXhwci5wYXRoID0ge1xuICAgICAgdHlwZTogJ1BhdGhFeHByZXNzaW9uJyxcbiAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBwYXJ0czogW2xpdGVyYWwub3JpZ2luYWwgKyAnJ10sXG4gICAgICBvcmlnaW5hbDogbGl0ZXJhbC5vcmlnaW5hbCArICcnLFxuICAgICAgbG9jOiBsaXRlcmFsLmxvY1xuICAgIH07XG4gIH1cbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/helpers.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/helpers.js deleted file mode 100644 index 60bc119a7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/helpers.js +++ /dev/null @@ -1,230 +0,0 @@ -define(['exports', '../exception'], function (exports, _exception) { - 'use strict'; - - exports.__esModule = true; - exports.SourceLocation = SourceLocation; - exports.id = id; - exports.stripFlags = stripFlags; - exports.stripComment = stripComment; - exports.preparePath = preparePath; - exports.prepareMustache = prepareMustache; - exports.prepareRawBlock = prepareRawBlock; - exports.prepareBlock = prepareBlock; - exports.prepareProgram = prepareProgram; - exports.preparePartialBlock = preparePartialBlock; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - function validateClose(open, close) { - close = close.path ? close.path.original : close; - - if (open.path.original !== close) { - var errorNode = { loc: open.path.loc }; - - throw new _Exception['default'](open.path.original + " doesn't match " + close, errorNode); - } - } - - function SourceLocation(source, locInfo) { - this.source = source; - this.start = { - line: locInfo.first_line, - column: locInfo.first_column - }; - this.end = { - line: locInfo.last_line, - column: locInfo.last_column - }; - } - - function id(token) { - if (/^\[.*\]$/.test(token)) { - return token.substr(1, token.length - 2); - } else { - return token; - } - } - - function stripFlags(open, close) { - return { - open: open.charAt(2) === '~', - close: close.charAt(close.length - 3) === '~' - }; - } - - function stripComment(comment) { - return comment.replace(/^\{\{~?\!-?-?/, '').replace(/-?-?~?\}\}$/, ''); - } - - function preparePath(data, parts, loc) { - loc = this.locInfo(loc); - - var original = data ? '@' : '', - dig = [], - depth = 0, - depthString = ''; - - for (var i = 0, l = parts.length; i < l; i++) { - var part = parts[i].part, - - // If we have [] syntax then we do not treat path references as operators, - // i.e. foo.[this] resolves to approximately context.foo['this'] - isLiteral = parts[i].original !== part; - original += (parts[i].separator || '') + part; - - if (!isLiteral && (part === '..' || part === '.' || part === 'this')) { - if (dig.length > 0) { - throw new _Exception['default']('Invalid path: ' + original, { loc: loc }); - } else if (part === '..') { - depth++; - depthString += '../'; - } - } else { - dig.push(part); - } - } - - return { - type: 'PathExpression', - data: data, - depth: depth, - parts: dig, - original: original, - loc: loc - }; - } - - function prepareMustache(path, params, hash, open, strip, locInfo) { - // Must use charAt to support IE pre-10 - var escapeFlag = open.charAt(3) || open.charAt(2), - escaped = escapeFlag !== '{' && escapeFlag !== '&'; - - var decorator = /\*/.test(open); - return { - type: decorator ? 'Decorator' : 'MustacheStatement', - path: path, - params: params, - hash: hash, - escaped: escaped, - strip: strip, - loc: this.locInfo(locInfo) - }; - } - - function prepareRawBlock(openRawBlock, contents, close, locInfo) { - validateClose(openRawBlock, close); - - locInfo = this.locInfo(locInfo); - var program = { - type: 'Program', - body: contents, - strip: {}, - loc: locInfo - }; - - return { - type: 'BlockStatement', - path: openRawBlock.path, - params: openRawBlock.params, - hash: openRawBlock.hash, - program: program, - openStrip: {}, - inverseStrip: {}, - closeStrip: {}, - loc: locInfo - }; - } - - function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) { - if (close && close.path) { - validateClose(openBlock, close); - } - - var decorator = /\*/.test(openBlock.open); - - program.blockParams = openBlock.blockParams; - - var inverse = undefined, - inverseStrip = undefined; - - if (inverseAndProgram) { - if (decorator) { - throw new _Exception['default']('Unexpected inverse block on decorator', inverseAndProgram); - } - - if (inverseAndProgram.chain) { - inverseAndProgram.program.body[0].closeStrip = close.strip; - } - - inverseStrip = inverseAndProgram.strip; - inverse = inverseAndProgram.program; - } - - if (inverted) { - inverted = inverse; - inverse = program; - program = inverted; - } - - return { - type: decorator ? 'DecoratorBlock' : 'BlockStatement', - path: openBlock.path, - params: openBlock.params, - hash: openBlock.hash, - program: program, - inverse: inverse, - openStrip: openBlock.strip, - inverseStrip: inverseStrip, - closeStrip: close && close.strip, - loc: this.locInfo(locInfo) - }; - } - - function prepareProgram(statements, loc) { - if (!loc && statements.length) { - var firstLoc = statements[0].loc, - lastLoc = statements[statements.length - 1].loc; - - /* istanbul ignore else */ - if (firstLoc && lastLoc) { - loc = { - source: firstLoc.source, - start: { - line: firstLoc.start.line, - column: firstLoc.start.column - }, - end: { - line: lastLoc.end.line, - column: lastLoc.end.column - } - }; - } - } - - return { - type: 'Program', - body: statements, - strip: {}, - loc: loc - }; - } - - function preparePartialBlock(open, program, close, locInfo) { - validateClose(open, close); - - return { - type: 'PartialBlockStatement', - name: open.path, - params: open.params, - hash: open.hash, - program: program, - openStrip: open.strip, - closeStrip: close && close.strip, - loc: this.locInfo(locInfo) - }; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxXQUFTLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ2xDLFNBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzs7QUFFakQsUUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7QUFDaEMsVUFBSSxTQUFTLEdBQUcsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUMsQ0FBQzs7QUFFckMsWUFBTSwwQkFBYyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDaEY7R0FDRjs7QUFFTSxXQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQzlDLFFBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCxVQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDeEIsWUFBTSxFQUFFLE9BQU8sQ0FBQyxZQUFZO0tBQzdCLENBQUM7QUFDRixRQUFJLENBQUMsR0FBRyxHQUFHO0FBQ1QsVUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3ZCLFlBQU0sRUFBRSxPQUFPLENBQUMsV0FBVztLQUM1QixDQUFDO0dBQ0g7O0FBRU0sV0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFO0FBQ3hCLFFBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMxQixhQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDMUMsTUFBTTtBQUNMLGFB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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZnVuY3Rpb24gdmFsaWRhdGVDbG9zZShvcGVuLCBjbG9zZSkge1xuICBjbG9zZSA9IGNsb3NlLnBhdGggPyBjbG9zZS5wYXRoLm9yaWdpbmFsIDogY2xvc2U7XG5cbiAgaWYgKG9wZW4ucGF0aC5vcmlnaW5hbCAhPT0gY2xvc2UpIHtcbiAgICBsZXQgZXJyb3JOb2RlID0ge2xvYzogb3Blbi5wYXRoLmxvY307XG5cbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKG9wZW4ucGF0aC5vcmlnaW5hbCArIFwiIGRvZXNuJ3QgbWF0Y2ggXCIgKyBjbG9zZSwgZXJyb3JOb2RlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc291cmNlLCBsb2NJbmZvKSB7XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnN0YXJ0ID0ge1xuICAgIGxpbmU6IGxvY0luZm8uZmlyc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8uZmlyc3RfY29sdW1uXG4gIH07XG4gIHRoaXMuZW5kID0ge1xuICAgIGxpbmU6IGxvY0luZm8ubGFzdF9saW5lLFxuICAgIGNvbHVtbjogbG9jSW5mby5sYXN0X2NvbHVtblxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWQodG9rZW4pIHtcbiAgaWYgKC9eXFxbLipcXF0kLy50ZXN0KHRva2VuKSkge1xuICAgIHJldHVybiB0b2tlbi5zdWJzdHIoMSwgdG9rZW4ubGVuZ3RoIC0gMik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEZsYWdzKG9wZW4sIGNsb3NlKSB7XG4gIHJldHVybiB7XG4gICAgb3Blbjogb3Blbi5jaGFyQXQoMikgPT09ICd+JyxcbiAgICBjbG9zZTogY2xvc2UuY2hhckF0KGNsb3NlLmxlbmd0aCAtIDMpID09PSAnfidcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29tbWVudChjb21tZW50KSB7XG4gIHJldHVybiBjb21tZW50LnJlcGxhY2UoL15cXHtcXHt+P1xcIS0/LT8vLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLT8tP34/XFx9XFx9JC8sICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVQYXRoKGRhdGEsIHBhcnRzLCBsb2MpIHtcbiAgbG9jID0gdGhpcy5sb2NJbmZvKGxvYyk7XG5cbiAgbGV0IG9yaWdpbmFsID0gZGF0YSA/ICdAJyA6ICcnLFxuICAgICAgZGlnID0gW10sXG4gICAgICBkZXB0aCA9IDAsXG4gICAgICBkZXB0aFN0cmluZyA9ICcnO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHBhcnQgPSBwYXJ0c1tpXS5wYXJ0LFxuICAgICAgICAvLyBJZiB3ZSBoYXZlIFtdIHN5bnRheCB0aGVuIHdlIGRvIG5vdCB0cmVhdCBwYXRoIHJlZmVyZW5jZXMgYXMgb3BlcmF0b3JzLFxuICAgICAgICAvLyBpLmUuIGZvby5bdGhpc10gcmVzb2x2ZXMgdG8gYXBwcm94aW1hdGVseSBjb250ZXh0LmZvb1sndGhpcyddXG4gICAgICAgIGlzTGl0ZXJhbCA9IHBhcnRzW2ldLm9yaWdpbmFsICE9PSBwYXJ0O1xuICAgIG9yaWdpbmFsICs9IChwYXJ0c1tpXS5zZXBhcmF0b3IgfHwgJycpICsgcGFydDtcblxuICAgIGlmICghaXNMaXRlcmFsICYmIChwYXJ0ID09PSAnLi4nIHx8IHBhcnQgPT09ICcuJyB8fCBwYXJ0ID09PSAndGhpcycpKSB7XG4gICAgICBpZiAoZGlnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignSW52YWxpZCBwYXRoOiAnICsgb3JpZ2luYWwsIHtsb2N9KTtcbiAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgICBkZXB0aFN0cmluZyArPSAnLi4vJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlnLnB1c2gocGFydCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUGF0aEV4cHJlc3Npb24nLFxuICAgIGRhdGEsXG4gICAgZGVwdGgsXG4gICAgcGFydHM6IGRpZyxcbiAgICBvcmlnaW5hbCxcbiAgICBsb2NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIG9wZW4sIHN0cmlwLCBsb2NJbmZvKSB7XG4gIC8vIE11c3QgdXNlIGNoYXJBdCB0byBzdXBwb3J0IElFIHByZS0xMFxuICBsZXQgZXNjYXBlRmxhZyA9IG9wZW4uY2hhckF0KDMpIHx8IG9wZW4uY2hhckF0KDIpLFxuICAgICAgZXNjYXBlZCA9IGVzY2FwZUZsYWcgIT09ICd7JyAmJiBlc2NhcGVGbGFnICE9PSAnJic7XG5cbiAgbGV0IGRlY29yYXRvciA9ICgvXFwqLy50ZXN0KG9wZW4pKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBkZWNvcmF0b3IgPyAnRGVjb3JhdG9yJyA6ICdNdXN0YWNoZVN0YXRlbWVudCcsXG4gICAgcGF0aCxcbiAgICBwYXJhbXMsXG4gICAgaGFzaCxcbiAgICBlc2NhcGVkLFxuICAgIHN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUmF3QmxvY2sob3BlblJhd0Jsb2NrLCBjb250ZW50cywgY2xvc2UsIGxvY0luZm8pIHtcbiAgdmFsaWRhdGVDbG9zZShvcGVuUmF3QmxvY2ssIGNsb3NlKTtcblxuICBsb2NJbmZvID0gdGhpcy5sb2NJbmZvKGxvY0luZm8pO1xuICBsZXQgcHJvZ3JhbSA9IHtcbiAgICB0eXBlOiAnUHJvZ3JhbScsXG4gICAgYm9keTogY29udGVudHMsXG4gICAgc3RyaXA6IHt9LFxuICAgIGxvYzogbG9jSW5mb1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0Jsb2NrU3RhdGVtZW50JyxcbiAgICBwYXRoOiBvcGVuUmF3QmxvY2sucGF0aCxcbiAgICBwYXJhbXM6IG9wZW5SYXdCbG9jay5wYXJhbXMsXG4gICAgaGFzaDogb3BlblJhd0Jsb2NrLmhhc2gsXG4gICAgcHJvZ3JhbSxcbiAgICBvcGVuU3RyaXA6IHt9LFxuICAgIGludmVyc2VTdHJpcDoge30sXG4gICAgY2xvc2VTdHJpcDoge30sXG4gICAgbG9jOiBsb2NJbmZvXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQmxvY2sob3BlbkJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlQW5kUHJvZ3JhbSwgY2xvc2UsIGludmVydGVkLCBsb2NJbmZvKSB7XG4gIGlmIChjbG9zZSAmJiBjbG9zZS5wYXRoKSB7XG4gICAgdmFsaWRhdGVDbG9zZShvcGVuQmxvY2ssIGNsb3NlKTtcbiAgfVxuXG4gIGxldCBkZWNvcmF0b3IgPSAoL1xcKi8udGVzdChvcGVuQmxvY2sub3BlbikpO1xuXG4gIHByb2dyYW0uYmxvY2tQYXJhbXMgPSBvcGVuQmxvY2suYmxvY2tQYXJhbXM7XG5cbiAgbGV0IGludmVyc2UsXG4gICAgICBpbnZlcnNlU3RyaXA7XG5cbiAgaWYgKGludmVyc2VBbmRQcm9ncmFtKSB7XG4gICAgaWYgKGRlY29yYXRvcikge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5leHBlY3RlZCBpbnZlcnNlIGJsb2NrIG9uIGRlY29yYXRvcicsIGludmVyc2VBbmRQcm9ncmFtKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZUFuZFByb2dyYW0uY2hhaW4pIHtcbiAgICAgIGludmVyc2VBbmRQcm9ncmFtLnByb2dyYW0uYm9keVswXS5jbG9zZVN0cmlwID0gY2xvc2Uuc3RyaXA7XG4gICAgfVxuXG4gICAgaW52ZXJzZVN0cmlwID0gaW52ZXJzZUFuZFByb2dyYW0uc3RyaXA7XG4gICAgaW52ZXJzZSA9IGludmVyc2VBbmRQcm9ncmFtLnByb2dyYW07XG4gIH1cblxuICBpZiAoaW52ZXJ0ZWQpIHtcbiAgICBpbnZlcnRlZCA9IGludmVyc2U7XG4gICAgaW52ZXJzZSA9IHByb2dyYW07XG4gICAgcHJvZ3JhbSA9IGludmVydGVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBkZWNvcmF0b3IgPyAnRGVjb3JhdG9yQmxvY2snIDogJ0Jsb2NrU3RhdGVtZW50JyxcbiAgICBwYXRoOiBvcGVuQmxvY2sucGF0aCxcbiAgICBwYXJhbXM6IG9wZW5CbG9jay5wYXJhbXMsXG4gICAgaGFzaDogb3BlbkJsb2NrLmhhc2gsXG4gICAgcHJvZ3JhbSxcbiAgICBpbnZlcnNlLFxuICAgIG9wZW5TdHJpcDogb3BlbkJsb2NrLnN0cmlwLFxuICAgIGludmVyc2VTdHJpcCxcbiAgICBjbG9zZVN0cmlwOiBjbG9zZSAmJiBjbG9zZS5zdHJpcCxcbiAgICBsb2M6IHRoaXMubG9jSW5mbyhsb2NJbmZvKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVByb2dyYW0oc3RhdGVtZW50cywgbG9jKSB7XG4gIGlmICghbG9jICYmIHN0YXRlbWVudHMubGVuZ3RoKSB7XG4gICAgY29uc3QgZmlyc3RMb2MgPSBzdGF0ZW1lbnRzWzBdLmxvYyxcbiAgICAgICAgICBsYXN0TG9jID0gc3RhdGVtZW50c1tzdGF0ZW1lbnRzLmxlbmd0aCAtIDFdLmxvYztcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGZpcnN0TG9jICYmIGxhc3RMb2MpIHtcbiAgICAgIGxvYyA9IHtcbiAgICAgICAgc291cmNlOiBmaXJzdExvYy5zb3VyY2UsXG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgbGluZTogZmlyc3RMb2Muc3RhcnQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGZpcnN0TG9jLnN0YXJ0LmNvbHVtblxuICAgICAgICB9LFxuICAgICAgICBlbmQ6IHtcbiAgICAgICAgICBsaW5lOiBsYXN0TG9jLmVuZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogbGFzdExvYy5lbmQuY29sdW1uXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUHJvZ3JhbScsXG4gICAgYm9keTogc3RhdGVtZW50cyxcbiAgICBzdHJpcDoge30sXG4gICAgbG9jOiBsb2NcbiAgfTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVBhcnRpYWxCbG9jayhvcGVuLCBwcm9ncmFtLCBjbG9zZSwgbG9jSW5mbykge1xuICB2YWxpZGF0ZUNsb3NlKG9wZW4sIGNsb3NlKTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQnLFxuICAgIG5hbWU6IG9wZW4ucGF0aCxcbiAgICBwYXJhbXM6IG9wZW4ucGFyYW1zLFxuICAgIGhhc2g6IG9wZW4uaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIG9wZW5TdHJpcDogb3Blbi5zdHJpcCxcbiAgICBjbG9zZVN0cmlwOiBjbG9zZSAmJiBjbG9zZS5zdHJpcCxcbiAgICBsb2M6IHRoaXMubG9jSW5mbyhsb2NJbmZvKVxuICB9O1xufVxuXG4iXX0= diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/javascript-compiler.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/javascript-compiler.js deleted file mode 100644 index 8d6165ee4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/javascript-compiler.js +++ /dev/null @@ -1,1120 +0,0 @@ -define(['exports', 'module', '../base', '../exception', '../utils', './code-gen'], function (exports, module, _base, _exception, _utils, _codeGen) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - var _CodeGen = _interopRequireDefault(_codeGen); - - function Literal(value) { - this.value = value; - } - - function JavaScriptCompiler() {} - - JavaScriptCompiler.prototype = { - // PUBLIC API: You can override these methods in a subclass to provide - // alternative compiled forms for name lookup and buffering semantics - nameLookup: function nameLookup(parent, name /* , type*/) { - if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) { - return [parent, '.', name]; - } else { - return [parent, '[', JSON.stringify(name), ']']; - } - }, - depthedLookup: function depthedLookup(name) { - return [this.aliasable('container.lookup'), '(depths, "', name, '")']; - }, - - compilerInfo: function compilerInfo() { - var revision = _base.COMPILER_REVISION, - versions = _base.REVISION_CHANGES[revision]; - return [revision, versions]; - }, - - appendToBuffer: function appendToBuffer(source, location, explicit) { - // Force a source as this simplifies the merge logic. - if (!_utils.isArray(source)) { - source = [source]; - } - source = this.source.wrap(source, location); - - if (this.environment.isSimple) { - return ['return ', source, ';']; - } else if (explicit) { - // This is a case where the buffer operation occurs as a child of another - // construct, generally braces. We have to explicitly output these buffer - // operations to ensure that the emitted code goes in the correct location. - return ['buffer += ', source, ';']; - } else { - source.appendToBuffer = true; - return source; - } - }, - - initializeBuffer: function initializeBuffer() { - return this.quotedString(''); - }, - // END PUBLIC API - - compile: function compile(environment, options, context, asObject) { - this.environment = environment; - this.options = options; - this.stringParams = this.options.stringParams; - this.trackIds = this.options.trackIds; - this.precompile = !asObject; - - this.name = this.environment.name; - this.isChild = !!context; - this.context = context || { - decorators: [], - programs: [], - environments: [] - }; - - this.preamble(); - - this.stackSlot = 0; - this.stackVars = []; - this.aliases = {}; - this.registers = { list: [] }; - this.hashes = []; - this.compileStack = []; - this.inlineStack = []; - this.blockParams = []; - - this.compileChildren(environment, options); - - this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat; - this.useBlockParams = this.useBlockParams || environment.useBlockParams; - - var opcodes = environment.opcodes, - opcode = undefined, - firstLoc = undefined, - i = undefined, - l = undefined; - - for (i = 0, l = opcodes.length; i < l; i++) { - opcode = opcodes[i]; - - this.source.currentLocation = opcode.loc; - firstLoc = firstLoc || opcode.loc; - this[opcode.opcode].apply(this, opcode.args); - } - - // Flush any trailing content that might be pending. - this.source.currentLocation = firstLoc; - this.pushSource(''); - - /* istanbul ignore next */ - if (this.stackSlot || this.inlineStack.length || this.compileStack.length) { - throw new _Exception['default']('Compile completed with content left on stack'); - } - - if (!this.decorators.isEmpty()) { - this.useDecorators = true; - - this.decorators.prepend('var decorators = container.decorators;\n'); - this.decorators.push('return fn;'); - - if (asObject) { - this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]); - } else { - this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\n'); - this.decorators.push('}\n'); - this.decorators = this.decorators.merge(); - } - } else { - this.decorators = undefined; - } - - var fn = this.createFunctionContext(asObject); - if (!this.isChild) { - var ret = { - compiler: this.compilerInfo(), - main: fn - }; - - if (this.decorators) { - ret.main_d = this.decorators; // eslint-disable-line camelcase - ret.useDecorators = true; - } - - var _context = this.context; - var programs = _context.programs; - var decorators = _context.decorators; - - for (i = 0, l = programs.length; i < l; i++) { - if (programs[i]) { - ret[i] = programs[i]; - if (decorators[i]) { - ret[i + '_d'] = decorators[i]; - ret.useDecorators = true; - } - } - } - - if (this.environment.usePartial) { - ret.usePartial = true; - } - if (this.options.data) { - ret.useData = true; - } - if (this.useDepths) { - ret.useDepths = true; - } - if (this.useBlockParams) { - ret.useBlockParams = true; - } - if (this.options.compat) { - ret.compat = true; - } - - if (!asObject) { - ret.compiler = JSON.stringify(ret.compiler); - - this.source.currentLocation = { start: { line: 1, column: 0 } }; - ret = this.objectLiteral(ret); - - if (options.srcName) { - ret = ret.toStringWithSourceMap({ file: options.destName }); - ret.map = ret.map && ret.map.toString(); - } else { - ret = ret.toString(); - } - } else { - ret.compilerOptions = this.options; - } - - return ret; - } else { - return fn; - } - }, - - preamble: function preamble() { - // track the last context pushed into place to allow skipping the - // getContext opcode when it would be a noop - this.lastContext = 0; - this.source = new _CodeGen['default'](this.options.srcName); - this.decorators = new _CodeGen['default'](this.options.srcName); - }, - - createFunctionContext: function createFunctionContext(asObject) { - var varDeclarations = ''; - - var locals = this.stackVars.concat(this.registers.list); - if (locals.length > 0) { - varDeclarations += ', ' + locals.join(', '); - } - - // Generate minimizer alias mappings - // - // When using true SourceNodes, this will update all references to the given alias - // as the source nodes are reused in situ. For the non-source node compilation mode, - // aliases will not be used, but this case is already being run on the client and - // we aren't concern about minimizing the template size. - var aliasCount = 0; - for (var alias in this.aliases) { - // eslint-disable-line guard-for-in - var node = this.aliases[alias]; - - if (this.aliases.hasOwnProperty(alias) && node.children && node.referenceCount > 1) { - varDeclarations += ', alias' + ++aliasCount + '=' + alias; - node.children[0] = 'alias' + aliasCount; - } - } - - var params = ['container', 'depth0', 'helpers', 'partials', 'data']; - - if (this.useBlockParams || this.useDepths) { - params.push('blockParams'); - } - if (this.useDepths) { - params.push('depths'); - } - - // Perform a second pass over the output to merge content when possible - var source = this.mergeSource(varDeclarations); - - if (asObject) { - params.push(source); - - return Function.apply(this, params); - } else { - return this.source.wrap(['function(', params.join(','), ') {\n ', source, '}']); - } - }, - mergeSource: function mergeSource(varDeclarations) { - var isSimple = this.environment.isSimple, - appendOnly = !this.forceBuffer, - appendFirst = undefined, - sourceSeen = undefined, - bufferStart = undefined, - bufferEnd = undefined; - this.source.each(function (line) { - if (line.appendToBuffer) { - if (bufferStart) { - line.prepend(' + '); - } else { - bufferStart = line; - } - bufferEnd = line; - } else { - if (bufferStart) { - if (!sourceSeen) { - appendFirst = true; - } else { - bufferStart.prepend('buffer += '); - } - bufferEnd.add(';'); - bufferStart = bufferEnd = undefined; - } - - sourceSeen = true; - if (!isSimple) { - appendOnly = false; - } - } - }); - - if (appendOnly) { - if (bufferStart) { - bufferStart.prepend('return '); - bufferEnd.add(';'); - } else if (!sourceSeen) { - this.source.push('return "";'); - } - } else { - varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer()); - - if (bufferStart) { - bufferStart.prepend('return buffer + '); - bufferEnd.add(';'); - } else { - this.source.push('return buffer;'); - } - } - - if (varDeclarations) { - this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n')); - } - - return this.source.merge(); - }, - - // [blockValue] - // - // On stack, before: hash, inverse, program, value - // On stack, after: return value of blockHelperMissing - // - // The purpose of this opcode is to take a block of the form - // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and - // replace it on the stack with the result of properly - // invoking blockHelperMissing. - blockValue: function blockValue(name) { - var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'), - params = [this.contextName(0)]; - this.setupHelperArgs(name, 0, params); - - var blockName = this.popStack(); - params.splice(1, 0, blockName); - - this.push(this.source.functionCall(blockHelperMissing, 'call', params)); - }, - - // [ambiguousBlockValue] - // - // On stack, before: hash, inverse, program, value - // Compiler value, before: lastHelper=value of last found helper, if any - // On stack, after, if no lastHelper: same as [blockValue] - // On stack, after, if lastHelper: value - ambiguousBlockValue: function ambiguousBlockValue() { - // We're being a bit cheeky and reusing the options value from the prior exec - var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'), - params = [this.contextName(0)]; - this.setupHelperArgs('', 0, params, true); - - this.flushInline(); - - var current = this.topStack(); - params.splice(1, 0, current); - - this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']); - }, - - // [appendContent] - // - // On stack, before: ... - // On stack, after: ... - // - // Appends the string value of `content` to the current buffer - appendContent: function appendContent(content) { - if (this.pendingContent) { - content = this.pendingContent + content; - } else { - this.pendingLocation = this.source.currentLocation; - } - - this.pendingContent = content; - }, - - // [append] - // - // On stack, before: value, ... - // On stack, after: ... - // - // Coerces `value` to a String and appends it to the current buffer. - // - // If `value` is truthy, or 0, it is coerced into a string and appended - // Otherwise, the empty string is appended - append: function append() { - if (this.isInline()) { - this.replaceStack(function (current) { - return [' != null ? ', current, ' : ""']; - }); - - this.pushSource(this.appendToBuffer(this.popStack())); - } else { - var local = this.popStack(); - this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']); - if (this.environment.isSimple) { - this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']); - } - } - }, - - // [appendEscaped] - // - // On stack, before: value, ... - // On stack, after: ... - // - // Escape `value` and append it to the buffer - appendEscaped: function appendEscaped() { - this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')'])); - }, - - // [getContext] - // - // On stack, before: ... - // On stack, after: ... - // Compiler value, after: lastContext=depth - // - // Set the value of the `lastContext` compiler value to the depth - getContext: function getContext(depth) { - this.lastContext = depth; - }, - - // [pushContext] - // - // On stack, before: ... - // On stack, after: currentContext, ... - // - // Pushes the value of the current context onto the stack. - pushContext: function pushContext() { - this.pushStackLiteral(this.contextName(this.lastContext)); - }, - - // [lookupOnContext] - // - // On stack, before: ... - // On stack, after: currentContext[name], ... - // - // Looks up the value of `name` on the current context and pushes - // it onto the stack. - lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) { - var i = 0; - - if (!scoped && this.options.compat && !this.lastContext) { - // The depthed query is expected to handle the undefined logic for the root level that - // is implemented below, so we evaluate that directly in compat mode - this.push(this.depthedLookup(parts[i++])); - } else { - this.pushContext(); - } - - this.resolvePath('context', parts, i, falsy, strict); - }, - - // [lookupBlockParam] - // - // On stack, before: ... - // On stack, after: blockParam[name], ... - // - // Looks up the value of `parts` on the given block param and pushes - // it onto the stack. - lookupBlockParam: function lookupBlockParam(blockParamId, parts) { - this.useBlockParams = true; - - this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']); - this.resolvePath('context', parts, 1); - }, - - // [lookupData] - // - // On stack, before: ... - // On stack, after: data, ... - // - // Push the data lookup operator - lookupData: function lookupData(depth, parts, strict) { - if (!depth) { - this.pushStackLiteral('data'); - } else { - this.pushStackLiteral('container.data(data, ' + depth + ')'); - } - - this.resolvePath('data', parts, 0, true, strict); - }, - - resolvePath: function resolvePath(type, parts, i, falsy, strict) { - // istanbul ignore next - - var _this = this; - - if (this.options.strict || this.options.assumeObjects) { - this.push(strictLookup(this.options.strict && strict, this, parts, type)); - return; - } - - var len = parts.length; - for (; i < len; i++) { - /* eslint-disable no-loop-func */ - this.replaceStack(function (current) { - var lookup = _this.nameLookup(current, parts[i], type); - // We want to ensure that zero and false are handled properly if the context (falsy flag) - // needs to have the special handling for these values. - if (!falsy) { - return [' != null ? ', lookup, ' : ', current]; - } else { - // Otherwise we can use generic falsy handling - return [' && ', lookup]; - } - }); - /* eslint-enable no-loop-func */ - } - }, - - // [resolvePossibleLambda] - // - // On stack, before: value, ... - // On stack, after: resolved value, ... - // - // If the `value` is a lambda, replace it on the stack by - // the return value of the lambda - resolvePossibleLambda: function resolvePossibleLambda() { - this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']); - }, - - // [pushStringParam] - // - // On stack, before: ... - // On stack, after: string, currentContext, ... - // - // This opcode is designed for use in string mode, which - // provides the string value of a parameter along with its - // depth rather than resolving it immediately. - pushStringParam: function pushStringParam(string, type) { - this.pushContext(); - this.pushString(type); - - // If it's a subexpression, the string result - // will be pushed after this opcode. - if (type !== 'SubExpression') { - if (typeof string === 'string') { - this.pushString(string); - } else { - this.pushStackLiteral(string); - } - } - }, - - emptyHash: function emptyHash(omitEmpty) { - if (this.trackIds) { - this.push('{}'); // hashIds - } - if (this.stringParams) { - this.push('{}'); // hashContexts - this.push('{}'); // hashTypes - } - this.pushStackLiteral(omitEmpty ? 'undefined' : '{}'); - }, - pushHash: function pushHash() { - if (this.hash) { - this.hashes.push(this.hash); - } - this.hash = { values: [], types: [], contexts: [], ids: [] }; - }, - popHash: function popHash() { - var hash = this.hash; - this.hash = this.hashes.pop(); - - if (this.trackIds) { - this.push(this.objectLiteral(hash.ids)); - } - if (this.stringParams) { - this.push(this.objectLiteral(hash.contexts)); - this.push(this.objectLiteral(hash.types)); - } - - this.push(this.objectLiteral(hash.values)); - }, - - // [pushString] - // - // On stack, before: ... - // On stack, after: quotedString(string), ... - // - // Push a quoted version of `string` onto the stack - pushString: function pushString(string) { - this.pushStackLiteral(this.quotedString(string)); - }, - - // [pushLiteral] - // - // On stack, before: ... - // On stack, after: value, ... - // - // Pushes a value onto the stack. This operation prevents - // the compiler from creating a temporary variable to hold - // it. - pushLiteral: function pushLiteral(value) { - this.pushStackLiteral(value); - }, - - // [pushProgram] - // - // On stack, before: ... - // On stack, after: program(guid), ... - // - // Push a program expression onto the stack. This takes - // a compile-time guid and converts it into a runtime-accessible - // expression. - pushProgram: function pushProgram(guid) { - if (guid != null) { - this.pushStackLiteral(this.programExpression(guid)); - } else { - this.pushStackLiteral(null); - } - }, - - // [registerDecorator] - // - // On stack, before: hash, program, params..., ... - // On stack, after: ... - // - // Pops off the decorator's parameters, invokes the decorator, - // and inserts the decorator into the decorators list. - registerDecorator: function registerDecorator(paramSize, name) { - var foundDecorator = this.nameLookup('decorators', name, 'decorator'), - options = this.setupHelperArgs(name, paramSize); - - this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']); - }, - - // [invokeHelper] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of helper invocation - // - // Pops off the helper's parameters, invokes the helper, - // and pushes the helper's return value onto the stack. - // - // If the helper is not found, `helperMissing` is called. - invokeHelper: function invokeHelper(paramSize, name, isSimple) { - var nonHelper = this.popStack(), - helper = this.setupHelper(paramSize, name), - simple = isSimple ? [helper.name, ' || '] : ''; - - var lookup = ['('].concat(simple, nonHelper); - if (!this.options.strict) { - lookup.push(' || ', this.aliasable('helpers.helperMissing')); - } - lookup.push(')'); - - this.push(this.source.functionCall(lookup, 'call', helper.callParams)); - }, - - // [invokeKnownHelper] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of helper invocation - // - // This operation is used when the helper is known to exist, - // so a `helperMissing` fallback is not required. - invokeKnownHelper: function invokeKnownHelper(paramSize, name) { - var helper = this.setupHelper(paramSize, name); - this.push(this.source.functionCall(helper.name, 'call', helper.callParams)); - }, - - // [invokeAmbiguous] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of disambiguation - // - // This operation is used when an expression like `{{foo}}` - // is provided, but we don't know at compile-time whether it - // is a helper or a path. - // - // This operation emits more code than the other options, - // and can be avoided by passing the `knownHelpers` and - // `knownHelpersOnly` flags at compile-time. - invokeAmbiguous: function invokeAmbiguous(name, helperCall) { - this.useRegister('helper'); - - var nonHelper = this.popStack(); - - this.emptyHash(); - var helper = this.setupHelper(0, name, helperCall); - - var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper'); - - var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')']; - if (!this.options.strict) { - lookup[0] = '(helper = '; - lookup.push(' != null ? helper : ', this.aliasable('helpers.helperMissing')); - } - - this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('"function"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']); - }, - - // [invokePartial] - // - // On stack, before: context, ... - // On stack after: result of partial invocation - // - // This operation pops off a context, invokes a partial with that context, - // and pushes the result of the invocation back. - invokePartial: function invokePartial(isDynamic, name, indent) { - var params = [], - options = this.setupParams(name, 1, params); - - if (isDynamic) { - name = this.popStack(); - delete options.name; - } - - if (indent) { - options.indent = JSON.stringify(indent); - } - options.helpers = 'helpers'; - options.partials = 'partials'; - options.decorators = 'container.decorators'; - - if (!isDynamic) { - params.unshift(this.nameLookup('partials', name, 'partial')); - } else { - params.unshift(name); - } - - if (this.options.compat) { - options.depths = 'depths'; - } - options = this.objectLiteral(options); - params.push(options); - - this.push(this.source.functionCall('container.invokePartial', '', params)); - }, - - // [assignToHash] - // - // On stack, before: value, ..., hash, ... - // On stack, after: ..., hash, ... - // - // Pops a value off the stack and assigns it to the current hash - assignToHash: function assignToHash(key) { - var value = this.popStack(), - context = undefined, - type = undefined, - id = undefined; - - if (this.trackIds) { - id = this.popStack(); - } - if (this.stringParams) { - type = this.popStack(); - context = this.popStack(); - } - - var hash = this.hash; - if (context) { - hash.contexts[key] = context; - } - if (type) { - hash.types[key] = type; - } - if (id) { - hash.ids[key] = id; - } - hash.values[key] = value; - }, - - pushId: function pushId(type, name, child) { - if (type === 'BlockParam') { - this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : '')); - } else if (type === 'PathExpression') { - this.pushString(name); - } else if (type === 'SubExpression') { - this.pushStackLiteral('true'); - } else { - this.pushStackLiteral('null'); - } - }, - - // HELPERS - - compiler: JavaScriptCompiler, - - compileChildren: function compileChildren(environment, options) { - var children = environment.children, - child = undefined, - compiler = undefined; - - for (var i = 0, l = children.length; i < l; i++) { - child = children[i]; - compiler = new this.compiler(); // eslint-disable-line new-cap - - var existing = this.matchExistingProgram(child); - - if (existing == null) { - this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children - var index = this.context.programs.length; - child.index = index; - child.name = 'program' + index; - this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile); - this.context.decorators[index] = compiler.decorators; - this.context.environments[index] = child; - - this.useDepths = this.useDepths || compiler.useDepths; - this.useBlockParams = this.useBlockParams || compiler.useBlockParams; - child.useDepths = this.useDepths; - child.useBlockParams = this.useBlockParams; - } else { - child.index = existing.index; - child.name = 'program' + existing.index; - - this.useDepths = this.useDepths || existing.useDepths; - this.useBlockParams = this.useBlockParams || existing.useBlockParams; - } - } - }, - matchExistingProgram: function matchExistingProgram(child) { - for (var i = 0, len = this.context.environments.length; i < len; i++) { - var environment = this.context.environments[i]; - if (environment && environment.equals(child)) { - return environment; - } - } - }, - - programExpression: function programExpression(guid) { - var child = this.environment.children[guid], - programParams = [child.index, 'data', child.blockParams]; - - if (this.useBlockParams || this.useDepths) { - programParams.push('blockParams'); - } - if (this.useDepths) { - programParams.push('depths'); - } - - return 'container.program(' + programParams.join(', ') + ')'; - }, - - useRegister: function useRegister(name) { - if (!this.registers[name]) { - this.registers[name] = true; - this.registers.list.push(name); - } - }, - - push: function push(expr) { - if (!(expr instanceof Literal)) { - expr = this.source.wrap(expr); - } - - this.inlineStack.push(expr); - return expr; - }, - - pushStackLiteral: function pushStackLiteral(item) { - this.push(new Literal(item)); - }, - - pushSource: function pushSource(source) { - if (this.pendingContent) { - this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation)); - this.pendingContent = undefined; - } - - if (source) { - this.source.push(source); - } - }, - - replaceStack: function replaceStack(callback) { - var prefix = ['('], - stack = undefined, - createdStack = undefined, - usedLiteral = undefined; - - /* istanbul ignore next */ - if (!this.isInline()) { - throw new _Exception['default']('replaceStack on non-inline'); - } - - // We want to merge the inline statement into the replacement statement via ',' - var top = this.popStack(true); - - if (top instanceof Literal) { - // Literals do not need to be inlined - stack = [top.value]; - prefix = ['(', stack]; - usedLiteral = true; - } else { - // Get or create the current stack name for use by the inline - createdStack = true; - var _name = this.incrStack(); - - prefix = ['((', this.push(_name), ' = ', top, ')']; - stack = this.topStack(); - } - - var item = callback.call(this, stack); - - if (!usedLiteral) { - this.popStack(); - } - if (createdStack) { - this.stackSlot--; - } - this.push(prefix.concat(item, ')')); - }, - - incrStack: function incrStack() { - this.stackSlot++; - if (this.stackSlot > this.stackVars.length) { - this.stackVars.push('stack' + this.stackSlot); - } - return this.topStackName(); - }, - topStackName: function topStackName() { - return 'stack' + this.stackSlot; - }, - flushInline: function flushInline() { - var inlineStack = this.inlineStack; - this.inlineStack = []; - for (var i = 0, len = inlineStack.length; i < len; i++) { - var entry = inlineStack[i]; - /* istanbul ignore if */ - if (entry instanceof Literal) { - this.compileStack.push(entry); - } else { - var stack = this.incrStack(); - this.pushSource([stack, ' = ', entry, ';']); - this.compileStack.push(stack); - } - } - }, - isInline: function isInline() { - return this.inlineStack.length; - }, - - popStack: function popStack(wrapped) { - var inline = this.isInline(), - item = (inline ? this.inlineStack : this.compileStack).pop(); - - if (!wrapped && item instanceof Literal) { - return item.value; - } else { - if (!inline) { - /* istanbul ignore next */ - if (!this.stackSlot) { - throw new _Exception['default']('Invalid stack pop'); - } - this.stackSlot--; - } - return item; - } - }, - - topStack: function topStack() { - var stack = this.isInline() ? this.inlineStack : this.compileStack, - item = stack[stack.length - 1]; - - /* istanbul ignore if */ - if (item instanceof Literal) { - return item.value; - } else { - return item; - } - }, - - contextName: function contextName(context) { - if (this.useDepths && context) { - return 'depths[' + context + ']'; - } else { - return 'depth' + context; - } - }, - - quotedString: function quotedString(str) { - return this.source.quotedString(str); - }, - - objectLiteral: function objectLiteral(obj) { - return this.source.objectLiteral(obj); - }, - - aliasable: function aliasable(name) { - var ret = this.aliases[name]; - if (ret) { - ret.referenceCount++; - return ret; - } - - ret = this.aliases[name] = this.source.wrap(name); - ret.aliasable = true; - ret.referenceCount = 1; - - return ret; - }, - - setupHelper: function setupHelper(paramSize, name, blockHelper) { - var params = [], - paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper); - var foundHelper = this.nameLookup('helpers', name, 'helper'), - callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : {}'); - - return { - params: params, - paramsInit: paramsInit, - name: foundHelper, - callParams: [callContext].concat(params) - }; - }, - - setupParams: function setupParams(helper, paramSize, params) { - var options = {}, - contexts = [], - types = [], - ids = [], - objectArgs = !params, - param = undefined; - - if (objectArgs) { - params = []; - } - - options.name = this.quotedString(helper); - options.hash = this.popStack(); - - if (this.trackIds) { - options.hashIds = this.popStack(); - } - if (this.stringParams) { - options.hashTypes = this.popStack(); - options.hashContexts = this.popStack(); - } - - var inverse = this.popStack(), - program = this.popStack(); - - // Avoid setting fn and inverse if neither are set. This allows - // helpers to do a check for `if (options.fn)` - if (program || inverse) { - options.fn = program || 'container.noop'; - options.inverse = inverse || 'container.noop'; - } - - // The parameters go on to the stack in order (making sure that they are evaluated in order) - // so we need to pop them off the stack in reverse order - var i = paramSize; - while (i--) { - param = this.popStack(); - params[i] = param; - - if (this.trackIds) { - ids[i] = this.popStack(); - } - if (this.stringParams) { - types[i] = this.popStack(); - contexts[i] = this.popStack(); - } - } - - if (objectArgs) { - options.args = this.source.generateArray(params); - } - - if (this.trackIds) { - options.ids = this.source.generateArray(ids); - } - if (this.stringParams) { - options.types = this.source.generateArray(types); - options.contexts = this.source.generateArray(contexts); - } - - if (this.options.data) { - options.data = 'data'; - } - if (this.useBlockParams) { - options.blockParams = 'blockParams'; - } - return options; - }, - - setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) { - var options = this.setupParams(helper, paramSize, params); - options = this.objectLiteral(options); - if (useRegister) { - this.useRegister('options'); - params.push('options'); - return ['options=', options]; - } else if (params) { - params.push(options); - return ''; - } else { - return options; - } - } - }; - - (function () { - var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' '); - - var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {}; - - for (var i = 0, l = reservedWords.length; i < l; i++) { - compilerWords[reservedWords[i]] = true; - } - })(); - - JavaScriptCompiler.isValidJavaScriptVariableName = function (name) { - return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name); - }; - - function strictLookup(requireTerminal, compiler, parts, type) { - var stack = compiler.popStack(), - i = 0, - len = parts.length; - if (requireTerminal) { - len--; - } - - for (; i < len; i++) { - stack = compiler.nameLookup(stack, parts[i], type); - } - - if (requireTerminal) { - return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ')']; - } else { - return stack; - } - } - - module.exports = JavaScriptCompiler; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFLQSxXQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDdEIsUUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7R0FDcEI7O0FBRUQsV0FBUyxrQkFBa0IsR0FBRyxFQUFFOztBQUVoQyxvQkFBa0IsQ0FBQyxTQUFTLEdBQUc7OztBQUc3QixjQUFVLEVBQUUsb0JBQVMsTUFBTSxFQUFFLElBQUksY0FBYTtBQUM1QyxVQUFJLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzFELGVBQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzVCLE1BQU07QUFDTCxlQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQ2pEO0tBQ0Y7QUFDRCxpQkFBYSxFQUFFLHVCQUFTLElBQUksRUFBRTtBQUM1QixhQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDdkU7O0FBRUQsZ0JBQVksRUFBRSx3QkFBVztBQUN2QixVQUFNLFFBQVEsU0ExQlQsaUJBQWlCLEFBMEJZO1VBQzVCLFFBQVEsR0FBRyxNQTNCTyxnQkFBZ0IsQ0EyQk4sUUFBUSxDQUFDLENBQUM7QUFDNUMsYUFBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUM3Qjs7QUFFRCxrQkFBYyxFQUFFLHdCQUFTLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFOztBQUVuRCxVQUFJLENBQUMsT0EvQkQsT0FBTyxDQStCRSxNQUFNLENBQUMsRUFBRTtBQUNwQixjQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUNuQjtBQUNELFlBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7O0FBRTVDLFVBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7QUFDN0IsZUFBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7T0FDakMsTUFBTSxJQUFJLFFBQVEsRUFBRTs7OztBQUluQixlQUFPLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztPQUNwQyxNQUFNO0FBQ0wsY0FBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDN0IsZUFBTyxNQUFNLENBQUM7T0FDZjtLQUNGOztBQUVELG9CQUFnQixFQUFFLDRCQUFXO0FBQzNCLGFBQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUM5Qjs7O0FBR0QsV0FBTyxFQUFFLGlCQUFTLFdBQVcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtBQUN6RCxVQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUMvQixVQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUN2QixVQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0FBQzlDLFVBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDdEMsVUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLFFBQVEsQ0FBQzs7QUFFNUIsVUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztBQUNsQyxVQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDekIsVUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUk7QUFDeEIsa0JBQVUsRUFBRSxFQUFFO0FBQ2QsZ0JBQVEsRUFBRSxFQUFFO0FBQ1osb0JBQVksRUFBRSxFQUFFO09BQ2pCLENBQUM7O0FBRUYsVUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDOztBQUVoQixVQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUNuQixVQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNwQixVQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNsQixVQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDO0FBQzlCLFVBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2pCLFVBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ3RCLFVBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDOztBQUV0QixVQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFM0MsVUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLFdBQVcsQ0FBQyxTQUFTLElBQUksV0FBVyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM3RyxVQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksV0FBVyxDQUFDLGNBQWMsQ0FBQzs7QUFFeEUsVUFBSSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU87VUFDN0IsTUFBTSxZQUFBO1VBQ04sUUFBUSxZQUFBO1VBQ1IsQ0FBQyxZQUFBO1VBQ0QsQ0FBQyxZQUFBLENBQUM7O0FBRU4sV0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUMsY0FBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFcEIsWUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUN6QyxnQkFBUSxHQUFHLFFBQVEsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ2xDLFlBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDOUM7OztBQUdELFVBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztBQUN2QyxVQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7QUFHcEIsVUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFO0FBQ3pFLGNBQU0sMEJBQWMsOENBQThDLENBQUMsQ0FBQztPQUNyRTs7QUFFRCxVQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUM5QixZQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzs7QUFFMUIsWUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsMENBQTBDLENBQUMsQ0FBQztBQUNwRSxZQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzs7QUFFbkMsWUFBSSxRQUFRLEVBQUU7QUFDWixjQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzFJLE1BQU07QUFDTCxjQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyx1RUFBdUUsQ0FBQyxDQUFDO0FBQ2pHLGNBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVCLGNBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUMzQztPQUNGLE1BQU07QUFDTCxZQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztPQUM3Qjs7QUFFRCxVQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUMsVUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxHQUFHLEdBQUc7QUFDUixrQkFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDN0IsY0FBSSxFQUFFLEVBQUU7U0FDVCxDQUFDOztBQUVGLFlBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNuQixhQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDN0IsYUFBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7U0FDMUI7O3VCQUU0QixJQUFJLENBQUMsT0FBTztZQUFwQyxRQUFRLFlBQVIsUUFBUTtZQUFFLFVBQVUsWUFBVixVQUFVOztBQUN6QixhQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxjQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNmLGVBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckIsZ0JBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ2pCLGlCQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5QixpQkFBRyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7YUFDMUI7V0FDRjtTQUNGOztBQUVELFlBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUU7QUFDL0IsYUFBRyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDdkI7QUFDRCxZQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ3JCLGFBQUcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3BCO0FBQ0QsWUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2xCLGFBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1NBQ3RCO0FBQ0QsWUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO0FBQ3ZCLGFBQUcsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1NBQzNCO0FBQ0QsWUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUN2QixhQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztTQUNuQjs7QUFFRCxZQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2IsYUFBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQzs7QUFFNUMsY0FBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsRUFBQyxLQUFLLEVBQUUsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDO0FBQzVELGFBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUU5QixjQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDbkIsZUFBRyxHQUFHLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFDLENBQUMsQ0FBQztBQUMxRCxlQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztXQUN6QyxNQUFNO0FBQ0wsZUFBRyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztXQUN0QjtTQUNGLE1BQU07QUFDTCxhQUFHLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDcEM7O0FBRUQsZUFBTyxHQUFHLENBQUM7T0FDWixNQUFNO0FBQ0wsZUFBTyxFQUFFLENBQUM7T0FDWDtLQUNGOztBQUVELFlBQVEsRUFBRSxvQkFBVzs7O0FBR25CLFVBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3JCLFVBQUksQ0FBQyxNQUFNLEdBQUcsd0JBQVksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRCxVQUFJLENBQUMsVUFBVSxHQUFHLHdCQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDckQ7O0FBRUQseUJBQXFCLEVBQUUsK0JBQVMsUUFBUSxFQUFFO0FBQ3hDLFVBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQzs7QUFFekIsVUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4RCxVQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3JCLHVCQUFlLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDN0M7Ozs7Ozs7O0FBUUQsVUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLFdBQUssSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTs7QUFDOUIsWUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFL0IsWUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxFQUFFO0FBQ2xGLHlCQUFlLElBQUksU0FBUyxHQUFJLEVBQUUsVUFBVSxBQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUM1RCxjQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxVQUFVLENBQUM7U0FDekM7T0FDRjs7QUFFRCxVQUFJLE1BQU0sR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQzs7QUFFcEUsVUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDekMsY0FBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztPQUM1QjtBQUNELFVBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUNsQixjQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQ3ZCOzs7QUFHRCxVQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDOztBQUUvQyxVQUFJLFFBQVEsRUFBRTtBQUNaLGNBQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7O0FBRXBCLGVBQU8sUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7T0FDckMsTUFBTTtBQUNMLGVBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7T0FDbEY7S0FDRjtBQUNELGVBQVcsRUFBRSxxQkFBUyxlQUFlLEVBQUU7QUFDckMsVUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRO1VBQ3BDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXO1VBQzlCLFdBQVcsWUFBQTtVQUVYLFVBQVUsWUFBQTtVQUNWLFdBQVcsWUFBQTtVQUNYLFNBQVMsWUFBQSxDQUFDO0FBQ2QsVUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBQyxJQUFJLEVBQUs7QUFDekIsWUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO0FBQ3ZCLGNBQUksV0FBVyxFQUFFO0FBQ2YsZ0JBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7V0FDdEIsTUFBTTtBQUNMLHVCQUFXLEdBQUcsSUFBSSxDQUFDO1dBQ3BCO0FBQ0QsbUJBQVMsR0FBRyxJQUFJLENBQUM7U0FDbEIsTUFBTTtBQUNMLGNBQUksV0FBVyxFQUFFO0FBQ2YsZ0JBQUksQ0FBQyxVQUFVLEVBQUU7QUFDZix5QkFBVyxHQUFHLElBQUksQ0FBQzthQUNwQixNQUFNO0FBQ0wseUJBQVcsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbkM7QUFDRCxxQkFBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQix1QkFBVyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7V0FDckM7O0FBRUQsb0JBQVUsR0FBRyxJQUFJLENBQUM7QUFDbEIsY0FBSSxDQUFDLFFBQVEsRUFBRTtBQUNiLHNCQUFVLEdBQUcsS0FBSyxDQUFDO1dBQ3BCO1NBQ0Y7T0FDRixDQUFDLENBQUM7O0FBR0gsVUFBSSxVQUFVLEVBQUU7QUFDZCxZQUFJLFdBQVcsRUFBRTtBQUNmLHFCQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CLG1CQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUN0QixjQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNoQztPQUNGLE1BQU07QUFDTCx1QkFBZSxJQUFJLGFBQWEsSUFBSSxXQUFXLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBLEFBQUMsQ0FBQzs7QUFFaEYsWUFBSSxXQUFXLEVBQUU7QUFDZixxQkFBVyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3hDLG1CQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCLE1BQU07QUFDTCxjQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1NBQ3BDO09BQ0Y7O0FBRUQsVUFBSSxlQUFlLEVBQUU7QUFDbkIsWUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUEsQUFBQyxDQUFDLENBQUM7T0FDekY7O0FBRUQsYUFBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQzVCOzs7Ozs7Ozs7OztBQVdELGNBQVUsRUFBRSxvQkFBUyxJQUFJLEVBQUU7QUFDekIsVUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLDRCQUE0QixDQUFDO1VBQ2pFLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxVQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7O0FBRXRDLFVBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQyxZQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7O0FBRS9CLFVBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDekU7Ozs7Ozs7O0FBUUQsdUJBQW1CLEVBQUUsK0JBQVc7O0FBRTlCLFVBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQztVQUNqRSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsVUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFMUMsVUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDOztBQUVuQixVQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDOUIsWUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUU3QixVQUFJLENBQUMsVUFBVSxDQUFDLENBQ1osT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUM5QixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsRUFDOUUsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUNYOzs7Ozs7OztBQVFELGlCQUFhLEVBQUUsdUJBQVMsT0FBTyxFQUFFO0FBQy9CLFVBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUN2QixlQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7T0FDekMsTUFBTTtBQUNMLFlBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7T0FDcEQ7O0FBRUQsVUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7S0FDL0I7Ozs7Ozs7Ozs7O0FBV0QsVUFBTSxFQUFFLGtCQUFXO0FBQ2pCLFVBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFO0FBQ25CLFlBQUksQ0FBQyxZQUFZLENBQUMsVUFBQyxPQUFPO2lCQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUM7U0FBQSxDQUFDLENBQUM7O0FBRWxFLFlBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ3ZELE1BQU07QUFDTCxZQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDNUIsWUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BHLFlBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7QUFDN0IsY0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNoRjtPQUNGO0tBQ0Y7Ozs7Ozs7O0FBUUQsaUJBQWEsRUFBRSx5QkFBVztBQUN4QixVQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQy9CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2pGOzs7Ozs7Ozs7QUFTRCxjQUFVLEVBQUUsb0JBQVMsS0FBSyxFQUFFO0FBQzFCLFVBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0tBQzFCOzs7Ozs7OztBQVFELGVBQVcsRUFBRSx1QkFBVztBQUN0QixVQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztLQUMzRDs7Ozs7Ozs7O0FBU0QsbUJBQWUsRUFBRSx5QkFBUyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDdEQsVUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUVWLFVBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFOzs7QUFHdkQsWUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztPQUMzQyxNQUFNO0FBQ0wsWUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO09BQ3BCOztBQUVELFVBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3REOzs7Ozs7Ozs7QUFTRCxvQkFBZ0IsRUFBRSwwQkFBUyxZQUFZLEVBQUUsS0FBSyxFQUFFO0FBQzlDLFVBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDOztBQUUzQixVQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekUsVUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3ZDOzs7Ozs7OztBQVFELGNBQVUsRUFBRSxvQkFBUyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUN6QyxVQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YsWUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQy9CLE1BQU07QUFDTCxZQUFJLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDO09BQzlEOztBQUVELFVBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2xEOztBQUVELGVBQVcsRUFBRSxxQkFBUyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFOzs7OztBQUNuRCxVQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO0FBQ3JELFlBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUUsZUFBTztPQUNSOztBQUVELFVBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDdkIsYUFBTyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFOztBQUVuQixZQUFJLENBQUMsWUFBWSxDQUFDLFVBQUMsT0FBTyxFQUFLO0FBQzdCLGNBQUksTUFBTSxHQUFHLE1BQUssVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7OztBQUd0RCxjQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YsbUJBQU8sQ0FBQyxhQUFhLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztXQUNoRCxNQUFNOztBQUVMLG1CQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1dBQ3pCO1NBQ0YsQ0FBQyxDQUFDOztPQUVKO0tBQ0Y7Ozs7Ozs7OztBQVNELHlCQUFxQixFQUFFLGlDQUFXO0FBQ2hDLFVBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ3ZHOzs7Ozs7Ozs7O0FBVUQsbUJBQWUsRUFBRSx5QkFBUyxNQUFNLEVBQUUsSUFBSSxFQUFFO0FBQ3RDLFVBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNuQixVQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDOzs7O0FBSXRCLFVBQUksSUFBSSxLQUFLLGVBQWUsRUFBRTtBQUM1QixZQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtBQUM5QixjQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3pCLE1BQU07QUFDTCxjQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0I7T0FDRjtLQUNGOztBQUVELGFBQVMsRUFBRSxtQkFBUyxTQUFTLEVBQUU7QUFDN0IsVUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2pCLFlBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDakI7QUFDRCxVQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDckIsWUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQixZQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2pCO0FBQ0QsVUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDdkQ7QUFDRCxZQUFRLEVBQUUsb0JBQVc7QUFDbkIsVUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ2IsWUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzdCO0FBQ0QsVUFBSSxDQUFDLElBQUksR0FBRyxFQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUMsQ0FBQztLQUM1RDtBQUNELFdBQU8sRUFBRSxtQkFBVztBQUNsQixVQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3JCLFVBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7QUFFOUIsVUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ2pCLFlBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztPQUN6QztBQUNELFVBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNyQixZQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDN0MsWUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO09BQzNDOztBQUVELFVBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUM1Qzs7Ozs7Ozs7QUFRRCxjQUFVLEVBQUUsb0JBQVMsTUFBTSxFQUFFO0FBQzNCLFVBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDbEQ7Ozs7Ozs7Ozs7QUFVRCxlQUFXLEVBQUUscUJBQVMsS0FBSyxFQUFFO0FBQzNCLFVBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM5Qjs7Ozs7Ozs7OztBQVVELGVBQVcsRUFBRSxxQkFBUyxJQUFJLEVBQUU7QUFDMUIsVUFBSSxJQUFJLElBQUksSUFBSSxFQUFFO0FBQ2hCLFlBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztPQUNyRCxNQUFNO0FBQ0wsWUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7Ozs7Ozs7OztBQVNELHFCQUFpQixFQUFBLDJCQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUU7QUFDakMsVUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQztVQUNqRSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7O0FBRXBELFVBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQ25CLE9BQU8sRUFDUCxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFDdkYsU0FBUyxDQUNWLENBQUMsQ0FBQztLQUNKOzs7Ozs7Ozs7OztBQVdELGdCQUFZLEVBQUUsc0JBQVMsU0FBUyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDaEQsVUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRTtVQUMzQixNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDO1VBQzFDLE1BQU0sR0FBRyxRQUFRLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQzs7QUFFbkQsVUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzdDLFVBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUN4QixjQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQztPQUM5RDtBQUNELFlBQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRWpCLFVBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztLQUN4RTs7Ozs7Ozs7O0FBU0QscUJBQWlCLEVBQUUsMkJBQVMsU0FBUyxFQUFFLElBQUksRUFBRTtBQUMzQyxVQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvQyxVQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0tBQzdFOzs7Ozs7Ozs7Ozs7OztBQWNELG1CQUFlLEVBQUUseUJBQVMsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUMxQyxVQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztBQUUzQixVQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7O0FBRWhDLFVBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNqQixVQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7O0FBRW5ELFVBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDOztBQUU5RSxVQUFJLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDckUsVUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ3hCLGNBQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUM7QUFDekIsY0FBTSxDQUFDLElBQUksQ0FDVCxzQkFBc0IsRUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUN4QyxDQUFDO09BQ0g7O0FBRUQsVUFBSSxDQUFDLElBQUksQ0FBQyxDQUNOLEdBQUcsRUFBRSxNQUFNLEVBQ1YsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxFQUFHLElBQUksRUFDM0QscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxLQUFLLEVBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGFBQWEsQ0FDL0UsQ0FBQyxDQUFDO0tBQ0o7Ozs7Ozs7OztBQVNELGlCQUFhLEVBQUUsdUJBQVMsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7QUFDL0MsVUFBSSxNQUFNLEdBQUcsRUFBRTtVQUNYLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7O0FBRWhELFVBQUksU0FBUyxFQUFFO0FBQ2IsWUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2QixlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUM7T0FDckI7O0FBRUQsVUFBSSxNQUFNLEVBQUU7QUFDVixlQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDekM7QUFDRCxhQUFPLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUM1QixhQUFPLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztBQUM5QixhQUFPLENBQUMsVUFBVSxHQUFHLHNCQUFzQixDQUFDOztBQUU1QyxVQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2QsY0FBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztPQUM5RCxNQUFNO0FBQ0wsY0FBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0Qjs7QUFFRCxVQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ3ZCLGVBQU8sQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO09BQzNCO0FBQ0QsYUFBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdEMsWUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFFckIsVUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztLQUM1RTs7Ozs7Ozs7QUFRRCxnQkFBWSxFQUFFLHNCQUFTLEdBQUcsRUFBRTtBQUMxQixVQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFO1VBQ3ZCLE9BQU8sWUFBQTtVQUNQLElBQUksWUFBQTtVQUNKLEVBQUUsWUFBQSxDQUFDOztBQUVQLFVBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNqQixVQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO09BQ3RCO0FBQ0QsVUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ3JCLFlBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdkIsZUFBTyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztPQUMzQjs7QUFFRCxVQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3JCLFVBQUksT0FBTyxFQUFFO0FBQ1gsWUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7T0FDOUI7QUFDRCxVQUFJLElBQUksRUFBRTtBQUNSLFlBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO09BQ3hCO0FBQ0QsVUFBSSxFQUFFLEVBQUU7QUFDTixZQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztPQUNwQjtBQUNELFVBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0tBQzFCOztBQUVELFVBQU0sRUFBRSxnQkFBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxVQUFJLElBQUksS0FBSyxZQUFZLEVBQUU7QUFDekIsWUFBSSxDQUFDLGdCQUFnQixDQUNqQixjQUFjLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUNqRCxLQUFLLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQSxBQUFDLENBQUMsQ0FBQztPQUMzRCxNQUFNLElBQUksSUFBSSxLQUFLLGdCQUFnQixFQUFFO0FBQ3BDLFlBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDdkIsTUFBTSxJQUFJLElBQUksS0FBSyxlQUFlLEVBQUU7QUFDbkMsWUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQy9CLE1BQU07QUFDTCxZQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDL0I7S0FDRjs7OztBQUlELFlBQVEsRUFBRSxrQkFBa0I7O0FBRTVCLG1CQUFlLEVBQUUseUJBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUM5QyxVQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUTtVQUFFLEtBQUssWUFBQTtVQUFFLFFBQVEsWUFBQSxDQUFDOztBQUVyRCxXQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQy9DLGFBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsZ0JBQVEsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQzs7QUFFL0IsWUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVoRCxZQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUU7QUFDcEIsY0FBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9CLGNBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUN6QyxlQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNwQixlQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDL0IsY0FBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztBQUNyRCxjQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRXpDLGNBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDO0FBQ3RELGNBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsSUFBSSxRQUFRLENBQUMsY0FBYyxDQUFDO0FBQ3JFLGVBQUssQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUNqQyxlQUFLLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDNUMsTUFBTTtBQUNMLGVBQUssQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztBQUM3QixlQUFLLENBQUMsSUFBSSxHQUFHLFNBQVMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDOztBQUV4QyxjQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQztBQUN0RCxjQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLElBQUksUUFBUSxDQUFDLGNBQWMsQ0FBQztTQUN0RTtPQUNGO0tBQ0Y7QUFDRCx3QkFBb0IsRUFBRSw4QkFBUyxLQUFLLEVBQUU7QUFDcEMsV0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BFLFlBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFlBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDNUMsaUJBQU8sV0FBVyxDQUFDO1NBQ3BCO09BQ0Y7S0FDRjs7QUFFRCxxQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsVUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1VBQ3ZDLGFBQWEsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQzs7QUFFN0QsVUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDekMscUJBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7T0FDbkM7QUFDRCxVQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDbEIscUJBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7T0FDOUI7O0FBRUQsYUFBTyxvQkFBb0IsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUM5RDs7QUFFRCxlQUFXLEVBQUUscUJBQVMsSUFBSSxFQUFFO0FBQzFCLFVBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFlBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUNoQztLQUNGOztBQUVELFFBQUksRUFBRSxjQUFTLElBQUksRUFBRTtBQUNuQixVQUFJLEVBQUUsSUFBSSxZQUFZLE9BQU8sQ0FBQSxBQUFDLEVBQUU7QUFDOUIsWUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQy9COztBQUVELFVBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLGFBQU8sSUFBSSxDQUFDO0tBQ2I7O0FBRUQsb0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFVBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUM5Qjs7QUFFRCxjQUFVLEVBQUUsb0JBQVMsTUFBTSxFQUFFO0FBQzNCLFVBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUN2QixZQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDWixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUM5RixZQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztPQUNqQzs7QUFFRCxVQUFJLE1BQU0sRUFBRTtBQUNWLFlBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQzFCO0tBQ0Y7O0FBRUQsZ0JBQVksRUFBRSxzQkFBUyxRQUFRLEVBQUU7QUFDL0IsVUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUM7VUFDZCxLQUFLLFlBQUE7VUFDTCxZQUFZLFlBQUE7VUFDWixXQUFXLFlBQUEsQ0FBQzs7O0FBR2hCLFVBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUU7QUFDcEIsY0FBTSwwQkFBYyw0QkFBNEIsQ0FBQyxDQUFDO09BQ25EOzs7QUFHRCxVQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUU5QixVQUFJLEdBQUcsWUFBWSxPQUFPLEVBQUU7O0FBRTFCLGFBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQixjQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdEIsbUJBQVcsR0FBRyxJQUFJLENBQUM7T0FDcEIsTUFBTTs7QUFFTCxvQkFBWSxHQUFHLElBQUksQ0FBQztBQUNwQixZQUFJLEtBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7O0FBRTVCLGNBQU0sR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbEQsYUFBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztPQUN6Qjs7QUFFRCxVQUFJLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs7QUFFdEMsVUFBSSxDQUFDLFdBQVcsRUFBRTtBQUNoQixZQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7T0FDakI7QUFDRCxVQUFJLFlBQVksRUFBRTtBQUNoQixZQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7T0FDbEI7QUFDRCxVQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDckM7O0FBRUQsYUFBUyxFQUFFLHFCQUFXO0FBQ3BCLFVBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNqQixVQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7QUFBRSxZQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO09BQUU7QUFDOUYsYUFBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7S0FDNUI7QUFDRCxnQkFBWSxFQUFFLHdCQUFXO0FBQ3ZCLGFBQU8sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7S0FDakM7QUFDRCxlQUFXLEVBQUUsdUJBQVc7QUFDdEIsVUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUNuQyxVQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUN0QixXQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RELFlBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFM0IsWUFBSSxLQUFLLFlBQVksT0FBTyxFQUFFO0FBQzVCLGNBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CLE1BQU07QUFDTCxjQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDN0IsY0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUMsY0FBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7T0FDRjtLQUNGO0FBQ0QsWUFBUSxFQUFFLG9CQUFXO0FBQ25CLGFBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7S0FDaEM7O0FBRUQsWUFBUSxFQUFFLGtCQUFTLE9BQU8sRUFBRTtBQUMxQixVQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFO1VBQ3hCLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUEsQ0FBRSxHQUFHLEVBQUUsQ0FBQzs7QUFFakUsVUFBSSxDQUFDLE9BQU8sSUFBSyxJQUFJLFlBQVksT0FBTyxBQUFDLEVBQUU7QUFDekMsZUFBTyxJQUFJLENBQUMsS0FBSyxDQUFDO09BQ25CLE1BQU07QUFDTCxZQUFJLENBQUMsTUFBTSxFQUFFOztBQUVYLGNBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ25CLGtCQUFNLDBCQUFjLG1CQUFtQixDQUFDLENBQUM7V0FDMUM7QUFDRCxjQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDbEI7QUFDRCxlQUFPLElBQUksQ0FBQztPQUNiO0tBQ0Y7O0FBRUQsWUFBUSxFQUFFLG9CQUFXO0FBQ25CLFVBQUksS0FBSyxHQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLEFBQUM7VUFDaEUsSUFBSSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOzs7QUFHbkMsVUFBSSxJQUFJLFlBQVksT0FBTyxFQUFFO0FBQzNCLGVBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztPQUNuQixNQUFNO0FBQ0wsZUFBTyxJQUFJLENBQUM7T0FDYjtLQUNGOztBQUVELGVBQVcsRUFBRSxxQkFBUyxPQUFPLEVBQUU7QUFDN0IsVUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sRUFBRTtBQUM3QixlQUFPLFNBQVMsR0FBRyxPQUFPLEdBQUcsR0FBRyxDQUFDO09BQ2xDLE1BQU07QUFDTCxlQUFPLE9BQU8sR0FBRyxPQUFPLENBQUM7T0FDMUI7S0FDRjs7QUFFRCxnQkFBWSxFQUFFLHNCQUFTLEdBQUcsRUFBRTtBQUMxQixhQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3RDOztBQUVELGlCQUFhLEVBQUUsdUJBQVMsR0FBRyxFQUFFO0FBQzNCLGFBQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDdkM7O0FBRUQsYUFBUyxFQUFFLG1CQUFTLElBQUksRUFBRTtBQUN4QixVQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdCLFVBQUksR0FBRyxFQUFFO0FBQ1AsV0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3JCLGVBQU8sR0FBRyxDQUFDO09BQ1o7O0FBRUQsU0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEQsU0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDckIsU0FBRyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7O0FBRXZCLGFBQU8sR0FBRyxDQUFDO0tBQ1o7O0FBRUQsZUFBVyxFQUFFLHFCQUFTLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ2xELFVBQUksTUFBTSxHQUFHLEVBQUU7VUFDWCxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM1RSxVQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDO1VBQ3hELFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLG1CQUFjLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVEsQ0FBQzs7QUFFakcsYUFBTztBQUNMLGNBQU0sRUFBRSxNQUFNO0FBQ2Qsa0JBQVUsRUFBRSxVQUFVO0FBQ3RCLFlBQUksRUFBRSxXQUFXO0FBQ2pCLGtCQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO09BQ3pDLENBQUM7S0FDSDs7QUFFRCxlQUFXLEVBQUUscUJBQVMsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7QUFDL0MsVUFBSSxPQUFPLEdBQUcsRUFBRTtVQUNaLFFBQVEsR0FBRyxFQUFFO1VBQ2IsS0FBSyxHQUFHLEVBQUU7VUFDVixHQUFHLEdBQUcsRUFBRTtVQUNSLFVBQVUsR0FBRyxDQUFDLE1BQU07VUFDcEIsS0FBSyxZQUFBLENBQUM7O0FBRVYsVUFBSSxVQUFVLEVBQUU7QUFDZCxjQUFNLEdBQUcsRUFBRSxDQUFDO09BQ2I7O0FBRUQsYUFBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLGFBQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDOztBQUUvQixVQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDakIsZUFBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7T0FDbkM7QUFDRCxVQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDckIsZUFBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDcEMsZUFBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7T0FDeEM7O0FBRUQsVUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRTtVQUN6QixPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDOzs7O0FBSTlCLFVBQUksT0FBTyxJQUFJLE9BQU8sRUFBRTtBQUN0QixlQUFPLENBQUMsRUFBRSxHQUFHLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQztBQUN6QyxlQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQztPQUMvQzs7OztBQUlELFVBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQztBQUNsQixhQUFPLENBQUMsRUFBRSxFQUFFO0FBQ1YsYUFBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixjQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDOztBQUVsQixZQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDakIsYUFBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMxQjtBQUNELFlBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUNyQixlQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQzNCLGtCQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQy9CO09BQ0Y7O0FBRUQsVUFBSSxVQUFVLEVBQUU7QUFDZCxlQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO09BQ2xEOztBQUVELFVBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNqQixlQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO09BQzlDO0FBQ0QsVUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ3JCLGVBQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakQsZUFBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztPQUN4RDs7QUFFRCxVQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ3JCLGVBQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO09BQ3ZCO0FBQ0QsVUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO0FBQ3ZCLGVBQU8sQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDO09BQ3JDO0FBQ0QsYUFBTyxPQUFPLENBQUM7S0FDaEI7O0FBRUQsbUJBQWUsRUFBRSx5QkFBUyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUU7QUFDaEUsVUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFELGFBQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3RDLFVBQUksV0FBVyxFQUFFO0FBQ2YsWUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1QixjQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZCLGVBQU8sQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7T0FDOUIsTUFBTSxJQUFJLE1BQU0sRUFBRTtBQUNqQixjQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JCLGVBQU8sRUFBRSxDQUFDO09BQ1gsTUFBTTtBQUNMLGVBQU8sT0FBTyxDQUFDO09BQ2hCO0tBQ0Y7R0FDRixDQUFDOztBQUdGLEFBQUMsR0FBQSxZQUFXO0FBQ1YsUUFBTSxhQUFhLEdBQUcsQ0FDcEIsb0JBQW9CLEdBQ3BCLDJCQUEyQixHQUMzQix5QkFBeUIsR0FDekIsOEJBQThCLEdBQzlCLG1CQUFtQixHQUNuQixnQkFBZ0IsR0FDaEIsdUJBQXVCLEdBQ3ZCLDBCQUEwQixHQUMxQixrQ0FBa0MsR0FDbEMsMEJBQTBCLEdBQzFCLGlDQUFpQyxHQUNqQyw2QkFBNkIsR0FDN0IsK0JBQStCLEdBQy9CLHlDQUF5QyxHQUN6Qyx1Q0FBdUMsR0FDdkMsa0JBQWtCLENBQUEsQ0FDbEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUViLFFBQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7O0FBRTdELFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDcEQsbUJBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7S0FDeEM7R0FDRixDQUFBLEVBQUUsQ0FBRTs7QUFFTCxvQkFBa0IsQ0FBQyw2QkFBNkIsR0FBRyxVQUFTLElBQUksRUFBRTtBQUNoRSxXQUFPLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEFBQUMsNEJBQTRCLENBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzlGLENBQUM7O0FBRUYsV0FBUyxZQUFZLENBQUMsZUFBZSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQzVELFFBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUU7UUFDM0IsQ0FBQyxHQUFHLENBQUM7UUFDTCxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN2QixRQUFJLGVBQWUsRUFBRTtBQUNuQixTQUFHLEVBQUUsQ0FBQztLQUNQOztBQUVELFdBQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQixXQUFLLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksZUFBZSxFQUFFO0FBQ25CLGFBQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUN6RyxNQUFNO0FBQ0wsYUFBTyxLQUFLLENBQUM7S0FDZDtHQUNGOzttQkFFYyxrQkFBa0IiLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENPTVBJTEVSX1JFVklTSU9OLCBSRVZJU0lPTl9DSEFOR0VTIH0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5pbXBvcnQge2lzQXJyYXl9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBDb2RlR2VuIGZyb20gJy4vY29kZS1nZW4nO1xuXG5mdW5jdGlvbiBMaXRlcmFsKHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gSmF2YVNjcmlwdENvbXBpbGVyKCkge31cblxuSmF2YVNjcmlwdENvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgLy8gUFVCTElDIEFQSTogWW91IGNhbiBvdmVycmlkZSB0aGVzZSBtZXRob2RzIGluIGEgc3ViY2xhc3MgdG8gcHJvdmlkZVxuICAvLyBhbHRlcm5hdGl2ZSBjb21waWxlZCBmb3JtcyBmb3IgbmFtZSBsb29rdXAgYW5kIGJ1ZmZlcmluZyBzZW1hbnRpY3NcbiAgbmFtZUxvb2t1cDogZnVuY3Rpb24ocGFyZW50LCBuYW1lLyogLCB0eXBlKi8pIHtcbiAgICBpZiAoSmF2YVNjcmlwdENvbXBpbGVyLmlzVmFsaWRKYXZhU2NyaXB0VmFyaWFibGVOYW1lKG5hbWUpKSB7XG4gICAgICByZXR1cm4gW3BhcmVudCwgJy4nLCBuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtwYXJlbnQsICdbJywgSlNPTi5zdHJpbmdpZnkobmFtZSksICddJ107XG4gICAgfVxuICB9LFxuICBkZXB0aGVkTG9va3VwOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIFt0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxvb2t1cCcpLCAnKGRlcHRocywgXCInLCBuYW1lLCAnXCIpJ107XG4gIH0sXG5cbiAgY29tcGlsZXJJbmZvOiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCByZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OLFxuICAgICAgICAgIHZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tyZXZpc2lvbl07XG4gICAgcmV0dXJuIFtyZXZpc2lvbiwgdmVyc2lvbnNdO1xuICB9LFxuXG4gIGFwcGVuZFRvQnVmZmVyOiBmdW5jdGlvbihzb3VyY2UsIGxvY2F0aW9uLCBleHBsaWNpdCkge1xuICAgIC8vIEZvcmNlIGEgc291cmNlIGFzIHRoaXMgc2ltcGxpZmllcyB0aGUgbWVyZ2UgbG9naWMuXG4gICAgaWYgKCFpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHNvdXJjZSA9IFtzb3VyY2VdO1xuICAgIH1cbiAgICBzb3VyY2UgPSB0aGlzLnNvdXJjZS53cmFwKHNvdXJjZSwgbG9jYXRpb24pO1xuXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUpIHtcbiAgICAgIHJldHVybiBbJ3JldHVybiAnLCBzb3VyY2UsICc7J107XG4gICAgfSBlbHNlIGlmIChleHBsaWNpdCkge1xuICAgICAgLy8gVGhpcyBpcyBhIGNhc2Ugd2hlcmUgdGhlIGJ1ZmZlciBvcGVyYXRpb24gb2NjdXJzIGFzIGEgY2hpbGQgb2YgYW5vdGhlclxuICAgICAgLy8gY29uc3RydWN0LCBnZW5lcmFsbHkgYnJhY2VzLiBXZSBoYXZlIHRvIGV4cGxpY2l0bHkgb3V0cHV0IHRoZXNlIGJ1ZmZlclxuICAgICAgLy8gb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhhdCB0aGUgZW1pdHRlZCBjb2RlIGdvZXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uXG4gICAgICByZXR1cm4gWydidWZmZXIgKz0gJywgc291cmNlLCAnOyddO1xuICAgIH0gZWxzZSB7XG4gICAgICBzb3VyY2UuYXBwZW5kVG9CdWZmZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG4gIH0sXG5cbiAgaW5pdGlhbGl6ZUJ1ZmZlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVvdGVkU3RyaW5nKCcnKTtcbiAgfSxcbiAgLy8gRU5EIFBVQkxJQyBBUElcblxuICBjb21waWxlOiBmdW5jdGlvbihlbnZpcm9ubWVudCwgb3B0aW9ucywgY29udGV4dCwgYXNPYmplY3QpIHtcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN0cmluZ1BhcmFtcyA9IHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXM7XG4gICAgdGhpcy50cmFja0lkcyA9IHRoaXMub3B0aW9ucy50cmFja0lkcztcbiAgICB0aGlzLnByZWNvbXBpbGUgPSAhYXNPYmplY3Q7XG5cbiAgICB0aGlzLm5hbWUgPSB0aGlzLmVudmlyb25tZW50Lm5hbWU7XG4gICAgdGhpcy5pc0NoaWxkID0gISFjb250ZXh0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQgfHwge1xuICAgICAgZGVjb3JhdG9yczogW10sXG4gICAgICBwcm9ncmFtczogW10sXG4gICAgICBlbnZpcm9ubWVudHM6IFtdXG4gICAgfTtcblxuICAgIHRoaXMucHJlYW1ibGUoKTtcblxuICAgIHRoaXMuc3RhY2tTbG90ID0gMDtcbiAgICB0aGlzLnN0YWNrVmFycyA9IFtdO1xuICAgIHRoaXMuYWxpYXNlcyA9IHt9O1xuICAgIHRoaXMucmVnaXN0ZXJzID0geyBsaXN0OiBbXSB9O1xuICAgIHRoaXMuaGFzaGVzID0gW107XG4gICAgdGhpcy5jb21waWxlU3RhY2sgPSBbXTtcbiAgICB0aGlzLmlubGluZVN0YWNrID0gW107XG4gICAgdGhpcy5ibG9ja1BhcmFtcyA9IFtdO1xuXG4gICAgdGhpcy5jb21waWxlQ2hpbGRyZW4oZW52aXJvbm1lbnQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBlbnZpcm9ubWVudC51c2VEZXB0aHMgfHwgZW52aXJvbm1lbnQudXNlRGVjb3JhdG9ycyB8fCB0aGlzLm9wdGlvbnMuY29tcGF0O1xuICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGVudmlyb25tZW50LnVzZUJsb2NrUGFyYW1zO1xuXG4gICAgbGV0IG9wY29kZXMgPSBlbnZpcm9ubWVudC5vcGNvZGVzLFxuICAgICAgICBvcGNvZGUsXG4gICAgICAgIGZpcnN0TG9jLFxuICAgICAgICBpLFxuICAgICAgICBsO1xuXG4gICAgZm9yIChpID0gMCwgbCA9IG9wY29kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBvcGNvZGUgPSBvcGNvZGVzW2ldO1xuXG4gICAgICB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb24gPSBvcGNvZGUubG9jO1xuICAgICAgZmlyc3RMb2MgPSBmaXJzdExvYyB8fCBvcGNvZGUubG9jO1xuICAgICAgdGhpc1tvcGNvZGUub3Bjb2RlXS5hcHBseSh0aGlzLCBvcGNvZGUuYXJncyk7XG4gICAgfVxuXG4gICAgLy8gRmx1c2ggYW55IHRyYWlsaW5nIGNvbnRlbnQgdGhhdCBtaWdodCBiZSBwZW5kaW5nLlxuICAgIHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiA9IGZpcnN0TG9jO1xuICAgIHRoaXMucHVzaFNvdXJjZSgnJyk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLnN0YWNrU2xvdCB8fCB0aGlzLmlubGluZVN0YWNrLmxlbmd0aCB8fCB0aGlzLmNvbXBpbGVTdGFjay5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0NvbXBpbGUgY29tcGxldGVkIHdpdGggY29udGVudCBsZWZ0IG9uIHN0YWNrJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRlY29yYXRvcnMuaXNFbXB0eSgpKSB7XG4gICAgICB0aGlzLnVzZURlY29yYXRvcnMgPSB0cnVlO1xuXG4gICAgICB0aGlzLmRlY29yYXRvcnMucHJlcGVuZCgndmFyIGRlY29yYXRvcnMgPSBjb250YWluZXIuZGVjb3JhdG9ycztcXG4nKTtcbiAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCdyZXR1cm4gZm47Jyk7XG5cbiAgICAgIGlmIChhc09iamVjdCkge1xuICAgICAgICB0aGlzLmRlY29yYXRvcnMgPSBGdW5jdGlvbi5hcHBseSh0aGlzLCBbJ2ZuJywgJ3Byb3BzJywgJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnZGF0YScsICdibG9ja1BhcmFtcycsICdkZXB0aHMnLCB0aGlzLmRlY29yYXRvcnMubWVyZ2UoKV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoJ2Z1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBkZXB0aDAsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcXG4nKTtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzLnB1c2goJ31cXG4nKTtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzID0gdGhpcy5kZWNvcmF0b3JzLm1lcmdlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9ycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsZXQgZm4gPSB0aGlzLmNyZWF0ZUZ1bmN0aW9uQ29udGV4dChhc09iamVjdCk7XG4gICAgaWYgKCF0aGlzLmlzQ2hpbGQpIHtcbiAgICAgIGxldCByZXQgPSB7XG4gICAgICAgIGNvbXBpbGVyOiB0aGlzLmNvbXBpbGVySW5mbygpLFxuICAgICAgICBtYWluOiBmblxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuZGVjb3JhdG9ycykge1xuICAgICAgICByZXQubWFpbl9kID0gdGhpcy5kZWNvcmF0b3JzOyAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgICAgIHJldC51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHtwcm9ncmFtcywgZGVjb3JhdG9yc30gPSB0aGlzLmNvbnRleHQ7XG4gICAgICBmb3IgKGkgPSAwLCBsID0gcHJvZ3JhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChwcm9ncmFtc1tpXSkge1xuICAgICAgICAgIHJldFtpXSA9IHByb2dyYW1zW2ldO1xuICAgICAgICAgIGlmIChkZWNvcmF0b3JzW2ldKSB7XG4gICAgICAgICAgICByZXRbaSArICdfZCddID0gZGVjb3JhdG9yc1tpXTtcbiAgICAgICAgICAgIHJldC51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQudXNlUGFydGlhbCkge1xuICAgICAgICByZXQudXNlUGFydGlhbCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRhdGEpIHtcbiAgICAgICAgcmV0LnVzZURhdGEgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudXNlRGVwdGhzKSB7XG4gICAgICAgIHJldC51c2VEZXB0aHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudXNlQmxvY2tQYXJhbXMpIHtcbiAgICAgICAgcmV0LnVzZUJsb2NrUGFyYW1zID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0KSB7XG4gICAgICAgIHJldC5jb21wYXQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFzT2JqZWN0KSB7XG4gICAgICAgIHJldC5jb21waWxlciA9IEpTT04uc3RyaW5naWZ5KHJldC5jb21waWxlcik7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uID0ge3N0YXJ0OiB7bGluZTogMSwgY29sdW1uOiAwfX07XG4gICAgICAgIHJldCA9IHRoaXMub2JqZWN0TGl0ZXJhbChyZXQpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNyY05hbWUpIHtcbiAgICAgICAgICByZXQgPSByZXQudG9TdHJpbmdXaXRoU291cmNlTWFwKHtmaWxlOiBvcHRpb25zLmRlc3ROYW1lfSk7XG4gICAgICAgICAgcmV0Lm1hcCA9IHJldC5tYXAgJiYgcmV0Lm1hcC50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldCA9IHJldC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQuY29tcGlsZXJPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm47XG4gICAgfVxuICB9LFxuXG4gIHByZWFtYmxlOiBmdW5jdGlvbigpIHtcbiAgICAvLyB0cmFjayB0aGUgbGFzdCBjb250ZXh0IHB1c2hlZCBpbnRvIHBsYWNlIHRvIGFsbG93IHNraXBwaW5nIHRoZVxuICAgIC8vIGdldENvbnRleHQgb3Bjb2RlIHdoZW4gaXQgd291bGQgYmUgYSBub29wXG4gICAgdGhpcy5sYXN0Q29udGV4dCA9IDA7XG4gICAgdGhpcy5zb3VyY2UgPSBuZXcgQ29kZUdlbih0aGlzLm9wdGlvbnMuc3JjTmFtZSk7XG4gICAgdGhpcy5kZWNvcmF0b3JzID0gbmV3IENvZGVHZW4odGhpcy5vcHRpb25zLnNyY05hbWUpO1xuICB9LFxuXG4gIGNyZWF0ZUZ1bmN0aW9uQ29udGV4dDogZnVuY3Rpb24oYXNPYmplY3QpIHtcbiAgICBsZXQgdmFyRGVjbGFyYXRpb25zID0gJyc7XG5cbiAgICBsZXQgbG9jYWxzID0gdGhpcy5zdGFja1ZhcnMuY29uY2F0KHRoaXMucmVnaXN0ZXJzLmxpc3QpO1xuICAgIGlmIChsb2NhbHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsICcgKyBsb2NhbHMuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBtaW5pbWl6ZXIgYWxpYXMgbWFwcGluZ3NcbiAgICAvL1xuICAgIC8vIFdoZW4gdXNpbmcgdHJ1ZSBTb3VyY2VOb2RlcywgdGhpcyB3aWxsIHVwZGF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgZ2l2ZW4gYWxpYXNcbiAgICAvLyBhcyB0aGUgc291cmNlIG5vZGVzIGFyZSByZXVzZWQgaW4gc2l0dS4gRm9yIHRoZSBub24tc291cmNlIG5vZGUgY29tcGlsYXRpb24gbW9kZSxcbiAgICAvLyBhbGlhc2VzIHdpbGwgbm90IGJlIHVzZWQsIGJ1dCB0aGlzIGNhc2UgaXMgYWxyZWFkeSBiZWluZyBydW4gb24gdGhlIGNsaWVudCBhbmRcbiAgICAvLyB3ZSBhcmVuJ3QgY29uY2VybiBhYm91dCBtaW5pbWl6aW5nIHRoZSB0ZW1wbGF0ZSBzaXplLlxuICAgIGxldCBhbGlhc0NvdW50ID0gMDtcbiAgICBmb3IgKGxldCBhbGlhcyBpbiB0aGlzLmFsaWFzZXMpIHsgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBndWFyZC1mb3ItaW5cbiAgICAgIGxldCBub2RlID0gdGhpcy5hbGlhc2VzW2FsaWFzXTtcblxuICAgICAgaWYgKHRoaXMuYWxpYXNlcy5oYXNPd25Qcm9wZXJ0eShhbGlhcykgJiYgbm9kZS5jaGlsZHJlbiAmJiBub2RlLnJlZmVyZW5jZUNvdW50ID4gMSkge1xuICAgICAgICB2YXJEZWNsYXJhdGlvbnMgKz0gJywgYWxpYXMnICsgKCsrYWxpYXNDb3VudCkgKyAnPScgKyBhbGlhcztcbiAgICAgICAgbm9kZS5jaGlsZHJlblswXSA9ICdhbGlhcycgKyBhbGlhc0NvdW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBbJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnaGVscGVycycsICdwYXJ0aWFscycsICdkYXRhJ107XG5cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2RlcHRocycpO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBvdXRwdXQgdG8gbWVyZ2UgY29udGVudCB3aGVuIHBvc3NpYmxlXG4gICAgbGV0IHNvdXJjZSA9IHRoaXMubWVyZ2VTb3VyY2UodmFyRGVjbGFyYXRpb25zKTtcblxuICAgIGlmIChhc09iamVjdCkge1xuICAgICAgcGFyYW1zLnB1c2goc291cmNlKTtcblxuICAgICAgcmV0dXJuIEZ1bmN0aW9uLmFwcGx5KHRoaXMsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZS53cmFwKFsnZnVuY3Rpb24oJywgcGFyYW1zLmpvaW4oJywnKSwgJykge1xcbiAgJywgc291cmNlLCAnfSddKTtcbiAgICB9XG4gIH0sXG4gIG1lcmdlU291cmNlOiBmdW5jdGlvbih2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICBsZXQgaXNTaW1wbGUgPSB0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlLFxuICAgICAgICBhcHBlbmRPbmx5ID0gIXRoaXMuZm9yY2VCdWZmZXIsXG4gICAgICAgIGFwcGVuZEZpcnN0LFxuXG4gICAgICAgIHNvdXJjZVNlZW4sXG4gICAgICAgIGJ1ZmZlclN0YXJ0LFxuICAgICAgICBidWZmZXJFbmQ7XG4gICAgdGhpcy5zb3VyY2UuZWFjaCgobGluZSkgPT4ge1xuICAgICAgaWYgKGxpbmUuYXBwZW5kVG9CdWZmZXIpIHtcbiAgICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgICAgbGluZS5wcmVwZW5kKCcgICsgJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmZmVyU3RhcnQgPSBsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGJ1ZmZlckVuZCA9IGxpbmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgICBpZiAoIXNvdXJjZVNlZW4pIHtcbiAgICAgICAgICAgIGFwcGVuZEZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgnYnVmZmVyICs9ICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICAgICAgYnVmZmVyU3RhcnQgPSBidWZmZXJFbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VTZWVuID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFpc1NpbXBsZSkge1xuICAgICAgICAgIGFwcGVuZE9ubHkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG5cbiAgICBpZiAoYXBwZW5kT25seSkge1xuICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ3JldHVybiAnKTtcbiAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpO1xuICAgICAgfSBlbHNlIGlmICghc291cmNlU2Vlbikge1xuICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKCdyZXR1cm4gXCJcIjsnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsIGJ1ZmZlciA9ICcgKyAoYXBwZW5kRmlyc3QgPyAnJyA6IHRoaXMuaW5pdGlhbGl6ZUJ1ZmZlcigpKTtcblxuICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ3JldHVybiBidWZmZXIgKyAnKTtcbiAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucHVzaCgncmV0dXJuIGJ1ZmZlcjsnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFyRGVjbGFyYXRpb25zKSB7XG4gICAgICB0aGlzLnNvdXJjZS5wcmVwZW5kKCd2YXIgJyArIHZhckRlY2xhcmF0aW9ucy5zdWJzdHJpbmcoMikgKyAoYXBwZW5kRmlyc3QgPyAnJyA6ICc7XFxuJykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNvdXJjZS5tZXJnZSgpO1xuICB9LFxuXG4gIC8vIFtibG9ja1ZhbHVlXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCB2YWx1ZVxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJldHVybiB2YWx1ZSBvZiBibG9ja0hlbHBlck1pc3NpbmdcbiAgLy9cbiAgLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBvcGNvZGUgaXMgdG8gdGFrZSBhIGJsb2NrIG9mIHRoZSBmb3JtXG4gIC8vIGB7eyN0aGlzLmZvb319Li4ue3svdGhpcy5mb299fWAsIHJlc29sdmUgdGhlIHZhbHVlIG9mIGBmb29gLCBhbmRcbiAgLy8gcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgd2l0aCB0aGUgcmVzdWx0IG9mIHByb3Blcmx5XG4gIC8vIGludm9raW5nIGJsb2NrSGVscGVyTWlzc2luZy5cbiAgYmxvY2tWYWx1ZTogZnVuY3Rpb24obmFtZSkge1xuICAgIGxldCBibG9ja0hlbHBlck1pc3NpbmcgPSB0aGlzLmFsaWFzYWJsZSgnaGVscGVycy5ibG9ja0hlbHBlck1pc3NpbmcnKSxcbiAgICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldO1xuICAgIHRoaXMuc2V0dXBIZWxwZXJBcmdzKG5hbWUsIDAsIHBhcmFtcyk7XG5cbiAgICBsZXQgYmxvY2tOYW1lID0gdGhpcy5wb3BTdGFjaygpO1xuICAgIHBhcmFtcy5zcGxpY2UoMSwgMCwgYmxvY2tOYW1lKTtcblxuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoYmxvY2tIZWxwZXJNaXNzaW5nLCAnY2FsbCcsIHBhcmFtcykpO1xuICB9LFxuXG4gIC8vIFthbWJpZ3VvdXNCbG9ja1ZhbHVlXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCB2YWx1ZVxuICAvLyBDb21waWxlciB2YWx1ZSwgYmVmb3JlOiBsYXN0SGVscGVyPXZhbHVlIG9mIGxhc3QgZm91bmQgaGVscGVyLCBpZiBhbnlcbiAgLy8gT24gc3RhY2ssIGFmdGVyLCBpZiBubyBsYXN0SGVscGVyOiBzYW1lIGFzIFtibG9ja1ZhbHVlXVxuICAvLyBPbiBzdGFjaywgYWZ0ZXIsIGlmIGxhc3RIZWxwZXI6IHZhbHVlXG4gIGFtYmlndW91c0Jsb2NrVmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgIC8vIFdlJ3JlIGJlaW5nIGEgYml0IGNoZWVreSBhbmQgcmV1c2luZyB0aGUgb3B0aW9ucyB2YWx1ZSBmcm9tIHRoZSBwcmlvciBleGVjXG4gICAgbGV0IGJsb2NrSGVscGVyTWlzc2luZyA9IHRoaXMuYWxpYXNhYmxlKCdoZWxwZXJzLmJsb2NrSGVscGVyTWlzc2luZycpLFxuICAgICAgICBwYXJhbXMgPSBbdGhpcy5jb250ZXh0TmFtZSgwKV07XG4gICAgdGhpcy5zZXR1cEhlbHBlckFyZ3MoJycsIDAsIHBhcmFtcywgdHJ1ZSk7XG5cbiAgICB0aGlzLmZsdXNoSW5saW5lKCk7XG5cbiAgICBsZXQgY3VycmVudCA9IHRoaXMudG9wU3RhY2soKTtcbiAgICBwYXJhbXMuc3BsaWNlKDEsIDAsIGN1cnJlbnQpO1xuXG4gICAgdGhpcy5wdXNoU291cmNlKFtcbiAgICAgICAgJ2lmICghJywgdGhpcy5sYXN0SGVscGVyLCAnKSB7ICcsXG4gICAgICAgICAgY3VycmVudCwgJyA9ICcsIHRoaXMuc291cmNlLmZ1bmN0aW9uQ2FsbChibG9ja0hlbHBlck1pc3NpbmcsICdjYWxsJywgcGFyYW1zKSxcbiAgICAgICAgJ30nXSk7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZENvbnRlbnRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBBcHBlbmRzIHRoZSBzdHJpbmcgdmFsdWUgb2YgYGNvbnRlbnRgIHRvIHRoZSBjdXJyZW50IGJ1ZmZlclxuICBhcHBlbmRDb250ZW50OiBmdW5jdGlvbihjb250ZW50KSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnBlbmRpbmdDb250ZW50ICsgY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb24gPSB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IGNvbnRlbnQ7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8gYSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLlxuICAvL1xuICAvLyBJZiBgdmFsdWVgIGlzIHRydXRoeSwgb3IgMCwgaXQgaXMgY29lcmNlZCBpbnRvIGEgc3RyaW5nIGFuZCBhcHBlbmRlZFxuICAvLyBPdGhlcndpc2UsIHRoZSBlbXB0eSBzdHJpbmcgaXMgYXBwZW5kZWRcbiAgYXBwZW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0lubGluZSgpKSB7XG4gICAgICB0aGlzLnJlcGxhY2VTdGFjaygoY3VycmVudCkgPT4gWycgIT0gbnVsbCA/ICcsIGN1cnJlbnQsICcgOiBcIlwiJ10pO1xuXG4gICAgICB0aGlzLnB1c2hTb3VyY2UodGhpcy5hcHBlbmRUb0J1ZmZlcih0aGlzLnBvcFN0YWNrKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGxvY2FsID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgdGhpcy5wdXNoU291cmNlKFsnaWYgKCcsIGxvY2FsLCAnICE9IG51bGwpIHsgJywgdGhpcy5hcHBlbmRUb0J1ZmZlcihsb2NhbCwgdW5kZWZpbmVkLCB0cnVlKSwgJyB9J10pO1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUpIHtcbiAgICAgICAgdGhpcy5wdXNoU291cmNlKFsnZWxzZSB7ICcsIHRoaXMuYXBwZW5kVG9CdWZmZXIoXCInJ1wiLCB1bmRlZmluZWQsIHRydWUpLCAnIH0nXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIFthcHBlbmRFc2NhcGVkXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIEVzY2FwZSBgdmFsdWVgIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGJ1ZmZlclxuICBhcHBlbmRFc2NhcGVkOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1c2hTb3VyY2UodGhpcy5hcHBlbmRUb0J1ZmZlcihcbiAgICAgICAgW3RoaXMuYWxpYXNhYmxlKCdjb250YWluZXIuZXNjYXBlRXhwcmVzc2lvbicpLCAnKCcsIHRoaXMucG9wU3RhY2soKSwgJyknXSkpO1xuICB9LFxuXG4gIC8vIFtnZXRDb250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi5cbiAgLy8gQ29tcGlsZXIgdmFsdWUsIGFmdGVyOiBsYXN0Q29udGV4dD1kZXB0aFxuICAvL1xuICAvLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSBgbGFzdENvbnRleHRgIGNvbXBpbGVyIHZhbHVlIHRvIHRoZSBkZXB0aFxuICBnZXRDb250ZXh0OiBmdW5jdGlvbihkZXB0aCkge1xuICAgIHRoaXMubGFzdENvbnRleHQgPSBkZXB0aDtcbiAgfSxcblxuICAvLyBbcHVzaENvbnRleHRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGN1cnJlbnRDb250ZXh0LCAuLi5cbiAgLy9cbiAgLy8gUHVzaGVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBjb250ZXh0IG9udG8gdGhlIHN0YWNrLlxuICBwdXNoQ29udGV4dDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHRoaXMuY29udGV4dE5hbWUodGhpcy5sYXN0Q29udGV4dCkpO1xuICB9LFxuXG4gIC8vIFtsb29rdXBPbkNvbnRleHRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGN1cnJlbnRDb250ZXh0W25hbWVdLCAuLi5cbiAgLy9cbiAgLy8gTG9va3MgdXAgdGhlIHZhbHVlIG9mIGBuYW1lYCBvbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwdXNoZXNcbiAgLy8gaXQgb250byB0aGUgc3RhY2suXG4gIGxvb2t1cE9uQ29udGV4dDogZnVuY3Rpb24ocGFydHMsIGZhbHN5LCBzdHJpY3QsIHNjb3BlZCkge1xuICAgIGxldCBpID0gMDtcblxuICAgIGlmICghc2NvcGVkICYmIHRoaXMub3B0aW9ucy5jb21wYXQgJiYgIXRoaXMubGFzdENvbnRleHQpIHtcbiAgICAgIC8vIFRoZSBkZXB0aGVkIHF1ZXJ5IGlzIGV4cGVjdGVkIHRvIGhhbmRsZSB0aGUgdW5kZWZpbmVkIGxvZ2ljIGZvciB0aGUgcm9vdCBsZXZlbCB0aGF0XG4gICAgICAvLyBpcyBpbXBsZW1lbnRlZCBiZWxvdywgc28gd2UgZXZhbHVhdGUgdGhhdCBkaXJlY3RseSBpbiBjb21wYXQgbW9kZVxuICAgICAgdGhpcy5wdXNoKHRoaXMuZGVwdGhlZExvb2t1cChwYXJ0c1tpKytdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaENvbnRleHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVQYXRoKCdjb250ZXh0JywgcGFydHMsIGksIGZhbHN5LCBzdHJpY3QpO1xuICB9LFxuXG4gIC8vIFtsb29rdXBCbG9ja1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBibG9ja1BhcmFtW25hbWVdLCAuLi5cbiAgLy9cbiAgLy8gTG9va3MgdXAgdGhlIHZhbHVlIG9mIGBwYXJ0c2Agb24gdGhlIGdpdmVuIGJsb2NrIHBhcmFtIGFuZCBwdXNoZXNcbiAgLy8gaXQgb250byB0aGUgc3RhY2suXG4gIGxvb2t1cEJsb2NrUGFyYW06IGZ1bmN0aW9uKGJsb2NrUGFyYW1JZCwgcGFydHMpIHtcbiAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdHJ1ZTtcblxuICAgIHRoaXMucHVzaChbJ2Jsb2NrUGFyYW1zWycsIGJsb2NrUGFyYW1JZFswXSwgJ11bJywgYmxvY2tQYXJhbUlkWzFdLCAnXSddKTtcbiAgICB0aGlzLnJlc29sdmVQYXRoKCdjb250ZXh0JywgcGFydHMsIDEpO1xuICB9LFxuXG4gIC8vIFtsb29rdXBEYXRhXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBkYXRhLCAuLi5cbiAgLy9cbiAgLy8gUHVzaCB0aGUgZGF0YSBsb29rdXAgb3BlcmF0b3JcbiAgbG9va3VwRGF0YTogZnVuY3Rpb24oZGVwdGgsIHBhcnRzLCBzdHJpY3QpIHtcbiAgICBpZiAoIWRlcHRoKSB7XG4gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ2RhdGEnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdjb250YWluZXIuZGF0YShkYXRhLCAnICsgZGVwdGggKyAnKScpO1xuICAgIH1cblxuICAgIHRoaXMucmVzb2x2ZVBhdGgoJ2RhdGEnLCBwYXJ0cywgMCwgdHJ1ZSwgc3RyaWN0KTtcbiAgfSxcblxuICByZXNvbHZlUGF0aDogZnVuY3Rpb24odHlwZSwgcGFydHMsIGksIGZhbHN5LCBzdHJpY3QpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnN0cmljdCB8fCB0aGlzLm9wdGlvbnMuYXNzdW1lT2JqZWN0cykge1xuICAgICAgdGhpcy5wdXNoKHN0cmljdExvb2t1cCh0aGlzLm9wdGlvbnMuc3RyaWN0ICYmIHN0cmljdCwgdGhpcywgcGFydHMsIHR5cGUpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbGVuID0gcGFydHMubGVuZ3RoO1xuICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuICAgICAgdGhpcy5yZXBsYWNlU3RhY2soKGN1cnJlbnQpID0+IHtcbiAgICAgICAgbGV0IGxvb2t1cCA9IHRoaXMubmFtZUxvb2t1cChjdXJyZW50LCBwYXJ0c1tpXSwgdHlwZSk7XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgemVybyBhbmQgZmFsc2UgYXJlIGhhbmRsZWQgcHJvcGVybHkgaWYgdGhlIGNvbnRleHQgKGZhbHN5IGZsYWcpXG4gICAgICAgIC8vIG5lZWRzIHRvIGhhdmUgdGhlIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZXNlIHZhbHVlcy5cbiAgICAgICAgaWYgKCFmYWxzeSkge1xuICAgICAgICAgIHJldHVybiBbJyAhPSBudWxsID8gJywgbG9va3VwLCAnIDogJywgY3VycmVudF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIGNhbiB1c2UgZ2VuZXJpYyBmYWxzeSBoYW5kbGluZ1xuICAgICAgICAgIHJldHVybiBbJyAmJiAnLCBsb29rdXBdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG4gICAgfVxuICB9LFxuXG4gIC8vIFtyZXNvbHZlUG9zc2libGVMYW1iZGFdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IHZhbHVlLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXNvbHZlZCB2YWx1ZSwgLi4uXG4gIC8vXG4gIC8vIElmIHRoZSBgdmFsdWVgIGlzIGEgbGFtYmRhLCByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayBieVxuICAvLyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBsYW1iZGFcbiAgcmVzb2x2ZVBvc3NpYmxlTGFtYmRhOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1c2goW3RoaXMuYWxpYXNhYmxlKCdjb250YWluZXIubGFtYmRhJyksICcoJywgdGhpcy5wb3BTdGFjaygpLCAnLCAnLCB0aGlzLmNvbnRleHROYW1lKDApLCAnKSddKTtcbiAgfSxcblxuICAvLyBbcHVzaFN0cmluZ1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBzdHJpbmcsIGN1cnJlbnRDb250ZXh0LCAuLi5cbiAgLy9cbiAgLy8gVGhpcyBvcGNvZGUgaXMgZGVzaWduZWQgZm9yIHVzZSBpbiBzdHJpbmcgbW9kZSwgd2hpY2hcbiAgLy8gcHJvdmlkZXMgdGhlIHN0cmluZyB2YWx1ZSBvZiBhIHBhcmFtZXRlciBhbG9uZyB3aXRoIGl0c1xuICAvLyBkZXB0aCByYXRoZXIgdGhhbiByZXNvbHZpbmcgaXQgaW1tZWRpYXRlbHkuXG4gIHB1c2hTdHJpbmdQYXJhbTogZnVuY3Rpb24oc3RyaW5nLCB0eXBlKSB7XG4gICAgdGhpcy5wdXNoQ29udGV4dCgpO1xuICAgIHRoaXMucHVzaFN0cmluZyh0eXBlKTtcblxuICAgIC8vIElmIGl0J3MgYSBzdWJleHByZXNzaW9uLCB0aGUgc3RyaW5nIHJlc3VsdFxuICAgIC8vIHdpbGwgYmUgcHVzaGVkIGFmdGVyIHRoaXMgb3Bjb2RlLlxuICAgIGlmICh0eXBlICE9PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnB1c2hTdHJpbmcoc3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChzdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBlbXB0eUhhc2g6IGZ1bmN0aW9uKG9taXRFbXB0eSkge1xuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hJZHNcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hDb250ZXh0c1xuICAgICAgdGhpcy5wdXNoKCd7fScpOyAvLyBoYXNoVHlwZXNcbiAgICB9XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG9taXRFbXB0eSA/ICd1bmRlZmluZWQnIDogJ3t9Jyk7XG4gIH0sXG4gIHB1c2hIYXNoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2hlcy5wdXNoKHRoaXMuaGFzaCk7XG4gICAgfVxuICAgIHRoaXMuaGFzaCA9IHt2YWx1ZXM6IFtdLCB0eXBlczogW10sIGNvbnRleHRzOiBbXSwgaWRzOiBbXX07XG4gIH0sXG4gIHBvcEhhc2g6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBoYXNoID0gdGhpcy5oYXNoO1xuICAgIHRoaXMuaGFzaCA9IHRoaXMuaGFzaGVzLnBvcCgpO1xuXG4gICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC5pZHMpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2godGhpcy5vYmplY3RMaXRlcmFsKGhhc2guY29udGV4dHMpKTtcbiAgICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC50eXBlcykpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC52YWx1ZXMpKTtcbiAgfSxcblxuICAvLyBbcHVzaFN0cmluZ11cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcXVvdGVkU3RyaW5nKHN0cmluZyksIC4uLlxuICAvL1xuICAvLyBQdXNoIGEgcXVvdGVkIHZlcnNpb24gb2YgYHN0cmluZ2Agb250byB0aGUgc3RhY2tcbiAgcHVzaFN0cmluZzogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHRoaXMucXVvdGVkU3RyaW5nKHN0cmluZykpO1xuICB9LFxuXG4gIC8vIFtwdXNoTGl0ZXJhbF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogdmFsdWUsIC4uLlxuICAvL1xuICAvLyBQdXNoZXMgYSB2YWx1ZSBvbnRvIHRoZSBzdGFjay4gVGhpcyBvcGVyYXRpb24gcHJldmVudHNcbiAgLy8gdGhlIGNvbXBpbGVyIGZyb20gY3JlYXRpbmcgYSB0ZW1wb3JhcnkgdmFyaWFibGUgdG8gaG9sZFxuICAvLyBpdC5cbiAgcHVzaExpdGVyYWw6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHZhbHVlKTtcbiAgfSxcblxuICAvLyBbcHVzaFByb2dyYW1dXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHByb2dyYW0oZ3VpZCksIC4uLlxuICAvL1xuICAvLyBQdXNoIGEgcHJvZ3JhbSBleHByZXNzaW9uIG9udG8gdGhlIHN0YWNrLiBUaGlzIHRha2VzXG4gIC8vIGEgY29tcGlsZS10aW1lIGd1aWQgYW5kIGNvbnZlcnRzIGl0IGludG8gYSBydW50aW1lLWFjY2Vzc2libGVcbiAgLy8gZXhwcmVzc2lvbi5cbiAgcHVzaFByb2dyYW06IGZ1bmN0aW9uKGd1aWQpIHtcbiAgICBpZiAoZ3VpZCAhPSBudWxsKSB7XG4gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5wcm9ncmFtRXhwcmVzc2lvbihndWlkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChudWxsKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gW3JlZ2lzdGVyRGVjb3JhdG9yXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgZGVjb3JhdG9yJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgZGVjb3JhdG9yLFxuICAvLyBhbmQgaW5zZXJ0cyB0aGUgZGVjb3JhdG9yIGludG8gdGhlIGRlY29yYXRvcnMgbGlzdC5cbiAgcmVnaXN0ZXJEZWNvcmF0b3IocGFyYW1TaXplLCBuYW1lKSB7XG4gICAgbGV0IGZvdW5kRGVjb3JhdG9yID0gdGhpcy5uYW1lTG9va3VwKCdkZWNvcmF0b3JzJywgbmFtZSwgJ2RlY29yYXRvcicpLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplKTtcblxuICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKFtcbiAgICAgICdmbiA9ICcsXG4gICAgICB0aGlzLmRlY29yYXRvcnMuZnVuY3Rpb25DYWxsKGZvdW5kRGVjb3JhdG9yLCAnJywgWydmbicsICdwcm9wcycsICdjb250YWluZXInLCBvcHRpb25zXSksXG4gICAgICAnIHx8IGZuOydcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlSGVscGVyXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvblxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgaGVscGVyJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgaGVscGVyLFxuICAvLyBhbmQgcHVzaGVzIHRoZSBoZWxwZXIncyByZXR1cm4gdmFsdWUgb250byB0aGUgc3RhY2suXG4gIC8vXG4gIC8vIElmIHRoZSBoZWxwZXIgaXMgbm90IGZvdW5kLCBgaGVscGVyTWlzc2luZ2AgaXMgY2FsbGVkLlxuICBpbnZva2VIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgaXNTaW1wbGUpIHtcbiAgICBsZXQgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICBoZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKHBhcmFtU2l6ZSwgbmFtZSksXG4gICAgICAgIHNpbXBsZSA9IGlzU2ltcGxlID8gW2hlbHBlci5uYW1lLCAnIHx8ICddIDogJyc7XG5cbiAgICBsZXQgbG9va3VwID0gWycoJ10uY29uY2F0KHNpbXBsZSwgbm9uSGVscGVyKTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIGxvb2t1cC5wdXNoKCcgfHwgJywgdGhpcy5hbGlhc2FibGUoJ2hlbHBlcnMuaGVscGVyTWlzc2luZycpKTtcbiAgICB9XG4gICAgbG9va3VwLnB1c2goJyknKTtcblxuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwobG9va3VwLCAnY2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKSk7XG4gIH0sXG5cbiAgLy8gW2ludm9rZUtub3duSGVscGVyXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvblxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gdGhlIGhlbHBlciBpcyBrbm93biB0byBleGlzdCxcbiAgLy8gc28gYSBgaGVscGVyTWlzc2luZ2AgZmFsbGJhY2sgaXMgbm90IHJlcXVpcmVkLlxuICBpbnZva2VLbm93bkhlbHBlcjogZnVuY3Rpb24ocGFyYW1TaXplLCBuYW1lKSB7XG4gICAgbGV0IGhlbHBlciA9IHRoaXMuc2V0dXBIZWxwZXIocGFyYW1TaXplLCBuYW1lKTtcbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGhlbHBlci5uYW1lLCAnY2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKSk7XG4gIH0sXG5cbiAgLy8gW2ludm9rZUFtYmlndW91c11cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgcGFyYW1zLi4uLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXN1bHQgb2YgZGlzYW1iaWd1YXRpb25cbiAgLy9cbiAgLy8gVGhpcyBvcGVyYXRpb24gaXMgdXNlZCB3aGVuIGFuIGV4cHJlc3Npb24gbGlrZSBge3tmb299fWBcbiAgLy8gaXMgcHJvdmlkZWQsIGJ1dCB3ZSBkb24ndCBrbm93IGF0IGNvbXBpbGUtdGltZSB3aGV0aGVyIGl0XG4gIC8vIGlzIGEgaGVscGVyIG9yIGEgcGF0aC5cbiAgLy9cbiAgLy8gVGhpcyBvcGVyYXRpb24gZW1pdHMgbW9yZSBjb2RlIHRoYW4gdGhlIG90aGVyIG9wdGlvbnMsXG4gIC8vIGFuZCBjYW4gYmUgYXZvaWRlZCBieSBwYXNzaW5nIHRoZSBga25vd25IZWxwZXJzYCBhbmRcbiAgLy8gYGtub3duSGVscGVyc09ubHlgIGZsYWdzIGF0IGNvbXBpbGUtdGltZS5cbiAgaW52b2tlQW1iaWd1b3VzOiBmdW5jdGlvbihuYW1lLCBoZWxwZXJDYWxsKSB7XG4gICAgdGhpcy51c2VSZWdpc3RlcignaGVscGVyJyk7XG5cbiAgICBsZXQgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpO1xuXG4gICAgdGhpcy5lbXB0eUhhc2goKTtcbiAgICBsZXQgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcigwLCBuYW1lLCBoZWxwZXJDYWxsKTtcblxuICAgIGxldCBoZWxwZXJOYW1lID0gdGhpcy5sYXN0SGVscGVyID0gdGhpcy5uYW1lTG9va3VwKCdoZWxwZXJzJywgbmFtZSwgJ2hlbHBlcicpO1xuXG4gICAgbGV0IGxvb2t1cCA9IFsnKCcsICcoaGVscGVyID0gJywgaGVscGVyTmFtZSwgJyB8fCAnLCBub25IZWxwZXIsICcpJ107XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBsb29rdXBbMF0gPSAnKGhlbHBlciA9ICc7XG4gICAgICBsb29rdXAucHVzaChcbiAgICAgICAgJyAhPSBudWxsID8gaGVscGVyIDogJyxcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2hlbHBlcnMuaGVscGVyTWlzc2luZycpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucHVzaChbXG4gICAgICAgICcoJywgbG9va3VwLFxuICAgICAgICAoaGVscGVyLnBhcmFtc0luaXQgPyBbJyksKCcsIGhlbHBlci5wYXJhbXNJbml0XSA6IFtdKSwgJyksJyxcbiAgICAgICAgJyh0eXBlb2YgaGVscGVyID09PSAnLCB0aGlzLmFsaWFzYWJsZSgnXCJmdW5jdGlvblwiJyksICcgPyAnLFxuICAgICAgICB0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoJ2hlbHBlcicsICdjYWxsJywgaGVscGVyLmNhbGxQYXJhbXMpLCAnIDogaGVscGVyKSknXG4gICAgXSk7XG4gIH0sXG5cbiAgLy8gW2ludm9rZVBhcnRpYWxdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGNvbnRleHQsIC4uLlxuICAvLyBPbiBzdGFjayBhZnRlcjogcmVzdWx0IG9mIHBhcnRpYWwgaW52b2NhdGlvblxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBwb3BzIG9mZiBhIGNvbnRleHQsIGludm9rZXMgYSBwYXJ0aWFsIHdpdGggdGhhdCBjb250ZXh0LFxuICAvLyBhbmQgcHVzaGVzIHRoZSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gYmFjay5cbiAgaW52b2tlUGFydGlhbDogZnVuY3Rpb24oaXNEeW5hbWljLCBuYW1lLCBpbmRlbnQpIHtcbiAgICBsZXQgcGFyYW1zID0gW10sXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLnNldHVwUGFyYW1zKG5hbWUsIDEsIHBhcmFtcyk7XG5cbiAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICBuYW1lID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgZGVsZXRlIG9wdGlvbnMubmFtZTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICBvcHRpb25zLmluZGVudCA9IEpTT04uc3RyaW5naWZ5KGluZGVudCk7XG4gICAgfVxuICAgIG9wdGlvbnMuaGVscGVycyA9ICdoZWxwZXJzJztcbiAgICBvcHRpb25zLnBhcnRpYWxzID0gJ3BhcnRpYWxzJztcbiAgICBvcHRpb25zLmRlY29yYXRvcnMgPSAnY29udGFpbmVyLmRlY29yYXRvcnMnO1xuXG4gICAgaWYgKCFpc0R5bmFtaWMpIHtcbiAgICAgIHBhcmFtcy51bnNoaWZ0KHRoaXMubmFtZUxvb2t1cCgncGFydGlhbHMnLCBuYW1lLCAncGFydGlhbCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnVuc2hpZnQobmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXQpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGhzID0gJ2RlcHRocyc7XG4gICAgfVxuICAgIG9wdGlvbnMgPSB0aGlzLm9iamVjdExpdGVyYWwob3B0aW9ucyk7XG4gICAgcGFyYW1zLnB1c2gob3B0aW9ucyk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdjb250YWluZXIuaW52b2tlUGFydGlhbCcsICcnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYXNzaWduVG9IYXNoXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uLCBoYXNoLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4sIGhhc2gsIC4uLlxuICAvL1xuICAvLyBQb3BzIGEgdmFsdWUgb2ZmIHRoZSBzdGFjayBhbmQgYXNzaWducyBpdCB0byB0aGUgY3VycmVudCBoYXNoXG4gIGFzc2lnblRvSGFzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB0eXBlLFxuICAgICAgICBpZDtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBpZCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0eXBlID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgY29udGV4dCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaGFzaCA9IHRoaXMuaGFzaDtcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgaGFzaC5jb250ZXh0c1trZXldID0gY29udGV4dDtcbiAgICB9XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGhhc2gudHlwZXNba2V5XSA9IHR5cGU7XG4gICAgfVxuICAgIGlmIChpZCkge1xuICAgICAgaGFzaC5pZHNba2V5XSA9IGlkO1xuICAgIH1cbiAgICBoYXNoLnZhbHVlc1trZXldID0gdmFsdWU7XG4gIH0sXG5cbiAgcHVzaElkOiBmdW5jdGlvbih0eXBlLCBuYW1lLCBjaGlsZCkge1xuICAgIGlmICh0eXBlID09PSAnQmxvY2tQYXJhbScpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChcbiAgICAgICAgICAnYmxvY2tQYXJhbXNbJyArIG5hbWVbMF0gKyAnXS5wYXRoWycgKyBuYW1lWzFdICsgJ10nXG4gICAgICAgICAgKyAoY2hpbGQgPyAnICsgJyArIEpTT04uc3RyaW5naWZ5KCcuJyArIGNoaWxkKSA6ICcnKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnUGF0aEV4cHJlc3Npb24nKSB7XG4gICAgICB0aGlzLnB1c2hTdHJpbmcobmFtZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgndHJ1ZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ251bGwnKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gSEVMUEVSU1xuXG4gIGNvbXBpbGVyOiBKYXZhU2NyaXB0Q29tcGlsZXIsXG5cbiAgY29tcGlsZUNoaWxkcmVuOiBmdW5jdGlvbihlbnZpcm9ubWVudCwgb3B0aW9ucykge1xuICAgIGxldCBjaGlsZHJlbiA9IGVudmlyb25tZW50LmNoaWxkcmVuLCBjaGlsZCwgY29tcGlsZXI7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIGNvbXBpbGVyID0gbmV3IHRoaXMuY29tcGlsZXIoKTsgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5cbiAgICAgIGxldCBleGlzdGluZyA9IHRoaXMubWF0Y2hFeGlzdGluZ1Byb2dyYW0oY2hpbGQpO1xuXG4gICAgICBpZiAoZXhpc3RpbmcgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXMucHVzaCgnJyk7ICAgICAvLyBQbGFjZWhvbGRlciB0byBwcmV2ZW50IG5hbWUgY29uZmxpY3RzIGZvciBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnByb2dyYW1zLmxlbmd0aDtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGluZGV4O1xuICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXNbaW5kZXhdID0gY29tcGlsZXIuY29tcGlsZShjaGlsZCwgb3B0aW9ucywgdGhpcy5jb250ZXh0LCAhdGhpcy5wcmVjb21waWxlKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LmRlY29yYXRvcnNbaW5kZXhdID0gY29tcGlsZXIuZGVjb3JhdG9ycztcbiAgICAgICAgdGhpcy5jb250ZXh0LmVudmlyb25tZW50c1tpbmRleF0gPSBjaGlsZDtcblxuICAgICAgICB0aGlzLnVzZURlcHRocyA9IHRoaXMudXNlRGVwdGhzIHx8IGNvbXBpbGVyLnVzZURlcHRocztcbiAgICAgICAgdGhpcy51c2VCbG9ja1BhcmFtcyA9IHRoaXMudXNlQmxvY2tQYXJhbXMgfHwgY29tcGlsZXIudXNlQmxvY2tQYXJhbXM7XG4gICAgICAgIGNoaWxkLnVzZURlcHRocyA9IHRoaXMudXNlRGVwdGhzO1xuICAgICAgICBjaGlsZC51c2VCbG9ja1BhcmFtcyA9IHRoaXMudXNlQmxvY2tQYXJhbXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZC5pbmRleCA9IGV4aXN0aW5nLmluZGV4O1xuICAgICAgICBjaGlsZC5uYW1lID0gJ3Byb2dyYW0nICsgZXhpc3RpbmcuaW5kZXg7XG5cbiAgICAgICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBleGlzdGluZy51c2VEZXB0aHM7XG4gICAgICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGV4aXN0aW5nLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWF0Y2hFeGlzdGluZ1Byb2dyYW06IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBlbnZpcm9ubWVudCA9IHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaV07XG4gICAgICBpZiAoZW52aXJvbm1lbnQgJiYgZW52aXJvbm1lbnQuZXF1YWxzKGNoaWxkKSkge1xuICAgICAgICByZXR1cm4gZW52aXJvbm1lbnQ7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2dyYW1FeHByZXNzaW9uOiBmdW5jdGlvbihndWlkKSB7XG4gICAgbGV0IGNoaWxkID0gdGhpcy5lbnZpcm9ubWVudC5jaGlsZHJlbltndWlkXSxcbiAgICAgICAgcHJvZ3JhbVBhcmFtcyA9IFtjaGlsZC5pbmRleCwgJ2RhdGEnLCBjaGlsZC5ibG9ja1BhcmFtc107XG5cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykge1xuICAgICAgcHJvZ3JhbVBhcmFtcy5wdXNoKCdibG9ja1BhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGhpcy51c2VEZXB0aHMpIHtcbiAgICAgIHByb2dyYW1QYXJhbXMucHVzaCgnZGVwdGhzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdjb250YWluZXIucHJvZ3JhbSgnICsgcHJvZ3JhbVBhcmFtcy5qb2luKCcsICcpICsgJyknO1xuICB9LFxuXG4gIHVzZVJlZ2lzdGVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKCF0aGlzLnJlZ2lzdGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5yZWdpc3RlcnNbbmFtZV0gPSB0cnVlO1xuICAgICAgdGhpcy5yZWdpc3RlcnMubGlzdC5wdXNoKG5hbWUpO1xuICAgIH1cbiAgfSxcblxuICBwdXNoOiBmdW5jdGlvbihleHByKSB7XG4gICAgaWYgKCEoZXhwciBpbnN0YW5jZW9mIExpdGVyYWwpKSB7XG4gICAgICBleHByID0gdGhpcy5zb3VyY2Uud3JhcChleHByKTtcbiAgICB9XG5cbiAgICB0aGlzLmlubGluZVN0YWNrLnB1c2goZXhwcik7XG4gICAgcmV0dXJuIGV4cHI7XG4gIH0sXG5cbiAgcHVzaFN0YWNrTGl0ZXJhbDogZnVuY3Rpb24oaXRlbSkge1xuICAgIHRoaXMucHVzaChuZXcgTGl0ZXJhbChpdGVtKSk7XG4gIH0sXG5cbiAgcHVzaFNvdXJjZTogZnVuY3Rpb24oc291cmNlKSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIHRoaXMuc291cmNlLnB1c2goXG4gICAgICAgICAgdGhpcy5hcHBlbmRUb0J1ZmZlcih0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcodGhpcy5wZW5kaW5nQ29udGVudCksIHRoaXMucGVuZGluZ0xvY2F0aW9uKSk7XG4gICAgICB0aGlzLnBlbmRpbmdDb250ZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2UpIHtcbiAgICAgIHRoaXMuc291cmNlLnB1c2goc291cmNlKTtcbiAgICB9XG4gIH0sXG5cbiAgcmVwbGFjZVN0YWNrOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgIGxldCBwcmVmaXggPSBbJygnXSxcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIGNyZWF0ZWRTdGFjayxcbiAgICAgICAgdXNlZExpdGVyYWw7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICghdGhpcy5pc0lubGluZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdyZXBsYWNlU3RhY2sgb24gbm9uLWlubGluZScpO1xuICAgIH1cblxuICAgIC8vIFdlIHdhbnQgdG8gbWVyZ2UgdGhlIGlubGluZSBzdGF0ZW1lbnQgaW50byB0aGUgcmVwbGFjZW1lbnQgc3RhdGVtZW50IHZpYSAnLCdcbiAgICBsZXQgdG9wID0gdGhpcy5wb3BTdGFjayh0cnVlKTtcblxuICAgIGlmICh0b3AgaW5zdGFuY2VvZiBMaXRlcmFsKSB7XG4gICAgICAvLyBMaXRlcmFscyBkbyBub3QgbmVlZCB0byBiZSBpbmxpbmVkXG4gICAgICBzdGFjayA9IFt0b3AudmFsdWVdO1xuICAgICAgcHJlZml4ID0gWycoJywgc3RhY2tdO1xuICAgICAgdXNlZExpdGVyYWwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBHZXQgb3IgY3JlYXRlIHRoZSBjdXJyZW50IHN0YWNrIG5hbWUgZm9yIHVzZSBieSB0aGUgaW5saW5lXG4gICAgICBjcmVhdGVkU3RhY2sgPSB0cnVlO1xuICAgICAgbGV0IG5hbWUgPSB0aGlzLmluY3JTdGFjaygpO1xuXG4gICAgICBwcmVmaXggPSBbJygoJywgdGhpcy5wdXNoKG5hbWUpLCAnID0gJywgdG9wLCAnKSddO1xuICAgICAgc3RhY2sgPSB0aGlzLnRvcFN0YWNrKCk7XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSBjYWxsYmFjay5jYWxsKHRoaXMsIHN0YWNrKTtcblxuICAgIGlmICghdXNlZExpdGVyYWwpIHtcbiAgICAgIHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG4gICAgaWYgKGNyZWF0ZWRTdGFjaykge1xuICAgICAgdGhpcy5zdGFja1Nsb3QtLTtcbiAgICB9XG4gICAgdGhpcy5wdXNoKHByZWZpeC5jb25jYXQoaXRlbSwgJyknKSk7XG4gIH0sXG5cbiAgaW5jclN0YWNrOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0YWNrU2xvdCsrO1xuICAgIGlmICh0aGlzLnN0YWNrU2xvdCA+IHRoaXMuc3RhY2tWYXJzLmxlbmd0aCkgeyB0aGlzLnN0YWNrVmFycy5wdXNoKCdzdGFjaycgKyB0aGlzLnN0YWNrU2xvdCk7IH1cbiAgICByZXR1cm4gdGhpcy50b3BTdGFja05hbWUoKTtcbiAgfSxcbiAgdG9wU3RhY2tOYW1lOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ3N0YWNrJyArIHRoaXMuc3RhY2tTbG90O1xuICB9LFxuICBmbHVzaElubGluZTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGlubGluZVN0YWNrID0gdGhpcy5pbmxpbmVTdGFjaztcbiAgICB0aGlzLmlubGluZVN0YWNrID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlubGluZVN0YWNrLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBsZXQgZW50cnkgPSBpbmxpbmVTdGFja1tpXTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGVudHJ5IGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgICB0aGlzLmNvbXBpbGVTdGFjay5wdXNoKGVudHJ5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBzdGFjayA9IHRoaXMuaW5jclN0YWNrKCk7XG4gICAgICAgIHRoaXMucHVzaFNvdXJjZShbc3RhY2ssICcgPSAnLCBlbnRyeSwgJzsnXSk7XG4gICAgICAgIHRoaXMuY29tcGlsZVN0YWNrLnB1c2goc3RhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgaXNJbmxpbmU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmlubGluZVN0YWNrLmxlbmd0aDtcbiAgfSxcblxuICBwb3BTdGFjazogZnVuY3Rpb24od3JhcHBlZCkge1xuICAgIGxldCBpbmxpbmUgPSB0aGlzLmlzSW5saW5lKCksXG4gICAgICAgIGl0ZW0gPSAoaW5saW5lID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0YWNrKS5wb3AoKTtcblxuICAgIGlmICghd3JhcHBlZCAmJiAoaXRlbSBpbnN0YW5jZW9mIExpdGVyYWwpKSB7XG4gICAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFpbmxpbmUpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKCF0aGlzLnN0YWNrU2xvdCkge1xuICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgc3RhY2sgcG9wJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFja1Nsb3QtLTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICB0b3BTdGFjazogZnVuY3Rpb24oKSB7XG4gICAgbGV0IHN0YWNrID0gKHRoaXMuaXNJbmxpbmUoKSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjayksXG4gICAgICAgIGl0ZW0gPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICBjb250ZXh0TmFtZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIGlmICh0aGlzLnVzZURlcHRocyAmJiBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gJ2RlcHRoc1snICsgY29udGV4dCArICddJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdkZXB0aCcgKyBjb250ZXh0O1xuICAgIH1cbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcoc3RyKTtcbiAgfSxcblxuICBvYmplY3RMaXRlcmFsOiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uub2JqZWN0TGl0ZXJhbChvYmopO1xuICB9LFxuXG4gIGFsaWFzYWJsZTogZnVuY3Rpb24obmFtZSkge1xuICAgIGxldCByZXQgPSB0aGlzLmFsaWFzZXNbbmFtZV07XG4gICAgaWYgKHJldCkge1xuICAgICAgcmV0LnJlZmVyZW5jZUNvdW50Kys7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHJldCA9IHRoaXMuYWxpYXNlc1tuYW1lXSA9IHRoaXMuc291cmNlLndyYXAobmFtZSk7XG4gICAgcmV0LmFsaWFzYWJsZSA9IHRydWU7XG4gICAgcmV0LnJlZmVyZW5jZUNvdW50ID0gMTtcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgYmxvY2tIZWxwZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gW10sXG4gICAgICAgIHBhcmFtc0luaXQgPSB0aGlzLnNldHVwSGVscGVyQXJncyhuYW1lLCBwYXJhbVNpemUsIHBhcmFtcywgYmxvY2tIZWxwZXIpO1xuICAgIGxldCBmb3VuZEhlbHBlciA9IHRoaXMubmFtZUxvb2t1cCgnaGVscGVycycsIG5hbWUsICdoZWxwZXInKSxcbiAgICAgICAgY2FsbENvbnRleHQgPSB0aGlzLmFsaWFzYWJsZShgJHt0aGlzLmNvbnRleHROYW1lKDApfSAhPSBudWxsID8gJHt0aGlzLmNvbnRleHROYW1lKDApfSA6IHt9YCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBwYXJhbXNJbml0OiBwYXJhbXNJbml0LFxuICAgICAgbmFtZTogZm91bmRIZWxwZXIsXG4gICAgICBjYWxsUGFyYW1zOiBbY2FsbENvbnRleHRdLmNvbmNhdChwYXJhbXMpXG4gICAgfTtcbiAgfSxcblxuICBzZXR1cFBhcmFtczogZnVuY3Rpb24oaGVscGVyLCBwYXJhbVNpemUsIHBhcmFtcykge1xuICAgIGxldCBvcHRpb25zID0ge30sXG4gICAgICAgIGNvbnRleHRzID0gW10sXG4gICAgICAgIHR5cGVzID0gW10sXG4gICAgICAgIGlkcyA9IFtdLFxuICAgICAgICBvYmplY3RBcmdzID0gIXBhcmFtcyxcbiAgICAgICAgcGFyYW07XG5cbiAgICBpZiAob2JqZWN0QXJncykge1xuICAgICAgcGFyYW1zID0gW107XG4gICAgfVxuXG4gICAgb3B0aW9ucy5uYW1lID0gdGhpcy5xdW90ZWRTdHJpbmcoaGVscGVyKTtcbiAgICBvcHRpb25zLmhhc2ggPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICBpZiAodGhpcy50cmFja0lkcykge1xuICAgICAgb3B0aW9ucy5oYXNoSWRzID0gdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIG9wdGlvbnMuaGFzaFR5cGVzID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgb3B0aW9ucy5oYXNoQ29udGV4dHMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgfVxuXG4gICAgbGV0IGludmVyc2UgPSB0aGlzLnBvcFN0YWNrKCksXG4gICAgICAgIHByb2dyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICAvLyBBdm9pZCBzZXR0aW5nIGZuIGFuZCBpbnZlcnNlIGlmIG5laXRoZXIgYXJlIHNldC4gVGhpcyBhbGxvd3NcbiAgICAvLyBoZWxwZXJzIHRvIGRvIGEgY2hlY2sgZm9yIGBpZiAob3B0aW9ucy5mbilgXG4gICAgaWYgKHByb2dyYW0gfHwgaW52ZXJzZSkge1xuICAgICAgb3B0aW9ucy5mbiA9IHByb2dyYW0gfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICAgIG9wdGlvbnMuaW52ZXJzZSA9IGludmVyc2UgfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICB9XG5cbiAgICAvLyBUaGUgcGFyYW1ldGVycyBnbyBvbiB0byB0aGUgc3RhY2sgaW4gb3JkZXIgKG1ha2luZyBzdXJlIHRoYXQgdGhleSBhcmUgZXZhbHVhdGVkIGluIG9yZGVyKVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gcG9wIHRoZW0gb2ZmIHRoZSBzdGFjayBpbiByZXZlcnNlIG9yZGVyXG4gICAgbGV0IGkgPSBwYXJhbVNpemU7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcGFyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBwYXJhbXNbaV0gPSBwYXJhbTtcblxuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgaWRzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICAgIHR5cGVzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgICBjb250ZXh0c1tpXSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqZWN0QXJncykge1xuICAgICAgb3B0aW9ucy5hcmdzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmlkcyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoaWRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLnR5cGVzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheSh0eXBlcyk7XG4gICAgICBvcHRpb25zLmNvbnRleHRzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShjb250ZXh0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSAnZGF0YSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gJ2Jsb2NrUGFyYW1zJztcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXJBcmdzOiBmdW5jdGlvbihoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zLCB1c2VSZWdpc3Rlcikge1xuICAgIGxldCBvcHRpb25zID0gdGhpcy5zZXR1cFBhcmFtcyhoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zKTtcbiAgICBvcHRpb25zID0gdGhpcy5vYmplY3RMaXRlcmFsKG9wdGlvbnMpO1xuICAgIGlmICh1c2VSZWdpc3Rlcikge1xuICAgICAgdGhpcy51c2VSZWdpc3Rlcignb3B0aW9ucycpO1xuICAgICAgcGFyYW1zLnB1c2goJ29wdGlvbnMnKTtcbiAgICAgIHJldHVybiBbJ29wdGlvbnM9Jywgb3B0aW9uc107XG4gICAgfSBlbHNlIGlmIChwYXJhbXMpIHtcbiAgICAgIHBhcmFtcy5wdXNoKG9wdGlvbnMpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gIH1cbn07XG5cblxuKGZ1bmN0aW9uKCkge1xuICBjb25zdCByZXNlcnZlZFdvcmRzID0gKFxuICAgICdicmVhayBlbHNlIG5ldyB2YXInICtcbiAgICAnIGNhc2UgZmluYWxseSByZXR1cm4gdm9pZCcgK1xuICAgICcgY2F0Y2ggZm9yIHN3aXRjaCB3aGlsZScgK1xuICAgICcgY29udGludWUgZnVuY3Rpb24gdGhpcyB3aXRoJyArXG4gICAgJyBkZWZhdWx0IGlmIHRocm93JyArXG4gICAgJyBkZWxldGUgaW4gdHJ5JyArXG4gICAgJyBkbyBpbnN0YW5jZW9mIHR5cGVvZicgK1xuICAgICcgYWJzdHJhY3QgZW51bSBpbnQgc2hvcnQnICtcbiAgICAnIGJvb2xlYW4gZXhwb3J0IGludGVyZmFjZSBzdGF0aWMnICtcbiAgICAnIGJ5dGUgZXh0ZW5kcyBsb25nIHN1cGVyJyArXG4gICAgJyBjaGFyIGZpbmFsIG5hdGl2ZSBzeW5jaHJvbml6ZWQnICtcbiAgICAnIGNsYXNzIGZsb2F0IHBhY2thZ2UgdGhyb3dzJyArXG4gICAgJyBjb25zdCBnb3RvIHByaXZhdGUgdHJhbnNpZW50JyArXG4gICAgJyBkZWJ1Z2dlciBpbXBsZW1lbnRzIHByb3RlY3RlZCB2b2xhdGlsZScgK1xuICAgICcgZG91YmxlIGltcG9ydCBwdWJsaWMgbGV0IHlpZWxkIGF3YWl0JyArXG4gICAgJyBudWxsIHRydWUgZmFsc2UnXG4gICkuc3BsaXQoJyAnKTtcblxuICBjb25zdCBjb21waWxlcldvcmRzID0gSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTID0ge307XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSByZXNlcnZlZFdvcmRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbXBpbGVyV29yZHNbcmVzZXJ2ZWRXb3Jkc1tpXV0gPSB0cnVlO1xuICB9XG59KCkpO1xuXG5KYXZhU2NyaXB0Q29tcGlsZXIuaXNWYWxpZEphdmFTY3JpcHRWYXJpYWJsZU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiAhSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTW25hbWVdICYmICgvXlthLXpBLVpfJF1bMC05YS16QS1aXyRdKiQvKS50ZXN0KG5hbWUpO1xufTtcblxuZnVuY3Rpb24gc3RyaWN0TG9va3VwKHJlcXVpcmVUZXJtaW5hbCwgY29tcGlsZXIsIHBhcnRzLCB0eXBlKSB7XG4gIGxldCBzdGFjayA9IGNvbXBpbGVyLnBvcFN0YWNrKCksXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHBhcnRzLmxlbmd0aDtcbiAgaWYgKHJlcXVpcmVUZXJtaW5hbCkge1xuICAgIGxlbi0tO1xuICB9XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHN0YWNrID0gY29tcGlsZXIubmFtZUxvb2t1cChzdGFjaywgcGFydHNbaV0sIHR5cGUpO1xuICB9XG5cbiAgaWYgKHJlcXVpcmVUZXJtaW5hbCkge1xuICAgIHJldHVybiBbY29tcGlsZXIuYWxpYXNhYmxlKCdjb250YWluZXIuc3RyaWN0JyksICcoJywgc3RhY2ssICcsICcsIGNvbXBpbGVyLnF1b3RlZFN0cmluZyhwYXJ0c1tpXSksICcpJ107XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEphdmFTY3JpcHRDb21waWxlcjtcbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/parser.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/parser.js deleted file mode 100644 index 58748e085..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/parser.js +++ /dev/null @@ -1,740 +0,0 @@ -define(["exports"], function (exports) { - /* istanbul ignore next */ - /* Jison generated parser */ - "use strict"; - - var handlebars = (function () { - var parser = { trace: function trace() {}, - yy: {}, - symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition_plus0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" }, - productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 1], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$ - /**/) { - - var $0 = $$.length - 1; - switch (yystate) { - case 1: - return $$[$0 - 1]; - break; - case 2: - this.$ = yy.prepareProgram($$[$0]); - break; - case 3: - this.$ = $$[$0]; - break; - case 4: - this.$ = $$[$0]; - break; - case 5: - this.$ = $$[$0]; - break; - case 6: - this.$ = $$[$0]; - break; - case 7: - this.$ = $$[$0]; - break; - case 8: - this.$ = $$[$0]; - break; - case 9: - this.$ = { - type: 'CommentStatement', - value: yy.stripComment($$[$0]), - strip: yy.stripFlags($$[$0], $$[$0]), - loc: yy.locInfo(this._$) - }; - - break; - case 10: - this.$ = { - type: 'ContentStatement', - original: $$[$0], - value: $$[$0], - loc: yy.locInfo(this._$) - }; - - break; - case 11: - this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); - break; - case 12: - this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] }; - break; - case 13: - this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$); - break; - case 14: - this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$); - break; - case 15: - this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; - break; - case 16: - this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; - break; - case 17: - this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; - break; - case 18: - this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] }; - break; - case 19: - var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$), - program = yy.prepareProgram([inverse], $$[$0 - 1].loc); - program.chained = true; - - this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true }; - - break; - case 20: - this.$ = $$[$0]; - break; - case 21: - this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) }; - break; - case 22: - this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); - break; - case 23: - this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); - break; - case 24: - this.$ = { - type: 'PartialStatement', - name: $$[$0 - 3], - params: $$[$0 - 2], - hash: $$[$0 - 1], - indent: '', - strip: yy.stripFlags($$[$0 - 4], $$[$0]), - loc: yy.locInfo(this._$) - }; - - break; - case 25: - this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); - break; - case 26: - this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) }; - break; - case 27: - this.$ = $$[$0]; - break; - case 28: - this.$ = $$[$0]; - break; - case 29: - this.$ = { - type: 'SubExpression', - path: $$[$0 - 3], - params: $$[$0 - 2], - hash: $$[$0 - 1], - loc: yy.locInfo(this._$) - }; - - break; - case 30: - this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) }; - break; - case 31: - this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) }; - break; - case 32: - this.$ = yy.id($$[$0 - 1]); - break; - case 33: - this.$ = $$[$0]; - break; - case 34: - this.$ = $$[$0]; - break; - case 35: - this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) }; - break; - case 36: - this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) }; - break; - case 37: - this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) }; - break; - case 38: - this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) }; - break; - case 39: - this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) }; - break; - case 40: - this.$ = $$[$0]; - break; - case 41: - this.$ = $$[$0]; - break; - case 42: - this.$ = yy.preparePath(true, $$[$0], this._$); - break; - case 43: - this.$ = yy.preparePath(false, $$[$0], this._$); - break; - case 44: - $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2]; - break; - case 45: - this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }]; - break; - case 46: - this.$ = []; - break; - case 47: - $$[$0 - 1].push($$[$0]); - break; - case 48: - this.$ = [$$[$0]]; - break; - case 49: - $$[$0 - 1].push($$[$0]); - break; - case 50: - this.$ = []; - break; - case 51: - $$[$0 - 1].push($$[$0]); - break; - case 58: - this.$ = []; - break; - case 59: - $$[$0 - 1].push($$[$0]); - break; - case 64: - this.$ = []; - break; - case 65: - $$[$0 - 1].push($$[$0]); - break; - case 70: - this.$ = []; - break; - case 71: - $$[$0 - 1].push($$[$0]); - break; - case 78: - this.$ = []; - break; - case 79: - $$[$0 - 1].push($$[$0]); - break; - case 82: - this.$ = []; - break; - case 83: - $$[$0 - 1].push($$[$0]); - break; - case 86: - this.$ = []; - break; - case 87: - $$[$0 - 1].push($$[$0]); - break; - case 90: - this.$ = []; - break; - case 91: - $$[$0 - 1].push($$[$0]); - break; - case 94: - this.$ = []; - break; - case 95: - $$[$0 - 1].push($$[$0]); - break; - case 98: - this.$ = [$$[$0]]; - break; - case 99: - $$[$0 - 1].push($$[$0]); - break; - case 100: - this.$ = [$$[$0]]; - break; - case 101: - $$[$0 - 1].push($$[$0]); - break; - } - }, - table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 13: 40, 15: [1, 20], 17: 39 }, { 20: 42, 56: 41, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 45, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 48, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 42, 56: 49, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 50, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 51] }, { 72: [1, 35], 86: 52 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 53, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 54, 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 55, 47: [2, 54] }, { 28: 60, 43: 61, 44: [1, 59], 47: [2, 56] }, { 13: 63, 15: [1, 20], 18: [1, 62] }, { 15: [2, 48], 18: [2, 48] }, { 33: [2, 86], 57: 64, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 65, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 66, 47: [1, 67] }, { 30: 68, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 69, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 70, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 71, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 75, 33: [2, 80], 50: 72, 63: 73, 64: 76, 65: [1, 44], 69: 74, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 80] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 51] }, { 20: 75, 53: 81, 54: [2, 84], 63: 82, 64: 76, 65: [1, 44], 69: 83, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 84, 47: [1, 67] }, { 47: [2, 55] }, { 4: 85, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 86, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 87, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 88, 47: [1, 67] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 75, 33: [2, 88], 58: 89, 63: 90, 64: 76, 65: [1, 44], 69: 91, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 92, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 93, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 31: 94, 33: [2, 60], 63: 95, 64: 76, 65: [1, 44], 69: 96, 70: 77, 71: 78, 72: [1, 79], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 66], 36: 97, 63: 98, 64: 76, 65: [1, 44], 69: 99, 70: 77, 71: 78, 72: [1, 79], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 22: 100, 23: [2, 52], 63: 101, 64: 76, 65: [1, 44], 69: 102, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 92], 62: 103, 63: 104, 64: 76, 65: [1, 44], 69: 105, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 106] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 107, 72: [1, 108], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 109], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 110] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 112, 46: 111, 47: [2, 76] }, { 33: [2, 70], 40: 113, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 114] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 75, 63: 116, 64: 76, 65: [1, 44], 67: 115, 68: [2, 96], 69: 117, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 118] }, { 32: 119, 33: [2, 62], 74: 120, 75: [1, 121] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 122, 74: 123, 75: [1, 121] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 124] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 125] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 109] }, { 20: 75, 63: 126, 64: 76, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 75, 33: [2, 72], 41: 127, 63: 128, 64: 76, 65: [1, 44], 69: 129, 70: 77, 71: 78, 72: [1, 79], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 130] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 131] }, { 33: [2, 63] }, { 72: [1, 133], 76: 132 }, { 33: [1, 134] }, { 33: [2, 69] }, { 15: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 135, 74: 136, 75: [1, 121] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 138], 77: [1, 137] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 139] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }], - defaultActions: { 4: [2, 1], 55: [2, 55], 57: [2, 20], 61: [2, 57], 74: [2, 81], 83: [2, 85], 87: [2, 18], 91: [2, 89], 102: [2, 53], 105: [2, 93], 111: [2, 19], 112: [2, 77], 117: [2, 97], 120: [2, 63], 123: [2, 69], 124: [2, 12], 136: [2, 75], 137: [2, 32] }, - parseError: function parseError(str, hash) { - throw new Error(str); - }, - parse: function parse(input) { - var self = this, - stack = [0], - vstack = [null], - lstack = [], - table = this.table, - yytext = "", - yylineno = 0, - yyleng = 0, - recovering = 0, - TERROR = 2, - EOF = 1; - this.lexer.setInput(input); - this.lexer.yy = this.yy; - this.yy.lexer = this.lexer; - this.yy.parser = this; - if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {}; - var yyloc = this.lexer.yylloc; - lstack.push(yyloc); - var ranges = this.lexer.options && this.lexer.options.ranges; - if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError; - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - function lex() { - var token; - token = self.lexer.lex() || 1; - if (typeof token !== "number") { - token = self.symbols_[token] || token; - } - return token; - } - var symbol, - preErrorSymbol, - state, - action, - a, - r, - yyval = {}, - p, - len, - newState, - expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - if (!recovering) { - expected = []; - for (p in table[state]) if (this.terminals_[p] && p > 2) { - expected.push("'" + this.terminals_[p] + "'"); - } - if (this.lexer.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected }); - } - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(this.lexer.yytext); - lstack.push(this.lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = this.lexer.yyleng; - yytext = this.lexer.yytext; - yylineno = this.lexer.yylineno; - yyloc = this.lexer.yylloc; - if (recovering > 0) recovering--; - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; - if (ranges) { - yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; - } - r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - /* Jison generated lexer */ - var lexer = (function () { - var lexer = { EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - setInput: function setInput(input) { - this._input = input; - this._more = this._less = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 }; - if (this.options.ranges) this.yylloc.range = [0, 0]; - this.offset = 0; - return this; - }, - input: function input() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) this.yylloc.range[1]++; - - this._input = this._input.slice(1); - return ch; - }, - unput: function unput(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len - 1); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) this.yylineno -= lines.length - 1; - var r = this.yylloc.range; - - this.yylloc = { first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - return this; - }, - more: function more() { - this._more = true; - return this; - }, - less: function less(n) { - this.unput(this.match.slice(n)); - }, - pastInput: function pastInput() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); - }, - upcomingInput: function upcomingInput() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, - showPosition: function showPosition() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - next: function next() { - if (this.done) { - return this.EOF; - } - if (!this._input) this.done = true; - - var token, match, tempMatch, index, col, lines; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (!this.options.flex) break; - } - } - if (match) { - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) this.yylineno += lines.length; - this.yylloc = { first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) this.done = false; - if (token) return token;else return; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno }); - } - }, - lex: function lex() { - var r = this.next(); - if (typeof r !== 'undefined') { - return r; - } else { - return this.lex(); - } - }, - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - popState: function popState() { - return this.conditionStack.pop(); - }, - _currentRules: function _currentRules() { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - }, - topState: function topState() { - return this.conditionStack[this.conditionStack.length - 2]; - }, - pushState: function begin(condition) { - this.begin(condition); - } }; - lexer.options = {}; - lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START - /**/) { - - function strip(start, end) { - return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng - end); - } - - var YYSTATE = YY_START; - switch ($avoiding_name_collisions) { - case 0: - if (yy_.yytext.slice(-2) === "\\\\") { - strip(0, 1); - this.begin("mu"); - } else if (yy_.yytext.slice(-1) === "\\") { - strip(0, 1); - this.begin("emu"); - } else { - this.begin("mu"); - } - if (yy_.yytext) return 15; - - break; - case 1: - return 15; - break; - case 2: - this.popState(); - return 15; - - break; - case 3: - this.begin('raw');return 15; - break; - case 4: - this.popState(); - // Should be using `this.topState()` below, but it currently - // returns the second top instead of the first top. Opened an - // issue about it at https://github.com/zaach/jison/issues/291 - if (this.conditionStack[this.conditionStack.length - 1] === 'raw') { - return 15; - } else { - yy_.yytext = yy_.yytext.substr(5, yy_.yyleng - 9); - return 'END_RAW_BLOCK'; - } - - break; - case 5: - return 15; - break; - case 6: - this.popState(); - return 14; - - break; - case 7: - return 65; - break; - case 8: - return 68; - break; - case 9: - return 19; - break; - case 10: - this.popState(); - this.begin('raw'); - return 23; - - break; - case 11: - return 55; - break; - case 12: - return 60; - break; - case 13: - return 29; - break; - case 14: - return 47; - break; - case 15: - this.popState();return 44; - break; - case 16: - this.popState();return 44; - break; - case 17: - return 34; - break; - case 18: - return 39; - break; - case 19: - return 51; - break; - case 20: - return 48; - break; - case 21: - this.unput(yy_.yytext); - this.popState(); - this.begin('com'); - - break; - case 22: - this.popState(); - return 14; - - break; - case 23: - return 48; - break; - case 24: - return 73; - break; - case 25: - return 72; - break; - case 26: - return 72; - break; - case 27: - return 87; - break; - case 28: - // ignore whitespace - break; - case 29: - this.popState();return 54; - break; - case 30: - this.popState();return 33; - break; - case 31: - yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80; - break; - case 32: - yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80; - break; - case 33: - return 85; - break; - case 34: - return 82; - break; - case 35: - return 82; - break; - case 36: - return 83; - break; - case 37: - return 84; - break; - case 38: - return 81; - break; - case 39: - return 75; - break; - case 40: - return 77; - break; - case 41: - return 72; - break; - case 42: - yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72; - break; - case 43: - return 'INVALID'; - break; - case 44: - return 5; - break; - } - }; - lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^\/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]*?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/]; - lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } }; - return lexer; - })(); - parser.lexer = lexer; - function Parser() { - this.yy = {}; - }Parser.prototype = parser;parser.Parser = Parser; - return new Parser(); - })();exports.__esModule = true; - exports['default'] = handlebars; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLFFBQUksVUFBVSxHQUFHLENBQUMsWUFBVTtBQUM1QixZQUFJLE1BQU0sR0FBRyxFQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssR0FBRyxFQUFHO0FBQ3pDLGNBQUUsRUFBRSxFQUFFO0FBQ04sb0JBQVEsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsMkJBQTJCLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsMEJBQTBCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFB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RUFBRSxFQUFDLEtBQUssRUFBQztBQUM1ZSx3QkFBWSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFB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QUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RFLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2Riw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEYsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JJLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckksOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvRSw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUNILDRCQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDOzRCQUM3RSxPQUFPLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekQsK0JBQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDOztBQUV2Qiw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQzs7QUFFdEUsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQztBQUMxRSw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RILDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEgsOEJBQU07QUFB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SyxFQUFFO0FBQUUsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEcsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7QUFDM0QsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQywwQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssR0FBRztBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0IsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEdBQUc7QUFBQywwQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0IsOEJBQU07QUFBQSxpQkFDTDthQUNBO0FBQ0QsaUJBQUssRUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQztBQUN4Z1csMEJBQWMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVB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QUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLCtCQUFPLEVBQUUsQ0FBQztBQUNsQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUNMLDRCQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2Qiw0QkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hCLDRCQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUNMLDRCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsK0JBQU8sRUFBRSxDQUFDOztBQUVaLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFOztBQUNQLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMkJBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFDLEdBQUcsQ0FBQyxDQUFDLEFBQUMsT0FBTyxFQUFF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RUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUMsRUFBQyxLQUFLLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUMsRUFBQyxTQUFTLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxJQUFJLEVBQUMsRUFBQyxDQUFDO0FBQzNVLG1CQUFPLEtBQUssQ0FBQztTQUFDLENBQUEsRUFBRyxDQUFBO0FBQ2pCLGNBQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLGlCQUFTLE1BQU0sR0FBSTtBQUFFLGdCQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUFFLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JGLGVBQU8sSUFBSSxNQUFNLEVBQUEsQ0FBQztLQUNqQixDQUFBLEVBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMvQixXQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDIiwiZmlsZSI6InBhcnNlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4vKiBKaXNvbiBnZW5lcmF0ZWQgcGFyc2VyICovXG52YXIgaGFuZGxlYmFycyA9IChmdW5jdGlvbigpe1xudmFyIHBhcnNlciA9IHt0cmFjZTogZnVuY3Rpb24gdHJhY2UoKSB7IH0sXG55eToge30sXG5zeW1ib2xzXzoge1wiZXJyb3JcIjoyLFwicm9vdFwiOjMsXCJwcm9ncmFtXCI6NCxcIkVPRlwiOjUsXCJwcm9ncmFtX3JlcGV0aXRpb24wXCI6NixcInN0YXRlbWVudFwiOjcsXCJtdXN0YWNoZVwiOjgsXCJibG9ja1wiOjksXCJyYXdCbG9ja1wiOjEwLFwicGFydGlhbFwiOjExLFwicGFydGlhbEJsb2NrXCI6MTIsXCJjb250ZW50XCI6MTMsXCJDT01NRU5UXCI6MTQsXCJDT05URU5UXCI6MTUsXCJvcGVuUmF3QmxvY2tcIjoxNixcInJhd0Jsb2NrX3JlcGV0aXRpb25fcGx1czBcIjoxNyxcIkVORF9SQVdfQkxPQ0tcIjoxOCxcIk9QRU5fUkFXX0JMT0NLXCI6MTksXCJoZWxwZXJOYW1lXCI6MjAsXCJvcGVuUmF3QmxvY2tfcmVwZXRpdGlvbjBcIjoyMSxcIm9wZW5SYXdCbG9ja19vcHRpb24wXCI6MjIsXCJDTE9TRV9SQVdfQkxPQ0tcIjoyMyxcIm9wZW5CbG9ja1wiOjI0LFwiYmxvY2tfb3B0aW9uMFwiOjI1LFwiY2xvc2VCbG9ja1wiOjI2LFwib3BlbkludmVyc2VcIjoyNyxcImJsb2NrX29wdGlvbjFcIjoyOCxcIk9QRU5fQkxPQ0tcIjoyOSxcIm9wZW5CbG9ja19yZXBldGl0aW9uMFwiOjMwLFwib3BlbkJsb2NrX29wdGlvbjBcIjozMSxcIm9wZW5CbG9ja19vcHRpb24xXCI6MzIsXCJDTE9TRVwiOjMzLFwiT1BFTl9JTlZFUlNFXCI6MzQsXCJvcGVuSW52ZXJzZV9yZXBldGl0aW9uMFwiOjM1LFwib3BlbkludmVyc2Vfb3B0aW9uMFwiOjM2LFwib3BlbkludmVyc2Vfb3B0aW9uMVwiOjM3LFwib3BlbkludmVyc2VDaGFpblwiOjM4LFwiT1BFTl9JTlZFUlNFX0NIQUlOXCI6MzksXCJvcGVuSW52ZXJzZUNoYWluX3JlcGV0aXRpb24wXCI6NDAsXCJvcGVuSW52ZXJzZUNoYWluX29wdGlvbjBcIjo0MSxcIm9wZW5JbnZlcnNlQ2hhaW5fb3B0aW9uMVwiOjQyLFwiaW52ZXJzZUFuZFByb2dyYW1cIjo0MyxcIklOVkVSU0VcIjo0NCxcImludmVyc2VDaGFpblwiOjQ1LFwiaW52ZXJzZUNoYWluX29wdGlvbjBcIjo0NixcIk9QRU5fRU5EQkxPQ0tcIjo0NyxcIk9QRU5cIjo0OCxcIm11c3RhY2hlX3JlcGV0aXRpb24wXCI6NDksXCJtdXN0YWNoZV9vcHRpb24wXCI6NTAsXCJPUEVOX1VORVNDQVBFRFwiOjUxLFwibXVzdGFjaGVfcmVwZXRpdGlvbjFcIjo1MixcIm11c3RhY2hlX29wdGlvbjFcIjo1MyxcIkNMT1NFX1VORVNDQVBFRFwiOjU0LFwiT1BFTl9QQVJUSUFMXCI6NTUsXCJwYXJ0aWFsTmFtZVwiOjU2LFwicGFydGlhbF9yZXBldGl0aW9uMFwiOjU3LFwicGFydGlhbF9vcHRpb24wXCI6NTgsXCJvcGVuUGFydGlhbEJsb2NrXCI6NTksXCJPUEVOX1BBUlRJQUxfQkxPQ0tcIjo2MCxcIm9wZW5QYXJ0aWFsQmxvY2tfcmVwZXRpdGlvbjBcIjo2MSxcIm9wZW5QYXJ0aWFsQmxvY2tfb3B0aW9uMFwiOjYyLFwicGFyYW1cIjo2MyxcInNleHByXCI6NjQsXCJPUEVOX1NFWFBSXCI6NjUsXCJzZXhwcl9yZXBldGl0aW9uMFwiOjY2LFwic2V4cHJfb3B0aW9uMFwiOjY3LFwiQ0xPU0VfU0VYUFJcIjo2OCxcImhhc2hcIjo2OSxcImhhc2hfcmVwZXRpdGlvbl9wbHVzMFwiOjcwLFwiaGFzaFNlZ21lbnRcIjo3MSxcIklEXCI6NzIsXCJFUVVBTFNcIjo3MyxcImJsb2NrUGFyYW1zXCI6NzQsXCJPUEVOX0JMT0NLX1BBUkFNU1wiOjc1LFwiYmxvY2tQYXJhbXNfcmVwZXRpdGlvbl9wbHVzMFwiOjc2LFwiQ0xPU0VfQkxPQ0tfUEFSQU1TXCI6NzcsXCJwYXRoXCI6NzgsXCJkYXRhTmFtZVwiOjc5LFwiU1RSSU5HXCI6ODAsXCJOVU1CRVJcIjo4MSxcIkJPT0xFQU5cIjo4MixcIlVOREVGSU5FRFwiOjgzLFwiTlVMTFwiOjg0LFwiREFUQVwiOjg1LFwicGF0aFNlZ21lbnRzXCI6ODYsXCJTRVBcIjo4NyxcIiRhY2NlcHRcIjowLFwiJGVuZFwiOjF9LFxudGVybWluYWxzXzogezI6XCJlcnJvclwiLDU6XCJFT0ZcIiwxNDpcIkNPTU1FTlRcIiwxNTpcIkNPTlRFTlRcIiwxODpcIkVORF9SQVdfQkxPQ0tcIiwxOTpcIk9QRU5fUkFXX0JMT0NLXCIsMjM6XCJDTE9TRV9SQVdfQkxPQ0tcIiwyOTpcIk9QRU5fQkxPQ0tcIiwzMzpcIkNMT1NFXCIsMzQ6XCJPUEVOX0lOVkVSU0VcIiwzOTpcIk9QRU5fSU5WRVJTRV9DSEFJTlwiLDQ0OlwiSU5WRVJTRVwiLDQ3OlwiT1BFTl9FTkRCTE9DS1wiLDQ4OlwiT1BFTlwiLDUxOlwiT1BFTl9VTkVTQ0FQRURcIiw1NDpcIkNMT1NFX1VORVNDQVBFRFwiLDU1OlwiT1BFTl9QQVJUSUFMXCIsNjA6XCJPUEVOX1BBUlRJQUxfQkxPQ0tcIiw2NTpcIk9QRU5fU0VYUFJcIiw2ODpcIkNMT1NFX1NFWFBSXCIsNzI6XCJJRFwiLDczOlwiRVFVQUxTXCIsNzU6XCJPUEVOX0JMT0NLX1BBUkFNU1wiLDc3OlwiQ0xPU0VfQkxPQ0tfUEFSQU1TXCIsODA6XCJTVFJJTkdcIiw4MTpcIk5VTUJFUlwiLDgyOlwiQk9PTEVBTlwiLDgzOlwiVU5ERUZJTkVEXCIsODQ6XCJOVUxMXCIsODU6XCJEQVRBXCIsODc6XCJTRVBcIn0sXG5wcm9kdWN0aW9uc186IFswLFszLDJdLFs0LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFsxMywxXSxbMTAsM10sWzE2LDVdLFs5LDRdLFs5LDRdLFsyNCw2XSxbMjcsNl0sWzM4LDZdLFs0MywyXSxbNDUsM10sWzQ1LDFdLFsyNiwzXSxbOCw1XSxbOCw1XSxbMTEsNV0sWzEyLDNdLFs1OSw1XSxbNjMsMV0sWzYzLDFdLFs2NCw1XSxbNjksMV0sWzcxLDNdLFs3NCwzXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzU2LDFdLFs1NiwxXSxbNzksMl0sWzc4LDFdLFs4NiwzXSxbODYsMV0sWzYsMF0sWzYsMl0sWzE3LDFdLFsxNywyXSxbMjEsMF0sWzIxLDJdLFsyMiwwXSxbMjIsMV0sWzI1LDBdLFsyNSwxXSxbMjgsMF0sWzI4LDFdLFszMCwwXSxbMzAsMl0sWzMxLDBdLFszMSwxXSxbMzIsMF0sWzMyLDFdLFszNSwwXSxbMzUsMl0sWzM2LDBdLFszNiwxXSxbMzcsMF0sWzM3LDFdLFs0MCwwXSxbNDAsMl0sWzQxLDBdLFs0MSwxXSxbNDIsMF0sWzQyLDFdLFs0NiwwXSxbNDYsMV0sWzQ5LDBdLFs0OSwyXSxbNTAsMF0sWzUwLDFdLFs1MiwwXSxbNTIsMl0sWzUzLDBdLFs1MywxXSxbNTcsMF0sWzU3LDJdLFs1OCwwXSxbNTgsMV0sWzYxLDBdLFs2MSwyXSxbNjIsMF0sWzYyLDFdLFs2NiwwXSxbNjYsMl0sWzY3LDBdLFs2NywxXSxbNzAsMV0sWzcwLDJdLFs3NiwxXSxbNzYsMl1dLFxucGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCx5eWxlbmcseXlsaW5lbm8seXkseXlzdGF0ZSwkJCxfJFxuLyoqLykge1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6IHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjp0aGlzLiQgPSB5eS5wcmVwYXJlUHJvZ3JhbSgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDM6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDQ6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDU6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDY6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDc6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDk6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbW1lbnRTdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMTA6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbnRlbnRTdGF0ZW1lbnQnLFxuICAgICAgb3JpZ2luYWw6ICQkWyQwXSxcbiAgICAgIHZhbHVlOiAkJFskMF0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAxMTp0aGlzLiQgPSB5eS5wcmVwYXJlUmF3QmxvY2soJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDEyOnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdIH07XG5icmVhaztcbmNhc2UgMTM6dGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE0OnRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRydWUsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMuJCA9IHsgb3BlbjogJCRbJDAtNV0sIHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTc6dGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxODp0aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTFdLCAkJFskMC0xXSksIHByb2dyYW06ICQkWyQwXSB9O1xuYnJlYWs7XG5jYXNlIDE5OlxuICAgIHZhciBpbnZlcnNlID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKSxcbiAgICAgICAgcHJvZ3JhbSA9IHl5LnByZXBhcmVQcm9ncmFtKFtpbnZlcnNlXSwgJCRbJDAtMV0ubG9jKTtcbiAgICBwcm9ncmFtLmNoYWluZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kID0geyBzdHJpcDogJCRbJDAtMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07XG4gIFxuYnJlYWs7XG5jYXNlIDIwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyMTp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMjp0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIzOnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjQ6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLFxuICAgICAgbmFtZTogJCRbJDAtM10sXG4gICAgICBwYXJhbXM6ICQkWyQwLTJdLFxuICAgICAgaGFzaDogJCRbJDAtMV0sXG4gICAgICBpbmRlbnQ6ICcnLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAyNTp0aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNjp0aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMjg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDI5OlxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgIHBhdGg6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMzA6dGhpcy4kID0ge3R5cGU6ICdIYXNoJywgcGFpcnM6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzMTp0aGlzLiQgPSB7dHlwZTogJ0hhc2hQYWlyJywga2V5OiB5eS5pZCgkJFskMC0yXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzI6dGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDMzOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAzNDp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzU6dGhpcy4kID0ge3R5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQwXSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNjp0aGlzLiQgPSB7dHlwZTogJ051bWJlckxpdGVyYWwnLCB2YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNzp0aGlzLiQgPSB7dHlwZTogJ0Jvb2xlYW5MaXRlcmFsJywgdmFsdWU6ICQkWyQwXSA9PT0gJ3RydWUnLCBvcmlnaW5hbDogJCRbJDBdID09PSAndHJ1ZScsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzg6dGhpcy4kID0ge3R5cGU6ICdVbmRlZmluZWRMaXRlcmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzOTp0aGlzLiQgPSB7dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDQwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA0MTp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgNDI6dGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0Mzp0aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0NDogJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNDU6dGhpcy4kID0gW3twYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdfV07XG5icmVhaztcbmNhc2UgNDY6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNDc6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDQ4OnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDQ5OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA1MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA1MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNTg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDY0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDY1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA3MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA3MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNzg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNzk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDgyOnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDgzOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA4Njp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA4NzokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgOTA6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgOTE6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDk0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDk1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA5ODp0aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xuY2FzZSA5OTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgMTAwOnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDEwMTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbn1cbn0sXG50YWJsZTogW3szOjEsNDoyLDU6WzIsNDZdLDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE6WzNdfSx7NTpbMSw0XX0sezU6WzIsMl0sNzo1LDg6Niw5OjcsMTA6OCwxMTo5LDEyOjEwLDEzOjExLDE0OlsxLDEyXSwxNTpbMSwyMF0sMTY6MTcsMTk6WzEsMjNdLDI0OjE1LDI3OjE2LDI5OlsxLDIxXSwzNDpbMSwyMl0sMzk6WzIsMl0sNDQ6WzIsMl0sNDc6WzIsMl0sNDg6WzEsMTNdLDUxOlsxLDE0XSw1NTpbMSwxOF0sNTk6MTksNjA6WzEsMjRdfSx7MTpbMiwxXX0sezU6WzIsNDddLDE0OlsyLDQ3XSwxNTpbMiw0N10sMTk6WzIsNDddLDI5OlsyLDQ3XSwzNDpbMiw0N10sMzk6WzIsNDddLDQ0OlsyLDQ3XSw0NzpbMiw0N10sNDg6WzIsNDddLDUxOlsyLDQ3XSw1NTpbMiw0N10sNjA6WzIsNDddfSx7NTpbMiwzXSwxNDpbMiwzXSwxNTpbMiwzXSwxOTpbMiwzXSwyOTpbMiwzXSwzNDpbMiwzXSwzOTpbMiwzXSw0NDpbMiwzXSw0NzpbMiwzXSw0ODpbMiwzXSw1MTpbMiwzXSw1NTpbMiwzXSw2MDpbMiwzXX0sezU6WzIsNF0sMTQ6WzIsNF0sMTU6WzIsNF0sMTk6WzIsNF0sMjk6WzIsNF0sMzQ6WzIsNF0sMzk6WzIsNF0sNDQ6WzIsNF0sNDc6WzIsNF0sNDg6WzIsNF0sNTE6WzIsNF0sNTU6WzIsNF0sNjA6WzIsNF19LHs1OlsyLDVdLDE0OlsyLDVdLDE1OlsyLDVdLDE5OlsyLDVdLDI5OlsyLDVdLDM0OlsyLDVdLDM5OlsyLDVdLDQ0OlsyLDVdLDQ3OlsyLDVdLDQ4OlsyLDVdLDUxOlsyLDVdLDU1OlsyLDVdLDYwOlsyLDVdfSx7NTpbMiw2XSwxNDpbMiw2XSwxNTpbMiw2XSwxOTpbMiw2XSwyOTpbMiw2XSwzNDpbMiw2XSwzOTpbMiw2XSw0NDpbMiw2XSw0NzpbMiw2XSw0ODpbMiw2XSw1MTpbMiw2XSw1NTpbMiw2XSw2MDpbMiw2XX0sezU6WzIsN10sMTQ6WzIsN10sMTU6WzIsN10sMTk6WzIsN10sMjk6WzIsN10sMzQ6WzIsN10sMzk6WzIsN10sNDQ6WzIsN10sNDc6WzIsN10sNDg6WzIsN10sNTE6WzIsN10sNTU6WzIsN10sNjA6WzIsN119LHs1OlsyLDhdLDE0OlsyLDhdLDE1OlsyLDhdLDE5OlsyLDhdLDI5OlsyLDhdLDM0OlsyLDhdLDM5OlsyLDhdLDQ0OlsyLDhdLDQ3OlsyLDhdLDQ4OlsyLDhdLDUxOlsyLDhdLDU1OlsyLDhdLDYwOlsyLDhdfSx7NTpbMiw5XSwxNDpbMiw5XSwxNTpbMiw5XSwxOTpbMiw5XSwyOTpbMiw5XSwzNDpbMiw5XSwzOTpbMiw5XSw0NDpbMiw5XSw0NzpbMiw5XSw0ODpbMiw5XSw1MTpbMiw5XSw1NTpbMiw5XSw2MDpbMiw5XX0sezIwOjI1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjM2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6MzcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sMzk6WzIsNDZdLDQ0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NDozOCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezEzOjQwLDE1OlsxLDIwXSwxNzozOX0sezIwOjQyLDU2OjQxLDY0OjQzLDY1OlsxLDQ0XSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs0OjQ1LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ3OlsyLDQ2XSw0ODpbMiw0Nl0sNTE6WzIsNDZdLDU1OlsyLDQ2XSw2MDpbMiw0Nl19LHs1OlsyLDEwXSwxNDpbMiwxMF0sMTU6WzIsMTBdLDE4OlsyLDEwXSwxOTpbMiwxMF0sMjk6WzIsMTBdLDM0OlsyLDEwXSwzOTpbMiwxMF0sNDQ6WzIsMTBdLDQ3OlsyLDEwXSw0ODpbMiwxMF0sNTE6WzIsMTBdLDU1OlsyLDEwXSw2MDpbMiwxMF19LHsyMDo0Niw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo0Nyw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo0OCw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo0Miw1Njo0OSw2NDo0Myw2NTpbMSw0NF0sNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MzM6WzIsNzhdLDQ5OjUwLDY1OlsyLDc4XSw3MjpbMiw3OF0sODA6WzIsNzhdLDgxOlsyLDc4XSw4MjpbMiw3OF0sODM6WzIsNzhdLDg0OlsyLDc4XSw4NTpbMiw3OF19LHsyMzpbMiwzM10sMzM6WzIsMzNdLDU0OlsyLDMzXSw2NTpbMiwzM10sNjg6WzIsMzNdLDcyOlsyLDMzXSw3NTpbMiwzM10sODA6WzIsMzNdLDgxOlsyLDMzXSw4MjpbMiwzM10sODM6WzIsMzNdLDg0OlsyLDMzXSw4NTpbMiwzM119LHsyMzpbMiwzNF0sMzM6WzIsMzRdLDU0OlsyLDM0XSw2NTpbMiwzNF0sNjg6WzIsMzRdLDcyOlsyLDM0XSw3NTpbMiwzNF0sODA6WzIsMzRdLDgxOlsyLDM0XSw4MjpbMiwzNF0sODM6WzIsMzRdLDg0OlsyLDM0XSw4NTpbMiwzNF19LHsyMzpbMiwzNV0sMzM6WzIsMzVdLDU0OlsyLDM1XSw2NTpbMiwzNV0sNjg6WzIsMzVdLDcyOlsyLDM1XSw3NTpbMiwzNV0sODA6WzIsMzVdLDgxOlsyLDM1XSw4MjpbMiwzNV0sODM6WzIsMzVdLDg0OlsyLDM1XSw4NTpbMiwzNV19LHsyMzpbMiwzNl0sMzM6WzIsMzZdLDU0OlsyLDM2XSw2NTpbMiwzNl0sNjg6WzIsMzZdLDcyOlsyLDM2XSw3NTpbMiwzNl0sODA6WzIsMzZdLDgxOlsyLDM2XSw4MjpbMiwzNl0sODM6WzIsMzZdLDg0OlsyLDM2XSw4NTpbMiwzNl19LHsyMzpbMiwzN10sMzM6WzIsMzddLDU0OlsyLDM3XSw2NTpbMiwzN10sNjg6WzIsMzddLDcyOlsyLDM3XSw3NTpbMiwzN10sODA6WzIsMzddLDgxOlsyLDM3XSw4MjpbMiwzN10sODM6WzIsMzddLDg0OlsyLDM3XSw4NTpbMiwzN119LHsyMzpbMiwzOF0sMzM6WzIsMzhdLDU0OlsyLDM4XSw2NTpbMiwzOF0sNjg6WzIsMzhdLDcyOlsyLDM4XSw3NTpbMiwzOF0sODA6WzIsMzhdLDgxOlsyLDM4XSw4MjpbMiwzOF0sODM6WzIsMzhdLDg0OlsyLDM4XSw4NTpbMiwzOF19LHsyMzpbMiwzOV0sMzM6WzIsMzldLDU0OlsyLDM5XSw2NTpbMiwzOV0sNjg6WzIsMzldLDcyOlsyLDM5XSw3NTpbMiwzOV0sODA6WzIsMzldLDgxOlsyLDM5XSw4MjpbMiwzOV0sODM6WzIsMzldLDg0OlsyLDM5XSw4NTpbMiwzOV19LHsyMzpbMiw0M10sMzM6WzIsNDNdLDU0OlsyLDQzXSw2NTpbMiw0M10sNjg6WzIsNDNdLDcyOlsyLDQzXSw3NTpbMiw0M10sODA6WzIsNDNdLDgxOlsyLDQzXSw4MjpbMiw0M10sODM6WzIsNDNdLDg0OlsyLDQzXSw4NTpbMiw0M10sODc6WzEsNTFdfSx7NzI6WzEsMzVdLDg2OjUyfSx7MjM6WzIsNDVdLDMzOlsyLDQ1XSw1NDpbMiw0NV0sNjU6WzIsNDVdLDY4OlsyLDQ1XSw3MjpbMiw0NV0sNzU6WzIsNDVdLDgwOlsyLDQ1XSw4MTpbMiw0NV0sODI6WzIsNDVdLDgzOlsyLDQ1XSw4NDpbMiw0NV0sODU6WzIsNDVdLDg3OlsyLDQ1XX0sezUyOjUzLDU0OlsyLDgyXSw2NTpbMiw4Ml0sNzI6WzIsODJdLDgwOlsyLDgyXSw4MTpbMiw4Ml0sODI6WzIsODJdLDgzOlsyLDgyXSw4NDpbMiw4Ml0sODU6WzIsODJdfSx7MjU6NTQsMzg6NTYsMzk6WzEsNThdLDQzOjU3LDQ0OlsxLDU5XSw0NTo1NSw0NzpbMiw1NF19LHsyODo2MCw0Mzo2MSw0NDpbMSw1OV0sNDc6WzIsNTZdfSx7MTM6NjMsMTU6WzEsMjBdLDE4OlsxLDYyXX0sezE1OlsyLDQ4XSwxODpbMiw0OF19LHszMzpbMiw4Nl0sNTc6NjQsNjU6WzIsODZdLDcyOlsyLDg2XSw4MDpbMiw4Nl0sODE6WzIsODZdLDgyOlsyLDg2XSw4MzpbMiw4Nl0sODQ6WzIsODZdLDg1OlsyLDg2XX0sezMzOlsyLDQwXSw2NTpbMiw0MF0sNzI6WzIsNDBdLDgwOlsyLDQwXSw4MTpbMiw0MF0sODI6WzIsNDBdLDgzOlsyLDQwXSw4NDpbMiw0MF0sODU6WzIsNDBdfSx7MzM6WzIsNDFdLDY1OlsyLDQxXSw3MjpbMiw0MV0sODA6WzIsNDFdLDgxOlsyLDQxXSw4MjpbMiw0MV0sODM6WzIsNDFdLDg0OlsyLDQxXSw4NTpbMiw0MV19LHsyMDo2NSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo2Niw0NzpbMSw2N119LHszMDo2OCwzMzpbMiw1OF0sNjU6WzIsNThdLDcyOlsyLDU4XSw3NTpbMiw1OF0sODA6WzIsNThdLDgxOlsyLDU4XSw4MjpbMiw1OF0sODM6WzIsNThdLDg0OlsyLDU4XSw4NTpbMiw1OF19LHszMzpbMiw2NF0sMzU6NjksNjU6WzIsNjRdLDcyOlsyLDY0XSw3NTpbMiw2NF0sODA6WzIsNjRdLDgxOlsyLDY0XSw4MjpbMiw2NF0sODM6WzIsNjRdLDg0OlsyLDY0XSw4NTpbMiw2NF19LHsyMTo3MCwyMzpbMiw1MF0sNjU6WzIsNTBdLDcyOlsyLDUwXSw4MDpbMiw1MF0sODE6WzIsNTBdLDgyOlsyLDUwXSw4MzpbMiw1MF0sODQ6WzIsNTBdLDg1OlsyLDUwXX0sezMzOlsyLDkwXSw2MTo3MSw2NTpbMiw5MF0sNzI6WzIsOTBdLDgwOlsyLDkwXSw4MTpbMiw5MF0sODI6WzIsOTBdLDgzOlsyLDkwXSw4NDpbMiw5MF0sODU6WzIsOTBdfSx7MjA6NzUsMzM6WzIsODBdLDUwOjcyLDYzOjczLDY0Ojc2LDY1OlsxLDQ0XSw2OTo3NCw3MDo3Nyw3MTo3OCw3MjpbMSw3OV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs3MjpbMSw4MF19LHsyMzpbMiw0Ml0sMzM6WzIsNDJdLDU0OlsyLDQyXSw2NTpbMiw0Ml0sNjg6WzIsNDJdLDcyOlsyLDQyXSw3NTpbMiw0Ml0sODA6WzIsNDJdLDgxOlsyLDQyXSw4MjpbMiw0Ml0sODM6WzIsNDJdLDg0OlsyLDQyXSw4NTpbMiw0Ml0sODc6WzEsNTFdfSx7MjA6NzUsNTM6ODEsNTQ6WzIsODRdLDYzOjgyLDY0Ojc2LDY1OlsxLDQ0XSw2OTo4Myw3MDo3Nyw3MTo3OCw3MjpbMSw3OV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo4NCw0NzpbMSw2N119LHs0NzpbMiw1NV19LHs0Ojg1LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDM5OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezQ3OlsyLDIwXX0sezIwOjg2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6ODcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezI2Ojg4LDQ3OlsxLDY3XX0sezQ3OlsyLDU3XX0sezU6WzIsMTFdLDE0OlsyLDExXSwxNTpbMiwxMV0sMTk6WzIsMTFdLDI5OlsyLDExXSwzNDpbMiwxMV0sMzk6WzIsMTFdLDQ0OlsyLDExXSw0NzpbMiwxMV0sNDg6WzIsMTFdLDUxOlsyLDExXSw1NTpbMiwxMV0sNjA6WzIsMTFdfSx7MTU6WzIsNDldLDE4OlsyLDQ5XX0sezIwOjc1LDMzOlsyLDg4XSw1ODo4OSw2Mzo5MCw2NDo3Niw2NTpbMSw0NF0sNjk6OTEsNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NjU6WzIsOTRdLDY2OjkyLDY4OlsyLDk0XSw3MjpbMiw5NF0sODA6WzIsOTRdLDgxOlsyLDk0XSw4MjpbMiw5NF0sODM6WzIsOTRdLDg0OlsyLDk0XSw4NTpbMiw5NF19LHs1OlsyLDI1XSwxNDpbMiwyNV0sMTU6WzIsMjVdLDE5OlsyLDI1XSwyOTpbMiwyNV0sMzQ6WzIsMjVdLDM5OlsyLDI1XSw0NDpbMiwyNV0sNDc6WzIsMjVdLDQ4OlsyLDI1XSw1MTpbMiwyNV0sNTU6WzIsMjVdLDYwOlsyLDI1XX0sezIwOjkzLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc1LDMxOjk0LDMzOlsyLDYwXSw2Mzo5NSw2NDo3Niw2NTpbMSw0NF0sNjk6OTYsNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc1OlsyLDYwXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc1LDMzOlsyLDY2XSwzNjo5Nyw2Mzo5OCw2NDo3Niw2NTpbMSw0NF0sNjk6OTksNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc1OlsyLDY2XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc1LDIyOjEwMCwyMzpbMiw1Ml0sNjM6MTAxLDY0Ojc2LDY1OlsxLDQ0XSw2OToxMDIsNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NzUsMzM6WzIsOTJdLDYyOjEwMyw2MzoxMDQsNjQ6NzYsNjU6WzEsNDRdLDY5OjEwNSw3MDo3Nyw3MTo3OCw3MjpbMSw3OV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHszMzpbMSwxMDZdfSx7MzM6WzIsNzldLDY1OlsyLDc5XSw3MjpbMiw3OV0sODA6WzIsNzldLDgxOlsyLDc5XSw4MjpbMiw3OV0sODM6WzIsNzldLDg0OlsyLDc5XSw4NTpbMiw3OV19LHszMzpbMiw4MV19LHsyMzpbMiwyN10sMzM6WzIsMjddLDU0OlsyLDI3XSw2NTpbMiwyN10sNjg6WzIsMjddLDcyOlsyLDI3XSw3NTpbMiwyN10sODA6WzIsMjddLDgxOlsyLDI3XSw4MjpbMiwyN10sODM6WzIsMjddLDg0OlsyLDI3XSw4NTpbMiwyN119LHsyMzpbMiwyOF0sMzM6WzIsMjhdLDU0OlsyLDI4XSw2NTpbMiwyOF0sNjg6WzIsMjhdLDcyOlsyLDI4XSw3NTpbMiwyOF0sODA6WzIsMjhdLDgxOlsyLDI4XSw4MjpbMiwyOF0sODM6WzIsMjhdLDg0OlsyLDI4XSw4NTpbMiwyOF19LHsyMzpbMiwzMF0sMzM6WzIsMzBdLDU0OlsyLDMwXSw2ODpbMiwzMF0sNzE6MTA3LDcyOlsxLDEwOF0sNzU6WzIsMzBdfSx7MjM6WzIsOThdLDMzOlsyLDk4XSw1NDpbMiw5OF0sNjg6WzIsOThdLDcyOlsyLDk4XSw3NTpbMiw5OF19LHsyMzpbMiw0NV0sMzM6WzIsNDVdLDU0OlsyLDQ1XSw2NTpbMiw0NV0sNjg6WzIsNDVdLDcyOlsyLDQ1XSw3MzpbMSwxMDldLDc1OlsyLDQ1XSw4MDpbMiw0NV0sODE6WzIsNDVdLDgyOlsyLDQ1XSw4MzpbMiw0NV0sODQ6WzIsNDVdLDg1OlsyLDQ1XSw4NzpbMiw0NV19LHsyMzpbMiw0NF0sMzM6WzIsNDRdLDU0OlsyLDQ0XSw2NTpbMiw0NF0sNjg6WzIsNDRdLDcyOlsyLDQ0XSw3NTpbMiw0NF0sODA6WzIsNDRdLDgxOlsyLDQ0XSw4MjpbMiw0NF0sODM6WzIsNDRdLDg0OlsyLDQ0XSw4NTpbMiw0NF0sODc6WzIsNDRdfSx7NTQ6WzEsMTEwXX0sezU0OlsyLDgzXSw2NTpbMiw4M10sNzI6WzIsODNdLDgwOlsyLDgzXSw4MTpbMiw4M10sODI6WzIsODNdLDgzOlsyLDgzXSw4NDpbMiw4M10sODU6WzIsODNdfSx7NTQ6WzIsODVdfSx7NTpbMiwxM10sMTQ6WzIsMTNdLDE1OlsyLDEzXSwxOTpbMiwxM10sMjk6WzIsMTNdLDM0OlsyLDEzXSwzOTpbMiwxM10sNDQ6WzIsMTNdLDQ3OlsyLDEzXSw0ODpbMiwxM10sNTE6WzIsMTNdLDU1OlsyLDEzXSw2MDpbMiwxM119LHszODo1NiwzOTpbMSw1OF0sNDM6NTcsNDQ6WzEsNTldLDQ1OjExMiw0NjoxMTEsNDc6WzIsNzZdfSx7MzM6WzIsNzBdLDQwOjExMyw2NTpbMiw3MF0sNzI6WzIsNzBdLDc1OlsyLDcwXSw4MDpbMiw3MF0sODE6WzIsNzBdLDgyOlsyLDcwXSw4MzpbMiw3MF0sODQ6WzIsNzBdLDg1OlsyLDcwXX0sezQ3OlsyLDE4XX0sezU6WzIsMTRdLDE0OlsyLDE0XSwxNTpbMiwxNF0sMTk6WzIsMTRdLDI5OlsyLDE0XSwzNDpbMiwxNF0sMzk6WzIsMTRdLDQ0OlsyLDE0XSw0NzpbMiwxNF0sNDg6WzIsMTRdLDUxOlsyLDE0XSw1NTpbMiwxNF0sNjA6WzIsMTRdfSx7MzM6WzEsMTE0XX0sezMzOlsyLDg3XSw2NTpbMiw4N10sNzI6WzIsODddLDgwOlsyLDg3XSw4MTpbMiw4N10sODI6WzIsODddLDgzOlsyLDg3XSw4NDpbMiw4N10sODU6WzIsODddfSx7MzM6WzIsODldfSx7MjA6NzUsNjM6MTE2LDY0Ojc2LDY1OlsxLDQ0XSw2NzoxMTUsNjg6WzIsOTZdLDY5OjExNyw3MDo3Nyw3MTo3OCw3MjpbMSw3OV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHszMzpbMSwxMThdfSx7MzI6MTE5LDMzOlsyLDYyXSw3NDoxMjAsNzU6WzEsMTIxXX0sezMzOlsyLDU5XSw2NTpbMiw1OV0sNzI6WzIsNTldLDc1OlsyLDU5XSw4MDpbMiw1OV0sODE6WzIsNTldLDgyOlsyLDU5XSw4MzpbMiw1OV0sODQ6WzIsNTldLDg1OlsyLDU5XX0sezMzOlsyLDYxXSw3NTpbMiw2MV19LHszMzpbMiw2OF0sMzc6MTIyLDc0OjEyMyw3NTpbMSwxMjFdfSx7MzM6WzIsNjVdLDY1OlsyLDY1XSw3MjpbMiw2NV0sNzU6WzIsNjVdLDgwOlsyLDY1XSw4MTpbMiw2NV0sODI6WzIsNjVdLDgzOlsyLDY1XSw4NDpbMiw2NV0sODU6WzIsNjVdfSx7MzM6WzIsNjddLDc1OlsyLDY3XX0sezIzOlsxLDEyNF19LHsyMzpbMiw1MV0sNjU6WzIsNTFdLDcyOlsyLDUxXSw4MDpbMiw1MV0sODE6WzIsNTFdLDgyOlsyLDUxXSw4MzpbMiw1MV0sODQ6WzIsNTFdLDg1OlsyLDUxXX0sezIzOlsyLDUzXX0sezMzOlsxLDEyNV19LHszMzpbMiw5MV0sNjU6WzIsOTFdLDcyOlsyLDkxXSw4MDpbMiw5MV0sODE6WzIsOTFdLDgyOlsyLDkxXSw4MzpbMiw5MV0sODQ6WzIsOTFdLDg1OlsyLDkxXX0sezMzOlsyLDkzXX0sezU6WzIsMjJdLDE0OlsyLDIyXSwxNTpbMiwyMl0sMTk6WzIsMjJdLDI5OlsyLDIyXSwzNDpbMiwyMl0sMzk6WzIsMjJdLDQ0OlsyLDIyXSw0NzpbMiwyMl0sNDg6WzIsMjJdLDUxOlsyLDIyXSw1NTpbMiwyMl0sNjA6WzIsMjJdfSx7MjM6WzIsOTldLDMzOlsyLDk5XSw1NDpbMiw5OV0sNjg6WzIsOTldLDcyOlsyLDk5XSw3NTpbMiw5OV19LHs3MzpbMSwxMDldfSx7MjA6NzUsNjM6MTI2LDY0Ojc2LDY1OlsxLDQ0XSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs1OlsyLDIzXSwxNDpbMiwyM10sMTU6WzIsMjNdLDE5OlsyLDIzXSwyOTpbMiwyM10sMzQ6WzIsMjNdLDM5OlsyLDIzXSw0NDpbMiwyM10sNDc6WzIsMjNdLDQ4OlsyLDIzXSw1MTpbMiwyM10sNTU6WzIsMjNdLDYwOlsyLDIzXX0sezQ3OlsyLDE5XX0sezQ3OlsyLDc3XX0sezIwOjc1LDMzOlsyLDcyXSw0MToxMjcsNjM6MTI4LDY0Ojc2LDY1OlsxLDQ0XSw2OToxMjksNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc1OlsyLDcyXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezU6WzIsMjRdLDE0OlsyLDI0XSwxNTpbMiwyNF0sMTk6WzIsMjRdLDI5OlsyLDI0XSwzNDpbMiwyNF0sMzk6WzIsMjRdLDQ0OlsyLDI0XSw0NzpbMiwyNF0sNDg6WzIsMjRdLDUxOlsyLDI0XSw1NTpbMiwyNF0sNjA6WzIsMjRdfSx7Njg6WzEsMTMwXX0sezY1OlsyLDk1XSw2ODpbMiw5NV0sNzI6WzIsOTVdLDgwOlsyLDk1XSw4MTpbMiw5NV0sODI6WzIsOTVdLDgzOlsyLDk1XSw4NDpbMiw5NV0sODU6WzIsOTVdfSx7Njg6WzIsOTddfSx7NTpbMiwyMV0sMTQ6WzIsMjFdLDE1OlsyLDIxXSwxOTpbMiwyMV0sMjk6WzIsMjFdLDM0OlsyLDIxXSwzOTpbMiwyMV0sNDQ6WzIsMjFdLDQ3OlsyLDIxXSw0ODpbMiwyMV0sNTE6WzIsMjFdLDU1OlsyLDIxXSw2MDpbMiwyMV19LHszMzpbMSwxMzFdfSx7MzM6WzIsNjNdfSx7NzI6WzEsMTMzXSw3NjoxMzJ9LHszMzpbMSwxMzRdfSx7MzM6WzIsNjldfSx7MTU6WzIsMTJdfSx7MTQ6WzIsMjZdLDE1OlsyLDI2XSwxOTpbMiwyNl0sMjk6WzIsMjZdLDM0OlsyLDI2XSw0NzpbMiwyNl0sNDg6WzIsMjZdLDUxOlsyLDI2XSw1NTpbMiwyNl0sNjA6WzIsMjZdfSx7MjM6WzIsMzFdLDMzOlsyLDMxXSw1NDpbMiwzMV0sNjg6WzIsMzFdLDcyOlsyLDMxXSw3NTpbMiwzMV19LHszMzpbMiw3NF0sNDI6MTM1LDc0OjEzNiw3NTpbMSwxMjFdfSx7MzM6WzIsNzFdLDY1OlsyLDcxXSw3MjpbMiw3MV0sNzU6WzIsNzFdLDgwOlsyLDcxXSw4MTpbMiw3MV0sODI6WzIsNzFdLDgzOlsyLDcxXSw4NDpbMiw3MV0sODU6WzIsNzFdfSx7MzM6WzIsNzNdLDc1OlsyLDczXX0sezIzOlsyLDI5XSwzMzpbMiwyOV0sNTQ6WzIsMjldLDY1OlsyLDI5XSw2ODpbMiwyOV0sNzI6WzIsMjldLDc1OlsyLDI5XSw4MDpbMiwyOV0sODE6WzIsMjldLDgyOlsyLDI5XSw4MzpbMiwyOV0sODQ6WzIsMjldLDg1OlsyLDI5XX0sezE0OlsyLDE1XSwxNTpbMiwxNV0sMTk6WzIsMTVdLDI5OlsyLDE1XSwzNDpbMiwxNV0sMzk6WzIsMTVdLDQ0OlsyLDE1XSw0NzpbMiwxNV0sNDg6WzIsMTVdLDUxOlsyLDE1XSw1NTpbMiwxNV0sNjA6WzIsMTVdfSx7NzI6WzEsMTM4XSw3NzpbMSwxMzddfSx7NzI6WzIsMTAwXSw3NzpbMiwxMDBdfSx7MTQ6WzIsMTZdLDE1OlsyLDE2XSwxOTpbMiwxNl0sMjk6WzIsMTZdLDM0OlsyLDE2XSw0NDpbMiwxNl0sNDc6WzIsMTZdLDQ4OlsyLDE2XSw1MTpbMiwxNl0sNTU6WzIsMTZdLDYwOlsyLDE2XX0sezMzOlsxLDEzOV19LHszMzpbMiw3NV19LHszMzpbMiwzMl19LHs3MjpbMiwxMDFdLDc3OlsyLDEwMV19LHsxNDpbMiwxN10sMTU6WzIsMTddLDE5OlsyLDE3XSwyOTpbMiwxN10sMzQ6WzIsMTddLDM5OlsyLDE3XSw0NDpbMiwxN10sNDc6WzIsMTddLDQ4OlsyLDE3XSw1MTpbMiwxN10sNTU6WzIsMTddLDYwOlsyLDE3XX1dLFxuZGVmYXVsdEFjdGlvbnM6IHs0OlsyLDFdLDU1OlsyLDU1XSw1NzpbMiwyMF0sNjE6WzIsNTddLDc0OlsyLDgxXSw4MzpbMiw4NV0sODc6WzIsMThdLDkxOlsyLDg5XSwxMDI6WzIsNTNdLDEwNTpbMiw5M10sMTExOlsyLDE5XSwxMTI6WzIsNzddLDExNzpbMiw5N10sMTIwOlsyLDYzXSwxMjM6WzIsNjldLDEyNDpbMiwxMl0sMTM2OlsyLDc1XSwxMzc6WzIsMzJdfSxcbnBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG59LFxucGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgIHRoaXMubGV4ZXIuc2V0SW5wdXQoaW5wdXQpO1xuICAgIHRoaXMubGV4ZXIueXkgPSB0aGlzLnl5O1xuICAgIHRoaXMueXkubGV4ZXIgPSB0aGlzLmxleGVyO1xuICAgIHRoaXMueXkucGFyc2VyID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRoaXMubGV4ZXIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIHRoaXMubGV4ZXIueXlsbG9jID0ge307XG4gICAgdmFyIHl5bG9jID0gdGhpcy5sZXhlci55eWxsb2M7XG4gICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgIHZhciByYW5nZXMgPSB0aGlzLmxleGVyLm9wdGlvbnMgJiYgdGhpcy5sZXhlci5vcHRpb25zLnJhbmdlcztcbiAgICBpZiAodHlwZW9mIHRoaXMueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0aGlzLnl5LnBhcnNlRXJyb3I7XG4gICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHNlbGYubGV4ZXIubGV4KCkgfHwgMTtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfVxuICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICAgIGlmICghcmVjb3ZlcmluZykge1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxleGVyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgdGhpcy5sZXhlci5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IDE/XCJlbmQgb2YgaW5wdXRcIjpcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7dGV4dDogdGhpcy5sZXhlci5tYXRjaCwgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCwgbGluZTogdGhpcy5sZXhlci55eWxpbmVubywgbG9jOiB5eWxvYywgZXhwZWN0ZWQ6IGV4cGVjdGVkfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHRoaXMubGV4ZXIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHRoaXMubGV4ZXIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgeXlsZW5nID0gdGhpcy5sZXhlci55eWxlbmc7XG4gICAgICAgICAgICAgICAgeXl0ZXh0ID0gdGhpcy5sZXhlci55eXRleHQ7XG4gICAgICAgICAgICAgICAgeXlsaW5lbm8gPSB0aGlzLmxleGVyLnl5bGluZW5vO1xuICAgICAgICAgICAgICAgIHl5bG9jID0gdGhpcy5sZXhlci55eWxsb2M7XG4gICAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKVxuICAgICAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge2ZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSwgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSwgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbiwgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW59O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW2xzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHl5dmFsLCB5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHRoaXMueXksIGFjdGlvblsxXSwgdnN0YWNrLCBsc3RhY2spO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxufTtcbi8qIEppc29uIGdlbmVyYXRlZCBsZXhlciAqL1xudmFyIGxleGVyID0gKGZ1bmN0aW9uKCl7XG52YXIgbGV4ZXIgPSAoe0VPRjoxLFxucGFyc2VFcnJvcjpmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgfSxcbnNldElucHV0OmZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fbGVzcyA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSAnJztcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFsnSU5JVElBTCddO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLDBdO1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5pbnB1dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuXG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9LFxudW5wdXQ6ZnVuY3Rpb24gKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGgtbGVuLTEpO1xuICAgICAgICAvL3RoaXMueXlsZW5nIC09IGxlbjtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aC0xKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoLTEpO1xuXG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGgtMSkgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGgtMTtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcblxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubysxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/XG4gICAgICAgICAgICAgIChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGg6XG4gICAgICAgICAgICAgIHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbm1vcmU6ZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbmxlc3M6ZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICB9LFxucGFzdElucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIH0sXG51cGNvbWluZ0lucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAtbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwyMCkrKG5leHQubGVuZ3RoID4gMjAgPyAnLi4uJzonJykpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICB9LFxuc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMrXCJeXCI7XG4gICAgfSxcbm5leHQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgICB2YXIgdG9rZW4sXG4gICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgIHRlbXBNYXRjaCxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgbGluZXM7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgICAgdGhpcy55eXRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggPSAnJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaT0wO2kgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgICAgICBpZiAobGluZXMpIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy55eWxsb2MgPSB7Zmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGluZXNbbGluZXMubGVuZ3RoLTFdLmxlbmd0aC1saW5lc1tsaW5lcy5sZW5ndGgtMV0ubWF0Y2goL1xccj9cXG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGh9O1xuICAgICAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgcnVsZXNbaW5kZXhdLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcignTGV4aWNhbCBlcnJvciBvbiBsaW5lICcrKHRoaXMueXlsaW5lbm8rMSkrJy4gVW5yZWNvZ25pemVkIHRleHQuXFxuJyt0aGlzLnNob3dQb3NpdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICB7dGV4dDogXCJcIiwgdG9rZW46IG51bGwsIGxpbmU6IHRoaXMueXlsaW5lbm99KTtcbiAgICAgICAgfVxuICAgIH0sXG5sZXg6ZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29uZGl0aW9uKTtcbiAgICB9LFxucG9wU3RhdGU6ZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgIH0sXG5fY3VycmVudFJ1bGVzOmZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM7XG4gICAgfSxcbnRvcFN0YXRlOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl07XG4gICAgfSxcbnB1c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgIH19KTtcbmxleGVyLm9wdGlvbnMgPSB7fTtcbmxleGVyLnBlcmZvcm1BY3Rpb24gPSBmdW5jdGlvbiBhbm9ueW1vdXMoeXkseXlfLCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsWVlfU1RBUlRcbi8qKi8pIHtcblxuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoc3RhcnQsIHl5Xy55eWxlbmctZW5kKTtcbn1cblxuXG52YXIgWVlTVEFURT1ZWV9TVEFSVFxuc3dpdGNoKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbmNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dC5zbGljZSgtMikgPT09IFwiXFxcXFxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcIm11XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoeXlfLnl5dGV4dC5zbGljZSgtMSkgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXAoMCwxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwiZW11XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih5eV8ueXl0ZXh0KSByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAxOnJldHVybiAxNTtcbmJyZWFrO1xuY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYnJlYWs7XG5jYXNlIDM6dGhpcy5iZWdpbigncmF3Jyk7IHJldHVybiAxNTtcbmJyZWFrO1xuY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgYmUgdXNpbmcgYHRoaXMudG9wU3RhdGUoKWAgYmVsb3csIGJ1dCBpdCBjdXJyZW50bHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRoZSBzZWNvbmQgdG9wIGluc3RlYWQgb2YgdGhlIGZpcnN0IHRvcC4gT3BlbmVkIGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXNzdWUgYWJvdXQgaXQgYXQgaHR0cHM6Ly9naXRodWIuY29tL3phYWNoL2ppc29uL2lzc3Vlcy8yOTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSA9PT0gJ3JhdycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc3Vic3RyKDUsIHl5Xy55eWxlbmctOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0VORF9SQVdfQkxPQ0snO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYnJlYWs7XG5jYXNlIDU6IHJldHVybiAxNTsgXG5icmVhaztcbmNhc2UgNjpcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICByZXR1cm4gMTQ7XG5cbmJyZWFrO1xuY2FzZSA3OnJldHVybiA2NTtcbmJyZWFrO1xuY2FzZSA4OnJldHVybiA2ODtcbmJyZWFrO1xuY2FzZSA5OiByZXR1cm4gMTk7IFxuYnJlYWs7XG5jYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKCdyYXcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAxMTpyZXR1cm4gNTU7XG5icmVhaztcbmNhc2UgMTI6cmV0dXJuIDYwO1xuYnJlYWs7XG5jYXNlIDEzOnJldHVybiAyOTtcbmJyZWFrO1xuY2FzZSAxNDpyZXR1cm4gNDc7XG5icmVhaztcbmNhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpOyByZXR1cm4gNDQ7XG5icmVhaztcbmNhc2UgMTY6dGhpcy5wb3BTdGF0ZSgpOyByZXR1cm4gNDQ7XG5icmVhaztcbmNhc2UgMTc6cmV0dXJuIDM0O1xuYnJlYWs7XG5jYXNlIDE4OnJldHVybiAzOTtcbmJyZWFrO1xuY2FzZSAxOTpyZXR1cm4gNTE7XG5icmVhaztcbmNhc2UgMjA6cmV0dXJuIDQ4O1xuYnJlYWs7XG5jYXNlIDIxOlxuICB0aGlzLnVucHV0KHl5Xy55eXRleHQpO1xuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHRoaXMuYmVnaW4oJ2NvbScpO1xuXG5icmVhaztcbmNhc2UgMjI6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgMjM6cmV0dXJuIDQ4O1xuYnJlYWs7XG5jYXNlIDI0OnJldHVybiA3MztcbmJyZWFrO1xuY2FzZSAyNTpyZXR1cm4gNzI7XG5icmVhaztcbmNhc2UgMjY6cmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDI3OnJldHVybiA4NztcbmJyZWFrO1xuY2FzZSAyODovLyBpZ25vcmUgd2hpdGVzcGFjZVxuYnJlYWs7XG5jYXNlIDI5OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDU0O1xuYnJlYWs7XG5jYXNlIDMwOnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDMzO1xuYnJlYWs7XG5jYXNlIDMxOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpOyByZXR1cm4gODA7XG5icmVhaztcbmNhc2UgMzI6eXlfLnl5dGV4dCA9IHN0cmlwKDEsMikucmVwbGFjZSgvXFxcXCcvZyxcIidcIik7IHJldHVybiA4MDtcbmJyZWFrO1xuY2FzZSAzMzpyZXR1cm4gODU7XG5icmVhaztcbmNhc2UgMzQ6cmV0dXJuIDgyO1xuYnJlYWs7XG5jYXNlIDM1OnJldHVybiA4MjtcbmJyZWFrO1xuY2FzZSAzNjpyZXR1cm4gODM7XG5icmVhaztcbmNhc2UgMzc6cmV0dXJuIDg0O1xuYnJlYWs7XG5jYXNlIDM4OnJldHVybiA4MTtcbmJyZWFrO1xuY2FzZSAzOTpyZXR1cm4gNzU7XG5icmVhaztcbmNhc2UgNDA6cmV0dXJuIDc3O1xuYnJlYWs7XG5jYXNlIDQxOnJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSA0Mjp5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9cXFxcKFtcXFxcXFxdXSkvZywnJDEnKTsgcmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDQzOnJldHVybiAnSU5WQUxJRCc7XG5icmVhaztcbmNhc2UgNDQ6cmV0dXJuIDU7XG5icmVhaztcbn1cbn07XG5sZXhlci5ydWxlcyA9IFsvXig/OlteXFx4MDBdKj8oPz0oXFx7XFx7KSkpLywvXig/OlteXFx4MDBdKykvLC9eKD86W15cXHgwMF17Mix9Pyg/PShcXHtcXHt8XFxcXFxce1xce3xcXFxcXFxcXFxce1xce3wkKSkpLywvXig/Olxce1xce1xce1xceyg/PVteXFwvXSkpLywvXig/Olxce1xce1xce1xce1xcL1teXFxzIVwiIyUtLFxcLlxcLzstPkBcXFstXFxeYFxcey1+XSsoPz1bPX1cXHNcXC8uXSlcXH1cXH1cXH1cXH0pLywvXig/OlteXFx4MDBdKj8oPz0oXFx7XFx7XFx7XFx7KSkpLywvXig/OltcXHNcXFNdKj8tLSh+KT9cXH1cXH0pLywvXig/OlxcKCkvLC9eKD86XFwpKS8sL14oPzpcXHtcXHtcXHtcXHspLywvXig/OlxcfVxcfVxcfVxcfSkvLC9eKD86XFx7XFx7KH4pPz4pLywvXig/Olxce1xceyh+KT8jPikvLC9eKD86XFx7XFx7KH4pPyNcXCo/KS8sL14oPzpcXHtcXHsofik/XFwvKS8sL14oPzpcXHtcXHsofik/XFxeXFxzKih+KT9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXHMqZWxzZVxccyoofik/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFxeKS8sL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXGIpLywvXig/Olxce1xceyh+KT9cXHspLywvXig/Olxce1xceyh+KT8mKS8sL14oPzpcXHtcXHsofik/IS0tKS8sL14oPzpcXHtcXHsofik/IVtcXHNcXFNdKj9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXCo/KS8sL14oPzo9KS8sL14oPzpcXC5cXC4pLywvXig/OlxcLig/PShbPX59XFxzXFwvLil8XSkpKS8sL14oPzpbXFwvLl0pLywvXig/OlxccyspLywvXig/OlxcfSh+KT9cXH1cXH0pLywvXig/Oih+KT9cXH1cXH0pLywvXig/OlwiKFxcXFxbXCJdfFteXCJdKSpcIikvLC9eKD86JyhcXFxcWyddfFteJ10pKicpLywvXig/OkApLywvXig/OnRydWUoPz0oW359XFxzKV0pKSkvLC9eKD86ZmFsc2UoPz0oW359XFxzKV0pKSkvLC9eKD86dW5kZWZpbmVkKD89KFt+fVxccyldKSkpLywvXig/Om51bGwoPz0oW359XFxzKV0pKSkvLC9eKD86LT9bMC05XSsoPzpcXC5bMC05XSspPyg/PShbfn1cXHMpXSkpKS8sL14oPzphc1xccytcXHwpLywvXig/OlxcfCkvLC9eKD86KFteXFxzIVwiIyUtLFxcLlxcLzstPkBcXFstXFxeYFxcey1+XSsoPz0oWz1+fVxcc1xcLy4pfF0pKSkpLywvXig/OlxcWyhcXFxcXFxdfFteXFxdXSkqXFxdKS8sL14oPzouKS8sL14oPzokKS9dO1xubGV4ZXIuY29uZGl0aW9ucyA9IHtcIm11XCI6e1wicnVsZXNcIjpbNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDRdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiZW11XCI6e1wicnVsZXNcIjpbMl0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJjb21cIjp7XCJydWxlc1wiOls2XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcInJhd1wiOntcInJ1bGVzXCI6WzMsNCw1XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcIklOSVRJQUxcIjp7XCJydWxlc1wiOlswLDEsNDRdLFwiaW5jbHVzaXZlXCI6dHJ1ZX19O1xucmV0dXJuIGxleGVyO30pKClcbnBhcnNlci5sZXhlciA9IGxleGVyO1xuZnVuY3Rpb24gUGFyc2VyICgpIHsgdGhpcy55eSA9IHt9OyB9UGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjtwYXJzZXIuUGFyc2VyID0gUGFyc2VyO1xucmV0dXJuIG5ldyBQYXJzZXI7XG59KSgpO2V4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzWydkZWZhdWx0J10gPSBoYW5kbGViYXJzO1xuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/printer.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/printer.js deleted file mode 100644 index 4f9f9c35a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/printer.js +++ /dev/null @@ -1,186 +0,0 @@ -define(['exports', './visitor'], function (exports, _visitor) { - /* eslint-disable new-cap */ - 'use strict'; - - exports.__esModule = true; - exports.print = print; - exports.PrintVisitor = PrintVisitor; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Visitor = _interopRequireDefault(_visitor); - - function print(ast) { - return new PrintVisitor().accept(ast); - } - - function PrintVisitor() { - this.padding = 0; - } - - PrintVisitor.prototype = new _Visitor['default'](); - - PrintVisitor.prototype.pad = function (string) { - var out = ''; - - for (var i = 0, l = this.padding; i < l; i++) { - out += ' '; - } - - out += string + '\n'; - return out; - }; - - PrintVisitor.prototype.Program = function (program) { - var out = '', - body = program.body, - i = undefined, - l = undefined; - - if (program.blockParams) { - var blockParams = 'BLOCK PARAMS: ['; - for (i = 0, l = program.blockParams.length; i < l; i++) { - blockParams += ' ' + program.blockParams[i]; - } - blockParams += ' ]'; - out += this.pad(blockParams); - } - - for (i = 0, l = body.length; i < l; i++) { - out += this.accept(body[i]); - } - - this.padding--; - - return out; - }; - - PrintVisitor.prototype.MustacheStatement = function (mustache) { - return this.pad('{{ ' + this.SubExpression(mustache) + ' }}'); - }; - PrintVisitor.prototype.Decorator = function (mustache) { - return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}'); - }; - - PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) { - var out = ''; - - out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:'); - this.padding++; - out += this.pad(this.SubExpression(block)); - if (block.program) { - out += this.pad('PROGRAM:'); - this.padding++; - out += this.accept(block.program); - this.padding--; - } - if (block.inverse) { - if (block.program) { - this.padding++; - } - out += this.pad('{{^}}'); - this.padding++; - out += this.accept(block.inverse); - this.padding--; - if (block.program) { - this.padding--; - } - } - this.padding--; - - return out; - }; - - PrintVisitor.prototype.PartialStatement = function (partial) { - var content = 'PARTIAL:' + partial.name.original; - if (partial.params[0]) { - content += ' ' + this.accept(partial.params[0]); - } - if (partial.hash) { - content += ' ' + this.accept(partial.hash); - } - return this.pad('{{> ' + content + ' }}'); - }; - PrintVisitor.prototype.PartialBlockStatement = function (partial) { - var content = 'PARTIAL BLOCK:' + partial.name.original; - if (partial.params[0]) { - content += ' ' + this.accept(partial.params[0]); - } - if (partial.hash) { - content += ' ' + this.accept(partial.hash); - } - - content += ' ' + this.pad('PROGRAM:'); - this.padding++; - content += this.accept(partial.program); - this.padding--; - - return this.pad('{{> ' + content + ' }}'); - }; - - PrintVisitor.prototype.ContentStatement = function (content) { - return this.pad("CONTENT[ '" + content.value + "' ]"); - }; - - PrintVisitor.prototype.CommentStatement = function (comment) { - return this.pad("{{! '" + comment.value + "' }}"); - }; - - PrintVisitor.prototype.SubExpression = function (sexpr) { - var params = sexpr.params, - paramStrings = [], - hash = undefined; - - for (var i = 0, l = params.length; i < l; i++) { - paramStrings.push(this.accept(params[i])); - } - - params = '[' + paramStrings.join(', ') + ']'; - - hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : ''; - - return this.accept(sexpr.path) + ' ' + params + hash; - }; - - PrintVisitor.prototype.PathExpression = function (id) { - var path = id.parts.join('/'); - return (id.data ? '@' : '') + 'PATH:' + path; - }; - - PrintVisitor.prototype.StringLiteral = function (string) { - return '"' + string.value + '"'; - }; - - PrintVisitor.prototype.NumberLiteral = function (number) { - return 'NUMBER{' + number.value + '}'; - }; - - PrintVisitor.prototype.BooleanLiteral = function (bool) { - return 'BOOLEAN{' + bool.value + '}'; - }; - - PrintVisitor.prototype.UndefinedLiteral = function () { - return 'UNDEFINED'; - }; - - PrintVisitor.prototype.NullLiteral = function () { - return 'NULL'; - }; - - PrintVisitor.prototype.Hash = function (hash) { - var pairs = hash.pairs, - joinedPairs = []; - - for (var i = 0, l = pairs.length; i < l; i++) { - joinedPairs.push(this.accept(pairs[i])); - } - - return 'HASH{' + joinedPairs.join(', ') + '}'; - }; - PrintVisitor.prototype.HashPair = function (pair) { - return pair.key + '=' + this.accept(pair.value); - }; - /* eslint-enable new-cap */ -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3ByaW50ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdPLFdBQVMsS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUN6QixXQUFPLElBQUksWUFBWSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0dBQ3ZDOztBQUVNLFdBQVMsWUFBWSxHQUFHO0FBQzdCLFFBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0dBQ2xCOztBQUVELGNBQVksQ0FBQyxTQUFTLEdBQUcseUJBQWEsQ0FBQzs7QUFFdkMsY0FBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsVUFBUyxNQUFNLEVBQUU7QUFDNUMsUUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDOztBQUViLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUMsU0FBRyxJQUFJLElBQUksQ0FBQztLQUNiOztBQUVELE9BQUcsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3JCLFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQzs7QUFFRixjQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUNqRCxRQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJO1FBQ25CLENBQUMsWUFBQTtRQUFFLENBQUMsWUFBQSxDQUFDOztBQUVULFFBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtBQUN2QixVQUFJLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztBQUNwQyxXQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFD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QUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qzs7QUFFRCxXQUFPLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztHQUMvQyxDQUFDO0FBQ0YsY0FBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBUyxJQUFJLEVBQUU7QUFDL0MsV0FBTyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztHQUNqRCxDQUFDIiwiZmlsZSI6InByaW50ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5pbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnQoYXN0KSB7XG4gIHJldHVybiBuZXcgUHJpbnRWaXNpdG9yKCkuYWNjZXB0KGFzdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQcmludFZpc2l0b3IoKSB7XG4gIHRoaXMucGFkZGluZyA9IDA7XG59XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUgPSBuZXcgVmlzaXRvcigpO1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLnBhZCA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBsZXQgb3V0ID0gJyc7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnBhZGRpbmc7IGkgPCBsOyBpKyspIHtcbiAgICBvdXQgKz0gJyAgJztcbiAgfVxuXG4gIG91dCArPSBzdHJpbmcgKyAnXFxuJztcbiAgcmV0dXJuIG91dDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuUHJvZ3JhbSA9IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgbGV0IG91dCA9ICcnLFxuICAgICAgYm9keSA9IHByb2dyYW0uYm9keSxcbiAgICAgIGksIGw7XG5cbiAgaWYgKHByb2dyYW0uYmxvY2tQYXJhbXMpIHtcbiAgICBsZXQgYmxvY2tQYXJhbXMgPSAnQkxPQ0sgUEFSQU1TOiBbJztcbiAgICBmb3IgKGkgPSAwLCBsID0gcHJvZ3JhbS5ibG9ja1BhcmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICBibG9ja1BhcmFtcyArPSAnICcgKyBwcm9ncmFtLmJsb2NrUGFyYW1zW2ldO1xuICAgIH1cbiAgICBibG9ja1BhcmFtcyArPSAnIF0nO1xuICAgIG91dCArPSB0aGlzLnBhZChibG9ja1BhcmFtcyk7XG4gIH1cblxuICBmb3IgKGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBvdXQgKz0gdGhpcy5hY2NlcHQoYm9keVtpXSk7XG4gIH1cblxuICB0aGlzLnBhZGRpbmctLTtcblxuICByZXR1cm4gb3V0O1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gIHJldHVybiB0aGlzLnBhZCgne3sgJyArIHRoaXMuU3ViRXhwcmVzc2lvbihtdXN0YWNoZSkgKyAnIH19Jyk7XG59O1xuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5EZWNvcmF0b3IgPSBmdW5jdGlvbihtdXN0YWNoZSkge1xuICByZXR1cm4gdGhpcy5wYWQoJ3t7IERJUkVDVElWRSAnICsgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKSArICcgfX0nKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQmxvY2tTdGF0ZW1lbnQgPVxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jayA9IGZ1bmN0aW9uKGJsb2NrKSB7XG4gIGxldCBvdXQgPSAnJztcblxuICBvdXQgKz0gdGhpcy5wYWQoKGJsb2NrLnR5cGUgPT09ICdEZWNvcmF0b3JCbG9jaycgPyAnRElSRUNUSVZFICcgOiAnJykgKyAnQkxPQ0s6Jyk7XG4gIHRoaXMucGFkZGluZysrO1xuICBvdXQgKz0gdGhpcy5wYWQodGhpcy5TdWJFeHByZXNzaW9uKGJsb2NrKSk7XG4gIGlmIChibG9jay5wcm9ncmFtKSB7XG4gICAgb3V0ICs9IHRoaXMucGFkKCdQUk9HUkFNOicpO1xuICAgIHRoaXMucGFkZGluZysrO1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgICB0aGlzLnBhZGRpbmctLTtcbiAgfVxuICBpZiAoYmxvY2suaW52ZXJzZSkge1xuICAgIGlmIChibG9jay5wcm9ncmFtKSB7IHRoaXMucGFkZGluZysrOyB9XG4gICAgb3V0ICs9IHRoaXMucGFkKCd7e159fScpO1xuICAgIHRoaXMucGFkZGluZysrO1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChibG9jay5pbnZlcnNlKTtcbiAgICB0aGlzLnBhZGRpbmctLTtcbiAgICBpZiAoYmxvY2sucHJvZ3JhbSkgeyB0aGlzLnBhZGRpbmctLTsgfVxuICB9XG4gIHRoaXMucGFkZGluZy0tO1xuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhcnRpYWxTdGF0ZW1lbnQgPSBmdW5jdGlvbihwYXJ0aWFsKSB7XG4gIGxldCBjb250ZW50ID0gJ1BBUlRJQUw6JyArIHBhcnRpYWwubmFtZS5vcmlnaW5hbDtcbiAgaWYgKHBhcnRpYWwucGFyYW1zWzBdKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLnBhcmFtc1swXSk7XG4gIH1cbiAgaWYgKHBhcnRpYWwuaGFzaCkge1xuICAgIGNvbnRlbnQgKz0gJyAnICsgdGhpcy5hY2NlcHQocGFydGlhbC5oYXNoKTtcbiAgfVxuICByZXR1cm4gdGhpcy5wYWQoJ3t7PiAnICsgY29udGVudCArICcgfX0nKTtcbn07XG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhcnRpYWxCbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgbGV0IGNvbnRlbnQgPSAnUEFSVElBTCBCTE9DSzonICsgcGFydGlhbC5uYW1lLm9yaWdpbmFsO1xuICBpZiAocGFydGlhbC5wYXJhbXNbMF0pIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRoaXMuYWNjZXB0KHBhcnRpYWwucGFyYW1zWzBdKTtcbiAgfVxuICBpZiAocGFydGlhbC5oYXNoKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLmhhc2gpO1xuICB9XG5cbiAgY29udGVudCArPSAnICcgKyB0aGlzLnBhZCgnUFJPR1JBTTonKTtcbiAgdGhpcy5wYWRkaW5nKys7XG4gIGNvbnRlbnQgKz0gdGhpcy5hY2NlcHQocGFydGlhbC5wcm9ncmFtKTtcbiAgdGhpcy5wYWRkaW5nLS07XG5cbiAgcmV0dXJuIHRoaXMucGFkKCd7ez4gJyArIGNvbnRlbnQgKyAnIH19Jyk7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkNvbnRlbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihjb250ZW50KSB7XG4gIHJldHVybiB0aGlzLnBhZChcIkNPTlRFTlRbICdcIiArIGNvbnRlbnQudmFsdWUgKyBcIicgXVwiKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQ29tbWVudFN0YXRlbWVudCA9IGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMucGFkKFwie3shICdcIiArIGNvbW1lbnQudmFsdWUgKyBcIicgfX1cIik7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlN1YkV4cHJlc3Npb24gPSBmdW5jdGlvbihzZXhwcikge1xuICBsZXQgcGFyYW1zID0gc2V4cHIucGFyYW1zLFxuICAgICAgcGFyYW1TdHJpbmdzID0gW10sXG4gICAgICBoYXNoO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcGFyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHBhcmFtU3RyaW5ncy5wdXNoKHRoaXMuYWNjZXB0KHBhcmFtc1tpXSkpO1xuICB9XG5cbiAgcGFyYW1zID0gJ1snICsgcGFyYW1TdHJpbmdzLmpvaW4oJywgJykgKyAnXSc7XG5cbiAgaGFzaCA9IHNleHByLmhhc2ggPyAnICcgKyB0aGlzLmFjY2VwdChzZXhwci5oYXNoKSA6ICcnO1xuXG4gIHJldHVybiB0aGlzLmFjY2VwdChzZXhwci5wYXRoKSArICcgJyArIHBhcmFtcyArIGhhc2g7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhdGhFeHByZXNzaW9uID0gZnVuY3Rpb24oaWQpIHtcbiAgbGV0IHBhdGggPSBpZC5wYXJ0cy5qb2luKCcvJyk7XG4gIHJldHVybiAoaWQuZGF0YSA/ICdAJyA6ICcnKSArICdQQVRIOicgKyBwYXRoO1xufTtcblxuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlN0cmluZ0xpdGVyYWwgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgcmV0dXJuICdcIicgKyBzdHJpbmcudmFsdWUgKyAnXCInO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5OdW1iZXJMaXRlcmFsID0gZnVuY3Rpb24obnVtYmVyKSB7XG4gIHJldHVybiAnTlVNQkVSeycgKyBudW1iZXIudmFsdWUgKyAnfSc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkJvb2xlYW5MaXRlcmFsID0gZnVuY3Rpb24oYm9vbCkge1xuICByZXR1cm4gJ0JPT0xFQU57JyArIGJvb2wudmFsdWUgKyAnfSc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlVuZGVmaW5lZExpdGVyYWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICdVTkRFRklORUQnO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5OdWxsTGl0ZXJhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ05VTEwnO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5IYXNoID0gZnVuY3Rpb24oaGFzaCkge1xuICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzLFxuICAgICAgam9pbmVkUGFpcnMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHBhaXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGpvaW5lZFBhaXJzLnB1c2godGhpcy5hY2NlcHQocGFpcnNbaV0pKTtcbiAgfVxuXG4gIHJldHVybiAnSEFTSHsnICsgam9pbmVkUGFpcnMuam9pbignLCAnKSArICd9Jztcbn07XG5QcmludFZpc2l0b3IucHJvdG90eXBlLkhhc2hQYWlyID0gZnVuY3Rpb24ocGFpcikge1xuICByZXR1cm4gcGFpci5rZXkgKyAnPScgKyB0aGlzLmFjY2VwdChwYWlyLnZhbHVlKTtcbn07XG4vKiBlc2xpbnQtZW5hYmxlIG5ldy1jYXAgKi9cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/visitor.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/visitor.js deleted file mode 100644 index b74d9870d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/visitor.js +++ /dev/null @@ -1,138 +0,0 @@ -define(['exports', 'module', '../exception'], function (exports, module, _exception) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - function Visitor() { - this.parents = []; - } - - Visitor.prototype = { - constructor: Visitor, - mutating: false, - - // Visits a given value. If mutating, will replace the value if necessary. - acceptKey: function acceptKey(node, name) { - var value = this.accept(node[name]); - if (this.mutating) { - // Hacky sanity check: This may have a few false positives for type for the helper - // methods but will generally do the right thing without a lot of overhead. - if (value && !Visitor.prototype[value.type]) { - throw new _Exception['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type); - } - node[name] = value; - } - }, - - // Performs an accept operation with added sanity check to ensure - // required keys are not removed. - acceptRequired: function acceptRequired(node, name) { - this.acceptKey(node, name); - - if (!node[name]) { - throw new _Exception['default'](node.type + ' requires ' + name); - } - }, - - // Traverses a given array. If mutating, empty respnses will be removed - // for child elements. - acceptArray: function acceptArray(array) { - for (var i = 0, l = array.length; i < l; i++) { - this.acceptKey(array, i); - - if (!array[i]) { - array.splice(i, 1); - i--; - l--; - } - } - }, - - accept: function accept(object) { - if (!object) { - return; - } - - /* istanbul ignore next: Sanity code */ - if (!this[object.type]) { - throw new _Exception['default']('Unknown type: ' + object.type, object); - } - - if (this.current) { - this.parents.unshift(this.current); - } - this.current = object; - - var ret = this[object.type](object); - - this.current = this.parents.shift(); - - if (!this.mutating || ret) { - return ret; - } else if (ret !== false) { - return object; - } - }, - - Program: function Program(program) { - this.acceptArray(program.body); - }, - - MustacheStatement: visitSubExpression, - Decorator: visitSubExpression, - - BlockStatement: visitBlock, - DecoratorBlock: visitBlock, - - PartialStatement: visitPartial, - PartialBlockStatement: function PartialBlockStatement(partial) { - visitPartial.call(this, partial); - - this.acceptKey(partial, 'program'); - }, - - ContentStatement: function ContentStatement() /* content */{}, - CommentStatement: function CommentStatement() /* comment */{}, - - SubExpression: visitSubExpression, - - PathExpression: function PathExpression() /* path */{}, - - StringLiteral: function StringLiteral() /* string */{}, - NumberLiteral: function NumberLiteral() /* number */{}, - BooleanLiteral: function BooleanLiteral() /* bool */{}, - UndefinedLiteral: function UndefinedLiteral() /* literal */{}, - NullLiteral: function NullLiteral() /* literal */{}, - - Hash: function Hash(hash) { - this.acceptArray(hash.pairs); - }, - HashPair: function HashPair(pair) { - this.acceptRequired(pair, 'value'); - } - }; - - function visitSubExpression(mustache) { - this.acceptRequired(mustache, 'path'); - this.acceptArray(mustache.params); - this.acceptKey(mustache, 'hash'); - } - function visitBlock(block) { - visitSubExpression.call(this, block); - - this.acceptKey(block, 'program'); - this.acceptKey(block, 'inverse'); - } - function visitPartial(partial) { - this.acceptRequired(partial, 'name'); - this.acceptArray(partial.params); - this.acceptKey(partial, 'hash'); - } - - module.exports = Visitor; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRUEsV0FBUyxPQUFPLEdBQUc7QUFDakIsUUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7R0FDbkI7O0FBRUQsU0FBTyxDQUFDLFNBQVMsR0FBRztBQUNsQixlQUFXLEVBQUUsT0FBTztBQUNwQixZQUFRLEVBQUUsS0FBSzs7O0FBR2YsYUFBUyxFQUFFLG1CQUFTLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDOUIsVUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQyxVQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7OztBQUdqQixZQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzNDLGdCQUFNLDBCQUFjLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcseUJBQXlCLEdBQUcsSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEg7QUFDRCxZQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO09BQ3BCO0tBQ0Y7Ozs7QUFJRCxrQkFBYyxFQUFFLHdCQUFTLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDbkMsVUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRTNCLFVBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDZixjQUFNLDBCQUFjLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO09BQ3REO0tBQ0Y7Ozs7QUFJRCxlQUFXLEVBQUUscUJBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENB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SSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDbEM7QUFDRCxXQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUU7QUFDekIsc0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs7QUFFckMsUUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDakMsUUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7R0FDbEM7QUFDRCxXQUFTLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDN0IsUUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckMsUUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakMsUUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDakM7O21CQUVjLE9BQU8iLCJmaWxlIjoidmlzaXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZnVuY3Rpb24gVmlzaXRvcigpIHtcbiAgdGhpcy5wYXJlbnRzID0gW107XG59XG5cblZpc2l0b3IucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVmlzaXRvcixcbiAgbXV0YXRpbmc6IGZhbHNlLFxuXG4gIC8vIFZpc2l0cyBhIGdpdmVuIHZhbHVlLiBJZiBtdXRhdGluZywgd2lsbCByZXBsYWNlIHRoZSB2YWx1ZSBpZiBuZWNlc3NhcnkuXG4gIGFjY2VwdEtleTogZnVuY3Rpb24obm9kZSwgbmFtZSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuYWNjZXB0KG5vZGVbbmFtZV0pO1xuICAgIGlmICh0aGlzLm11dGF0aW5nKSB7XG4gICAgICAvLyBIYWNreSBzYW5pdHkgY2hlY2s6IFRoaXMgbWF5IGhhdmUgYSBmZXcgZmFsc2UgcG9zaXRpdmVzIGZvciB0eXBlIGZvciB0aGUgaGVscGVyXG4gICAgICAvLyBtZXRob2RzIGJ1dCB3aWxsIGdlbmVyYWxseSBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aG91dCBhIGxvdCBvZiBvdmVyaGVhZC5cbiAgICAgIGlmICh2YWx1ZSAmJiAhVmlzaXRvci5wcm90b3R5cGVbdmFsdWUudHlwZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5leHBlY3RlZCBub2RlIHR5cGUgXCInICsgdmFsdWUudHlwZSArICdcIiBmb3VuZCB3aGVuIGFjY2VwdGluZyAnICsgbmFtZSArICcgb24gJyArIG5vZGUudHlwZSk7XG4gICAgICB9XG4gICAgICBub2RlW25hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9LFxuXG4gIC8vIFBlcmZvcm1zIGFuIGFjY2VwdCBvcGVyYXRpb24gd2l0aCBhZGRlZCBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlXG4gIC8vIHJlcXVpcmVkIGtleXMgYXJlIG5vdCByZW1vdmVkLlxuICBhY2NlcHRSZXF1aXJlZDogZnVuY3Rpb24obm9kZSwgbmFtZSkge1xuICAgIHRoaXMuYWNjZXB0S2V5KG5vZGUsIG5hbWUpO1xuXG4gICAgaWYgKCFub2RlW25hbWVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKG5vZGUudHlwZSArICcgcmVxdWlyZXMgJyArIG5hbWUpO1xuICAgIH1cbiAgfSxcblxuICAvLyBUcmF2ZXJzZXMgYSBnaXZlbiBhcnJheS4gSWYgbXV0YXRpbmcsIGVtcHR5IHJlc3Buc2VzIHdpbGwgYmUgcmVtb3ZlZFxuICAvLyBmb3IgY2hpbGQgZWxlbWVudHMuXG4gIGFjY2VwdEFycmF5OiBmdW5jdGlvbihhcnJheSkge1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLmFjY2VwdEtleShhcnJheSwgaSk7XG5cbiAgICAgIGlmICghYXJyYXlbaV0pIHtcbiAgICAgICAgYXJyYXkuc3BsaWNlKGksIDEpO1xuICAgICAgICBpLS07XG4gICAgICAgIGwtLTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgYWNjZXB0OiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqL1xuICAgIGlmICghdGhpc1tvYmplY3QudHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdHlwZTogJyArIG9iamVjdC50eXBlLCBvYmplY3QpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmN1cnJlbnQpIHtcbiAgICAgIHRoaXMucGFyZW50cy51bnNoaWZ0KHRoaXMuY3VycmVudCk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudCA9IG9iamVjdDtcblxuICAgIGxldCByZXQgPSB0aGlzW29iamVjdC50eXBlXShvYmplY3QpO1xuXG4gICAgdGhpcy5jdXJyZW50ID0gdGhpcy5wYXJlbnRzLnNoaWZ0KCk7XG5cbiAgICBpZiAoIXRoaXMubXV0YXRpbmcgfHwgcmV0KSB7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gZWxzZSBpZiAocmV0ICE9PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG4gIH0sXG5cbiAgUHJvZ3JhbTogZnVuY3Rpb24ocHJvZ3JhbSkge1xuICAgIHRoaXMuYWNjZXB0QXJyYXkocHJvZ3JhbS5ib2R5KTtcbiAgfSxcblxuICBNdXN0YWNoZVN0YXRlbWVudDogdmlzaXRTdWJFeHByZXNzaW9uLFxuICBEZWNvcmF0b3I6IHZpc2l0U3ViRXhwcmVzc2lvbixcblxuICBCbG9ja1N0YXRlbWVudDogdmlzaXRCbG9jayxcbiAgRGVjb3JhdG9yQmxvY2s6IHZpc2l0QmxvY2ssXG5cbiAgUGFydGlhbFN0YXRlbWVudDogdmlzaXRQYXJ0aWFsLFxuICBQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgICB2aXNpdFBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsKTtcblxuICAgIHRoaXMuYWNjZXB0S2V5KHBhcnRpYWwsICdwcm9ncmFtJyk7XG4gIH0sXG5cbiAgQ29udGVudFN0YXRlbWVudDogZnVuY3Rpb24oLyogY29udGVudCAqLykge30sXG4gIENvbW1lbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKC8qIGNvbW1lbnQgKi8pIHt9LFxuXG4gIFN1YkV4cHJlc3Npb246IHZpc2l0U3ViRXhwcmVzc2lvbixcblxuICBQYXRoRXhwcmVzc2lvbjogZnVuY3Rpb24oLyogcGF0aCAqLykge30sXG5cbiAgU3RyaW5nTGl0ZXJhbDogZnVuY3Rpb24oLyogc3RyaW5nICovKSB7fSxcbiAgTnVtYmVyTGl0ZXJhbDogZnVuY3Rpb24oLyogbnVtYmVyICovKSB7fSxcbiAgQm9vbGVhbkxpdGVyYWw6IGZ1bmN0aW9uKC8qIGJvb2wgKi8pIHt9LFxuICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbigvKiBsaXRlcmFsICovKSB7fSxcbiAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uKC8qIGxpdGVyYWwgKi8pIHt9LFxuXG4gIEhhc2g6IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICB0aGlzLmFjY2VwdEFycmF5KGhhc2gucGFpcnMpO1xuICB9LFxuICBIYXNoUGFpcjogZnVuY3Rpb24ocGFpcikge1xuICAgIHRoaXMuYWNjZXB0UmVxdWlyZWQocGFpciwgJ3ZhbHVlJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHZpc2l0U3ViRXhwcmVzc2lvbihtdXN0YWNoZSkge1xuICB0aGlzLmFjY2VwdFJlcXVpcmVkKG11c3RhY2hlLCAncGF0aCcpO1xuICB0aGlzLmFjY2VwdEFycmF5KG11c3RhY2hlLnBhcmFtcyk7XG4gIHRoaXMuYWNjZXB0S2V5KG11c3RhY2hlLCAnaGFzaCcpO1xufVxuZnVuY3Rpb24gdmlzaXRCbG9jayhibG9jaykge1xuICB2aXNpdFN1YkV4cHJlc3Npb24uY2FsbCh0aGlzLCBibG9jayk7XG5cbiAgdGhpcy5hY2NlcHRLZXkoYmxvY2ssICdwcm9ncmFtJyk7XG4gIHRoaXMuYWNjZXB0S2V5KGJsb2NrLCAnaW52ZXJzZScpO1xufVxuZnVuY3Rpb24gdmlzaXRQYXJ0aWFsKHBhcnRpYWwpIHtcbiAgdGhpcy5hY2NlcHRSZXF1aXJlZChwYXJ0aWFsLCAnbmFtZScpO1xuICB0aGlzLmFjY2VwdEFycmF5KHBhcnRpYWwucGFyYW1zKTtcbiAgdGhpcy5hY2NlcHRLZXkocGFydGlhbCwgJ2hhc2gnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlzaXRvcjtcbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/whitespace-control.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/whitespace-control.js deleted file mode 100644 index 47c365a96..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/compiler/whitespace-control.js +++ /dev/null @@ -1,219 +0,0 @@ -define(['exports', 'module', './visitor'], function (exports, module, _visitor) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Visitor = _interopRequireDefault(_visitor); - - function WhitespaceControl() { - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - this.options = options; - } - WhitespaceControl.prototype = new _Visitor['default'](); - - WhitespaceControl.prototype.Program = function (program) { - var doStandalone = !this.options.ignoreStandalone; - - var isRoot = !this.isRootSeen; - this.isRootSeen = true; - - var body = program.body; - for (var i = 0, l = body.length; i < l; i++) { - var current = body[i], - strip = this.accept(current); - - if (!strip) { - continue; - } - - var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot), - _isNextWhitespace = isNextWhitespace(body, i, isRoot), - openStandalone = strip.openStandalone && _isPrevWhitespace, - closeStandalone = strip.closeStandalone && _isNextWhitespace, - inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace; - - if (strip.close) { - omitRight(body, i, true); - } - if (strip.open) { - omitLeft(body, i, true); - } - - if (doStandalone && inlineStandalone) { - omitRight(body, i); - - if (omitLeft(body, i)) { - // If we are on a standalone node, save the indent info for partials - if (current.type === 'PartialStatement') { - // Pull out the whitespace from the final line - current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1]; - } - } - } - if (doStandalone && openStandalone) { - omitRight((current.program || current.inverse).body); - - // Strip out the previous content node if it's whitespace only - omitLeft(body, i); - } - if (doStandalone && closeStandalone) { - // Always strip the next node - omitRight(body, i); - - omitLeft((current.inverse || current.program).body); - } - } - - return program; - }; - - WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) { - this.accept(block.program); - this.accept(block.inverse); - - // Find the inverse program that is involed with whitespace stripping. - var program = block.program || block.inverse, - inverse = block.program && block.inverse, - firstInverse = inverse, - lastInverse = inverse; - - if (inverse && inverse.chained) { - firstInverse = inverse.body[0].program; - - // Walk the inverse chain to find the last inverse that is actually in the chain. - while (lastInverse.chained) { - lastInverse = lastInverse.body[lastInverse.body.length - 1].program; - } - } - - var strip = { - open: block.openStrip.open, - close: block.closeStrip.close, - - // Determine the standalone candiacy. Basically flag our content as being possibly standalone - // so our parent can determine if we actually are standalone - openStandalone: isNextWhitespace(program.body), - closeStandalone: isPrevWhitespace((firstInverse || program).body) - }; - - if (block.openStrip.close) { - omitRight(program.body, null, true); - } - - if (inverse) { - var inverseStrip = block.inverseStrip; - - if (inverseStrip.open) { - omitLeft(program.body, null, true); - } - - if (inverseStrip.close) { - omitRight(firstInverse.body, null, true); - } - if (block.closeStrip.open) { - omitLeft(lastInverse.body, null, true); - } - - // Find standalone else statments - if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) { - omitLeft(program.body); - omitRight(firstInverse.body); - } - } else if (block.closeStrip.open) { - omitLeft(program.body, null, true); - } - - return strip; - }; - - WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) { - return mustache.strip; - }; - - WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) { - /* istanbul ignore next */ - var strip = node.strip || {}; - return { - inlineStandalone: true, - open: strip.open, - close: strip.close - }; - }; - - function isPrevWhitespace(body, i, isRoot) { - if (i === undefined) { - i = body.length; - } - - // Nodes that end with newlines are considered whitespace (but are special - // cased for strip operations) - var prev = body[i - 1], - sibling = body[i - 2]; - if (!prev) { - return isRoot; - } - - if (prev.type === 'ContentStatement') { - return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original); - } - } - function isNextWhitespace(body, i, isRoot) { - if (i === undefined) { - i = -1; - } - - var next = body[i + 1], - sibling = body[i + 2]; - if (!next) { - return isRoot; - } - - if (next.type === 'ContentStatement') { - return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original); - } - } - - // Marks the node to the right of the position as omitted. - // I.e. {{foo}}' ' will mark the ' ' node as omitted. - // - // If i is undefined, then the first child will be marked as such. - // - // If mulitple is truthy then all whitespace will be stripped out until non-whitespace - // content is met. - function omitRight(body, i, multiple) { - var current = body[i == null ? 0 : i + 1]; - if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) { - return; - } - - var original = current.value; - current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, ''); - current.rightStripped = current.value !== original; - } - - // Marks the node to the left of the position as omitted. - // I.e. ' '{{foo}} will mark the ' ' node as omitted. - // - // If i is undefined then the last child will be marked as such. - // - // If mulitple is truthy then all whitespace will be stripped out until non-whitespace - // content is met. - function omitLeft(body, i, multiple) { - var current = body[i == null ? body.length - 1 : i - 1]; - if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) { - return; - } - - // We omit the last node if it's whitespace only and not preceeded by a non-content node. - var original = current.value; - current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, ''); - current.leftStripped = current.value !== original; - return current.leftStripped; - } - - module.exports = WhitespaceControl; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3doaXRlc3BhY2UtY29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQSxXQUFTLGlCQUFpQixHQUFlO1FBQWQsT0FBTyx5REFBRyxFQUFFOztBQUNyQyxRQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztHQUN4QjtBQUNELG1CQUFpQixDQUFDLFNBQVMsR0FBRyx5QkFBYSxDQUFDOztBQUU1QyxtQkFBaUIsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFVBQVMsT0FBTyxFQUFFO0FBQ3RELFFBQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzs7QUFFcEQsUUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzlCLFFBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDOztBQUV2QixRQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsVUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUNqQixLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFFakMsVUFBSSxDQUFDLEtBQUssRUFBRTtBQUNWLGlCQUFTO09BQ1Y7O0FBRUQsVUFBSSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztVQUNyRCxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztVQUVyRCxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxpQkFBaUI7VUFDMUQsZUFBZSxHQUFHLEtBQUssQ0FBQyxlQUFlLElBQUksaUJBQWlCO1VBQzVELGdCQUFnQixHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxpQkFBaUIsSUFBSSxpQkFBaUIsQ0FBQzs7QUFFeEYsVUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ2YsaUJBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzFCO0FBQ0QsVUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQ2QsZ0JBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQ3pCOztBQUVELFVBQUksWUFBWSxJQUFJLGdCQUFnQixFQUFFO0FBQ3BDLGlCQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDOztBQUVuQixZQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7O0FBRXJCLGNBQUksT0FBTyxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRTs7QUFFdkMsbUJBQU8sQ0FBQyxNQUFNLEdBQUcsQUFBQyxXQUFXLENBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7V0FDOUQ7U0FDRjtPQUNGO0FBQ0QsVUFBSSxZQUFZLElBQUksY0FBYyxFQUFFO0FBQ2xDLGlCQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUEsQ0FBRSxJQUFJLENBQUMsQ0FBQzs7O0FBR3JELGdCQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO09BQ25CO0FBQ0QsVUFBSSxZQUFZLElBQUksZUFBZSxFQUFFOztBQUVuQyxpQkFBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzs7QUFFbkIsZ0JBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQSxDQUFFLElBQUksQ0FBQyxDQUFDO09BQ3JEO0tBQ0Y7O0FBRUQsV0FBTyxPQUFPLENBQUM7R0FDaEIsQ0FBQzs7QUFFRixtQkFBaUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUMxQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsY0FBYyxHQUMxQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMscUJBQXFCLEdBQUcsVUFBUyxLQUFLLEVBQUU7QUFDbEUsUUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0IsUUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7OztBQUczQixRQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPO1FBQ3hDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPO1FBQ3hDLFlBQVksR0FBRyxPQUFPO1FBQ3RCLFdBQVcsR0FBRyxPQUFPLENBQUM7O0FBRTFCLFFBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDOUIsa0JBQVksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQzs7O0FBR3ZDLGFBQU8sV0FBVyxDQUFDLE9BQU8sRUFBRTtBQUMxQixtQkFBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO09BQ3JFO0tBQ0Y7O0FBRUQsUUFBSSxLQUFLLEdBQUc7QUFDVixVQUFJLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBQzFCLFdBQUssRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUs7Ozs7QUFJN0Isb0JBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQzlDLHFCQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFBLENBQUUsSUFBSSxDQUFDO0tBQ2xFLENBQUM7O0FBRUYsUUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtBQUN6QixlQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDckM7O0FBRUQsUUFBSSxPQUFPLEVBQUU7QUFDWCxVQUFJLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDOztBQUV0QyxVQUFJLFlBQVksQ0FBQyxJQUFJLEVBQUU7QUFDckIsZ0JBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNwQzs7QUFFRCxVQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUU7QUFDdEIsaUJBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztPQUMxQztBQUNELFVBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7QUFDekIsZ0JBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztPQUN4Qzs7O0FBR0QsVUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLElBQzNCLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFDOUIsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzFDLGdCQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLGlCQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzlCO0tBQ0YsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFO0FBQ2hDLGNBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNwQzs7QUFFRCxXQUFPLEtBQUssQ0FBQztHQUNkLENBQUM7O0FBRUYsbUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FDckMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGlCQUFpQixHQUFHLFVBQVMsUUFBUSxFQUFFO0FBQ2pFLFdBQU8sUUFBUSxDQUFDLEtBQUssQ0FBQztHQUN2QixDQUFDOztBQUVGLG1CQUFpQixDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsR0FDeEMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLFVBQVMsSUFBSSxFQUFFOztBQUVoRSxRQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztBQUM3QixXQUFPO0FBQ0wsc0JBQWdCLEVBQUUsSUFBSTtBQUN0QixVQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7QUFDaEIsV0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO0tBQ25CLENBQUM7R0FDSCxDQUFDOztBQUdGLFdBQVMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUU7QUFDekMsUUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25CLE9BQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQ2pCOzs7O0FBSUQsUUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBSSxDQUFDLElBQUksRUFBRTtBQUNULGFBQU8sTUFBTSxDQUFDO0tBQ2Y7O0FBRUQsUUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFO0FBQ3BDLGFBQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUksWUFBWSxHQUFLLGdCQUFnQixDQUFDLENBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN2RjtHQUNGO0FBQ0QsV0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRTtBQUN6QyxRQUFJLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDbkIsT0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0tBQ1I7O0FBRUQsUUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBSSxDQUFDLElBQUksRUFBRTtBQUNULGFBQU8sTUFBTSxDQUFDO0tBQ2Y7O0FBRUQsUUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFO0FBQ3BDLGFBQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUksWUFBWSxHQUFLLGdCQUFnQixDQUFDLENBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN2RjtHQUNGOzs7Ozs7Ozs7QUFTRCxXQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRTtBQUNwQyxRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFDLFFBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxrQkFBa0IsSUFBSyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsYUFBYSxBQUFDLEVBQUU7QUFDM0YsYUFBTztLQUNSOztBQUVELFFBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDN0IsV0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUksTUFBTSxHQUFLLGVBQWUsQUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ25GLFdBQU8sQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUM7R0FDcEQ7Ozs7Ozs7OztBQVNELFdBQVMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFO0FBQ25DLFFBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RCxRQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssa0JBQWtCLElBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFlBQVksQUFBQyxFQUFFO0FBQzFGLGFBQU87S0FDUjs7O0FBR0QsUUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUM3QixXQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBSSxNQUFNLEdBQUssU0FBUyxBQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0UsV0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNsRCxXQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUM7R0FDN0I7O21CQUVjLGlCQUFpQiIsImZpbGUiOiJ3aGl0ZXNwYWNlLWNvbnRyb2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5mdW5jdGlvbiBXaGl0ZXNwYWNlQ29udHJvbChvcHRpb25zID0ge30pIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbn1cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZSA9IG5ldyBWaXNpdG9yKCk7XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Qcm9ncmFtID0gZnVuY3Rpb24ocHJvZ3JhbSkge1xuICBjb25zdCBkb1N0YW5kYWxvbmUgPSAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmU7XG5cbiAgbGV0IGlzUm9vdCA9ICF0aGlzLmlzUm9vdFNlZW47XG4gIHRoaXMuaXNSb290U2VlbiA9IHRydWU7XG5cbiAgbGV0IGJvZHkgPSBwcm9ncmFtLmJvZHk7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgY3VycmVudCA9IGJvZHlbaV0sXG4gICAgICAgIHN0cmlwID0gdGhpcy5hY2NlcHQoY3VycmVudCk7XG5cbiAgICBpZiAoIXN0cmlwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsZXQgX2lzUHJldldoaXRlc3BhY2UgPSBpc1ByZXZXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCksXG4gICAgICAgIF9pc05leHRXaGl0ZXNwYWNlID0gaXNOZXh0V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuXG4gICAgICAgIG9wZW5TdGFuZGFsb25lID0gc3RyaXAub3BlblN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UsXG4gICAgICAgIGNsb3NlU3RhbmRhbG9uZSA9IHN0cmlwLmNsb3NlU3RhbmRhbG9uZSAmJiBfaXNOZXh0V2hpdGVzcGFjZSxcbiAgICAgICAgaW5saW5lU3RhbmRhbG9uZSA9IHN0cmlwLmlubGluZVN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UgJiYgX2lzTmV4dFdoaXRlc3BhY2U7XG5cbiAgICBpZiAoc3RyaXAuY2xvc2UpIHtcbiAgICAgIG9taXRSaWdodChib2R5LCBpLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KGJvZHksIGksIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgaW5saW5lU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KGJvZHksIGkpO1xuXG4gICAgICBpZiAob21pdExlZnQoYm9keSwgaSkpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgc3RhbmRhbG9uZSBub2RlLCBzYXZlIHRoZSBpbmRlbnQgaW5mbyBmb3IgcGFydGlhbHNcbiAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gJ1BhcnRpYWxTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgZmluYWwgbGluZVxuICAgICAgICAgIGN1cnJlbnQuaW5kZW50ID0gKC8oWyBcXHRdKyQpLykuZXhlYyhib2R5W2kgLSAxXS5vcmlnaW5hbClbMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBvcGVuU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KChjdXJyZW50LnByb2dyYW0gfHwgY3VycmVudC5pbnZlcnNlKS5ib2R5KTtcblxuICAgICAgLy8gU3RyaXAgb3V0IHRoZSBwcmV2aW91cyBjb250ZW50IG5vZGUgaWYgaXQncyB3aGl0ZXNwYWNlIG9ubHlcbiAgICAgIG9taXRMZWZ0KGJvZHksIGkpO1xuICAgIH1cbiAgICBpZiAoZG9TdGFuZGFsb25lICYmIGNsb3NlU3RhbmRhbG9uZSkge1xuICAgICAgLy8gQWx3YXlzIHN0cmlwIHRoZSBuZXh0IG5vZGVcbiAgICAgIG9taXRSaWdodChib2R5LCBpKTtcblxuICAgICAgb21pdExlZnQoKGN1cnJlbnQuaW52ZXJzZSB8fCBjdXJyZW50LnByb2dyYW0pLmJvZHkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9ncmFtO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkJsb2NrU3RhdGVtZW50ID1cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jayA9XG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuUGFydGlhbEJsb2NrU3RhdGVtZW50ID0gZnVuY3Rpb24oYmxvY2spIHtcbiAgdGhpcy5hY2NlcHQoYmxvY2sucHJvZ3JhbSk7XG4gIHRoaXMuYWNjZXB0KGJsb2NrLmludmVyc2UpO1xuXG4gIC8vIEZpbmQgdGhlIGludmVyc2UgcHJvZ3JhbSB0aGF0IGlzIGludm9sZWQgd2l0aCB3aGl0ZXNwYWNlIHN0cmlwcGluZy5cbiAgbGV0IHByb2dyYW0gPSBibG9jay5wcm9ncmFtIHx8IGJsb2NrLmludmVyc2UsXG4gICAgICBpbnZlcnNlID0gYmxvY2sucHJvZ3JhbSAmJiBibG9jay5pbnZlcnNlLFxuICAgICAgZmlyc3RJbnZlcnNlID0gaW52ZXJzZSxcbiAgICAgIGxhc3RJbnZlcnNlID0gaW52ZXJzZTtcblxuICBpZiAoaW52ZXJzZSAmJiBpbnZlcnNlLmNoYWluZWQpIHtcbiAgICBmaXJzdEludmVyc2UgPSBpbnZlcnNlLmJvZHlbMF0ucHJvZ3JhbTtcblxuICAgIC8vIFdhbGsgdGhlIGludmVyc2UgY2hhaW4gdG8gZmluZCB0aGUgbGFzdCBpbnZlcnNlIHRoYXQgaXMgYWN0dWFsbHkgaW4gdGhlIGNoYWluLlxuICAgIHdoaWxlIChsYXN0SW52ZXJzZS5jaGFpbmVkKSB7XG4gICAgICBsYXN0SW52ZXJzZSA9IGxhc3RJbnZlcnNlLmJvZHlbbGFzdEludmVyc2UuYm9keS5sZW5ndGggLSAxXS5wcm9ncmFtO1xuICAgIH1cbiAgfVxuXG4gIGxldCBzdHJpcCA9IHtcbiAgICBvcGVuOiBibG9jay5vcGVuU3RyaXAub3BlbixcbiAgICBjbG9zZTogYmxvY2suY2xvc2VTdHJpcC5jbG9zZSxcblxuICAgIC8vIERldGVybWluZSB0aGUgc3RhbmRhbG9uZSBjYW5kaWFjeS4gQmFzaWNhbGx5IGZsYWcgb3VyIGNvbnRlbnQgYXMgYmVpbmcgcG9zc2libHkgc3RhbmRhbG9uZVxuICAgIC8vIHNvIG91ciBwYXJlbnQgY2FuIGRldGVybWluZSBpZiB3ZSBhY3R1YWxseSBhcmUgc3RhbmRhbG9uZVxuICAgIG9wZW5TdGFuZGFsb25lOiBpc05leHRXaGl0ZXNwYWNlKHByb2dyYW0uYm9keSksXG4gICAgY2xvc2VTdGFuZGFsb25lOiBpc1ByZXZXaGl0ZXNwYWNlKChmaXJzdEludmVyc2UgfHwgcHJvZ3JhbSkuYm9keSlcbiAgfTtcblxuICBpZiAoYmxvY2sub3BlblN0cmlwLmNsb3NlKSB7XG4gICAgb21pdFJpZ2h0KHByb2dyYW0uYm9keSwgbnVsbCwgdHJ1ZSk7XG4gIH1cblxuICBpZiAoaW52ZXJzZSkge1xuICAgIGxldCBpbnZlcnNlU3RyaXAgPSBibG9jay5pbnZlcnNlU3RyaXA7XG5cbiAgICBpZiAoaW52ZXJzZVN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSwgbnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGludmVyc2VTdHJpcC5jbG9zZSkge1xuICAgICAgb21pdFJpZ2h0KGZpcnN0SW52ZXJzZS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKGJsb2NrLmNsb3NlU3RyaXAub3Blbikge1xuICAgICAgb21pdExlZnQobGFzdEludmVyc2UuYm9keSwgbnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gRmluZCBzdGFuZGFsb25lIGVsc2Ugc3RhdG1lbnRzXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlU3RhbmRhbG9uZVxuICAgICAgICAmJiBpc1ByZXZXaGl0ZXNwYWNlKHByb2dyYW0uYm9keSlcbiAgICAgICAgJiYgaXNOZXh0V2hpdGVzcGFjZShmaXJzdEludmVyc2UuYm9keSkpIHtcbiAgICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSk7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChibG9jay5jbG9zZVN0cmlwLm9wZW4pIHtcbiAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHN0cmlwO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkRlY29yYXRvciA9XG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuTXVzdGFjaGVTdGF0ZW1lbnQgPSBmdW5jdGlvbihtdXN0YWNoZSkge1xuICByZXR1cm4gbXVzdGFjaGUuc3RyaXA7XG59O1xuXG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuUGFydGlhbFN0YXRlbWVudCA9XG4gICAgV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkNvbW1lbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCBzdHJpcCA9IG5vZGUuc3RyaXAgfHwge307XG4gIHJldHVybiB7XG4gICAgaW5saW5lU3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBvcGVuOiBzdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBzdHJpcC5jbG9zZVxuICB9O1xufTtcblxuXG5mdW5jdGlvbiBpc1ByZXZXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkge1xuICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IGJvZHkubGVuZ3RoO1xuICB9XG5cbiAgLy8gTm9kZXMgdGhhdCBlbmQgd2l0aCBuZXdsaW5lcyBhcmUgY29uc2lkZXJlZCB3aGl0ZXNwYWNlIChidXQgYXJlIHNwZWNpYWxcbiAgLy8gY2FzZWQgZm9yIHN0cmlwIG9wZXJhdGlvbnMpXG4gIGxldCBwcmV2ID0gYm9keVtpIC0gMV0sXG4gICAgICBzaWJsaW5nID0gYm9keVtpIC0gMl07XG4gIGlmICghcHJldikge1xuICAgIHJldHVybiBpc1Jvb3Q7XG4gIH1cblxuICBpZiAocHJldi50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/ICgvXFxyP1xcblxccyo/JC8pIDogKC8oXnxcXHI/XFxuKVxccyo/JC8pKS50ZXN0KHByZXYub3JpZ2luYWwpO1xuICB9XG59XG5mdW5jdGlvbiBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkge1xuICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IC0xO1xuICB9XG5cbiAgbGV0IG5leHQgPSBib2R5W2kgKyAxXSxcbiAgICAgIHNpYmxpbmcgPSBib2R5W2kgKyAyXTtcbiAgaWYgKCFuZXh0KSB7XG4gICAgcmV0dXJuIGlzUm9vdDtcbiAgfVxuXG4gIGlmIChuZXh0LnR5cGUgPT09ICdDb250ZW50U3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoc2libGluZyB8fCAhaXNSb290ID8gKC9eXFxzKj9cXHI/XFxuLykgOiAoL15cXHMqPyhcXHI/XFxufCQpLykpLnRlc3QobmV4dC5vcmlnaW5hbCk7XG4gIH1cbn1cblxuLy8gTWFya3MgdGhlIG5vZGUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiB7e2Zvb319JyAnIHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgZmlyc3QgY2hpbGQgd2lsbCBiZSBtYXJrZWQgYXMgc3VjaC5cbi8vXG4vLyBJZiBtdWxpdHBsZSBpcyB0cnV0aHkgdGhlbiBhbGwgd2hpdGVzcGFjZSB3aWxsIGJlIHN0cmlwcGVkIG91dCB1bnRpbCBub24td2hpdGVzcGFjZVxuLy8gY29udGVudCBpcyBtZXQuXG5mdW5jdGlvbiBvbWl0UmlnaHQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgbGV0IGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IDAgOiBpICsgMV07XG4gIGlmICghY3VycmVudCB8fCBjdXJyZW50LnR5cGUgIT09ICdDb250ZW50U3RhdGVtZW50JyB8fCAoIW11bHRpcGxlICYmIGN1cnJlbnQucmlnaHRTdHJpcHBlZCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgb3JpZ2luYWwgPSBjdXJyZW50LnZhbHVlO1xuICBjdXJyZW50LnZhbHVlID0gY3VycmVudC52YWx1ZS5yZXBsYWNlKG11bHRpcGxlID8gKC9eXFxzKy8pIDogKC9eWyBcXHRdKlxccj9cXG4/LyksICcnKTtcbiAgY3VycmVudC5yaWdodFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7XG59XG5cbi8vIE1hcmtzIHRoZSBub2RlIHRvIHRoZSBsZWZ0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiAnICd7e2Zvb319IHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBsYXN0IGNoaWxkIHdpbGwgYmUgbWFya2VkIGFzIHN1Y2guXG4vL1xuLy8gSWYgbXVsaXRwbGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50aWwgbm9uLXdoaXRlc3BhY2Vcbi8vIGNvbnRlbnQgaXMgbWV0LlxuZnVuY3Rpb24gb21pdExlZnQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgbGV0IGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IGJvZHkubGVuZ3RoIC0gMSA6IGkgLSAxXTtcbiAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQudHlwZSAhPT0gJ0NvbnRlbnRTdGF0ZW1lbnQnIHx8ICghbXVsdGlwbGUgJiYgY3VycmVudC5sZWZ0U3RyaXBwZWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gV2Ugb21pdCB0aGUgbGFzdCBub2RlIGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5IGFuZCBub3QgcHJlY2VlZGVkIGJ5IGEgbm9uLWNvbnRlbnQgbm9kZS5cbiAgbGV0IG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShtdWx0aXBsZSA/ICgvXFxzKyQvKSA6ICgvWyBcXHRdKyQvKSwgJycpO1xuICBjdXJyZW50LmxlZnRTdHJpcHBlZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsO1xuICByZXR1cm4gY3VycmVudC5sZWZ0U3RyaXBwZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdoaXRlc3BhY2VDb250cm9sO1xuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/decorators.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/decorators.js deleted file mode 100644 index 7c23cab92..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/decorators.js +++ /dev/null @@ -1,16 +0,0 @@ -define(['exports', './decorators/inline'], function (exports, _decoratorsInline) { - 'use strict'; - - exports.__esModule = true; - exports.registerDefaultDecorators = registerDefaultDecorators; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _registerInline = _interopRequireDefault(_decoratorsInline); - - function registerDefaultDecorators(instance) { - _registerInline['default'](instance); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFTyxXQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCwrQkFBZSxRQUFRLENBQUMsQ0FBQztHQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG5cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/decorators/inline.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/decorators/inline.js deleted file mode 100644 index 125e39642..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/decorators/inline.js +++ /dev/null @@ -1,25 +0,0 @@ -define(['exports', 'module', '../utils'], function (exports, module, _utils) { - 'use strict'; - - module.exports = function (instance) { - instance.registerDecorator('inline', function (fn, props, container, options) { - var ret = fn; - if (!props.partials) { - props.partials = {}; - ret = function (context, options) { - // Create a new partials stack frame prior to exec. - var original = container.partials; - container.partials = _utils.extend({}, original, props.partials); - var ret = fn(context, options); - container.partials = original; - return ret; - }; - } - - props.partials[options.args[0]] = options.fn; - - return ret; - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFFZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFVBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFVBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLGFBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFdBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLGNBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsbUJBQVMsQ0FBQyxRQUFRLEdBQUcsT0FWckIsTUFBTSxDQVVzQixFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxjQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLG1CQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixpQkFBTyxHQUFHLENBQUM7U0FDWixDQUFDO09BQ0g7O0FBRUQsV0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFN0MsYUFBTyxHQUFHLENBQUM7S0FDWixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJpbmxpbmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckRlY29yYXRvcignaW5saW5lJywgZnVuY3Rpb24oZm4sIHByb3BzLCBjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgICBsZXQgcmV0ID0gZm47XG4gICAgaWYgKCFwcm9wcy5wYXJ0aWFscykge1xuICAgICAgcHJvcHMucGFydGlhbHMgPSB7fTtcbiAgICAgIHJldCA9IGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBhcnRpYWxzIHN0YWNrIGZyYW1lIHByaW9yIHRvIGV4ZWMuXG4gICAgICAgIGxldCBvcmlnaW5hbCA9IGNvbnRhaW5lci5wYXJ0aWFscztcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gZXh0ZW5kKHt9LCBvcmlnaW5hbCwgcHJvcHMucGFydGlhbHMpO1xuICAgICAgICBsZXQgcmV0ID0gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9yaWdpbmFsO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm9wcy5wYXJ0aWFsc1tvcHRpb25zLmFyZ3NbMF1dID0gb3B0aW9ucy5mbjtcblxuICAgIHJldHVybiByZXQ7XG4gIH0pO1xufVxuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/exception.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/exception.js deleted file mode 100644 index 52cf4b875..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/exception.js +++ /dev/null @@ -1,50 +0,0 @@ -define(['exports', 'module'], function (exports, module) { - 'use strict'; - - var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; - - function Exception(message, node) { - var loc = node && node.loc, - line = undefined, - column = undefined; - if (loc) { - line = loc.start.line; - column = loc.start.column; - - message += ' - ' + line + ':' + column; - } - - var tmp = Error.prototype.constructor.call(this, message); - - // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. - for (var idx = 0; idx < errorProps.length; idx++) { - this[errorProps[idx]] = tmp[errorProps[idx]]; - } - - /* istanbul ignore else */ - if (Error.captureStackTrace) { - Error.captureStackTrace(this, Exception); - } - - try { - if (loc) { - this.lineNumber = line; - - // Work around issue under safari where we can't directly set the column value - /* istanbul ignore next */ - if (Object.defineProperty) { - Object.defineProperty(this, 'column', { value: column }); - } else { - this.column = column; - } - } - } catch (nop) { - /* Ignore if the browser is very particular */ - } - } - - Exception.prototype = new Error(); - - module.exports = Exception; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxNQUFNLFVBQVUsR0FBRyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUVuRyxXQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQ2hDLFFBQUksR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRztRQUN0QixJQUFJLFlBQUE7UUFDSixNQUFNLFlBQUEsQ0FBQztBQUNYLFFBQUksR0FBRyxFQUFFO0FBQ1AsVUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3RCLFlBQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQzs7QUFFMUIsYUFBTyxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztLQUN4Qzs7QUFFRCxRQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7QUFHMUQsU0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFDaEQsVUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM5Qzs7O0FBR0QsUUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7QUFDM0IsV0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztLQUMxQzs7QUFFRCxRQUFJO0FBQ0YsVUFBSSxHQUFHLEVBQUU7QUFDUCxZQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzs7OztBQUl2QixZQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUU7QUFDekIsZ0JBQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1NBQ3hELE1BQU07QUFDTCxjQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztTQUN0QjtPQUNGO0tBQ0YsQ0FBQyxPQUFPLEdBQUcsRUFBRTs7S0FFYjtHQUNGOztBQUVELFdBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQzs7bUJBRW5CLFNBQVMiLCJmaWxlIjoiZXhjZXB0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5jb25zdCBlcnJvclByb3BzID0gWydkZXNjcmlwdGlvbicsICdmaWxlTmFtZScsICdsaW5lTnVtYmVyJywgJ21lc3NhZ2UnLCAnbmFtZScsICdudW1iZXInLCAnc3RhY2snXTtcblxuZnVuY3Rpb24gRXhjZXB0aW9uKG1lc3NhZ2UsIG5vZGUpIHtcbiAgbGV0IGxvYyA9IG5vZGUgJiYgbm9kZS5sb2MsXG4gICAgICBsaW5lLFxuICAgICAgY29sdW1uO1xuICBpZiAobG9jKSB7XG4gICAgbGluZSA9IGxvYy5zdGFydC5saW5lO1xuICAgIGNvbHVtbiA9IGxvYy5zdGFydC5jb2x1bW47XG5cbiAgICBtZXNzYWdlICs9ICcgLSAnICsgbGluZSArICc6JyArIGNvbHVtbjtcbiAgfVxuXG4gIGxldCB0bXAgPSBFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICAvLyBVbmZvcnR1bmF0ZWx5IGVycm9ycyBhcmUgbm90IGVudW1lcmFibGUgaW4gQ2hyb21lIChhdCBsZWFzdCksIHNvIGBmb3IgcHJvcCBpbiB0bXBgIGRvZXNuJ3Qgd29yay5cbiAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZXJyb3JQcm9wcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdGhpc1tlcnJvclByb3BzW2lkeF1dID0gdG1wW2Vycm9yUHJvcHNbaWR4XV07XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBFeGNlcHRpb24pO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAobG9jKSB7XG4gICAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lO1xuXG4gICAgICAvLyBXb3JrIGFyb3VuZCBpc3N1ZSB1bmRlciBzYWZhcmkgd2hlcmUgd2UgY2FuJ3QgZGlyZWN0bHkgc2V0IHRoZSBjb2x1bW4gdmFsdWVcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29sdW1uJywge3ZhbHVlOiBjb2x1bW59KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAobm9wKSB7XG4gICAgLyogSWdub3JlIGlmIHRoZSBicm93c2VyIGlzIHZlcnkgcGFydGljdWxhciAqL1xuICB9XG59XG5cbkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgRXhjZXB0aW9uO1xuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers.js deleted file mode 100644 index 38cb5065b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers.js +++ /dev/null @@ -1,34 +0,0 @@ -define(['exports', './helpers/block-helper-missing', './helpers/each', './helpers/helper-missing', './helpers/if', './helpers/log', './helpers/lookup', './helpers/with'], function (exports, _helpersBlockHelperMissing, _helpersEach, _helpersHelperMissing, _helpersIf, _helpersLog, _helpersLookup, _helpersWith) { - 'use strict'; - - exports.__esModule = true; - exports.registerDefaultHelpers = registerDefaultHelpers; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _registerBlockHelperMissing = _interopRequireDefault(_helpersBlockHelperMissing); - - var _registerEach = _interopRequireDefault(_helpersEach); - - var _registerHelperMissing = _interopRequireDefault(_helpersHelperMissing); - - var _registerIf = _interopRequireDefault(_helpersIf); - - var _registerLog = _interopRequireDefault(_helpersLog); - - var _registerLookup = _interopRequireDefault(_helpersLookup); - - var _registerWith = _interopRequireDefault(_helpersWith); - - function registerDefaultHelpers(instance) { - _registerBlockHelperMissing['default'](instance); - _registerEach['default'](instance); - _registerHelperMissing['default'](instance); - _registerIf['default'](instance); - _registerLog['default'](instance); - _registerLookup['default'](instance); - _registerWith['default'](instance); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRTyxXQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQywyQ0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsNkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsc0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLDJCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDRCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLCtCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDZCQUFhLFFBQVEsQ0FBQyxDQUFDO0dBQ3hCIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2Jsb2NrLWhlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlckVhY2ggZnJvbSAnLi9oZWxwZXJzL2VhY2gnO1xuaW1wb3J0IHJlZ2lzdGVySGVscGVyTWlzc2luZyBmcm9tICcuL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcnO1xuaW1wb3J0IHJlZ2lzdGVySWYgZnJvbSAnLi9oZWxwZXJzL2lmJztcbmltcG9ydCByZWdpc3RlckxvZyBmcm9tICcuL2hlbHBlcnMvbG9nJztcbmltcG9ydCByZWdpc3Rlckxvb2t1cCBmcm9tICcuL2hlbHBlcnMvbG9va3VwJztcbmltcG9ydCByZWdpc3RlcldpdGggZnJvbSAnLi9oZWxwZXJzL3dpdGgnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0SGVscGVycyhpbnN0YW5jZSkge1xuICByZWdpc3RlckJsb2NrSGVscGVyTWlzc2luZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyRWFjaChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVySGVscGVyTWlzc2luZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVySWYoaW5zdGFuY2UpO1xuICByZWdpc3RlckxvZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyTG9va3VwKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJXaXRoKGluc3RhbmNlKTtcbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/block-helper-missing.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/block-helper-missing.js deleted file mode 100644 index 146989752..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/block-helper-missing.js +++ /dev/null @@ -1,35 +0,0 @@ -define(['exports', 'module', '../utils'], function (exports, module, _utils) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('blockHelperMissing', function (context, options) { - var inverse = options.inverse, - fn = options.fn; - - if (context === true) { - return fn(this); - } else if (context === false || context == null) { - return inverse(this); - } else if (_utils.isArray(context)) { - if (context.length > 0) { - if (options.ids) { - options.ids = [options.name]; - } - - return instance.helpers.each(context, options); - } else { - return inverse(this); - } - } else { - if (options.data && options.ids) { - var data = _utils.createFrame(options.data); - data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name); - options = { data: data }; - } - - return fn(context, options); - } - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFVBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1VBQ3pCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixVQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsZUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QixNQUFNLElBQUksT0FYeUIsT0FBTyxDQVd4QixPQUFPLENBQUMsRUFBRTtBQUMzQixZQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLGNBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLG1CQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQzlCOztBQUVELGlCQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoRCxNQUFNO0FBQ0wsaUJBQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RCO09BQ0YsTUFBTTtBQUNMLFlBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLGNBQUksSUFBSSxHQUFHLE9BdkJRLFdBQVcsQ0F1QlAsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGNBQUksQ0FBQyxXQUFXLEdBQUcsT0F4Qm5CLGlCQUFpQixDQXdCb0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLGlCQUFPLEdBQUcsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUM7U0FDeEI7O0FBRUQsZUFBTyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzdCO0tBQ0YsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiYmxvY2staGVscGVyLW1pc3NpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheX0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignYmxvY2tIZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGxldCBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgICBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoY29udGV4dCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGZuKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PT0gZmFsc2UgfHwgY29udGV4dCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkoY29udGV4dCkpIHtcbiAgICAgIGlmIChjb250ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgICAgb3B0aW9ucy5pZHMgPSBbb3B0aW9ucy5uYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzLmVhY2goY29udGV4dCwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBsZXQgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBhcHBlbmRDb250ZXh0UGF0aChvcHRpb25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMubmFtZSk7XG4gICAgICAgIG9wdGlvbnMgPSB7ZGF0YTogZGF0YX07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICB9XG4gIH0pO1xufVxuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/each.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/each.js deleted file mode 100644 index 48ecf2ae4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/each.js +++ /dev/null @@ -1,89 +0,0 @@ -define(['exports', 'module', '../utils', '../exception'], function (exports, module, _utils, _exception) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - module.exports = function (instance) { - instance.registerHelper('each', function (context, options) { - if (!options) { - throw new _Exception['default']('Must pass iterator to #each'); - } - - var fn = options.fn, - inverse = options.inverse, - i = 0, - ret = '', - data = undefined, - contextPath = undefined; - - if (options.data && options.ids) { - contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; - } - - if (_utils.isFunction(context)) { - context = context.call(this); - } - - if (options.data) { - data = _utils.createFrame(options.data); - } - - function execIteration(field, index, last) { - if (data) { - data.key = field; - data.index = index; - data.first = index === 0; - data.last = !!last; - - if (contextPath) { - data.contextPath = contextPath + field; - } - } - - ret = ret + fn(context[field], { - data: data, - blockParams: _utils.blockParams([context[field], field], [contextPath + field, null]) - }); - } - - if (context && typeof context === 'object') { - if (_utils.isArray(context)) { - for (var j = context.length; i < j; i++) { - if (i in context) { - execIteration(i, i, i === context.length - 1); - } - } - } else { - var priorKey = undefined; - - for (var key in context) { - if (context.hasOwnProperty(key)) { - // We're running the iterations one step out of sync so we can detect - // the last iteration without have to scan the object twice and create - // an itermediate keys array. - if (priorKey !== undefined) { - execIteration(priorKey, i - 1); - } - priorKey = key; - i++; - } - } - if (priorKey !== undefined) { - execIteration(priorKey, i - 1, true); - } - } - } - - if (i === 0) { - ret = inverse(this); - } - - return ret; - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7bUJBR2UsVUFBUyxRQUFRLEVBQUU7QUFDaEMsWUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFVBQUksQ0FBQyxPQUFPLEVBQUU7QUFDWixjQUFNLDBCQUFjLDZCQUE2QixDQUFDLENBQUM7T0FDcEQ7O0FBRUQsVUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUU7VUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU87VUFDekIsQ0FBQyxHQUFHLENBQUM7VUFDTCxHQUFHLEdBQUcsRUFBRTtVQUNSLElBQUksWUFBQTtVQUNKLFdBQVcsWUFBQSxDQUFDOztBQUVoQixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixtQkFBVyxHQUFHLE9BakJaLGlCQUFpQixDQWlCYSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO09BQ2pGOztBQUVELFVBQUksT0FwQnNELFVBQVUsQ0FvQnJELE9BQU8sQ0FBQyxFQUFFO0FBQUUsZUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FBRTs7QUFFMUQsVUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLFlBQUksR0FBRyxPQXZCMkIsV0FBVyxDQXVCMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2xDOztBQUVELGVBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFlBQUksSUFBSSxFQUFFO0FBQ1IsY0FBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsY0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsY0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLGNBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsY0FBSSxXQUFXLEVBQUU7QUFDZixnQkFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1dBQ3hDO1NBQ0Y7O0FBRUQsV0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLGNBQUksRUFBRSxJQUFJO0FBQ1YscUJBQVcsRUFBRSxPQXhDTSxXQUFXLENBd0NMLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMvRSxDQUFDLENBQUM7T0FDSjs7QUFFRCxVQUFJLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7QUFDMUMsWUFBSSxPQTdDMkMsT0FBTyxDQTZDMUMsT0FBTyxDQUFDLEVBQUU7QUFDcEIsZUFBSyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsZ0JBQUksQ0FBQyxJQUFJLE9BQU8sRUFBRTtBQUNoQiwyQkFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDL0M7V0FDRjtTQUNGLE1BQU07QUFDTCxjQUFJLFFBQVEsWUFBQSxDQUFDOztBQUViLGVBQUssSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFO0FBQ3ZCLGdCQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Ozs7QUFJL0Isa0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiw2QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7ZUFDaEM7QUFDRCxzQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGVBQUMsRUFBRSxDQUFDO2FBQ0w7V0FDRjtBQUNELGNBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQix5QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQ3RDO1NBQ0Y7T0FDRjs7QUFFRCxVQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxXQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3JCOztBQUVELGFBQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGJsb2NrUGFyYW1zLCBjcmVhdGVGcmFtZSwgaXNBcnJheSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICByZXQgPSAnJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29udGV4dFBhdGg7XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5pZHNbMF0pICsgJy4nO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH1cblxuICAgIGlmIChvcHRpb25zLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmtleSA9IGZpZWxkO1xuICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgZGF0YS5sYXN0ID0gISFsYXN0O1xuXG4gICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dFtmaWVsZF0sIGZpZWxkXSwgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSBpbiBjb250ZXh0KSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIHRoZSBpdGVyYXRpb25zIG9uZSBzdGVwIG91dCBvZiBzeW5jIHNvIHdlIGNhbiBkZXRlY3RcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgICBpZiAocHJpb3JLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmlvcktleSA9IGtleTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/helper-missing.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/helper-missing.js deleted file mode 100644 index 75d43f63a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/helper-missing.js +++ /dev/null @@ -1,22 +0,0 @@ -define(['exports', 'module', '../exception'], function (exports, module, _exception) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - module.exports = function (instance) { - instance.registerHelper('helperMissing', function () /* [args, ]options */{ - if (arguments.length === 1) { - // A missing field in a {{foo}} construct. - return undefined; - } else { - // Someone is actually trying to call something, blow up. - throw new _Exception['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); - } - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLGlDQUFnQztBQUN2RSxVQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOztBQUUxQixlQUFPLFNBQVMsQ0FBQztPQUNsQixNQUFNOztBQUVMLGNBQU0sMEJBQWMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO09BQ3ZGO0tBQ0YsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiaGVscGVyLW1pc3NpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdoZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oLyogW2FyZ3MsIF1vcHRpb25zICovKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIEEgbWlzc2luZyBmaWVsZCBpbiBhIHt7Zm9vfX0gY29uc3RydWN0LlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU29tZW9uZSBpcyBhY3R1YWxseSB0cnlpbmcgdG8gY2FsbCBzb21ldGhpbmcsIGJsb3cgdXAuXG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/if.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/if.js deleted file mode 100644 index d1aa02166..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/if.js +++ /dev/null @@ -1,25 +0,0 @@ -define(['exports', 'module', '../utils'], function (exports, module, _utils) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('if', function (conditional, options) { - if (_utils.isFunction(conditional)) { - conditional = conditional.call(this); - } - - // Default behavior is to render the positive path if the value is truthy and not empty. - // The `includeZero` option may be set to treat the condtional as purely not empty based on the - // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. - if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - - instance.registerHelper('unless', function (conditional, options) { - return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash }); - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxVQUFJLE9BSlMsVUFBVSxDQUlSLFdBQVcsQ0FBQyxFQUFFO0FBQUUsbUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQUU7Ozs7O0FBS3RFLFVBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLE9BVC9DLE9BQU8sQ0FTZ0QsV0FBVyxDQUFDLEVBQUU7QUFDdkUsZUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzlCLE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDekI7S0FDRixDQUFDLENBQUM7O0FBRUgsWUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELGFBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztLQUN2SCxDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJpZi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNFbXB0eSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaWYnLCBmdW5jdGlvbihjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNvbmRpdGlvbmFsKSkgeyBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7IH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIG5vdCBlbXB0eS5cbiAgICAvLyBUaGUgYGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29uZHRpb25hbCBhcyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZVxuICAgIC8vIGJlaGF2aW9yIG9mIGlzRW1wdHkuIEVmZmVjdGl2ZWx5IHRoaXMgZGV0ZXJtaW5lcyBpZiAwIGlzIGhhbmRsZWQgYnkgdGhlIHBvc2l0aXZlIHBhdGggb3IgbmVnYXRpdmUuXG4gICAgaWYgKCghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFjb25kaXRpb25hbCkgfHwgaXNFbXB0eShjb25kaXRpb25hbCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uKGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnNbJ2lmJ10uY2FsbCh0aGlzLCBjb25kaXRpb25hbCwge2ZuOiBvcHRpb25zLmludmVyc2UsIGludmVyc2U6IG9wdGlvbnMuZm4sIGhhc2g6IG9wdGlvbnMuaGFzaH0pO1xuICB9KTtcbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/log.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/log.js deleted file mode 100644 index 7ea90803d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/log.js +++ /dev/null @@ -1,24 +0,0 @@ -define(['exports', 'module'], function (exports, module) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('log', function () /* message, options */{ - var args = [undefined], - options = arguments[arguments.length - 1]; - for (var i = 0; i < arguments.length - 1; i++) { - args.push(arguments[i]); - } - - var level = 1; - if (options.hash.level != null) { - level = options.hash.level; - } else if (options.data && options.data.level != null) { - level = options.data.level; - } - args[0] = level; - - instance.log.apply(instance, args); - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFBZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxrQ0FBaUM7QUFDOUQsVUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUM7VUFDbEIsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxZQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3pCOztBQUVELFVBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNkLFVBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQzlCLGFBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztPQUM1QixNQUFNLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7QUFDckQsYUFBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO09BQzVCO0FBQ0QsVUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFaEIsY0FBUSxDQUFDLEdBQUcsTUFBQSxDQUFaLFFBQVEsRUFBUyxJQUFJLENBQUMsQ0FBQztLQUN4QixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJsb2cuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9nJywgZnVuY3Rpb24oLyogbWVzc2FnZSwgb3B0aW9ucyAqLykge1xuICAgIGxldCBhcmdzID0gW3VuZGVmaW5lZF0sXG4gICAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgbGV0IGxldmVsID0gMTtcbiAgICBpZiAob3B0aW9ucy5oYXNoLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5oYXNoLmxldmVsO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuZGF0YS5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuZGF0YS5sZXZlbDtcbiAgICB9XG4gICAgYXJnc1swXSA9IGxldmVsO1xuXG4gICAgaW5zdGFuY2UubG9nKC4uLiBhcmdzKTtcbiAgfSk7XG59XG4iXX0= diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/lookup.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/lookup.js deleted file mode 100644 index 8ed79c6e7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/lookup.js +++ /dev/null @@ -1,10 +0,0 @@ -define(['exports', 'module'], function (exports, module) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('lookup', function (obj, field) { - return obj && obj[field]; - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFBZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxVQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDckQsYUFBTyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzFCLENBQUMsQ0FBQztHQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmpbZmllbGRdO1xuICB9KTtcbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/with.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/with.js deleted file mode 100644 index 1428bac6b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/helpers/with.js +++ /dev/null @@ -1,29 +0,0 @@ -define(['exports', 'module', '../utils'], function (exports, module, _utils) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('with', function (context, options) { - if (_utils.isFunction(context)) { - context = context.call(this); - } - - var fn = options.fn; - - if (!_utils.isEmpty(context)) { - var data = options.data; - if (options.data && options.ids) { - data = _utils.createFrame(options.data); - data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); - } - - return fn(context, { - data: data, - blockParams: _utils.blockParams([context], [data && data.contextPath]) - }); - } else { - return options.inverse(this); - } - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7bUJBRWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsWUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFVBQUksT0FKc0QsVUFBVSxDQUlyRCxPQUFPLENBQUMsRUFBRTtBQUFFLGVBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQUU7O0FBRTFELFVBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7O0FBRXBCLFVBQUksQ0FBQyxPQVI0QyxPQUFPLENBUTNDLE9BQU8sQ0FBQyxFQUFFO0FBQ3JCLFlBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsWUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsY0FBSSxHQUFHLE9BWHlCLFdBQVcsQ0FXeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLGNBQUksQ0FBQyxXQUFXLEdBQUcsT0FabkIsaUJBQWlCLENBWW9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRjs7QUFFRCxlQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsY0FBSSxFQUFFLElBQUk7QUFDVixxQkFBVyxFQUFFLE9BakJNLFdBQVcsQ0FpQkwsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDaEUsQ0FBQyxDQUFDO09BQ0osTUFBTTtBQUNMLGVBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM5QjtLQUNGLENBQUMsQ0FBQztHQUNKIiwiZmlsZSI6IndpdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBibG9ja1BhcmFtcywgY3JlYXRlRnJhbWUsIGlzRW1wdHksIGlzRnVuY3Rpb259IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHsgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfVxuXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmICghaXNFbXB0eShjb250ZXh0KSkge1xuICAgICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dF0sIFtkYXRhICYmIGRhdGEuY29udGV4dFBhdGhdKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/logger.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/logger.js deleted file mode 100644 index 7786edaa4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/logger.js +++ /dev/null @@ -1,44 +0,0 @@ -define(['exports', 'module', './utils'], function (exports, module, _utils) { - 'use strict'; - - var logger = { - methodMap: ['debug', 'info', 'warn', 'error'], - level: 'info', - - // Maps a given level value to the `methodMap` indexes above. - lookupLevel: function lookupLevel(level) { - if (typeof level === 'string') { - var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); - if (levelMap >= 0) { - level = levelMap; - } else { - level = parseInt(level, 10); - } - } - - return level; - }, - - // Can be overridden in the host environment - log: function log(level) { - level = logger.lookupLevel(level); - - if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { - var method = logger.methodMap[level]; - if (!console[method]) { - // eslint-disable-line no-console - method = 'log'; - } - - for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - message[_key - 1] = arguments[_key]; - } - - console[method].apply(console, message); // eslint-disable-line no-console - } - } - }; - - module.exports = logger; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxNQUFJLE1BQU0sR0FBRztBQUNYLGFBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxTQUFLLEVBQUUsTUFBTTs7O0FBR2IsZUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixVQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixZQUFJLFFBQVEsR0FBRyxPQVRiLE9BQU8sQ0FTYyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlELFlBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUNqQixlQUFLLEdBQUcsUUFBUSxDQUFDO1NBQ2xCLE1BQU07QUFDTCxlQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM3QjtPQUNGOztBQUVELGFBQU8sS0FBSyxDQUFDO0tBQ2Q7OztBQUdELE9BQUcsRUFBRSxhQUFTLEtBQUssRUFBYztBQUMvQixXQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFbEMsVUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFO0FBQy9FLFlBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTs7QUFDcEIsZ0JBQU0sR0FBRyxLQUFLLENBQUM7U0FDaEI7OzBDQVBtQixPQUFPO0FBQVAsaUJBQU87OztBQVEzQixlQUFPLENBQUMsTUFBTSxPQUFDLENBQWYsT0FBTyxFQUFZLE9BQU8sQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7R0FDRixDQUFDOzttQkFFYSxNQUFNIiwiZmlsZSI6ImxvZ2dlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5kZXhPZn0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWwpIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIG1ldGhvZCA9ICdsb2cnO1xuICAgICAgfVxuICAgICAgY29uc29sZVttZXRob2RdKC4uLm1lc3NhZ2UpOyAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/no-conflict.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/no-conflict.js deleted file mode 100644 index 567ff2b81..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/no-conflict.js +++ /dev/null @@ -1,18 +0,0 @@ -define(['exports', 'module'], function (exports, module) { - /* global window */ - 'use strict'; - - module.exports = function (Handlebars) { - /* istanbul ignore next */ - var root = typeof global !== 'undefined' ? global : window, - $Handlebars = root.Handlebars; - /* istanbul ignore next */ - Handlebars.noConflict = function () { - if (root.Handlebars === Handlebars) { - root.Handlebars = $Handlebars; - } - return Handlebars; - }; - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7bUJBQ2UsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLFFBQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtRQUN0RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFbEMsY0FBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFVBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsWUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7T0FDL0I7QUFDRCxhQUFPLFVBQVUsQ0FBQztLQUNuQixDQUFDO0dBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgd2luZG93ICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgICAkSGFuZGxlYmFycyA9IHJvb3QuSGFuZGxlYmFycztcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgSGFuZGxlYmFycy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHJvb3QuSGFuZGxlYmFycyA9PT0gSGFuZGxlYmFycykge1xuICAgICAgcm9vdC5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7XG4gICAgfVxuICAgIHJldHVybiBIYW5kbGViYXJzO1xuICB9O1xufVxuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/runtime.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/runtime.js deleted file mode 100644 index 1d5d6677a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/runtime.js +++ /dev/null @@ -1,287 +0,0 @@ -define(['exports', './utils', './exception', './base'], function (exports, _utils, _exception, _base) { - 'use strict'; - - exports.__esModule = true; - exports.checkRevision = checkRevision; - exports.template = template; - exports.wrapProgram = wrapProgram; - exports.resolvePartial = resolvePartial; - exports.invokePartial = invokePartial; - exports.noop = noop; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - function checkRevision(compilerInfo) { - var compilerRevision = compilerInfo && compilerInfo[0] || 1, - currentRevision = _base.COMPILER_REVISION; - - if (compilerRevision !== currentRevision) { - if (compilerRevision < currentRevision) { - var runtimeVersions = _base.REVISION_CHANGES[currentRevision], - compilerVersions = _base.REVISION_CHANGES[compilerRevision]; - throw new _Exception['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); - } else { - // Use the embedded version info since the runtime doesn't know about this revision yet - throw new _Exception['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); - } - } - } - - function template(templateSpec, env) { - /* istanbul ignore next */ - if (!env) { - throw new _Exception['default']('No environment passed to template'); - } - if (!templateSpec || !templateSpec.main) { - throw new _Exception['default']('Unknown template object: ' + typeof templateSpec); - } - - templateSpec.main.decorator = templateSpec.main_d; - - // Note: Using env.VM references rather than local var references throughout this section to allow - // for external users to override these as psuedo-supported APIs. - env.VM.checkRevision(templateSpec.compiler); - - function invokePartialWrapper(partial, context, options) { - if (options.hash) { - context = _utils.extend({}, context, options.hash); - if (options.ids) { - options.ids[0] = true; - } - } - - partial = env.VM.resolvePartial.call(this, partial, context, options); - var result = env.VM.invokePartial.call(this, partial, context, options); - - if (result == null && env.compile) { - options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); - result = options.partials[options.name](context, options); - } - if (result != null) { - if (options.indent) { - var lines = result.split('\n'); - for (var i = 0, l = lines.length; i < l; i++) { - if (!lines[i] && i + 1 === l) { - break; - } - - lines[i] = options.indent + lines[i]; - } - result = lines.join('\n'); - } - return result; - } else { - throw new _Exception['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); - } - } - - // Just add water - var container = { - strict: function strict(obj, name) { - if (!(name in obj)) { - throw new _Exception['default']('"' + name + '" not defined in ' + obj); - } - return obj[name]; - }, - lookup: function lookup(depths, name) { - var len = depths.length; - for (var i = 0; i < len; i++) { - if (depths[i] && depths[i][name] != null) { - return depths[i][name]; - } - } - }, - lambda: function lambda(current, context) { - return typeof current === 'function' ? current.call(context) : current; - }, - - escapeExpression: _utils.escapeExpression, - invokePartial: invokePartialWrapper, - - fn: function fn(i) { - var ret = templateSpec[i]; - ret.decorator = templateSpec[i + '_d']; - return ret; - }, - - programs: [], - program: function program(i, data, declaredBlockParams, blockParams, depths) { - var programWrapper = this.programs[i], - fn = this.fn(i); - if (data || depths || blockParams || declaredBlockParams) { - programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); - } else if (!programWrapper) { - programWrapper = this.programs[i] = wrapProgram(this, i, fn); - } - return programWrapper; - }, - - data: function data(value, depth) { - while (value && depth--) { - value = value._parent; - } - return value; - }, - merge: function merge(param, common) { - var obj = param || common; - - if (param && common && param !== common) { - obj = _utils.extend({}, common, param); - } - - return obj; - }, - - noop: env.VM.noop, - compilerInfo: templateSpec.compiler - }; - - function ret(context) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var data = options.data; - - ret._setup(options); - if (!options.partial && templateSpec.useData) { - data = initData(context, data); - } - var depths = undefined, - blockParams = templateSpec.useBlockParams ? [] : undefined; - if (templateSpec.useDepths) { - if (options.depths) { - depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; - } else { - depths = [context]; - } - } - - function main(context /*, options*/) { - return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); - } - main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); - return main(context, options); - } - ret.isTop = true; - - ret._setup = function (options) { - if (!options.partial) { - container.helpers = container.merge(options.helpers, env.helpers); - - if (templateSpec.usePartial) { - container.partials = container.merge(options.partials, env.partials); - } - if (templateSpec.usePartial || templateSpec.useDecorators) { - container.decorators = container.merge(options.decorators, env.decorators); - } - } else { - container.helpers = options.helpers; - container.partials = options.partials; - container.decorators = options.decorators; - } - }; - - ret._child = function (i, data, blockParams, depths) { - if (templateSpec.useBlockParams && !blockParams) { - throw new _Exception['default']('must pass block params'); - } - if (templateSpec.useDepths && !depths) { - throw new _Exception['default']('must pass parent depths'); - } - - return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); - }; - return ret; - } - - function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { - function prog(context) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var currentDepths = depths; - if (depths && context != depths[0]) { - currentDepths = [context].concat(depths); - } - - return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); - } - - prog = executeDecorators(fn, prog, container, depths, data, blockParams); - - prog.program = i; - prog.depth = depths ? depths.length : 0; - prog.blockParams = declaredBlockParams || 0; - return prog; - } - - function resolvePartial(partial, context, options) { - if (!partial) { - if (options.name === '@partial-block') { - var data = options.data; - while (data['partial-block'] === noop) { - data = data._parent; - } - partial = data['partial-block']; - data['partial-block'] = noop; - } else { - partial = options.partials[options.name]; - } - } else if (!partial.call && !options.name) { - // This is a dynamic partial that returned a string - options.name = partial; - partial = options.partials[partial]; - } - return partial; - } - - function invokePartial(partial, context, options) { - options.partial = true; - if (options.ids) { - options.data.contextPath = options.ids[0] || options.data.contextPath; - } - - var partialBlock = undefined; - if (options.fn && options.fn !== noop) { - options.data = _base.createFrame(options.data); - partialBlock = options.data['partial-block'] = options.fn; - - if (partialBlock.partials) { - options.partials = _utils.extend({}, options.partials, partialBlock.partials); - } - } - - if (partial === undefined && partialBlock) { - partial = partialBlock; - } - - if (partial === undefined) { - throw new _Exception['default']('The partial ' + options.name + ' could not be found'); - } else if (partial instanceof Function) { - return partial(context, options); - } - } - - function noop() { - return ''; - } - - function initData(context, data) { - if (!data || !('root' in data)) { - data = data ? _base.createFrame(data) : {}; - data.root = context; - } - return data; - } - - function executeDecorators(fn, prog, container, depths, data, blockParams) { - if (fn.decorator) { - var props = {}; - prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); - _utils.extend(prog, props); - } - return prog; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUlPLFdBQVMsYUFBYSxDQUFDLFlBQVksRUFBRTtBQUMxQyxRQUFNLGdCQUFnQixHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RCxlQUFlLFNBSmQsaUJBQWlCLEFBSWlCLENBQUM7O0FBRTFDLFFBQUksZ0JBQWdCLEtBQUssZUFBZSxFQUFFO0FBQ3hDLFVBQUksZ0JBQWdCLEdBQUcsZUFBZSxFQUFFO0FBQ3RDLFlBQU0sZUFBZSxHQUFHLE1BUkYsZ0JBQWdCLENBUUcsZUFBZSxDQUFDO1lBQ25ELGdCQUFnQixHQUFHLE1BVEgsZ0JBQWdCLENBU0ksZ0JBQWdCLENBQUMsQ0FBQztBQUM1RCxjQUFNLDBCQUFjLHlGQUF5RixHQUN2RyxxREFBcUQsR0FBRyxlQUFlLEdBQUcsbURBQW1ELEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUM7T0FDaEssTUFBTTs7QUFFTCxjQUFNLDBCQUFjLHdGQUF3RixHQUN0RyxpREFBaUQsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7T0FDbkY7S0FDRjtHQUNGOztBQUVNLFdBQVMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7O0FBRTFDLFFBQUksQ0FBQyxHQUFHLEVBQUU7QUFDUixZQUFNLDBCQUFjLG1DQUFtQyxDQUFDLENBQUM7S0FDMUQ7QUFDRCxRQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRTtBQUN2QyxZQUFNLDBCQUFjLDJCQUEyQixHQUFHLE9BQU8sWUFBWSxDQUFDLENBQUM7S0FDeEU7O0FBRUQsZ0JBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7QUFJbEQsT0FBRyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENB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R0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLENBQUM7S0FDNUUsTUFBTSxJQUFJLE9BQU8sWUFBWSxRQUFRLEVBQUU7QUFDdEMsYUFBTyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ2xDO0dBQ0Y7O0FBRU0sV0FBUyxJQUFJLEdBQUc7QUFBRSxXQUFPLEVBQUUsQ0FBQztHQUFFOztBQUVyQyxXQUFTLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQy9CLFFBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFBLEFBQUMsRUFBRTtBQUM5QixVQUFJLEdBQUcsSUFBSSxHQUFHLE1BbFE0QixXQUFXLENBa1EzQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckMsVUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7S0FDckI7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiOztBQUVELFdBQVMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7QUFDekUsUUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFO0FBQ2hCLFVBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLFVBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1RixhQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDM0I7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHsgQ09NUElMRVJfUkVWSVNJT04sIFJFVklTSU9OX0NIQU5HRVMsIGNyZWF0ZUZyYW1lIH0gZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUmV2aXNpb24oY29tcGlsZXJJbmZvKSB7XG4gIGNvbnN0IGNvbXBpbGVyUmV2aXNpb24gPSBjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdIHx8IDEsXG4gICAgICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChjb21waWxlclJldmlzaW9uICE9PSBjdXJyZW50UmV2aXNpb24pIHtcbiAgICBpZiAoY29tcGlsZXJSZXZpc2lvbiA8IGN1cnJlbnRSZXZpc2lvbikge1xuICAgICAgY29uc3QgcnVudGltZVZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjdXJyZW50UmV2aXNpb25dLFxuICAgICAgICAgICAgY29tcGlsZXJWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcHJlY29tcGlsZXIgdG8gYSBuZXdlciB2ZXJzaW9uICgnICsgcnVudGltZVZlcnNpb25zICsgJykgb3IgZG93bmdyYWRlIHlvdXIgcnVudGltZSB0byBhbiBvbGRlciB2ZXJzaW9uICgnICsgY29tcGlsZXJWZXJzaW9ucyArICcpLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHJ1bnRpbWUgdG8gYSBuZXdlciB2ZXJzaW9uICgnICsgY29tcGlsZXJJbmZvWzFdICsgJykuJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZSh0ZW1wbGF0ZVNwZWMsIGVudikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoIWVudikge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ05vIGVudmlyb25tZW50IHBhc3NlZCB0byB0ZW1wbGF0ZScpO1xuICB9XG4gIGlmICghdGVtcGxhdGVTcGVjIHx8ICF0ZW1wbGF0ZVNwZWMubWFpbikge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdGVtcGxhdGUgb2JqZWN0OiAnICsgdHlwZW9mIHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICB0ZW1wbGF0ZVNwZWMubWFpbi5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWMubWFpbl9kO1xuXG4gIC8vIE5vdGU6IFVzaW5nIGVudi5WTSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIGxvY2FsIHZhciByZWZlcmVuY2VzIHRocm91Z2hvdXQgdGhpcyBzZWN0aW9uIHRvIGFsbG93XG4gIC8vIGZvciBleHRlcm5hbCB1c2VycyB0byBvdmVycmlkZSB0aGVzZSBhcyBwc3VlZG8tc3VwcG9ydGVkIEFQSXMuXG4gIGVudi5WTS5jaGVja1JldmlzaW9uKHRlbXBsYXRlU3BlYy5jb21waWxlcik7XG5cbiAgZnVuY3Rpb24gaW52b2tlUGFydGlhbFdyYXBwZXIocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmhhc2gpIHtcbiAgICAgIGNvbnRleHQgPSBVdGlscy5leHRlbmQoe30sIGNvbnRleHQsIG9wdGlvbnMuaGFzaCk7XG4gICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgb3B0aW9ucy5pZHNbMF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnRpYWwgPSBlbnYuVk0ucmVzb2x2ZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcblxuICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiBlbnYuY29tcGlsZSkge1xuICAgICAgb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdID0gZW52LmNvbXBpbGUocGFydGlhbCwgdGVtcGxhdGVTcGVjLmNvbXBpbGVyT3B0aW9ucywgZW52KTtcbiAgICAgIHJlc3VsdCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXShjb250ZXh0LCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUaGUgcGFydGlhbCAnICsgb3B0aW9ucy5uYW1lICsgJyBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIGluIHJ1bnRpbWUtb25seSBtb2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gSnVzdCBhZGQgd2F0ZXJcbiAgbGV0IGNvbnRhaW5lciA9IHtcbiAgICBzdHJpY3Q6IGZ1bmN0aW9uKG9iaiwgbmFtZSkge1xuICAgICAgaWYgKCEobmFtZSBpbiBvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1wiJyArIG5hbWUgKyAnXCIgbm90IGRlZmluZWQgaW4gJyArIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqW25hbWVdO1xuICAgIH0sXG4gICAgbG9va3VwOiBmdW5jdGlvbihkZXB0aHMsIG5hbWUpIHtcbiAgICAgIGNvbnN0IGxlbiA9IGRlcHRocy5sZW5ndGg7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmIChkZXB0aHNbaV0gJiYgZGVwdGhzW2ldW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZGVwdGhzW2ldW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBsYW1iZGE6IGZ1bmN0aW9uKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgbGV0IHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uKGksIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICAgIGxldCBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0sXG4gICAgICAgICAgZm4gPSB0aGlzLmZuKGkpO1xuICAgICAgaWYgKGRhdGEgfHwgZGVwdGhzIHx8IGJsb2NrUGFyYW1zIHx8IGRlY2xhcmVkQmxvY2tQYXJhbXMpIHtcbiAgICAgICAgcHJvZ3JhbVdyYXBwZXIgPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbiwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2U6IGZ1bmN0aW9uKHBhcmFtLCBjb21tb24pIHtcbiAgICAgIGxldCBvYmogPSBwYXJhbSB8fCBjb21tb247XG5cbiAgICAgIGlmIChwYXJhbSAmJiBjb21tb24gJiYgKHBhcmFtICE9PSBjb21tb24pKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgICBibG9ja1BhcmFtcyA9IHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzKSB7XG4gICAgICBpZiAob3B0aW9ucy5kZXB0aHMpIHtcbiAgICAgICAgZGVwdGhzID0gY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXSA/IFtjb250ZXh0XS5jb25jYXQob3B0aW9ucy5kZXB0aHMpIDogb3B0aW9ucy5kZXB0aHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXB0aHMgPSBbY29udGV4dF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFpbihjb250ZXh0LyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuICcnICsgdGVtcGxhdGVTcGVjLm1haW4oY29udGFpbmVyLCBjb250ZXh0LCBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICB9XG4gICAgbWFpbiA9IGV4ZWN1dGVEZWNvcmF0b3JzKHRlbXBsYXRlU3BlYy5tYWluLCBtYWluLCBjb250YWluZXIsIG9wdGlvbnMuZGVwdGhzIHx8IFtdLCBkYXRhLCBibG9ja1BhcmFtcyk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0LmlzVG9wID0gdHJ1ZTtcblxuICByZXQuX3NldHVwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsKSB7XG4gICAgICBjb250YWluZXIuaGVscGVycyA9IGNvbnRhaW5lci5tZXJnZShvcHRpb25zLmhlbHBlcnMsIGVudi5oZWxwZXJzKTtcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZShvcHRpb25zLnBhcnRpYWxzLCBlbnYucGFydGlhbHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsIHx8IHRlbXBsYXRlU3BlYy51c2VEZWNvcmF0b3JzKSB7XG4gICAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gY29udGFpbmVyLm1lcmdlKG9wdGlvbnMuZGVjb3JhdG9ycywgZW52LmRlY29yYXRvcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICB9XG4gIH07XG5cbiAgcmV0Ll9jaGlsZCA9IGZ1bmN0aW9uKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIGJsb2NrIHBhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocyAmJiAhZGVwdGhzKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgcGFyZW50IGRlcHRocycpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwUHJvZ3JhbShjb250YWluZXIsIGksIHRlbXBsYXRlU3BlY1tpXSwgZGF0YSwgMCwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShjb250YWluZXIsIGksIGZuLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKGRlcHRocyAmJiBjb250ZXh0ICE9IGRlcHRoc1swXSkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oY29udGFpbmVyLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLFxuICAgICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgICAgYmxvY2tQYXJhbXMgJiYgW29wdGlvbnMuYmxvY2tQYXJhbXNdLmNvbmNhdChibG9ja1BhcmFtcyksXG4gICAgICAgIGN1cnJlbnREZXB0aHMpO1xuICB9XG5cbiAgcHJvZyA9IGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpO1xuXG4gIHByb2cucHJvZ3JhbSA9IGk7XG4gIHByb2cuZGVwdGggPSBkZXB0aHMgPyBkZXB0aHMubGVuZ3RoIDogMDtcbiAgcHJvZy5ibG9ja1BhcmFtcyA9IGRlY2xhcmVkQmxvY2tQYXJhbXMgfHwgMDtcbiAgcmV0dXJuIHByb2c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIGlmICghcGFydGlhbCkge1xuICAgIGlmIChvcHRpb25zLm5hbWUgPT09ICdAcGFydGlhbC1ibG9jaycpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgd2hpbGUgKGRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9PT0gbm9vcCkge1xuICAgICAgICBkYXRhID0gZGF0YS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcGFydGlhbCA9IGRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgICAgIGRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IG5vb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV07XG4gICAgfVxuICB9IGVsc2UgaWYgKCFwYXJ0aWFsLmNhbGwgJiYgIW9wdGlvbnMubmFtZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHBhcnRpYWwgdGhhdCByZXR1cm5lZCBhIHN0cmluZ1xuICAgIG9wdGlvbnMubmFtZSA9IHBhcnRpYWw7XG4gICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbcGFydGlhbF07XG4gIH1cbiAgcmV0dXJuIHBhcnRpYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBvcHRpb25zLmZuO1xuXG4gICAgaWYgKHBhcnRpYWxCbG9jay5wYXJ0aWFscykge1xuICAgICAgb3B0aW9ucy5wYXJ0aWFscyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucy5wYXJ0aWFscywgcGFydGlhbEJsb2NrLnBhcnRpYWxzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkICYmIHBhcnRpYWxCbG9jaykge1xuICAgIHBhcnRpYWwgPSBwYXJ0aWFsQmxvY2s7XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7IHJldHVybiAnJzsgfVxuXG5mdW5jdGlvbiBpbml0RGF0YShjb250ZXh0LCBkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhKCdyb290JyBpbiBkYXRhKSkge1xuICAgIGRhdGEgPSBkYXRhID8gY3JlYXRlRnJhbWUoZGF0YSkgOiB7fTtcbiAgICBkYXRhLnJvb3QgPSBjb250ZXh0O1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKSB7XG4gIGlmIChmbi5kZWNvcmF0b3IpIHtcbiAgICBsZXQgcHJvcHMgPSB7fTtcbiAgICBwcm9nID0gZm4uZGVjb3JhdG9yKHByb2csIHByb3BzLCBjb250YWluZXIsIGRlcHRocyAmJiBkZXB0aHNbMF0sIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7XG4gIH1cbiAgcmV0dXJuIHByb2c7XG59XG4iXX0= diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/safe-string.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/safe-string.js deleted file mode 100644 index 1118c12de..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/safe-string.js +++ /dev/null @@ -1,15 +0,0 @@ -define(['exports', 'module'], function (exports, module) { - // Build out our basic SafeString type - 'use strict'; - - function SafeString(string) { - this.string = string; - } - - SafeString.prototype.toString = SafeString.prototype.toHTML = function () { - return '' + this.string; - }; - - module.exports = SafeString; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxXQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsUUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7R0FDdEI7O0FBRUQsWUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxXQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0dBQ3pCLENBQUM7O21CQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/utils.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/utils.js deleted file mode 100644 index a6d5692db..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/handlebars/utils.js +++ /dev/null @@ -1,126 +0,0 @@ -define(['exports'], function (exports) { - 'use strict'; - - exports.__esModule = true; - exports.extend = extend; - exports.indexOf = indexOf; - exports.escapeExpression = escapeExpression; - exports.isEmpty = isEmpty; - exports.createFrame = createFrame; - exports.blockParams = blockParams; - exports.appendContextPath = appendContextPath; - var escape = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`', - '=': '=' - }; - - var badChars = /[&<>"'`=]/g, - possible = /[&<>"'`=]/; - - function escapeChar(chr) { - return escape[chr]; - } - - function extend(obj /* , ...source */) { - for (var i = 1; i < arguments.length; i++) { - for (var key in arguments[i]) { - if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { - obj[key] = arguments[i][key]; - } - } - } - - return obj; - } - - var toString = Object.prototype.toString; - - exports.toString = toString; - // Sourced from lodash - // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt - /* eslint-disable func-style */ - var isFunction = function isFunction(value) { - return typeof value === 'function'; - }; - // fallback for older versions of Chrome and Safari - /* istanbul ignore next */ - if (isFunction(/x/)) { - exports.isFunction = isFunction = function (value) { - return typeof value === 'function' && toString.call(value) === '[object Function]'; - }; - } - exports.isFunction = isFunction; - - /* eslint-enable func-style */ - - /* istanbul ignore next */ - var isArray = Array.isArray || function (value) { - return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; - }; - - exports.isArray = isArray; - // Older IE versions do not directly support indexOf so we must implement our own, sadly. - - function indexOf(array, value) { - for (var i = 0, len = array.length; i < len; i++) { - if (array[i] === value) { - return i; - } - } - return -1; - } - - function escapeExpression(string) { - if (typeof string !== 'string') { - // don't escape SafeStrings, since they're already safe - if (string && string.toHTML) { - return string.toHTML(); - } else if (string == null) { - return ''; - } else if (!string) { - return string + ''; - } - - // Force a string conversion as this will be done by the append regardless and - // the regex test will do this transparently behind the scenes, causing issues if - // an object's to string has escaped characters in it. - string = '' + string; - } - - if (!possible.test(string)) { - return string; - } - return string.replace(badChars, escapeChar); - } - - function isEmpty(value) { - if (!value && value !== 0) { - return true; - } else if (isArray(value) && value.length === 0) { - return true; - } else { - return false; - } - } - - function createFrame(object) { - var frame = extend({}, object); - frame._parent = object; - return frame; - } - - function blockParams(params, ids) { - params.path = ids; - return params; - } - - function appendContextPath(contextPath, id) { - return (contextPath ? contextPath + '.' : '') + id; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsTUFBTSxNQUFNLEdBQUc7QUFDYixPQUFHLEVBQUUsT0FBTztBQUNaLE9BQUcsRUFBRSxNQUFNO0FBQ1gsT0FBRyxFQUFFLE1BQU07QUFDWCxPQUFHLEVBQUUsUUFBUTtBQUNiLE9BQUcsRUFBRSxRQUFRO0FBQ2IsT0FBRyxFQUFFLFFBQVE7QUFDYixPQUFHLEVBQUUsUUFBUTtHQUNkLENBQUM7O0FBRUYsTUFBTSxRQUFRLEdBQUcsWUFBWTtNQUN2QixRQUFRLEdBQUcsV0FBVyxDQUFDOztBQUU3QixXQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDdkIsV0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDcEI7O0FBRU0sV0FBUyxNQUFNLENBQUMsR0FBRyxvQkFBbUI7QUFDM0MsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsV0FBSyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDNUIsWUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzNELGFBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7T0FDRjtLQUNGOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1o7O0FBRU0sTUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Ozs7OztBQUtoRCxNQUFJLFVBQVUsR0FBRyxvQkFBUyxLQUFLLEVBQUU7QUFDL0IsV0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUM7R0FDcEMsQ0FBQzs7O0FBR0YsTUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbkIsWUFJTSxVQUFVLEdBSmhCLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRTtBQUMzQixhQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUFDO0tBQ3BGLENBQUM7R0FDSDtVQUNPLFVBQVUsR0FBVixVQUFVOzs7OztBQUlYLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBUyxLQUFLLEVBQUU7QUFDdEQsV0FBTyxBQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEdBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7R0FDakcsQ0FBQzs7Ozs7QUFHSyxXQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ3BDLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsVUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQ3RCLGVBQU8sQ0FBQyxDQUFDO09BQ1Y7S0FDRjtBQUNELFdBQU8sQ0FBQyxDQUFDLENBQUM7R0FDWDs7QUFHTSxXQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtBQUN2QyxRQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTs7QUFFOUIsVUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUMzQixlQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztPQUN4QixNQUFNLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUN6QixlQUFPLEVBQUUsQ0FBQztPQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNsQixlQUFPLE1BQU0sR0FBRyxFQUFFLENBQUM7T0FDcEI7Ozs7O0FBS0QsWUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7S0FDdEI7O0FBRUQsUUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFBRSxhQUFPLE1BQU0sQ0FBQztLQUFFO0FBQzlDLFdBQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7R0FDN0M7O0FBRU0sV0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzdCLFFBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN6QixhQUFPLElBQUksQ0FBQztLQUNiLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0MsYUFBTyxJQUFJLENBQUM7S0FDYixNQUFNO0FBQ0wsYUFBTyxLQUFLLENBQUM7S0FDZDtHQUNGOztBQUVNLFdBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUNsQyxRQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLFNBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLFdBQU8sS0FBSyxDQUFDO0dBQ2Q7O0FBRU0sV0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN2QyxVQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNsQixXQUFPLE1BQU0sQ0FBQztHQUNmOztBQUVNLFdBQVMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRTtBQUNqRCxXQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFBLEdBQUksRUFBRSxDQUFDO0dBQ3BEIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXNjYXBlID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgJ2AnOiAnJiN4NjA7JyxcbiAgJz0nOiAnJiN4M0Q7J1xufTtcblxuY29uc3QgYmFkQ2hhcnMgPSAvWyY8PlwiJ2A9XS9nLFxuICAgICAgcG9zc2libGUgPSAvWyY8PlwiJ2A9XS87XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXIoY2hyKSB7XG4gIHJldHVybiBlc2NhcGVbY2hyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChvYmovKiAsIC4uLnNvdXJjZSAqLykge1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGtleSBpbiBhcmd1bWVudHNbaV0pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW2ldLCBrZXkpKSB7XG4gICAgICAgIG9ialtrZXldID0gYXJndW1lbnRzW2ldW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZXhwb3J0IGxldCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIFNvdXJjZWQgZnJvbSBsb2Rhc2hcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9sb2Rhc2gvYmxvYi9tYXN0ZXIvTElDRU5TRS50eHRcbi8qIGVzbGludC1kaXNhYmxlIGZ1bmMtc3R5bGUgKi9cbmxldCBpc0Z1bmN0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn07XG4vLyBmYWxsYmFjayBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmlcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAoaXNGdW5jdGlvbigveC8pKSB7XG4gIGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gIH07XG59XG5leHBvcnQge2lzRnVuY3Rpb259O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSA/IHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nIDogZmFsc2U7XG59O1xuXG4vLyBPbGRlciBJRSB2ZXJzaW9ucyBkbyBub3QgZGlyZWN0bHkgc3VwcG9ydCBpbmRleE9mIHNvIHdlIG11c3QgaW1wbGVtZW50IG91ciBvd24sIHNhZGx5LlxuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChhcnJheVtpXSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUV4cHJlc3Npb24oc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGVzY2FwZSBTYWZlU3RyaW5ncywgc2luY2UgdGhleSdyZSBhbHJlYWR5IHNhZmVcbiAgICBpZiAoc3RyaW5nICYmIHN0cmluZy50b0hUTUwpIHtcbiAgICAgIHJldHVybiBzdHJpbmcudG9IVE1MKCk7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSBpZiAoIXN0cmluZykge1xuICAgICAgcmV0dXJuIHN0cmluZyArICcnO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIGEgc3RyaW5nIGNvbnZlcnNpb24gYXMgdGhpcyB3aWxsIGJlIGRvbmUgYnkgdGhlIGFwcGVuZCByZWdhcmRsZXNzIGFuZFxuICAgIC8vIHRoZSByZWdleCB0ZXN0IHdpbGwgZG8gdGhpcyB0cmFuc3BhcmVudGx5IGJlaGluZCB0aGUgc2NlbmVzLCBjYXVzaW5nIGlzc3VlcyBpZlxuICAgIC8vIGFuIG9iamVjdCdzIHRvIHN0cmluZyBoYXMgZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGl0LlxuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nO1xuICB9XG5cbiAgaWYgKCFwb3NzaWJsZS50ZXN0KHN0cmluZykpIHsgcmV0dXJuIHN0cmluZzsgfVxuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoYmFkQ2hhcnMsIGVzY2FwZUNoYXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcmFtZShvYmplY3QpIHtcbiAgbGV0IGZyYW1lID0gZXh0ZW5kKHt9LCBvYmplY3QpO1xuICBmcmFtZS5fcGFyZW50ID0gb2JqZWN0O1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBibG9ja1BhcmFtcyhwYXJhbXMsIGlkcykge1xuICBwYXJhbXMucGF0aCA9IGlkcztcbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZENvbnRleHRQYXRoKGNvbnRleHRQYXRoLCBpZCkge1xuICByZXR1cm4gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggKyAnLicgOiAnJykgKyBpZDtcbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/precompiler.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/precompiler.js deleted file mode 100644 index 70a80f96b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/amd/precompiler.js +++ /dev/null @@ -1,292 +0,0 @@ -define(['exports', 'async', 'fs', './handlebars', 'path', 'source-map', 'uglify-js'], function (exports, _async, _fs, _handlebars, _path, _sourceMap, _uglifyJs) { - /* eslint-disable no-console */ - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Async = _interopRequireDefault(_async); - - var _fs2 = _interopRequireDefault(_fs); - - var _uglify = _interopRequireDefault(_uglifyJs); - - module.exports.loadTemplates = function (opts, callback) { - loadStrings(opts, function (err, strings) { - if (err) { - callback(err); - } else { - loadFiles(opts, function (err, files) { - if (err) { - callback(err); - } else { - opts.templates = strings.concat(files); - callback(undefined, opts); - } - }); - } - }); - }; - - function loadStrings(opts, callback) { - var strings = arrayCast(opts.string), - names = arrayCast(opts.name); - - if (names.length !== strings.length && strings.length > 1) { - return callback(new _handlebars.Exception('Number of names did not match the number of string inputs')); - } - - _Async['default'].map(strings, function (string, callback) { - if (string !== '-') { - callback(undefined, string); - } else { - (function () { - // Load from stdin - var buffer = ''; - process.stdin.setEncoding('utf8'); - - process.stdin.on('data', function (chunk) { - buffer += chunk; - }); - process.stdin.on('end', function () { - callback(undefined, buffer); - }); - })(); - } - }, function (err, strings) { - strings = strings.map(function (string, index) { - return { - name: names[index], - path: names[index], - source: string - }; - }); - callback(err, strings); - }); - } - - function loadFiles(opts, callback) { - // Build file extension pattern - var extension = (opts.extension || 'handlebars').replace(/[\\^$*+?.():=!|{}\-\[\]]/g, function (arg) { - return '\\' + arg; - }); - extension = new RegExp('\\.' + extension + '$'); - - var ret = [], - queue = (opts.files || []).map(function (template) { - return { template: template, root: opts.root }; - }); - _Async['default'].whilst(function () { - return queue.length; - }, function (callback) { - var _queue$shift = queue.shift(); - - var path = _queue$shift.template; - var root = _queue$shift.root; - - _fs2['default'].stat(path, function (err, stat) { - if (err) { - return callback(new _handlebars.Exception('Unable to open template file "' + path + '"')); - } - - if (stat.isDirectory()) { - opts.hasDirectory = true; - - _fs2['default'].readdir(path, function (err, children) { - /* istanbul ignore next : Race condition that being too lazy to test */ - if (err) { - return callback(err); - } - children.forEach(function (file) { - var childPath = path + '/' + file; - - if (extension.test(childPath) || _fs2['default'].statSync(childPath).isDirectory()) { - queue.push({ template: childPath, root: root || path }); - } - }); - - callback(); - }); - } else { - _fs2['default'].readFile(path, 'utf8', function (err, data) { - /* istanbul ignore next : Race condition that being too lazy to test */ - if (err) { - return callback(err); - } - - if (opts.bom && data.indexOf('') === 0) { - data = data.substring(1); - } - - // Clean the template name - var name = path; - if (!root) { - name = _path.basename(name); - } else if (name.indexOf(root) === 0) { - name = name.substring(root.length + 1); - } - name = name.replace(extension, ''); - - ret.push({ - path: path, - name: name, - source: data - }); - - callback(); - }); - } - }); - }, function (err) { - if (err) { - callback(err); - } else { - callback(undefined, ret); - } - }); - } - - module.exports.cli = function (opts) { - if (opts.version) { - console.log(_handlebars.VERSION); - return; - } - - if (!opts.templates.length && !opts.hasDirectory) { - throw new _handlebars.Exception('Must define at least one template or directory.'); - } - - if (opts.simple && opts.min) { - throw new _handlebars.Exception('Unable to minimize simple output'); - } - - var multiple = opts.templates.length !== 1 || opts.hasDirectory; - if (opts.simple && multiple) { - throw new _handlebars.Exception('Unable to output multiple templates in simple mode'); - } - - // Force simple mode if we have only one template and it's unnamed. - if (!opts.amd && !opts.commonjs && opts.templates.length === 1 && !opts.templates[0].name) { - opts.simple = true; - } - - // Convert the known list into a hash - var known = {}; - if (opts.known && !Array.isArray(opts.known)) { - opts.known = [opts.known]; - } - if (opts.known) { - for (var i = 0, len = opts.known.length; i < len; i++) { - known[opts.known[i]] = true; - } - } - - var objectName = opts.partial ? 'Handlebars.partials' : 'templates'; - - var output = new _sourceMap.SourceNode(); - if (!opts.simple) { - if (opts.amd) { - output.add('define([\'' + opts.handlebarPath + 'handlebars.runtime\'], function(Handlebars) {\n Handlebars = Handlebars["default"];'); - } else if (opts.commonjs) { - output.add('var Handlebars = require("' + opts.commonjs + '");'); - } else { - output.add('(function() {\n'); - } - output.add(' var template = Handlebars.template, templates = '); - if (opts.namespace) { - output.add(opts.namespace); - output.add(' = '); - output.add(opts.namespace); - output.add(' || '); - } - output.add('{};\n'); - } - - opts.templates.forEach(function (template) { - var options = { - knownHelpers: known, - knownHelpersOnly: opts.o - }; - - if (opts.map) { - options.srcName = template.path; - } - if (opts.data) { - options.data = true; - } - - var precompiled = _handlebars.precompile(template.source, options); - - // If we are generating a source map, we have to reconstruct the SourceNode object - if (opts.map) { - var consumer = new _sourceMap.SourceMapConsumer(precompiled.map); - precompiled = _sourceMap.SourceNode.fromStringWithSourceMap(precompiled.code, consumer); - } - - if (opts.simple) { - output.add([precompiled, '\n']); - } else { - if (!template.name) { - throw new _handlebars.Exception('Name missing for template'); - } - - if (opts.amd && !multiple) { - output.add('return '); - } - output.add([objectName, '[\'', template.name, '\'] = template(', precompiled, ');\n']); - } - }); - - // Output the content - if (!opts.simple) { - if (opts.amd) { - if (multiple) { - output.add(['return ', objectName, ';\n']); - } - output.add('});'); - } else if (!opts.commonjs) { - output.add('})();'); - } - } - - if (opts.map) { - output.add('\n//# sourceMappingURL=' + opts.map + '\n'); - } - - output = output.toStringWithSourceMap(); - output.map = output.map + ''; - - if (opts.min) { - output = _uglify['default'].minify(output.code, { - fromString: true, - - outSourceMap: opts.map, - inSourceMap: JSON.parse(output.map) - }); - if (opts.map) { - output.code += '\n//# sourceMappingURL=' + opts.map + '\n'; - } - } - - if (opts.map) { - _fs2['default'].writeFileSync(opts.map, output.map, 'utf8'); - } - output = output.code; - - if (opts.output) { - _fs2['default'].writeFileSync(opts.output, output, 'utf8'); - } else { - console.log(output); - } - }; - - function arrayCast(value) { - value = value != null ? value : []; - if (!Array.isArray(value)) { - value = [value]; - } - return value; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9wcmVjb21waWxlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQVFBLFFBQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLFVBQVMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUN0RCxlQUFXLENBQUMsSUFBSSxFQUFFLFVBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRTtBQUN2QyxVQUFJLEdBQUcsRUFBRTtBQUNQLGdCQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7T0FDZixNQUFNO0FBQ0wsaUJBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ25DLGNBQUksR0FBRyxFQUFFO0FBQ1Asb0JBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztXQUNmLE1BQU07QUFDTCxnQkFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLG9CQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQzNCO1NBQ0YsQ0FBQyxDQUFDO09BQ0o7S0FDRixDQUFDLENBQUM7R0FDSixDQUFDOztBQUVGLFdBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDbkMsUUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDaEMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWpDLFFBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxJQUM1QixPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN6QixhQUFPLFFBQVEsQ0FBQyxJQUFJLFlBQVcsU0FBUyxDQUFDLDJEQUEyRCxDQUFDLENBQUMsQ0FBQztLQUN4Rzs7QUFFRCxzQkFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLFVBQVMsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUMxQyxVQUFJLE1BQU0sS0FB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LEdBQUcsQ0FBQztPQUNwQyxDQUFDLENBQUM7QUFDSCxVQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDWixjQUFNLENBQUMsSUFBSSxJQUFJLHlCQUF5QixHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO09BQzVEO0tBQ0Y7O0FBRUQsUUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ1osc0JBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNoRDtBQUNELFVBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDOztBQUVyQixRQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDZixzQkFBRyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDL0MsTUFBTTtBQUNMLGFBQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDckI7R0FDRixDQUFDOztBQUVGLFdBQVMsU0FBUyxDQUFDLEtBQUssRUFBRTtBQUN4QixTQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ25DLFFBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQ2pCO0FBQ0QsV0FBTyxLQUFLLENBQUM7R0FDZCIsImZpbGUiOiJwcmVjb21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCBBc3luYyBmcm9tICdhc3luYyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgSGFuZGxlYmFycyBmcm9tICcuL2hhbmRsZWJhcnMnO1xuaW1wb3J0IHtiYXNlbmFtZX0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1NvdXJjZU1hcENvbnN1bWVyLCBTb3VyY2VOb2RlfSBmcm9tICdzb3VyY2UtbWFwJztcbmltcG9ydCB1Z2xpZnkgZnJvbSAndWdsaWZ5LWpzJztcblxubW9kdWxlLmV4cG9ydHMubG9hZFRlbXBsYXRlcyA9IGZ1bmN0aW9uKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGxvYWRTdHJpbmdzKG9wdHMsIGZ1bmN0aW9uKGVyciwgc3RyaW5ncykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYWRGaWxlcyhvcHRzLCBmdW5jdGlvbihlcnIsIGZpbGVzKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdHMudGVtcGxhdGVzID0gc3RyaW5ncy5jb25jYXQoZmlsZXMpO1xuICAgICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBsb2FkU3RyaW5ncyhvcHRzLCBjYWxsYmFjaykge1xuICBsZXQgc3RyaW5ncyA9IGFycmF5Q2FzdChvcHRzLnN0cmluZyksXG4gICAgICBuYW1lcyA9IGFycmF5Q2FzdChvcHRzLm5hbWUpO1xuXG4gIGlmIChuYW1lcy5sZW5ndGggIT09IHN0cmluZ3MubGVuZ3RoXG4gICAgICAmJiBzdHJpbmdzLmxlbmd0aCA+IDEpIHtcbiAgICByZXR1cm4gY2FsbGJhY2sobmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCdOdW1iZXIgb2YgbmFtZXMgZGlkIG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIHN0cmluZyBpbnB1dHMnKSk7XG4gIH1cblxuICBBc3luYy5tYXAoc3RyaW5ncywgZnVuY3Rpb24oc3RyaW5nLCBjYWxsYmFjaykge1xuICAgICAgaWYgKHN0cmluZyAhPT0gJy0nKSB7XG4gICAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgc3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvYWQgZnJvbSBzdGRpblxuICAgICAgICBsZXQgYnVmZmVyID0gJyc7XG4gICAgICAgIHByb2Nlc3Muc3RkaW4uc2V0RW5jb2RpbmcoJ3V0ZjgnKTtcblxuICAgICAgICBwcm9jZXNzLnN0ZGluLm9uKCdkYXRhJywgZnVuY3Rpb24oY2h1bmspIHtcbiAgICAgICAgICBidWZmZXIgKz0gY2h1bms7XG4gICAgICAgIH0pO1xuICAgICAgICBwcm9jZXNzLnN0ZGluLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQsIGJ1ZmZlcik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAgZnVuY3Rpb24oZXJyLCBzdHJpbmdzKSB7XG4gICAgICBzdHJpbmdzID0gc3RyaW5ncy5tYXAoKHN0cmluZywgaW5kZXgpID0+ICh7XG4gICAgICAgIG5hbWU6IG5hbWVzW2luZGV4XSxcbiAgICAgICAgcGF0aDogbmFtZXNbaW5kZXhdLFxuICAgICAgICBzb3VyY2U6IHN0cmluZ1xuICAgICAgfSkpO1xuICAgICAgY2FsbGJhY2soZXJyLCBzdHJpbmdzKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gbG9hZEZpbGVzKG9wdHMsIGNhbGxiYWNrKSB7XG4gIC8vIEJ1aWxkIGZpbGUgZXh0ZW5zaW9uIHBhdHRlcm5cbiAgbGV0IGV4dGVuc2lvbiA9IChvcHRzLmV4dGVuc2lvbiB8fCAnaGFuZGxlYmFycycpLnJlcGxhY2UoL1tcXFxcXiQqKz8uKCk6PSF8e31cXC1cXFtcXF1dL2csIGZ1bmN0aW9uKGFyZykgeyByZXR1cm4gJ1xcXFwnICsgYXJnOyB9KTtcbiAgZXh0ZW5zaW9uID0gbmV3IFJlZ0V4cCgnXFxcXC4nICsgZXh0ZW5zaW9uICsgJyQnKTtcblxuICBsZXQgcmV0ID0gW10sXG4gICAgICBxdWV1ZSA9IChvcHRzLmZpbGVzIHx8IFtdKS5tYXAoKHRlbXBsYXRlKSA9PiAoe3RlbXBsYXRlLCByb290OiBvcHRzLnJvb3R9KSk7XG4gIEFzeW5jLndoaWxzdCgoKSA9PiBxdWV1ZS5sZW5ndGgsIGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgbGV0IHt0ZW1wbGF0ZTogcGF0aCwgcm9vdH0gPSBxdWV1ZS5zaGlmdCgpO1xuXG4gICAgZnMuc3RhdChwYXRoLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBIYW5kbGViYXJzLkV4Y2VwdGlvbihgVW5hYmxlIHRvIG9wZW4gdGVtcGxhdGUgZmlsZSBcIiR7cGF0aH1cImApKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBvcHRzLmhhc0RpcmVjdG9yeSA9IHRydWU7XG5cbiAgICAgICAgZnMucmVhZGRpcihwYXRoLCBmdW5jdGlvbihlcnIsIGNoaWxkcmVuKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgOiBSYWNlIGNvbmRpdGlvbiB0aGF0IGJlaW5nIHRvbyBsYXp5IHRvIHRlc3QgKi9cbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihmaWxlKSB7XG4gICAgICAgICAgICBsZXQgY2hpbGRQYXRoID0gcGF0aCArICcvJyArIGZpbGU7XG5cbiAgICAgICAgICAgIGlmIChleHRlbnNpb24udGVzdChjaGlsZFBhdGgpIHx8IGZzLnN0YXRTeW5jKGNoaWxkUGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgICAgICBxdWV1ZS5wdXNoKHt0ZW1wbGF0ZTogY2hpbGRQYXRoLCByb290OiByb290IHx8IHBhdGh9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnMucmVhZEZpbGUocGF0aCwgJ3V0ZjgnLCBmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCA6IFJhY2UgY29uZGl0aW9uIHRoYXQgYmVpbmcgdG9vIGxhenkgdG8gdGVzdCAqL1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcHRzLmJvbSAmJiBkYXRhLmluZGV4T2YoJ1xcdUZFRkYnKSA9PT0gMCkge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGEuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENsZWFuIHRoZSB0ZW1wbGF0ZSBuYW1lXG4gICAgICAgICAgbGV0IG5hbWUgPSBwYXRoO1xuICAgICAgICAgIGlmICghcm9vdCkge1xuICAgICAgICAgICAgbmFtZSA9IGJhc2VuYW1lKG5hbWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmFtZS5pbmRleE9mKHJvb3QpID09PSAwKSB7XG4gICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcocm9vdC5sZW5ndGggKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShleHRlbnNpb24sICcnKTtcblxuICAgICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IHBhdGgsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgc291cmNlOiBkYXRhXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcbiAgZnVuY3Rpb24oZXJyKSB7XG4gICAgaWYgKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sodW5kZWZpbmVkLCByZXQpO1xuICAgIH1cbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmNsaSA9IGZ1bmN0aW9uKG9wdHMpIHtcbiAgaWYgKG9wdHMudmVyc2lvbikge1xuICAgIGNvbnNvbGUubG9nKEhhbmRsZWJhcnMuVkVSU0lPTik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFvcHRzLnRlbXBsYXRlcy5sZW5ndGggJiYgIW9wdHMuaGFzRGlyZWN0b3J5KSB7XG4gICAgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCdNdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgdGVtcGxhdGUgb3IgZGlyZWN0b3J5LicpO1xuICB9XG5cbiAgaWYgKG9wdHMuc2ltcGxlICYmIG9wdHMubWluKSB7XG4gICAgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCdVbmFibGUgdG8gbWluaW1pemUgc2ltcGxlIG91dHB1dCcpO1xuICB9XG5cbiAgY29uc3QgbXVsdGlwbGUgPSBvcHRzLnRlbXBsYXRlcy5sZW5ndGggIT09IDEgfHwgb3B0cy5oYXNEaXJlY3Rvcnk7XG4gIGlmIChvcHRzLnNpbXBsZSAmJiBtdWx0aXBsZSkge1xuICAgIHRocm93IG5ldyBIYW5kbGViYXJzLkV4Y2VwdGlvbignVW5hYmxlIHRvIG91dHB1dCBtdWx0aXBsZSB0ZW1wbGF0ZXMgaW4gc2ltcGxlIG1vZGUnKTtcbiAgfVxuXG4gIC8vIEZvcmNlIHNpbXBsZSBtb2RlIGlmIHdlIGhhdmUgb25seSBvbmUgdGVtcGxhdGUgYW5kIGl0J3MgdW5uYW1lZC5cbiAgaWYgKCFvcHRzLmFtZCAmJiAhb3B0cy5jb21tb25qcyAmJiBvcHRzLnRlbXBsYXRlcy5sZW5ndGggPT09IDFcbiAgICAgICYmICFvcHRzLnRlbXBsYXRlc1swXS5uYW1lKSB7XG4gICAgb3B0cy5zaW1wbGUgPSB0cnVlO1xuICB9XG5cbiAgLy8gQ29udmVydCB0aGUga25vd24gbGlzdCBpbnRvIGEgaGFzaFxuICBsZXQga25vd24gPSB7fTtcbiAgaWYgKG9wdHMua25vd24gJiYgIUFycmF5LmlzQXJyYXkob3B0cy5rbm93bikpIHtcbiAgICBvcHRzLmtub3duID0gW29wdHMua25vd25dO1xuICB9XG4gIGlmIChvcHRzLmtub3duKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IG9wdHMua25vd24ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtub3duW29wdHMua25vd25baV1dID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBvYmplY3ROYW1lID0gb3B0cy5wYXJ0aWFsID8gJ0hhbmRsZWJhcnMucGFydGlhbHMnIDogJ3RlbXBsYXRlcyc7XG5cbiAgbGV0IG91dHB1dCA9IG5ldyBTb3VyY2VOb2RlKCk7XG4gIGlmICghb3B0cy5zaW1wbGUpIHtcbiAgICBpZiAob3B0cy5hbWQpIHtcbiAgICAgIG91dHB1dC5hZGQoJ2RlZmluZShbXFwnJyArIG9wdHMuaGFuZGxlYmFyUGF0aCArICdoYW5kbGViYXJzLnJ1bnRpbWVcXCddLCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XFxuICBIYW5kbGViYXJzID0gSGFuZGxlYmFyc1tcImRlZmF1bHRcIl07Jyk7XG4gICAgfSBlbHNlIGlmIChvcHRzLmNvbW1vbmpzKSB7XG4gICAgICBvdXRwdXQuYWRkKCd2YXIgSGFuZGxlYmFycyA9IHJlcXVpcmUoXCInICsgb3B0cy5jb21tb25qcyArICdcIik7Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5hZGQoJyhmdW5jdGlvbigpIHtcXG4nKTtcbiAgICB9XG4gICAgb3V0cHV0LmFkZCgnICB2YXIgdGVtcGxhdGUgPSBIYW5kbGViYXJzLnRlbXBsYXRlLCB0ZW1wbGF0ZXMgPSAnKTtcbiAgICBpZiAob3B0cy5uYW1lc3BhY2UpIHtcbiAgICAgIG91dHB1dC5hZGQob3B0cy5uYW1lc3BhY2UpO1xuICAgICAgb3V0cHV0LmFkZCgnID0gJyk7XG4gICAgICBvdXRwdXQuYWRkKG9wdHMubmFtZXNwYWNlKTtcbiAgICAgIG91dHB1dC5hZGQoJyB8fCAnKTtcbiAgICB9XG4gICAgb3V0cHV0LmFkZCgne307XFxuJyk7XG4gIH1cblxuICBvcHRzLnRlbXBsYXRlcy5mb3JFYWNoKGZ1bmN0aW9uKHRlbXBsYXRlKSB7XG4gICAgbGV0IG9wdGlvbnMgPSB7XG4gICAgICBrbm93bkhlbHBlcnM6IGtub3duLFxuICAgICAga25vd25IZWxwZXJzT25seTogb3B0cy5vXG4gICAgfTtcblxuICAgIGlmIChvcHRzLm1hcCkge1xuICAgICAgb3B0aW9ucy5zcmNOYW1lID0gdGVtcGxhdGUucGF0aDtcbiAgICB9XG4gICAgaWYgKG9wdHMuZGF0YSkge1xuICAgICAgb3B0aW9ucy5kYXRhID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgcHJlY29tcGlsZWQgPSBIYW5kbGViYXJzLnByZWNvbXBpbGUodGVtcGxhdGUuc291cmNlLCBvcHRpb25zKTtcblxuICAgIC8vIElmIHdlIGFyZSBnZW5lcmF0aW5nIGEgc291cmNlIG1hcCwgd2UgaGF2ZSB0byByZWNvbnN0cnVjdCB0aGUgU291cmNlTm9kZSBvYmplY3RcbiAgICBpZiAob3B0cy5tYXApIHtcbiAgICAgIGxldCBjb25zdW1lciA9IG5ldyBTb3VyY2VNYXBDb25zdW1lcihwcmVjb21waWxlZC5tYXApO1xuICAgICAgcHJlY29tcGlsZWQgPSBTb3VyY2VOb2RlLmZyb21TdHJpbmdXaXRoU291cmNlTWFwKHByZWNvbXBpbGVkLmNvZGUsIGNvbnN1bWVyKTtcbiAgICB9XG5cbiAgICBpZiAob3B0cy5zaW1wbGUpIHtcbiAgICAgIG91dHB1dC5hZGQoW3ByZWNvbXBpbGVkLCAnXFxuJ10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRlbXBsYXRlLm5hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEhhbmRsZWJhcnMuRXhjZXB0aW9uKCdOYW1lIG1pc3NpbmcgZm9yIHRlbXBsYXRlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRzLmFtZCAmJiAhbXVsdGlwbGUpIHtcbiAgICAgICAgb3V0cHV0LmFkZCgncmV0dXJuICcpO1xuICAgICAgfVxuICAgICAgb3V0cHV0LmFkZChbb2JqZWN0TmFtZSwgJ1tcXCcnLCB0ZW1wbGF0ZS5uYW1lLCAnXFwnXSA9IHRlbXBsYXRlKCcsIHByZWNvbXBpbGVkLCAnKTtcXG4nXSk7XG4gICAgfVxuICB9KTtcblxuICAvLyBPdXRwdXQgdGhlIGNvbnRlbnRcbiAgaWYgKCFvcHRzLnNpbXBsZSkge1xuICAgIGlmIChvcHRzLmFtZCkge1xuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIG91dHB1dC5hZGQoWydyZXR1cm4gJywgb2JqZWN0TmFtZSwgJztcXG4nXSk7XG4gICAgICB9XG4gICAgICBvdXRwdXQuYWRkKCd9KTsnKTtcbiAgICB9IGVsc2UgaWYgKCFvcHRzLmNvbW1vbmpzKSB7XG4gICAgICBvdXRwdXQuYWRkKCd9KSgpOycpO1xuICAgIH1cbiAgfVxuXG5cbiAgaWYgKG9wdHMubWFwKSB7XG4gICAgb3V0cHV0LmFkZCgnXFxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9JyArIG9wdHMubWFwICsgJ1xcbicpO1xuICB9XG5cbiAgb3V0cHV0ID0gb3V0cHV0LnRvU3RyaW5nV2l0aFNvdXJjZU1hcCgpO1xuICBvdXRwdXQubWFwID0gb3V0cHV0Lm1hcCArICcnO1xuXG4gIGlmIChvcHRzLm1pbikge1xuICAgIG91dHB1dCA9IHVnbGlmeS5taW5pZnkob3V0cHV0LmNvZGUsIHtcbiAgICAgIGZyb21TdHJpbmc6IHRydWUsXG5cbiAgICAgIG91dFNvdXJjZU1hcDogb3B0cy5tYXAsXG4gICAgICBpblNvdXJjZU1hcDogSlNPTi5wYXJzZShvdXRwdXQubWFwKVxuICAgIH0pO1xuICAgIGlmIChvcHRzLm1hcCkge1xuICAgICAgb3V0cHV0LmNvZGUgKz0gJ1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPScgKyBvcHRzLm1hcCArICdcXG4nO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRzLm1hcCkge1xuICAgIGZzLndyaXRlRmlsZVN5bmMob3B0cy5tYXAsIG91dHB1dC5tYXAsICd1dGY4Jyk7XG4gIH1cbiAgb3V0cHV0ID0gb3V0cHV0LmNvZGU7XG5cbiAgaWYgKG9wdHMub3V0cHV0KSB7XG4gICAgZnMud3JpdGVGaWxlU3luYyhvcHRzLm91dHB1dCwgb3V0cHV0LCAndXRmOCcpO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKG91dHB1dCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGFycmF5Q2FzdCh2YWx1ZSkge1xuICB2YWx1ZSA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZSA6IFtdO1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgdmFsdWUgPSBbdmFsdWVdO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars.js deleted file mode 100644 index 6bb541576..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars.js +++ /dev/null @@ -1,65 +0,0 @@ -'use strict'; - -exports.__esModule = true; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _handlebarsRuntime = require('./handlebars.runtime'); - -var _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime); - -// Compiler imports - -var _handlebarsCompilerAst = require('./handlebars/compiler/ast'); - -var _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst); - -var _handlebarsCompilerBase = require('./handlebars/compiler/base'); - -var _handlebarsCompilerCompiler = require('./handlebars/compiler/compiler'); - -var _handlebarsCompilerJavascriptCompiler = require('./handlebars/compiler/javascript-compiler'); - -var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler); - -var _handlebarsCompilerVisitor = require('./handlebars/compiler/visitor'); - -var _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor); - -var _handlebarsNoConflict = require('./handlebars/no-conflict'); - -var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict); - -var _create = _handlebarsRuntime2['default'].create; -function create() { - var hb = _create(); - - hb.compile = function (input, options) { - return _handlebarsCompilerCompiler.compile(input, options, hb); - }; - hb.precompile = function (input, options) { - return _handlebarsCompilerCompiler.precompile(input, options, hb); - }; - - hb.AST = _handlebarsCompilerAst2['default']; - hb.Compiler = _handlebarsCompilerCompiler.Compiler; - hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default']; - hb.Parser = _handlebarsCompilerBase.parser; - hb.parse = _handlebarsCompilerBase.parse; - - return hb; -} - -var inst = create(); -inst.create = create; - -_handlebarsNoConflict2['default'](inst); - -inst.Visitor = _handlebarsCompilerVisitor2['default']; - -inst['default'] = inst; - -exports['default'] = inst; -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7aUNBQW9CLHNCQUFzQjs7Ozs7O3FDQUcxQiwyQkFBMkI7Ozs7c0NBQ0gsNEJBQTRCOzswQ0FDdEIsZ0NBQWdDOztvREFDL0MsMkNBQTJDOzs7O3lDQUN0RCwrQkFBK0I7Ozs7b0NBRTVCLDBCQUEwQjs7OztBQUVqRCxJQUFJLE9BQU8sR0FBRywrQkFBUSxNQUFNLENBQUM7QUFDN0IsU0FBUyxNQUFNLEdBQUc7QUFDaEIsTUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7O0FBRW5CLElBQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLFdBQU8sb0NBQVEsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztHQUNwQyxDQUFDO0FBQ0YsSUFBRSxDQUFDLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDdkMsV0FBTyx1Q0FBVyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQ3ZDLENBQUM7O0FBRUYsSUFBRSxDQUFDLEdBQUcscUNBQU0sQ0FBQztBQUNiLElBQUUsQ0FBQyxRQUFRLHVDQUFXLENBQUM7QUFDdkIsSUFBRSxDQUFDLGtCQUFrQixvREFBcUIsQ0FBQztBQUMzQyxJQUFFLENBQUMsTUFBTSxpQ0FBUyxDQUFDO0FBQ25CLElBQUUsQ0FBQyxLQUFLLGdDQUFRLENBQUM7O0FBRWpCLFNBQU8sRUFBRSxDQUFDO0NBQ1g7O0FBRUQsSUFBSSxJQUFJLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7O0FBRXJCLGtDQUFXLElBQUksQ0FBQyxDQUFDOztBQUVqQixJQUFJLENBQUMsT0FBTyx5Q0FBVSxDQUFDOztBQUV2QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDOztxQkFFUixJQUFJIiwiZmlsZSI6ImhhbmRsZWJhcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcnVudGltZSBmcm9tICcuL2hhbmRsZWJhcnMucnVudGltZSc7XG5cbi8vIENvbXBpbGVyIGltcG9ydHNcbmltcG9ydCBBU1QgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdCc7XG5pbXBvcnQgeyBwYXJzZXIgYXMgUGFyc2VyLCBwYXJzZSB9IGZyb20gJy4vaGFuZGxlYmFycy9jb21waWxlci9iYXNlJztcbmltcG9ydCB7IENvbXBpbGVyLCBjb21waWxlLCBwcmVjb21waWxlIH0gZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyJztcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXInO1xuaW1wb3J0IFZpc2l0b3IgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3InO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG5sZXQgX2NyZWF0ZSA9IHJ1bnRpbWUuY3JlYXRlO1xuZnVuY3Rpb24gY3JlYXRlKCkge1xuICBsZXQgaGIgPSBfY3JlYXRlKCk7XG5cbiAgaGIuY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcbiAgaGIucHJlY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHByZWNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcblxuICBoYi5BU1QgPSBBU1Q7XG4gIGhiLkNvbXBpbGVyID0gQ29tcGlsZXI7XG4gIGhiLkphdmFTY3JpcHRDb21waWxlciA9IEphdmFTY3JpcHRDb21waWxlcjtcbiAgaGIuUGFyc2VyID0gUGFyc2VyO1xuICBoYi5wYXJzZSA9IHBhcnNlO1xuXG4gIHJldHVybiBoYjtcbn1cblxubGV0IGluc3QgPSBjcmVhdGUoKTtcbmluc3QuY3JlYXRlID0gY3JlYXRlO1xuXG5ub0NvbmZsaWN0KGluc3QpO1xuXG5pbnN0LlZpc2l0b3IgPSBWaXNpdG9yO1xuXG5pbnN0WydkZWZhdWx0J10gPSBpbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBpbnN0O1xuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars.runtime.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars.runtime.js deleted file mode 100644 index 37550bcbf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars.runtime.js +++ /dev/null @@ -1,66 +0,0 @@ -'use strict'; - -exports.__esModule = true; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -// istanbul ignore next - -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 _handlebarsBase = require('./handlebars/base'); - -var base = _interopRequireWildcard(_handlebarsBase); - -// Each of these augment the Handlebars object. No need to setup here. -// (This is done to easily share code between commonjs and browse envs) - -var _handlebarsSafeString = require('./handlebars/safe-string'); - -var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString); - -var _handlebarsException = require('./handlebars/exception'); - -var _handlebarsException2 = _interopRequireDefault(_handlebarsException); - -var _handlebarsUtils = require('./handlebars/utils'); - -var Utils = _interopRequireWildcard(_handlebarsUtils); - -var _handlebarsRuntime = require('./handlebars/runtime'); - -var runtime = _interopRequireWildcard(_handlebarsRuntime); - -var _handlebarsNoConflict = require('./handlebars/no-conflict'); - -var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict); - -// For compatibility and usage outside of module systems, make the Handlebars object a namespace -function create() { - var hb = new base.HandlebarsEnvironment(); - - Utils.extend(hb, base); - hb.SafeString = _handlebarsSafeString2['default']; - hb.Exception = _handlebarsException2['default']; - hb.Utils = Utils; - hb.escapeExpression = Utils.escapeExpression; - - hb.VM = runtime; - hb.template = function (spec) { - return runtime.template(spec, hb); - }; - - return hb; -} - -var inst = create(); -inst.create = create; - -_handlebarsNoConflict2['default'](inst); - -inst['default'] = inst; - -exports['default'] = inst; -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0= diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/base.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/base.js deleted file mode 100644 index d1cfc561d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/base.js +++ /dev/null @@ -1,104 +0,0 @@ -'use strict'; - -exports.__esModule = true; -exports.HandlebarsEnvironment = HandlebarsEnvironment; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _utils = require('./utils'); - -var _exception = require('./exception'); - -var _exception2 = _interopRequireDefault(_exception); - -var _helpers = require('./helpers'); - -var _decorators = require('./decorators'); - -var _logger = require('./logger'); - -var _logger2 = _interopRequireDefault(_logger); - -var VERSION = '4.0.5'; -exports.VERSION = VERSION; -var COMPILER_REVISION = 7; - -exports.COMPILER_REVISION = COMPILER_REVISION; -var REVISION_CHANGES = { - 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it - 2: '== 1.0.0-rc.3', - 3: '== 1.0.0-rc.4', - 4: '== 1.x.x', - 5: '== 2.0.0-alpha.x', - 6: '>= 2.0.0-beta.1', - 7: '>= 4.0.0' -}; - -exports.REVISION_CHANGES = REVISION_CHANGES; -var objectType = '[object Object]'; - -function HandlebarsEnvironment(helpers, partials, decorators) { - this.helpers = helpers || {}; - this.partials = partials || {}; - this.decorators = decorators || {}; - - _helpers.registerDefaultHelpers(this); - _decorators.registerDefaultDecorators(this); -} - -HandlebarsEnvironment.prototype = { - constructor: HandlebarsEnvironment, - - logger: _logger2['default'], - log: _logger2['default'].log, - - registerHelper: function registerHelper(name, fn) { - if (_utils.toString.call(name) === objectType) { - if (fn) { - throw new _exception2['default']('Arg not supported with multiple helpers'); - } - _utils.extend(this.helpers, name); - } else { - this.helpers[name] = fn; - } - }, - unregisterHelper: function unregisterHelper(name) { - delete this.helpers[name]; - }, - - registerPartial: function registerPartial(name, partial) { - if (_utils.toString.call(name) === objectType) { - _utils.extend(this.partials, name); - } else { - if (typeof partial === 'undefined') { - throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined'); - } - this.partials[name] = partial; - } - }, - unregisterPartial: function unregisterPartial(name) { - delete this.partials[name]; - }, - - registerDecorator: function registerDecorator(name, fn) { - if (_utils.toString.call(name) === objectType) { - if (fn) { - throw new _exception2['default']('Arg not supported with multiple decorators'); - } - _utils.extend(this.decorators, name); - } else { - this.decorators[name] = fn; - } - }, - unregisterDecorator: function unregisterDecorator(name) { - delete this.decorators[name]; - } -}; - -var log = _logger2['default'].log; - -exports.log = log; -exports.createFrame = _utils.createFrame; -exports.logger = _logger2['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQTRDLFNBQVM7O3lCQUMvQixhQUFhOzs7O3VCQUNFLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNuQyxVQUFVOzs7O0FBRXRCLElBQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQzs7QUFDeEIsSUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7OztBQUU1QixJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxVQUFVO0NBQ2QsQ0FBQzs7O0FBRUYsSUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7O0FBRTlCLFNBQVMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbkUsTUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzdCLE1BQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMvQixNQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7O0FBRW5DLGtDQUF1QixJQUFJLENBQUMsQ0FBQztBQUM3Qix3Q0FBMEIsSUFBSSxDQUFDLENBQUM7Q0FDakM7O0FBRUQscUJBQXFCLENBQUMsU0FBUyxHQUFHO0FBQ2hDLGFBQVcsRUFBRSxxQkFBcUI7O0FBRWxDLFFBQU0scUJBQVE7QUFDZCxLQUFHLEVBQUUsb0JBQU8sR0FBRzs7QUFFZixnQkFBYyxFQUFFLHdCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDakMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQUUsY0FBTSwyQkFBYyx5Q0FBeUMsQ0FBQyxDQUFDO09BQUU7QUFDM0Usb0JBQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM1QixNQUFNO0FBQ0wsVUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDekI7R0FDRjtBQUNELGtCQUFnQixFQUFFLDBCQUFTLElBQUksRUFBRTtBQUMvQixXQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDM0I7O0FBRUQsaUJBQWUsRUFBRSx5QkFBUyxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ3ZDLFFBQUksZ0JBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxvQkFBTyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzdCLE1BQU07QUFDTCxVQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRTtBQUNsQyxjQUFNLHlFQUEwRCxJQUFJLG9CQUFpQixDQUFDO09BQ3ZGO0FBQ0QsVUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7S0FDL0I7R0FDRjtBQUNELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRTtBQUNoQyxXQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDNUI7O0FBRUQsbUJBQWlCLEVBQUUsMkJBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNwQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFBRSxjQUFNLDJCQUFjLDRDQUE0QyxDQUFDLENBQUM7T0FBRTtBQUM5RSxvQkFBTyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQy9CLE1BQU07QUFDTCxVQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUM1QjtHQUNGO0FBQ0QscUJBQW1CLEVBQUUsNkJBQVMsSUFBSSxFQUFFO0FBQ2xDLFdBQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUM5QjtDQUNGLENBQUM7O0FBRUssSUFBSSxHQUFHLEdBQUcsb0JBQU8sR0FBRyxDQUFDOzs7UUFFcEIsV0FBVztRQUFFLE1BQU0iLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Y3JlYXRlRnJhbWUsIGV4dGVuZCwgdG9TdHJpbmd9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdEhlbHBlcnN9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnN9IGZyb20gJy4vZGVjb3JhdG9ycyc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcblxuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSAnNC4wLjUnO1xuZXhwb3J0IGNvbnN0IENPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAnXG59O1xuXG5jb25zdCBvYmplY3RUeXBlID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBIYW5kbGViYXJzRW52aXJvbm1lbnQoaGVscGVycywgcGFydGlhbHMsIGRlY29yYXRvcnMpIHtcbiAgdGhpcy5oZWxwZXJzID0gaGVscGVycyB8fCB7fTtcbiAgdGhpcy5wYXJ0aWFscyA9IHBhcnRpYWxzIHx8IHt9O1xuICB0aGlzLmRlY29yYXRvcnMgPSBkZWNvcmF0b3JzIHx8IHt9O1xuXG4gIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnModGhpcyk7XG4gIHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnModGhpcyk7XG59XG5cbkhhbmRsZWJhcnNFbnZpcm9ubWVudC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBIYW5kbGViYXJzRW52aXJvbm1lbnQsXG5cbiAgbG9nZ2VyOiBsb2dnZXIsXG4gIGxvZzogbG9nZ2VyLmxvZyxcblxuICByZWdpc3RlckhlbHBlcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgaGVscGVycycpOyB9XG4gICAgICBleHRlbmQodGhpcy5oZWxwZXJzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWxwZXJzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuaGVscGVyc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUsIHBhcnRpYWwpIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgZXh0ZW5kKHRoaXMucGFydGlhbHMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHBhcnRpYWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oYEF0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgYSBwYXJ0aWFsIGNhbGxlZCBcIiR7bmFtZX1cIiBhcyB1bmRlZmluZWRgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7IHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpOyB9XG4gICAgICBleHRlbmQodGhpcy5kZWNvcmF0b3JzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWNvcmF0b3JzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuZGVjb3JhdG9yc1tuYW1lXTtcbiAgfVxufTtcblxuZXhwb3J0IGxldCBsb2cgPSBsb2dnZXIubG9nO1xuXG5leHBvcnQge2NyZWF0ZUZyYW1lLCBsb2dnZXJ9O1xuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js deleted file mode 100644 index 33c65fe8d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/ast.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -exports.__esModule = true; -var AST = { - // Public API used to evaluate derived attributes regarding AST nodes - helpers: { - // a mustache is definitely a helper if: - // * it is an eligible helper, and - // * it has at least one parameter or hash segment - helperExpression: function helperExpression(node) { - return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash); - }, - - scopedId: function scopedId(path) { - return (/^\.|this\b/.test(path.original) - ); - }, - - // an ID is simple if it only has one part, and that part is not - // `..` or `this`. - simpleId: function simpleId(path) { - return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth; - } - } -}; - -// Must be exported as an object rather than the root of the module as the jison lexer -// must modify the object to operate properly. -exports['default'] = AST; -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJLEdBQUcsR0FBRzs7QUFFUixTQUFPLEVBQUU7Ozs7QUFJUCxvQkFBZ0IsRUFBRSwwQkFBUyxJQUFJLEVBQUU7QUFDL0IsYUFBTyxBQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUM3QixDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssbUJBQW1CLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQSxJQUNuRSxDQUFDLEVBQUUsQUFBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFLLElBQUksQ0FBQyxJQUFJLENBQUEsQUFBQyxBQUFDLENBQUM7S0FDaEU7O0FBRUQsWUFBUSxFQUFFLGtCQUFTLElBQUksRUFBRTtBQUN2QixhQUFPLEFBQUMsYUFBWSxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQUM7S0FDM0M7Ozs7QUFJRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQzlFO0dBQ0Y7Q0FDRixDQUFDOzs7O3FCQUthLEdBQUciLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IEFTVCA9IHtcbiAgLy8gUHVibGljIEFQSSB1c2VkIHRvIGV2YWx1YXRlIGRlcml2ZWQgYXR0cmlidXRlcyByZWdhcmRpbmcgQVNUIG5vZGVzXG4gIGhlbHBlcnM6IHtcbiAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdCBpcyBhbiBlbGlnaWJsZSBoZWxwZXIsIGFuZFxuICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50XG4gICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIChub2RlLnR5cGUgPT09ICdTdWJFeHByZXNzaW9uJylcbiAgICAgICAgICB8fCAoKG5vZGUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50JyB8fCBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpXG4gICAgICAgICAgICAmJiAhISgobm9kZS5wYXJhbXMgJiYgbm9kZS5wYXJhbXMubGVuZ3RoKSB8fCBub2RlLmhhc2gpKTtcbiAgICB9LFxuXG4gICAgc2NvcGVkSWQ6IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgIHJldHVybiAoL15cXC58dGhpc1xcYi8pLnRlc3QocGF0aC5vcmlnaW5hbCk7XG4gICAgfSxcblxuICAgIC8vIGFuIElEIGlzIHNpbXBsZSBpZiBpdCBvbmx5IGhhcyBvbmUgcGFydCwgYW5kIHRoYXQgcGFydCBpcyBub3RcbiAgICAvLyBgLi5gIG9yIGB0aGlzYC5cbiAgICBzaW1wbGVJZDogZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuIHBhdGgucGFydHMubGVuZ3RoID09PSAxICYmICFBU1QuaGVscGVycy5zY29wZWRJZChwYXRoKSAmJiAhcGF0aC5kZXB0aDtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gTXVzdCBiZSBleHBvcnRlZCBhcyBhbiBvYmplY3QgcmF0aGVyIHRoYW4gdGhlIHJvb3Qgb2YgdGhlIG1vZHVsZSBhcyB0aGUgamlzb24gbGV4ZXJcbi8vIG11c3QgbW9kaWZ5IHRoZSBvYmplY3QgdG8gb3BlcmF0ZSBwcm9wZXJseS5cbmV4cG9ydCBkZWZhdWx0IEFTVDtcbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js deleted file mode 100644 index 1aef63c3b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/base.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -exports.__esModule = true; -exports.parse = parse; -// istanbul ignore next - -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; } } - -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _parser = require('./parser'); - -var _parser2 = _interopRequireDefault(_parser); - -var _whitespaceControl = require('./whitespace-control'); - -var _whitespaceControl2 = _interopRequireDefault(_whitespaceControl); - -var _helpers = require('./helpers'); - -var Helpers = _interopRequireWildcard(_helpers); - -var _utils = require('../utils'); - -exports.parser = _parser2['default']; - -var yy = {}; -_utils.extend(yy, Helpers); - -function parse(input, options) { - // Just return if an already-compiled AST was passed in. - if (input.type === 'Program') { - return input; - } - - _parser2['default'].yy = yy; - - // Altering the shared object here, but this is ok as parser is a sync operation - yy.locInfo = function (locInfo) { - return new yy.SourceLocation(options && options.srcName, locInfo); - }; - - var strip = new _whitespaceControl2['default'](options); - return strip.accept(_parser2['default'].parse(input)); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O3NCQUFtQixVQUFVOzs7O2lDQUNDLHNCQUFzQjs7Ozt1QkFDM0IsV0FBVzs7SUFBeEIsT0FBTzs7cUJBQ0ksVUFBVTs7UUFFeEIsTUFBTTs7QUFFZixJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDWixjQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFYixTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFOztBQUVwQyxNQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQUUsV0FBTyxLQUFLLENBQUM7R0FBRTs7QUFFL0Msc0JBQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQzs7O0FBR2YsSUFBRSxDQUFDLE9BQU8sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUM3QixXQUFPLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNuRSxDQUFDOztBQUVGLE1BQUksS0FBSyxHQUFHLG1DQUFzQixPQUFPLENBQUMsQ0FBQztBQUMzQyxTQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsb0JBQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Q0FDMUMiLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXJzZXIgZnJvbSAnLi9wYXJzZXInO1xuaW1wb3J0IFdoaXRlc3BhY2VDb250cm9sIGZyb20gJy4vd2hpdGVzcGFjZS1jb250cm9sJztcbmltcG9ydCAqIGFzIEhlbHBlcnMgZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IHsgcGFyc2VyIH07XG5cbmxldCB5eSA9IHt9O1xuZXh0ZW5kKHl5LCBIZWxwZXJzKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKGlucHV0LCBvcHRpb25zKSB7XG4gIC8vIEp1c3QgcmV0dXJuIGlmIGFuIGFscmVhZHktY29tcGlsZWQgQVNUIHdhcyBwYXNzZWQgaW4uXG4gIGlmIChpbnB1dC50eXBlID09PSAnUHJvZ3JhbScpIHsgcmV0dXJuIGlucHV0OyB9XG5cbiAgcGFyc2VyLnl5ID0geXk7XG5cbiAgLy8gQWx0ZXJpbmcgdGhlIHNoYXJlZCBvYmplY3QgaGVyZSwgYnV0IHRoaXMgaXMgb2sgYXMgcGFyc2VyIGlzIGEgc3luYyBvcGVyYXRpb25cbiAgeXkubG9jSW5mbyA9IGZ1bmN0aW9uKGxvY0luZm8pIHtcbiAgICByZXR1cm4gbmV3IHl5LlNvdXJjZUxvY2F0aW9uKG9wdGlvbnMgJiYgb3B0aW9ucy5zcmNOYW1lLCBsb2NJbmZvKTtcbiAgfTtcblxuICBsZXQgc3RyaXAgPSBuZXcgV2hpdGVzcGFjZUNvbnRyb2wob3B0aW9ucyk7XG4gIHJldHVybiBzdHJpcC5hY2NlcHQocGFyc2VyLnBhcnNlKGlucHV0KSk7XG59XG4iXX0= diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js deleted file mode 100644 index b5b3615f9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/code-gen.js +++ /dev/null @@ -1,166 +0,0 @@ -/* global define */ -'use strict'; - -exports.__esModule = true; - -var _utils = require('../utils'); - -var SourceNode = undefined; - -try { - /* istanbul ignore next */ - if (typeof define !== 'function' || !define.amd) { - // We don't support this in AMD environments. For these environments, we asusme that - // they are running on the browser and thus have no need for the source-map library. - var SourceMap = require('source-map'); - SourceNode = SourceMap.SourceNode; - } -} catch (err) {} -/* NOP */ - -/* istanbul ignore if: tested but not covered in istanbul due to dist build */ -if (!SourceNode) { - SourceNode = function (line, column, srcFile, chunks) { - this.src = ''; - if (chunks) { - this.add(chunks); - } - }; - /* istanbul ignore next */ - SourceNode.prototype = { - add: function add(chunks) { - if (_utils.isArray(chunks)) { - chunks = chunks.join(''); - } - this.src += chunks; - }, - prepend: function prepend(chunks) { - if (_utils.isArray(chunks)) { - chunks = chunks.join(''); - } - this.src = chunks + this.src; - }, - toStringWithSourceMap: function toStringWithSourceMap() { - return { code: this.toString() }; - }, - toString: function toString() { - return this.src; - } - }; -} - -function castChunk(chunk, codeGen, loc) { - if (_utils.isArray(chunk)) { - var ret = []; - - for (var i = 0, len = chunk.length; i < len; i++) { - ret.push(codeGen.wrap(chunk[i], loc)); - } - return ret; - } else if (typeof chunk === 'boolean' || typeof chunk === 'number') { - // Handle primitives that the SourceNode will throw up on - return chunk + ''; - } - return chunk; -} - -function CodeGen(srcFile) { - this.srcFile = srcFile; - this.source = []; -} - -CodeGen.prototype = { - isEmpty: function isEmpty() { - return !this.source.length; - }, - prepend: function prepend(source, loc) { - this.source.unshift(this.wrap(source, loc)); - }, - push: function push(source, loc) { - this.source.push(this.wrap(source, loc)); - }, - - merge: function merge() { - var source = this.empty(); - this.each(function (line) { - source.add([' ', line, '\n']); - }); - return source; - }, - - each: function each(iter) { - for (var i = 0, len = this.source.length; i < len; i++) { - iter(this.source[i]); - } - }, - - empty: function empty() { - var loc = this.currentLocation || { start: {} }; - return new SourceNode(loc.start.line, loc.start.column, this.srcFile); - }, - wrap: function wrap(chunk) { - var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1]; - - if (chunk instanceof SourceNode) { - return chunk; - } - - chunk = castChunk(chunk, this, loc); - - return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk); - }, - - functionCall: function functionCall(fn, type, params) { - params = this.generateList(params); - return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']); - }, - - quotedString: function quotedString(str) { - return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4 - .replace(/\u2029/g, '\\u2029') + '"'; - }, - - objectLiteral: function objectLiteral(obj) { - var pairs = []; - - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - var value = castChunk(obj[key], this); - if (value !== 'undefined') { - pairs.push([this.quotedString(key), ':', value]); - } - } - } - - var ret = this.generateList(pairs); - ret.prepend('{'); - ret.add('}'); - return ret; - }, - - generateList: function generateList(entries) { - var ret = this.empty(); - - for (var i = 0, len = entries.length; i < len; i++) { - if (i) { - ret.add(','); - } - - ret.add(castChunk(entries[i], this)); - } - - return ret; - }, - - generateArray: function generateArray(entries) { - var ret = this.generateList(entries); - ret.prepend('['); - ret.add(']'); - - return ret; - } -}; - -exports['default'] = CodeGen; -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvZGUtZ2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNzQixVQUFVOztBQUVoQyxJQUFJLFVBQVUsWUFBQSxDQUFDOztBQUVmLElBQUk7O0FBRUYsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFOzs7QUFHL0MsUUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLGNBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO0dBQ25DO0NBQ0YsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUViOzs7O0FBQUEsQUFHRCxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsWUFBVSxHQUFHLFVBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ25ELFFBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBSSxNQUFNLEVBQUU7QUFDVixVQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xCO0dBQ0YsQ0FBQzs7QUFFRixZQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3JCLE9BQUcsRUFBRSxhQUFTLE1BQU0sRUFBRTtBQUNwQixVQUFJLGVBQVEsTUFBTSxDQUFDLEVBQUU7QUFDbkIsY0FBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDMUI7QUFDRCxVQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztLQUNwQjtBQUNELFdBQU8sRUFBRSxpQkFBUyxNQUFNLEVBQUU7QUFDeEIsVUFBSSxlQUFRLE1BQU0sQ0FBQyxFQUFFO0FBQ25CLGNBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQzFCO0FBQ0QsVUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztL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T0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixPQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUViLFdBQU8sR0FBRyxDQUFDO0dBQ1o7Q0FDRixDQUFDOztxQkFFYSxPQUFPIiwiZmlsZSI6ImNvZGUtZ2VuLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGRlZmluZSAqL1xuaW1wb3J0IHtpc0FycmF5fSBmcm9tICcuLi91dGlscyc7XG5cbmxldCBTb3VyY2VOb2RlO1xuXG50cnkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJyB8fCAhZGVmaW5lLmFtZCkge1xuICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBpbiBBTUQgZW52aXJvbm1lbnRzLiBGb3IgdGhlc2UgZW52aXJvbm1lbnRzLCB3ZSBhc3VzbWUgdGhhdFxuICAgIC8vIHRoZXkgYXJlIHJ1bm5pbmcgb24gdGhlIGJyb3dzZXIgYW5kIHRodXMgaGF2ZSBubyBuZWVkIGZvciB0aGUgc291cmNlLW1hcCBsaWJyYXJ5LlxuICAgIGxldCBTb3VyY2VNYXAgPSByZXF1aXJlKCdzb3VyY2UtbWFwJyk7XG4gICAgU291cmNlTm9kZSA9IFNvdXJjZU1hcC5Tb3VyY2VOb2RlO1xuICB9XG59IGNhdGNoIChlcnIpIHtcbiAgLyogTk9QICovXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZjogdGVzdGVkIGJ1dCBub3QgY292ZXJlZCBpbiBpc3RhbmJ1bCBkdWUgdG8gZGlzdCBidWlsZCAgKi9cbmlmICghU291cmNlTm9kZSkge1xuICBTb3VyY2VOb2RlID0gZnVuY3Rpb24obGluZSwgY29sdW1uLCBzcmNGaWxlLCBjaHVua3MpIHtcbiAgICB0aGlzLnNyYyA9ICcnO1xuICAgIGlmIChjaHVua3MpIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rcyk7XG4gICAgfVxuICB9O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZSA9IHtcbiAgICBhZGQ6IGZ1bmN0aW9uKGNodW5rcykge1xuICAgICAgaWYgKGlzQXJyYXkoY2h1bmtzKSkge1xuICAgICAgICBjaHVua3MgPSBjaHVua3Muam9pbignJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnNyYyArPSBjaHVua3M7XG4gICAgfSxcbiAgICBwcmVwZW5kOiBmdW5jdGlvbihjaHVua3MpIHtcbiAgICAgIGlmIChpc0FycmF5KGNodW5rcykpIHtcbiAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcmMgPSBjaHVua3MgKyB0aGlzLnNyYztcbiAgICB9LFxuICAgIHRvU3RyaW5nV2l0aFNvdXJjZU1hcDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge2NvZGU6IHRoaXMudG9TdHJpbmcoKX07XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuICB9O1xufVxuXG5cbmZ1bmN0aW9uIGNhc3RDaHVuayhjaHVuaywgY29kZUdlbiwgbG9jKSB7XG4gIGlmIChpc0FycmF5KGNodW5rKSkge1xuICAgIGxldCByZXQgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaHVuay5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgcmV0LnB1c2goY29kZUdlbi53cmFwKGNodW5rW2ldLCBsb2MpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgY2h1bmsgPT09ICdudW1iZXInKSB7XG4gICAgLy8gSGFuZGxlIHByaW1pdGl2ZXMgdGhhdCB0aGUgU291cmNlTm9kZSB3aWxsIHRocm93IHVwIG9uXG4gICAgcmV0dXJuIGNodW5rICsgJyc7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuXG5cbmZ1bmN0aW9uIENvZGVHZW4oc3JjRmlsZSkge1xuICB0aGlzLnNyY0ZpbGUgPSBzcmNGaWxlO1xuICB0aGlzLnNvdXJjZSA9IFtdO1xufVxuXG5Db2RlR2VuLnByb3RvdHlwZSA9IHtcbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gIXRoaXMuc291cmNlLmxlbmd0aDtcbiAgfSxcbiAgcHJlcGVuZDogZnVuY3Rpb24oc291cmNlLCBsb2MpIHtcbiAgICB0aGlzLnNvdXJjZS51bnNoaWZ0KHRoaXMud3JhcChzb3VyY2UsIGxvYykpO1xuICB9LFxuICBwdXNoOiBmdW5jdGlvbihzb3VyY2UsIGxvYykge1xuICAgIHRoaXMuc291cmNlLnB1c2godGhpcy53cmFwKHNvdXJjZSwgbG9jKSk7XG4gIH0sXG5cbiAgbWVyZ2U6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBzb3VyY2UgPSB0aGlzLmVtcHR5KCk7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHNvdXJjZS5hZGQoWycgICcsIGxpbmUsICdcXG4nXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfSxcblxuICBlYWNoOiBmdW5jdGlvbihpdGVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuc291cmNlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpdGVyKHRoaXMuc291cmNlW2ldKTtcbiAgICB9XG4gIH0sXG5cbiAgZW1wdHk6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhdGlvbiB8fCB7c3RhcnQ6IHt9fTtcbiAgICByZXR1cm4gbmV3IFNvdXJjZU5vZGUobG9jLnN0YXJ0LmxpbmUsIGxvYy5zdGFydC5jb2x1bW4sIHRoaXMuc3JjRmlsZSk7XG4gIH0sXG4gIHdyYXA6IGZ1bmN0aW9uKGNodW5rLCBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhdGlvbiB8fCB7c3RhcnQ6IHt9fSkge1xuICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG5cbiAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9jKTtcblxuICAgIHJldHVybiBuZXcgU291cmNlTm9kZShsb2Muc3RhcnQubGluZSwgbG9jLnN0YXJ0LmNvbHVtbiwgdGhpcy5zcmNGaWxlLCBjaHVuayk7XG4gIH0sXG5cbiAgZnVuY3Rpb25DYWxsOiBmdW5jdGlvbihmbiwgdHlwZSwgcGFyYW1zKSB7XG4gICAgcGFyYW1zID0gdGhpcy5nZW5lcmF0ZUxpc3QocGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcy53cmFwKFtmbiwgdHlwZSA/ICcuJyArIHR5cGUgKyAnKCcgOiAnKCcsIHBhcmFtcywgJyknXSk7XG4gIH0sXG5cbiAgcXVvdGVkU3RyaW5nOiBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gJ1wiJyArIChzdHIgKyAnJylcbiAgICAgIC5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpXG4gICAgICAucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpXG4gICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCAnXFxcXHUyMDI4JykgICAvLyBQZXIgRWNtYS0yNjIgNy4zICsgNy44LjRcbiAgICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKSArICdcIic7XG4gIH0sXG5cbiAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgbGV0IHBhaXJzID0gW107XG5cbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gY2FzdENodW5rKG9ialtrZXldLCB0aGlzKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHBhaXJzLnB1c2goW3RoaXMucXVvdGVkU3RyaW5nKGtleSksICc6JywgdmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChwYWlycyk7XG4gICAgcmV0LnByZXBlbmQoJ3snKTtcbiAgICByZXQuYWRkKCd9Jyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuXG4gIGdlbmVyYXRlTGlzdDogZnVuY3Rpb24oZW50cmllcykge1xuICAgIGxldCByZXQgPSB0aGlzLmVtcHR5KCk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZW50cmllcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGkpIHtcbiAgICAgICAgcmV0LmFkZCgnLCcpO1xuICAgICAgfVxuXG4gICAgICByZXQuYWRkKGNhc3RDaHVuayhlbnRyaWVzW2ldLCB0aGlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBnZW5lcmF0ZUFycmF5OiBmdW5jdGlvbihlbnRyaWVzKSB7XG4gICAgbGV0IHJldCA9IHRoaXMuZ2VuZXJhdGVMaXN0KGVudHJpZXMpO1xuICAgIHJldC5wcmVwZW5kKCdbJyk7XG4gICAgcmV0LmFkZCgnXScpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29kZUdlbjtcblxuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js deleted file mode 100644 index 65b45855a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js +++ /dev/null @@ -1,572 +0,0 @@ -/* eslint-disable new-cap */ - -'use strict'; - -exports.__esModule = true; -exports.Compiler = Compiler; -exports.precompile = precompile; -exports.compile = compile; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _exception = require('../exception'); - -var _exception2 = _interopRequireDefault(_exception); - -var _utils = require('../utils'); - -var _ast = require('./ast'); - -var _ast2 = _interopRequireDefault(_ast); - -var slice = [].slice; - -function Compiler() {} - -// the foundHelper register will disambiguate helper lookup from finding a -// function in a context. This is necessary for mustache compatibility, which -// requires that context functions in blocks are evaluated by blockHelperMissing, -// and then proceed as if the resulting value was provided to blockHelperMissing. - -Compiler.prototype = { - compiler: Compiler, - - equals: function equals(other) { - var len = this.opcodes.length; - if (other.opcodes.length !== len) { - return false; - } - - for (var i = 0; i < len; i++) { - var opcode = this.opcodes[i], - otherOpcode = other.opcodes[i]; - if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) { - return false; - } - } - - // We know that length is the same between the two arrays because they are directly tied - // to the opcode behavior above. - len = this.children.length; - for (var i = 0; i < len; i++) { - if (!this.children[i].equals(other.children[i])) { - return false; - } - } - - return true; - }, - - guid: 0, - - compile: function compile(program, options) { - this.sourceNode = []; - this.opcodes = []; - this.children = []; - this.options = options; - this.stringParams = options.stringParams; - this.trackIds = options.trackIds; - - options.blockParams = options.blockParams || []; - - // These changes will propagate to the other compiler components - var knownHelpers = options.knownHelpers; - options.knownHelpers = { - 'helperMissing': true, - 'blockHelperMissing': true, - 'each': true, - 'if': true, - 'unless': true, - 'with': true, - 'log': true, - 'lookup': true - }; - if (knownHelpers) { - for (var _name in knownHelpers) { - /* istanbul ignore else */ - if (_name in knownHelpers) { - options.knownHelpers[_name] = knownHelpers[_name]; - } - } - } - - return this.accept(program); - }, - - compileProgram: function compileProgram(program) { - var childCompiler = new this.compiler(), - // eslint-disable-line new-cap - result = childCompiler.compile(program, this.options), - guid = this.guid++; - - this.usePartial = this.usePartial || result.usePartial; - - this.children[guid] = result; - this.useDepths = this.useDepths || result.useDepths; - - return guid; - }, - - accept: function accept(node) { - /* istanbul ignore next: Sanity code */ - if (!this[node.type]) { - throw new _exception2['default']('Unknown type: ' + node.type, node); - } - - this.sourceNode.unshift(node); - var ret = this[node.type](node); - this.sourceNode.shift(); - return ret; - }, - - Program: function Program(program) { - this.options.blockParams.unshift(program.blockParams); - - var body = program.body, - bodyLength = body.length; - for (var i = 0; i < bodyLength; i++) { - this.accept(body[i]); - } - - this.options.blockParams.shift(); - - this.isSimple = bodyLength === 1; - this.blockParams = program.blockParams ? program.blockParams.length : 0; - - return this; - }, - - BlockStatement: function BlockStatement(block) { - transformLiteralToPath(block); - - var program = block.program, - inverse = block.inverse; - - program = program && this.compileProgram(program); - inverse = inverse && this.compileProgram(inverse); - - var type = this.classifySexpr(block); - - if (type === 'helper') { - this.helperSexpr(block, program, inverse); - } else if (type === 'simple') { - this.simpleSexpr(block); - - // now that the simple mustache is resolved, we need to - // evaluate it by executing `blockHelperMissing` - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - this.opcode('emptyHash'); - this.opcode('blockValue', block.path.original); - } else { - this.ambiguousSexpr(block, program, inverse); - - // now that the simple mustache is resolved, we need to - // evaluate it by executing `blockHelperMissing` - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - this.opcode('emptyHash'); - this.opcode('ambiguousBlockValue'); - } - - this.opcode('append'); - }, - - DecoratorBlock: function DecoratorBlock(decorator) { - var program = decorator.program && this.compileProgram(decorator.program); - var params = this.setupFullMustacheParams(decorator, program, undefined), - path = decorator.path; - - this.useDecorators = true; - this.opcode('registerDecorator', params.length, path.original); - }, - - PartialStatement: function PartialStatement(partial) { - this.usePartial = true; - - var program = partial.program; - if (program) { - program = this.compileProgram(partial.program); - } - - var params = partial.params; - if (params.length > 1) { - throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial); - } else if (!params.length) { - if (this.options.explicitPartialContext) { - this.opcode('pushLiteral', 'undefined'); - } else { - params.push({ type: 'PathExpression', parts: [], depth: 0 }); - } - } - - var partialName = partial.name.original, - isDynamic = partial.name.type === 'SubExpression'; - if (isDynamic) { - this.accept(partial.name); - } - - this.setupFullMustacheParams(partial, program, undefined, true); - - var indent = partial.indent || ''; - if (this.options.preventIndent && indent) { - this.opcode('appendContent', indent); - indent = ''; - } - - this.opcode('invokePartial', isDynamic, partialName, indent); - this.opcode('append'); - }, - PartialBlockStatement: function PartialBlockStatement(partialBlock) { - this.PartialStatement(partialBlock); - }, - - MustacheStatement: function MustacheStatement(mustache) { - this.SubExpression(mustache); - - if (mustache.escaped && !this.options.noEscape) { - this.opcode('appendEscaped'); - } else { - this.opcode('append'); - } - }, - Decorator: function Decorator(decorator) { - this.DecoratorBlock(decorator); - }, - - ContentStatement: function ContentStatement(content) { - if (content.value) { - this.opcode('appendContent', content.value); - } - }, - - CommentStatement: function CommentStatement() {}, - - SubExpression: function SubExpression(sexpr) { - transformLiteralToPath(sexpr); - var type = this.classifySexpr(sexpr); - - if (type === 'simple') { - this.simpleSexpr(sexpr); - } else if (type === 'helper') { - this.helperSexpr(sexpr); - } else { - this.ambiguousSexpr(sexpr); - } - }, - ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) { - var path = sexpr.path, - name = path.parts[0], - isBlock = program != null || inverse != null; - - this.opcode('getContext', path.depth); - - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - - path.strict = true; - this.accept(path); - - this.opcode('invokeAmbiguous', name, isBlock); - }, - - simpleSexpr: function simpleSexpr(sexpr) { - var path = sexpr.path; - path.strict = true; - this.accept(path); - this.opcode('resolvePossibleLambda'); - }, - - helperSexpr: function helperSexpr(sexpr, program, inverse) { - var params = this.setupFullMustacheParams(sexpr, program, inverse), - path = sexpr.path, - name = path.parts[0]; - - if (this.options.knownHelpers[name]) { - this.opcode('invokeKnownHelper', params.length, name); - } else if (this.options.knownHelpersOnly) { - throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr); - } else { - path.strict = true; - path.falsy = true; - - this.accept(path); - this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path)); - } - }, - - PathExpression: function PathExpression(path) { - this.addDepth(path.depth); - this.opcode('getContext', path.depth); - - var name = path.parts[0], - scoped = _ast2['default'].helpers.scopedId(path), - blockParamId = !path.depth && !scoped && this.blockParamIndex(name); - - if (blockParamId) { - this.opcode('lookupBlockParam', blockParamId, path.parts); - } else if (!name) { - // Context reference, i.e. `{{foo .}}` or `{{foo ..}}` - this.opcode('pushContext'); - } else if (path.data) { - this.options.data = true; - this.opcode('lookupData', path.depth, path.parts, path.strict); - } else { - this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped); - } - }, - - StringLiteral: function StringLiteral(string) { - this.opcode('pushString', string.value); - }, - - NumberLiteral: function NumberLiteral(number) { - this.opcode('pushLiteral', number.value); - }, - - BooleanLiteral: function BooleanLiteral(bool) { - this.opcode('pushLiteral', bool.value); - }, - - UndefinedLiteral: function UndefinedLiteral() { - this.opcode('pushLiteral', 'undefined'); - }, - - NullLiteral: function NullLiteral() { - this.opcode('pushLiteral', 'null'); - }, - - Hash: function Hash(hash) { - var pairs = hash.pairs, - i = 0, - l = pairs.length; - - this.opcode('pushHash'); - - for (; i < l; i++) { - this.pushParam(pairs[i].value); - } - while (i--) { - this.opcode('assignToHash', pairs[i].key); - } - this.opcode('popHash'); - }, - - // HELPERS - opcode: function opcode(name) { - this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc }); - }, - - addDepth: function addDepth(depth) { - if (!depth) { - return; - } - - this.useDepths = true; - }, - - classifySexpr: function classifySexpr(sexpr) { - var isSimple = _ast2['default'].helpers.simpleId(sexpr.path); - - var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]); - - // a mustache is an eligible helper if: - // * its id is simple (a single part, not `this` or `..`) - var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr); - - // if a mustache is an eligible helper but not a definite - // helper, it is ambiguous, and will be resolved in a later - // pass or at runtime. - var isEligible = !isBlockParam && (isHelper || isSimple); - - // if ambiguous, we can possibly resolve the ambiguity now - // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc. - if (isEligible && !isHelper) { - var _name2 = sexpr.path.parts[0], - options = this.options; - - if (options.knownHelpers[_name2]) { - isHelper = true; - } else if (options.knownHelpersOnly) { - isEligible = false; - } - } - - if (isHelper) { - return 'helper'; - } else if (isEligible) { - return 'ambiguous'; - } else { - return 'simple'; - } - }, - - pushParams: function pushParams(params) { - for (var i = 0, l = params.length; i < l; i++) { - this.pushParam(params[i]); - } - }, - - pushParam: function pushParam(val) { - var value = val.value != null ? val.value : val.original || ''; - - if (this.stringParams) { - if (value.replace) { - value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.'); - } - - if (val.depth) { - this.addDepth(val.depth); - } - this.opcode('getContext', val.depth || 0); - this.opcode('pushStringParam', value, val.type); - - if (val.type === 'SubExpression') { - // SubExpressions get evaluated and passed in - // in string params mode. - this.accept(val); - } - } else { - if (this.trackIds) { - var blockParamIndex = undefined; - if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) { - blockParamIndex = this.blockParamIndex(val.parts[0]); - } - if (blockParamIndex) { - var blockParamChild = val.parts.slice(1).join('.'); - this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild); - } else { - value = val.original || value; - if (value.replace) { - value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, ''); - } - - this.opcode('pushId', val.type, value); - } - } - this.accept(val); - } - }, - - setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) { - var params = sexpr.params; - this.pushParams(params); - - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - - if (sexpr.hash) { - this.accept(sexpr.hash); - } else { - this.opcode('emptyHash', omitEmpty); - } - - return params; - }, - - blockParamIndex: function blockParamIndex(name) { - for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) { - var blockParams = this.options.blockParams[depth], - param = blockParams && _utils.indexOf(blockParams, name); - if (blockParams && param >= 0) { - return [depth, param]; - } - } - } -}; - -function precompile(input, options, env) { - if (input == null || typeof input !== 'string' && input.type !== 'Program') { - throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input); - } - - options = options || {}; - if (!('data' in options)) { - options.data = true; - } - if (options.compat) { - options.useDepths = true; - } - - var ast = env.parse(input, options), - environment = new env.Compiler().compile(ast, options); - return new env.JavaScriptCompiler().compile(environment, options); -} - -function compile(input, options, env) { - if (options === undefined) options = {}; - - if (input == null || typeof input !== 'string' && input.type !== 'Program') { - throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input); - } - - if (!('data' in options)) { - options.data = true; - } - if (options.compat) { - options.useDepths = true; - } - - var compiled = undefined; - - function compileInput() { - var ast = env.parse(input, options), - environment = new env.Compiler().compile(ast, options), - templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true); - return env.template(templateSpec); - } - - // Template is only compiled on first use and cached after that point. - function ret(context, execOptions) { - if (!compiled) { - compiled = compileInput(); - } - return compiled.call(this, context, execOptions); - } - ret._setup = function (setupOptions) { - if (!compiled) { - compiled = compileInput(); - } - return compiled._setup(setupOptions); - }; - ret._child = function (i, data, blockParams, depths) { - if (!compiled) { - compiled = compileInput(); - } - return compiled._child(i, data, blockParams, depths); - }; - return ret; -} - -function argEquals(a, b) { - if (a === b) { - return true; - } - - if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) { - for (var i = 0; i < a.length; i++) { - if (!argEquals(a[i], b[i])) { - return false; - } - } - return true; - } -} - -function transformLiteralToPath(sexpr) { - if (!sexpr.path.parts) { - var literal = sexpr.path; - // Casting to string here to make false and 0 literal values play nicely with the rest - // of the system. - sexpr.path = { - type: 'PathExpression', - data: false, - depth: 0, - parts: [literal.original + ''], - original: literal.original + '', - loc: literal.loc - }; - } -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozt5QkFFc0IsY0FBYzs7OztxQkFDTCxVQUFVOzttQkFDekIsT0FBTzs7OztBQUV2QixJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDOztBQUVoQixTQUFTLFFBQVEsR0FBRyxFQUFFOzs7Ozs7O0FBTzdCLFFBQVEsQ0FBQyxTQUFTLEdBQUc7QUFDbkIsVUFBUSxFQUFFLFFBQVE7O0FBRWxCLFFBQU0sRUFBRSxnQkFBUyxLQUFLLEVBQUU7QUFDdEIsUUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDOUIsUUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7QUFDaEMsYUFBTyxLQUFLLENBQUM7S0FDZDs7QUFFRCxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFVBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQ3hCLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25DLFVBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JGLGVBQU8sS0FBSyxDQUFDO09BQ2Q7S0FDRjs7OztBQUlELE9BQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztBQUMzQixTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFVBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxD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QUU7QUFDckQsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakMsVUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDMUIsZUFBTyxLQUFLLENBQUM7T0FDZDtLQUNGO0FBQ0QsV0FBTyxJQUFJLENBQUM7R0FDYjtDQUNGOztBQUVELFNBQVMsc0JBQXNCLENBQUMsS0FBSyxFQUFFO0FBQ3JDLE1BQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNyQixRQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDOzs7QUFHekIsU0FBSyxDQUFDLElBQUksR0FBRztBQUNYLFVBQUksRUFBRSxnQkFBZ0I7QUFDdEIsVUFBSSxFQUFFLEtBQUs7QUFDWCxXQUFLLEVBQUUsQ0FBQztBQUNSLFdBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzlCLGNBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUU7QUFDL0IsU0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0tBQ2pCLENBQUM7R0FDSDtDQUNGIiwiZmlsZSI6ImNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbmV3LWNhcCAqL1xuXG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5pbXBvcnQge2lzQXJyYXksIGluZGV4T2Z9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBBU1QgZnJvbSAnLi9hc3QnO1xuXG5jb25zdCBzbGljZSA9IFtdLnNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tcGlsZXIoKSB7fVxuXG4vLyB0aGUgZm91bmRIZWxwZXIgcmVnaXN0ZXIgd2lsbCBkaXNhbWJpZ3VhdGUgaGVscGVyIGxvb2t1cCBmcm9tIGZpbmRpbmcgYVxuLy8gZnVuY3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVzdGFjaGUgY29tcGF0aWJpbGl0eSwgd2hpY2hcbi8vIHJlcXVpcmVzIHRoYXQgY29udGV4dCBmdW5jdGlvbnMgaW4gYmxvY2tzIGFyZSBldmFsdWF0ZWQgYnkgYmxvY2tIZWxwZXJNaXNzaW5nLFxuLy8gYW5kIHRoZW4gcHJvY2VlZCBhcyBpZiB0aGUgcmVzdWx0aW5nIHZhbHVlIHdhcyBwcm92aWRlZCB0byBibG9ja0hlbHBlck1pc3NpbmcuXG5cbkNvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgY29tcGlsZXI6IENvbXBpbGVyLFxuXG4gIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5vcGNvZGVzLmxlbmd0aDtcbiAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5ndGggIT09IGxlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sXG4gICAgICAgICAgb3RoZXJPcGNvZGUgPSBvdGhlci5vcGNvZGVzW2ldO1xuICAgICAgaWYgKG9wY29kZS5vcGNvZGUgIT09IG90aGVyT3Bjb2RlLm9wY29kZSB8fCAhYXJnRXF1YWxzKG9wY29kZS5hcmdzLCBvdGhlck9wY29kZS5hcmdzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2Uga25vdyB0aGF0IGxlbmd0aCBpcyB0aGUgc2FtZSBiZXR3ZWVuIHRoZSB0d28gYXJyYXlzIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgdGllZFxuICAgIC8vIHRvIHRoZSBvcGNvZGUgYmVoYXZpb3IgYWJvdmUuXG4gICAgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmNoaWxkcmVuW2ldLmVxdWFscyhvdGhlci5jaGlsZHJlbltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG4gIGd1aWQ6IDAsXG5cbiAgY29tcGlsZTogZnVuY3Rpb24ocHJvZ3JhbSwgb3B0aW9ucykge1xuICAgIHRoaXMuc291cmNlTm9kZSA9IFtdO1xuICAgIHRoaXMub3Bjb2RlcyA9IFtdO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc3RyaW5nUGFyYW1zID0gb3B0aW9ucy5zdHJpbmdQYXJhbXM7XG4gICAgdGhpcy50cmFja0lkcyA9IG9wdGlvbnMudHJhY2tJZHM7XG5cbiAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gb3B0aW9ucy5ibG9ja1BhcmFtcyB8fCBbXTtcblxuICAgIC8vIFRoZXNlIGNoYW5nZXMgd2lsbCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGNvbXBpbGVyIGNvbXBvbmVudHNcbiAgICBsZXQga25vd25IZWxwZXJzID0gb3B0aW9ucy5rbm93bkhlbHBlcnM7XG4gICAgb3B0aW9ucy5rbm93bkhlbHBlcnMgPSB7XG4gICAgICAnaGVscGVyTWlzc2luZyc6IHRydWUsXG4gICAgICAnYmxvY2tIZWxwZXJNaXNzaW5nJzogdHJ1ZSxcbiAgICAgICdlYWNoJzogdHJ1ZSxcbiAgICAgICdpZic6IHRydWUsXG4gICAgICAndW5sZXNzJzogdHJ1ZSxcbiAgICAgICd3aXRoJzogdHJ1ZSxcbiAgICAgICdsb2cnOiB0cnVlLFxuICAgICAgJ2xvb2t1cCc6IHRydWVcbiAgICB9O1xuICAgIGlmIChrbm93bkhlbHBlcnMpIHtcbiAgICAgIGZvciAobGV0IG5hbWUgaW4ga25vd25IZWxwZXJzKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChuYW1lIGluIGtub3duSGVscGVycykge1xuICAgICAgICAgIG9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdID0ga25vd25IZWxwZXJzW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWNjZXB0KHByb2dyYW0pO1xuICB9LFxuXG4gIGNvbXBpbGVQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgbGV0IGNoaWxkQ29tcGlsZXIgPSBuZXcgdGhpcy5jb21waWxlcigpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbiAgICAgICAgcmVzdWx0ID0gY2hpbGRDb21waWxlci5jb21waWxlKHByb2dyYW0sIHRoaXMub3B0aW9ucyksXG4gICAgICAgIGd1aWQgPSB0aGlzLmd1aWQrKztcblxuICAgIHRoaXMudXNlUGFydGlhbCA9IHRoaXMudXNlUGFydGlhbCB8fCByZXN1bHQudXNlUGFydGlhbDtcblxuICAgIHRoaXMuY2hpbGRyZW5bZ3VpZF0gPSByZXN1bHQ7XG4gICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCByZXN1bHQudXNlRGVwdGhzO1xuXG4gICAgcmV0dXJuIGd1aWQ7XG4gIH0sXG5cbiAgYWNjZXB0OiBmdW5jdGlvbihub2RlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IFNhbml0eSBjb2RlICovXG4gICAgaWYgKCF0aGlzW25vZGUudHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdHlwZTogJyArIG5vZGUudHlwZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2VOb2RlLnVuc2hpZnQobm9kZSk7XG4gICAgbGV0IHJldCA9IHRoaXNbbm9kZS50eXBlXShub2RlKTtcbiAgICB0aGlzLnNvdXJjZU5vZGUuc2hpZnQoKTtcbiAgICByZXR1cm4gcmV0O1xuICB9LFxuXG4gIFByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICB0aGlzLm9wdGlvbnMuYmxvY2tQYXJhbXMudW5zaGlmdChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcblxuICAgIGxldCBib2R5ID0gcHJvZ3JhbS5ib2R5LFxuICAgICAgICBib2R5TGVuZ3RoID0gYm9keS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0KGJvZHlbaV0pO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy5zaGlmdCgpO1xuXG4gICAgdGhpcy5pc1NpbXBsZSA9IGJvZHlMZW5ndGggPT09IDE7XG4gICAgdGhpcy5ibG9ja1BhcmFtcyA9IHByb2dyYW0uYmxvY2tQYXJhbXMgPyBwcm9ncmFtLmJsb2NrUGFyYW1zLmxlbmd0aCA6IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24oYmxvY2spIHtcbiAgICB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKGJsb2NrKTtcblxuICAgIGxldCBwcm9ncmFtID0gYmxvY2sucHJvZ3JhbSxcbiAgICAgICAgaW52ZXJzZSA9IGJsb2NrLmludmVyc2U7XG5cbiAgICBwcm9ncmFtID0gcHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKHByb2dyYW0pO1xuICAgIGludmVyc2UgPSBpbnZlcnNlICYmIHRoaXMuY29tcGlsZVByb2dyYW0oaW52ZXJzZSk7XG5cbiAgICBsZXQgdHlwZSA9IHRoaXMuY2xhc3NpZnlTZXhwcihibG9jayk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2hlbHBlcicpIHtcbiAgICAgIHRoaXMuaGVscGVyU2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NpbXBsZScpIHtcbiAgICAgIHRoaXMuc2ltcGxlU2V4cHIoYmxvY2spO1xuXG4gICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVyTWlzc2luZ2BcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG4gICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7XG4gICAgICB0aGlzLm9wY29kZSgnYmxvY2tWYWx1ZScsIGJsb2NrLnBhdGgub3JpZ2luYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFtYmlndW91c1NleHByKGJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlKTtcblxuICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0b1xuICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgXG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FtYmlndW91c0Jsb2NrVmFsdWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG5cbiAgRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb2dyYW0gPSBkZWNvcmF0b3IucHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKGRlY29yYXRvci5wcm9ncmFtKTtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhkZWNvcmF0b3IsIHByb2dyYW0sIHVuZGVmaW5lZCksXG4gICAgICAgIHBhdGggPSBkZWNvcmF0b3IucGF0aDtcblxuICAgIHRoaXMudXNlRGVjb3JhdG9ycyA9IHRydWU7XG4gICAgdGhpcy5vcGNvZGUoJ3JlZ2lzdGVyRGVjb3JhdG9yJywgcGFyYW1zLmxlbmd0aCwgcGF0aC5vcmlnaW5hbCk7XG4gIH0sXG5cbiAgUGFydGlhbFN0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbCkge1xuICAgIHRoaXMudXNlUGFydGlhbCA9IHRydWU7XG5cbiAgICBsZXQgcHJvZ3JhbSA9IHBhcnRpYWwucHJvZ3JhbTtcbiAgICBpZiAocHJvZ3JhbSkge1xuICAgICAgcHJvZ3JhbSA9IHRoaXMuY29tcGlsZVByb2dyYW0ocGFydGlhbC5wcm9ncmFtKTtcbiAgICB9XG5cbiAgICBsZXQgcGFyYW1zID0gcGFydGlhbC5wYXJhbXM7XG4gICAgaWYgKHBhcmFtcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBudW1iZXIgb2YgcGFydGlhbCBhcmd1bWVudHM6ICcgKyBwYXJhbXMubGVuZ3RoLCBwYXJ0aWFsKTtcbiAgICB9IGVsc2UgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmV4cGxpY2l0UGFydGlhbENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgJ3VuZGVmaW5lZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnB1c2goe3R5cGU6ICdQYXRoRXhwcmVzc2lvbicsIHBhcnRzOiBbXSwgZGVwdGg6IDB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcGFydGlhbE5hbWUgPSBwYXJ0aWFsLm5hbWUub3JpZ2luYWwsXG4gICAgICAgIGlzRHluYW1pYyA9IHBhcnRpYWwubmFtZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbic7XG4gICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgdGhpcy5hY2NlcHQocGFydGlhbC5uYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKHBhcnRpYWwsIHByb2dyYW0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBsZXQgaW5kZW50ID0gcGFydGlhbC5pbmRlbnQgfHwgJyc7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcmV2ZW50SW5kZW50ICYmIGluZGVudCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZENvbnRlbnQnLCBpbmRlbnQpO1xuICAgICAgaW5kZW50ID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ2ludm9rZVBhcnRpYWwnLCBpc0R5bmFtaWMsIHBhcnRpYWxOYW1lLCBpbmRlbnQpO1xuICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTtcbiAgfSxcbiAgUGFydGlhbEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihwYXJ0aWFsQmxvY2spIHtcbiAgICB0aGlzLlBhcnRpYWxTdGF0ZW1lbnQocGFydGlhbEJsb2NrKTtcbiAgfSxcblxuICBNdXN0YWNoZVN0YXRlbWVudDogZnVuY3Rpb24obXVzdGFjaGUpIHtcbiAgICB0aGlzLlN1YkV4cHJlc3Npb24obXVzdGFjaGUpO1xuXG4gICAgaWYgKG11c3RhY2hlLmVzY2FwZWQgJiYgIXRoaXMub3B0aW9ucy5ub0VzY2FwZSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZEVzY2FwZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcpO1xuICAgIH1cbiAgfSxcbiAgRGVjb3JhdG9yKGRlY29yYXRvcikge1xuICAgIHRoaXMuRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKTtcbiAgfSxcblxuXG4gIENvbnRlbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgICBpZiAoY29udGVudC52YWx1ZSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZENvbnRlbnQnLCBjb250ZW50LnZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgQ29tbWVudFN0YXRlbWVudDogZnVuY3Rpb24oKSB7fSxcblxuICBTdWJFeHByZXNzaW9uOiBmdW5jdGlvbihzZXhwcikge1xuICAgIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoc2V4cHIpO1xuICAgIGxldCB0eXBlID0gdGhpcy5jbGFzc2lmeVNleHByKHNleHByKTtcblxuICAgIGlmICh0eXBlID09PSAnc2ltcGxlJykge1xuICAgICAgdGhpcy5zaW1wbGVTZXhwcihzZXhwcik7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnaGVscGVyJykge1xuICAgICAgdGhpcy5oZWxwZXJTZXhwcihzZXhwcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYW1iaWd1b3VzU2V4cHIoc2V4cHIpO1xuICAgIH1cbiAgfSxcbiAgYW1iaWd1b3VzU2V4cHI6IGZ1bmN0aW9uKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSB7XG4gICAgbGV0IHBhdGggPSBzZXhwci5wYXRoLFxuICAgICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXSxcbiAgICAgICAgaXNCbG9jayA9IHByb2dyYW0gIT0gbnVsbCB8fCBpbnZlcnNlICE9IG51bGw7XG5cbiAgICB0aGlzLm9wY29kZSgnZ2V0Q29udGV4dCcsIHBhdGguZGVwdGgpO1xuXG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG5cbiAgICBwYXRoLnN0cmljdCA9IHRydWU7XG4gICAgdGhpcy5hY2NlcHQocGF0aCk7XG5cbiAgICB0aGlzLm9wY29kZSgnaW52b2tlQW1iaWd1b3VzJywgbmFtZSwgaXNCbG9jayk7XG4gIH0sXG5cbiAgc2ltcGxlU2V4cHI6IGZ1bmN0aW9uKHNleHByKSB7XG4gICAgbGV0IHBhdGggPSBzZXhwci5wYXRoO1xuICAgIHBhdGguc3RyaWN0ID0gdHJ1ZTtcbiAgICB0aGlzLmFjY2VwdChwYXRoKTtcbiAgICB0aGlzLm9wY29kZSgncmVzb2x2ZVBvc3NpYmxlTGFtYmRhJyk7XG4gIH0sXG5cbiAgaGVscGVyU2V4cHI6IGZ1bmN0aW9uKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMuc2V0dXBGdWxsTXVzdGFjaGVQYXJhbXMoc2V4cHIsIHByb2dyYW0sIGludmVyc2UpLFxuICAgICAgICBwYXRoID0gc2V4cHIucGF0aCxcbiAgICAgICAgbmFtZSA9IHBhdGgucGFydHNbMF07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUtub3duSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignWW91IHNwZWNpZmllZCBrbm93bkhlbHBlcnNPbmx5LCBidXQgdXNlZCB0aGUgdW5rbm93biBoZWxwZXIgJyArIG5hbWUsIHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgICAgcGF0aC5mYWxzeSA9IHRydWU7XG5cbiAgICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUhlbHBlcicsIHBhcmFtcy5sZW5ndGgsIHBhdGgub3JpZ2luYWwsIEFTVC5oZWxwZXJzLnNpbXBsZUlkKHBhdGgpKTtcbiAgICB9XG4gIH0sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICB0aGlzLmFkZERlcHRoKHBhdGguZGVwdGgpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7XG5cbiAgICBsZXQgbmFtZSA9IHBhdGgucGFydHNbMF0sXG4gICAgICAgIHNjb3BlZCA9IEFTVC5oZWxwZXJzLnNjb3BlZElkKHBhdGgpLFxuICAgICAgICBibG9ja1BhcmFtSWQgPSAhcGF0aC5kZXB0aCAmJiAhc2NvcGVkICYmIHRoaXMuYmxvY2tQYXJhbUluZGV4KG5hbWUpO1xuXG4gICAgaWYgKGJsb2NrUGFyYW1JZCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cEJsb2NrUGFyYW0nLCBibG9ja1BhcmFtSWQsIHBhdGgucGFydHMpO1xuICAgIH0gZWxzZSBpZiAoIW5hbWUpIHtcbiAgICAgIC8vIENvbnRleHQgcmVmZXJlbmNlLCBpLmUuIGB7e2ZvbyAufX1gIG9yIGB7e2ZvbyAuLn19YFxuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hDb250ZXh0Jyk7XG4gICAgfSBlbHNlIGlmIChwYXRoLmRhdGEpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5kYXRhID0gdHJ1ZTtcbiAgICAgIHRoaXMub3Bjb2RlKCdsb29rdXBEYXRhJywgcGF0aC5kZXB0aCwgcGF0aC5wYXJ0cywgcGF0aC5zdHJpY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnbG9va3VwT25Db250ZXh0JywgcGF0aC5wYXJ0cywgcGF0aC5mYWxzeSwgcGF0aC5zdHJpY3QsIHNjb3BlZCk7XG4gICAgfVxuICB9LFxuXG4gIFN0cmluZ0xpdGVyYWw6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoU3RyaW5nJywgc3RyaW5nLnZhbHVlKTtcbiAgfSxcblxuICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbihudW1iZXIpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBudW1iZXIudmFsdWUpO1xuICB9LFxuXG4gIEJvb2xlYW5MaXRlcmFsOiBmdW5jdGlvbihib29sKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgYm9vbC52YWx1ZSk7XG4gIH0sXG5cbiAgVW5kZWZpbmVkTGl0ZXJhbDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgJ3VuZGVmaW5lZCcpO1xuICB9LFxuXG4gIE51bGxMaXRlcmFsOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAnbnVsbCcpO1xuICB9LFxuXG4gIEhhc2g6IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzLFxuICAgICAgICBpID0gMCxcbiAgICAgICAgbCA9IHBhaXJzLmxlbmd0aDtcblxuICAgIHRoaXMub3Bjb2RlKCdwdXNoSGFzaCcpO1xuXG4gICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMucHVzaFBhcmFtKHBhaXJzW2ldLnZhbHVlKTtcbiAgICB9XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2Fzc2lnblRvSGFzaCcsIHBhaXJzW2ldLmtleSk7XG4gICAgfVxuICAgIHRoaXMub3Bjb2RlKCdwb3BIYXNoJyk7XG4gIH0sXG5cbiAgLy8gSEVMUEVSU1xuICBvcGNvZGU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB0aGlzLm9wY29kZXMucHVzaCh7IG9wY29kZTogbmFtZSwgYXJnczogc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLCBsb2M6IHRoaXMuc291cmNlTm9kZVswXS5sb2MgfSk7XG4gIH0sXG5cbiAgYWRkRGVwdGg6IGZ1bmN0aW9uKGRlcHRoKSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfSxcblxuICBjbGFzc2lmeVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBpc1NpbXBsZSA9IEFTVC5oZWxwZXJzLnNpbXBsZUlkKHNleHByLnBhdGgpO1xuXG4gICAgbGV0IGlzQmxvY2tQYXJhbSA9IGlzU2ltcGxlICYmICEhdGhpcy5ibG9ja1BhcmFtSW5kZXgoc2V4cHIucGF0aC5wYXJ0c1swXSk7XG5cbiAgICAvLyBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBpZjpcbiAgICAvLyAqIGl0cyBpZCBpcyBzaW1wbGUgKGEgc2luZ2xlIHBhcnQsIG5vdCBgdGhpc2Agb3IgYC4uYClcbiAgICBsZXQgaXNIZWxwZXIgPSAhaXNCbG9ja1BhcmFtICYmIEFTVC5oZWxwZXJzLmhlbHBlckV4cHJlc3Npb24oc2V4cHIpO1xuXG4gICAgLy8gaWYgYSBtdXN0YWNoZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgYnV0IG5vdCBhIGRlZmluaXRlXG4gICAgLy8gaGVscGVyLCBpdCBpcyBhbWJpZ3VvdXMsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGluIGEgbGF0ZXJcbiAgICAvLyBwYXNzIG9yIGF0IHJ1bnRpbWUuXG4gICAgbGV0IGlzRWxpZ2libGUgPSAhaXNCbG9ja1BhcmFtICYmIChpc0hlbHBlciB8fCBpc1NpbXBsZSk7XG5cbiAgICAvLyBpZiBhbWJpZ3VvdXMsIHdlIGNhbiBwb3NzaWJseSByZXNvbHZlIHRoZSBhbWJpZ3VpdHkgbm93XG4gICAgLy8gQW4gZWxpZ2libGUgaGVscGVyIGlzIG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb21wbGV4IHBhdGgsIGkuZS4gYHRoaXMuZm9vYCwgYC4uL2Zvb2AgZXRjLlxuICAgIGlmIChpc0VsaWdpYmxlICYmICFpc0hlbHBlcikge1xuICAgICAgbGV0IG5hbWUgPSBzZXhwci5wYXRoLnBhcnRzWzBdLFxuICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgIGlmIChvcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgICBpc0hlbHBlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgICBpc0VsaWdpYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzSGVscGVyKSB7XG4gICAgICByZXR1cm4gJ2hlbHBlcic7XG4gICAgfSBlbHNlIGlmIChpc0VsaWdpYmxlKSB7XG4gICAgICByZXR1cm4gJ2FtYmlndW91cyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnc2ltcGxlJztcbiAgICB9XG4gIH0sXG5cbiAgcHVzaFBhcmFtczogZnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLnB1c2hQYXJhbShwYXJhbXNbaV0pO1xuICAgIH1cbiAgfSxcblxuICBwdXNoUGFyYW06IGZ1bmN0aW9uKHZhbCkge1xuICAgIGxldCB2YWx1ZSA9IHZhbC52YWx1ZSAhPSBudWxsID8gdmFsLnZhbHVlIDogdmFsLm9yaWdpbmFsIHx8ICcnO1xuXG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXC4/XFwuXFwvKSovZywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICcuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWwuZGVwdGgpIHtcbiAgICAgICAgdGhpcy5hZGREZXB0aCh2YWwuZGVwdGgpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCB2YWwuZGVwdGggfHwgMCk7XG4gICAgICB0aGlzLm9wY29kZSgncHVzaFN0cmluZ1BhcmFtJywgdmFsdWUsIHZhbC50eXBlKTtcblxuICAgICAgaWYgKHZhbC50eXBlID09PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgICAgLy8gU3ViRXhwcmVzc2lvbnMgZ2V0IGV2YWx1YXRlZCBhbmQgcGFzc2VkIGluXG4gICAgICAgIC8vIGluIHN0cmluZyBwYXJhbXMgbW9kZS5cbiAgICAgICAgdGhpcy5hY2NlcHQodmFsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgbGV0IGJsb2NrUGFyYW1JbmRleDtcbiAgICAgICAgaWYgKHZhbC5wYXJ0cyAmJiAhQVNULmhlbHBlcnMuc2NvcGVkSWQodmFsKSAmJiAhdmFsLmRlcHRoKSB7XG4gICAgICAgICAgIGJsb2NrUGFyYW1JbmRleCA9IHRoaXMuYmxvY2tQYXJhbUluZGV4KHZhbC5wYXJ0c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrUGFyYW1JbmRleCkge1xuICAgICAgICAgIGxldCBibG9ja1BhcmFtQ2hpbGQgPSB2YWwucGFydHMuc2xpY2UoMSkuam9pbignLicpO1xuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCAnQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JbmRleCwgYmxvY2tQYXJhbUNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbC5vcmlnaW5hbCB8fCB2YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9edGhpcyg/OlxcLnwkKS8sICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eXFwuXFwvLywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC4kLywgJycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCB2YWwudHlwZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjY2VwdCh2YWwpO1xuICAgIH1cbiAgfSxcblxuICBzZXR1cEZ1bGxNdXN0YWNoZVBhcmFtczogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UsIG9taXRFbXB0eSkge1xuICAgIGxldCBwYXJhbXMgPSBzZXhwci5wYXJhbXM7XG4gICAgdGhpcy5wdXNoUGFyYW1zKHBhcmFtcyk7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcblxuICAgIGlmIChzZXhwci5oYXNoKSB7XG4gICAgICB0aGlzLmFjY2VwdChzZXhwci5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcsIG9taXRFbXB0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfSxcblxuICBibG9ja1BhcmFtSW5kZXg6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBmb3IgKGxldCBkZXB0aCA9IDAsIGxlbiA9IHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy5sZW5ndGg7IGRlcHRoIDwgbGVuOyBkZXB0aCsrKSB7XG4gICAgICBsZXQgYmxvY2tQYXJhbXMgPSB0aGlzLm9wdGlvbnMuYmxvY2tQYXJhbXNbZGVwdGhdLFxuICAgICAgICAgIHBhcmFtID0gYmxvY2tQYXJhbXMgJiYgaW5kZXhPZihibG9ja1BhcmFtcywgbmFtZSk7XG4gICAgICBpZiAoYmxvY2tQYXJhbXMgJiYgcGFyYW0gPj0gMCkge1xuICAgICAgICByZXR1cm4gW2RlcHRoLCBwYXJhbV07XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlY29tcGlsZShpbnB1dCwgb3B0aW9ucywgZW52KSB7XG4gIGlmIChpbnB1dCA9PSBudWxsIHx8ICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LnR5cGUgIT09ICdQcm9ncmFtJykpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdZb3UgbXVzdCBwYXNzIGEgc3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMucHJlY29tcGlsZS4gWW91IHBhc3NlZCAnICsgaW5wdXQpO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmICghKCdkYXRhJyBpbiBvcHRpb25zKSkge1xuICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7XG4gIH1cbiAgaWYgKG9wdGlvbnMuY29tcGF0KSB7XG4gICAgb3B0aW9ucy51c2VEZXB0aHMgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGFzdCA9IGVudi5wYXJzZShpbnB1dCwgb3B0aW9ucyksXG4gICAgICBlbnZpcm9ubWVudCA9IG5ldyBlbnYuQ29tcGlsZXIoKS5jb21waWxlKGFzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBuZXcgZW52LkphdmFTY3JpcHRDb21waWxlcigpLmNvbXBpbGUoZW52aXJvbm1lbnQsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZShpbnB1dCwgb3B0aW9ucyA9IHt9LCBlbnYpIHtcbiAgaWYgKGlucHV0ID09IG51bGwgfHwgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgJiYgaW5wdXQudHlwZSAhPT0gJ1Byb2dyYW0nKSkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1lvdSBtdXN0IHBhc3MgYSBzdHJpbmcgb3IgSGFuZGxlYmFycyBBU1QgdG8gSGFuZGxlYmFycy5jb21waWxlLiBZb3UgcGFzc2VkICcgKyBpbnB1dCk7XG4gIH1cblxuICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHtcbiAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbXBhdCkge1xuICAgIG9wdGlvbnMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBjb21waWxlZDtcblxuICBmdW5jdGlvbiBjb21waWxlSW5wdXQoKSB7XG4gICAgbGV0IGFzdCA9IGVudi5wYXJzZShpbnB1dCwgb3B0aW9ucyksXG4gICAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKSxcbiAgICAgICAgdGVtcGxhdGVTcGVjID0gbmV3IGVudi5KYXZhU2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGVudmlyb25tZW50LCBvcHRpb25zLCB1bmRlZmluZWQsIHRydWUpO1xuICAgIHJldHVybiBlbnYudGVtcGxhdGUodGVtcGxhdGVTcGVjKTtcbiAgfVxuXG4gIC8vIFRlbXBsYXRlIGlzIG9ubHkgY29tcGlsZWQgb24gZmlyc3QgdXNlIGFuZCBjYWNoZWQgYWZ0ZXIgdGhhdCBwb2ludC5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIGV4ZWNPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLmNhbGwodGhpcywgY29udGV4dCwgZXhlY09wdGlvbnMpO1xuICB9XG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihzZXR1cE9wdGlvbnMpIHtcbiAgICBpZiAoIWNvbXBpbGVkKSB7XG4gICAgICBjb21waWxlZCA9IGNvbXBpbGVJbnB1dCgpO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGlsZWQuX3NldHVwKHNldHVwT3B0aW9ucyk7XG4gIH07XG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLl9jaGlsZChpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gYXJnRXF1YWxzKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGEpICYmIGlzQXJyYXkoYikgJiYgYS5sZW5ndGggPT09IGIubGVuZ3RoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWFyZ0VxdWFscyhhW2ldLCBiW2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoc2V4cHIpIHtcbiAgaWYgKCFzZXhwci5wYXRoLnBhcnRzKSB7XG4gICAgbGV0IGxpdGVyYWwgPSBzZXhwci5wYXRoO1xuICAgIC8vIENhc3RpbmcgdG8gc3RyaW5nIGhlcmUgdG8gbWFrZSBmYWxzZSBhbmQgMCBsaXRlcmFsIHZhbHVlcyBwbGF5IG5pY2VseSB3aXRoIHRoZSByZXN0XG4gICAgLy8gb2YgdGhlIHN5c3RlbS5cbiAgICBzZXhwci5wYXRoID0ge1xuICAgICAgdHlwZTogJ1BhdGhFeHByZXNzaW9uJyxcbiAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBwYXJ0czogW2xpdGVyYWwub3JpZ2luYWwgKyAnJ10sXG4gICAgICBvcmlnaW5hbDogbGl0ZXJhbC5vcmlnaW5hbCArICcnLFxuICAgICAgbG9jOiBsaXRlcmFsLmxvY1xuICAgIH07XG4gIH1cbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js deleted file mode 100644 index 0f5cbf258..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/helpers.js +++ /dev/null @@ -1,230 +0,0 @@ -'use strict'; - -exports.__esModule = true; -exports.SourceLocation = SourceLocation; -exports.id = id; -exports.stripFlags = stripFlags; -exports.stripComment = stripComment; -exports.preparePath = preparePath; -exports.prepareMustache = prepareMustache; -exports.prepareRawBlock = prepareRawBlock; -exports.prepareBlock = prepareBlock; -exports.prepareProgram = prepareProgram; -exports.preparePartialBlock = preparePartialBlock; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _exception = require('../exception'); - -var _exception2 = _interopRequireDefault(_exception); - -function validateClose(open, close) { - close = close.path ? close.path.original : close; - - if (open.path.original !== close) { - var errorNode = { loc: open.path.loc }; - - throw new _exception2['default'](open.path.original + " doesn't match " + close, errorNode); - } -} - -function SourceLocation(source, locInfo) { - this.source = source; - this.start = { - line: locInfo.first_line, - column: locInfo.first_column - }; - this.end = { - line: locInfo.last_line, - column: locInfo.last_column - }; -} - -function id(token) { - if (/^\[.*\]$/.test(token)) { - return token.substr(1, token.length - 2); - } else { - return token; - } -} - -function stripFlags(open, close) { - return { - open: open.charAt(2) === '~', - close: close.charAt(close.length - 3) === '~' - }; -} - -function stripComment(comment) { - return comment.replace(/^\{\{~?\!-?-?/, '').replace(/-?-?~?\}\}$/, ''); -} - -function preparePath(data, parts, loc) { - loc = this.locInfo(loc); - - var original = data ? '@' : '', - dig = [], - depth = 0, - depthString = ''; - - for (var i = 0, l = parts.length; i < l; i++) { - var part = parts[i].part, - - // If we have [] syntax then we do not treat path references as operators, - // i.e. foo.[this] resolves to approximately context.foo['this'] - isLiteral = parts[i].original !== part; - original += (parts[i].separator || '') + part; - - if (!isLiteral && (part === '..' || part === '.' || part === 'this')) { - if (dig.length > 0) { - throw new _exception2['default']('Invalid path: ' + original, { loc: loc }); - } else if (part === '..') { - depth++; - depthString += '../'; - } - } else { - dig.push(part); - } - } - - return { - type: 'PathExpression', - data: data, - depth: depth, - parts: dig, - original: original, - loc: loc - }; -} - -function prepareMustache(path, params, hash, open, strip, locInfo) { - // Must use charAt to support IE pre-10 - var escapeFlag = open.charAt(3) || open.charAt(2), - escaped = escapeFlag !== '{' && escapeFlag !== '&'; - - var decorator = /\*/.test(open); - return { - type: decorator ? 'Decorator' : 'MustacheStatement', - path: path, - params: params, - hash: hash, - escaped: escaped, - strip: strip, - loc: this.locInfo(locInfo) - }; -} - -function prepareRawBlock(openRawBlock, contents, close, locInfo) { - validateClose(openRawBlock, close); - - locInfo = this.locInfo(locInfo); - var program = { - type: 'Program', - body: contents, - strip: {}, - loc: locInfo - }; - - return { - type: 'BlockStatement', - path: openRawBlock.path, - params: openRawBlock.params, - hash: openRawBlock.hash, - program: program, - openStrip: {}, - inverseStrip: {}, - closeStrip: {}, - loc: locInfo - }; -} - -function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) { - if (close && close.path) { - validateClose(openBlock, close); - } - - var decorator = /\*/.test(openBlock.open); - - program.blockParams = openBlock.blockParams; - - var inverse = undefined, - inverseStrip = undefined; - - if (inverseAndProgram) { - if (decorator) { - throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram); - } - - if (inverseAndProgram.chain) { - inverseAndProgram.program.body[0].closeStrip = close.strip; - } - - inverseStrip = inverseAndProgram.strip; - inverse = inverseAndProgram.program; - } - - if (inverted) { - inverted = inverse; - inverse = program; - program = inverted; - } - - return { - type: decorator ? 'DecoratorBlock' : 'BlockStatement', - path: openBlock.path, - params: openBlock.params, - hash: openBlock.hash, - program: program, - inverse: inverse, - openStrip: openBlock.strip, - inverseStrip: inverseStrip, - closeStrip: close && close.strip, - loc: this.locInfo(locInfo) - }; -} - -function prepareProgram(statements, loc) { - if (!loc && statements.length) { - var firstLoc = statements[0].loc, - lastLoc = statements[statements.length - 1].loc; - - /* istanbul ignore else */ - if (firstLoc && lastLoc) { - loc = { - source: firstLoc.source, - start: { - line: firstLoc.start.line, - column: firstLoc.start.column - }, - end: { - line: lastLoc.end.line, - column: lastLoc.end.column - } - }; - } - } - - return { - type: 'Program', - body: statements, - strip: {}, - loc: loc - }; -} - -function preparePartialBlock(open, program, close, locInfo) { - validateClose(open, close); - - return { - type: 'PartialBlockStatement', - name: open.path, - params: open.params, - hash: open.hash, - program: program, - openStrip: open.strip, - closeStrip: close && close.strip, - loc: this.locInfo(locInfo) - }; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJBQXNCLGNBQWM7Ozs7QUFFcEMsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxPQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7O0FBRWpELE1BQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO0FBQ2hDLFFBQUksU0FBUyxHQUFHLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFDLENBQUM7O0FBRXJDLFVBQU0sMkJBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ2hGO0NBQ0Y7O0FBRU0sU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUM5QyxNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixNQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsUUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3hCLFVBQU0sRUFBRSxPQUFPLENBQUMsWUFBWTtHQUM3QixDQUFDO0FBQ0YsTUFBSSxDQUFDLEdBQUcsR0FBRztBQUNULFFBQUksRUFBRSxPQUFPLENBQUMsU0FBUztBQUN2QixVQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVc7R0FDNUIsQ0FBQztDQUNIOztBQUVNLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRTtBQUN4QixNQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDMUIsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzFD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anMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpIHtcbiAgY2xvc2UgPSBjbG9zZS5wYXRoID8gY2xvc2UucGF0aC5vcmlnaW5hbCA6IGNsb3NlO1xuXG4gIGlmIChvcGVuLnBhdGgub3JpZ2luYWwgIT09IGNsb3NlKSB7XG4gICAgbGV0IGVycm9yTm9kZSA9IHtsb2M6IG9wZW4ucGF0aC5sb2N9O1xuXG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihvcGVuLnBhdGgub3JpZ2luYWwgKyBcIiBkb2Vzbid0IG1hdGNoIFwiICsgY2xvc2UsIGVycm9yTm9kZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFNvdXJjZUxvY2F0aW9uKHNvdXJjZSwgbG9jSW5mbykge1xuICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgdGhpcy5zdGFydCA9IHtcbiAgICBsaW5lOiBsb2NJbmZvLmZpcnN0X2xpbmUsXG4gICAgY29sdW1uOiBsb2NJbmZvLmZpcnN0X2NvbHVtblxuICB9O1xuICB0aGlzLmVuZCA9IHtcbiAgICBsaW5lOiBsb2NJbmZvLmxhc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8ubGFzdF9jb2x1bW5cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlkKHRva2VuKSB7XG4gIGlmICgvXlxcWy4qXFxdJC8udGVzdCh0b2tlbikpIHtcbiAgICByZXR1cm4gdG9rZW4uc3Vic3RyKDEsIHRva2VuLmxlbmd0aCAtIDIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0b2tlbjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBGbGFncyhvcGVuLCBjbG9zZSkge1xuICByZXR1cm4ge1xuICAgIG9wZW46IG9wZW4uY2hhckF0KDIpID09PSAnficsXG4gICAgY2xvc2U6IGNsb3NlLmNoYXJBdChjbG9zZS5sZW5ndGggLSAzKSA9PT0gJ34nXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcENvbW1lbnQoY29tbWVudCkge1xuICByZXR1cm4gY29tbWVudC5yZXBsYWNlKC9eXFx7XFx7fj9cXCEtPy0/LywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLy0/LT9+P1xcfVxcfSQvLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGF0aChkYXRhLCBwYXJ0cywgbG9jKSB7XG4gIGxvYyA9IHRoaXMubG9jSW5mbyhsb2MpO1xuXG4gIGxldCBvcmlnaW5hbCA9IGRhdGEgPyAnQCcgOiAnJyxcbiAgICAgIGRpZyA9IFtdLFxuICAgICAgZGVwdGggPSAwLFxuICAgICAgZGVwdGhTdHJpbmcgPSAnJztcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHBhcnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCBwYXJ0ID0gcGFydHNbaV0ucGFydCxcbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBbXSBzeW50YXggdGhlbiB3ZSBkbyBub3QgdHJlYXQgcGF0aCByZWZlcmVuY2VzIGFzIG9wZXJhdG9ycyxcbiAgICAgICAgLy8gaS5lLiBmb28uW3RoaXNdIHJlc29sdmVzIHRvIGFwcHJveGltYXRlbHkgY29udGV4dC5mb29bJ3RoaXMnXVxuICAgICAgICBpc0xpdGVyYWwgPSBwYXJ0c1tpXS5vcmlnaW5hbCAhPT0gcGFydDtcbiAgICBvcmlnaW5hbCArPSAocGFydHNbaV0uc2VwYXJhdG9yIHx8ICcnKSArIHBhcnQ7XG5cbiAgICBpZiAoIWlzTGl0ZXJhbCAmJiAocGFydCA9PT0gJy4uJyB8fCBwYXJ0ID09PSAnLicgfHwgcGFydCA9PT0gJ3RoaXMnKSkge1xuICAgICAgaWYgKGRpZy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgcGF0aDogJyArIG9yaWdpbmFsLCB7bG9jfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgICAgZGVwdGhTdHJpbmcgKz0gJy4uLyc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZy5wdXNoKHBhcnQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1BhdGhFeHByZXNzaW9uJyxcbiAgICBkYXRhLFxuICAgIGRlcHRoLFxuICAgIHBhcnRzOiBkaWcsXG4gICAgb3JpZ2luYWwsXG4gICAgbG9jXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTXVzdGFjaGUocGF0aCwgcGFyYW1zLCBoYXNoLCBvcGVuLCBzdHJpcCwgbG9jSW5mbykge1xuICAvLyBNdXN0IHVzZSBjaGFyQXQgdG8gc3VwcG9ydCBJRSBwcmUtMTBcbiAgbGV0IGVzY2FwZUZsYWcgPSBvcGVuLmNoYXJBdCgzKSB8fCBvcGVuLmNoYXJBdCgyKSxcbiAgICAgIGVzY2FwZWQgPSBlc2NhcGVGbGFnICE9PSAneycgJiYgZXNjYXBlRmxhZyAhPT0gJyYnO1xuXG4gIGxldCBkZWNvcmF0b3IgPSAoL1xcKi8udGVzdChvcGVuKSk7XG4gIHJldHVybiB7XG4gICAgdHlwZTogZGVjb3JhdG9yID8gJ0RlY29yYXRvcicgOiAnTXVzdGFjaGVTdGF0ZW1lbnQnLFxuICAgIHBhdGgsXG4gICAgcGFyYW1zLFxuICAgIGhhc2gsXG4gICAgZXNjYXBlZCxcbiAgICBzdHJpcCxcbiAgICBsb2M6IHRoaXMubG9jSW5mbyhsb2NJbmZvKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVJhd0Jsb2NrKG9wZW5SYXdCbG9jaywgY29udGVudHMsIGNsb3NlLCBsb2NJbmZvKSB7XG4gIHZhbGlkYXRlQ2xvc2Uob3BlblJhd0Jsb2NrLCBjbG9zZSk7XG5cbiAgbG9jSW5mbyA9IHRoaXMubG9jSW5mbyhsb2NJbmZvKTtcbiAgbGV0IHByb2dyYW0gPSB7XG4gICAgdHlwZTogJ1Byb2dyYW0nLFxuICAgIGJvZHk6IGNvbnRlbnRzLFxuICAgIHN0cmlwOiB7fSxcbiAgICBsb2M6IGxvY0luZm9cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdCbG9ja1N0YXRlbWVudCcsXG4gICAgcGF0aDogb3BlblJhd0Jsb2NrLnBhdGgsXG4gICAgcGFyYW1zOiBvcGVuUmF3QmxvY2sucGFyYW1zLFxuICAgIGhhc2g6IG9wZW5SYXdCbG9jay5oYXNoLFxuICAgIHByb2dyYW0sXG4gICAgb3BlblN0cmlwOiB7fSxcbiAgICBpbnZlcnNlU3RyaXA6IHt9LFxuICAgIGNsb3NlU3RyaXA6IHt9LFxuICAgIGxvYzogbG9jSW5mb1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZUJsb2NrKG9wZW5CbG9jaywgcHJvZ3JhbSwgaW52ZXJzZUFuZFByb2dyYW0sIGNsb3NlLCBpbnZlcnRlZCwgbG9jSW5mbykge1xuICBpZiAoY2xvc2UgJiYgY2xvc2UucGF0aCkge1xuICAgIHZhbGlkYXRlQ2xvc2Uob3BlbkJsb2NrLCBjbG9zZSk7XG4gIH1cblxuICBsZXQgZGVjb3JhdG9yID0gKC9cXCovLnRlc3Qob3BlbkJsb2NrLm9wZW4pKTtcblxuICBwcm9ncmFtLmJsb2NrUGFyYW1zID0gb3BlbkJsb2NrLmJsb2NrUGFyYW1zO1xuXG4gIGxldCBpbnZlcnNlLFxuICAgICAgaW52ZXJzZVN0cmlwO1xuXG4gIGlmIChpbnZlcnNlQW5kUHJvZ3JhbSkge1xuICAgIGlmIChkZWNvcmF0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQgaW52ZXJzZSBibG9jayBvbiBkZWNvcmF0b3InLCBpbnZlcnNlQW5kUHJvZ3JhbSk7XG4gICAgfVxuXG4gICAgaWYgKGludmVyc2VBbmRQcm9ncmFtLmNoYWluKSB7XG4gICAgICBpbnZlcnNlQW5kUHJvZ3JhbS5wcm9ncmFtLmJvZHlbMF0uY2xvc2VTdHJpcCA9IGNsb3NlLnN0cmlwO1xuICAgIH1cblxuICAgIGludmVyc2VTdHJpcCA9IGludmVyc2VBbmRQcm9ncmFtLnN0cmlwO1xuICAgIGludmVyc2UgPSBpbnZlcnNlQW5kUHJvZ3JhbS5wcm9ncmFtO1xuICB9XG5cbiAgaWYgKGludmVydGVkKSB7XG4gICAgaW52ZXJ0ZWQgPSBpbnZlcnNlO1xuICAgIGludmVyc2UgPSBwcm9ncmFtO1xuICAgIHByb2dyYW0gPSBpbnZlcnRlZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogZGVjb3JhdG9yID8gJ0RlY29yYXRvckJsb2NrJyA6ICdCbG9ja1N0YXRlbWVudCcsXG4gICAgcGF0aDogb3BlbkJsb2NrLnBhdGgsXG4gICAgcGFyYW1zOiBvcGVuQmxvY2sucGFyYW1zLFxuICAgIGhhc2g6IG9wZW5CbG9jay5oYXNoLFxuICAgIHByb2dyYW0sXG4gICAgaW52ZXJzZSxcbiAgICBvcGVuU3RyaXA6IG9wZW5CbG9jay5zdHJpcCxcbiAgICBpbnZlcnNlU3RyaXAsXG4gICAgY2xvc2VTdHJpcDogY2xvc2UgJiYgY2xvc2Uuc3RyaXAsXG4gICAgbG9jOiB0aGlzLmxvY0luZm8obG9jSW5mbylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVQcm9ncmFtKHN0YXRlbWVudHMsIGxvYykge1xuICBpZiAoIWxvYyAmJiBzdGF0ZW1lbnRzLmxlbmd0aCkge1xuICAgIGNvbnN0IGZpcnN0TG9jID0gc3RhdGVtZW50c1swXS5sb2MsXG4gICAgICAgICAgbGFzdExvYyA9IHN0YXRlbWVudHNbc3RhdGVtZW50cy5sZW5ndGggLSAxXS5sb2M7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmaXJzdExvYyAmJiBsYXN0TG9jKSB7XG4gICAgICBsb2MgPSB7XG4gICAgICAgIHNvdXJjZTogZmlyc3RMb2Muc291cmNlLFxuICAgICAgICBzdGFydDoge1xuICAgICAgICAgIGxpbmU6IGZpcnN0TG9jLnN0YXJ0LmxpbmUsXG4gICAgICAgICAgY29sdW1uOiBmaXJzdExvYy5zdGFydC5jb2x1bW5cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgbGluZTogbGFzdExvYy5lbmQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGxhc3RMb2MuZW5kLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1Byb2dyYW0nLFxuICAgIGJvZHk6IHN0YXRlbWVudHMsXG4gICAgc3RyaXA6IHt9LFxuICAgIGxvYzogbG9jXG4gIH07XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVQYXJ0aWFsQmxvY2sob3BlbiwgcHJvZ3JhbSwgY2xvc2UsIGxvY0luZm8pIHtcbiAgdmFsaWRhdGVDbG9zZShvcGVuLCBjbG9zZSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUGFydGlhbEJsb2NrU3RhdGVtZW50JyxcbiAgICBuYW1lOiBvcGVuLnBhdGgsXG4gICAgcGFyYW1zOiBvcGVuLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuLmhhc2gsXG4gICAgcHJvZ3JhbSxcbiAgICBvcGVuU3RyaXA6IG9wZW4uc3RyaXAsXG4gICAgY2xvc2VTdHJpcDogY2xvc2UgJiYgY2xvc2Uuc3RyaXAsXG4gICAgbG9jOiB0aGlzLmxvY0luZm8obG9jSW5mbylcbiAgfTtcbn1cblxuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js deleted file mode 100644 index 4dd5c9074..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js +++ /dev/null @@ -1,1128 +0,0 @@ -'use strict'; - -exports.__esModule = true; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _base = require('../base'); - -var _exception = require('../exception'); - -var _exception2 = _interopRequireDefault(_exception); - -var _utils = require('../utils'); - -var _codeGen = require('./code-gen'); - -var _codeGen2 = _interopRequireDefault(_codeGen); - -function Literal(value) { - this.value = value; -} - -function JavaScriptCompiler() {} - -JavaScriptCompiler.prototype = { - // PUBLIC API: You can override these methods in a subclass to provide - // alternative compiled forms for name lookup and buffering semantics - nameLookup: function nameLookup(parent, name /* , type*/) { - if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) { - return [parent, '.', name]; - } else { - return [parent, '[', JSON.stringify(name), ']']; - } - }, - depthedLookup: function depthedLookup(name) { - return [this.aliasable('container.lookup'), '(depths, "', name, '")']; - }, - - compilerInfo: function compilerInfo() { - var revision = _base.COMPILER_REVISION, - versions = _base.REVISION_CHANGES[revision]; - return [revision, versions]; - }, - - appendToBuffer: function appendToBuffer(source, location, explicit) { - // Force a source as this simplifies the merge logic. - if (!_utils.isArray(source)) { - source = [source]; - } - source = this.source.wrap(source, location); - - if (this.environment.isSimple) { - return ['return ', source, ';']; - } else if (explicit) { - // This is a case where the buffer operation occurs as a child of another - // construct, generally braces. We have to explicitly output these buffer - // operations to ensure that the emitted code goes in the correct location. - return ['buffer += ', source, ';']; - } else { - source.appendToBuffer = true; - return source; - } - }, - - initializeBuffer: function initializeBuffer() { - return this.quotedString(''); - }, - // END PUBLIC API - - compile: function compile(environment, options, context, asObject) { - this.environment = environment; - this.options = options; - this.stringParams = this.options.stringParams; - this.trackIds = this.options.trackIds; - this.precompile = !asObject; - - this.name = this.environment.name; - this.isChild = !!context; - this.context = context || { - decorators: [], - programs: [], - environments: [] - }; - - this.preamble(); - - this.stackSlot = 0; - this.stackVars = []; - this.aliases = {}; - this.registers = { list: [] }; - this.hashes = []; - this.compileStack = []; - this.inlineStack = []; - this.blockParams = []; - - this.compileChildren(environment, options); - - this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat; - this.useBlockParams = this.useBlockParams || environment.useBlockParams; - - var opcodes = environment.opcodes, - opcode = undefined, - firstLoc = undefined, - i = undefined, - l = undefined; - - for (i = 0, l = opcodes.length; i < l; i++) { - opcode = opcodes[i]; - - this.source.currentLocation = opcode.loc; - firstLoc = firstLoc || opcode.loc; - this[opcode.opcode].apply(this, opcode.args); - } - - // Flush any trailing content that might be pending. - this.source.currentLocation = firstLoc; - this.pushSource(''); - - /* istanbul ignore next */ - if (this.stackSlot || this.inlineStack.length || this.compileStack.length) { - throw new _exception2['default']('Compile completed with content left on stack'); - } - - if (!this.decorators.isEmpty()) { - this.useDecorators = true; - - this.decorators.prepend('var decorators = container.decorators;\n'); - this.decorators.push('return fn;'); - - if (asObject) { - this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]); - } else { - this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\n'); - this.decorators.push('}\n'); - this.decorators = this.decorators.merge(); - } - } else { - this.decorators = undefined; - } - - var fn = this.createFunctionContext(asObject); - if (!this.isChild) { - var ret = { - compiler: this.compilerInfo(), - main: fn - }; - - if (this.decorators) { - ret.main_d = this.decorators; // eslint-disable-line camelcase - ret.useDecorators = true; - } - - var _context = this.context; - var programs = _context.programs; - var decorators = _context.decorators; - - for (i = 0, l = programs.length; i < l; i++) { - if (programs[i]) { - ret[i] = programs[i]; - if (decorators[i]) { - ret[i + '_d'] = decorators[i]; - ret.useDecorators = true; - } - } - } - - if (this.environment.usePartial) { - ret.usePartial = true; - } - if (this.options.data) { - ret.useData = true; - } - if (this.useDepths) { - ret.useDepths = true; - } - if (this.useBlockParams) { - ret.useBlockParams = true; - } - if (this.options.compat) { - ret.compat = true; - } - - if (!asObject) { - ret.compiler = JSON.stringify(ret.compiler); - - this.source.currentLocation = { start: { line: 1, column: 0 } }; - ret = this.objectLiteral(ret); - - if (options.srcName) { - ret = ret.toStringWithSourceMap({ file: options.destName }); - ret.map = ret.map && ret.map.toString(); - } else { - ret = ret.toString(); - } - } else { - ret.compilerOptions = this.options; - } - - return ret; - } else { - return fn; - } - }, - - preamble: function preamble() { - // track the last context pushed into place to allow skipping the - // getContext opcode when it would be a noop - this.lastContext = 0; - this.source = new _codeGen2['default'](this.options.srcName); - this.decorators = new _codeGen2['default'](this.options.srcName); - }, - - createFunctionContext: function createFunctionContext(asObject) { - var varDeclarations = ''; - - var locals = this.stackVars.concat(this.registers.list); - if (locals.length > 0) { - varDeclarations += ', ' + locals.join(', '); - } - - // Generate minimizer alias mappings - // - // When using true SourceNodes, this will update all references to the given alias - // as the source nodes are reused in situ. For the non-source node compilation mode, - // aliases will not be used, but this case is already being run on the client and - // we aren't concern about minimizing the template size. - var aliasCount = 0; - for (var alias in this.aliases) { - // eslint-disable-line guard-for-in - var node = this.aliases[alias]; - - if (this.aliases.hasOwnProperty(alias) && node.children && node.referenceCount > 1) { - varDeclarations += ', alias' + ++aliasCount + '=' + alias; - node.children[0] = 'alias' + aliasCount; - } - } - - var params = ['container', 'depth0', 'helpers', 'partials', 'data']; - - if (this.useBlockParams || this.useDepths) { - params.push('blockParams'); - } - if (this.useDepths) { - params.push('depths'); - } - - // Perform a second pass over the output to merge content when possible - var source = this.mergeSource(varDeclarations); - - if (asObject) { - params.push(source); - - return Function.apply(this, params); - } else { - return this.source.wrap(['function(', params.join(','), ') {\n ', source, '}']); - } - }, - mergeSource: function mergeSource(varDeclarations) { - var isSimple = this.environment.isSimple, - appendOnly = !this.forceBuffer, - appendFirst = undefined, - sourceSeen = undefined, - bufferStart = undefined, - bufferEnd = undefined; - this.source.each(function (line) { - if (line.appendToBuffer) { - if (bufferStart) { - line.prepend(' + '); - } else { - bufferStart = line; - } - bufferEnd = line; - } else { - if (bufferStart) { - if (!sourceSeen) { - appendFirst = true; - } else { - bufferStart.prepend('buffer += '); - } - bufferEnd.add(';'); - bufferStart = bufferEnd = undefined; - } - - sourceSeen = true; - if (!isSimple) { - appendOnly = false; - } - } - }); - - if (appendOnly) { - if (bufferStart) { - bufferStart.prepend('return '); - bufferEnd.add(';'); - } else if (!sourceSeen) { - this.source.push('return "";'); - } - } else { - varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer()); - - if (bufferStart) { - bufferStart.prepend('return buffer + '); - bufferEnd.add(';'); - } else { - this.source.push('return buffer;'); - } - } - - if (varDeclarations) { - this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n')); - } - - return this.source.merge(); - }, - - // [blockValue] - // - // On stack, before: hash, inverse, program, value - // On stack, after: return value of blockHelperMissing - // - // The purpose of this opcode is to take a block of the form - // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and - // replace it on the stack with the result of properly - // invoking blockHelperMissing. - blockValue: function blockValue(name) { - var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'), - params = [this.contextName(0)]; - this.setupHelperArgs(name, 0, params); - - var blockName = this.popStack(); - params.splice(1, 0, blockName); - - this.push(this.source.functionCall(blockHelperMissing, 'call', params)); - }, - - // [ambiguousBlockValue] - // - // On stack, before: hash, inverse, program, value - // Compiler value, before: lastHelper=value of last found helper, if any - // On stack, after, if no lastHelper: same as [blockValue] - // On stack, after, if lastHelper: value - ambiguousBlockValue: function ambiguousBlockValue() { - // We're being a bit cheeky and reusing the options value from the prior exec - var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'), - params = [this.contextName(0)]; - this.setupHelperArgs('', 0, params, true); - - this.flushInline(); - - var current = this.topStack(); - params.splice(1, 0, current); - - this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']); - }, - - // [appendContent] - // - // On stack, before: ... - // On stack, after: ... - // - // Appends the string value of `content` to the current buffer - appendContent: function appendContent(content) { - if (this.pendingContent) { - content = this.pendingContent + content; - } else { - this.pendingLocation = this.source.currentLocation; - } - - this.pendingContent = content; - }, - - // [append] - // - // On stack, before: value, ... - // On stack, after: ... - // - // Coerces `value` to a String and appends it to the current buffer. - // - // If `value` is truthy, or 0, it is coerced into a string and appended - // Otherwise, the empty string is appended - append: function append() { - if (this.isInline()) { - this.replaceStack(function (current) { - return [' != null ? ', current, ' : ""']; - }); - - this.pushSource(this.appendToBuffer(this.popStack())); - } else { - var local = this.popStack(); - this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']); - if (this.environment.isSimple) { - this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']); - } - } - }, - - // [appendEscaped] - // - // On stack, before: value, ... - // On stack, after: ... - // - // Escape `value` and append it to the buffer - appendEscaped: function appendEscaped() { - this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')'])); - }, - - // [getContext] - // - // On stack, before: ... - // On stack, after: ... - // Compiler value, after: lastContext=depth - // - // Set the value of the `lastContext` compiler value to the depth - getContext: function getContext(depth) { - this.lastContext = depth; - }, - - // [pushContext] - // - // On stack, before: ... - // On stack, after: currentContext, ... - // - // Pushes the value of the current context onto the stack. - pushContext: function pushContext() { - this.pushStackLiteral(this.contextName(this.lastContext)); - }, - - // [lookupOnContext] - // - // On stack, before: ... - // On stack, after: currentContext[name], ... - // - // Looks up the value of `name` on the current context and pushes - // it onto the stack. - lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) { - var i = 0; - - if (!scoped && this.options.compat && !this.lastContext) { - // The depthed query is expected to handle the undefined logic for the root level that - // is implemented below, so we evaluate that directly in compat mode - this.push(this.depthedLookup(parts[i++])); - } else { - this.pushContext(); - } - - this.resolvePath('context', parts, i, falsy, strict); - }, - - // [lookupBlockParam] - // - // On stack, before: ... - // On stack, after: blockParam[name], ... - // - // Looks up the value of `parts` on the given block param and pushes - // it onto the stack. - lookupBlockParam: function lookupBlockParam(blockParamId, parts) { - this.useBlockParams = true; - - this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']); - this.resolvePath('context', parts, 1); - }, - - // [lookupData] - // - // On stack, before: ... - // On stack, after: data, ... - // - // Push the data lookup operator - lookupData: function lookupData(depth, parts, strict) { - if (!depth) { - this.pushStackLiteral('data'); - } else { - this.pushStackLiteral('container.data(data, ' + depth + ')'); - } - - this.resolvePath('data', parts, 0, true, strict); - }, - - resolvePath: function resolvePath(type, parts, i, falsy, strict) { - // istanbul ignore next - - var _this = this; - - if (this.options.strict || this.options.assumeObjects) { - this.push(strictLookup(this.options.strict && strict, this, parts, type)); - return; - } - - var len = parts.length; - for (; i < len; i++) { - /* eslint-disable no-loop-func */ - this.replaceStack(function (current) { - var lookup = _this.nameLookup(current, parts[i], type); - // We want to ensure that zero and false are handled properly if the context (falsy flag) - // needs to have the special handling for these values. - if (!falsy) { - return [' != null ? ', lookup, ' : ', current]; - } else { - // Otherwise we can use generic falsy handling - return [' && ', lookup]; - } - }); - /* eslint-enable no-loop-func */ - } - }, - - // [resolvePossibleLambda] - // - // On stack, before: value, ... - // On stack, after: resolved value, ... - // - // If the `value` is a lambda, replace it on the stack by - // the return value of the lambda - resolvePossibleLambda: function resolvePossibleLambda() { - this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']); - }, - - // [pushStringParam] - // - // On stack, before: ... - // On stack, after: string, currentContext, ... - // - // This opcode is designed for use in string mode, which - // provides the string value of a parameter along with its - // depth rather than resolving it immediately. - pushStringParam: function pushStringParam(string, type) { - this.pushContext(); - this.pushString(type); - - // If it's a subexpression, the string result - // will be pushed after this opcode. - if (type !== 'SubExpression') { - if (typeof string === 'string') { - this.pushString(string); - } else { - this.pushStackLiteral(string); - } - } - }, - - emptyHash: function emptyHash(omitEmpty) { - if (this.trackIds) { - this.push('{}'); // hashIds - } - if (this.stringParams) { - this.push('{}'); // hashContexts - this.push('{}'); // hashTypes - } - this.pushStackLiteral(omitEmpty ? 'undefined' : '{}'); - }, - pushHash: function pushHash() { - if (this.hash) { - this.hashes.push(this.hash); - } - this.hash = { values: [], types: [], contexts: [], ids: [] }; - }, - popHash: function popHash() { - var hash = this.hash; - this.hash = this.hashes.pop(); - - if (this.trackIds) { - this.push(this.objectLiteral(hash.ids)); - } - if (this.stringParams) { - this.push(this.objectLiteral(hash.contexts)); - this.push(this.objectLiteral(hash.types)); - } - - this.push(this.objectLiteral(hash.values)); - }, - - // [pushString] - // - // On stack, before: ... - // On stack, after: quotedString(string), ... - // - // Push a quoted version of `string` onto the stack - pushString: function pushString(string) { - this.pushStackLiteral(this.quotedString(string)); - }, - - // [pushLiteral] - // - // On stack, before: ... - // On stack, after: value, ... - // - // Pushes a value onto the stack. This operation prevents - // the compiler from creating a temporary variable to hold - // it. - pushLiteral: function pushLiteral(value) { - this.pushStackLiteral(value); - }, - - // [pushProgram] - // - // On stack, before: ... - // On stack, after: program(guid), ... - // - // Push a program expression onto the stack. This takes - // a compile-time guid and converts it into a runtime-accessible - // expression. - pushProgram: function pushProgram(guid) { - if (guid != null) { - this.pushStackLiteral(this.programExpression(guid)); - } else { - this.pushStackLiteral(null); - } - }, - - // [registerDecorator] - // - // On stack, before: hash, program, params..., ... - // On stack, after: ... - // - // Pops off the decorator's parameters, invokes the decorator, - // and inserts the decorator into the decorators list. - registerDecorator: function registerDecorator(paramSize, name) { - var foundDecorator = this.nameLookup('decorators', name, 'decorator'), - options = this.setupHelperArgs(name, paramSize); - - this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']); - }, - - // [invokeHelper] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of helper invocation - // - // Pops off the helper's parameters, invokes the helper, - // and pushes the helper's return value onto the stack. - // - // If the helper is not found, `helperMissing` is called. - invokeHelper: function invokeHelper(paramSize, name, isSimple) { - var nonHelper = this.popStack(), - helper = this.setupHelper(paramSize, name), - simple = isSimple ? [helper.name, ' || '] : ''; - - var lookup = ['('].concat(simple, nonHelper); - if (!this.options.strict) { - lookup.push(' || ', this.aliasable('helpers.helperMissing')); - } - lookup.push(')'); - - this.push(this.source.functionCall(lookup, 'call', helper.callParams)); - }, - - // [invokeKnownHelper] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of helper invocation - // - // This operation is used when the helper is known to exist, - // so a `helperMissing` fallback is not required. - invokeKnownHelper: function invokeKnownHelper(paramSize, name) { - var helper = this.setupHelper(paramSize, name); - this.push(this.source.functionCall(helper.name, 'call', helper.callParams)); - }, - - // [invokeAmbiguous] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of disambiguation - // - // This operation is used when an expression like `{{foo}}` - // is provided, but we don't know at compile-time whether it - // is a helper or a path. - // - // This operation emits more code than the other options, - // and can be avoided by passing the `knownHelpers` and - // `knownHelpersOnly` flags at compile-time. - invokeAmbiguous: function invokeAmbiguous(name, helperCall) { - this.useRegister('helper'); - - var nonHelper = this.popStack(); - - this.emptyHash(); - var helper = this.setupHelper(0, name, helperCall); - - var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper'); - - var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')']; - if (!this.options.strict) { - lookup[0] = '(helper = '; - lookup.push(' != null ? helper : ', this.aliasable('helpers.helperMissing')); - } - - this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('"function"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']); - }, - - // [invokePartial] - // - // On stack, before: context, ... - // On stack after: result of partial invocation - // - // This operation pops off a context, invokes a partial with that context, - // and pushes the result of the invocation back. - invokePartial: function invokePartial(isDynamic, name, indent) { - var params = [], - options = this.setupParams(name, 1, params); - - if (isDynamic) { - name = this.popStack(); - delete options.name; - } - - if (indent) { - options.indent = JSON.stringify(indent); - } - options.helpers = 'helpers'; - options.partials = 'partials'; - options.decorators = 'container.decorators'; - - if (!isDynamic) { - params.unshift(this.nameLookup('partials', name, 'partial')); - } else { - params.unshift(name); - } - - if (this.options.compat) { - options.depths = 'depths'; - } - options = this.objectLiteral(options); - params.push(options); - - this.push(this.source.functionCall('container.invokePartial', '', params)); - }, - - // [assignToHash] - // - // On stack, before: value, ..., hash, ... - // On stack, after: ..., hash, ... - // - // Pops a value off the stack and assigns it to the current hash - assignToHash: function assignToHash(key) { - var value = this.popStack(), - context = undefined, - type = undefined, - id = undefined; - - if (this.trackIds) { - id = this.popStack(); - } - if (this.stringParams) { - type = this.popStack(); - context = this.popStack(); - } - - var hash = this.hash; - if (context) { - hash.contexts[key] = context; - } - if (type) { - hash.types[key] = type; - } - if (id) { - hash.ids[key] = id; - } - hash.values[key] = value; - }, - - pushId: function pushId(type, name, child) { - if (type === 'BlockParam') { - this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : '')); - } else if (type === 'PathExpression') { - this.pushString(name); - } else if (type === 'SubExpression') { - this.pushStackLiteral('true'); - } else { - this.pushStackLiteral('null'); - } - }, - - // HELPERS - - compiler: JavaScriptCompiler, - - compileChildren: function compileChildren(environment, options) { - var children = environment.children, - child = undefined, - compiler = undefined; - - for (var i = 0, l = children.length; i < l; i++) { - child = children[i]; - compiler = new this.compiler(); // eslint-disable-line new-cap - - var existing = this.matchExistingProgram(child); - - if (existing == null) { - this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children - var index = this.context.programs.length; - child.index = index; - child.name = 'program' + index; - this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile); - this.context.decorators[index] = compiler.decorators; - this.context.environments[index] = child; - - this.useDepths = this.useDepths || compiler.useDepths; - this.useBlockParams = this.useBlockParams || compiler.useBlockParams; - child.useDepths = this.useDepths; - child.useBlockParams = this.useBlockParams; - } else { - child.index = existing.index; - child.name = 'program' + existing.index; - - this.useDepths = this.useDepths || existing.useDepths; - this.useBlockParams = this.useBlockParams || existing.useBlockParams; - } - } - }, - matchExistingProgram: function matchExistingProgram(child) { - for (var i = 0, len = this.context.environments.length; i < len; i++) { - var environment = this.context.environments[i]; - if (environment && environment.equals(child)) { - return environment; - } - } - }, - - programExpression: function programExpression(guid) { - var child = this.environment.children[guid], - programParams = [child.index, 'data', child.blockParams]; - - if (this.useBlockParams || this.useDepths) { - programParams.push('blockParams'); - } - if (this.useDepths) { - programParams.push('depths'); - } - - return 'container.program(' + programParams.join(', ') + ')'; - }, - - useRegister: function useRegister(name) { - if (!this.registers[name]) { - this.registers[name] = true; - this.registers.list.push(name); - } - }, - - push: function push(expr) { - if (!(expr instanceof Literal)) { - expr = this.source.wrap(expr); - } - - this.inlineStack.push(expr); - return expr; - }, - - pushStackLiteral: function pushStackLiteral(item) { - this.push(new Literal(item)); - }, - - pushSource: function pushSource(source) { - if (this.pendingContent) { - this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation)); - this.pendingContent = undefined; - } - - if (source) { - this.source.push(source); - } - }, - - replaceStack: function replaceStack(callback) { - var prefix = ['('], - stack = undefined, - createdStack = undefined, - usedLiteral = undefined; - - /* istanbul ignore next */ - if (!this.isInline()) { - throw new _exception2['default']('replaceStack on non-inline'); - } - - // We want to merge the inline statement into the replacement statement via ',' - var top = this.popStack(true); - - if (top instanceof Literal) { - // Literals do not need to be inlined - stack = [top.value]; - prefix = ['(', stack]; - usedLiteral = true; - } else { - // Get or create the current stack name for use by the inline - createdStack = true; - var _name = this.incrStack(); - - prefix = ['((', this.push(_name), ' = ', top, ')']; - stack = this.topStack(); - } - - var item = callback.call(this, stack); - - if (!usedLiteral) { - this.popStack(); - } - if (createdStack) { - this.stackSlot--; - } - this.push(prefix.concat(item, ')')); - }, - - incrStack: function incrStack() { - this.stackSlot++; - if (this.stackSlot > this.stackVars.length) { - this.stackVars.push('stack' + this.stackSlot); - } - return this.topStackName(); - }, - topStackName: function topStackName() { - return 'stack' + this.stackSlot; - }, - flushInline: function flushInline() { - var inlineStack = this.inlineStack; - this.inlineStack = []; - for (var i = 0, len = inlineStack.length; i < len; i++) { - var entry = inlineStack[i]; - /* istanbul ignore if */ - if (entry instanceof Literal) { - this.compileStack.push(entry); - } else { - var stack = this.incrStack(); - this.pushSource([stack, ' = ', entry, ';']); - this.compileStack.push(stack); - } - } - }, - isInline: function isInline() { - return this.inlineStack.length; - }, - - popStack: function popStack(wrapped) { - var inline = this.isInline(), - item = (inline ? this.inlineStack : this.compileStack).pop(); - - if (!wrapped && item instanceof Literal) { - return item.value; - } else { - if (!inline) { - /* istanbul ignore next */ - if (!this.stackSlot) { - throw new _exception2['default']('Invalid stack pop'); - } - this.stackSlot--; - } - return item; - } - }, - - topStack: function topStack() { - var stack = this.isInline() ? this.inlineStack : this.compileStack, - item = stack[stack.length - 1]; - - /* istanbul ignore if */ - if (item instanceof Literal) { - return item.value; - } else { - return item; - } - }, - - contextName: function contextName(context) { - if (this.useDepths && context) { - return 'depths[' + context + ']'; - } else { - return 'depth' + context; - } - }, - - quotedString: function quotedString(str) { - return this.source.quotedString(str); - }, - - objectLiteral: function objectLiteral(obj) { - return this.source.objectLiteral(obj); - }, - - aliasable: function aliasable(name) { - var ret = this.aliases[name]; - if (ret) { - ret.referenceCount++; - return ret; - } - - ret = this.aliases[name] = this.source.wrap(name); - ret.aliasable = true; - ret.referenceCount = 1; - - return ret; - }, - - setupHelper: function setupHelper(paramSize, name, blockHelper) { - var params = [], - paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper); - var foundHelper = this.nameLookup('helpers', name, 'helper'), - callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : {}'); - - return { - params: params, - paramsInit: paramsInit, - name: foundHelper, - callParams: [callContext].concat(params) - }; - }, - - setupParams: function setupParams(helper, paramSize, params) { - var options = {}, - contexts = [], - types = [], - ids = [], - objectArgs = !params, - param = undefined; - - if (objectArgs) { - params = []; - } - - options.name = this.quotedString(helper); - options.hash = this.popStack(); - - if (this.trackIds) { - options.hashIds = this.popStack(); - } - if (this.stringParams) { - options.hashTypes = this.popStack(); - options.hashContexts = this.popStack(); - } - - var inverse = this.popStack(), - program = this.popStack(); - - // Avoid setting fn and inverse if neither are set. This allows - // helpers to do a check for `if (options.fn)` - if (program || inverse) { - options.fn = program || 'container.noop'; - options.inverse = inverse || 'container.noop'; - } - - // The parameters go on to the stack in order (making sure that they are evaluated in order) - // so we need to pop them off the stack in reverse order - var i = paramSize; - while (i--) { - param = this.popStack(); - params[i] = param; - - if (this.trackIds) { - ids[i] = this.popStack(); - } - if (this.stringParams) { - types[i] = this.popStack(); - contexts[i] = this.popStack(); - } - } - - if (objectArgs) { - options.args = this.source.generateArray(params); - } - - if (this.trackIds) { - options.ids = this.source.generateArray(ids); - } - if (this.stringParams) { - options.types = this.source.generateArray(types); - options.contexts = this.source.generateArray(contexts); - } - - if (this.options.data) { - options.data = 'data'; - } - if (this.useBlockParams) { - options.blockParams = 'blockParams'; - } - return options; - }, - - setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) { - var options = this.setupParams(helper, paramSize, params); - options = this.objectLiteral(options); - if (useRegister) { - this.useRegister('options'); - params.push('options'); - return ['options=', options]; - } else if (params) { - params.push(options); - return ''; - } else { - return options; - } - } -}; - -(function () { - var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' '); - - var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {}; - - for (var i = 0, l = reservedWords.length; i < l; i++) { - compilerWords[reservedWords[i]] = true; - } -})(); - -JavaScriptCompiler.isValidJavaScriptVariableName = function (name) { - return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name); -}; - -function strictLookup(requireTerminal, compiler, parts, type) { - var stack = compiler.popStack(), - i = 0, - len = parts.length; - if (requireTerminal) { - len--; - } - - for (; i < len; i++) { - stack = compiler.nameLookup(stack, parts[i], type); - } - - if (requireTerminal) { - return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ')']; - } else { - return stack; - } -} - -exports['default'] = JavaScriptCompiler; -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztvQkFBb0QsU0FBUzs7eUJBQ3ZDLGNBQWM7Ozs7cUJBQ2QsVUFBVTs7dUJBQ1osWUFBWTs7OztBQUVoQyxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDdEIsTUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDcEI7O0FBRUQsU0FBUyxrQkFBa0IsR0FBRyxFQUFFOztBQUVoQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUc7OztBQUc3QixZQUFVLEVBQUUsb0JBQVMsTUFBTSxFQUFFLElBQUksY0FBYTtBQUM1QyxRQUFJLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzFELGFBQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxhQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ2pEO0dBQ0Y7QUFDRCxlQUFhLEVBQUUsdUJBQVMsSUFBSSxFQUFFO0FBQzVCLFdBQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztHQUN2RTs7QUFFRCxjQUFZLEVBQUUsd0JBQVc7QUFDdkIsUUFBTSxRQUFRLDBCQUFvQjtRQUM1QixRQUFRLEdBQUcsdUJBQWlCLFFBQVEsQ0FBQyxDQUFDO0FBQzVDLFdBQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7R0FDN0I7O0FBRUQsZ0JBQWMsRUFBRSx3QkFBUyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTs7QUFFbkQsUUFBSSxDQUFDLGVBQVEsTUFBTSxDQUFDLEVBQUU7QUFD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TUFDTCxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN2QixNQUFJLGVBQWUsRUFBRTtBQUNuQixPQUFHLEVBQUUsQ0FBQztHQUNQOztBQUVELFNBQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQixTQUFLLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0dBQ3BEOztBQUVELE1BQUksZUFBZSxFQUFFO0FBQ25CLFdBQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztHQUN6RyxNQUFNO0FBQ0wsV0FBTyxLQUFLLENBQUM7R0FDZDtDQUNGOztxQkFFYyxrQkFBa0IiLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENPTVBJTEVSX1JFVklTSU9OLCBSRVZJU0lPTl9DSEFOR0VTIH0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5pbXBvcnQge2lzQXJyYXl9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBDb2RlR2VuIGZyb20gJy4vY29kZS1nZW4nO1xuXG5mdW5jdGlvbiBMaXRlcmFsKHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gSmF2YVNjcmlwdENvbXBpbGVyKCkge31cblxuSmF2YVNjcmlwdENvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgLy8gUFVCTElDIEFQSTogWW91IGNhbiBvdmVycmlkZSB0aGVzZSBtZXRob2RzIGluIGEgc3ViY2xhc3MgdG8gcHJvdmlkZVxuICAvLyBhbHRlcm5hdGl2ZSBjb21waWxlZCBmb3JtcyBmb3IgbmFtZSBsb29rdXAgYW5kIGJ1ZmZlcmluZyBzZW1hbnRpY3NcbiAgbmFtZUxvb2t1cDogZnVuY3Rpb24ocGFyZW50LCBuYW1lLyogLCB0eXBlKi8pIHtcbiAgICBpZiAoSmF2YVNjcmlwdENvbXBpbGVyLmlzVmFsaWRKYXZhU2NyaXB0VmFyaWFibGVOYW1lKG5hbWUpKSB7XG4gICAgICByZXR1cm4gW3BhcmVudCwgJy4nLCBuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtwYXJlbnQsICdbJywgSlNPTi5zdHJpbmdpZnkobmFtZSksICddJ107XG4gICAgfVxuICB9LFxuICBkZXB0aGVkTG9va3VwOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIFt0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxvb2t1cCcpLCAnKGRlcHRocywgXCInLCBuYW1lLCAnXCIpJ107XG4gIH0sXG5cbiAgY29tcGlsZXJJbmZvOiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCByZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OLFxuICAgICAgICAgIHZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tyZXZpc2lvbl07XG4gICAgcmV0dXJuIFtyZXZpc2lvbiwgdmVyc2lvbnNdO1xuICB9LFxuXG4gIGFwcGVuZFRvQnVmZmVyOiBmdW5jdGlvbihzb3VyY2UsIGxvY2F0aW9uLCBleHBsaWNpdCkge1xuICAgIC8vIEZvcmNlIGEgc291cmNlIGFzIHRoaXMgc2ltcGxpZmllcyB0aGUgbWVyZ2UgbG9naWMuXG4gICAgaWYgKCFpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHNvdXJjZSA9IFtzb3VyY2VdO1xuICAgIH1cbiAgICBzb3VyY2UgPSB0aGlzLnNvdXJjZS53cmFwKHNvdXJjZSwgbG9jYXRpb24pO1xuXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUpIHtcbiAgICAgIHJldHVybiBbJ3JldHVybiAnLCBzb3VyY2UsICc7J107XG4gICAgfSBlbHNlIGlmIChleHBsaWNpdCkge1xuICAgICAgLy8gVGhpcyBpcyBhIGNhc2Ugd2hlcmUgdGhlIGJ1ZmZlciBvcGVyYXRpb24gb2NjdXJzIGFzIGEgY2hpbGQgb2YgYW5vdGhlclxuICAgICAgLy8gY29uc3RydWN0LCBnZW5lcmFsbHkgYnJhY2VzLiBXZSBoYXZlIHRvIGV4cGxpY2l0bHkgb3V0cHV0IHRoZXNlIGJ1ZmZlclxuICAgICAgLy8gb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhhdCB0aGUgZW1pdHRlZCBjb2RlIGdvZXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uXG4gICAgICByZXR1cm4gWydidWZmZXIgKz0gJywgc291cmNlLCAnOyddO1xuICAgIH0gZWxzZSB7XG4gICAgICBzb3VyY2UuYXBwZW5kVG9CdWZmZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG4gIH0sXG5cbiAgaW5pdGlhbGl6ZUJ1ZmZlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVvdGVkU3RyaW5nKCcnKTtcbiAgfSxcbiAgLy8gRU5EIFBVQkxJQyBBUElcblxuICBjb21waWxlOiBmdW5jdGlvbihlbnZpcm9ubWVudCwgb3B0aW9ucywgY29udGV4dCwgYXNPYmplY3QpIHtcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN0cmluZ1BhcmFtcyA9IHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXM7XG4gICAgdGhpcy50cmFja0lkcyA9IHRoaXMub3B0aW9ucy50cmFja0lkcztcbiAgICB0aGlzLnByZWNvbXBpbGUgPSAhYXNPYmplY3Q7XG5cbiAgICB0aGlzLm5hbWUgPSB0aGlzLmVudmlyb25tZW50Lm5hbWU7XG4gICAgdGhpcy5pc0NoaWxkID0gISFjb250ZXh0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQgfHwge1xuICAgICAgZGVjb3JhdG9yczogW10sXG4gICAgICBwcm9ncmFtczogW10sXG4gICAgICBlbnZpcm9ubWVudHM6IFtdXG4gICAgfTtcblxuICAgIHRoaXMucHJlYW1ibGUoKTtcblxuICAgIHRoaXMuc3RhY2tTbG90ID0gMDtcbiAgICB0aGlzLnN0YWNrVmFycyA9IFtdO1xuICAgIHRoaXMuYWxpYXNlcyA9IHt9O1xuICAgIHRoaXMucmVnaXN0ZXJzID0geyBsaXN0OiBbXSB9O1xuICAgIHRoaXMuaGFzaGVzID0gW107XG4gICAgdGhpcy5jb21waWxlU3RhY2sgPSBbXTtcbiAgICB0aGlzLmlubGluZVN0YWNrID0gW107XG4gICAgdGhpcy5ibG9ja1BhcmFtcyA9IFtdO1xuXG4gICAgdGhpcy5jb21waWxlQ2hpbGRyZW4oZW52aXJvbm1lbnQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBlbnZpcm9ubWVudC51c2VEZXB0aHMgfHwgZW52aXJvbm1lbnQudXNlRGVjb3JhdG9ycyB8fCB0aGlzLm9wdGlvbnMuY29tcGF0O1xuICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGVudmlyb25tZW50LnVzZUJsb2NrUGFyYW1zO1xuXG4gICAgbGV0IG9wY29kZXMgPSBlbnZpcm9ubWVudC5vcGNvZGVzLFxuICAgICAgICBvcGNvZGUsXG4gICAgICAgIGZpcnN0TG9jLFxuICAgICAgICBpLFxuICAgICAgICBsO1xuXG4gICAgZm9yIChpID0gMCwgbCA9IG9wY29kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBvcGNvZGUgPSBvcGNvZGVzW2ldO1xuXG4gICAgICB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb24gPSBvcGNvZGUubG9jO1xuICAgICAgZmlyc3RMb2MgPSBmaXJzdExvYyB8fCBvcGNvZGUubG9jO1xuICAgICAgdGhpc1tvcGNvZGUub3Bjb2RlXS5hcHBseSh0aGlzLCBvcGNvZGUuYXJncyk7XG4gICAgfVxuXG4gICAgLy8gRmx1c2ggYW55IHRyYWlsaW5nIGNvbnRlbnQgdGhhdCBtaWdodCBiZSBwZW5kaW5nLlxuICAgIHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiA9IGZpcnN0TG9jO1xuICAgIHRoaXMucHVzaFNvdXJjZSgnJyk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLnN0YWNrU2xvdCB8fCB0aGlzLmlubGluZVN0YWNrLmxlbmd0aCB8fCB0aGlzLmNvbXBpbGVTdGFjay5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0NvbXBpbGUgY29tcGxldGVkIHdpdGggY29udGVudCBsZWZ0IG9uIHN0YWNrJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRlY29yYXRvcnMuaXNFbXB0eSgpKSB7XG4gICAgICB0aGlzLnVzZURlY29yYXRvcnMgPSB0cnVlO1xuXG4gICAgICB0aGlzLmRlY29yYXRvcnMucHJlcGVuZCgndmFyIGRlY29yYXRvcnMgPSBjb250YWluZXIuZGVjb3JhdG9ycztcXG4nKTtcbiAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCdyZXR1cm4gZm47Jyk7XG5cbiAgICAgIGlmIChhc09iamVjdCkge1xuICAgICAgICB0aGlzLmRlY29yYXRvcnMgPSBGdW5jdGlvbi5hcHBseSh0aGlzLCBbJ2ZuJywgJ3Byb3BzJywgJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnZGF0YScsICdibG9ja1BhcmFtcycsICdkZXB0aHMnLCB0aGlzLmRlY29yYXRvcnMubWVyZ2UoKV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoJ2Z1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBkZXB0aDAsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcXG4nKTtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzLnB1c2goJ31cXG4nKTtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzID0gdGhpcy5kZWNvcmF0b3JzLm1lcmdlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9ycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsZXQgZm4gPSB0aGlzLmNyZWF0ZUZ1bmN0aW9uQ29udGV4dChhc09iamVjdCk7XG4gICAgaWYgKCF0aGlzLmlzQ2hpbGQpIHtcbiAgICAgIGxldCByZXQgPSB7XG4gICAgICAgIGNvbXBpbGVyOiB0aGlzLmNvbXBpbGVySW5mbygpLFxuICAgICAgICBtYWluOiBmblxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuZGVjb3JhdG9ycykge1xuICAgICAgICByZXQubWFpbl9kID0gdGhpcy5kZWNvcmF0b3JzOyAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgICAgIHJldC51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHtwcm9ncmFtcywgZGVjb3JhdG9yc30gPSB0aGlzLmNvbnRleHQ7XG4gICAgICBmb3IgKGkgPSAwLCBsID0gcHJvZ3JhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChwcm9ncmFtc1tpXSkge1xuICAgICAgICAgIHJldFtpXSA9IHByb2dyYW1zW2ldO1xuICAgICAgICAgIGlmIChkZWNvcmF0b3JzW2ldKSB7XG4gICAgICAgICAgICByZXRbaSArICdfZCddID0gZGVjb3JhdG9yc1tpXTtcbiAgICAgICAgICAgIHJldC51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQudXNlUGFydGlhbCkge1xuICAgICAgICByZXQudXNlUGFydGlhbCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRhdGEpIHtcbiAgICAgICAgcmV0LnVzZURhdGEgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudXNlRGVwdGhzKSB7XG4gICAgICAgIHJldC51c2VEZXB0aHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudXNlQmxvY2tQYXJhbXMpIHtcbiAgICAgICAgcmV0LnVzZUJsb2NrUGFyYW1zID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0KSB7XG4gICAgICAgIHJldC5jb21wYXQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFzT2JqZWN0KSB7XG4gICAgICAgIHJldC5jb21waWxlciA9IEpTT04uc3RyaW5naWZ5KHJldC5jb21waWxlcik7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uID0ge3N0YXJ0OiB7bGluZTogMSwgY29sdW1uOiAwfX07XG4gICAgICAgIHJldCA9IHRoaXMub2JqZWN0TGl0ZXJhbChyZXQpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNyY05hbWUpIHtcbiAgICAgICAgICByZXQgPSByZXQudG9TdHJpbmdXaXRoU291cmNlTWFwKHtmaWxlOiBvcHRpb25zLmRlc3ROYW1lfSk7XG4gICAgICAgICAgcmV0Lm1hcCA9IHJldC5tYXAgJiYgcmV0Lm1hcC50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldCA9IHJldC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQuY29tcGlsZXJPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm47XG4gICAgfVxuICB9LFxuXG4gIHByZWFtYmxlOiBmdW5jdGlvbigpIHtcbiAgICAvLyB0cmFjayB0aGUgbGFzdCBjb250ZXh0IHB1c2hlZCBpbnRvIHBsYWNlIHRvIGFsbG93IHNraXBwaW5nIHRoZVxuICAgIC8vIGdldENvbnRleHQgb3Bjb2RlIHdoZW4gaXQgd291bGQgYmUgYSBub29wXG4gICAgdGhpcy5sYXN0Q29udGV4dCA9IDA7XG4gICAgdGhpcy5zb3VyY2UgPSBuZXcgQ29kZUdlbih0aGlzLm9wdGlvbnMuc3JjTmFtZSk7XG4gICAgdGhpcy5kZWNvcmF0b3JzID0gbmV3IENvZGVHZW4odGhpcy5vcHRpb25zLnNyY05hbWUpO1xuICB9LFxuXG4gIGNyZWF0ZUZ1bmN0aW9uQ29udGV4dDogZnVuY3Rpb24oYXNPYmplY3QpIHtcbiAgICBsZXQgdmFyRGVjbGFyYXRpb25zID0gJyc7XG5cbiAgICBsZXQgbG9jYWxzID0gdGhpcy5zdGFja1ZhcnMuY29uY2F0KHRoaXMucmVnaXN0ZXJzLmxpc3QpO1xuICAgIGlmIChsb2NhbHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsICcgKyBsb2NhbHMuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBtaW5pbWl6ZXIgYWxpYXMgbWFwcGluZ3NcbiAgICAvL1xuICAgIC8vIFdoZW4gdXNpbmcgdHJ1ZSBTb3VyY2VOb2RlcywgdGhpcyB3aWxsIHVwZGF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgZ2l2ZW4gYWxpYXNcbiAgICAvLyBhcyB0aGUgc291cmNlIG5vZGVzIGFyZSByZXVzZWQgaW4gc2l0dS4gRm9yIHRoZSBub24tc291cmNlIG5vZGUgY29tcGlsYXRpb24gbW9kZSxcbiAgICAvLyBhbGlhc2VzIHdpbGwgbm90IGJlIHVzZWQsIGJ1dCB0aGlzIGNhc2UgaXMgYWxyZWFkeSBiZWluZyBydW4gb24gdGhlIGNsaWVudCBhbmRcbiAgICAvLyB3ZSBhcmVuJ3QgY29uY2VybiBhYm91dCBtaW5pbWl6aW5nIHRoZSB0ZW1wbGF0ZSBzaXplLlxuICAgIGxldCBhbGlhc0NvdW50ID0gMDtcbiAgICBmb3IgKGxldCBhbGlhcyBpbiB0aGlzLmFsaWFzZXMpIHsgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBndWFyZC1mb3ItaW5cbiAgICAgIGxldCBub2RlID0gdGhpcy5hbGlhc2VzW2FsaWFzXTtcblxuICAgICAgaWYgKHRoaXMuYWxpYXNlcy5oYXNPd25Qcm9wZXJ0eShhbGlhcykgJiYgbm9kZS5jaGlsZHJlbiAmJiBub2RlLnJlZmVyZW5jZUNvdW50ID4gMSkge1xuICAgICAgICB2YXJEZWNsYXJhdGlvbnMgKz0gJywgYWxpYXMnICsgKCsrYWxpYXNDb3VudCkgKyAnPScgKyBhbGlhcztcbiAgICAgICAgbm9kZS5jaGlsZHJlblswXSA9ICdhbGlhcycgKyBhbGlhc0NvdW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBbJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnaGVscGVycycsICdwYXJ0aWFscycsICdkYXRhJ107XG5cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2RlcHRocycpO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBvdXRwdXQgdG8gbWVyZ2UgY29udGVudCB3aGVuIHBvc3NpYmxlXG4gICAgbGV0IHNvdXJjZSA9IHRoaXMubWVyZ2VTb3VyY2UodmFyRGVjbGFyYXRpb25zKTtcblxuICAgIGlmIChhc09iamVjdCkge1xuICAgICAgcGFyYW1zLnB1c2goc291cmNlKTtcblxuICAgICAgcmV0dXJuIEZ1bmN0aW9uLmFwcGx5KHRoaXMsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZS53cmFwKFsnZnVuY3Rpb24oJywgcGFyYW1zLmpvaW4oJywnKSwgJykge1xcbiAgJywgc291cmNlLCAnfSddKTtcbiAgICB9XG4gIH0sXG4gIG1lcmdlU291cmNlOiBmdW5jdGlvbih2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICBsZXQgaXNTaW1wbGUgPSB0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlLFxuICAgICAgICBhcHBlbmRPbmx5ID0gIXRoaXMuZm9yY2VCdWZmZXIsXG4gICAgICAgIGFwcGVuZEZpcnN0LFxuXG4gICAgICAgIHNvdXJjZVNlZW4sXG4gICAgICAgIGJ1ZmZlclN0YXJ0LFxuICAgICAgICBidWZmZXJFbmQ7XG4gICAgdGhpcy5zb3VyY2UuZWFjaCgobGluZSkgPT4ge1xuICAgICAgaWYgKGxpbmUuYXBwZW5kVG9CdWZmZXIpIHtcbiAgICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgICAgbGluZS5wcmVwZW5kKCcgICsgJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmZmVyU3RhcnQgPSBsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGJ1ZmZlckVuZCA9IGxpbmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgICBpZiAoIXNvdXJjZVNlZW4pIHtcbiAgICAgICAgICAgIGFwcGVuZEZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgnYnVmZmVyICs9ICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICAgICAgYnVmZmVyU3RhcnQgPSBidWZmZXJFbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VTZWVuID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFpc1NpbXBsZSkge1xuICAgICAgICAgIGFwcGVuZE9ubHkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG5cbiAgICBpZiAoYXBwZW5kT25seSkge1xuICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ3JldHVybiAnKTtcbiAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpO1xuICAgICAgfSBlbHNlIGlmICghc291cmNlU2Vlbikge1xuICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKCdyZXR1cm4gXCJcIjsnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsIGJ1ZmZlciA9ICcgKyAoYXBwZW5kRmlyc3QgPyAnJyA6IHRoaXMuaW5pdGlhbGl6ZUJ1ZmZlcigpKTtcblxuICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ3JldHVybiBidWZmZXIgKyAnKTtcbiAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucHVzaCgncmV0dXJuIGJ1ZmZlcjsnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFyRGVjbGFyYXRpb25zKSB7XG4gICAgICB0aGlzLnNvdXJjZS5wcmVwZW5kKCd2YXIgJyArIHZhckRlY2xhcmF0aW9ucy5zdWJzdHJpbmcoMikgKyAoYXBwZW5kRmlyc3QgPyAnJyA6ICc7XFxuJykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNvdXJjZS5tZXJnZSgpO1xuICB9LFxuXG4gIC8vIFtibG9ja1ZhbHVlXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCB2YWx1ZVxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJldHVybiB2YWx1ZSBvZiBibG9ja0hlbHBlck1pc3NpbmdcbiAgLy9cbiAgLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBvcGNvZGUgaXMgdG8gdGFrZSBhIGJsb2NrIG9mIHRoZSBmb3JtXG4gIC8vIGB7eyN0aGlzLmZvb319Li4ue3svdGhpcy5mb299fWAsIHJlc29sdmUgdGhlIHZhbHVlIG9mIGBmb29gLCBhbmRcbiAgLy8gcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgd2l0aCB0aGUgcmVzdWx0IG9mIHByb3Blcmx5XG4gIC8vIGludm9raW5nIGJsb2NrSGVscGVyTWlzc2luZy5cbiAgYmxvY2tWYWx1ZTogZnVuY3Rpb24obmFtZSkge1xuICAgIGxldCBibG9ja0hlbHBlck1pc3NpbmcgPSB0aGlzLmFsaWFzYWJsZSgnaGVscGVycy5ibG9ja0hlbHBlck1pc3NpbmcnKSxcbiAgICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldO1xuICAgIHRoaXMuc2V0dXBIZWxwZXJBcmdzKG5hbWUsIDAsIHBhcmFtcyk7XG5cbiAgICBsZXQgYmxvY2tOYW1lID0gdGhpcy5wb3BTdGFjaygpO1xuICAgIHBhcmFtcy5zcGxpY2UoMSwgMCwgYmxvY2tOYW1lKTtcblxuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoYmxvY2tIZWxwZXJNaXNzaW5nLCAnY2FsbCcsIHBhcmFtcykpO1xuICB9LFxuXG4gIC8vIFthbWJpZ3VvdXNCbG9ja1ZhbHVlXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCB2YWx1ZVxuICAvLyBDb21waWxlciB2YWx1ZSwgYmVmb3JlOiBsYXN0SGVscGVyPXZhbHVlIG9mIGxhc3QgZm91bmQgaGVscGVyLCBpZiBhbnlcbiAgLy8gT24gc3RhY2ssIGFmdGVyLCBpZiBubyBsYXN0SGVscGVyOiBzYW1lIGFzIFtibG9ja1ZhbHVlXVxuICAvLyBPbiBzdGFjaywgYWZ0ZXIsIGlmIGxhc3RIZWxwZXI6IHZhbHVlXG4gIGFtYmlndW91c0Jsb2NrVmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgIC8vIFdlJ3JlIGJlaW5nIGEgYml0IGNoZWVreSBhbmQgcmV1c2luZyB0aGUgb3B0aW9ucyB2YWx1ZSBmcm9tIHRoZSBwcmlvciBleGVjXG4gICAgbGV0IGJsb2NrSGVscGVyTWlzc2luZyA9IHRoaXMuYWxpYXNhYmxlKCdoZWxwZXJzLmJsb2NrSGVscGVyTWlzc2luZycpLFxuICAgICAgICBwYXJhbXMgPSBbdGhpcy5jb250ZXh0TmFtZSgwKV07XG4gICAgdGhpcy5zZXR1cEhlbHBlckFyZ3MoJycsIDAsIHBhcmFtcywgdHJ1ZSk7XG5cbiAgICB0aGlzLmZsdXNoSW5saW5lKCk7XG5cbiAgICBsZXQgY3VycmVudCA9IHRoaXMudG9wU3RhY2soKTtcbiAgICBwYXJhbXMuc3BsaWNlKDEsIDAsIGN1cnJlbnQpO1xuXG4gICAgdGhpcy5wdXNoU291cmNlKFtcbiAgICAgICAgJ2lmICghJywgdGhpcy5sYXN0SGVscGVyLCAnKSB7ICcsXG4gICAgICAgICAgY3VycmVudCwgJyA9ICcsIHRoaXMuc291cmNlLmZ1bmN0aW9uQ2FsbChibG9ja0hlbHBlck1pc3NpbmcsICdjYWxsJywgcGFyYW1zKSxcbiAgICAgICAgJ30nXSk7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZENvbnRlbnRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBBcHBlbmRzIHRoZSBzdHJpbmcgdmFsdWUgb2YgYGNvbnRlbnRgIHRvIHRoZSBjdXJyZW50IGJ1ZmZlclxuICBhcHBlbmRDb250ZW50OiBmdW5jdGlvbihjb250ZW50KSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnBlbmRpbmdDb250ZW50ICsgY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb24gPSB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IGNvbnRlbnQ7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8gYSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLlxuICAvL1xuICAvLyBJZiBgdmFsdWVgIGlzIHRydXRoeSwgb3IgMCwgaXQgaXMgY29lcmNlZCBpbnRvIGEgc3RyaW5nIGFuZCBhcHBlbmRlZFxuICAvLyBPdGhlcndpc2UsIHRoZSBlbXB0eSBzdHJpbmcgaXMgYXBwZW5kZWRcbiAgYXBwZW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0lubGluZSgpKSB7XG4gICAgICB0aGlzLnJlcGxhY2VTdGFjaygoY3VycmVudCkgPT4gWycgIT0gbnVsbCA/ICcsIGN1cnJlbnQsICcgOiBcIlwiJ10pO1xuXG4gICAgICB0aGlzLnB1c2hTb3VyY2UodGhpcy5hcHBlbmRUb0J1ZmZlcih0aGlzLnBvcFN0YWNrKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGxvY2FsID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgdGhpcy5wdXNoU291cmNlKFsnaWYgKCcsIGxvY2FsLCAnICE9IG51bGwpIHsgJywgdGhpcy5hcHBlbmRUb0J1ZmZlcihsb2NhbCwgdW5kZWZpbmVkLCB0cnVlKSwgJyB9J10pO1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUpIHtcbiAgICAgICAgdGhpcy5wdXNoU291cmNlKFsnZWxzZSB7ICcsIHRoaXMuYXBwZW5kVG9CdWZmZXIoXCInJ1wiLCB1bmRlZmluZWQsIHRydWUpLCAnIH0nXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIFthcHBlbmRFc2NhcGVkXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIEVzY2FwZSBgdmFsdWVgIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGJ1ZmZlclxuICBhcHBlbmRFc2NhcGVkOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1c2hTb3VyY2UodGhpcy5hcHBlbmRUb0J1ZmZlcihcbiAgICAgICAgW3RoaXMuYWxpYXNhYmxlKCdjb250YWluZXIuZXNjYXBlRXhwcmVzc2lvbicpLCAnKCcsIHRoaXMucG9wU3RhY2soKSwgJyknXSkpO1xuICB9LFxuXG4gIC8vIFtnZXRDb250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi5cbiAgLy8gQ29tcGlsZXIgdmFsdWUsIGFmdGVyOiBsYXN0Q29udGV4dD1kZXB0aFxuICAvL1xuICAvLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSBgbGFzdENvbnRleHRgIGNvbXBpbGVyIHZhbHVlIHRvIHRoZSBkZXB0aFxuICBnZXRDb250ZXh0OiBmdW5jdGlvbihkZXB0aCkge1xuICAgIHRoaXMubGFzdENvbnRleHQgPSBkZXB0aDtcbiAgfSxcblxuICAvLyBbcHVzaENvbnRleHRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGN1cnJlbnRDb250ZXh0LCAuLi5cbiAgLy9cbiAgLy8gUHVzaGVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBjb250ZXh0IG9udG8gdGhlIHN0YWNrLlxuICBwdXNoQ29udGV4dDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHRoaXMuY29udGV4dE5hbWUodGhpcy5sYXN0Q29udGV4dCkpO1xuICB9LFxuXG4gIC8vIFtsb29rdXBPbkNvbnRleHRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGN1cnJlbnRDb250ZXh0W25hbWVdLCAuLi5cbiAgLy9cbiAgLy8gTG9va3MgdXAgdGhlIHZhbHVlIG9mIGBuYW1lYCBvbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwdXNoZXNcbiAgLy8gaXQgb250byB0aGUgc3RhY2suXG4gIGxvb2t1cE9uQ29udGV4dDogZnVuY3Rpb24ocGFydHMsIGZhbHN5LCBzdHJpY3QsIHNjb3BlZCkge1xuICAgIGxldCBpID0gMDtcblxuICAgIGlmICghc2NvcGVkICYmIHRoaXMub3B0aW9ucy5jb21wYXQgJiYgIXRoaXMubGFzdENvbnRleHQpIHtcbiAgICAgIC8vIFRoZSBkZXB0aGVkIHF1ZXJ5IGlzIGV4cGVjdGVkIHRvIGhhbmRsZSB0aGUgdW5kZWZpbmVkIGxvZ2ljIGZvciB0aGUgcm9vdCBsZXZlbCB0aGF0XG4gICAgICAvLyBpcyBpbXBsZW1lbnRlZCBiZWxvdywgc28gd2UgZXZhbHVhdGUgdGhhdCBkaXJlY3RseSBpbiBjb21wYXQgbW9kZVxuICAgICAgdGhpcy5wdXNoKHRoaXMuZGVwdGhlZExvb2t1cChwYXJ0c1tpKytdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaENvbnRleHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVQYXRoKCdjb250ZXh0JywgcGFydHMsIGksIGZhbHN5LCBzdHJpY3QpO1xuICB9LFxuXG4gIC8vIFtsb29rdXBCbG9ja1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBibG9ja1BhcmFtW25hbWVdLCAuLi5cbiAgLy9cbiAgLy8gTG9va3MgdXAgdGhlIHZhbHVlIG9mIGBwYXJ0c2Agb24gdGhlIGdpdmVuIGJsb2NrIHBhcmFtIGFuZCBwdXNoZXNcbiAgLy8gaXQgb250byB0aGUgc3RhY2suXG4gIGxvb2t1cEJsb2NrUGFyYW06IGZ1bmN0aW9uKGJsb2NrUGFyYW1JZCwgcGFydHMpIHtcbiAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdHJ1ZTtcblxuICAgIHRoaXMucHVzaChbJ2Jsb2NrUGFyYW1zWycsIGJsb2NrUGFyYW1JZFswXSwgJ11bJywgYmxvY2tQYXJhbUlkWzFdLCAnXSddKTtcbiAgICB0aGlzLnJlc29sdmVQYXRoKCdjb250ZXh0JywgcGFydHMsIDEpO1xuICB9LFxuXG4gIC8vIFtsb29rdXBEYXRhXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBkYXRhLCAuLi5cbiAgLy9cbiAgLy8gUHVzaCB0aGUgZGF0YSBsb29rdXAgb3BlcmF0b3JcbiAgbG9va3VwRGF0YTogZnVuY3Rpb24oZGVwdGgsIHBhcnRzLCBzdHJpY3QpIHtcbiAgICBpZiAoIWRlcHRoKSB7XG4gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ2RhdGEnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdjb250YWluZXIuZGF0YShkYXRhLCAnICsgZGVwdGggKyAnKScpO1xuICAgIH1cblxuICAgIHRoaXMucmVzb2x2ZVBhdGgoJ2RhdGEnLCBwYXJ0cywgMCwgdHJ1ZSwgc3RyaWN0KTtcbiAgfSxcblxuICByZXNvbHZlUGF0aDogZnVuY3Rpb24odHlwZSwgcGFydHMsIGksIGZhbHN5LCBzdHJpY3QpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnN0cmljdCB8fCB0aGlzLm9wdGlvbnMuYXNzdW1lT2JqZWN0cykge1xuICAgICAgdGhpcy5wdXNoKHN0cmljdExvb2t1cCh0aGlzLm9wdGlvbnMuc3RyaWN0ICYmIHN0cmljdCwgdGhpcywgcGFydHMsIHR5cGUpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbGVuID0gcGFydHMubGVuZ3RoO1xuICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuICAgICAgdGhpcy5yZXBsYWNlU3RhY2soKGN1cnJlbnQpID0+IHtcbiAgICAgICAgbGV0IGxvb2t1cCA9IHRoaXMubmFtZUxvb2t1cChjdXJyZW50LCBwYXJ0c1tpXSwgdHlwZSk7XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgemVybyBhbmQgZmFsc2UgYXJlIGhhbmRsZWQgcHJvcGVybHkgaWYgdGhlIGNvbnRleHQgKGZhbHN5IGZsYWcpXG4gICAgICAgIC8vIG5lZWRzIHRvIGhhdmUgdGhlIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZXNlIHZhbHVlcy5cbiAgICAgICAgaWYgKCFmYWxzeSkge1xuICAgICAgICAgIHJldHVybiBbJyAhPSBudWxsID8gJywgbG9va3VwLCAnIDogJywgY3VycmVudF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIGNhbiB1c2UgZ2VuZXJpYyBmYWxzeSBoYW5kbGluZ1xuICAgICAgICAgIHJldHVybiBbJyAmJiAnLCBsb29rdXBdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG4gICAgfVxuICB9LFxuXG4gIC8vIFtyZXNvbHZlUG9zc2libGVMYW1iZGFdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IHZhbHVlLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXNvbHZlZCB2YWx1ZSwgLi4uXG4gIC8vXG4gIC8vIElmIHRoZSBgdmFsdWVgIGlzIGEgbGFtYmRhLCByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayBieVxuICAvLyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBsYW1iZGFcbiAgcmVzb2x2ZVBvc3NpYmxlTGFtYmRhOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1c2goW3RoaXMuYWxpYXNhYmxlKCdjb250YWluZXIubGFtYmRhJyksICcoJywgdGhpcy5wb3BTdGFjaygpLCAnLCAnLCB0aGlzLmNvbnRleHROYW1lKDApLCAnKSddKTtcbiAgfSxcblxuICAvLyBbcHVzaFN0cmluZ1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBzdHJpbmcsIGN1cnJlbnRDb250ZXh0LCAuLi5cbiAgLy9cbiAgLy8gVGhpcyBvcGNvZGUgaXMgZGVzaWduZWQgZm9yIHVzZSBpbiBzdHJpbmcgbW9kZSwgd2hpY2hcbiAgLy8gcHJvdmlkZXMgdGhlIHN0cmluZyB2YWx1ZSBvZiBhIHBhcmFtZXRlciBhbG9uZyB3aXRoIGl0c1xuICAvLyBkZXB0aCByYXRoZXIgdGhhbiByZXNvbHZpbmcgaXQgaW1tZWRpYXRlbHkuXG4gIHB1c2hTdHJpbmdQYXJhbTogZnVuY3Rpb24oc3RyaW5nLCB0eXBlKSB7XG4gICAgdGhpcy5wdXNoQ29udGV4dCgpO1xuICAgIHRoaXMucHVzaFN0cmluZyh0eXBlKTtcblxuICAgIC8vIElmIGl0J3MgYSBzdWJleHByZXNzaW9uLCB0aGUgc3RyaW5nIHJlc3VsdFxuICAgIC8vIHdpbGwgYmUgcHVzaGVkIGFmdGVyIHRoaXMgb3Bjb2RlLlxuICAgIGlmICh0eXBlICE9PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnB1c2hTdHJpbmcoc3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChzdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBlbXB0eUhhc2g6IGZ1bmN0aW9uKG9taXRFbXB0eSkge1xuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hJZHNcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hDb250ZXh0c1xuICAgICAgdGhpcy5wdXNoKCd7fScpOyAvLyBoYXNoVHlwZXNcbiAgICB9XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG9taXRFbXB0eSA/ICd1bmRlZmluZWQnIDogJ3t9Jyk7XG4gIH0sXG4gIHB1c2hIYXNoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2hlcy5wdXNoKHRoaXMuaGFzaCk7XG4gICAgfVxuICAgIHRoaXMuaGFzaCA9IHt2YWx1ZXM6IFtdLCB0eXBlczogW10sIGNvbnRleHRzOiBbXSwgaWRzOiBbXX07XG4gIH0sXG4gIHBvcEhhc2g6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBoYXNoID0gdGhpcy5oYXNoO1xuICAgIHRoaXMuaGFzaCA9IHRoaXMuaGFzaGVzLnBvcCgpO1xuXG4gICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC5pZHMpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2godGhpcy5vYmplY3RMaXRlcmFsKGhhc2guY29udGV4dHMpKTtcbiAgICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC50eXBlcykpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC52YWx1ZXMpKTtcbiAgfSxcblxuICAvLyBbcHVzaFN0cmluZ11cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcXVvdGVkU3RyaW5nKHN0cmluZyksIC4uLlxuICAvL1xuICAvLyBQdXNoIGEgcXVvdGVkIHZlcnNpb24gb2YgYHN0cmluZ2Agb250byB0aGUgc3RhY2tcbiAgcHVzaFN0cmluZzogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHRoaXMucXVvdGVkU3RyaW5nKHN0cmluZykpO1xuICB9LFxuXG4gIC8vIFtwdXNoTGl0ZXJhbF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogdmFsdWUsIC4uLlxuICAvL1xuICAvLyBQdXNoZXMgYSB2YWx1ZSBvbnRvIHRoZSBzdGFjay4gVGhpcyBvcGVyYXRpb24gcHJldmVudHNcbiAgLy8gdGhlIGNvbXBpbGVyIGZyb20gY3JlYXRpbmcgYSB0ZW1wb3JhcnkgdmFyaWFibGUgdG8gaG9sZFxuICAvLyBpdC5cbiAgcHVzaExpdGVyYWw6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHZhbHVlKTtcbiAgfSxcblxuICAvLyBbcHVzaFByb2dyYW1dXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHByb2dyYW0oZ3VpZCksIC4uLlxuICAvL1xuICAvLyBQdXNoIGEgcHJvZ3JhbSBleHByZXNzaW9uIG9udG8gdGhlIHN0YWNrLiBUaGlzIHRha2VzXG4gIC8vIGEgY29tcGlsZS10aW1lIGd1aWQgYW5kIGNvbnZlcnRzIGl0IGludG8gYSBydW50aW1lLWFjY2Vzc2libGVcbiAgLy8gZXhwcmVzc2lvbi5cbiAgcHVzaFByb2dyYW06IGZ1bmN0aW9uKGd1aWQpIHtcbiAgICBpZiAoZ3VpZCAhPSBudWxsKSB7XG4gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5wcm9ncmFtRXhwcmVzc2lvbihndWlkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChudWxsKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gW3JlZ2lzdGVyRGVjb3JhdG9yXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgZGVjb3JhdG9yJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgZGVjb3JhdG9yLFxuICAvLyBhbmQgaW5zZXJ0cyB0aGUgZGVjb3JhdG9yIGludG8gdGhlIGRlY29yYXRvcnMgbGlzdC5cbiAgcmVnaXN0ZXJEZWNvcmF0b3IocGFyYW1TaXplLCBuYW1lKSB7XG4gICAgbGV0IGZvdW5kRGVjb3JhdG9yID0gdGhpcy5uYW1lTG9va3VwKCdkZWNvcmF0b3JzJywgbmFtZSwgJ2RlY29yYXRvcicpLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplKTtcblxuICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKFtcbiAgICAgICdmbiA9ICcsXG4gICAgICB0aGlzLmRlY29yYXRvcnMuZnVuY3Rpb25DYWxsKGZvdW5kRGVjb3JhdG9yLCAnJywgWydmbicsICdwcm9wcycsICdjb250YWluZXInLCBvcHRpb25zXSksXG4gICAgICAnIHx8IGZuOydcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlSGVscGVyXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvblxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgaGVscGVyJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgaGVscGVyLFxuICAvLyBhbmQgcHVzaGVzIHRoZSBoZWxwZXIncyByZXR1cm4gdmFsdWUgb250byB0aGUgc3RhY2suXG4gIC8vXG4gIC8vIElmIHRoZSBoZWxwZXIgaXMgbm90IGZvdW5kLCBgaGVscGVyTWlzc2luZ2AgaXMgY2FsbGVkLlxuICBpbnZva2VIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgaXNTaW1wbGUpIHtcbiAgICBsZXQgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICBoZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKHBhcmFtU2l6ZSwgbmFtZSksXG4gICAgICAgIHNpbXBsZSA9IGlzU2ltcGxlID8gW2hlbHBlci5uYW1lLCAnIHx8ICddIDogJyc7XG5cbiAgICBsZXQgbG9va3VwID0gWycoJ10uY29uY2F0KHNpbXBsZSwgbm9uSGVscGVyKTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIGxvb2t1cC5wdXNoKCcgfHwgJywgdGhpcy5hbGlhc2FibGUoJ2hlbHBlcnMuaGVscGVyTWlzc2luZycpKTtcbiAgICB9XG4gICAgbG9va3VwLnB1c2goJyknKTtcblxuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwobG9va3VwLCAnY2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKSk7XG4gIH0sXG5cbiAgLy8gW2ludm9rZUtub3duSGVscGVyXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvblxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gdGhlIGhlbHBlciBpcyBrbm93biB0byBleGlzdCxcbiAgLy8gc28gYSBgaGVscGVyTWlzc2luZ2AgZmFsbGJhY2sgaXMgbm90IHJlcXVpcmVkLlxuICBpbnZva2VLbm93bkhlbHBlcjogZnVuY3Rpb24ocGFyYW1TaXplLCBuYW1lKSB7XG4gICAgbGV0IGhlbHBlciA9IHRoaXMuc2V0dXBIZWxwZXIocGFyYW1TaXplLCBuYW1lKTtcbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGhlbHBlci5uYW1lLCAnY2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKSk7XG4gIH0sXG5cbiAgLy8gW2ludm9rZUFtYmlndW91c11cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgcGFyYW1zLi4uLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXN1bHQgb2YgZGlzYW1iaWd1YXRpb25cbiAgLy9cbiAgLy8gVGhpcyBvcGVyYXRpb24gaXMgdXNlZCB3aGVuIGFuIGV4cHJlc3Npb24gbGlrZSBge3tmb299fWBcbiAgLy8gaXMgcHJvdmlkZWQsIGJ1dCB3ZSBkb24ndCBrbm93IGF0IGNvbXBpbGUtdGltZSB3aGV0aGVyIGl0XG4gIC8vIGlzIGEgaGVscGVyIG9yIGEgcGF0aC5cbiAgLy9cbiAgLy8gVGhpcyBvcGVyYXRpb24gZW1pdHMgbW9yZSBjb2RlIHRoYW4gdGhlIG90aGVyIG9wdGlvbnMsXG4gIC8vIGFuZCBjYW4gYmUgYXZvaWRlZCBieSBwYXNzaW5nIHRoZSBga25vd25IZWxwZXJzYCBhbmRcbiAgLy8gYGtub3duSGVscGVyc09ubHlgIGZsYWdzIGF0IGNvbXBpbGUtdGltZS5cbiAgaW52b2tlQW1iaWd1b3VzOiBmdW5jdGlvbihuYW1lLCBoZWxwZXJDYWxsKSB7XG4gICAgdGhpcy51c2VSZWdpc3RlcignaGVscGVyJyk7XG5cbiAgICBsZXQgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpO1xuXG4gICAgdGhpcy5lbXB0eUhhc2goKTtcbiAgICBsZXQgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcigwLCBuYW1lLCBoZWxwZXJDYWxsKTtcblxuICAgIGxldCBoZWxwZXJOYW1lID0gdGhpcy5sYXN0SGVscGVyID0gdGhpcy5uYW1lTG9va3VwKCdoZWxwZXJzJywgbmFtZSwgJ2hlbHBlcicpO1xuXG4gICAgbGV0IGxvb2t1cCA9IFsnKCcsICcoaGVscGVyID0gJywgaGVscGVyTmFtZSwgJyB8fCAnLCBub25IZWxwZXIsICcpJ107XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBsb29rdXBbMF0gPSAnKGhlbHBlciA9ICc7XG4gICAgICBsb29rdXAucHVzaChcbiAgICAgICAgJyAhPSBudWxsID8gaGVscGVyIDogJyxcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2hlbHBlcnMuaGVscGVyTWlzc2luZycpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucHVzaChbXG4gICAgICAgICcoJywgbG9va3VwLFxuICAgICAgICAoaGVscGVyLnBhcmFtc0luaXQgPyBbJyksKCcsIGhlbHBlci5wYXJhbXNJbml0XSA6IFtdKSwgJyksJyxcbiAgICAgICAgJyh0eXBlb2YgaGVscGVyID09PSAnLCB0aGlzLmFsaWFzYWJsZSgnXCJmdW5jdGlvblwiJyksICcgPyAnLFxuICAgICAgICB0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoJ2hlbHBlcicsICdjYWxsJywgaGVscGVyLmNhbGxQYXJhbXMpLCAnIDogaGVscGVyKSknXG4gICAgXSk7XG4gIH0sXG5cbiAgLy8gW2ludm9rZVBhcnRpYWxdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGNvbnRleHQsIC4uLlxuICAvLyBPbiBzdGFjayBhZnRlcjogcmVzdWx0IG9mIHBhcnRpYWwgaW52b2NhdGlvblxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBwb3BzIG9mZiBhIGNvbnRleHQsIGludm9rZXMgYSBwYXJ0aWFsIHdpdGggdGhhdCBjb250ZXh0LFxuICAvLyBhbmQgcHVzaGVzIHRoZSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gYmFjay5cbiAgaW52b2tlUGFydGlhbDogZnVuY3Rpb24oaXNEeW5hbWljLCBuYW1lLCBpbmRlbnQpIHtcbiAgICBsZXQgcGFyYW1zID0gW10sXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLnNldHVwUGFyYW1zKG5hbWUsIDEsIHBhcmFtcyk7XG5cbiAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICBuYW1lID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgZGVsZXRlIG9wdGlvbnMubmFtZTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICBvcHRpb25zLmluZGVudCA9IEpTT04uc3RyaW5naWZ5KGluZGVudCk7XG4gICAgfVxuICAgIG9wdGlvbnMuaGVscGVycyA9ICdoZWxwZXJzJztcbiAgICBvcHRpb25zLnBhcnRpYWxzID0gJ3BhcnRpYWxzJztcbiAgICBvcHRpb25zLmRlY29yYXRvcnMgPSAnY29udGFpbmVyLmRlY29yYXRvcnMnO1xuXG4gICAgaWYgKCFpc0R5bmFtaWMpIHtcbiAgICAgIHBhcmFtcy51bnNoaWZ0KHRoaXMubmFtZUxvb2t1cCgncGFydGlhbHMnLCBuYW1lLCAncGFydGlhbCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnVuc2hpZnQobmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXQpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGhzID0gJ2RlcHRocyc7XG4gICAgfVxuICAgIG9wdGlvbnMgPSB0aGlzLm9iamVjdExpdGVyYWwob3B0aW9ucyk7XG4gICAgcGFyYW1zLnB1c2gob3B0aW9ucyk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdjb250YWluZXIuaW52b2tlUGFydGlhbCcsICcnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYXNzaWduVG9IYXNoXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uLCBoYXNoLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4sIGhhc2gsIC4uLlxuICAvL1xuICAvLyBQb3BzIGEgdmFsdWUgb2ZmIHRoZSBzdGFjayBhbmQgYXNzaWducyBpdCB0byB0aGUgY3VycmVudCBoYXNoXG4gIGFzc2lnblRvSGFzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB0eXBlLFxuICAgICAgICBpZDtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBpZCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0eXBlID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgY29udGV4dCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaGFzaCA9IHRoaXMuaGFzaDtcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgaGFzaC5jb250ZXh0c1trZXldID0gY29udGV4dDtcbiAgICB9XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGhhc2gudHlwZXNba2V5XSA9IHR5cGU7XG4gICAgfVxuICAgIGlmIChpZCkge1xuICAgICAgaGFzaC5pZHNba2V5XSA9IGlkO1xuICAgIH1cbiAgICBoYXNoLnZhbHVlc1trZXldID0gdmFsdWU7XG4gIH0sXG5cbiAgcHVzaElkOiBmdW5jdGlvbih0eXBlLCBuYW1lLCBjaGlsZCkge1xuICAgIGlmICh0eXBlID09PSAnQmxvY2tQYXJhbScpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChcbiAgICAgICAgICAnYmxvY2tQYXJhbXNbJyArIG5hbWVbMF0gKyAnXS5wYXRoWycgKyBuYW1lWzFdICsgJ10nXG4gICAgICAgICAgKyAoY2hpbGQgPyAnICsgJyArIEpTT04uc3RyaW5naWZ5KCcuJyArIGNoaWxkKSA6ICcnKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnUGF0aEV4cHJlc3Npb24nKSB7XG4gICAgICB0aGlzLnB1c2hTdHJpbmcobmFtZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgndHJ1ZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ251bGwnKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gSEVMUEVSU1xuXG4gIGNvbXBpbGVyOiBKYXZhU2NyaXB0Q29tcGlsZXIsXG5cbiAgY29tcGlsZUNoaWxkcmVuOiBmdW5jdGlvbihlbnZpcm9ubWVudCwgb3B0aW9ucykge1xuICAgIGxldCBjaGlsZHJlbiA9IGVudmlyb25tZW50LmNoaWxkcmVuLCBjaGlsZCwgY29tcGlsZXI7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIGNvbXBpbGVyID0gbmV3IHRoaXMuY29tcGlsZXIoKTsgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5cbiAgICAgIGxldCBleGlzdGluZyA9IHRoaXMubWF0Y2hFeGlzdGluZ1Byb2dyYW0oY2hpbGQpO1xuXG4gICAgICBpZiAoZXhpc3RpbmcgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXMucHVzaCgnJyk7ICAgICAvLyBQbGFjZWhvbGRlciB0byBwcmV2ZW50IG5hbWUgY29uZmxpY3RzIGZvciBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnByb2dyYW1zLmxlbmd0aDtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGluZGV4O1xuICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXNbaW5kZXhdID0gY29tcGlsZXIuY29tcGlsZShjaGlsZCwgb3B0aW9ucywgdGhpcy5jb250ZXh0LCAhdGhpcy5wcmVjb21waWxlKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LmRlY29yYXRvcnNbaW5kZXhdID0gY29tcGlsZXIuZGVjb3JhdG9ycztcbiAgICAgICAgdGhpcy5jb250ZXh0LmVudmlyb25tZW50c1tpbmRleF0gPSBjaGlsZDtcblxuICAgICAgICB0aGlzLnVzZURlcHRocyA9IHRoaXMudXNlRGVwdGhzIHx8IGNvbXBpbGVyLnVzZURlcHRocztcbiAgICAgICAgdGhpcy51c2VCbG9ja1BhcmFtcyA9IHRoaXMudXNlQmxvY2tQYXJhbXMgfHwgY29tcGlsZXIudXNlQmxvY2tQYXJhbXM7XG4gICAgICAgIGNoaWxkLnVzZURlcHRocyA9IHRoaXMudXNlRGVwdGhzO1xuICAgICAgICBjaGlsZC51c2VCbG9ja1BhcmFtcyA9IHRoaXMudXNlQmxvY2tQYXJhbXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZC5pbmRleCA9IGV4aXN0aW5nLmluZGV4O1xuICAgICAgICBjaGlsZC5uYW1lID0gJ3Byb2dyYW0nICsgZXhpc3RpbmcuaW5kZXg7XG5cbiAgICAgICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBleGlzdGluZy51c2VEZXB0aHM7XG4gICAgICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGV4aXN0aW5nLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWF0Y2hFeGlzdGluZ1Byb2dyYW06IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBlbnZpcm9ubWVudCA9IHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaV07XG4gICAgICBpZiAoZW52aXJvbm1lbnQgJiYgZW52aXJvbm1lbnQuZXF1YWxzKGNoaWxkKSkge1xuICAgICAgICByZXR1cm4gZW52aXJvbm1lbnQ7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2dyYW1FeHByZXNzaW9uOiBmdW5jdGlvbihndWlkKSB7XG4gICAgbGV0IGNoaWxkID0gdGhpcy5lbnZpcm9ubWVudC5jaGlsZHJlbltndWlkXSxcbiAgICAgICAgcHJvZ3JhbVBhcmFtcyA9IFtjaGlsZC5pbmRleCwgJ2RhdGEnLCBjaGlsZC5ibG9ja1BhcmFtc107XG5cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykge1xuICAgICAgcHJvZ3JhbVBhcmFtcy5wdXNoKCdibG9ja1BhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGhpcy51c2VEZXB0aHMpIHtcbiAgICAgIHByb2dyYW1QYXJhbXMucHVzaCgnZGVwdGhzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdjb250YWluZXIucHJvZ3JhbSgnICsgcHJvZ3JhbVBhcmFtcy5qb2luKCcsICcpICsgJyknO1xuICB9LFxuXG4gIHVzZVJlZ2lzdGVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKCF0aGlzLnJlZ2lzdGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5yZWdpc3RlcnNbbmFtZV0gPSB0cnVlO1xuICAgICAgdGhpcy5yZWdpc3RlcnMubGlzdC5wdXNoKG5hbWUpO1xuICAgIH1cbiAgfSxcblxuICBwdXNoOiBmdW5jdGlvbihleHByKSB7XG4gICAgaWYgKCEoZXhwciBpbnN0YW5jZW9mIExpdGVyYWwpKSB7XG4gICAgICBleHByID0gdGhpcy5zb3VyY2Uud3JhcChleHByKTtcbiAgICB9XG5cbiAgICB0aGlzLmlubGluZVN0YWNrLnB1c2goZXhwcik7XG4gICAgcmV0dXJuIGV4cHI7XG4gIH0sXG5cbiAgcHVzaFN0YWNrTGl0ZXJhbDogZnVuY3Rpb24oaXRlbSkge1xuICAgIHRoaXMucHVzaChuZXcgTGl0ZXJhbChpdGVtKSk7XG4gIH0sXG5cbiAgcHVzaFNvdXJjZTogZnVuY3Rpb24oc291cmNlKSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIHRoaXMuc291cmNlLnB1c2goXG4gICAgICAgICAgdGhpcy5hcHBlbmRUb0J1ZmZlcih0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcodGhpcy5wZW5kaW5nQ29udGVudCksIHRoaXMucGVuZGluZ0xvY2F0aW9uKSk7XG4gICAgICB0aGlzLnBlbmRpbmdDb250ZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2UpIHtcbiAgICAgIHRoaXMuc291cmNlLnB1c2goc291cmNlKTtcbiAgICB9XG4gIH0sXG5cbiAgcmVwbGFjZVN0YWNrOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgIGxldCBwcmVmaXggPSBbJygnXSxcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIGNyZWF0ZWRTdGFjayxcbiAgICAgICAgdXNlZExpdGVyYWw7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICghdGhpcy5pc0lubGluZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdyZXBsYWNlU3RhY2sgb24gbm9uLWlubGluZScpO1xuICAgIH1cblxuICAgIC8vIFdlIHdhbnQgdG8gbWVyZ2UgdGhlIGlubGluZSBzdGF0ZW1lbnQgaW50byB0aGUgcmVwbGFjZW1lbnQgc3RhdGVtZW50IHZpYSAnLCdcbiAgICBsZXQgdG9wID0gdGhpcy5wb3BTdGFjayh0cnVlKTtcblxuICAgIGlmICh0b3AgaW5zdGFuY2VvZiBMaXRlcmFsKSB7XG4gICAgICAvLyBMaXRlcmFscyBkbyBub3QgbmVlZCB0byBiZSBpbmxpbmVkXG4gICAgICBzdGFjayA9IFt0b3AudmFsdWVdO1xuICAgICAgcHJlZml4ID0gWycoJywgc3RhY2tdO1xuICAgICAgdXNlZExpdGVyYWwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBHZXQgb3IgY3JlYXRlIHRoZSBjdXJyZW50IHN0YWNrIG5hbWUgZm9yIHVzZSBieSB0aGUgaW5saW5lXG4gICAgICBjcmVhdGVkU3RhY2sgPSB0cnVlO1xuICAgICAgbGV0IG5hbWUgPSB0aGlzLmluY3JTdGFjaygpO1xuXG4gICAgICBwcmVmaXggPSBbJygoJywgdGhpcy5wdXNoKG5hbWUpLCAnID0gJywgdG9wLCAnKSddO1xuICAgICAgc3RhY2sgPSB0aGlzLnRvcFN0YWNrKCk7XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSBjYWxsYmFjay5jYWxsKHRoaXMsIHN0YWNrKTtcblxuICAgIGlmICghdXNlZExpdGVyYWwpIHtcbiAgICAgIHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG4gICAgaWYgKGNyZWF0ZWRTdGFjaykge1xuICAgICAgdGhpcy5zdGFja1Nsb3QtLTtcbiAgICB9XG4gICAgdGhpcy5wdXNoKHByZWZpeC5jb25jYXQoaXRlbSwgJyknKSk7XG4gIH0sXG5cbiAgaW5jclN0YWNrOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0YWNrU2xvdCsrO1xuICAgIGlmICh0aGlzLnN0YWNrU2xvdCA+IHRoaXMuc3RhY2tWYXJzLmxlbmd0aCkgeyB0aGlzLnN0YWNrVmFycy5wdXNoKCdzdGFjaycgKyB0aGlzLnN0YWNrU2xvdCk7IH1cbiAgICByZXR1cm4gdGhpcy50b3BTdGFja05hbWUoKTtcbiAgfSxcbiAgdG9wU3RhY2tOYW1lOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ3N0YWNrJyArIHRoaXMuc3RhY2tTbG90O1xuICB9LFxuICBmbHVzaElubGluZTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGlubGluZVN0YWNrID0gdGhpcy5pbmxpbmVTdGFjaztcbiAgICB0aGlzLmlubGluZVN0YWNrID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlubGluZVN0YWNrLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBsZXQgZW50cnkgPSBpbmxpbmVTdGFja1tpXTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGVudHJ5IGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgICB0aGlzLmNvbXBpbGVTdGFjay5wdXNoKGVudHJ5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBzdGFjayA9IHRoaXMuaW5jclN0YWNrKCk7XG4gICAgICAgIHRoaXMucHVzaFNvdXJjZShbc3RhY2ssICcgPSAnLCBlbnRyeSwgJzsnXSk7XG4gICAgICAgIHRoaXMuY29tcGlsZVN0YWNrLnB1c2goc3RhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgaXNJbmxpbmU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmlubGluZVN0YWNrLmxlbmd0aDtcbiAgfSxcblxuICBwb3BTdGFjazogZnVuY3Rpb24od3JhcHBlZCkge1xuICAgIGxldCBpbmxpbmUgPSB0aGlzLmlzSW5saW5lKCksXG4gICAgICAgIGl0ZW0gPSAoaW5saW5lID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0YWNrKS5wb3AoKTtcblxuICAgIGlmICghd3JhcHBlZCAmJiAoaXRlbSBpbnN0YW5jZW9mIExpdGVyYWwpKSB7XG4gICAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFpbmxpbmUpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKCF0aGlzLnN0YWNrU2xvdCkge1xuICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgc3RhY2sgcG9wJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFja1Nsb3QtLTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICB0b3BTdGFjazogZnVuY3Rpb24oKSB7XG4gICAgbGV0IHN0YWNrID0gKHRoaXMuaXNJbmxpbmUoKSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjayksXG4gICAgICAgIGl0ZW0gPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICBjb250ZXh0TmFtZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIGlmICh0aGlzLnVzZURlcHRocyAmJiBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gJ2RlcHRoc1snICsgY29udGV4dCArICddJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdkZXB0aCcgKyBjb250ZXh0O1xuICAgIH1cbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcoc3RyKTtcbiAgfSxcblxuICBvYmplY3RMaXRlcmFsOiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uub2JqZWN0TGl0ZXJhbChvYmopO1xuICB9LFxuXG4gIGFsaWFzYWJsZTogZnVuY3Rpb24obmFtZSkge1xuICAgIGxldCByZXQgPSB0aGlzLmFsaWFzZXNbbmFtZV07XG4gICAgaWYgKHJldCkge1xuICAgICAgcmV0LnJlZmVyZW5jZUNvdW50Kys7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHJldCA9IHRoaXMuYWxpYXNlc1tuYW1lXSA9IHRoaXMuc291cmNlLndyYXAobmFtZSk7XG4gICAgcmV0LmFsaWFzYWJsZSA9IHRydWU7XG4gICAgcmV0LnJlZmVyZW5jZUNvdW50ID0gMTtcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgYmxvY2tIZWxwZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gW10sXG4gICAgICAgIHBhcmFtc0luaXQgPSB0aGlzLnNldHVwSGVscGVyQXJncyhuYW1lLCBwYXJhbVNpemUsIHBhcmFtcywgYmxvY2tIZWxwZXIpO1xuICAgIGxldCBmb3VuZEhlbHBlciA9IHRoaXMubmFtZUxvb2t1cCgnaGVscGVycycsIG5hbWUsICdoZWxwZXInKSxcbiAgICAgICAgY2FsbENvbnRleHQgPSB0aGlzLmFsaWFzYWJsZShgJHt0aGlzLmNvbnRleHROYW1lKDApfSAhPSBudWxsID8gJHt0aGlzLmNvbnRleHROYW1lKDApfSA6IHt9YCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBwYXJhbXNJbml0OiBwYXJhbXNJbml0LFxuICAgICAgbmFtZTogZm91bmRIZWxwZXIsXG4gICAgICBjYWxsUGFyYW1zOiBbY2FsbENvbnRleHRdLmNvbmNhdChwYXJhbXMpXG4gICAgfTtcbiAgfSxcblxuICBzZXR1cFBhcmFtczogZnVuY3Rpb24oaGVscGVyLCBwYXJhbVNpemUsIHBhcmFtcykge1xuICAgIGxldCBvcHRpb25zID0ge30sXG4gICAgICAgIGNvbnRleHRzID0gW10sXG4gICAgICAgIHR5cGVzID0gW10sXG4gICAgICAgIGlkcyA9IFtdLFxuICAgICAgICBvYmplY3RBcmdzID0gIXBhcmFtcyxcbiAgICAgICAgcGFyYW07XG5cbiAgICBpZiAob2JqZWN0QXJncykge1xuICAgICAgcGFyYW1zID0gW107XG4gICAgfVxuXG4gICAgb3B0aW9ucy5uYW1lID0gdGhpcy5xdW90ZWRTdHJpbmcoaGVscGVyKTtcbiAgICBvcHRpb25zLmhhc2ggPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICBpZiAodGhpcy50cmFja0lkcykge1xuICAgICAgb3B0aW9ucy5oYXNoSWRzID0gdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIG9wdGlvbnMuaGFzaFR5cGVzID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgb3B0aW9ucy5oYXNoQ29udGV4dHMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgfVxuXG4gICAgbGV0IGludmVyc2UgPSB0aGlzLnBvcFN0YWNrKCksXG4gICAgICAgIHByb2dyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICAvLyBBdm9pZCBzZXR0aW5nIGZuIGFuZCBpbnZlcnNlIGlmIG5laXRoZXIgYXJlIHNldC4gVGhpcyBhbGxvd3NcbiAgICAvLyBoZWxwZXJzIHRvIGRvIGEgY2hlY2sgZm9yIGBpZiAob3B0aW9ucy5mbilgXG4gICAgaWYgKHByb2dyYW0gfHwgaW52ZXJzZSkge1xuICAgICAgb3B0aW9ucy5mbiA9IHByb2dyYW0gfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICAgIG9wdGlvbnMuaW52ZXJzZSA9IGludmVyc2UgfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICB9XG5cbiAgICAvLyBUaGUgcGFyYW1ldGVycyBnbyBvbiB0byB0aGUgc3RhY2sgaW4gb3JkZXIgKG1ha2luZyBzdXJlIHRoYXQgdGhleSBhcmUgZXZhbHVhdGVkIGluIG9yZGVyKVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gcG9wIHRoZW0gb2ZmIHRoZSBzdGFjayBpbiByZXZlcnNlIG9yZGVyXG4gICAgbGV0IGkgPSBwYXJhbVNpemU7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcGFyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBwYXJhbXNbaV0gPSBwYXJhbTtcblxuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgaWRzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICAgIHR5cGVzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgICBjb250ZXh0c1tpXSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqZWN0QXJncykge1xuICAgICAgb3B0aW9ucy5hcmdzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmlkcyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoaWRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLnR5cGVzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheSh0eXBlcyk7XG4gICAgICBvcHRpb25zLmNvbnRleHRzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShjb250ZXh0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSAnZGF0YSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gJ2Jsb2NrUGFyYW1zJztcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXJBcmdzOiBmdW5jdGlvbihoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zLCB1c2VSZWdpc3Rlcikge1xuICAgIGxldCBvcHRpb25zID0gdGhpcy5zZXR1cFBhcmFtcyhoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zKTtcbiAgICBvcHRpb25zID0gdGhpcy5vYmplY3RMaXRlcmFsKG9wdGlvbnMpO1xuICAgIGlmICh1c2VSZWdpc3Rlcikge1xuICAgICAgdGhpcy51c2VSZWdpc3Rlcignb3B0aW9ucycpO1xuICAgICAgcGFyYW1zLnB1c2goJ29wdGlvbnMnKTtcbiAgICAgIHJldHVybiBbJ29wdGlvbnM9Jywgb3B0aW9uc107XG4gICAgfSBlbHNlIGlmIChwYXJhbXMpIHtcbiAgICAgIHBhcmFtcy5wdXNoKG9wdGlvbnMpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gIH1cbn07XG5cblxuKGZ1bmN0aW9uKCkge1xuICBjb25zdCByZXNlcnZlZFdvcmRzID0gKFxuICAgICdicmVhayBlbHNlIG5ldyB2YXInICtcbiAgICAnIGNhc2UgZmluYWxseSByZXR1cm4gdm9pZCcgK1xuICAgICcgY2F0Y2ggZm9yIHN3aXRjaCB3aGlsZScgK1xuICAgICcgY29udGludWUgZnVuY3Rpb24gdGhpcyB3aXRoJyArXG4gICAgJyBkZWZhdWx0IGlmIHRocm93JyArXG4gICAgJyBkZWxldGUgaW4gdHJ5JyArXG4gICAgJyBkbyBpbnN0YW5jZW9mIHR5cGVvZicgK1xuICAgICcgYWJzdHJhY3QgZW51bSBpbnQgc2hvcnQnICtcbiAgICAnIGJvb2xlYW4gZXhwb3J0IGludGVyZmFjZSBzdGF0aWMnICtcbiAgICAnIGJ5dGUgZXh0ZW5kcyBsb25nIHN1cGVyJyArXG4gICAgJyBjaGFyIGZpbmFsIG5hdGl2ZSBzeW5jaHJvbml6ZWQnICtcbiAgICAnIGNsYXNzIGZsb2F0IHBhY2thZ2UgdGhyb3dzJyArXG4gICAgJyBjb25zdCBnb3RvIHByaXZhdGUgdHJhbnNpZW50JyArXG4gICAgJyBkZWJ1Z2dlciBpbXBsZW1lbnRzIHByb3RlY3RlZCB2b2xhdGlsZScgK1xuICAgICcgZG91YmxlIGltcG9ydCBwdWJsaWMgbGV0IHlpZWxkIGF3YWl0JyArXG4gICAgJyBudWxsIHRydWUgZmFsc2UnXG4gICkuc3BsaXQoJyAnKTtcblxuICBjb25zdCBjb21waWxlcldvcmRzID0gSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTID0ge307XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSByZXNlcnZlZFdvcmRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbXBpbGVyV29yZHNbcmVzZXJ2ZWRXb3Jkc1tpXV0gPSB0cnVlO1xuICB9XG59KCkpO1xuXG5KYXZhU2NyaXB0Q29tcGlsZXIuaXNWYWxpZEphdmFTY3JpcHRWYXJpYWJsZU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiAhSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTW25hbWVdICYmICgvXlthLXpBLVpfJF1bMC05YS16QS1aXyRdKiQvKS50ZXN0KG5hbWUpO1xufTtcblxuZnVuY3Rpb24gc3RyaWN0TG9va3VwKHJlcXVpcmVUZXJtaW5hbCwgY29tcGlsZXIsIHBhcnRzLCB0eXBlKSB7XG4gIGxldCBzdGFjayA9IGNvbXBpbGVyLnBvcFN0YWNrKCksXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHBhcnRzLmxlbmd0aDtcbiAgaWYgKHJlcXVpcmVUZXJtaW5hbCkge1xuICAgIGxlbi0tO1xuICB9XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHN0YWNrID0gY29tcGlsZXIubmFtZUxvb2t1cChzdGFjaywgcGFydHNbaV0sIHR5cGUpO1xuICB9XG5cbiAgaWYgKHJlcXVpcmVUZXJtaW5hbCkge1xuICAgIHJldHVybiBbY29tcGlsZXIuYWxpYXNhYmxlKCdjb250YWluZXIuc3RyaWN0JyksICcoJywgc3RhY2ssICcsICcsIGNvbXBpbGVyLnF1b3RlZFN0cmluZyhwYXJ0c1tpXSksICcpJ107XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEphdmFTY3JpcHRDb21waWxlcjtcbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js deleted file mode 100644 index cef854c3e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/parser.js +++ /dev/null @@ -1,738 +0,0 @@ -/* istanbul ignore next */ -/* Jison generated parser */ -"use strict"; - -var handlebars = (function () { - var parser = { trace: function trace() {}, - yy: {}, - symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition_plus0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" }, - productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 1], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$ - /**/) { - - var $0 = $$.length - 1; - switch (yystate) { - case 1: - return $$[$0 - 1]; - break; - case 2: - this.$ = yy.prepareProgram($$[$0]); - break; - case 3: - this.$ = $$[$0]; - break; - case 4: - this.$ = $$[$0]; - break; - case 5: - this.$ = $$[$0]; - break; - case 6: - this.$ = $$[$0]; - break; - case 7: - this.$ = $$[$0]; - break; - case 8: - this.$ = $$[$0]; - break; - case 9: - this.$ = { - type: 'CommentStatement', - value: yy.stripComment($$[$0]), - strip: yy.stripFlags($$[$0], $$[$0]), - loc: yy.locInfo(this._$) - }; - - break; - case 10: - this.$ = { - type: 'ContentStatement', - original: $$[$0], - value: $$[$0], - loc: yy.locInfo(this._$) - }; - - break; - case 11: - this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); - break; - case 12: - this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] }; - break; - case 13: - this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$); - break; - case 14: - this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$); - break; - case 15: - this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; - break; - case 16: - this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; - break; - case 17: - this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; - break; - case 18: - this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] }; - break; - case 19: - var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$), - program = yy.prepareProgram([inverse], $$[$0 - 1].loc); - program.chained = true; - - this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true }; - - break; - case 20: - this.$ = $$[$0]; - break; - case 21: - this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) }; - break; - case 22: - this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); - break; - case 23: - this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); - break; - case 24: - this.$ = { - type: 'PartialStatement', - name: $$[$0 - 3], - params: $$[$0 - 2], - hash: $$[$0 - 1], - indent: '', - strip: yy.stripFlags($$[$0 - 4], $$[$0]), - loc: yy.locInfo(this._$) - }; - - break; - case 25: - this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); - break; - case 26: - this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) }; - break; - case 27: - this.$ = $$[$0]; - break; - case 28: - this.$ = $$[$0]; - break; - case 29: - this.$ = { - type: 'SubExpression', - path: $$[$0 - 3], - params: $$[$0 - 2], - hash: $$[$0 - 1], - loc: yy.locInfo(this._$) - }; - - break; - case 30: - this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) }; - break; - case 31: - this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) }; - break; - case 32: - this.$ = yy.id($$[$0 - 1]); - break; - case 33: - this.$ = $$[$0]; - break; - case 34: - this.$ = $$[$0]; - break; - case 35: - this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) }; - break; - case 36: - this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) }; - break; - case 37: - this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) }; - break; - case 38: - this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) }; - break; - case 39: - this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) }; - break; - case 40: - this.$ = $$[$0]; - break; - case 41: - this.$ = $$[$0]; - break; - case 42: - this.$ = yy.preparePath(true, $$[$0], this._$); - break; - case 43: - this.$ = yy.preparePath(false, $$[$0], this._$); - break; - case 44: - $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2]; - break; - case 45: - this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }]; - break; - case 46: - this.$ = []; - break; - case 47: - $$[$0 - 1].push($$[$0]); - break; - case 48: - this.$ = [$$[$0]]; - break; - case 49: - $$[$0 - 1].push($$[$0]); - break; - case 50: - this.$ = []; - break; - case 51: - $$[$0 - 1].push($$[$0]); - break; - case 58: - this.$ = []; - break; - case 59: - $$[$0 - 1].push($$[$0]); - break; - case 64: - this.$ = []; - break; - case 65: - $$[$0 - 1].push($$[$0]); - break; - case 70: - this.$ = []; - break; - case 71: - $$[$0 - 1].push($$[$0]); - break; - case 78: - this.$ = []; - break; - case 79: - $$[$0 - 1].push($$[$0]); - break; - case 82: - this.$ = []; - break; - case 83: - $$[$0 - 1].push($$[$0]); - break; - case 86: - this.$ = []; - break; - case 87: - $$[$0 - 1].push($$[$0]); - break; - case 90: - this.$ = []; - break; - case 91: - $$[$0 - 1].push($$[$0]); - break; - case 94: - this.$ = []; - break; - case 95: - $$[$0 - 1].push($$[$0]); - break; - case 98: - this.$ = [$$[$0]]; - break; - case 99: - $$[$0 - 1].push($$[$0]); - break; - case 100: - this.$ = [$$[$0]]; - break; - case 101: - $$[$0 - 1].push($$[$0]); - break; - } - }, - table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 13: 40, 15: [1, 20], 17: 39 }, { 20: 42, 56: 41, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 45, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 48, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 42, 56: 49, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 50, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 51] }, { 72: [1, 35], 86: 52 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 53, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 54, 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 55, 47: [2, 54] }, { 28: 60, 43: 61, 44: [1, 59], 47: [2, 56] }, { 13: 63, 15: [1, 20], 18: [1, 62] }, { 15: [2, 48], 18: [2, 48] }, { 33: [2, 86], 57: 64, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 65, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 66, 47: [1, 67] }, { 30: 68, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 69, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 70, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 71, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 75, 33: [2, 80], 50: 72, 63: 73, 64: 76, 65: [1, 44], 69: 74, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 80] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 51] }, { 20: 75, 53: 81, 54: [2, 84], 63: 82, 64: 76, 65: [1, 44], 69: 83, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 84, 47: [1, 67] }, { 47: [2, 55] }, { 4: 85, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 86, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 87, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 88, 47: [1, 67] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 75, 33: [2, 88], 58: 89, 63: 90, 64: 76, 65: [1, 44], 69: 91, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 92, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 93, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 31: 94, 33: [2, 60], 63: 95, 64: 76, 65: [1, 44], 69: 96, 70: 77, 71: 78, 72: [1, 79], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 66], 36: 97, 63: 98, 64: 76, 65: [1, 44], 69: 99, 70: 77, 71: 78, 72: [1, 79], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 22: 100, 23: [2, 52], 63: 101, 64: 76, 65: [1, 44], 69: 102, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 92], 62: 103, 63: 104, 64: 76, 65: [1, 44], 69: 105, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 106] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 107, 72: [1, 108], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 109], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 110] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 112, 46: 111, 47: [2, 76] }, { 33: [2, 70], 40: 113, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 114] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 75, 63: 116, 64: 76, 65: [1, 44], 67: 115, 68: [2, 96], 69: 117, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 118] }, { 32: 119, 33: [2, 62], 74: 120, 75: [1, 121] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 122, 74: 123, 75: [1, 121] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 124] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 125] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 109] }, { 20: 75, 63: 126, 64: 76, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 75, 33: [2, 72], 41: 127, 63: 128, 64: 76, 65: [1, 44], 69: 129, 70: 77, 71: 78, 72: [1, 79], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 130] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 131] }, { 33: [2, 63] }, { 72: [1, 133], 76: 132 }, { 33: [1, 134] }, { 33: [2, 69] }, { 15: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 135, 74: 136, 75: [1, 121] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 138], 77: [1, 137] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 139] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }], - defaultActions: { 4: [2, 1], 55: [2, 55], 57: [2, 20], 61: [2, 57], 74: [2, 81], 83: [2, 85], 87: [2, 18], 91: [2, 89], 102: [2, 53], 105: [2, 93], 111: [2, 19], 112: [2, 77], 117: [2, 97], 120: [2, 63], 123: [2, 69], 124: [2, 12], 136: [2, 75], 137: [2, 32] }, - parseError: function parseError(str, hash) { - throw new Error(str); - }, - parse: function parse(input) { - var self = this, - stack = [0], - vstack = [null], - lstack = [], - table = this.table, - yytext = "", - yylineno = 0, - yyleng = 0, - recovering = 0, - TERROR = 2, - EOF = 1; - this.lexer.setInput(input); - this.lexer.yy = this.yy; - this.yy.lexer = this.lexer; - this.yy.parser = this; - if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {}; - var yyloc = this.lexer.yylloc; - lstack.push(yyloc); - var ranges = this.lexer.options && this.lexer.options.ranges; - if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError; - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - function lex() { - var token; - token = self.lexer.lex() || 1; - if (typeof token !== "number") { - token = self.symbols_[token] || token; - } - return token; - } - var symbol, - preErrorSymbol, - state, - action, - a, - r, - yyval = {}, - p, - len, - newState, - expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - if (!recovering) { - expected = []; - for (p in table[state]) if (this.terminals_[p] && p > 2) { - expected.push("'" + this.terminals_[p] + "'"); - } - if (this.lexer.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected }); - } - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(this.lexer.yytext); - lstack.push(this.lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = this.lexer.yyleng; - yytext = this.lexer.yytext; - yylineno = this.lexer.yylineno; - yyloc = this.lexer.yylloc; - if (recovering > 0) recovering--; - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; - if (ranges) { - yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; - } - r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - /* Jison generated lexer */ - var lexer = (function () { - var lexer = { EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - setInput: function setInput(input) { - this._input = input; - this._more = this._less = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 }; - if (this.options.ranges) this.yylloc.range = [0, 0]; - this.offset = 0; - return this; - }, - input: function input() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) this.yylloc.range[1]++; - - this._input = this._input.slice(1); - return ch; - }, - unput: function unput(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len - 1); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) this.yylineno -= lines.length - 1; - var r = this.yylloc.range; - - this.yylloc = { first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - return this; - }, - more: function more() { - this._more = true; - return this; - }, - less: function less(n) { - this.unput(this.match.slice(n)); - }, - pastInput: function pastInput() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); - }, - upcomingInput: function upcomingInput() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, - showPosition: function showPosition() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - next: function next() { - if (this.done) { - return this.EOF; - } - if (!this._input) this.done = true; - - var token, match, tempMatch, index, col, lines; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (!this.options.flex) break; - } - } - if (match) { - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) this.yylineno += lines.length; - this.yylloc = { first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) this.done = false; - if (token) return token;else return; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno }); - } - }, - lex: function lex() { - var r = this.next(); - if (typeof r !== 'undefined') { - return r; - } else { - return this.lex(); - } - }, - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - popState: function popState() { - return this.conditionStack.pop(); - }, - _currentRules: function _currentRules() { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - }, - topState: function topState() { - return this.conditionStack[this.conditionStack.length - 2]; - }, - pushState: function begin(condition) { - this.begin(condition); - } }; - lexer.options = {}; - lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START - /**/) { - - function strip(start, end) { - return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng - end); - } - - var YYSTATE = YY_START; - switch ($avoiding_name_collisions) { - case 0: - if (yy_.yytext.slice(-2) === "\\\\") { - strip(0, 1); - this.begin("mu"); - } else if (yy_.yytext.slice(-1) === "\\") { - strip(0, 1); - this.begin("emu"); - } else { - this.begin("mu"); - } - if (yy_.yytext) return 15; - - break; - case 1: - return 15; - break; - case 2: - this.popState(); - return 15; - - break; - case 3: - this.begin('raw');return 15; - break; - case 4: - this.popState(); - // Should be using `this.topState()` below, but it currently - // returns the second top instead of the first top. Opened an - // issue about it at https://github.com/zaach/jison/issues/291 - if (this.conditionStack[this.conditionStack.length - 1] === 'raw') { - return 15; - } else { - yy_.yytext = yy_.yytext.substr(5, yy_.yyleng - 9); - return 'END_RAW_BLOCK'; - } - - break; - case 5: - return 15; - break; - case 6: - this.popState(); - return 14; - - break; - case 7: - return 65; - break; - case 8: - return 68; - break; - case 9: - return 19; - break; - case 10: - this.popState(); - this.begin('raw'); - return 23; - - break; - case 11: - return 55; - break; - case 12: - return 60; - break; - case 13: - return 29; - break; - case 14: - return 47; - break; - case 15: - this.popState();return 44; - break; - case 16: - this.popState();return 44; - break; - case 17: - return 34; - break; - case 18: - return 39; - break; - case 19: - return 51; - break; - case 20: - return 48; - break; - case 21: - this.unput(yy_.yytext); - this.popState(); - this.begin('com'); - - break; - case 22: - this.popState(); - return 14; - - break; - case 23: - return 48; - break; - case 24: - return 73; - break; - case 25: - return 72; - break; - case 26: - return 72; - break; - case 27: - return 87; - break; - case 28: - // ignore whitespace - break; - case 29: - this.popState();return 54; - break; - case 30: - this.popState();return 33; - break; - case 31: - yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80; - break; - case 32: - yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80; - break; - case 33: - return 85; - break; - case 34: - return 82; - break; - case 35: - return 82; - break; - case 36: - return 83; - break; - case 37: - return 84; - break; - case 38: - return 81; - break; - case 39: - return 75; - break; - case 40: - return 77; - break; - case 41: - return 72; - break; - case 42: - yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72; - break; - case 43: - return 'INVALID'; - break; - case 44: - return 5; - break; - } - }; - lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^\/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]*?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/]; - lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } }; - return lexer; - })(); - parser.lexer = lexer; - function Parser() { - this.yy = {}; - }Parser.prototype = parser;parser.Parser = Parser; - return new Parser(); -})();exports.__esModule = true; -exports['default'] = handlebars; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxZQUFVO0FBQzVCLFFBQUksTUFBTSxHQUFHLEVBQUMsS0FBSyxFQUFFLFNBQVMsS0FBSyxHQUFHLEVBQUc7QUFDekMsVUFBRSxFQUFFLEVBQUU7QUFDTixnQkFBUSxFQUFFLEVBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxNQUFNLEVBQUMsQ0FBQyxFQUFDLFNBQVMsRUFBQyxDQUFDLEVBQUMsS0FBSyxFQUFDLENBQUMsRUFBQyxxQkFBcUIsRUFBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLENBQUMsRUFBQyxVQUFVLEVBQUMsQ0FBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsY0FBYyxFQUFDLEVBQUUsRUFBQywyQkFBMkIsRUFBQyxFQUFFLEVBQUMsZUFBZSxFQUFDLEVBQUUsRUFBQyxnQkFBZ0IsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQywwQkFBMEIsRUFBQyxFQUFFLEVBQUMsc0JBQXNCLEVBQUMsRUFBRSxFQUFDLGlCQUFpQixFQUFDLEVBQUUsRUFBQyxXQUFXLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyxhQUFhLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsWUFBWSxFQUFDLEVBQUUsRUFBQyx1QkFBdUIsRUFBQyxFQUFFLEVBQUMsbUJBQW1CLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFF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QUFFLEVBQUMsS0FBSyxFQUFDO0FBQzVlLG9CQUFZLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFF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QyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN0RSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkYsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckosMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JJLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDL0UsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFDSCx3QkFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDN0UsT0FBTyxHQUFHLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pELDJCQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzs7QUFFdkIsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7O0FBRXRFLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUM7QUFDMUUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0SCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RILDBCQUFNO0FBQUEs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RUFBRTtBQUFFLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEFBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO0FBQzNELDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsc0JBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEdBQUc7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxHQUFHO0FBQUMsc0JBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLDBCQUFNO0FBQUEsYUFDTDtTQUNBO0FBQ0QsYUFBSyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ3hnVyxzQkFBYyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxH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aEIsMkJBQU8sRUFBRSxDQUFDOztBQUVaLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxDQUFDO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2pCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxDQUFDO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2pCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxDQUFDO0FBQUUsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQzJCLHdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsd0JBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEIsMkJBQU8sRUFBRSxDQUFDOztBQUU1QywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLDJCQUFPLEVBQUUsQ0FBQztBQUNsQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLDJCQUFPLEVBQUUsQ0FBQztBQUNsQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLDJCQUFPLEVBQUUsQ0FBQztBQUNsQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLDJCQUFPLEVBQUUsQ0FBQztBQUNsQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQUFBQyxPQUFPLEVBQUUsQ0FBQztBQUNuQywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQUFBQyxPQUFPLEVBQUUsQ0FBQztBQUNuQywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLDJCQUFPLEVBQUUsQ0FBQztBQUNsQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLDJCQUFPLEVBQUUsQ0FBQztBQUNsQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLDJCQUFPLEVBQUUsQ0FBQztBQUNsQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLDJCQUFPLEVBQUUsQ0FBQztBQUNsQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUNMLHdCQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2Qix3QkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hCLHdCQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUNMLHdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsMkJBQU8sRUFBRSxDQUFDOztBQUVaLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFOztBQUNQLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsdUJBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFDLEdBQUcsQ0FBQyxDQUFDLEFBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0QsMEJBQU07QUFBQSxBQUNOLHFC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QyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUMsRUFBQyxLQUFLLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUMsRUFBQyxTQUFTLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxJQUFJLEVBQUMsRUFBQyxDQUFDO0FBQzNVLGVBQU8sS0FBSyxDQUFDO0tBQUMsQ0FBQSxFQUFHLENBQUE7QUFDakIsVUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDckIsYUFBUyxNQUFNLEdBQUk7QUFBRSxZQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztLQUFFLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JGLFdBQU8sSUFBSSxNQUFNLEVBQUEsQ0FBQztDQUNqQixDQUFBLEVBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMvQixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDIiwiZmlsZSI6InBhcnNlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4vKiBKaXNvbiBnZW5lcmF0ZWQgcGFyc2VyICovXG52YXIgaGFuZGxlYmFycyA9IChmdW5jdGlvbigpe1xudmFyIHBhcnNlciA9IHt0cmFjZTogZnVuY3Rpb24gdHJhY2UoKSB7IH0sXG55eToge30sXG5zeW1ib2xzXzoge1wiZXJyb3JcIjoyLFwicm9vdFwiOjMsXCJwcm9ncmFtXCI6NCxcIkVPRlwiOjUsXCJwcm9ncmFtX3JlcGV0aXRpb24wXCI6NixcInN0YXRlbWVudFwiOjcsXCJtdXN0YWNoZVwiOjgsXCJibG9ja1wiOjksXCJyYXdCbG9ja1wiOjEwLFwicGFydGlhbFwiOjExLFwicGFydGlhbEJsb2NrXCI6MTIsXCJjb250ZW50XCI6MTMsXCJDT01NRU5UXCI6MTQsXCJDT05URU5UXCI6MTUsXCJvcGVuUmF3QmxvY2tcIjoxNixcInJhd0Jsb2NrX3JlcGV0aXRpb25fcGx1czBcIjoxNyxcIkVORF9SQVdfQkxPQ0tcIjoxOCxcIk9QRU5fUkFXX0JMT0NLXCI6MTksXCJoZWxwZXJOYW1lXCI6MjAsXCJvcGVuUmF3QmxvY2tfcmVwZXRpdGlvbjBcIjoyMSxcIm9wZW5SYXdCbG9ja19vcHRpb24wXCI6MjIsXCJDTE9TRV9SQVdfQkxPQ0tcIjoyMyxcIm9wZW5CbG9ja1wiOjI0LFwiYmxvY2tfb3B0aW9uMFwiOjI1LFwiY2xvc2VCbG9ja1wiOjI2LFwib3BlbkludmVyc2VcIjoyNyxcImJsb2NrX29wdGlvbjFcIjoyOCxcIk9QRU5fQkxPQ0tcIjoyOSxcIm9wZW5CbG9ja19yZXBldGl0aW9uMFwiOjMwLFwib3BlbkJsb2NrX29wdGlvbjBcIjozMSxcIm9wZW5CbG9ja19vcHRpb24xXCI6MzIsXCJDTE9TRVwiOjMzLFwiT1BFTl9JTlZFUlNFXCI6MzQsXCJvcGVuSW52ZXJzZV9yZXBldGl0aW9uMFwiOjM1LFwib3BlbkludmVyc2Vfb3B0aW9uMFwiOjM2LFwib3BlbkludmVyc2Vfb3B0aW9uMVwiOjM3LFwib3BlbkludmVyc2VDaGFpblwiOjM4LFwiT1BFTl9JTlZFUlNFX0NIQUlOXCI6MzksXCJvcGVuSW52ZXJzZUNoYWluX3JlcGV0aXRpb24wXCI6NDAsXCJvcGVuSW52ZXJzZUNoYWluX29wdGlvbjBcIjo0MSxcIm9wZW5JbnZlcnNlQ2hhaW5fb3B0aW9uMVwiOjQyLFwiaW52ZXJzZUFuZFByb2dyYW1cIjo0MyxcIklOVkVSU0VcIjo0NCxcImludmVyc2VDaGFpblwiOjQ1LFwiaW52ZXJzZUNoYWluX29wdGlvbjBcIjo0NixcIk9QRU5fRU5EQkxPQ0tcIjo0NyxcIk9QRU5cIjo0OCxcIm11c3RhY2hlX3JlcGV0aXRpb24wXCI6NDksXCJtdXN0YWNoZV9vcHRpb24wXCI6NTAsXCJPUEVOX1VORVNDQVBFRFwiOjUxLFwibXVzdGFjaGVfcmVwZXRpdGlvbjFcIjo1MixcIm11c3RhY2hlX29wdGlvbjFcIjo1MyxcIkNMT1NFX1VORVNDQVBFRFwiOjU0LFwiT1BFTl9QQVJUSUFMXCI6NTUsXCJwYXJ0aWFsTmFtZVwiOjU2LFwicGFydGlhbF9yZXBldGl0aW9uMFwiOjU3LFwicGFydGlhbF9vcHRpb24wXCI6NTgsXCJvcGVuUGFydGlhbEJsb2NrXCI6NTksXCJPUEVOX1BBUlRJQUxfQkxPQ0tcIjo2MCxcIm9wZW5QYXJ0aWFsQmxvY2tfcmVwZXRpdGlvbjBcIjo2MSxcIm9wZW5QYXJ0aWFsQmxvY2tfb3B0aW9uMFwiOjYyLFwicGFyYW1cIjo2MyxcInNleHByXCI6NjQsXCJPUEVOX1NFWFBSXCI6NjUsXCJzZXhwcl9yZXBldGl0aW9uMFwiOjY2LFwic2V4cHJfb3B0aW9uMFwiOjY3LFwiQ0xPU0VfU0VYUFJcIjo2OCxcImhhc2hcIjo2OSxcImhhc2hfcmVwZXRpdGlvbl9wbHVzMFwiOjcwLFwiaGFzaFNlZ21lbnRcIjo3MSxcIklEXCI6NzIsXCJFUVVBTFNcIjo3MyxcImJsb2NrUGFyYW1zXCI6NzQsXCJPUEVOX0JMT0NLX1BBUkFNU1wiOjc1LFwiYmxvY2tQYXJhbXNfcmVwZXRpdGlvbl9wbHVzMFwiOjc2LFwiQ0xPU0VfQkxPQ0tfUEFSQU1TXCI6NzcsXCJwYXRoXCI6NzgsXCJkYXRhTmFtZVwiOjc5LFwiU1RSSU5HXCI6ODAsXCJOVU1CRVJcIjo4MSxcIkJPT0xFQU5cIjo4MixcIlVOREVGSU5FRFwiOjgzLFwiTlVMTFwiOjg0LFwiREFUQVwiOjg1LFwicGF0aFNlZ21lbnRzXCI6ODYsXCJTRVBcIjo4NyxcIiRhY2NlcHRcIjowLFwiJGVuZFwiOjF9LFxudGVybWluYWxzXzogezI6XCJlcnJvclwiLDU6XCJFT0ZcIiwxNDpcIkNPTU1FTlRcIiwxNTpcIkNPTlRFTlRcIiwxODpcIkVORF9SQVdfQkxPQ0tcIiwxOTpcIk9QRU5fUkFXX0JMT0NLXCIsMjM6XCJDTE9TRV9SQVdfQkxPQ0tcIiwyOTpcIk9QRU5fQkxPQ0tcIiwzMzpcIkNMT1NFXCIsMzQ6XCJPUEVOX0lOVkVSU0VcIiwzOTpcIk9QRU5fSU5WRVJTRV9DSEFJTlwiLDQ0OlwiSU5WRVJTRVwiLDQ3OlwiT1BFTl9FTkRCTE9DS1wiLDQ4OlwiT1BFTlwiLDUxOlwiT1BFTl9VTkVTQ0FQRURcIiw1NDpcIkNMT1NFX1VORVNDQVBFRFwiLDU1OlwiT1BFTl9QQVJUSUFMXCIsNjA6XCJPUEVOX1BBUlRJQUxfQkxPQ0tcIiw2NTpcIk9QRU5fU0VYUFJcIiw2ODpcIkNMT1NFX1NFWFBSXCIsNzI6XCJJRFwiLDczOlwiRVFVQUxTXCIsNzU6XCJPUEVOX0JMT0NLX1BBUkFNU1wiLDc3OlwiQ0xPU0VfQkxPQ0tfUEFSQU1TXCIsODA6XCJTVFJJTkdcIiw4MTpcIk5VTUJFUlwiLDgyOlwiQk9PTEVBTlwiLDgzOlwiVU5ERUZJTkVEXCIsODQ6XCJOVUxMXCIsODU6XCJEQVRBXCIsODc6XCJTRVBcIn0sXG5wcm9kdWN0aW9uc186IFswLFszLDJdLFs0LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFsxMywxXSxbMTAsM10sWzE2LDVdLFs5LDRdLFs5LDRdLFsyNCw2XSxbMjcsNl0sWzM4LDZdLFs0MywyXSxbNDUsM10sWzQ1LDFdLFsyNiwzXSxbOCw1XSxbOCw1XSxbMTEsNV0sWzEyLDNdLFs1OSw1XSxbNjMsMV0sWzYzLDFdLFs2NCw1XSxbNjksMV0sWzcxLDNdLFs3NCwzXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzU2LDFdLFs1NiwxXSxbNzksMl0sWzc4LDFdLFs4NiwzXSxbODYsMV0sWzYsMF0sWzYsMl0sWzE3LDFdLFsxNywyXSxbMjEsMF0sWzIxLDJdLFsyMiwwXSxbMjIsMV0sWzI1LDBdLFsyNSwxXSxbMjgsMF0sWzI4LDFdLFszMCwwXSxbMzAsMl0sWzMxLDBdLFszMSwxXSxbMzIsMF0sWzMyLDFdLFszNSwwXSxbMzUsMl0sWzM2LDBdLFszNiwxXSxbMzcsMF0sWzM3LDFdLFs0MCwwXSxbNDAsMl0sWzQxLDBdLFs0MSwxXSxbNDIsMF0sWzQyLDFdLFs0NiwwXSxbNDYsMV0sWzQ5LDBdLFs0OSwyXSxbNTAsMF0sWzUwLDFdLFs1MiwwXSxbNTIsMl0sWzUzLDBdLFs1MywxXSxbNTcsMF0sWzU3LDJdLFs1OCwwXSxbNTgsMV0sWzYxLDBdLFs2MSwyXSxbNjIsMF0sWzYyLDFdLFs2NiwwXSxbNjYsMl0sWzY3LDBdLFs2NywxXSxbNzAsMV0sWzcwLDJdLFs3NiwxXSxbNzYsMl1dLFxucGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCx5eWxlbmcseXlsaW5lbm8seXkseXlzdGF0ZSwkJCxfJFxuLyoqLykge1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6IHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjp0aGlzLiQgPSB5eS5wcmVwYXJlUHJvZ3JhbSgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDM6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDQ6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDU6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDY6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDc6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDk6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbW1lbnRTdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMTA6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbnRlbnRTdGF0ZW1lbnQnLFxuICAgICAgb3JpZ2luYWw6ICQkWyQwXSxcbiAgICAgIHZhbHVlOiAkJFskMF0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAxMTp0aGlzLiQgPSB5eS5wcmVwYXJlUmF3QmxvY2soJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDEyOnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdIH07XG5icmVhaztcbmNhc2UgMTM6dGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE0OnRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRydWUsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMuJCA9IHsgb3BlbjogJCRbJDAtNV0sIHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTc6dGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxODp0aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTFdLCAkJFskMC0xXSksIHByb2dyYW06ICQkWyQwXSB9O1xuYnJlYWs7XG5jYXNlIDE5OlxuICAgIHZhciBpbnZlcnNlID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKSxcbiAgICAgICAgcHJvZ3JhbSA9IHl5LnByZXBhcmVQcm9ncmFtKFtpbnZlcnNlXSwgJCRbJDAtMV0ubG9jKTtcbiAgICBwcm9ncmFtLmNoYWluZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kID0geyBzdHJpcDogJCRbJDAtMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07XG4gIFxuYnJlYWs7XG5jYXNlIDIwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyMTp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMjp0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIzOnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjQ6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLFxuICAgICAgbmFtZTogJCRbJDAtM10sXG4gICAgICBwYXJhbXM6ICQkWyQwLTJdLFxuICAgICAgaGFzaDogJCRbJDAtMV0sXG4gICAgICBpbmRlbnQ6ICcnLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAyNTp0aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNjp0aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMjg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDI5OlxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgIHBhdGg6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMzA6dGhpcy4kID0ge3R5cGU6ICdIYXNoJywgcGFpcnM6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzMTp0aGlzLiQgPSB7dHlwZTogJ0hhc2hQYWlyJywga2V5OiB5eS5pZCgkJFskMC0yXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzI6dGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDMzOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAzNDp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzU6dGhpcy4kID0ge3R5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQwXSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNjp0aGlzLiQgPSB7dHlwZTogJ051bWJlckxpdGVyYWwnLCB2YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNzp0aGlzLiQgPSB7dHlwZTogJ0Jvb2xlYW5MaXRlcmFsJywgdmFsdWU6ICQkWyQwXSA9PT0gJ3RydWUnLCBvcmlnaW5hbDogJCRbJDBdID09PSAndHJ1ZScsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzg6dGhpcy4kID0ge3R5cGU6ICdVbmRlZmluZWRMaXRlcmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzOTp0aGlzLiQgPSB7dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDQwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA0MTp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgNDI6dGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0Mzp0aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0NDogJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNDU6dGhpcy4kID0gW3twYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdfV07XG5icmVhaztcbmNhc2UgNDY6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNDc6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDQ4OnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDQ5OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA1MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA1MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNTg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDY0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDY1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA3MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA3MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNzg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNzk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDgyOnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDgzOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA4Njp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA4NzokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgOTA6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgOTE6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDk0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDk1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA5ODp0aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xuY2FzZSA5OTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgMTAwOnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDEwMTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbn1cbn0sXG50YWJsZTogW3szOjEsNDoyLDU6WzIsNDZdLDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE6WzNdfSx7NTpbMSw0XX0sezU6WzIsMl0sNzo1LDg6Niw5OjcsMTA6OCwxMTo5LDEyOjEwLDEzOjExLDE0OlsxLDEyXSwxNTpbMSwyMF0sMTY6MTcsMTk6WzEsMjNdLDI0OjE1LDI3OjE2LDI5OlsxLDIxXSwzNDpbMSwyMl0sMzk6WzIsMl0sNDQ6WzIsMl0sNDc6WzIsMl0sNDg6WzEsMTNdLDUxOlsxLDE0XSw1NTpbMSwxOF0sNTk6MTksNjA6WzEsMjRdfSx7MTpbMiwxXX0sezU6WzIsNDddLDE0OlsyLDQ3XSwxNTpbMiw0N10sMTk6WzIsNDddLDI5OlsyLDQ3XSwzNDpbMiw0N10sMzk6WzIsNDddLDQ0OlsyLDQ3XSw0NzpbMiw0N10sNDg6WzIsNDddLDUxOlsyLDQ3XSw1NTpbMiw0N10sNjA6WzIsNDddfSx7NTpbMiwzXSwxNDpbMiwzXSwxNTpbMiwzXSwxOTpbMiwzXSwyOTpbMiwzXSwzNDpbMiwzXSwzOTpbMiwzXSw0NDpbMiwzXSw0NzpbMiwzXSw0ODpbMiwzXSw1MTpbMiwzXSw1NTpbMiwzXSw2MDpbMiwzXX0sezU6WzIsNF0sMTQ6WzIsNF0sMTU6WzIsNF0sMTk6WzIsNF0sMjk6WzIsNF0sMzQ6WzIsNF0sMzk6WzIsNF0sNDQ6WzIsNF0sNDc6WzIsNF0sNDg6WzIsNF0sNTE6WzIsNF0sNTU6WzIsNF0sNjA6WzIsNF19LHs1OlsyLDVdLDE0OlsyLDVdLDE1OlsyLDVdLDE5OlsyLDVdLDI5OlsyLDVdLDM0OlsyLDVdLDM5OlsyLDVdLDQ0OlsyLDVdLDQ3OlsyLDVdLDQ4OlsyLDVdLDUxOlsyLDVdLDU1OlsyLDVdLDYwOlsyLDVdfSx7NTpbMiw2XSwxNDpbMiw2XSwxNTpbMiw2XSwxOTpbMiw2XSwyOTpbMiw2XSwzNDpbMiw2XSwzOTpbMiw2XSw0NDpbMiw2XSw0NzpbMiw2XSw0ODpbMiw2XSw1MTpbMiw2XSw1NTpbMiw2XSw2MDpbMiw2XX0sezU6WzIsN10sMTQ6WzIsN10sMTU6WzIsN10sMTk6WzIsN10sMjk6WzIsN10sMzQ6WzIsN10sMzk6WzIsN10sNDQ6WzIsN10sNDc6WzIsN10sNDg6WzIsN10sNTE6WzIsN10sNTU6WzIsN10sNjA6WzIsN119LHs1OlsyLDhdLDE0OlsyLDhdLDE1OlsyLDhdLDE5OlsyLDhdLDI5OlsyLDhdLDM0OlsyLDhdLDM5OlsyLDhdLDQ0OlsyLDhdLDQ3OlsyLDhdLDQ4OlsyLDhdLDUxOlsyLDhdLDU1OlsyLDhdLDYwOlsyLDhdfSx7NTpbMiw5XSwxNDpbMiw5XSwxNTpbMiw5XSwxOTpbMiw5XSwyOTpbMiw5XSwzNDpbMiw5XSwzOTpbMiw5XSw0NDpbMiw5XSw0NzpbMiw5XSw0ODpbMiw5XSw1MTpbMiw5XSw1NTpbMiw5XSw2MDpbMiw5XX0sezIwOjI1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjM2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6MzcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sMzk6WzIsNDZdLDQ0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NDozOCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezEzOjQwLDE1OlsxLDIwXSwxNzozOX0sezIwOjQyLDU2OjQxLDY0OjQzLDY1OlsxLDQ0XSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs0OjQ1LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ3OlsyLDQ2XSw0ODpbMiw0Nl0sNTE6WzIsNDZdLDU1OlsyLDQ2XSw2MDpbMiw0Nl19LHs1OlsyLDEwXSwxNDpbMiwxMF0sMTU6WzIsMTBdLDE4OlsyLDEwXSwxOTpbMiwxMF0sMjk6WzIsMTBdLDM0OlsyLDEwXSwzOTpbMiwxMF0sNDQ6WzIsMTBdLDQ3OlsyLDEwXSw0ODpbMiwxMF0sNTE6WzIsMTBdLDU1OlsyLDEwXSw2MDpbMiwxMF19LHsyMDo0Niw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo0Nyw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo0OCw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo0Miw1Njo0OSw2NDo0Myw2NTpbMSw0NF0sNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MzM6WzIsNzhdLDQ5OjUwLDY1OlsyLDc4XSw3MjpbMiw3OF0sODA6WzIsNzhdLDgxOlsyLDc4XSw4MjpbMiw3OF0sODM6WzIsNzhdLDg0OlsyLDc4XSw4NTpbMiw3OF19LHsyMzpbMiwzM10sMzM6WzIsMzNdLDU0OlsyLDMzXSw2NTpbMiwzM10sNjg6WzIsMzNdLDcyOlsyLDMzXSw3NTpbMiwzM10sODA6WzIsMzNdLDgxOlsyLDMzXSw4MjpbMiwzM10sODM6WzIsMzNdLDg0OlsyLDMzXSw4NTpbMiwzM119LHsyMzpbMiwzNF0sMzM6WzIsMzRdLDU0OlsyLDM0XSw2NTpbMiwzNF0sNjg6WzIsMzRdLDcyOlsyLDM0XSw3NTpbMiwzNF0sODA6WzIsMzRdLDgxOlsyLDM0XSw4MjpbMiwzNF0sODM6WzIsMzRdLDg0OlsyLDM0XSw4NTpbMiwzNF19LHsyMzpbMiwzNV0sMzM6WzIsMzVdLDU0OlsyLDM1XSw2NTpbMiwzNV0sNjg6WzIsMzVdLDcyOlsyLDM1XSw3NTpbMiwzNV0sODA6WzIsMzVdLDgxOlsyLDM1XSw4MjpbMiwzNV0sODM6WzIsMzVdLDg0OlsyLDM1XSw4NTpbMiwzNV19LHsyMzpbMiwzNl0sMzM6WzIsMzZdLDU0OlsyLDM2XSw2NTpbMiwzNl0sNjg6WzIsMzZdLDcyOlsyLDM2XSw3NTpbMiwzNl0sODA6WzIsMzZdLDgxOlsyLDM2XSw4MjpbMiwzNl0sODM6WzIsMzZdLDg0OlsyLDM2XSw4NTpbMiwzNl19LHsyMzpbMiwzN10sMzM6WzIsMzddLDU0OlsyLDM3XSw2NTpbMiwzN10sNjg6WzIsMzddLDcyOlsyLDM3XSw3NTpbMiwzN10sODA6WzIsMzddLDgxOlsyLDM3XSw4MjpbMiwzN10sODM6WzIsMzddLDg0OlsyLDM3XSw4NTpbMiwzN119LHsyMzpbMiwzOF0sMzM6WzIsMzhdLDU0OlsyLDM4XSw2NTpbMiwzOF0sNjg6WzIsMzhdLDcyOlsyLDM4XSw3NTpbMiwzOF0sODA6WzIsMzhdLDgxOlsyLDM4XSw4MjpbMiwzOF0sODM6WzIsMzhdLDg0OlsyLDM4XSw4NTpbMiwzOF19LHsyMzpbMiwzOV0sMzM6WzIsMzldLDU0OlsyLDM5XSw2NTpbMiwzOV0sNjg6WzIsMzldLDcyOlsyLDM5XSw3NTpbMiwzOV0sODA6WzIsMzldLDgxOlsyLDM5XSw4MjpbMiwzOV0sODM6WzIsMzldLDg0OlsyLDM5XSw4NTpbMiwzOV19LHsyMzpbMiw0M10sMzM6WzIsNDNdLDU0OlsyLDQzXSw2NTpbMiw0M10sNjg6WzIsNDNdLDcyOlsyLDQzXSw3NTpbMiw0M10sODA6WzIsNDNdLDgxOlsyLDQzXSw4MjpbMiw0M10sODM6WzIsNDNdLDg0OlsyLDQzXSw4NTpbMiw0M10sODc6WzEsNTFdfSx7NzI6WzEsMzVdLDg2OjUyfSx7MjM6WzIsNDVdLDMzOlsyLDQ1XSw1NDpbMiw0NV0sNjU6WzIsNDVdLDY4OlsyLDQ1XSw3MjpbMiw0NV0sNzU6WzIsNDVdLDgwOlsyLDQ1XSw4MTpbMiw0NV0sODI6WzIsNDVdLDgzOlsyLDQ1XSw4NDpbMiw0NV0sODU6WzIsNDVdLDg3OlsyLDQ1XX0sezUyOjUzLDU0OlsyLDgyXSw2NTpbMiw4Ml0sNzI6WzIsODJdLDgwOlsyLDgyXSw4MTpbMiw4Ml0sODI6WzIsODJdLDgzOlsyLDgyXSw4NDpbMiw4Ml0sODU6WzIsODJdfSx7MjU6NTQsMzg6NTYsMzk6WzEsNThdLDQzOjU3LDQ0OlsxLDU5XSw0NTo1NSw0NzpbMiw1NF19LHsyODo2MCw0Mzo2MSw0NDpbMSw1OV0sNDc6WzIsNTZdfSx7MTM6NjMsMTU6WzEsMjBdLDE4OlsxLDYyXX0sezE1OlsyLDQ4XSwxODpbMiw0OF19LHszMzpbMiw4Nl0sNTc6NjQsNjU6WzIsODZdLDcyOlsyLDg2XSw4MDpbMiw4Nl0sODE6WzIsODZdLDgyOlsyLDg2XSw4MzpbMiw4Nl0sODQ6WzIsODZdLDg1OlsyLDg2XX0sezMzOlsyLDQwXSw2NTpbMiw0MF0sNzI6WzIsNDBdLDgwOlsyLDQwXSw4MTpbMiw0MF0sODI6WzIsNDBdLDgzOlsyLDQwXSw4NDpbMiw0MF0sODU6WzIsNDBdfSx7MzM6WzIsNDFdLDY1OlsyLDQxXSw3MjpbMiw0MV0sODA6WzIsNDFdLDgxOlsyLDQxXSw4MjpbMiw0MV0sODM6WzIsNDFdLDg0OlsyLDQxXSw4NTpbMiw0MV19LHsyMDo2NSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo2Niw0NzpbMSw2N119LHszMDo2OCwzMzpbMiw1OF0sNjU6WzIsNThdLDcyOlsyLDU4XSw3NTpbMiw1OF0sODA6WzIsNThdLDgxOlsyLDU4XSw4MjpbMiw1OF0sODM6WzIsNThdLDg0OlsyLDU4XSw4NTpbMiw1OF19LHszMzpbMiw2NF0sMzU6NjksNjU6WzIsNjRdLDcyOlsyLDY0XSw3NTpbMiw2NF0sODA6WzIsNjRdLDgxOlsyLDY0XSw4MjpbMiw2NF0sODM6WzIsNjRdLDg0OlsyLDY0XSw4NTpbMiw2NF19LHsyMTo3MCwyMzpbMiw1MF0sNjU6WzIsNTBdLDcyOlsyLDUwXSw4MDpbMiw1MF0sODE6WzIsNTBdLDgyOlsyLDUwXSw4MzpbMiw1MF0sODQ6WzIsNTBdLDg1OlsyLDUwXX0sezMzOlsyLDkwXSw2MTo3MSw2NTpbMiw5MF0sNzI6WzIsOTBdLDgwOlsyLDkwXSw4MTpbMiw5MF0sODI6WzIsOTBdLDgzOlsyLDkwXSw4NDpbMiw5MF0sODU6WzIsOTBdfSx7MjA6NzUsMzM6WzIsODBdLDUwOjcyLDYzOjczLDY0Ojc2LDY1OlsxLDQ0XSw2OTo3NCw3MDo3Nyw3MTo3OCw3MjpbMSw3OV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs3MjpbMSw4MF19LHsyMzpbMiw0Ml0sMzM6WzIsNDJdLDU0OlsyLDQyXSw2NTpbMiw0Ml0sNjg6WzIsNDJdLDcyOlsyLDQyXSw3NTpbMiw0Ml0sODA6WzIsNDJdLDgxOlsyLDQyXSw4MjpbMiw0Ml0sODM6WzIsNDJdLDg0OlsyLDQyXSw4NTpbMiw0Ml0sODc6WzEsNTFdfSx7MjA6NzUsNTM6ODEsNTQ6WzIsODRdLDYzOjgyLDY0Ojc2LDY1OlsxLDQ0XSw2OTo4Myw3MDo3Nyw3MTo3OCw3MjpbMSw3OV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo4NCw0NzpbMSw2N119LHs0NzpbMiw1NV19LHs0Ojg1LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDM5OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezQ3OlsyLDIwXX0sezIwOjg2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6ODcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezI2Ojg4LDQ3OlsxLDY3XX0sezQ3OlsyLDU3XX0sezU6WzIsMTFdLDE0OlsyLDExXSwxNTpbMiwxMV0sMTk6WzIsMTFdLDI5OlsyLDExXSwzNDpbMiwxMV0sMzk6WzIsMTFdLDQ0OlsyLDExXSw0NzpbMiwxMV0sNDg6WzIsMTFdLDUxOlsyLDExXSw1NTpbMiwxMV0sNjA6WzIsMTFdfSx7MTU6WzIsNDldLDE4OlsyLDQ5XX0sezIwOjc1LDMzOlsyLDg4XSw1ODo4OSw2Mzo5MCw2NDo3Niw2NTpbMSw0NF0sNjk6OTEsNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NjU6WzIsOTRdLDY2OjkyLDY4OlsyLDk0XSw3MjpbMiw5NF0sODA6WzIsOTRdLDgxOlsyLDk0XSw4MjpbMiw5NF0sODM6WzIsOTRdLDg0OlsyLDk0XSw4NTpbMiw5NF19LHs1OlsyLDI1XSwxNDpbMiwyNV0sMTU6WzIsMjVdLDE5OlsyLDI1XSwyOTpbMiwyNV0sMzQ6WzIsMjVdLDM5OlsyLDI1XSw0NDpbMiwyNV0sNDc6WzIsMjVdLDQ4OlsyLDI1XSw1MTpbMiwyNV0sNTU6WzIsMjVdLDYwOlsyLDI1XX0sezIwOjkzLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc1LDMxOjk0LDMzOlsyLDYwXSw2Mzo5NSw2NDo3Niw2NTpbMSw0NF0sNjk6OTYsNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc1OlsyLDYwXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc1LDMzOlsyLDY2XSwzNjo5Nyw2Mzo5OCw2NDo3Niw2NTpbMSw0NF0sNjk6OTksNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc1OlsyLDY2XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc1LDIyOjEwMCwyMzpbMiw1Ml0sNjM6MTAxLDY0Ojc2LDY1OlsxLDQ0XSw2OToxMDIsNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NzUsMzM6WzIsOTJdLDYyOjEwMyw2MzoxMDQsNjQ6NzYsNjU6WzEsNDRdLDY5OjEwNSw3MDo3Nyw3MTo3OCw3MjpbMSw3OV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHszMzpbMSwxMDZdfSx7MzM6WzIsNzldLDY1OlsyLDc5XSw3MjpbMiw3OV0sODA6WzIsNzldLDgxOlsyLDc5XSw4MjpbMiw3OV0sODM6WzIsNzldLDg0OlsyLDc5XSw4NTpbMiw3OV19LHszMzpbMiw4MV19LHsyMzpbMiwyN10sMzM6WzIsMjddLDU0OlsyLDI3XSw2NTpbMiwyN10sNjg6WzIsMjddLDcyOlsyLDI3XSw3NTpbMiwyN10sODA6WzIsMjddLDgxOlsyLDI3XSw4MjpbMiwyN10sODM6WzIsMjddLDg0OlsyLDI3XSw4NTpbMiwyN119LHsyMzpbMiwyOF0sMzM6WzIsMjhdLDU0OlsyLDI4XSw2NTpbMiwyOF0sNjg6WzIsMjhdLDcyOlsyLDI4XSw3NTpbMiwyOF0sODA6WzIsMjhdLDgxOlsyLDI4XSw4MjpbMiwyOF0sODM6WzIsMjhdLDg0OlsyLDI4XSw4NTpbMiwyOF19LHsyMzpbMiwzMF0sMzM6WzIsMzBdLDU0OlsyLDMwXSw2ODpbMiwzMF0sNzE6MTA3LDcyOlsxLDEwOF0sNzU6WzIsMzBdfSx7MjM6WzIsOThdLDMzOlsyLDk4XSw1NDpbMiw5OF0sNjg6WzIsOThdLDcyOlsyLDk4XSw3NTpbMiw5OF19LHsyMzpbMiw0NV0sMzM6WzIsNDVdLDU0OlsyLDQ1XSw2NTpbMiw0NV0sNjg6WzIsNDVdLDcyOlsyLDQ1XSw3MzpbMSwxMDldLDc1OlsyLDQ1XSw4MDpbMiw0NV0sODE6WzIsNDVdLDgyOlsyLDQ1XSw4MzpbMiw0NV0sODQ6WzIsNDVdLDg1OlsyLDQ1XSw4NzpbMiw0NV19LHsyMzpbMiw0NF0sMzM6WzIsNDRdLDU0OlsyLDQ0XSw2NTpbMiw0NF0sNjg6WzIsNDRdLDcyOlsyLDQ0XSw3NTpbMiw0NF0sODA6WzIsNDRdLDgxOlsyLDQ0XSw4MjpbMiw0NF0sODM6WzIsNDRdLDg0OlsyLDQ0XSw4NTpbMiw0NF0sODc6WzIsNDRdfSx7NTQ6WzEsMTEwXX0sezU0OlsyLDgzXSw2NTpbMiw4M10sNzI6WzIsODNdLDgwOlsyLDgzXSw4MTpbMiw4M10sODI6WzIsODNdLDgzOlsyLDgzXSw4NDpbMiw4M10sODU6WzIsODNdfSx7NTQ6WzIsODVdfSx7NTpbMiwxM10sMTQ6WzIsMTNdLDE1OlsyLDEzXSwxOTpbMiwxM10sMjk6WzIsMTNdLDM0OlsyLDEzXSwzOTpbMiwxM10sNDQ6WzIsMTNdLDQ3OlsyLDEzXSw0ODpbMiwxM10sNTE6WzIsMTNdLDU1OlsyLDEzXSw2MDpbMiwxM119LHszODo1NiwzOTpbMSw1OF0sNDM6NTcsNDQ6WzEsNTldLDQ1OjExMiw0NjoxMTEsNDc6WzIsNzZdfSx7MzM6WzIsNzBdLDQwOjExMyw2NTpbMiw3MF0sNzI6WzIsNzBdLDc1OlsyLDcwXSw4MDpbMiw3MF0sODE6WzIsNzBdLDgyOlsyLDcwXSw4MzpbMiw3MF0sODQ6WzIsNzBdLDg1OlsyLDcwXX0sezQ3OlsyLDE4XX0sezU6WzIsMTRdLDE0OlsyLDE0XSwxNTpbMiwxNF0sMTk6WzIsMTRdLDI5OlsyLDE0XSwzNDpbMiwxNF0sMzk6WzIsMTRdLDQ0OlsyLDE0XSw0NzpbMiwxNF0sNDg6WzIsMTRdLDUxOlsyLDE0XSw1NTpbMiwxNF0sNjA6WzIsMTRdfSx7MzM6WzEsMTE0XX0sezMzOlsyLDg3XSw2NTpbMiw4N10sNzI6WzIsODddLDgwOlsyLDg3XSw4MTpbMiw4N10sODI6WzIsODddLDgzOlsyLDg3XSw4NDpbMiw4N10sODU6WzIsODddfSx7MzM6WzIsODldfSx7MjA6NzUsNjM6MTE2LDY0Ojc2LDY1OlsxLDQ0XSw2NzoxMTUsNjg6WzIsOTZdLDY5OjExNyw3MDo3Nyw3MTo3OCw3MjpbMSw3OV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHszMzpbMSwxMThdfSx7MzI6MTE5LDMzOlsyLDYyXSw3NDoxMjAsNzU6WzEsMTIxXX0sezMzOlsyLDU5XSw2NTpbMiw1OV0sNzI6WzIsNTldLDc1OlsyLDU5XSw4MDpbMiw1OV0sODE6WzIsNTldLDgyOlsyLDU5XSw4MzpbMiw1OV0sODQ6WzIsNTldLDg1OlsyLDU5XX0sezMzOlsyLDYxXSw3NTpbMiw2MV19LHszMzpbMiw2OF0sMzc6MTIyLDc0OjEyMyw3NTpbMSwxMjFdfSx7MzM6WzIsNjVdLDY1OlsyLDY1XSw3MjpbMiw2NV0sNzU6WzIsNjVdLDgwOlsyLDY1XSw4MTpbMiw2NV0sODI6WzIsNjVdLDgzOlsyLDY1XSw4NDpbMiw2NV0sODU6WzIsNjVdfSx7MzM6WzIsNjddLDc1OlsyLDY3XX0sezIzOlsxLDEyNF19LHsyMzpbMiw1MV0sNjU6WzIsNTFdLDcyOlsyLDUxXSw4MDpbMiw1MV0sODE6WzIsNTFdLDgyOlsyLDUxXSw4MzpbMiw1MV0sODQ6WzIsNTFdLDg1OlsyLDUxXX0sezIzOlsyLDUzXX0sezMzOlsxLDEyNV19LHszMzpbMiw5MV0sNjU6WzIsOTFdLDcyOlsyLDkxXSw4MDpbMiw5MV0sODE6WzIsOTFdLDgyOlsyLDkxXSw4MzpbMiw5MV0sODQ6WzIsOTFdLDg1OlsyLDkxXX0sezMzOlsyLDkzXX0sezU6WzIsMjJdLDE0OlsyLDIyXSwxNTpbMiwyMl0sMTk6WzIsMjJdLDI5OlsyLDIyXSwzNDpbMiwyMl0sMzk6WzIsMjJdLDQ0OlsyLDIyXSw0NzpbMiwyMl0sNDg6WzIsMjJdLDUxOlsyLDIyXSw1NTpbMiwyMl0sNjA6WzIsMjJdfSx7MjM6WzIsOTldLDMzOlsyLDk5XSw1NDpbMiw5OV0sNjg6WzIsOTldLDcyOlsyLDk5XSw3NTpbMiw5OV19LHs3MzpbMSwxMDldfSx7MjA6NzUsNjM6MTI2LDY0Ojc2LDY1OlsxLDQ0XSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs1OlsyLDIzXSwxNDpbMiwyM10sMTU6WzIsMjNdLDE5OlsyLDIzXSwyOTpbMiwyM10sMzQ6WzIsMjNdLDM5OlsyLDIzXSw0NDpbMiwyM10sNDc6WzIsMjNdLDQ4OlsyLDIzXSw1MTpbMiwyM10sNTU6WzIsMjNdLDYwOlsyLDIzXX0sezQ3OlsyLDE5XX0sezQ3OlsyLDc3XX0sezIwOjc1LDMzOlsyLDcyXSw0MToxMjcsNjM6MTI4LDY0Ojc2LDY1OlsxLDQ0XSw2OToxMjksNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc1OlsyLDcyXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezU6WzIsMjRdLDE0OlsyLDI0XSwxNTpbMiwyNF0sMTk6WzIsMjRdLDI5OlsyLDI0XSwzNDpbMiwyNF0sMzk6WzIsMjRdLDQ0OlsyLDI0XSw0NzpbMiwyNF0sNDg6WzIsMjRdLDUxOlsyLDI0XSw1NTpbMiwyNF0sNjA6WzIsMjRdfSx7Njg6WzEsMTMwXX0sezY1OlsyLDk1XSw2ODpbMiw5NV0sNzI6WzIsOTVdLDgwOlsyLDk1XSw4MTpbMiw5NV0sODI6WzIsOTVdLDgzOlsyLDk1XSw4NDpbMiw5NV0sODU6WzIsOTVdfSx7Njg6WzIsOTddfSx7NTpbMiwyMV0sMTQ6WzIsMjFdLDE1OlsyLDIxXSwxOTpbMiwyMV0sMjk6WzIsMjFdLDM0OlsyLDIxXSwzOTpbMiwyMV0sNDQ6WzIsMjFdLDQ3OlsyLDIxXSw0ODpbMiwyMV0sNTE6WzIsMjFdLDU1OlsyLDIxXSw2MDpbMiwyMV19LHszMzpbMSwxMzFdfSx7MzM6WzIsNjNdfSx7NzI6WzEsMTMzXSw3NjoxMzJ9LHszMzpbMSwxMzRdfSx7MzM6WzIsNjldfSx7MTU6WzIsMTJdfSx7MTQ6WzIsMjZdLDE1OlsyLDI2XSwxOTpbMiwyNl0sMjk6WzIsMjZdLDM0OlsyLDI2XSw0NzpbMiwyNl0sNDg6WzIsMjZdLDUxOlsyLDI2XSw1NTpbMiwyNl0sNjA6WzIsMjZdfSx7MjM6WzIsMzFdLDMzOlsyLDMxXSw1NDpbMiwzMV0sNjg6WzIsMzFdLDcyOlsyLDMxXSw3NTpbMiwzMV19LHszMzpbMiw3NF0sNDI6MTM1LDc0OjEzNiw3NTpbMSwxMjFdfSx7MzM6WzIsNzFdLDY1OlsyLDcxXSw3MjpbMiw3MV0sNzU6WzIsNzFdLDgwOlsyLDcxXSw4MTpbMiw3MV0sODI6WzIsNzFdLDgzOlsyLDcxXSw4NDpbMiw3MV0sODU6WzIsNzFdfSx7MzM6WzIsNzNdLDc1OlsyLDczXX0sezIzOlsyLDI5XSwzMzpbMiwyOV0sNTQ6WzIsMjldLDY1OlsyLDI5XSw2ODpbMiwyOV0sNzI6WzIsMjldLDc1OlsyLDI5XSw4MDpbMiwyOV0sODE6WzIsMjldLDgyOlsyLDI5XSw4MzpbMiwyOV0sODQ6WzIsMjldLDg1OlsyLDI5XX0sezE0OlsyLDE1XSwxNTpbMiwxNV0sMTk6WzIsMTVdLDI5OlsyLDE1XSwzNDpbMiwxNV0sMzk6WzIsMTVdLDQ0OlsyLDE1XSw0NzpbMiwxNV0sNDg6WzIsMTVdLDUxOlsyLDE1XSw1NTpbMiwxNV0sNjA6WzIsMTVdfSx7NzI6WzEsMTM4XSw3NzpbMSwxMzddfSx7NzI6WzIsMTAwXSw3NzpbMiwxMDBdfSx7MTQ6WzIsMTZdLDE1OlsyLDE2XSwxOTpbMiwxNl0sMjk6WzIsMTZdLDM0OlsyLDE2XSw0NDpbMiwxNl0sNDc6WzIsMTZdLDQ4OlsyLDE2XSw1MTpbMiwxNl0sNTU6WzIsMTZdLDYwOlsyLDE2XX0sezMzOlsxLDEzOV19LHszMzpbMiw3NV19LHszMzpbMiwzMl19LHs3MjpbMiwxMDFdLDc3OlsyLDEwMV19LHsxNDpbMiwxN10sMTU6WzIsMTddLDE5OlsyLDE3XSwyOTpbMiwxN10sMzQ6WzIsMTddLDM5OlsyLDE3XSw0NDpbMiwxN10sNDc6WzIsMTddLDQ4OlsyLDE3XSw1MTpbMiwxN10sNTU6WzIsMTddLDYwOlsyLDE3XX1dLFxuZGVmYXVsdEFjdGlvbnM6IHs0OlsyLDFdLDU1OlsyLDU1XSw1NzpbMiwyMF0sNjE6WzIsNTddLDc0OlsyLDgxXSw4MzpbMiw4NV0sODc6WzIsMThdLDkxOlsyLDg5XSwxMDI6WzIsNTNdLDEwNTpbMiw5M10sMTExOlsyLDE5XSwxMTI6WzIsNzddLDExNzpbMiw5N10sMTIwOlsyLDYzXSwxMjM6WzIsNjldLDEyNDpbMiwxMl0sMTM2OlsyLDc1XSwxMzc6WzIsMzJdfSxcbnBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG59LFxucGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgIHRoaXMubGV4ZXIuc2V0SW5wdXQoaW5wdXQpO1xuICAgIHRoaXMubGV4ZXIueXkgPSB0aGlzLnl5O1xuICAgIHRoaXMueXkubGV4ZXIgPSB0aGlzLmxleGVyO1xuICAgIHRoaXMueXkucGFyc2VyID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRoaXMubGV4ZXIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIHRoaXMubGV4ZXIueXlsbG9jID0ge307XG4gICAgdmFyIHl5bG9jID0gdGhpcy5sZXhlci55eWxsb2M7XG4gICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgIHZhciByYW5nZXMgPSB0aGlzLmxleGVyLm9wdGlvbnMgJiYgdGhpcy5sZXhlci5vcHRpb25zLnJhbmdlcztcbiAgICBpZiAodHlwZW9mIHRoaXMueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0aGlzLnl5LnBhcnNlRXJyb3I7XG4gICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHNlbGYubGV4ZXIubGV4KCkgfHwgMTtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfVxuICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICAgIGlmICghcmVjb3ZlcmluZykge1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxleGVyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgdGhpcy5sZXhlci5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IDE/XCJlbmQgb2YgaW5wdXRcIjpcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7dGV4dDogdGhpcy5sZXhlci5tYXRjaCwgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCwgbGluZTogdGhpcy5sZXhlci55eWxpbmVubywgbG9jOiB5eWxvYywgZXhwZWN0ZWQ6IGV4cGVjdGVkfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHRoaXMubGV4ZXIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHRoaXMubGV4ZXIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgeXlsZW5nID0gdGhpcy5sZXhlci55eWxlbmc7XG4gICAgICAgICAgICAgICAgeXl0ZXh0ID0gdGhpcy5sZXhlci55eXRleHQ7XG4gICAgICAgICAgICAgICAgeXlsaW5lbm8gPSB0aGlzLmxleGVyLnl5bGluZW5vO1xuICAgICAgICAgICAgICAgIHl5bG9jID0gdGhpcy5sZXhlci55eWxsb2M7XG4gICAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKVxuICAgICAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge2ZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSwgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSwgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbiwgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW59O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW2xzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHl5dmFsLCB5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHRoaXMueXksIGFjdGlvblsxXSwgdnN0YWNrLCBsc3RhY2spO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxufTtcbi8qIEppc29uIGdlbmVyYXRlZCBsZXhlciAqL1xudmFyIGxleGVyID0gKGZ1bmN0aW9uKCl7XG52YXIgbGV4ZXIgPSAoe0VPRjoxLFxucGFyc2VFcnJvcjpmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgfSxcbnNldElucHV0OmZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fbGVzcyA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSAnJztcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFsnSU5JVElBTCddO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLDBdO1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5pbnB1dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuXG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9LFxudW5wdXQ6ZnVuY3Rpb24gKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGgtbGVuLTEpO1xuICAgICAgICAvL3RoaXMueXlsZW5nIC09IGxlbjtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aC0xKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoLTEpO1xuXG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGgtMSkgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGgtMTtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcblxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubysxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/XG4gICAgICAgICAgICAgIChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGg6XG4gICAgICAgICAgICAgIHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbm1vcmU6ZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbmxlc3M6ZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICB9LFxucGFzdElucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIH0sXG51cGNvbWluZ0lucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAtbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwyMCkrKG5leHQubGVuZ3RoID4gMjAgPyAnLi4uJzonJykpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICB9LFxuc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMrXCJeXCI7XG4gICAgfSxcbm5leHQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgICB2YXIgdG9rZW4sXG4gICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgIHRlbXBNYXRjaCxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgbGluZXM7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgICAgdGhpcy55eXRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggPSAnJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaT0wO2kgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgICAgICBpZiAobGluZXMpIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy55eWxsb2MgPSB7Zmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGluZXNbbGluZXMubGVuZ3RoLTFdLmxlbmd0aC1saW5lc1tsaW5lcy5sZW5ndGgtMV0ubWF0Y2goL1xccj9cXG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGh9O1xuICAgICAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgcnVsZXNbaW5kZXhdLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcignTGV4aWNhbCBlcnJvciBvbiBsaW5lICcrKHRoaXMueXlsaW5lbm8rMSkrJy4gVW5yZWNvZ25pemVkIHRleHQuXFxuJyt0aGlzLnNob3dQb3NpdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICB7dGV4dDogXCJcIiwgdG9rZW46IG51bGwsIGxpbmU6IHRoaXMueXlsaW5lbm99KTtcbiAgICAgICAgfVxuICAgIH0sXG5sZXg6ZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29uZGl0aW9uKTtcbiAgICB9LFxucG9wU3RhdGU6ZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgIH0sXG5fY3VycmVudFJ1bGVzOmZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM7XG4gICAgfSxcbnRvcFN0YXRlOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl07XG4gICAgfSxcbnB1c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgIH19KTtcbmxleGVyLm9wdGlvbnMgPSB7fTtcbmxleGVyLnBlcmZvcm1BY3Rpb24gPSBmdW5jdGlvbiBhbm9ueW1vdXMoeXkseXlfLCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsWVlfU1RBUlRcbi8qKi8pIHtcblxuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoc3RhcnQsIHl5Xy55eWxlbmctZW5kKTtcbn1cblxuXG52YXIgWVlTVEFURT1ZWV9TVEFSVFxuc3dpdGNoKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbmNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dC5zbGljZSgtMikgPT09IFwiXFxcXFxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcIm11XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoeXlfLnl5dGV4dC5zbGljZSgtMSkgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXAoMCwxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwiZW11XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih5eV8ueXl0ZXh0KSByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAxOnJldHVybiAxNTtcbmJyZWFrO1xuY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYnJlYWs7XG5jYXNlIDM6dGhpcy5iZWdpbigncmF3Jyk7IHJldHVybiAxNTtcbmJyZWFrO1xuY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgYmUgdXNpbmcgYHRoaXMudG9wU3RhdGUoKWAgYmVsb3csIGJ1dCBpdCBjdXJyZW50bHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRoZSBzZWNvbmQgdG9wIGluc3RlYWQgb2YgdGhlIGZpcnN0IHRvcC4gT3BlbmVkIGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXNzdWUgYWJvdXQgaXQgYXQgaHR0cHM6Ly9naXRodWIuY29tL3phYWNoL2ppc29uL2lzc3Vlcy8yOTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSA9PT0gJ3JhdycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc3Vic3RyKDUsIHl5Xy55eWxlbmctOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0VORF9SQVdfQkxPQ0snO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYnJlYWs7XG5jYXNlIDU6IHJldHVybiAxNTsgXG5icmVhaztcbmNhc2UgNjpcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICByZXR1cm4gMTQ7XG5cbmJyZWFrO1xuY2FzZSA3OnJldHVybiA2NTtcbmJyZWFrO1xuY2FzZSA4OnJldHVybiA2ODtcbmJyZWFrO1xuY2FzZSA5OiByZXR1cm4gMTk7IFxuYnJlYWs7XG5jYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKCdyYXcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAxMTpyZXR1cm4gNTU7XG5icmVhaztcbmNhc2UgMTI6cmV0dXJuIDYwO1xuYnJlYWs7XG5jYXNlIDEzOnJldHVybiAyOTtcbmJyZWFrO1xuY2FzZSAxNDpyZXR1cm4gNDc7XG5icmVhaztcbmNhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpOyByZXR1cm4gNDQ7XG5icmVhaztcbmNhc2UgMTY6dGhpcy5wb3BTdGF0ZSgpOyByZXR1cm4gNDQ7XG5icmVhaztcbmNhc2UgMTc6cmV0dXJuIDM0O1xuYnJlYWs7XG5jYXNlIDE4OnJldHVybiAzOTtcbmJyZWFrO1xuY2FzZSAxOTpyZXR1cm4gNTE7XG5icmVhaztcbmNhc2UgMjA6cmV0dXJuIDQ4O1xuYnJlYWs7XG5jYXNlIDIxOlxuICB0aGlzLnVucHV0KHl5Xy55eXRleHQpO1xuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHRoaXMuYmVnaW4oJ2NvbScpO1xuXG5icmVhaztcbmNhc2UgMjI6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgMjM6cmV0dXJuIDQ4O1xuYnJlYWs7XG5jYXNlIDI0OnJldHVybiA3MztcbmJyZWFrO1xuY2FzZSAyNTpyZXR1cm4gNzI7XG5icmVhaztcbmNhc2UgMjY6cmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDI3OnJldHVybiA4NztcbmJyZWFrO1xuY2FzZSAyODovLyBpZ25vcmUgd2hpdGVzcGFjZVxuYnJlYWs7XG5jYXNlIDI5OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDU0O1xuYnJlYWs7XG5jYXNlIDMwOnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDMzO1xuYnJlYWs7XG5jYXNlIDMxOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpOyByZXR1cm4gODA7XG5icmVhaztcbmNhc2UgMzI6eXlfLnl5dGV4dCA9IHN0cmlwKDEsMikucmVwbGFjZSgvXFxcXCcvZyxcIidcIik7IHJldHVybiA4MDtcbmJyZWFrO1xuY2FzZSAzMzpyZXR1cm4gODU7XG5icmVhaztcbmNhc2UgMzQ6cmV0dXJuIDgyO1xuYnJlYWs7XG5jYXNlIDM1OnJldHVybiA4MjtcbmJyZWFrO1xuY2FzZSAzNjpyZXR1cm4gODM7XG5icmVhaztcbmNhc2UgMzc6cmV0dXJuIDg0O1xuYnJlYWs7XG5jYXNlIDM4OnJldHVybiA4MTtcbmJyZWFrO1xuY2FzZSAzOTpyZXR1cm4gNzU7XG5icmVhaztcbmNhc2UgNDA6cmV0dXJuIDc3O1xuYnJlYWs7XG5jYXNlIDQxOnJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSA0Mjp5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9cXFxcKFtcXFxcXFxdXSkvZywnJDEnKTsgcmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDQzOnJldHVybiAnSU5WQUxJRCc7XG5icmVhaztcbmNhc2UgNDQ6cmV0dXJuIDU7XG5icmVhaztcbn1cbn07XG5sZXhlci5ydWxlcyA9IFsvXig/OlteXFx4MDBdKj8oPz0oXFx7XFx7KSkpLywvXig/OlteXFx4MDBdKykvLC9eKD86W15cXHgwMF17Mix9Pyg/PShcXHtcXHt8XFxcXFxce1xce3xcXFxcXFxcXFxce1xce3wkKSkpLywvXig/Olxce1xce1xce1xceyg/PVteXFwvXSkpLywvXig/Olxce1xce1xce1xce1xcL1teXFxzIVwiIyUtLFxcLlxcLzstPkBcXFstXFxeYFxcey1+XSsoPz1bPX1cXHNcXC8uXSlcXH1cXH1cXH1cXH0pLywvXig/OlteXFx4MDBdKj8oPz0oXFx7XFx7XFx7XFx7KSkpLywvXig/OltcXHNcXFNdKj8tLSh+KT9cXH1cXH0pLywvXig/OlxcKCkvLC9eKD86XFwpKS8sL14oPzpcXHtcXHtcXHtcXHspLywvXig/OlxcfVxcfVxcfVxcfSkvLC9eKD86XFx7XFx7KH4pPz4pLywvXig/Olxce1xceyh+KT8jPikvLC9eKD86XFx7XFx7KH4pPyNcXCo/KS8sL14oPzpcXHtcXHsofik/XFwvKS8sL14oPzpcXHtcXHsofik/XFxeXFxzKih+KT9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXHMqZWxzZVxccyoofik/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFxeKS8sL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXGIpLywvXig/Olxce1xceyh+KT9cXHspLywvXig/Olxce1xceyh+KT8mKS8sL14oPzpcXHtcXHsofik/IS0tKS8sL14oPzpcXHtcXHsofik/IVtcXHNcXFNdKj9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXCo/KS8sL14oPzo9KS8sL14oPzpcXC5cXC4pLywvXig/OlxcLig/PShbPX59XFxzXFwvLil8XSkpKS8sL14oPzpbXFwvLl0pLywvXig/OlxccyspLywvXig/OlxcfSh+KT9cXH1cXH0pLywvXig/Oih+KT9cXH1cXH0pLywvXig/OlwiKFxcXFxbXCJdfFteXCJdKSpcIikvLC9eKD86JyhcXFxcWyddfFteJ10pKicpLywvXig/OkApLywvXig/OnRydWUoPz0oW359XFxzKV0pKSkvLC9eKD86ZmFsc2UoPz0oW359XFxzKV0pKSkvLC9eKD86dW5kZWZpbmVkKD89KFt+fVxccyldKSkpLywvXig/Om51bGwoPz0oW359XFxzKV0pKSkvLC9eKD86LT9bMC05XSsoPzpcXC5bMC05XSspPyg/PShbfn1cXHMpXSkpKS8sL14oPzphc1xccytcXHwpLywvXig/OlxcfCkvLC9eKD86KFteXFxzIVwiIyUtLFxcLlxcLzstPkBcXFstXFxeYFxcey1+XSsoPz0oWz1+fVxcc1xcLy4pfF0pKSkpLywvXig/OlxcWyhcXFxcXFxdfFteXFxdXSkqXFxdKS8sL14oPzouKS8sL14oPzokKS9dO1xubGV4ZXIuY29uZGl0aW9ucyA9IHtcIm11XCI6e1wicnVsZXNcIjpbNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDRdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiZW11XCI6e1wicnVsZXNcIjpbMl0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJjb21cIjp7XCJydWxlc1wiOls2XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcInJhd1wiOntcInJ1bGVzXCI6WzMsNCw1XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcIklOSVRJQUxcIjp7XCJydWxlc1wiOlswLDEsNDRdLFwiaW5jbHVzaXZlXCI6dHJ1ZX19O1xucmV0dXJuIGxleGVyO30pKClcbnBhcnNlci5sZXhlciA9IGxleGVyO1xuZnVuY3Rpb24gUGFyc2VyICgpIHsgdGhpcy55eSA9IHt9OyB9UGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjtwYXJzZXIuUGFyc2VyID0gUGFyc2VyO1xucmV0dXJuIG5ldyBQYXJzZXI7XG59KSgpO2V4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzWydkZWZhdWx0J10gPSBoYW5kbGViYXJzO1xuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/printer.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/printer.js deleted file mode 100644 index 069645da2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/printer.js +++ /dev/null @@ -1,186 +0,0 @@ -/* eslint-disable new-cap */ -'use strict'; - -exports.__esModule = true; -exports.print = print; -exports.PrintVisitor = PrintVisitor; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _visitor = require('./visitor'); - -var _visitor2 = _interopRequireDefault(_visitor); - -function print(ast) { - return new PrintVisitor().accept(ast); -} - -function PrintVisitor() { - this.padding = 0; -} - -PrintVisitor.prototype = new _visitor2['default'](); - -PrintVisitor.prototype.pad = function (string) { - var out = ''; - - for (var i = 0, l = this.padding; i < l; i++) { - out += ' '; - } - - out += string + '\n'; - return out; -}; - -PrintVisitor.prototype.Program = function (program) { - var out = '', - body = program.body, - i = undefined, - l = undefined; - - if (program.blockParams) { - var blockParams = 'BLOCK PARAMS: ['; - for (i = 0, l = program.blockParams.length; i < l; i++) { - blockParams += ' ' + program.blockParams[i]; - } - blockParams += ' ]'; - out += this.pad(blockParams); - } - - for (i = 0, l = body.length; i < l; i++) { - out += this.accept(body[i]); - } - - this.padding--; - - return out; -}; - -PrintVisitor.prototype.MustacheStatement = function (mustache) { - return this.pad('{{ ' + this.SubExpression(mustache) + ' }}'); -}; -PrintVisitor.prototype.Decorator = function (mustache) { - return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}'); -}; - -PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) { - var out = ''; - - out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:'); - this.padding++; - out += this.pad(this.SubExpression(block)); - if (block.program) { - out += this.pad('PROGRAM:'); - this.padding++; - out += this.accept(block.program); - this.padding--; - } - if (block.inverse) { - if (block.program) { - this.padding++; - } - out += this.pad('{{^}}'); - this.padding++; - out += this.accept(block.inverse); - this.padding--; - if (block.program) { - this.padding--; - } - } - this.padding--; - - return out; -}; - -PrintVisitor.prototype.PartialStatement = function (partial) { - var content = 'PARTIAL:' + partial.name.original; - if (partial.params[0]) { - content += ' ' + this.accept(partial.params[0]); - } - if (partial.hash) { - content += ' ' + this.accept(partial.hash); - } - return this.pad('{{> ' + content + ' }}'); -}; -PrintVisitor.prototype.PartialBlockStatement = function (partial) { - var content = 'PARTIAL BLOCK:' + partial.name.original; - if (partial.params[0]) { - content += ' ' + this.accept(partial.params[0]); - } - if (partial.hash) { - content += ' ' + this.accept(partial.hash); - } - - content += ' ' + this.pad('PROGRAM:'); - this.padding++; - content += this.accept(partial.program); - this.padding--; - - return this.pad('{{> ' + content + ' }}'); -}; - -PrintVisitor.prototype.ContentStatement = function (content) { - return this.pad("CONTENT[ '" + content.value + "' ]"); -}; - -PrintVisitor.prototype.CommentStatement = function (comment) { - return this.pad("{{! '" + comment.value + "' }}"); -}; - -PrintVisitor.prototype.SubExpression = function (sexpr) { - var params = sexpr.params, - paramStrings = [], - hash = undefined; - - for (var i = 0, l = params.length; i < l; i++) { - paramStrings.push(this.accept(params[i])); - } - - params = '[' + paramStrings.join(', ') + ']'; - - hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : ''; - - return this.accept(sexpr.path) + ' ' + params + hash; -}; - -PrintVisitor.prototype.PathExpression = function (id) { - var path = id.parts.join('/'); - return (id.data ? '@' : '') + 'PATH:' + path; -}; - -PrintVisitor.prototype.StringLiteral = function (string) { - return '"' + string.value + '"'; -}; - -PrintVisitor.prototype.NumberLiteral = function (number) { - return 'NUMBER{' + number.value + '}'; -}; - -PrintVisitor.prototype.BooleanLiteral = function (bool) { - return 'BOOLEAN{' + bool.value + '}'; -}; - -PrintVisitor.prototype.UndefinedLiteral = function () { - return 'UNDEFINED'; -}; - -PrintVisitor.prototype.NullLiteral = function () { - return 'NULL'; -}; - -PrintVisitor.prototype.Hash = function (hash) { - var pairs = hash.pairs, - joinedPairs = []; - - for (var i = 0, l = pairs.length; i < l; i++) { - joinedPairs.push(this.accept(pairs[i])); - } - - return 'HASH{' + joinedPairs.join(', ') + '}'; -}; -PrintVisitor.prototype.HashPair = function (pair) { - return pair.key + '=' + this.accept(pair.value); -}; -/* eslint-enable new-cap */ -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3ByaW50ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozt1QkFDb0IsV0FBVzs7OztBQUV4QixTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDekIsU0FBTyxJQUFJLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN2Qzs7QUFFTSxTQUFTLFlBQVksR0FBRztBQUM3QixNQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztDQUNsQjs7QUFFRCxZQUFZLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRXZDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFVBQVMsTUFBTSxFQUFFO0FBQzVDLE1BQUksR0FBRyxHQUFHLEVBQUUsQ0FBQzs7QUFFYixPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLE9BQUcsSUFBSSxJQUFJLENBQUM7R0FDYjs7QUFFRCxLQUFHLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNyQixTQUFPLEdBQUcsQ0FBQztDQUNaLENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDakQsTUFBSSxHQUFHLEdBQUcsRUFBRTtNQUNSLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSTtNQUNuQixDQUFDLFlBQUE7TUFBRSxDQUFDLFlBQUEsQ0FBQzs7QUFFVCxNQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7QUFDdkIsUUFBSSxXQUFXLEdBQUcsaUJBQWlCLENBQUM7QUFDcEMsU0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMs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SUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0dBQ3pDOztBQUVELFNBQU8sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0NBQy9DLENBQUM7QUFDRixZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxVQUFTLElBQUksRUFBRTtBQUMvQyxTQUFPLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0NBQ2pELENBQUMiLCJmaWxlIjoicHJpbnRlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5ldy1jYXAgKi9cbmltcG9ydCBWaXNpdG9yIGZyb20gJy4vdmlzaXRvcic7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmludChhc3QpIHtcbiAgcmV0dXJuIG5ldyBQcmludFZpc2l0b3IoKS5hY2NlcHQoYXN0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFByaW50VmlzaXRvcigpIHtcbiAgdGhpcy5wYWRkaW5nID0gMDtcbn1cblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZSA9IG5ldyBWaXNpdG9yKCk7XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUucGFkID0gZnVuY3Rpb24oc3RyaW5nKSB7XG4gIGxldCBvdXQgPSAnJztcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMucGFkZGluZzsgaSA8IGw7IGkrKykge1xuICAgIG91dCArPSAnICAnO1xuICB9XG5cbiAgb3V0ICs9IHN0cmluZyArICdcXG4nO1xuICByZXR1cm4gb3V0O1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5Qcm9ncmFtID0gZnVuY3Rpb24ocHJvZ3JhbSkge1xuICBsZXQgb3V0ID0gJycsXG4gICAgICBib2R5ID0gcHJvZ3JhbS5ib2R5LFxuICAgICAgaSwgbDtcblxuICBpZiAocHJvZ3JhbS5ibG9ja1BhcmFtcykge1xuICAgIGxldCBibG9ja1BhcmFtcyA9ICdCTE9DSyBQQVJBTVM6IFsnO1xuICAgIGZvciAoaSA9IDAsIGwgPSBwcm9ncmFtLmJsb2NrUGFyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgIGJsb2NrUGFyYW1zICs9ICcgJyArIHByb2dyYW0uYmxvY2tQYXJhbXNbaV07XG4gICAgfVxuICAgIGJsb2NrUGFyYW1zICs9ICcgXSc7XG4gICAgb3V0ICs9IHRoaXMucGFkKGJsb2NrUGFyYW1zKTtcbiAgfVxuXG4gIGZvciAoaSA9IDAsIGwgPSBib2R5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChib2R5W2ldKTtcbiAgfVxuXG4gIHRoaXMucGFkZGluZy0tO1xuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLk11c3RhY2hlU3RhdGVtZW50ID0gZnVuY3Rpb24obXVzdGFjaGUpIHtcbiAgcmV0dXJuIHRoaXMucGFkKCd7eyAnICsgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKSArICcgfX0nKTtcbn07XG5QcmludFZpc2l0b3IucHJvdG90eXBlLkRlY29yYXRvciA9IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gIHJldHVybiB0aGlzLnBhZCgne3sgRElSRUNUSVZFICcgKyB0aGlzLlN1YkV4cHJlc3Npb24obXVzdGFjaGUpICsgJyB9fScpO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5CbG9ja1N0YXRlbWVudCA9XG5QcmludFZpc2l0b3IucHJvdG90eXBlLkRlY29yYXRvckJsb2NrID0gZnVuY3Rpb24oYmxvY2spIHtcbiAgbGV0IG91dCA9ICcnO1xuXG4gIG91dCArPSB0aGlzLnBhZCgoYmxvY2sudHlwZSA9PT0gJ0RlY29yYXRvckJsb2NrJyA/ICdESVJFQ1RJVkUgJyA6ICcnKSArICdCTE9DSzonKTtcbiAgdGhpcy5wYWRkaW5nKys7XG4gIG91dCArPSB0aGlzLnBhZCh0aGlzLlN1YkV4cHJlc3Npb24oYmxvY2spKTtcbiAgaWYgKGJsb2NrLnByb2dyYW0pIHtcbiAgICBvdXQgKz0gdGhpcy5wYWQoJ1BST0dSQU06Jyk7XG4gICAgdGhpcy5wYWRkaW5nKys7XG4gICAgb3V0ICs9IHRoaXMuYWNjZXB0KGJsb2NrLnByb2dyYW0pO1xuICAgIHRoaXMucGFkZGluZy0tO1xuICB9XG4gIGlmIChibG9jay5pbnZlcnNlKSB7XG4gICAgaWYgKGJsb2NrLnByb2dyYW0pIHsgdGhpcy5wYWRkaW5nKys7IH1cbiAgICBvdXQgKz0gdGhpcy5wYWQoJ3t7Xn19Jyk7XG4gICAgdGhpcy5wYWRkaW5nKys7XG4gICAgb3V0ICs9IHRoaXMuYWNjZXB0KGJsb2NrLmludmVyc2UpO1xuICAgIHRoaXMucGFkZGluZy0tO1xuICAgIGlmIChibG9jay5wcm9ncmFtKSB7IHRoaXMucGFkZGluZy0tOyB9XG4gIH1cbiAgdGhpcy5wYWRkaW5nLS07XG5cbiAgcmV0dXJuIG91dDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuUGFydGlhbFN0YXRlbWVudCA9IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgbGV0IGNvbnRlbnQgPSAnUEFSVElBTDonICsgcGFydGlhbC5uYW1lLm9yaWdpbmFsO1xuICBpZiAocGFydGlhbC5wYXJhbXNbMF0pIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRoaXMuYWNjZXB0KHBhcnRpYWwucGFyYW1zWzBdKTtcbiAgfVxuICBpZiAocGFydGlhbC5oYXNoKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLmhhc2gpO1xuICB9XG4gIHJldHVybiB0aGlzLnBhZCgne3s+ICcgKyBjb250ZW50ICsgJyB9fScpO1xufTtcblByaW50VmlzaXRvci5wcm90b3R5cGUuUGFydGlhbEJsb2NrU3RhdGVtZW50ID0gZnVuY3Rpb24ocGFydGlhbCkge1xuICBsZXQgY29udGVudCA9ICdQQVJUSUFMIEJMT0NLOicgKyBwYXJ0aWFsLm5hbWUub3JpZ2luYWw7XG4gIGlmIChwYXJ0aWFsLnBhcmFtc1swXSkge1xuICAgIGNvbnRlbnQgKz0gJyAnICsgdGhpcy5hY2NlcHQocGFydGlhbC5wYXJhbXNbMF0pO1xuICB9XG4gIGlmIChwYXJ0aWFsLmhhc2gpIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRoaXMuYWNjZXB0KHBhcnRpYWwuaGFzaCk7XG4gIH1cblxuICBjb250ZW50ICs9ICcgJyArIHRoaXMucGFkKCdQUk9HUkFNOicpO1xuICB0aGlzLnBhZGRpbmcrKztcbiAgY29udGVudCArPSB0aGlzLmFjY2VwdChwYXJ0aWFsLnByb2dyYW0pO1xuICB0aGlzLnBhZGRpbmctLTtcblxuICByZXR1cm4gdGhpcy5wYWQoJ3t7PiAnICsgY29udGVudCArICcgfX0nKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQ29udGVudFN0YXRlbWVudCA9IGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgcmV0dXJuIHRoaXMucGFkKFwiQ09OVEVOVFsgJ1wiICsgY29udGVudC52YWx1ZSArIFwiJyBdXCIpO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5Db21tZW50U3RhdGVtZW50ID0gZnVuY3Rpb24oY29tbWVudCkge1xuICByZXR1cm4gdGhpcy5wYWQoXCJ7eyEgJ1wiICsgY29tbWVudC52YWx1ZSArIFwiJyB9fVwiKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuU3ViRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKHNleHByKSB7XG4gIGxldCBwYXJhbXMgPSBzZXhwci5wYXJhbXMsXG4gICAgICBwYXJhbVN0cmluZ3MgPSBbXSxcbiAgICAgIGhhc2g7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgcGFyYW1TdHJpbmdzLnB1c2godGhpcy5hY2NlcHQocGFyYW1zW2ldKSk7XG4gIH1cblxuICBwYXJhbXMgPSAnWycgKyBwYXJhbVN0cmluZ3Muam9pbignLCAnKSArICddJztcblxuICBoYXNoID0gc2V4cHIuaGFzaCA/ICcgJyArIHRoaXMuYWNjZXB0KHNleHByLmhhc2gpIDogJyc7XG5cbiAgcmV0dXJuIHRoaXMuYWNjZXB0KHNleHByLnBhdGgpICsgJyAnICsgcGFyYW1zICsgaGFzaDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuUGF0aEV4cHJlc3Npb24gPSBmdW5jdGlvbihpZCkge1xuICBsZXQgcGF0aCA9IGlkLnBhcnRzLmpvaW4oJy8nKTtcbiAgcmV0dXJuIChpZC5kYXRhID8gJ0AnIDogJycpICsgJ1BBVEg6JyArIHBhdGg7XG59O1xuXG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuU3RyaW5nTGl0ZXJhbCA9IGZ1bmN0aW9uKHN0cmluZykge1xuICByZXR1cm4gJ1wiJyArIHN0cmluZy52YWx1ZSArICdcIic7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLk51bWJlckxpdGVyYWwgPSBmdW5jdGlvbihudW1iZXIpIHtcbiAgcmV0dXJuICdOVU1CRVJ7JyArIG51bWJlci52YWx1ZSArICd9Jztcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQm9vbGVhbkxpdGVyYWwgPSBmdW5jdGlvbihib29sKSB7XG4gIHJldHVybiAnQk9PTEVBTnsnICsgYm9vbC52YWx1ZSArICd9Jztcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuVW5kZWZpbmVkTGl0ZXJhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ1VOREVGSU5FRCc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLk51bGxMaXRlcmFsID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnTlVMTCc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkhhc2ggPSBmdW5jdGlvbihoYXNoKSB7XG4gIGxldCBwYWlycyA9IGhhc2gucGFpcnMsXG4gICAgICBqb2luZWRQYWlycyA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcGFpcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgam9pbmVkUGFpcnMucHVzaCh0aGlzLmFjY2VwdChwYWlyc1tpXSkpO1xuICB9XG5cbiAgcmV0dXJuICdIQVNIeycgKyBqb2luZWRQYWlycy5qb2luKCcsICcpICsgJ30nO1xufTtcblByaW50VmlzaXRvci5wcm90b3R5cGUuSGFzaFBhaXIgPSBmdW5jdGlvbihwYWlyKSB7XG4gIHJldHVybiBwYWlyLmtleSArICc9JyArIHRoaXMuYWNjZXB0KHBhaXIudmFsdWUpO1xufTtcbi8qIGVzbGludC1lbmFibGUgbmV3LWNhcCAqL1xuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js deleted file mode 100644 index 7814d1e81..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/visitor.js +++ /dev/null @@ -1,140 +0,0 @@ -'use strict'; - -exports.__esModule = true; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _exception = require('../exception'); - -var _exception2 = _interopRequireDefault(_exception); - -function Visitor() { - this.parents = []; -} - -Visitor.prototype = { - constructor: Visitor, - mutating: false, - - // Visits a given value. If mutating, will replace the value if necessary. - acceptKey: function acceptKey(node, name) { - var value = this.accept(node[name]); - if (this.mutating) { - // Hacky sanity check: This may have a few false positives for type for the helper - // methods but will generally do the right thing without a lot of overhead. - if (value && !Visitor.prototype[value.type]) { - throw new _exception2['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type); - } - node[name] = value; - } - }, - - // Performs an accept operation with added sanity check to ensure - // required keys are not removed. - acceptRequired: function acceptRequired(node, name) { - this.acceptKey(node, name); - - if (!node[name]) { - throw new _exception2['default'](node.type + ' requires ' + name); - } - }, - - // Traverses a given array. If mutating, empty respnses will be removed - // for child elements. - acceptArray: function acceptArray(array) { - for (var i = 0, l = array.length; i < l; i++) { - this.acceptKey(array, i); - - if (!array[i]) { - array.splice(i, 1); - i--; - l--; - } - } - }, - - accept: function accept(object) { - if (!object) { - return; - } - - /* istanbul ignore next: Sanity code */ - if (!this[object.type]) { - throw new _exception2['default']('Unknown type: ' + object.type, object); - } - - if (this.current) { - this.parents.unshift(this.current); - } - this.current = object; - - var ret = this[object.type](object); - - this.current = this.parents.shift(); - - if (!this.mutating || ret) { - return ret; - } else if (ret !== false) { - return object; - } - }, - - Program: function Program(program) { - this.acceptArray(program.body); - }, - - MustacheStatement: visitSubExpression, - Decorator: visitSubExpression, - - BlockStatement: visitBlock, - DecoratorBlock: visitBlock, - - PartialStatement: visitPartial, - PartialBlockStatement: function PartialBlockStatement(partial) { - visitPartial.call(this, partial); - - this.acceptKey(partial, 'program'); - }, - - ContentStatement: function ContentStatement() /* content */{}, - CommentStatement: function CommentStatement() /* comment */{}, - - SubExpression: visitSubExpression, - - PathExpression: function PathExpression() /* path */{}, - - StringLiteral: function StringLiteral() /* string */{}, - NumberLiteral: function NumberLiteral() /* number */{}, - BooleanLiteral: function BooleanLiteral() /* bool */{}, - UndefinedLiteral: function UndefinedLiteral() /* literal */{}, - NullLiteral: function NullLiteral() /* literal */{}, - - Hash: function Hash(hash) { - this.acceptArray(hash.pairs); - }, - HashPair: function HashPair(pair) { - this.acceptRequired(pair, 'value'); - } -}; - -function visitSubExpression(mustache) { - this.acceptRequired(mustache, 'path'); - this.acceptArray(mustache.params); - this.acceptKey(mustache, 'hash'); -} -function visitBlock(block) { - visitSubExpression.call(this, block); - - this.acceptKey(block, 'program'); - this.acceptKey(block, 'inverse'); -} -function visitPartial(partial) { - this.acceptRequired(partial, 'name'); - this.acceptArray(partial.params); - this.acceptKey(partial, 'hash'); -} - -exports['default'] = Visitor; -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztBQUVwQyxTQUFTLE9BQU8sR0FBRztBQUNqQixNQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztDQUNuQjs7QUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLGFBQVcsRUFBRSxPQUFPO0FBQ3BCLFVBQVEsRUFBRSxLQUFLOzs7QUFHZixXQUFTLEVBQUUsbUJBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUM5QixRQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFFBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs7O0FBR2pCLFVBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDM0MsY0FBTSwyQkFBYyx3QkFBd0IsR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLHlCQUF5QixHQUFHLElBQUksR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3BIO0FBQ0QsVUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztLQUNwQjtHQUNGOzs7O0FBSUQsZ0JBQWMsRUFBRSx3QkFBUyxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ25DLFFBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztBQUUzQixRQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ2YsWUFBTSwyQkFBYyxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQztLQUN0RDtHQUNGOzs7O0FBSUQsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixTQUFLLElBQUksQ0FBQyxHQUFH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O0FBQ2xDLE1BQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0NBQ2xDO0FBQ0QsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFO0FBQ3pCLG9CQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7O0FBRXJDLE1BQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2pDLE1BQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0NBQ2xDO0FBQ0QsU0FBUyxZQUFZLENBQUMsT0FBTyxFQUFFO0FBQzdCLE1BQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLE1BQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLE1BQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0NBQ2pDOztxQkFFYyxPQUFPIiwiZmlsZSI6InZpc2l0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmZ1bmN0aW9uIFZpc2l0b3IoKSB7XG4gIHRoaXMucGFyZW50cyA9IFtdO1xufVxuXG5WaXNpdG9yLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFZpc2l0b3IsXG4gIG11dGF0aW5nOiBmYWxzZSxcblxuICAvLyBWaXNpdHMgYSBnaXZlbiB2YWx1ZS4gSWYgbXV0YXRpbmcsIHdpbGwgcmVwbGFjZSB0aGUgdmFsdWUgaWYgbmVjZXNzYXJ5LlxuICBhY2NlcHRLZXk6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLmFjY2VwdChub2RlW25hbWVdKTtcbiAgICBpZiAodGhpcy5tdXRhdGluZykge1xuICAgICAgLy8gSGFja3kgc2FuaXR5IGNoZWNrOiBUaGlzIG1heSBoYXZlIGEgZmV3IGZhbHNlIHBvc2l0aXZlcyBmb3IgdHlwZSBmb3IgdGhlIGhlbHBlclxuICAgICAgLy8gbWV0aG9kcyBidXQgd2lsbCBnZW5lcmFsbHkgZG8gdGhlIHJpZ2h0IHRoaW5nIHdpdGhvdXQgYSBsb3Qgb2Ygb3ZlcmhlYWQuXG4gICAgICBpZiAodmFsdWUgJiYgIVZpc2l0b3IucHJvdG90eXBlW3ZhbHVlLnR5cGVdKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQgbm9kZSB0eXBlIFwiJyArIHZhbHVlLnR5cGUgKyAnXCIgZm91bmQgd2hlbiBhY2NlcHRpbmcgJyArIG5hbWUgKyAnIG9uICcgKyBub2RlLnR5cGUpO1xuICAgICAgfVxuICAgICAgbm9kZVtuYW1lXSA9IHZhbHVlO1xuICAgIH1cbiAgfSxcblxuICAvLyBQZXJmb3JtcyBhbiBhY2NlcHQgb3BlcmF0aW9uIHdpdGggYWRkZWQgc2FuaXR5IGNoZWNrIHRvIGVuc3VyZVxuICAvLyByZXF1aXJlZCBrZXlzIGFyZSBub3QgcmVtb3ZlZC5cbiAgYWNjZXB0UmVxdWlyZWQ6IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgICB0aGlzLmFjY2VwdEtleShub2RlLCBuYW1lKTtcblxuICAgIGlmICghbm9kZVtuYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihub2RlLnR5cGUgKyAnIHJlcXVpcmVzICcgKyBuYW1lKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gVHJhdmVyc2VzIGEgZ2l2ZW4gYXJyYXkuIElmIG11dGF0aW5nLCBlbXB0eSByZXNwbnNlcyB3aWxsIGJlIHJlbW92ZWRcbiAgLy8gZm9yIGNoaWxkIGVsZW1lbnRzLlxuICBhY2NlcHRBcnJheTogZnVuY3Rpb24oYXJyYXkpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgdGhpcy5hY2NlcHRLZXkoYXJyYXksIGkpO1xuXG4gICAgICBpZiAoIWFycmF5W2ldKSB7XG4gICAgICAgIGFycmF5LnNwbGljZShpLCAxKTtcbiAgICAgICAgaS0tO1xuICAgICAgICBsLS07XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGFjY2VwdDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogU2FuaXR5IGNvZGUgKi9cbiAgICBpZiAoIXRoaXNbb2JqZWN0LnR5cGVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHR5cGU6ICcgKyBvYmplY3QudHlwZSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jdXJyZW50KSB7XG4gICAgICB0aGlzLnBhcmVudHMudW5zaGlmdCh0aGlzLmN1cnJlbnQpO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnQgPSBvYmplY3Q7XG5cbiAgICBsZXQgcmV0ID0gdGhpc1tvYmplY3QudHlwZV0ob2JqZWN0KTtcblxuICAgIHRoaXMuY3VycmVudCA9IHRoaXMucGFyZW50cy5zaGlmdCgpO1xuXG4gICAgaWYgKCF0aGlzLm11dGF0aW5nIHx8IHJldCkge1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2UgaWYgKHJldCAhPT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuICB9LFxuXG4gIFByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICB0aGlzLmFjY2VwdEFycmF5KHByb2dyYW0uYm9keSk7XG4gIH0sXG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQ6IHZpc2l0U3ViRXhwcmVzc2lvbixcbiAgRGVjb3JhdG9yOiB2aXNpdFN1YkV4cHJlc3Npb24sXG5cbiAgQmxvY2tTdGF0ZW1lbnQ6IHZpc2l0QmxvY2ssXG4gIERlY29yYXRvckJsb2NrOiB2aXNpdEJsb2NrLFxuXG4gIFBhcnRpYWxTdGF0ZW1lbnQ6IHZpc2l0UGFydGlhbCxcbiAgUGFydGlhbEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihwYXJ0aWFsKSB7XG4gICAgdmlzaXRQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCk7XG5cbiAgICB0aGlzLmFjY2VwdEtleShwYXJ0aWFsLCAncHJvZ3JhbScpO1xuICB9LFxuXG4gIENvbnRlbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKC8qIGNvbnRlbnQgKi8pIHt9LFxuICBDb21tZW50U3RhdGVtZW50OiBmdW5jdGlvbigvKiBjb21tZW50ICovKSB7fSxcblxuICBTdWJFeHByZXNzaW9uOiB2aXNpdFN1YkV4cHJlc3Npb24sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKC8qIHBhdGggKi8pIHt9LFxuXG4gIFN0cmluZ0xpdGVyYWw6IGZ1bmN0aW9uKC8qIHN0cmluZyAqLykge30sXG4gIE51bWJlckxpdGVyYWw6IGZ1bmN0aW9uKC8qIG51bWJlciAqLykge30sXG4gIEJvb2xlYW5MaXRlcmFsOiBmdW5jdGlvbigvKiBib29sICovKSB7fSxcbiAgVW5kZWZpbmVkTGl0ZXJhbDogZnVuY3Rpb24oLyogbGl0ZXJhbCAqLykge30sXG4gIE51bGxMaXRlcmFsOiBmdW5jdGlvbigvKiBsaXRlcmFsICovKSB7fSxcblxuICBIYXNoOiBmdW5jdGlvbihoYXNoKSB7XG4gICAgdGhpcy5hY2NlcHRBcnJheShoYXNoLnBhaXJzKTtcbiAgfSxcbiAgSGFzaFBhaXI6IGZ1bmN0aW9uKHBhaXIpIHtcbiAgICB0aGlzLmFjY2VwdFJlcXVpcmVkKHBhaXIsICd2YWx1ZScpO1xuICB9XG59O1xuXG5mdW5jdGlvbiB2aXNpdFN1YkV4cHJlc3Npb24obXVzdGFjaGUpIHtcbiAgdGhpcy5hY2NlcHRSZXF1aXJlZChtdXN0YWNoZSwgJ3BhdGgnKTtcbiAgdGhpcy5hY2NlcHRBcnJheShtdXN0YWNoZS5wYXJhbXMpO1xuICB0aGlzLmFjY2VwdEtleShtdXN0YWNoZSwgJ2hhc2gnKTtcbn1cbmZ1bmN0aW9uIHZpc2l0QmxvY2soYmxvY2spIHtcbiAgdmlzaXRTdWJFeHByZXNzaW9uLmNhbGwodGhpcywgYmxvY2spO1xuXG4gIHRoaXMuYWNjZXB0S2V5KGJsb2NrLCAncHJvZ3JhbScpO1xuICB0aGlzLmFjY2VwdEtleShibG9jaywgJ2ludmVyc2UnKTtcbn1cbmZ1bmN0aW9uIHZpc2l0UGFydGlhbChwYXJ0aWFsKSB7XG4gIHRoaXMuYWNjZXB0UmVxdWlyZWQocGFydGlhbCwgJ25hbWUnKTtcbiAgdGhpcy5hY2NlcHRBcnJheShwYXJ0aWFsLnBhcmFtcyk7XG4gIHRoaXMuYWNjZXB0S2V5KHBhcnRpYWwsICdoYXNoJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpc2l0b3I7XG4iXX0= diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js deleted file mode 100644 index e453b53bd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/compiler/whitespace-control.js +++ /dev/null @@ -1,221 +0,0 @@ -'use strict'; - -exports.__esModule = true; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _visitor = require('./visitor'); - -var _visitor2 = _interopRequireDefault(_visitor); - -function WhitespaceControl() { - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - this.options = options; -} -WhitespaceControl.prototype = new _visitor2['default'](); - -WhitespaceControl.prototype.Program = function (program) { - var doStandalone = !this.options.ignoreStandalone; - - var isRoot = !this.isRootSeen; - this.isRootSeen = true; - - var body = program.body; - for (var i = 0, l = body.length; i < l; i++) { - var current = body[i], - strip = this.accept(current); - - if (!strip) { - continue; - } - - var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot), - _isNextWhitespace = isNextWhitespace(body, i, isRoot), - openStandalone = strip.openStandalone && _isPrevWhitespace, - closeStandalone = strip.closeStandalone && _isNextWhitespace, - inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace; - - if (strip.close) { - omitRight(body, i, true); - } - if (strip.open) { - omitLeft(body, i, true); - } - - if (doStandalone && inlineStandalone) { - omitRight(body, i); - - if (omitLeft(body, i)) { - // If we are on a standalone node, save the indent info for partials - if (current.type === 'PartialStatement') { - // Pull out the whitespace from the final line - current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1]; - } - } - } - if (doStandalone && openStandalone) { - omitRight((current.program || current.inverse).body); - - // Strip out the previous content node if it's whitespace only - omitLeft(body, i); - } - if (doStandalone && closeStandalone) { - // Always strip the next node - omitRight(body, i); - - omitLeft((current.inverse || current.program).body); - } - } - - return program; -}; - -WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) { - this.accept(block.program); - this.accept(block.inverse); - - // Find the inverse program that is involed with whitespace stripping. - var program = block.program || block.inverse, - inverse = block.program && block.inverse, - firstInverse = inverse, - lastInverse = inverse; - - if (inverse && inverse.chained) { - firstInverse = inverse.body[0].program; - - // Walk the inverse chain to find the last inverse that is actually in the chain. - while (lastInverse.chained) { - lastInverse = lastInverse.body[lastInverse.body.length - 1].program; - } - } - - var strip = { - open: block.openStrip.open, - close: block.closeStrip.close, - - // Determine the standalone candiacy. Basically flag our content as being possibly standalone - // so our parent can determine if we actually are standalone - openStandalone: isNextWhitespace(program.body), - closeStandalone: isPrevWhitespace((firstInverse || program).body) - }; - - if (block.openStrip.close) { - omitRight(program.body, null, true); - } - - if (inverse) { - var inverseStrip = block.inverseStrip; - - if (inverseStrip.open) { - omitLeft(program.body, null, true); - } - - if (inverseStrip.close) { - omitRight(firstInverse.body, null, true); - } - if (block.closeStrip.open) { - omitLeft(lastInverse.body, null, true); - } - - // Find standalone else statments - if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) { - omitLeft(program.body); - omitRight(firstInverse.body); - } - } else if (block.closeStrip.open) { - omitLeft(program.body, null, true); - } - - return strip; -}; - -WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) { - return mustache.strip; -}; - -WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) { - /* istanbul ignore next */ - var strip = node.strip || {}; - return { - inlineStandalone: true, - open: strip.open, - close: strip.close - }; -}; - -function isPrevWhitespace(body, i, isRoot) { - if (i === undefined) { - i = body.length; - } - - // Nodes that end with newlines are considered whitespace (but are special - // cased for strip operations) - var prev = body[i - 1], - sibling = body[i - 2]; - if (!prev) { - return isRoot; - } - - if (prev.type === 'ContentStatement') { - return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original); - } -} -function isNextWhitespace(body, i, isRoot) { - if (i === undefined) { - i = -1; - } - - var next = body[i + 1], - sibling = body[i + 2]; - if (!next) { - return isRoot; - } - - if (next.type === 'ContentStatement') { - return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original); - } -} - -// Marks the node to the right of the position as omitted. -// I.e. {{foo}}' ' will mark the ' ' node as omitted. -// -// If i is undefined, then the first child will be marked as such. -// -// If mulitple is truthy then all whitespace will be stripped out until non-whitespace -// content is met. -function omitRight(body, i, multiple) { - var current = body[i == null ? 0 : i + 1]; - if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) { - return; - } - - var original = current.value; - current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, ''); - current.rightStripped = current.value !== original; -} - -// Marks the node to the left of the position as omitted. -// I.e. ' '{{foo}} will mark the ' ' node as omitted. -// -// If i is undefined then the last child will be marked as such. -// -// If mulitple is truthy then all whitespace will be stripped out until non-whitespace -// content is met. -function omitLeft(body, i, multiple) { - var current = body[i == null ? body.length - 1 : i - 1]; - if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) { - return; - } - - // We omit the last node if it's whitespace only and not preceeded by a non-content node. - var original = current.value; - current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, ''); - current.leftStripped = current.value !== original; - return current.leftStripped; -} - -exports['default'] = WhitespaceControl; -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3doaXRlc3BhY2UtY29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3VCQUFvQixXQUFXOzs7O0FBRS9CLFNBQVMsaUJBQWlCLEdBQWU7TUFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ3JDLE1BQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3hCO0FBQ0QsaUJBQWlCLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRTVDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDdEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUVwRCxNQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUIsTUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O0FBRXZCLE1BQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pCLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUVqQyxRQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YsZUFBUztLQUNWOztBQUVELFFBQUksaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDckQsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFFckQsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksaUJBQWlCO1FBQzFE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QUFDeEQsTUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGtCQUFrQixJQUFLLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEFBQUMsRUFBRTtBQUMxRixXQUFPO0dBQ1I7OztBQUdELE1BQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDN0IsU0FBTyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUksTUFBTSxHQUFLLFNBQVMsQUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzdFLFNBQU8sQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUM7QUFDbEQsU0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDO0NBQzdCOztxQkFFYyxpQkFBaUIiLCJmaWxlIjoid2hpdGVzcGFjZS1jb250cm9sLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFZpc2l0b3IgZnJvbSAnLi92aXNpdG9yJztcblxuZnVuY3Rpb24gV2hpdGVzcGFjZUNvbnRyb2wob3B0aW9ucyA9IHt9KSB7XG4gIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG59XG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUgPSBuZXcgVmlzaXRvcigpO1xuXG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuUHJvZ3JhbSA9IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgY29uc3QgZG9TdGFuZGFsb25lID0gIXRoaXMub3B0aW9ucy5pZ25vcmVTdGFuZGFsb25lO1xuXG4gIGxldCBpc1Jvb3QgPSAhdGhpcy5pc1Jvb3RTZWVuO1xuICB0aGlzLmlzUm9vdFNlZW4gPSB0cnVlO1xuXG4gIGxldCBib2R5ID0gcHJvZ3JhbS5ib2R5O1xuICBmb3IgKGxldCBpID0gMCwgbCA9IGJvZHkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IGN1cnJlbnQgPSBib2R5W2ldLFxuICAgICAgICBzdHJpcCA9IHRoaXMuYWNjZXB0KGN1cnJlbnQpO1xuXG4gICAgaWYgKCFzdHJpcCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IF9pc1ByZXZXaGl0ZXNwYWNlID0gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuICAgICAgICBfaXNOZXh0V2hpdGVzcGFjZSA9IGlzTmV4dFdoaXRlc3BhY2UoYm9keSwgaSwgaXNSb290KSxcblxuICAgICAgICBvcGVuU3RhbmRhbG9uZSA9IHN0cmlwLm9wZW5TdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlLFxuICAgICAgICBjbG9zZVN0YW5kYWxvbmUgPSBzdHJpcC5jbG9zZVN0YW5kYWxvbmUgJiYgX2lzTmV4dFdoaXRlc3BhY2UsXG4gICAgICAgIGlubGluZVN0YW5kYWxvbmUgPSBzdHJpcC5pbmxpbmVTdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlICYmIF9pc05leHRXaGl0ZXNwYWNlO1xuXG4gICAgaWYgKHN0cmlwLmNsb3NlKSB7XG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChzdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChib2R5LCBpLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoZG9TdGFuZGFsb25lICYmIGlubGluZVN0YW5kYWxvbmUpIHtcbiAgICAgIG9taXRSaWdodChib2R5LCBpKTtcblxuICAgICAgaWYgKG9taXRMZWZ0KGJvZHksIGkpKSB7XG4gICAgICAgIC8vIElmIHdlIGFyZSBvbiBhIHN0YW5kYWxvbmUgbm9kZSwgc2F2ZSB0aGUgaW5kZW50IGluZm8gZm9yIHBhcnRpYWxzXG4gICAgICAgIGlmIChjdXJyZW50LnR5cGUgPT09ICdQYXJ0aWFsU3RhdGVtZW50Jykge1xuICAgICAgICAgIC8vIFB1bGwgb3V0IHRoZSB3aGl0ZXNwYWNlIGZyb20gdGhlIGZpbmFsIGxpbmVcbiAgICAgICAgICBjdXJyZW50LmluZGVudCA9ICgvKFsgXFx0XSskKS8pLmV4ZWMoYm9keVtpIC0gMV0ub3JpZ2luYWwpWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgb3BlblN0YW5kYWxvbmUpIHtcbiAgICAgIG9taXRSaWdodCgoY3VycmVudC5wcm9ncmFtIHx8IGN1cnJlbnQuaW52ZXJzZSkuYm9keSk7XG5cbiAgICAgIC8vIFN0cmlwIG91dCB0aGUgcHJldmlvdXMgY29udGVudCBub2RlIGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5XG4gICAgICBvbWl0TGVmdChib2R5LCBpKTtcbiAgICB9XG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBjbG9zZVN0YW5kYWxvbmUpIHtcbiAgICAgIC8vIEFsd2F5cyBzdHJpcCB0aGUgbmV4dCBub2RlXG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSk7XG5cbiAgICAgIG9taXRMZWZ0KChjdXJyZW50LmludmVyc2UgfHwgY3VycmVudC5wcm9ncmFtKS5ib2R5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvZ3JhbTtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5CbG9ja1N0YXRlbWVudCA9XG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuRGVjb3JhdG9yQmxvY2sgPVxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLlBhcnRpYWxCbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uKGJsb2NrKSB7XG4gIHRoaXMuYWNjZXB0KGJsb2NrLnByb2dyYW0pO1xuICB0aGlzLmFjY2VwdChibG9jay5pbnZlcnNlKTtcblxuICAvLyBGaW5kIHRoZSBpbnZlcnNlIHByb2dyYW0gdGhhdCBpcyBpbnZvbGVkIHdpdGggd2hpdGVzcGFjZSBzdHJpcHBpbmcuXG4gIGxldCBwcm9ncmFtID0gYmxvY2sucHJvZ3JhbSB8fCBibG9jay5pbnZlcnNlLFxuICAgICAgaW52ZXJzZSA9IGJsb2NrLnByb2dyYW0gJiYgYmxvY2suaW52ZXJzZSxcbiAgICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UsXG4gICAgICBsYXN0SW52ZXJzZSA9IGludmVyc2U7XG5cbiAgaWYgKGludmVyc2UgJiYgaW52ZXJzZS5jaGFpbmVkKSB7XG4gICAgZmlyc3RJbnZlcnNlID0gaW52ZXJzZS5ib2R5WzBdLnByb2dyYW07XG5cbiAgICAvLyBXYWxrIHRoZSBpbnZlcnNlIGNoYWluIHRvIGZpbmQgdGhlIGxhc3QgaW52ZXJzZSB0aGF0IGlzIGFjdHVhbGx5IGluIHRoZSBjaGFpbi5cbiAgICB3aGlsZSAobGFzdEludmVyc2UuY2hhaW5lZCkge1xuICAgICAgbGFzdEludmVyc2UgPSBsYXN0SW52ZXJzZS5ib2R5W2xhc3RJbnZlcnNlLmJvZHkubGVuZ3RoIC0gMV0ucHJvZ3JhbTtcbiAgICB9XG4gIH1cblxuICBsZXQgc3RyaXAgPSB7XG4gICAgb3BlbjogYmxvY2sub3BlblN0cmlwLm9wZW4sXG4gICAgY2xvc2U6IGJsb2NrLmNsb3NlU3RyaXAuY2xvc2UsXG5cbiAgICAvLyBEZXRlcm1pbmUgdGhlIHN0YW5kYWxvbmUgY2FuZGlhY3kuIEJhc2ljYWxseSBmbGFnIG91ciBjb250ZW50IGFzIGJlaW5nIHBvc3NpYmx5IHN0YW5kYWxvbmVcbiAgICAvLyBzbyBvdXIgcGFyZW50IGNhbiBkZXRlcm1pbmUgaWYgd2UgYWN0dWFsbHkgYXJlIHN0YW5kYWxvbmVcbiAgICBvcGVuU3RhbmRhbG9uZTogaXNOZXh0V2hpdGVzcGFjZShwcm9ncmFtLmJvZHkpLFxuICAgIGNsb3NlU3RhbmRhbG9uZTogaXNQcmV2V2hpdGVzcGFjZSgoZmlyc3RJbnZlcnNlIHx8IHByb2dyYW0pLmJvZHkpXG4gIH07XG5cbiAgaWYgKGJsb2NrLm9wZW5TdHJpcC5jbG9zZSkge1xuICAgIG9taXRSaWdodChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgaWYgKGludmVyc2UpIHtcbiAgICBsZXQgaW52ZXJzZVN0cmlwID0gYmxvY2suaW52ZXJzZVN0cmlwO1xuXG4gICAgaWYgKGludmVyc2VTdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChpbnZlcnNlU3RyaXAuY2xvc2UpIHtcbiAgICAgIG9taXRSaWdodChmaXJzdEludmVyc2UuYm9keSwgbnVsbCwgdHJ1ZSk7XG4gICAgfVxuICAgIGlmIChibG9jay5jbG9zZVN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KGxhc3RJbnZlcnNlLmJvZHksIG51bGwsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIEZpbmQgc3RhbmRhbG9uZSBlbHNlIHN0YXRtZW50c1xuICAgIGlmICghdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmVcbiAgICAgICAgJiYgaXNQcmV2V2hpdGVzcGFjZShwcm9ncmFtLmJvZHkpXG4gICAgICAgICYmIGlzTmV4dFdoaXRlc3BhY2UoZmlyc3RJbnZlcnNlLmJvZHkpKSB7XG4gICAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHkpO1xuICAgICAgb21pdFJpZ2h0KGZpcnN0SW52ZXJzZS5ib2R5KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoYmxvY2suY2xvc2VTdHJpcC5vcGVuKSB7XG4gICAgb21pdExlZnQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiBzdHJpcDtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5EZWNvcmF0b3IgPVxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLk11c3RhY2hlU3RhdGVtZW50ID0gZnVuY3Rpb24obXVzdGFjaGUpIHtcbiAgcmV0dXJuIG11c3RhY2hlLnN0cmlwO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLlBhcnRpYWxTdGF0ZW1lbnQgPVxuICAgIFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Db21tZW50U3RhdGVtZW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBsZXQgc3RyaXAgPSBub2RlLnN0cmlwIHx8IHt9O1xuICByZXR1cm4ge1xuICAgIGlubGluZVN0YW5kYWxvbmU6IHRydWUsXG4gICAgb3Blbjogc3RyaXAub3BlbixcbiAgICBjbG9zZTogc3RyaXAuY2xvc2VcbiAgfTtcbn07XG5cblxuZnVuY3Rpb24gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpIHtcbiAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSBib2R5Lmxlbmd0aDtcbiAgfVxuXG4gIC8vIE5vZGVzIHRoYXQgZW5kIHdpdGggbmV3bGluZXMgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSAoYnV0IGFyZSBzcGVjaWFsXG4gIC8vIGNhc2VkIGZvciBzdHJpcCBvcGVyYXRpb25zKVxuICBsZXQgcHJldiA9IGJvZHlbaSAtIDFdLFxuICAgICAgc2libGluZyA9IGJvZHlbaSAtIDJdO1xuICBpZiAoIXByZXYpIHtcbiAgICByZXR1cm4gaXNSb290O1xuICB9XG5cbiAgaWYgKHByZXYudHlwZSA9PT0gJ0NvbnRlbnRTdGF0ZW1lbnQnKSB7XG4gICAgcmV0dXJuIChzaWJsaW5nIHx8ICFpc1Jvb3QgPyAoL1xccj9cXG5cXHMqPyQvKSA6ICgvKF58XFxyP1xcbilcXHMqPyQvKSkudGVzdChwcmV2Lm9yaWdpbmFsKTtcbiAgfVxufVxuZnVuY3Rpb24gaXNOZXh0V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpIHtcbiAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSAtMTtcbiAgfVxuXG4gIGxldCBuZXh0ID0gYm9keVtpICsgMV0sXG4gICAgICBzaWJsaW5nID0gYm9keVtpICsgMl07XG4gIGlmICghbmV4dCkge1xuICAgIHJldHVybiBpc1Jvb3Q7XG4gIH1cblxuICBpZiAobmV4dC50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/ICgvXlxccyo/XFxyP1xcbi8pIDogKC9eXFxzKj8oXFxyP1xcbnwkKS8pKS50ZXN0KG5leHQub3JpZ2luYWwpO1xuICB9XG59XG5cbi8vIE1hcmtzIHRoZSBub2RlIHRvIHRoZSByaWdodCBvZiB0aGUgcG9zaXRpb24gYXMgb21pdHRlZC5cbi8vIEkuZS4ge3tmb299fScgJyB3aWxsIG1hcmsgdGhlICcgJyBub2RlIGFzIG9taXR0ZWQuXG4vL1xuLy8gSWYgaSBpcyB1bmRlZmluZWQsIHRoZW4gdGhlIGZpcnN0IGNoaWxkIHdpbGwgYmUgbWFya2VkIGFzIHN1Y2guXG4vL1xuLy8gSWYgbXVsaXRwbGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50aWwgbm9uLXdoaXRlc3BhY2Vcbi8vIGNvbnRlbnQgaXMgbWV0LlxuZnVuY3Rpb24gb21pdFJpZ2h0KGJvZHksIGksIG11bHRpcGxlKSB7XG4gIGxldCBjdXJyZW50ID0gYm9keVtpID09IG51bGwgPyAwIDogaSArIDFdO1xuICBpZiAoIWN1cnJlbnQgfHwgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHwgKCFtdWx0aXBsZSAmJiBjdXJyZW50LnJpZ2h0U3RyaXBwZWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShtdWx0aXBsZSA/ICgvXlxccysvKSA6ICgvXlsgXFx0XSpcXHI/XFxuPy8pLCAnJyk7XG4gIGN1cnJlbnQucmlnaHRTdHJpcHBlZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsO1xufVxuXG4vLyBNYXJrcyB0aGUgbm9kZSB0byB0aGUgbGVmdCBvZiB0aGUgcG9zaXRpb24gYXMgb21pdHRlZC5cbi8vIEkuZS4gJyAne3tmb299fSB3aWxsIG1hcmsgdGhlICcgJyBub2RlIGFzIG9taXR0ZWQuXG4vL1xuLy8gSWYgaSBpcyB1bmRlZmluZWQgdGhlbiB0aGUgbGFzdCBjaGlsZCB3aWxsIGJlIG1hcmtlZCBhcyBzdWNoLlxuLy9cbi8vIElmIG11bGl0cGxlIGlzIHRydXRoeSB0aGVuIGFsbCB3aGl0ZXNwYWNlIHdpbGwgYmUgc3RyaXBwZWQgb3V0IHVudGlsIG5vbi13aGl0ZXNwYWNlXG4vLyBjb250ZW50IGlzIG1ldC5cbmZ1bmN0aW9uIG9taXRMZWZ0KGJvZHksIGksIG11bHRpcGxlKSB7XG4gIGxldCBjdXJyZW50ID0gYm9keVtpID09IG51bGwgPyBib2R5Lmxlbmd0aCAtIDEgOiBpIC0gMV07XG4gIGlmICghY3VycmVudCB8fCBjdXJyZW50LnR5cGUgIT09ICdDb250ZW50U3RhdGVtZW50JyB8fCAoIW11bHRpcGxlICYmIGN1cnJlbnQubGVmdFN0cmlwcGVkKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFdlIG9taXQgdGhlIGxhc3Qgbm9kZSBpZiBpdCdzIHdoaXRlc3BhY2Ugb25seSBhbmQgbm90IHByZWNlZWRlZCBieSBhIG5vbi1jb250ZW50IG5vZGUuXG4gIGxldCBvcmlnaW5hbCA9IGN1cnJlbnQudmFsdWU7XG4gIGN1cnJlbnQudmFsdWUgPSBjdXJyZW50LnZhbHVlLnJlcGxhY2UobXVsdGlwbGUgPyAoL1xccyskLykgOiAoL1sgXFx0XSskLyksICcnKTtcbiAgY3VycmVudC5sZWZ0U3RyaXBwZWQgPSBjdXJyZW50LnZhbHVlICE9PSBvcmlnaW5hbDtcbiAgcmV0dXJuIGN1cnJlbnQubGVmdFN0cmlwcGVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBXaGl0ZXNwYWNlQ29udHJvbDtcbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/decorators.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/decorators.js deleted file mode 100644 index e82e0efb6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/decorators.js +++ /dev/null @@ -1,16 +0,0 @@ -'use strict'; - -exports.__esModule = true; -exports.registerDefaultDecorators = registerDefaultDecorators; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _decoratorsInline = require('./decorators/inline'); - -var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline); - -function registerDefaultDecorators(instance) { - _decoratorsInline2['default'](instance); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG5cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js deleted file mode 100644 index f2f1c7cc2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/decorators/inline.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -exports.__esModule = true; - -var _utils = require('../utils'); - -exports['default'] = function (instance) { - instance.registerDecorator('inline', function (fn, props, container, options) { - var ret = fn; - if (!props.partials) { - props.partials = {}; - ret = function (context, options) { - // Create a new partials stack frame prior to exec. - var original = container.partials; - container.partials = _utils.extend({}, original, props.partials); - var ret = fn(context, options); - container.partials = original; - return ret; - }; - } - - props.partials[options.args[0]] = options.fn; - - return ret; - }); -}; - -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXFCLFVBQVU7O3FCQUVoQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXh0ZW5kfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVyRGVjb3JhdG9yKCdpbmxpbmUnLCBmdW5jdGlvbihmbiwgcHJvcHMsIGNvbnRhaW5lciwgb3B0aW9ucykge1xuICAgIGxldCByZXQgPSBmbjtcbiAgICBpZiAoIXByb3BzLnBhcnRpYWxzKSB7XG4gICAgICBwcm9wcy5wYXJ0aWFscyA9IHt9O1xuICAgICAgcmV0ID0gZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgcGFydGlhbHMgc3RhY2sgZnJhbWUgcHJpb3IgdG8gZXhlYy5cbiAgICAgICAgbGV0IG9yaWdpbmFsID0gY29udGFpbmVyLnBhcnRpYWxzO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBleHRlbmQoe30sIG9yaWdpbmFsLCBwcm9wcy5wYXJ0aWFscyk7XG4gICAgICAgIGxldCByZXQgPSBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gb3JpZ2luYWw7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9O1xuICAgIH1cblxuICAgIHByb3BzLnBhcnRpYWxzW29wdGlvbnMuYXJnc1swXV0gPSBvcHRpb25zLmZuO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfSk7XG59XG4iXX0= diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/exception.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/exception.js deleted file mode 100644 index 076d40774..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/exception.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; - -exports.__esModule = true; - -var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; - -function Exception(message, node) { - var loc = node && node.loc, - line = undefined, - column = undefined; - if (loc) { - line = loc.start.line; - column = loc.start.column; - - message += ' - ' + line + ':' + column; - } - - var tmp = Error.prototype.constructor.call(this, message); - - // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. - for (var idx = 0; idx < errorProps.length; idx++) { - this[errorProps[idx]] = tmp[errorProps[idx]]; - } - - /* istanbul ignore else */ - if (Error.captureStackTrace) { - Error.captureStackTrace(this, Exception); - } - - try { - if (loc) { - this.lineNumber = line; - - // Work around issue under safari where we can't directly set the column value - /* istanbul ignore next */ - if (Object.defineProperty) { - Object.defineProperty(this, 'column', { value: column }); - } else { - this.column = column; - } - } - } catch (nop) { - /* Ignore if the browser is very particular */ - } -} - -Exception.prototype = new Error(); - -exports['default'] = Exception; -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsSUFBTSxVQUFVLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzs7QUFFbkcsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDdEIsSUFBSSxZQUFBO01BQ0osTUFBTSxZQUFBLENBQUM7QUFDWCxNQUFJLEdBQUcsRUFBRTtBQUNQLFFBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztBQUN0QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7O0FBRTFCLFdBQU8sSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7R0FDeEM7O0FBRUQsTUFBSSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzs7O0FBRzFELE9BQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO0FBQ2hELFFBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7R0FDOUM7OztBQUdELE1BQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFO0FBQzNCLFNBQUssQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7R0FDMUM7O0FBRUQsTUFBSTtBQUNGLFFBQUksR0FBRyxFQUFFO0FBQ1AsVUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Ozs7QUFJdkIsVUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFO0FBQ3pCLGNBQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO09BQ3hELE1BQU07QUFDTCxZQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztPQUN0QjtLQUNGO0dBQ0YsQ0FBQyxPQUFPLEdBQUcsRUFBRTs7R0FFYjtDQUNGOztBQUVELFNBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQzs7cUJBRW5CLFNBQVMiLCJmaWxlIjoiZXhjZXB0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5jb25zdCBlcnJvclByb3BzID0gWydkZXNjcmlwdGlvbicsICdmaWxlTmFtZScsICdsaW5lTnVtYmVyJywgJ21lc3NhZ2UnLCAnbmFtZScsICdudW1iZXInLCAnc3RhY2snXTtcblxuZnVuY3Rpb24gRXhjZXB0aW9uKG1lc3NhZ2UsIG5vZGUpIHtcbiAgbGV0IGxvYyA9IG5vZGUgJiYgbm9kZS5sb2MsXG4gICAgICBsaW5lLFxuICAgICAgY29sdW1uO1xuICBpZiAobG9jKSB7XG4gICAgbGluZSA9IGxvYy5zdGFydC5saW5lO1xuICAgIGNvbHVtbiA9IGxvYy5zdGFydC5jb2x1bW47XG5cbiAgICBtZXNzYWdlICs9ICcgLSAnICsgbGluZSArICc6JyArIGNvbHVtbjtcbiAgfVxuXG4gIGxldCB0bXAgPSBFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICAvLyBVbmZvcnR1bmF0ZWx5IGVycm9ycyBhcmUgbm90IGVudW1lcmFibGUgaW4gQ2hyb21lIChhdCBsZWFzdCksIHNvIGBmb3IgcHJvcCBpbiB0bXBgIGRvZXNuJ3Qgd29yay5cbiAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZXJyb3JQcm9wcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdGhpc1tlcnJvclByb3BzW2lkeF1dID0gdG1wW2Vycm9yUHJvcHNbaWR4XV07XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBFeGNlcHRpb24pO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAobG9jKSB7XG4gICAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lO1xuXG4gICAgICAvLyBXb3JrIGFyb3VuZCBpc3N1ZSB1bmRlciBzYWZhcmkgd2hlcmUgd2UgY2FuJ3QgZGlyZWN0bHkgc2V0IHRoZSBjb2x1bW4gdmFsdWVcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29sdW1uJywge3ZhbHVlOiBjb2x1bW59KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAobm9wKSB7XG4gICAgLyogSWdub3JlIGlmIHRoZSBicm93c2VyIGlzIHZlcnkgcGFydGljdWxhciAqL1xuICB9XG59XG5cbkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgRXhjZXB0aW9uO1xuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers.js deleted file mode 100644 index 1ab84a480..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -exports.__esModule = true; -exports.registerDefaultHelpers = registerDefaultHelpers; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _helpersBlockHelperMissing = require('./helpers/block-helper-missing'); - -var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing); - -var _helpersEach = require('./helpers/each'); - -var _helpersEach2 = _interopRequireDefault(_helpersEach); - -var _helpersHelperMissing = require('./helpers/helper-missing'); - -var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing); - -var _helpersIf = require('./helpers/if'); - -var _helpersIf2 = _interopRequireDefault(_helpersIf); - -var _helpersLog = require('./helpers/log'); - -var _helpersLog2 = _interopRequireDefault(_helpersLog); - -var _helpersLookup = require('./helpers/lookup'); - -var _helpersLookup2 = _interopRequireDefault(_helpersLookup); - -var _helpersWith = require('./helpers/with'); - -var _helpersWith2 = _interopRequireDefault(_helpersWith); - -function registerDefaultHelpers(instance) { - _helpersBlockHelperMissing2['default'](instance); - _helpersEach2['default'](instance); - _helpersHelperMissing2['default'](instance); - _helpersIf2['default'](instance); - _helpersLog2['default'](instance); - _helpersLookup2['default'](instance); - _helpersWith2['default'](instance); -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7eUNBQXVDLGdDQUFnQzs7OzsyQkFDOUMsZ0JBQWdCOzs7O29DQUNQLDBCQUEwQjs7Ozt5QkFDckMsY0FBYzs7OzswQkFDYixlQUFlOzs7OzZCQUNaLGtCQUFrQjs7OzsyQkFDcEIsZ0JBQWdCOzs7O0FBRWxDLFNBQVMsc0JBQXNCLENBQUMsUUFBUSxFQUFFO0FBQy9DLHlDQUEyQixRQUFRLENBQUMsQ0FBQztBQUNyQywyQkFBYSxRQUFRLENBQUMsQ0FBQztBQUN2QixvQ0FBc0IsUUFBUSxDQUFDLENBQUM7QUFDaEMseUJBQVcsUUFBUSxDQUFDLENBQUM7QUFDckIsMEJBQVksUUFBUSxDQUFDLENBQUM7QUFDdEIsNkJBQWUsUUFBUSxDQUFDLENBQUM7QUFDekIsMkJBQWEsUUFBUSxDQUFDLENBQUM7Q0FDeEIiLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCByZWdpc3RlckJsb2NrSGVscGVyTWlzc2luZyBmcm9tICcuL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcnO1xuaW1wb3J0IHJlZ2lzdGVyRWFjaCBmcm9tICcuL2hlbHBlcnMvZWFjaCc7XG5pbXBvcnQgcmVnaXN0ZXJIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJJZiBmcm9tICcuL2hlbHBlcnMvaWYnO1xuaW1wb3J0IHJlZ2lzdGVyTG9nIGZyb20gJy4vaGVscGVycy9sb2cnO1xuaW1wb3J0IHJlZ2lzdGVyTG9va3VwIGZyb20gJy4vaGVscGVycy9sb29rdXAnO1xuaW1wb3J0IHJlZ2lzdGVyV2l0aCBmcm9tICcuL2hlbHBlcnMvd2l0aCc7XG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckRlZmF1bHRIZWxwZXJzKGluc3RhbmNlKSB7XG4gIHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJFYWNoKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJIZWxwZXJNaXNzaW5nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJJZihpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyTG9nKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb29rdXAoaW5zdGFuY2UpO1xuICByZWdpc3RlcldpdGgoaW5zdGFuY2UpO1xufVxuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js deleted file mode 100644 index f82d2aca6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/block-helper-missing.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -exports.__esModule = true; - -var _utils = require('../utils'); - -exports['default'] = function (instance) { - instance.registerHelper('blockHelperMissing', function (context, options) { - var inverse = options.inverse, - fn = options.fn; - - if (context === true) { - return fn(this); - } else if (context === false || context == null) { - return inverse(this); - } else if (_utils.isArray(context)) { - if (context.length > 0) { - if (options.ids) { - options.ids = [options.name]; - } - - return instance.helpers.each(context, options); - } else { - return inverse(this); - } - } else { - if (options.data && options.ids) { - var data = _utils.createFrame(options.data); - data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name); - options = { data: data }; - } - - return fn(context, options); - } - }); -}; - -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBc0QsVUFBVTs7cUJBRWpELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQ3pCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLGVBQU8sR0FBRyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztPQUN4Qjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGNyZWF0ZUZyYW1lLCBpc0FycmF5fSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdibG9ja0hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgbGV0IGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5uYW1lKTtcbiAgICAgICAgb3B0aW9ucyA9IHtkYXRhOiBkYXRhfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0= diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js deleted file mode 100644 index 003274b0e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/each.js +++ /dev/null @@ -1,94 +0,0 @@ -'use strict'; - -exports.__esModule = true; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _utils = require('../utils'); - -var _exception = require('../exception'); - -var _exception2 = _interopRequireDefault(_exception); - -exports['default'] = function (instance) { - instance.registerHelper('each', function (context, options) { - if (!options) { - throw new _exception2['default']('Must pass iterator to #each'); - } - - var fn = options.fn, - inverse = options.inverse, - i = 0, - ret = '', - data = undefined, - contextPath = undefined; - - if (options.data && options.ids) { - contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; - } - - if (_utils.isFunction(context)) { - context = context.call(this); - } - - if (options.data) { - data = _utils.createFrame(options.data); - } - - function execIteration(field, index, last) { - if (data) { - data.key = field; - data.index = index; - data.first = index === 0; - data.last = !!last; - - if (contextPath) { - data.contextPath = contextPath + field; - } - } - - ret = ret + fn(context[field], { - data: data, - blockParams: _utils.blockParams([context[field], field], [contextPath + field, null]) - }); - } - - if (context && typeof context === 'object') { - if (_utils.isArray(context)) { - for (var j = context.length; i < j; i++) { - if (i in context) { - execIteration(i, i, i === context.length - 1); - } - } - } else { - var priorKey = undefined; - - for (var key in context) { - if (context.hasOwnProperty(key)) { - // We're running the iterations one step out of sync so we can detect - // the last iteration without have to scan the object twice and create - // an itermediate keys array. - if (priorKey !== undefined) { - execIteration(priorKey, i - 1); - } - priorKey = key; - i++; - } - } - if (priorKey !== undefined) { - execIteration(priorKey, i - 1, true); - } - } - } - - if (i === 0) { - ret = inverse(this); - } - - return ret; - }); -}; - -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQUErRSxVQUFVOzt5QkFDbkUsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFFBQUksQ0FBQyxPQUFPLEVBQUU7QUFDWixZQUFNLDJCQUFjLDZCQUE2QixDQUFDLENBQUM7S0FDcEQ7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUU7UUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU87UUFDekIsQ0FBQyxHQUFHLENBQUM7UUFDTCxHQUFHLEdBQUcsRUFBRTtRQUNSLElBQUksWUFBQTtRQUNKLFdBQVcsWUFBQSxDQUFDOztBQUVoQixRQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixpQkFBVyxHQUFHLHlCQUFrQixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ2pGOztBQUVELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFBRSxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFOztBQUUxRCxRQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDaEIsVUFBSSxHQUFHLG1CQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNsQzs7QUFFRCxhQUFTLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtBQUN6QyxVQUFJLElBQUksRUFBRTtBQUNSLFlBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDO0FBQ2pCLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLFlBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztBQUN6QixZQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7O0FBRW5CLFlBQUksV0FBVyxFQUFFO0FBQ2YsY0FBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1NBQ3hDO09BQ0Y7O0FBRUQsU0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLFlBQUksRUFBRSxJQUFJO0FBQ1YsbUJBQVcsRUFBRSxtQkFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDL0UsQ0FBQyxDQUFDO0tBQ0o7O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNO0FBQ0wsWUFBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixhQUFLLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRTtBQUN2QixjQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Ozs7QUFJL0IsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0w7U0FDRjtBQUNELFlBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQix1QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ3RDO09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGJsb2NrUGFyYW1zLCBjcmVhdGVGcmFtZSwgaXNBcnJheSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICByZXQgPSAnJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29udGV4dFBhdGg7XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5pZHNbMF0pICsgJy4nO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH1cblxuICAgIGlmIChvcHRpb25zLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmtleSA9IGZpZWxkO1xuICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgZGF0YS5sYXN0ID0gISFsYXN0O1xuXG4gICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dFtmaWVsZF0sIGZpZWxkXSwgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSBpbiBjb250ZXh0KSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIHRoZSBpdGVyYXRpb25zIG9uZSBzdGVwIG91dCBvZiBzeW5jIHNvIHdlIGNhbiBkZXRlY3RcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgICBpZiAocHJpb3JLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmlvcktleSA9IGtleTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js deleted file mode 100644 index 1ff367a89..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/helper-missing.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -exports.__esModule = true; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _exception = require('../exception'); - -var _exception2 = _interopRequireDefault(_exception); - -exports['default'] = function (instance) { - instance.registerHelper('helperMissing', function () /* [args, ]options */{ - if (arguments.length === 1) { - // A missing field in a {{foo}} construct. - return undefined; - } else { - // Someone is actually trying to call something, blow up. - throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); - } - }); -}; - -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFBYyxtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDdkY7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01pc3NpbmcgaGVscGVyOiBcIicgKyBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLm5hbWUgKyAnXCInKTtcbiAgICB9XG4gIH0pO1xufVxuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/if.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/if.js deleted file mode 100644 index 1abfa4b7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/if.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -exports.__esModule = true; - -var _utils = require('../utils'); - -exports['default'] = function (instance) { - instance.registerHelper('if', function (conditional, options) { - if (_utils.isFunction(conditional)) { - conditional = conditional.call(this); - } - - // Default behavior is to render the positive path if the value is truthy and not empty. - // The `includeZero` option may be set to treat the condtional as purely not empty based on the - // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. - if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - - instance.registerHelper('unless', function (conditional, options) { - return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash }); - }); -}; - -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBa0MsVUFBVTs7cUJBRTdCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLGtCQUFXLFdBQVcsQ0FBQyxFQUFFO0FBQUUsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQUU7Ozs7O0FBS3RFLFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFdBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztHQUN2SCxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJpZi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNFbXB0eSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaWYnLCBmdW5jdGlvbihjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNvbmRpdGlvbmFsKSkgeyBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7IH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIG5vdCBlbXB0eS5cbiAgICAvLyBUaGUgYGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29uZHRpb25hbCBhcyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZVxuICAgIC8vIGJlaGF2aW9yIG9mIGlzRW1wdHkuIEVmZmVjdGl2ZWx5IHRoaXMgZGV0ZXJtaW5lcyBpZiAwIGlzIGhhbmRsZWQgYnkgdGhlIHBvc2l0aXZlIHBhdGggb3IgbmVnYXRpdmUuXG4gICAgaWYgKCghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFjb25kaXRpb25hbCkgfHwgaXNFbXB0eShjb25kaXRpb25hbCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uKGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnNbJ2lmJ10uY2FsbCh0aGlzLCBjb25kaXRpb25hbCwge2ZuOiBvcHRpb25zLmludmVyc2UsIGludmVyc2U6IG9wdGlvbnMuZm4sIGhhc2g6IG9wdGlvbnMuaGFzaH0pO1xuICB9KTtcbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/log.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/log.js deleted file mode 100644 index 042b6fcbe..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/log.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -exports.__esModule = true; - -exports['default'] = function (instance) { - instance.registerHelper('log', function () /* message, options */{ - var args = [undefined], - options = arguments[arguments.length - 1]; - for (var i = 0; i < arguments.length - 1; i++) { - args.push(arguments[i]); - } - - var level = 1; - if (options.hash.level != null) { - level = options.hash.level; - } else if (options.data && options.data.level != null) { - level = options.data.level; - } - args[0] = level; - - instance.log.apply(instance, args); - }); -}; - -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVMsSUFBSSxDQUFDLENBQUM7R0FDeEIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgICBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIGxldCBsZXZlbCA9IDE7XG4gICAgaWYgKG9wdGlvbnMuaGFzaC5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuaGFzaC5sZXZlbDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGEubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmRhdGEubGV2ZWw7XG4gICAgfVxuICAgIGFyZ3NbMF0gPSBsZXZlbDtcblxuICAgIGluc3RhbmNlLmxvZyguLi4gYXJncyk7XG4gIH0pO1xufVxuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js deleted file mode 100644 index e5efdcea2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/lookup.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -exports.__esModule = true; - -exports['default'] = function (instance) { - instance.registerHelper('lookup', function (obj, field) { - return obj && obj[field]; - }); -}; - -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQ3JELFdBQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztHQUMxQixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJsb29rdXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9va3VwJywgZnVuY3Rpb24ob2JqLCBmaWVsZCkge1xuICAgIHJldHVybiBvYmogJiYgb2JqW2ZpZWxkXTtcbiAgfSk7XG59XG4iXX0= diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/with.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/with.js deleted file mode 100644 index c23cddec1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/helpers/with.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -exports.__esModule = true; - -var _utils = require('../utils'); - -exports['default'] = function (instance) { - instance.registerHelper('with', function (context, options) { - if (_utils.isFunction(context)) { - context = context.call(this); - } - - var fn = options.fn; - - if (!_utils.isEmpty(context)) { - var data = options.data; - if (options.data && options.ids) { - data = _utils.createFrame(options.data); - data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); - } - - return fn(context, { - data: data, - blockParams: _utils.blockParams([context], [data && data.contextPath]) - }); - } else { - return options.inverse(this); - } - }); -}; - -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUErRSxVQUFVOztxQkFFMUUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFBRSxhQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFOztBQUUxRCxRQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixRQUFJLENBQUMsZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNyQixVQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFVBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLFlBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2hGOztBQUVELGFBQU8sRUFBRSxDQUFDLE9BQU8sRUFBRTtBQUNqQixZQUFJLEVBQUUsSUFBSTtBQUNWLG1CQUFXLEVBQUUsbUJBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7T0FDaEUsQ0FBQyxDQUFDO0tBQ0osTUFBTTtBQUNMLGFBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUM5QjtHQUNGLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6IndpdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBibG9ja1BhcmFtcywgY3JlYXRlRnJhbWUsIGlzRW1wdHksIGlzRnVuY3Rpb259IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHsgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfVxuXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmICghaXNFbXB0eShjb250ZXh0KSkge1xuICAgICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dF0sIFtkYXRhICYmIGRhdGEuY29udGV4dFBhdGhdKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/logger.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/logger.js deleted file mode 100644 index 76782445d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/logger.js +++ /dev/null @@ -1,47 +0,0 @@ -'use strict'; - -exports.__esModule = true; - -var _utils = require('./utils'); - -var logger = { - methodMap: ['debug', 'info', 'warn', 'error'], - level: 'info', - - // Maps a given level value to the `methodMap` indexes above. - lookupLevel: function lookupLevel(level) { - if (typeof level === 'string') { - var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); - if (levelMap >= 0) { - level = levelMap; - } else { - level = parseInt(level, 10); - } - } - - return level; - }, - - // Can be overridden in the host environment - log: function log(level) { - level = logger.lookupLevel(level); - - if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { - var method = logger.methodMap[level]; - if (!console[method]) { - // eslint-disable-line no-console - method = 'log'; - } - - for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - message[_key - 1] = arguments[_key]; - } - - console[method].apply(console, message); // eslint-disable-line no-console - } - } -}; - -exports['default'] = logger; -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUFzQixTQUFTOztBQUUvQixJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEVBQUU7QUFDL0UsVUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQyxVQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFOztBQUNwQixjQUFNLEdBQUcsS0FBSyxDQUFDO09BQ2hCOzt3Q0FQbUIsT0FBTztBQUFQLGVBQU87OztBQVEzQixhQUFPLENBQUMsTUFBTSxPQUFDLENBQWYsT0FBTyxFQUFZLE9BQU8sQ0FBQyxDQUFDO0tBQzdCO0dBQ0Y7Q0FDRixDQUFDOztxQkFFYSxNQUFNIiwiZmlsZSI6ImxvZ2dlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5kZXhPZn0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWwpIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIG1ldGhvZCA9ICdsb2cnO1xuICAgICAgfVxuICAgICAgY29uc29sZVttZXRob2RdKC4uLm1lc3NhZ2UpOyAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/no-conflict.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/no-conflict.js deleted file mode 100644 index 882ff0010..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/no-conflict.js +++ /dev/null @@ -1,20 +0,0 @@ -/* global window */ -'use strict'; - -exports.__esModule = true; - -exports['default'] = function (Handlebars) { - /* istanbul ignore next */ - var root = typeof global !== 'undefined' ? global : window, - $Handlebars = root.Handlebars; - /* istanbul ignore next */ - Handlebars.noConflict = function () { - if (root.Handlebars === Handlebars) { - root.Handlebars = $Handlebars; - } - return Handlebars; - }; -}; - -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUNlLFVBQVMsVUFBVSxFQUFFOztBQUVsQyxNQUFJLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLEdBQUcsTUFBTSxHQUFHLE1BQU07TUFDdEQsV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7O0FBRWxDLFlBQVUsQ0FBQyxVQUFVLEdBQUcsWUFBVztBQUNqQyxRQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO0FBQ2xDLFVBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0tBQy9CO0FBQ0QsV0FBTyxVQUFVLENBQUM7R0FDbkIsQ0FBQztDQUNIIiwiZmlsZSI6Im5vLWNvbmZsaWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIHdpbmRvdyAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oSGFuZGxlYmFycykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBsZXQgcm9vdCA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93LFxuICAgICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/runtime.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/runtime.js deleted file mode 100644 index e265380a6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/runtime.js +++ /dev/null @@ -1,297 +0,0 @@ -'use strict'; - -exports.__esModule = true; -exports.checkRevision = checkRevision; -exports.template = template; -exports.wrapProgram = wrapProgram; -exports.resolvePartial = resolvePartial; -exports.invokePartial = invokePartial; -exports.noop = noop; -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -// istanbul ignore next - -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 _utils = require('./utils'); - -var Utils = _interopRequireWildcard(_utils); - -var _exception = require('./exception'); - -var _exception2 = _interopRequireDefault(_exception); - -var _base = require('./base'); - -function checkRevision(compilerInfo) { - var compilerRevision = compilerInfo && compilerInfo[0] || 1, - currentRevision = _base.COMPILER_REVISION; - - if (compilerRevision !== currentRevision) { - if (compilerRevision < currentRevision) { - var runtimeVersions = _base.REVISION_CHANGES[currentRevision], - compilerVersions = _base.REVISION_CHANGES[compilerRevision]; - throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); - } else { - // Use the embedded version info since the runtime doesn't know about this revision yet - throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); - } - } -} - -function template(templateSpec, env) { - /* istanbul ignore next */ - if (!env) { - throw new _exception2['default']('No environment passed to template'); - } - if (!templateSpec || !templateSpec.main) { - throw new _exception2['default']('Unknown template object: ' + typeof templateSpec); - } - - templateSpec.main.decorator = templateSpec.main_d; - - // Note: Using env.VM references rather than local var references throughout this section to allow - // for external users to override these as psuedo-supported APIs. - env.VM.checkRevision(templateSpec.compiler); - - function invokePartialWrapper(partial, context, options) { - if (options.hash) { - context = Utils.extend({}, context, options.hash); - if (options.ids) { - options.ids[0] = true; - } - } - - partial = env.VM.resolvePartial.call(this, partial, context, options); - var result = env.VM.invokePartial.call(this, partial, context, options); - - if (result == null && env.compile) { - options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); - result = options.partials[options.name](context, options); - } - if (result != null) { - if (options.indent) { - var lines = result.split('\n'); - for (var i = 0, l = lines.length; i < l; i++) { - if (!lines[i] && i + 1 === l) { - break; - } - - lines[i] = options.indent + lines[i]; - } - result = lines.join('\n'); - } - return result; - } else { - throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); - } - } - - // Just add water - var container = { - strict: function strict(obj, name) { - if (!(name in obj)) { - throw new _exception2['default']('"' + name + '" not defined in ' + obj); - } - return obj[name]; - }, - lookup: function lookup(depths, name) { - var len = depths.length; - for (var i = 0; i < len; i++) { - if (depths[i] && depths[i][name] != null) { - return depths[i][name]; - } - } - }, - lambda: function lambda(current, context) { - return typeof current === 'function' ? current.call(context) : current; - }, - - escapeExpression: Utils.escapeExpression, - invokePartial: invokePartialWrapper, - - fn: function fn(i) { - var ret = templateSpec[i]; - ret.decorator = templateSpec[i + '_d']; - return ret; - }, - - programs: [], - program: function program(i, data, declaredBlockParams, blockParams, depths) { - var programWrapper = this.programs[i], - fn = this.fn(i); - if (data || depths || blockParams || declaredBlockParams) { - programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); - } else if (!programWrapper) { - programWrapper = this.programs[i] = wrapProgram(this, i, fn); - } - return programWrapper; - }, - - data: function data(value, depth) { - while (value && depth--) { - value = value._parent; - } - return value; - }, - merge: function merge(param, common) { - var obj = param || common; - - if (param && common && param !== common) { - obj = Utils.extend({}, common, param); - } - - return obj; - }, - - noop: env.VM.noop, - compilerInfo: templateSpec.compiler - }; - - function ret(context) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var data = options.data; - - ret._setup(options); - if (!options.partial && templateSpec.useData) { - data = initData(context, data); - } - var depths = undefined, - blockParams = templateSpec.useBlockParams ? [] : undefined; - if (templateSpec.useDepths) { - if (options.depths) { - depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; - } else { - depths = [context]; - } - } - - function main(context /*, options*/) { - return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); - } - main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); - return main(context, options); - } - ret.isTop = true; - - ret._setup = function (options) { - if (!options.partial) { - container.helpers = container.merge(options.helpers, env.helpers); - - if (templateSpec.usePartial) { - container.partials = container.merge(options.partials, env.partials); - } - if (templateSpec.usePartial || templateSpec.useDecorators) { - container.decorators = container.merge(options.decorators, env.decorators); - } - } else { - container.helpers = options.helpers; - container.partials = options.partials; - container.decorators = options.decorators; - } - }; - - ret._child = function (i, data, blockParams, depths) { - if (templateSpec.useBlockParams && !blockParams) { - throw new _exception2['default']('must pass block params'); - } - if (templateSpec.useDepths && !depths) { - throw new _exception2['default']('must pass parent depths'); - } - - return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); - }; - return ret; -} - -function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { - function prog(context) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var currentDepths = depths; - if (depths && context != depths[0]) { - currentDepths = [context].concat(depths); - } - - return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); - } - - prog = executeDecorators(fn, prog, container, depths, data, blockParams); - - prog.program = i; - prog.depth = depths ? depths.length : 0; - prog.blockParams = declaredBlockParams || 0; - return prog; -} - -function resolvePartial(partial, context, options) { - if (!partial) { - if (options.name === '@partial-block') { - var data = options.data; - while (data['partial-block'] === noop) { - data = data._parent; - } - partial = data['partial-block']; - data['partial-block'] = noop; - } else { - partial = options.partials[options.name]; - } - } else if (!partial.call && !options.name) { - // This is a dynamic partial that returned a string - options.name = partial; - partial = options.partials[partial]; - } - return partial; -} - -function invokePartial(partial, context, options) { - options.partial = true; - if (options.ids) { - options.data.contextPath = options.ids[0] || options.data.contextPath; - } - - var partialBlock = undefined; - if (options.fn && options.fn !== noop) { - options.data = _base.createFrame(options.data); - partialBlock = options.data['partial-block'] = options.fn; - - if (partialBlock.partials) { - options.partials = Utils.extend({}, options.partials, partialBlock.partials); - } - } - - if (partial === undefined && partialBlock) { - partial = partialBlock; - } - - if (partial === undefined) { - throw new _exception2['default']('The partial ' + options.name + ' could not be found'); - } else if (partial instanceof Function) { - return partial(context, options); - } -} - -function noop() { - return ''; -} - -function initData(context, data) { - if (!data || !('root' in data)) { - data = data ? _base.createFrame(data) : {}; - data.root = context; - } - return data; -} - -function executeDecorators(fn, prog, container, depths, data, blockParams) { - if (fn.decorator) { - var props = {}; - prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); - Utils.extend(prog, props); - } - return prog; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBQzhCLFFBQVE7O0FBRWxFLFNBQVMsYUFBYSxDQUFDLFlBQVksRUFBRTtBQUMxQyxNQUFNLGdCQUFnQixHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztNQUN2RCxlQUFlLDBCQUFvQixDQUFDOztBQUUxQyxNQUFJLGdCQUFnQixLQUFLLGVBQWUsRUFBRTtBQUN4QyxRQUFJLGdCQUFnQixHQUFHLGVBQWUsRUFBRTtBQUN0QyxVQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1VBQ25ELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVELFlBQU0sMkJBQWMseUZBQXlGLEdBQ3ZHLHFEQUFxRCxHQUFHLGVBQWUsR0FBRyxtREFBbUQsR0FBRyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUNoSyxNQUFNOztBQUVMLFlBQU0sMkJBQWMsd0ZBQXdGLEdBQ3RHLGlEQUFpRCxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztLQUNuRjtHQUNGO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztHQUN4RTs7QUFFRCxjQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDOzs7O0FBSWxELEtBQUcs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QixVQUFNLDJCQUFjLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLENBQUM7R0FDNUUsTUFBTSxJQUFJLE9BQU8sWUFBWSxRQUFRLEVBQUU7QUFDdEMsV0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xDO0NBQ0Y7O0FBRU0sU0FBUyxJQUFJLEdBQUc7QUFBRSxTQUFPLEVBQUUsQ0FBQztDQUFFOztBQUVyQyxTQUFTLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQy9CLE1BQUksQ0FBQyxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFBLEFBQUMsRUFBRTtBQUM5QixRQUFJLEdBQUcsSUFBSSxHQUFHLGtCQUFZLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNyQyxRQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztHQUNyQjtBQUNELFNBQU8sSUFBSSxDQUFDO0NBQ2I7O0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtBQUN6RSxNQUFJLEVBQUUsQ0FBQyxTQUFTLEVBQUU7QUFDaEIsUUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ2YsUUFBSSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVGLFNBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNCO0FBQ0QsU0FBTyxJQUFJLENBQUM7Q0FDYiIsImZpbGUiOiJydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vZXhjZXB0aW9uJztcbmltcG9ydCB7IENPTVBJTEVSX1JFVklTSU9OLCBSRVZJU0lPTl9DSEFOR0VTLCBjcmVhdGVGcmFtZSB9IGZyb20gJy4vYmFzZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja1JldmlzaW9uKGNvbXBpbGVySW5mbykge1xuICBjb25zdCBjb21waWxlclJldmlzaW9uID0gY29tcGlsZXJJbmZvICYmIGNvbXBpbGVySW5mb1swXSB8fCAxLFxuICAgICAgICBjdXJyZW50UmV2aXNpb24gPSBDT01QSUxFUl9SRVZJU0lPTjtcblxuICBpZiAoY29tcGlsZXJSZXZpc2lvbiAhPT0gY3VycmVudFJldmlzaW9uKSB7XG4gICAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBjdXJyZW50UmV2aXNpb24pIHtcbiAgICAgIGNvbnN0IHJ1bnRpbWVWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY3VycmVudFJldmlzaW9uXSxcbiAgICAgICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2NvbXBpbGVyUmV2aXNpb25dO1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYW4gb2xkZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIHJ1bnRpbWVWZXJzaW9ucyArICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVyVmVyc2lvbnMgKyAnKS4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXNlIHRoZSBlbWJlZGRlZCB2ZXJzaW9uIGluZm8gc2luY2UgdGhlIHJ1bnRpbWUgZG9lc24ndCBrbm93IGFib3V0IHRoaXMgcmV2aXNpb24geWV0XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAgICAgJ1BsZWFzZSB1cGRhdGUgeW91ciBydW50aW1lIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVySW5mb1sxXSArICcpLicpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHN1ZWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwYXJ0aWFsID0gZW52LlZNLnJlc29sdmVQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7XG4gICAgbGV0IHJlc3VsdCA9IGVudi5WTS5pbnZva2VQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKHBhcnRpYWwsIHRlbXBsYXRlU3BlYy5jb21waWxlck9wdGlvbnMsIGVudik7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgaWYgKG9wdGlvbnMuaW5kZW50KSB7XG4gICAgICAgIGxldCBsaW5lcyA9IHJlc3VsdC5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCFsaW5lc1tpXSAmJiBpICsgMSA9PT0gbCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGluZXNbaV0gPSBvcHRpb25zLmluZGVudCArIGxpbmVzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUpIHtcbiAgICAgIGlmICghKG5hbWUgaW4gb2JqKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdcIicgKyBuYW1lICsgJ1wiIG5vdCBkZWZpbmVkIGluICcgKyBvYmopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9ialtuYW1lXTtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24oZGVwdGhzLCBuYW1lKSB7XG4gICAgICBjb25zdCBsZW4gPSBkZXB0aHMubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZGVwdGhzW2ldICYmIGRlcHRoc1tpXVtuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICAgIGZuID0gdGhpcy5mbihpKTtcbiAgICAgIGlmIChkYXRhIHx8IGRlcHRocyB8fCBibG9ja1BhcmFtcyB8fCBkZWNsYXJlZEJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4sIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgICAgfSBlbHNlIGlmICghcHJvZ3JhbVdyYXBwZXIpIHtcbiAgICAgICAgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldID0gd3JhcFByb2dyYW0odGhpcywgaSwgZm4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHByb2dyYW1XcmFwcGVyO1xuICAgIH0sXG5cbiAgICBkYXRhOiBmdW5jdGlvbih2YWx1ZSwgZGVwdGgpIHtcbiAgICAgIHdoaWxlICh2YWx1ZSAmJiBkZXB0aC0tKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuX3BhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIG1lcmdlOiBmdW5jdGlvbihwYXJhbSwgY29tbW9uKSB7XG4gICAgICBsZXQgb2JqID0gcGFyYW0gfHwgY29tbW9uO1xuXG4gICAgICBpZiAocGFyYW0gJiYgY29tbW9uICYmIChwYXJhbSAhPT0gY29tbW9uKSkge1xuICAgICAgICBvYmogPSBVdGlscy5leHRlbmQoe30sIGNvbW1vbiwgcGFyYW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0sXG5cbiAgICBub29wOiBlbnYuVk0ubm9vcCxcbiAgICBjb21waWxlckluZm86IHRlbXBsYXRlU3BlYy5jb21waWxlclxuICB9O1xuXG4gIGZ1bmN0aW9uIHJldChjb250ZXh0LCBvcHRpb25zID0ge30pIHtcbiAgICBsZXQgZGF0YSA9IG9wdGlvbnMuZGF0YTtcblxuICAgIHJldC5fc2V0dXAob3B0aW9ucyk7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwgJiYgdGVtcGxhdGVTcGVjLnVzZURhdGEpIHtcbiAgICAgIGRhdGEgPSBpbml0RGF0YShjb250ZXh0LCBkYXRhKTtcbiAgICB9XG4gICAgbGV0IGRlcHRocyxcbiAgICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9IGNvbnRleHQgIT0gb3B0aW9ucy5kZXB0aHNbMF0gPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKSA6IG9wdGlvbnMuZGVwdGhzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVwdGhzID0gW2NvbnRleHRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1haW4oY29udGV4dC8qLCBvcHRpb25zKi8pIHtcbiAgICAgIHJldHVybiAnJyArIHRlbXBsYXRlU3BlYy5tYWluKGNvbnRhaW5lciwgY29udGV4dCwgY29udGFpbmVyLmhlbHBlcnMsIGNvbnRhaW5lci5wYXJ0aWFscywgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gICAgfVxuICAgIG1haW4gPSBleGVjdXRlRGVjb3JhdG9ycyh0ZW1wbGF0ZVNwZWMubWFpbiwgbWFpbiwgY29udGFpbmVyLCBvcHRpb25zLmRlcHRocyB8fCBbXSwgZGF0YSwgYmxvY2tQYXJhbXMpO1xuICAgIHJldHVybiBtYWluKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG4gIHJldC5pc1RvcCA9IHRydWU7XG5cbiAgcmV0Ll9zZXR1cCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCkge1xuICAgICAgY29udGFpbmVyLmhlbHBlcnMgPSBjb250YWluZXIubWVyZ2Uob3B0aW9ucy5oZWxwZXJzLCBlbnYuaGVscGVycyk7XG5cbiAgICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlUGFydGlhbCkge1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBjb250YWluZXIubWVyZ2Uob3B0aW9ucy5wYXJ0aWFscywgZW52LnBhcnRpYWxzKTtcbiAgICAgIH1cbiAgICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlUGFydGlhbCB8fCB0ZW1wbGF0ZVNwZWMudXNlRGVjb3JhdG9ycykge1xuICAgICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IGNvbnRhaW5lci5tZXJnZShvcHRpb25zLmRlY29yYXRvcnMsIGVudi5kZWNvcmF0b3JzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGFpbmVyLmhlbHBlcnMgPSBvcHRpb25zLmhlbHBlcnM7XG4gICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcHRpb25zLnBhcnRpYWxzO1xuICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBvcHRpb25zLmRlY29yYXRvcnM7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oY29udGFpbmVyLCBpLCB0ZW1wbGF0ZVNwZWNbaV0sIGRhdGEsIDAsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICB9O1xuICByZXR1cm4gcmV0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcFByb2dyYW0oY29udGFpbmVyLCBpLCBmbiwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICBmdW5jdGlvbiBwcm9nKGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBjdXJyZW50RGVwdGhzID0gZGVwdGhzO1xuICAgIGlmIChkZXB0aHMgJiYgY29udGV4dCAhPSBkZXB0aHNbMF0pIHtcbiAgICAgIGN1cnJlbnREZXB0aHMgPSBbY29udGV4dF0uY29uY2F0KGRlcHRocyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZuKGNvbnRhaW5lcixcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY29udGFpbmVyLmhlbHBlcnMsIGNvbnRhaW5lci5wYXJ0aWFscyxcbiAgICAgICAgb3B0aW9ucy5kYXRhIHx8IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgICBjdXJyZW50RGVwdGhzKTtcbiAgfVxuXG4gIHByb2cgPSBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKTtcblxuICBwcm9nLnByb2dyYW0gPSBpO1xuICBwcm9nLmRlcHRoID0gZGVwdGhzID8gZGVwdGhzLmxlbmd0aCA6IDA7XG4gIHByb2cuYmxvY2tQYXJhbXMgPSBkZWNsYXJlZEJsb2NrUGFyYW1zIHx8IDA7XG4gIHJldHVybiBwcm9nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhcnRpYWwocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICBpZiAoIXBhcnRpYWwpIHtcbiAgICBpZiAob3B0aW9ucy5uYW1lID09PSAnQHBhcnRpYWwtYmxvY2snKSB7XG4gICAgICBsZXQgZGF0YSA9IG9wdGlvbnMuZGF0YTtcbiAgICAgIHdoaWxlIChkYXRhWydwYXJ0aWFsLWJsb2NrJ10gPT09IG5vb3ApIHtcbiAgICAgICAgZGF0YSA9IGRhdGEuX3BhcmVudDtcbiAgICAgIH1cbiAgICAgIHBhcnRpYWwgPSBkYXRhWydwYXJ0aWFsLWJsb2NrJ107XG4gICAgICBkYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBub29wO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMucGFydGlhbCA9IHRydWU7XG4gIGlmIChvcHRpb25zLmlkcykge1xuICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCA9IG9wdGlvbnMuaWRzWzBdIHx8IG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aDtcbiAgfVxuXG4gIGxldCBwYXJ0aWFsQmxvY2s7XG4gIGlmIChvcHRpb25zLmZuICYmIG9wdGlvbnMuZm4gIT09IG5vb3ApIHtcbiAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIHBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChwYXJ0aWFsQmxvY2sucGFydGlhbHMpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHMgPSBVdGlscy5leHRlbmQoe30sIG9wdGlvbnMucGFydGlhbHMsIHBhcnRpYWxCbG9jay5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkgeyByZXR1cm4gJyc7IH1cblxuZnVuY3Rpb24gaW5pdERhdGEoY29udGV4dCwgZGF0YSkge1xuICBpZiAoIWRhdGEgfHwgISgncm9vdCcgaW4gZGF0YSkpIHtcbiAgICBkYXRhID0gZGF0YSA/IGNyZWF0ZUZyYW1lKGRhdGEpIDoge307XG4gICAgZGF0YS5yb290ID0gY29udGV4dDtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcykge1xuICBpZiAoZm4uZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb3BzID0ge307XG4gICAgcHJvZyA9IGZuLmRlY29yYXRvcihwcm9nLCBwcm9wcywgY29udGFpbmVyLCBkZXB0aHMgJiYgZGVwdGhzWzBdLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/safe-string.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/safe-string.js deleted file mode 100644 index 428b3a1dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/safe-string.js +++ /dev/null @@ -1,15 +0,0 @@ -// Build out our basic SafeString type -'use strict'; - -exports.__esModule = true; -function SafeString(string) { - this.string = string; -} - -SafeString.prototype.toString = SafeString.prototype.toHTML = function () { - return '' + this.string; -}; - -exports['default'] = SafeString; -module.exports = exports['default']; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ== diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/utils.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/utils.js deleted file mode 100644 index 2d1521469..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/handlebars/utils.js +++ /dev/null @@ -1,124 +0,0 @@ -'use strict'; - -exports.__esModule = true; -exports.extend = extend; -exports.indexOf = indexOf; -exports.escapeExpression = escapeExpression; -exports.isEmpty = isEmpty; -exports.createFrame = createFrame; -exports.blockParams = blockParams; -exports.appendContextPath = appendContextPath; -var escape = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`', - '=': '=' -}; - -var badChars = /[&<>"'`=]/g, - possible = /[&<>"'`=]/; - -function escapeChar(chr) { - return escape[chr]; -} - -function extend(obj /* , ...source */) { - for (var i = 1; i < arguments.length; i++) { - for (var key in arguments[i]) { - if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { - obj[key] = arguments[i][key]; - } - } - } - - return obj; -} - -var toString = Object.prototype.toString; - -exports.toString = toString; -// Sourced from lodash -// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt -/* eslint-disable func-style */ -var isFunction = function isFunction(value) { - return typeof value === 'function'; -}; -// fallback for older versions of Chrome and Safari -/* istanbul ignore next */ -if (isFunction(/x/)) { - exports.isFunction = isFunction = function (value) { - return typeof value === 'function' && toString.call(value) === '[object Function]'; - }; -} -exports.isFunction = isFunction; - -/* eslint-enable func-style */ - -/* istanbul ignore next */ -var isArray = Array.isArray || function (value) { - return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; -}; - -exports.isArray = isArray; -// Older IE versions do not directly support indexOf so we must implement our own, sadly. - -function indexOf(array, value) { - for (var i = 0, len = array.length; i < len; i++) { - if (array[i] === value) { - return i; - } - } - return -1; -} - -function escapeExpression(string) { - if (typeof string !== 'string') { - // don't escape SafeStrings, since they're already safe - if (string && string.toHTML) { - return string.toHTML(); - } else if (string == null) { - return ''; - } else if (!string) { - return string + ''; - } - - // Force a string conversion as this will be done by the append regardless and - // the regex test will do this transparently behind the scenes, causing issues if - // an object's to string has escaped characters in it. - string = '' + string; - } - - if (!possible.test(string)) { - return string; - } - return string.replace(badChars, escapeChar); -} - -function isEmpty(value) { - if (!value && value !== 0) { - return true; - } else if (isArray(value) && value.length === 0) { - return true; - } else { - return false; - } -} - -function createFrame(object) { - var frame = extend({}, object); - frame._parent = object; - return frame; -} - -function blockParams(params, ids) { - params.path = ids; - return params; -} - -function appendContextPath(contextPath, id) { - return (contextPath ? contextPath + '.' : '') + id; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQ3ZCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRTdCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFtQjtBQUMzQyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQUlNLFVBQVUsR0FKaEIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssbUJBQW1CLENBQUM7R0FDcEYsQ0FBQztDQUNIO1FBQ08sVUFBVSxHQUFWLFVBQVU7Ozs7O0FBSVgsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFTLEtBQUssRUFBRTtBQUN0RCxTQUFPLEFBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsR0FBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUFHLEtBQUssQ0FBQztDQUNqRyxDQUFDOzs7OztBQUdLLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUdNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUFFLFdBQU8sTUFBTSxDQUFDO0dBQUU7QUFDOUMsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gICAgICBwb3NzaWJsZSA9IC9bJjw+XCInYD1dLztcblxuZnVuY3Rpb24gZXNjYXBlQ2hhcihjaHIpIHtcbiAgcmV0dXJuIGVzY2FwZVtjaHJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0ZW5kKG9iai8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgfTtcbn1cbmV4cG9ydCB7aXNGdW5jdGlvbn07XG4vKiBlc2xpbnQtZW5hYmxlIGZ1bmMtc3R5bGUgKi9cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpID8gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScgOiBmYWxzZTtcbn07XG5cbi8vIE9sZGVyIElFIHZlcnNpb25zIGRvIG5vdCBkaXJlY3RseSBzdXBwb3J0IGluZGV4T2Ygc28gd2UgbXVzdCBpbXBsZW1lbnQgb3VyIG93biwgc2FkbHkuXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGFycmF5W2ldID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkgeyByZXR1cm4gc3RyaW5nOyB9XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZShiYWRDaGFycywgZXNjYXBlQ2hhcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZyYW1lKG9iamVjdCkge1xuICBsZXQgZnJhbWUgPSBleHRlbmQoe30sIG9iamVjdCk7XG4gIGZyYW1lLl9wYXJlbnQgPSBvYmplY3Q7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJsb2NrUGFyYW1zKHBhcmFtcywgaWRzKSB7XG4gIHBhcmFtcy5wYXRoID0gaWRzO1xuICByZXR1cm4gcGFyYW1zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kQ29udGV4dFBhdGgoY29udGV4dFBhdGgsIGlkKSB7XG4gIHJldHVybiAoY29udGV4dFBhdGggPyBjb250ZXh0UGF0aCArICcuJyA6ICcnKSArIGlkO1xufVxuIl19 diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/precompiler.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/precompiler.js deleted file mode 100644 index bddca8e1e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/cjs/precompiler.js +++ /dev/null @@ -1,308 +0,0 @@ -/* eslint-disable no-console */ -'use strict'; - -// istanbul ignore next - -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; } } - -// istanbul ignore next - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - -var _async = require('async'); - -var _async2 = _interopRequireDefault(_async); - -var _fs = require('fs'); - -var _fs2 = _interopRequireDefault(_fs); - -var _handlebars = require('./handlebars'); - -var Handlebars = _interopRequireWildcard(_handlebars); - -var _path = require('path'); - -var _sourceMap = require('source-map'); - -var _uglifyJs = require('uglify-js'); - -var _uglifyJs2 = _interopRequireDefault(_uglifyJs); - -module.exports.loadTemplates = function (opts, callback) { - loadStrings(opts, function (err, strings) { - if (err) { - callback(err); - } else { - loadFiles(opts, function (err, files) { - if (err) { - callback(err); - } else { - opts.templates = strings.concat(files); - callback(undefined, opts); - } - }); - } - }); -}; - -function loadStrings(opts, callback) { - var strings = arrayCast(opts.string), - names = arrayCast(opts.name); - - if (names.length !== strings.length && strings.length > 1) { - return callback(new Handlebars.Exception('Number of names did not match the number of string inputs')); - } - - _async2['default'].map(strings, function (string, callback) { - if (string !== '-') { - callback(undefined, string); - } else { - (function () { - // Load from stdin - var buffer = ''; - process.stdin.setEncoding('utf8'); - - process.stdin.on('data', function (chunk) { - buffer += chunk; - }); - process.stdin.on('end', function () { - callback(undefined, buffer); - }); - })(); - } - }, function (err, strings) { - strings = strings.map(function (string, index) { - return { - name: names[index], - path: names[index], - source: string - }; - }); - callback(err, strings); - }); -} - -function loadFiles(opts, callback) { - // Build file extension pattern - var extension = (opts.extension || 'handlebars').replace(/[\\^$*+?.():=!|{}\-\[\]]/g, function (arg) { - return '\\' + arg; - }); - extension = new RegExp('\\.' + extension + '$'); - - var ret = [], - queue = (opts.files || []).map(function (template) { - return { template: template, root: opts.root }; - }); - _async2['default'].whilst(function () { - return queue.length; - }, function (callback) { - var _queue$shift = queue.shift(); - - var path = _queue$shift.template; - var root = _queue$shift.root; - - _fs2['default'].stat(path, function (err, stat) { - if (err) { - return callback(new Handlebars.Exception('Unable to open template file "' + path + '"')); - } - - if (stat.isDirectory()) { - opts.hasDirectory = true; - - _fs2['default'].readdir(path, function (err, children) { - /* istanbul ignore next : Race condition that being too lazy to test */ - if (err) { - return callback(err); - } - children.forEach(function (file) { - var childPath = path + '/' + file; - - if (extension.test(childPath) || _fs2['default'].statSync(childPath).isDirectory()) { - queue.push({ template: childPath, root: root || path }); - } - }); - - callback(); - }); - } else { - _fs2['default'].readFile(path, 'utf8', function (err, data) { - /* istanbul ignore next : Race condition that being too lazy to test */ - if (err) { - return callback(err); - } - - if (opts.bom && data.indexOf('') === 0) { - data = data.substring(1); - } - - // Clean the template name - var name = path; - if (!root) { - name = _path.basename(name); - } else if (name.indexOf(root) === 0) { - name = name.substring(root.length + 1); - } - name = name.replace(extension, ''); - - ret.push({ - path: path, - name: name, - source: data - }); - - callback(); - }); - } - }); - }, function (err) { - if (err) { - callback(err); - } else { - callback(undefined, ret); - } - }); -} - -module.exports.cli = function (opts) { - if (opts.version) { - console.log(Handlebars.VERSION); - return; - } - - if (!opts.templates.length && !opts.hasDirectory) { - throw new Handlebars.Exception('Must define at least one template or directory.'); - } - - if (opts.simple && opts.min) { - throw new Handlebars.Exception('Unable to minimize simple output'); - } - - var multiple = opts.templates.length !== 1 || opts.hasDirectory; - if (opts.simple && multiple) { - throw new Handlebars.Exception('Unable to output multiple templates in simple mode'); - } - - // Force simple mode if we have only one template and it's unnamed. - if (!opts.amd && !opts.commonjs && opts.templates.length === 1 && !opts.templates[0].name) { - opts.simple = true; - } - - // Convert the known list into a hash - var known = {}; - if (opts.known && !Array.isArray(opts.known)) { - opts.known = [opts.known]; - } - if (opts.known) { - for (var i = 0, len = opts.known.length; i < len; i++) { - known[opts.known[i]] = true; - } - } - - var objectName = opts.partial ? 'Handlebars.partials' : 'templates'; - - var output = new _sourceMap.SourceNode(); - if (!opts.simple) { - if (opts.amd) { - output.add('define([\'' + opts.handlebarPath + 'handlebars.runtime\'], function(Handlebars) {\n Handlebars = Handlebars["default"];'); - } else if (opts.commonjs) { - output.add('var Handlebars = require("' + opts.commonjs + '");'); - } else { - output.add('(function() {\n'); - } - output.add(' var template = Handlebars.template, templates = '); - if (opts.namespace) { - output.add(opts.namespace); - output.add(' = '); - output.add(opts.namespace); - output.add(' || '); - } - output.add('{};\n'); - } - - opts.templates.forEach(function (template) { - var options = { - knownHelpers: known, - knownHelpersOnly: opts.o - }; - - if (opts.map) { - options.srcName = template.path; - } - if (opts.data) { - options.data = true; - } - - var precompiled = Handlebars.precompile(template.source, options); - - // If we are generating a source map, we have to reconstruct the SourceNode object - if (opts.map) { - var consumer = new _sourceMap.SourceMapConsumer(precompiled.map); - precompiled = _sourceMap.SourceNode.fromStringWithSourceMap(precompiled.code, consumer); - } - - if (opts.simple) { - output.add([precompiled, '\n']); - } else { - if (!template.name) { - throw new Handlebars.Exception('Name missing for template'); - } - - if (opts.amd && !multiple) { - output.add('return '); - } - output.add([objectName, '[\'', template.name, '\'] = template(', precompiled, ');\n']); - } - }); - - // Output the content - if (!opts.simple) { - if (opts.amd) { - if (multiple) { - output.add(['return ', objectName, ';\n']); - } - output.add('});'); - } else if (!opts.commonjs) { - output.add('})();'); - } - } - - if (opts.map) { - output.add('\n//# sourceMappingURL=' + opts.map + '\n'); - } - - output = output.toStringWithSourceMap(); - output.map = output.map + ''; - - if (opts.min) { - output = _uglifyJs2['default'].minify(output.code, { - fromString: true, - - outSourceMap: opts.map, - inSourceMap: JSON.parse(output.map) - }); - if (opts.map) { - output.code += '\n//# sourceMappingURL=' + opts.map + '\n'; - } - } - - if (opts.map) { - _fs2['default'].writeFileSync(opts.map, output.map, 'utf8'); - } - output = output.code; - - if (opts.output) { - _fs2['default'].writeFileSync(opts.output, output, 'utf8'); - } else { - console.log(output); - } -}; - -function arrayCast(value) { - value = value != null ? value : []; - if (!Array.isArray(value)) { - value = [value]; - } - return value; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9wcmVjb21waWxlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztxQkFDa0IsT0FBTzs7OztrQkFDVixJQUFJOzs7OzBCQUNTLGNBQWM7O0lBQTlCLFVBQVU7O29CQUNDLE1BQU07O3lCQUNlLFlBQVk7O3dCQUNyQyxXQUFXOzs7O0FBRTlCLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLFVBQVMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUN0RCxhQUFXLENBQUMsSUFBSSxFQUFFLFVBQVMsR0FBRyxFQUFFLE9BQU8sRUFBRTtBQUN2QyxRQUFJLEdBQUcsRUFBRTtBQUNQLGNBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNmLE1BQU07QUFDTCxlQUFTLENBQUMsSUFBSSxFQUFFLFVBQVMsR0FBRyxFQUFFLEtBQUssRUFBRTtBQUNuQyxZQUFJLEdBQUcsRUFBRTtBQUNQLGtCQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDZixNQUFNO0FBQ0wsY0FBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLGtCQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzNCO09BQ0YsQ0FBQyxDQUFDO0tBQ0o7R0FDRixDQUFDLENBQUM7Q0FDSixDQUFDOztBQUVGLFNBQVMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDbkMsTUFBSSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7TUFDaEMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRWpDLE1BQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsTUFBTSxJQUM1QixPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtBQUN6QixXQUFPLFFBQVEsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsMkRBQTJELENBQUMs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QUUsSUFBSSxDQUFDLEdBQUc7QUFDdEIsaUJBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7S0FDcEMsQ0FBQyxDQUFDO0FBQ0gsUUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ1osWUFBTSxDQUFDLElBQUksSUFBSSx5QkFBeUIsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztLQUM1RDtHQUNGOztBQUVELE1BQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNaLG9CQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDaEQ7QUFDRCxRQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQzs7QUFFckIsTUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2Ysb0JBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0dBQy9DLE1BQU07QUFDTCxXQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0dBQ3JCO0NBQ0YsQ0FBQzs7QUFFRixTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDeEIsT0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNuQyxNQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6QixTQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztHQUNqQjtBQUNELFNBQU8sS0FBSyxDQUFDO0NBQ2QiLCJmaWxlIjoicHJlY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgQXN5bmMgZnJvbSAnYXN5bmMnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIEhhbmRsZWJhcnMgZnJvbSAnLi9oYW5kbGViYXJzJztcbmltcG9ydCB7YmFzZW5hbWV9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHtTb3VyY2VNYXBDb25zdW1lciwgU291cmNlTm9kZX0gZnJvbSAnc291cmNlLW1hcCc7XG5pbXBvcnQgdWdsaWZ5IGZyb20gJ3VnbGlmeS1qcyc7XG5cbm1vZHVsZS5leHBvcnRzLmxvYWRUZW1wbGF0ZXMgPSBmdW5jdGlvbihvcHRzLCBjYWxsYmFjaykge1xuICBsb2FkU3RyaW5ncyhvcHRzLCBmdW5jdGlvbihlcnIsIHN0cmluZ3MpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2FkRmlsZXMob3B0cywgZnVuY3Rpb24oZXJyLCBmaWxlcykge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvcHRzLnRlbXBsYXRlcyA9IHN0cmluZ3MuY29uY2F0KGZpbGVzKTtcbiAgICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQsIG9wdHMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gbG9hZFN0cmluZ3Mob3B0cywgY2FsbGJhY2spIHtcbiAgbGV0IHN0cmluZ3MgPSBhcnJheUNhc3Qob3B0cy5zdHJpbmcpLFxuICAgICAgbmFtZXMgPSBhcnJheUNhc3Qob3B0cy5uYW1lKTtcblxuICBpZiAobmFtZXMubGVuZ3RoICE9PSBzdHJpbmdzLmxlbmd0aFxuICAgICAgJiYgc3RyaW5ncy5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBIYW5kbGViYXJzLkV4Y2VwdGlvbignTnVtYmVyIG9mIG5hbWVzIGRpZCBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJpbmcgaW5wdXRzJykpO1xuICB9XG5cbiAgQXN5bmMubWFwKHN0cmluZ3MsIGZ1bmN0aW9uKHN0cmluZywgY2FsbGJhY2spIHtcbiAgICAgIGlmIChzdHJpbmcgIT09ICctJykge1xuICAgICAgICBjYWxsYmFjayh1bmRlZmluZWQsIHN0cmluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMb2FkIGZyb20gc3RkaW5cbiAgICAgICAgbGV0IGJ1ZmZlciA9ICcnO1xuICAgICAgICBwcm9jZXNzLnN0ZGluLnNldEVuY29kaW5nKCd1dGY4Jyk7XG5cbiAgICAgICAgcHJvY2Vzcy5zdGRpbi5vbignZGF0YScsIGZ1bmN0aW9uKGNodW5rKSB7XG4gICAgICAgICAgYnVmZmVyICs9IGNodW5rO1xuICAgICAgICB9KTtcbiAgICAgICAgcHJvY2Vzcy5zdGRpbi5vbignZW5kJywgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgY2FsbGJhY2sodW5kZWZpbmVkLCBidWZmZXIpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGZ1bmN0aW9uKGVyciwgc3RyaW5ncykge1xuICAgICAgc3RyaW5ncyA9IHN0cmluZ3MubWFwKChzdHJpbmcsIGluZGV4KSA9PiAoe1xuICAgICAgICBuYW1lOiBuYW1lc1tpbmRleF0sXG4gICAgICAgIHBhdGg6IG5hbWVzW2luZGV4XSxcbiAgICAgICAgc291cmNlOiBzdHJpbmdcbiAgICAgIH0pKTtcbiAgICAgIGNhbGxiYWNrKGVyciwgc3RyaW5ncyk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGxvYWRGaWxlcyhvcHRzLCBjYWxsYmFjaykge1xuICAvLyBCdWlsZCBmaWxlIGV4dGVuc2lvbiBwYXR0ZXJuXG4gIGxldCBleHRlbnNpb24gPSAob3B0cy5leHRlbnNpb24gfHwgJ2hhbmRsZWJhcnMnKS5yZXBsYWNlKC9bXFxcXF4kKis/LigpOj0hfHt9XFwtXFxbXFxdXS9nLCBmdW5jdGlvbihhcmcpIHsgcmV0dXJuICdcXFxcJyArIGFyZzsgfSk7XG4gIGV4dGVuc2lvbiA9IG5ldyBSZWdFeHAoJ1xcXFwuJyArIGV4dGVuc2lvbiArICckJyk7XG5cbiAgbGV0IHJldCA9IFtdLFxuICAgICAgcXVldWUgPSAob3B0cy5maWxlcyB8fCBbXSkubWFwKCh0ZW1wbGF0ZSkgPT4gKHt0ZW1wbGF0ZSwgcm9vdDogb3B0cy5yb290fSkpO1xuICBBc3luYy53aGlsc3QoKCkgPT4gcXVldWUubGVuZ3RoLCBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgIGxldCB7dGVtcGxhdGU6IHBhdGgsIHJvb3R9ID0gcXVldWUuc2hpZnQoKTtcblxuICAgIGZzLnN0YXQocGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0KSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgSGFuZGxlYmFycy5FeGNlcHRpb24oYFVuYWJsZSB0byBvcGVuIHRlbXBsYXRlIGZpbGUgXCIke3BhdGh9XCJgKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgb3B0cy5oYXNEaXJlY3RvcnkgPSB0cnVlO1xuXG4gICAgICAgIGZzLnJlYWRkaXIocGF0aCwgZnVuY3Rpb24oZXJyLCBjaGlsZHJlbikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IDogUmFjZSBjb25kaXRpb24gdGhhdCBiZWluZyB0b28gbGF6eSB0byB0ZXN0ICovXG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oZmlsZSkge1xuICAgICAgICAgICAgbGV0IGNoaWxkUGF0aCA9IHBhdGggKyAnLycgKyBmaWxlO1xuXG4gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uLnRlc3QoY2hpbGRQYXRoKSB8fCBmcy5zdGF0U3luYyhjaGlsZFBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICAgICAgcXVldWUucHVzaCh7dGVtcGxhdGU6IGNoaWxkUGF0aCwgcm9vdDogcm9vdCB8fCBwYXRofSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZzLnJlYWRGaWxlKHBhdGgsICd1dGY4JywgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgOiBSYWNlIGNvbmRpdGlvbiB0aGF0IGJlaW5nIHRvbyBsYXp5IHRvIHRlc3QgKi9cbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3B0cy5ib20gJiYgZGF0YS5pbmRleE9mKCdcXHVGRUZGJykgPT09IDApIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhLnN1YnN0cmluZygxKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDbGVhbiB0aGUgdGVtcGxhdGUgbmFtZVxuICAgICAgICAgIGxldCBuYW1lID0gcGF0aDtcbiAgICAgICAgICBpZiAoIXJvb3QpIHtcbiAgICAgICAgICAgIG5hbWUgPSBiYXNlbmFtZShuYW1lKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUuaW5kZXhPZihyb290KSA9PT0gMCkge1xuICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKHJvb3QubGVuZ3RoICsgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2UoZXh0ZW5zaW9uLCAnJyk7XG5cbiAgICAgICAgICByZXQucHVzaCh7XG4gICAgICAgICAgICBwYXRoOiBwYXRoLFxuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIHNvdXJjZTogZGF0YVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG4gIGZ1bmN0aW9uKGVycikge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKHVuZGVmaW5lZCwgcmV0KTtcbiAgICB9XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5jbGkgPSBmdW5jdGlvbihvcHRzKSB7XG4gIGlmIChvcHRzLnZlcnNpb24pIHtcbiAgICBjb25zb2xlLmxvZyhIYW5kbGViYXJzLlZFUlNJT04pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghb3B0cy50ZW1wbGF0ZXMubGVuZ3RoICYmICFvcHRzLmhhc0RpcmVjdG9yeSkge1xuICAgIHRocm93IG5ldyBIYW5kbGViYXJzLkV4Y2VwdGlvbignTXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHRlbXBsYXRlIG9yIGRpcmVjdG9yeS4nKTtcbiAgfVxuXG4gIGlmIChvcHRzLnNpbXBsZSAmJiBvcHRzLm1pbikge1xuICAgIHRocm93IG5ldyBIYW5kbGViYXJzLkV4Y2VwdGlvbignVW5hYmxlIHRvIG1pbmltaXplIHNpbXBsZSBvdXRwdXQnKTtcbiAgfVxuXG4gIGNvbnN0IG11bHRpcGxlID0gb3B0cy50ZW1wbGF0ZXMubGVuZ3RoICE9PSAxIHx8IG9wdHMuaGFzRGlyZWN0b3J5O1xuICBpZiAob3B0cy5zaW1wbGUgJiYgbXVsdGlwbGUpIHtcbiAgICB0aHJvdyBuZXcgSGFuZGxlYmFycy5FeGNlcHRpb24oJ1VuYWJsZSB0byBvdXRwdXQgbXVsdGlwbGUgdGVtcGxhdGVzIGluIHNpbXBsZSBtb2RlJyk7XG4gIH1cblxuICAvLyBGb3JjZSBzaW1wbGUgbW9kZSBpZiB3ZSBoYXZlIG9ubHkgb25lIHRlbXBsYXRlIGFuZCBpdCdzIHVubmFtZWQuXG4gIGlmICghb3B0cy5hbWQgJiYgIW9wdHMuY29tbW9uanMgJiYgb3B0cy50ZW1wbGF0ZXMubGVuZ3RoID09PSAxXG4gICAgICAmJiAhb3B0cy50ZW1wbGF0ZXNbMF0ubmFtZSkge1xuICAgIG9wdHMuc2ltcGxlID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdGhlIGtub3duIGxpc3QgaW50byBhIGhhc2hcbiAgbGV0IGtub3duID0ge307XG4gIGlmIChvcHRzLmtub3duICYmICFBcnJheS5pc0FycmF5KG9wdHMua25vd24pKSB7XG4gICAgb3B0cy5rbm93biA9IFtvcHRzLmtub3duXTtcbiAgfVxuICBpZiAob3B0cy5rbm93bikge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBvcHRzLmtub3duLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrbm93bltvcHRzLmtub3duW2ldXSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgb2JqZWN0TmFtZSA9IG9wdHMucGFydGlhbCA/ICdIYW5kbGViYXJzLnBhcnRpYWxzJyA6ICd0ZW1wbGF0ZXMnO1xuXG4gIGxldCBvdXRwdXQgPSBuZXcgU291cmNlTm9kZSgpO1xuICBpZiAoIW9wdHMuc2ltcGxlKSB7XG4gICAgaWYgKG9wdHMuYW1kKSB7XG4gICAgICBvdXRwdXQuYWRkKCdkZWZpbmUoW1xcJycgKyBvcHRzLmhhbmRsZWJhclBhdGggKyAnaGFuZGxlYmFycy5ydW50aW1lXFwnXSwgZnVuY3Rpb24oSGFuZGxlYmFycykge1xcbiAgSGFuZGxlYmFycyA9IEhhbmRsZWJhcnNbXCJkZWZhdWx0XCJdOycpO1xuICAgIH0gZWxzZSBpZiAob3B0cy5jb21tb25qcykge1xuICAgICAgb3V0cHV0LmFkZCgndmFyIEhhbmRsZWJhcnMgPSByZXF1aXJlKFwiJyArIG9wdHMuY29tbW9uanMgKyAnXCIpOycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRwdXQuYWRkKCcoZnVuY3Rpb24oKSB7XFxuJyk7XG4gICAgfVxuICAgIG91dHB1dC5hZGQoJyAgdmFyIHRlbXBsYXRlID0gSGFuZGxlYmFycy50ZW1wbGF0ZSwgdGVtcGxhdGVzID0gJyk7XG4gICAgaWYgKG9wdHMubmFtZXNwYWNlKSB7XG4gICAgICBvdXRwdXQuYWRkKG9wdHMubmFtZXNwYWNlKTtcbiAgICAgIG91dHB1dC5hZGQoJyA9ICcpO1xuICAgICAgb3V0cHV0LmFkZChvcHRzLm5hbWVzcGFjZSk7XG4gICAgICBvdXRwdXQuYWRkKCcgfHwgJyk7XG4gICAgfVxuICAgIG91dHB1dC5hZGQoJ3t9O1xcbicpO1xuICB9XG5cbiAgb3B0cy50ZW1wbGF0ZXMuZm9yRWFjaChmdW5jdGlvbih0ZW1wbGF0ZSkge1xuICAgIGxldCBvcHRpb25zID0ge1xuICAgICAga25vd25IZWxwZXJzOiBrbm93bixcbiAgICAgIGtub3duSGVscGVyc09ubHk6IG9wdHMub1xuICAgIH07XG5cbiAgICBpZiAob3B0cy5tYXApIHtcbiAgICAgIG9wdGlvbnMuc3JjTmFtZSA9IHRlbXBsYXRlLnBhdGg7XG4gICAgfVxuICAgIGlmIChvcHRzLmRhdGEpIHtcbiAgICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHByZWNvbXBpbGVkID0gSGFuZGxlYmFycy5wcmVjb21waWxlKHRlbXBsYXRlLnNvdXJjZSwgb3B0aW9ucyk7XG5cbiAgICAvLyBJZiB3ZSBhcmUgZ2VuZXJhdGluZyBhIHNvdXJjZSBtYXAsIHdlIGhhdmUgdG8gcmVjb25zdHJ1Y3QgdGhlIFNvdXJjZU5vZGUgb2JqZWN0XG4gICAgaWYgKG9wdHMubWFwKSB7XG4gICAgICBsZXQgY29uc3VtZXIgPSBuZXcgU291cmNlTWFwQ29uc3VtZXIocHJlY29tcGlsZWQubWFwKTtcbiAgICAgIHByZWNvbXBpbGVkID0gU291cmNlTm9kZS5mcm9tU3RyaW5nV2l0aFNvdXJjZU1hcChwcmVjb21waWxlZC5jb2RlLCBjb25zdW1lcik7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuc2ltcGxlKSB7XG4gICAgICBvdXRwdXQuYWRkKFtwcmVjb21waWxlZCwgJ1xcbiddKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCF0ZW1wbGF0ZS5uYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBIYW5kbGViYXJzLkV4Y2VwdGlvbignTmFtZSBtaXNzaW5nIGZvciB0ZW1wbGF0ZScpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0cy5hbWQgJiYgIW11bHRpcGxlKSB7XG4gICAgICAgIG91dHB1dC5hZGQoJ3JldHVybiAnKTtcbiAgICAgIH1cbiAgICAgIG91dHB1dC5hZGQoW29iamVjdE5hbWUsICdbXFwnJywgdGVtcGxhdGUubmFtZSwgJ1xcJ10gPSB0ZW1wbGF0ZSgnLCBwcmVjb21waWxlZCwgJyk7XFxuJ10pO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gT3V0cHV0IHRoZSBjb250ZW50XG4gIGlmICghb3B0cy5zaW1wbGUpIHtcbiAgICBpZiAob3B0cy5hbWQpIHtcbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICBvdXRwdXQuYWRkKFsncmV0dXJuICcsIG9iamVjdE5hbWUsICc7XFxuJ10pO1xuICAgICAgfVxuICAgICAgb3V0cHV0LmFkZCgnfSk7Jyk7XG4gICAgfSBlbHNlIGlmICghb3B0cy5jb21tb25qcykge1xuICAgICAgb3V0cHV0LmFkZCgnfSkoKTsnKTtcbiAgICB9XG4gIH1cblxuXG4gIGlmIChvcHRzLm1hcCkge1xuICAgIG91dHB1dC5hZGQoJ1xcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPScgKyBvcHRzLm1hcCArICdcXG4nKTtcbiAgfVxuXG4gIG91dHB1dCA9IG91dHB1dC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoKTtcbiAgb3V0cHV0Lm1hcCA9IG91dHB1dC5tYXAgKyAnJztcblxuICBpZiAob3B0cy5taW4pIHtcbiAgICBvdXRwdXQgPSB1Z2xpZnkubWluaWZ5KG91dHB1dC5jb2RlLCB7XG4gICAgICBmcm9tU3RyaW5nOiB0cnVlLFxuXG4gICAgICBvdXRTb3VyY2VNYXA6IG9wdHMubWFwLFxuICAgICAgaW5Tb3VyY2VNYXA6IEpTT04ucGFyc2Uob3V0cHV0Lm1hcClcbiAgICB9KTtcbiAgICBpZiAob3B0cy5tYXApIHtcbiAgICAgIG91dHB1dC5jb2RlICs9ICdcXG4vLyMgc291cmNlTWFwcGluZ1VSTD0nICsgb3B0cy5tYXAgKyAnXFxuJztcbiAgICB9XG4gIH1cblxuICBpZiAob3B0cy5tYXApIHtcbiAgICBmcy53cml0ZUZpbGVTeW5jKG9wdHMubWFwLCBvdXRwdXQubWFwLCAndXRmOCcpO1xuICB9XG4gIG91dHB1dCA9IG91dHB1dC5jb2RlO1xuXG4gIGlmIChvcHRzLm91dHB1dCkge1xuICAgIGZzLndyaXRlRmlsZVN5bmMob3B0cy5vdXRwdXQsIG91dHB1dCwgJ3V0ZjgnKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZyhvdXRwdXQpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBhcnJheUNhc3QodmFsdWUpIHtcbiAgdmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiBbXTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHZhbHVlID0gW3ZhbHVlXTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG4iXX0= diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.amd.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.amd.js deleted file mode 100644 index 6cf7bddcb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.amd.js +++ /dev/null @@ -1,4339 +0,0 @@ -/**! - - @license - handlebars v4.0.6 - -Copyright (C) 2011-2016 by Yehuda Katz - -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. - -*/ -define('handlebars/utils',['exports'], function (exports) { - 'use strict'; - - exports.__esModule = true; - exports.extend = extend; - exports.indexOf = indexOf; - exports.escapeExpression = escapeExpression; - exports.isEmpty = isEmpty; - exports.createFrame = createFrame; - exports.blockParams = blockParams; - exports.appendContextPath = appendContextPath; - var escape = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`', - '=': '=' - }; - - var badChars = /[&<>"'`=]/g, - possible = /[&<>"'`=]/; - - function escapeChar(chr) { - return escape[chr]; - } - - function extend(obj /* , ...source */) { - for (var i = 1; i < arguments.length; i++) { - for (var key in arguments[i]) { - if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { - obj[key] = arguments[i][key]; - } - } - } - - return obj; - } - - var toString = Object.prototype.toString; - - exports.toString = toString; - // Sourced from lodash - // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt - /* eslint-disable func-style */ - var isFunction = function isFunction(value) { - return typeof value === 'function'; - }; - // fallback for older versions of Chrome and Safari - /* istanbul ignore next */ - if (isFunction(/x/)) { - exports.isFunction = isFunction = function (value) { - return typeof value === 'function' && toString.call(value) === '[object Function]'; - }; - } - exports.isFunction = isFunction; - - /* eslint-enable func-style */ - - /* istanbul ignore next */ - var isArray = Array.isArray || function (value) { - return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; - }; - - exports.isArray = isArray; - // Older IE versions do not directly support indexOf so we must implement our own, sadly. - - function indexOf(array, value) { - for (var i = 0, len = array.length; i < len; i++) { - if (array[i] === value) { - return i; - } - } - return -1; - } - - function escapeExpression(string) { - if (typeof string !== 'string') { - // don't escape SafeStrings, since they're already safe - if (string && string.toHTML) { - return string.toHTML(); - } else if (string == null) { - return ''; - } else if (!string) { - return string + ''; - } - - // Force a string conversion as this will be done by the append regardless and - // the regex test will do this transparently behind the scenes, causing issues if - // an object's to string has escaped characters in it. - string = '' + string; - } - - if (!possible.test(string)) { - return string; - } - return string.replace(badChars, escapeChar); - } - - function isEmpty(value) { - if (!value && value !== 0) { - return true; - } else if (isArray(value) && value.length === 0) { - return true; - } else { - return false; - } - } - - function createFrame(object) { - var frame = extend({}, object); - frame._parent = object; - return frame; - } - - function blockParams(params, ids) { - params.path = ids; - return params; - } - - function appendContextPath(contextPath, id) { - return (contextPath ? contextPath + '.' : '') + id; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsTUFBTSxNQUFNLEdBQUc7QUFDYixPQUFHLEVBQUUsT0FBTztBQUNaLE9BQUcsRUFBRSxNQUFNO0FBQ1gsT0FBRyxFQUFFLE1BQU07QUFDWCxPQUFHLEVBQUUsUUFBUTtBQUNiLE9BQUcsRUFBRSxRQUFRO0FBQ2IsT0FBRyxFQUFFLFFBQVE7QUFDYixPQUFHLEVBQUUsUUFBUTtHQUNkLENBQUM7O0FBRUYsTUFBTSxRQUFRLEdBQUcsWUFBWTtNQUN2QixRQUFRLEdBQUcsV0FBVyxDQUFDOztBQUU3QixXQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDdkIsV0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDcEI7O0FBRU0sV0FBUyxNQUFNLENBQUMsR0FBRyxvQkFBbUI7QUFDM0MsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsV0FBSyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDNUIsWUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzNELGFBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7T0FDRjtLQUNGOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1o7O0FBRU0sTUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Ozs7OztBQUtoRCxNQUFJLFVBQVUsR0FBRyxvQkFBUyxLQUFLLEVBQUU7QUFDL0IsV0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUM7R0FDcEMsQ0FBQzs7O0FBR0YsTUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbkIsWUFJTSxVQUFVLEdBSmhCLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRTtBQUMzQixhQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUFDO0tBQ3BGLENBQUM7R0FDSDtVQUNPLFVBQVUsR0FBVixVQUFVOzs7OztBQUlYLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBUyxLQUFLLEVBQUU7QUFDdEQsV0FBTyxBQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEdBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7R0FDakcsQ0FBQzs7Ozs7QUFHSyxXQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ3BDLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsVUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQ3RCLGVBQU8sQ0FBQyxDQUFDO09BQ1Y7S0FDRjtBQUNELFdBQU8sQ0FBQyxDQUFDLENBQUM7R0FDWDs7QUFHTSxXQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtBQUN2QyxRQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTs7QUFFOUIsVUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUMzQixlQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztPQUN4QixNQUFNLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUN6QixlQUFPLEVBQUUsQ0FBQztPQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNsQixlQUFPLE1BQU0sR0FBRyxFQUFFLENBQUM7T0FDcEI7Ozs7O0FBS0QsWUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7S0FDdEI7O0FBRUQsUUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFBRSxhQUFPLE1BQU0sQ0FBQztLQUFFO0FBQzlDLFdBQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7R0FDN0M7O0FBRU0sV0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzdCLFFBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN6QixhQUFPLElBQUksQ0FBQztLQUNiLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0MsYUFBTyxJQUFJLENBQUM7S0FDYixNQUFNO0FBQ0wsYUFBTyxLQUFLLENBQUM7S0FDZDtHQUNGOztBQUVNLFdBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUNsQyxRQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLFNBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLFdBQU8sS0FBSyxDQUFDO0dBQ2Q7O0FBRU0sV0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN2QyxVQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNsQixXQUFPLE1BQU0sQ0FBQztHQUNmOztBQUVNLFdBQVMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRTtBQUNqRCxXQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFBLEdBQUksRUFBRSxDQUFDO0dBQ3BEIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXNjYXBlID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgJ2AnOiAnJiN4NjA7JyxcbiAgJz0nOiAnJiN4M0Q7J1xufTtcblxuY29uc3QgYmFkQ2hhcnMgPSAvWyY8PlwiJ2A9XS9nLFxuICAgICAgcG9zc2libGUgPSAvWyY8PlwiJ2A9XS87XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXIoY2hyKSB7XG4gIHJldHVybiBlc2NhcGVbY2hyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChvYmovKiAsIC4uLnNvdXJjZSAqLykge1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGtleSBpbiBhcmd1bWVudHNbaV0pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW2ldLCBrZXkpKSB7XG4gICAgICAgIG9ialtrZXldID0gYXJndW1lbnRzW2ldW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZXhwb3J0IGxldCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIFNvdXJjZWQgZnJvbSBsb2Rhc2hcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9sb2Rhc2gvYmxvYi9tYXN0ZXIvTElDRU5TRS50eHRcbi8qIGVzbGludC1kaXNhYmxlIGZ1bmMtc3R5bGUgKi9cbmxldCBpc0Z1bmN0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn07XG4vLyBmYWxsYmFjayBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmlcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAoaXNGdW5jdGlvbigveC8pKSB7XG4gIGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gIH07XG59XG5leHBvcnQge2lzRnVuY3Rpb259O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSA/IHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nIDogZmFsc2U7XG59O1xuXG4vLyBPbGRlciBJRSB2ZXJzaW9ucyBkbyBub3QgZGlyZWN0bHkgc3VwcG9ydCBpbmRleE9mIHNvIHdlIG11c3QgaW1wbGVtZW50IG91ciBvd24sIHNhZGx5LlxuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChhcnJheVtpXSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUV4cHJlc3Npb24oc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGVzY2FwZSBTYWZlU3RyaW5ncywgc2luY2UgdGhleSdyZSBhbHJlYWR5IHNhZmVcbiAgICBpZiAoc3RyaW5nICYmIHN0cmluZy50b0hUTUwpIHtcbiAgICAgIHJldHVybiBzdHJpbmcudG9IVE1MKCk7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSBpZiAoIXN0cmluZykge1xuICAgICAgcmV0dXJuIHN0cmluZyArICcnO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIGEgc3RyaW5nIGNvbnZlcnNpb24gYXMgdGhpcyB3aWxsIGJlIGRvbmUgYnkgdGhlIGFwcGVuZCByZWdhcmRsZXNzIGFuZFxuICAgIC8vIHRoZSByZWdleCB0ZXN0IHdpbGwgZG8gdGhpcyB0cmFuc3BhcmVudGx5IGJlaGluZCB0aGUgc2NlbmVzLCBjYXVzaW5nIGlzc3VlcyBpZlxuICAgIC8vIGFuIG9iamVjdCdzIHRvIHN0cmluZyBoYXMgZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGl0LlxuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nO1xuICB9XG5cbiAgaWYgKCFwb3NzaWJsZS50ZXN0KHN0cmluZykpIHsgcmV0dXJuIHN0cmluZzsgfVxuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoYmFkQ2hhcnMsIGVzY2FwZUNoYXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcmFtZShvYmplY3QpIHtcbiAgbGV0IGZyYW1lID0gZXh0ZW5kKHt9LCBvYmplY3QpO1xuICBmcmFtZS5fcGFyZW50ID0gb2JqZWN0O1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBibG9ja1BhcmFtcyhwYXJhbXMsIGlkcykge1xuICBwYXJhbXMucGF0aCA9IGlkcztcbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZENvbnRleHRQYXRoKGNvbnRleHRQYXRoLCBpZCkge1xuICByZXR1cm4gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggKyAnLicgOiAnJykgKyBpZDtcbn1cbiJdfQ== -; -define('handlebars/exception',['exports', 'module'], function (exports, module) { - 'use strict'; - - var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; - - function Exception(message, node) { - var loc = node && node.loc, - line = undefined, - column = undefined; - if (loc) { - line = loc.start.line; - column = loc.start.column; - - message += ' - ' + line + ':' + column; - } - - var tmp = Error.prototype.constructor.call(this, message); - - // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. - for (var idx = 0; idx < errorProps.length; idx++) { - this[errorProps[idx]] = tmp[errorProps[idx]]; - } - - /* istanbul ignore else */ - if (Error.captureStackTrace) { - Error.captureStackTrace(this, Exception); - } - - try { - if (loc) { - this.lineNumber = line; - - // Work around issue under safari where we can't directly set the column value - /* istanbul ignore next */ - if (Object.defineProperty) { - Object.defineProperty(this, 'column', { value: column }); - } else { - this.column = column; - } - } - } catch (nop) { - /* Ignore if the browser is very particular */ - } - } - - Exception.prototype = new Error(); - - module.exports = Exception; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxNQUFNLFVBQVUsR0FBRyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUVuRyxXQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQ2hDLFFBQUksR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRztRQUN0QixJQUFJLFlBQUE7UUFDSixNQUFNLFlBQUEsQ0FBQztBQUNYLFFBQUksR0FBRyxFQUFFO0FBQ1AsVUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3RCLFlBQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQzs7QUFFMUIsYUFBTyxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztLQUN4Qzs7QUFFRCxRQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7QUFHMUQsU0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFDaEQsVUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM5Qzs7O0FBR0QsUUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7QUFDM0IsV0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztLQUMxQzs7QUFFRCxRQUFJO0FBQ0YsVUFBSSxHQUFHLEVBQUU7QUFDUCxZQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzs7OztBQUl2QixZQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUU7QUFDekIsZ0JBQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1NBQ3hELE1BQU07QUFDTCxjQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztTQUN0QjtPQUNGO0tBQ0YsQ0FBQyxPQUFPLEdBQUcsRUFBRTs7S0FFYjtHQUNGOztBQUVELFdBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQzs7bUJBRW5CLFNBQVMiLCJmaWxlIjoiZXhjZXB0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5jb25zdCBlcnJvclByb3BzID0gWydkZXNjcmlwdGlvbicsICdmaWxlTmFtZScsICdsaW5lTnVtYmVyJywgJ21lc3NhZ2UnLCAnbmFtZScsICdudW1iZXInLCAnc3RhY2snXTtcblxuZnVuY3Rpb24gRXhjZXB0aW9uKG1lc3NhZ2UsIG5vZGUpIHtcbiAgbGV0IGxvYyA9IG5vZGUgJiYgbm9kZS5sb2MsXG4gICAgICBsaW5lLFxuICAgICAgY29sdW1uO1xuICBpZiAobG9jKSB7XG4gICAgbGluZSA9IGxvYy5zdGFydC5saW5lO1xuICAgIGNvbHVtbiA9IGxvYy5zdGFydC5jb2x1bW47XG5cbiAgICBtZXNzYWdlICs9ICcgLSAnICsgbGluZSArICc6JyArIGNvbHVtbjtcbiAgfVxuXG4gIGxldCB0bXAgPSBFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICAvLyBVbmZvcnR1bmF0ZWx5IGVycm9ycyBhcmUgbm90IGVudW1lcmFibGUgaW4gQ2hyb21lIChhdCBsZWFzdCksIHNvIGBmb3IgcHJvcCBpbiB0bXBgIGRvZXNuJ3Qgd29yay5cbiAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZXJyb3JQcm9wcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdGhpc1tlcnJvclByb3BzW2lkeF1dID0gdG1wW2Vycm9yUHJvcHNbaWR4XV07XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBFeGNlcHRpb24pO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAobG9jKSB7XG4gICAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lO1xuXG4gICAgICAvLyBXb3JrIGFyb3VuZCBpc3N1ZSB1bmRlciBzYWZhcmkgd2hlcmUgd2UgY2FuJ3QgZGlyZWN0bHkgc2V0IHRoZSBjb2x1bW4gdmFsdWVcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29sdW1uJywge3ZhbHVlOiBjb2x1bW59KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAobm9wKSB7XG4gICAgLyogSWdub3JlIGlmIHRoZSBicm93c2VyIGlzIHZlcnkgcGFydGljdWxhciAqL1xuICB9XG59XG5cbkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgRXhjZXB0aW9uO1xuIl19 -; -define('handlebars/helpers/block-helper-missing',['exports', 'module', '../utils'], function (exports, module, _utils) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('blockHelperMissing', function (context, options) { - var inverse = options.inverse, - fn = options.fn; - - if (context === true) { - return fn(this); - } else if (context === false || context == null) { - return inverse(this); - } else if (_utils.isArray(context)) { - if (context.length > 0) { - if (options.ids) { - options.ids = [options.name]; - } - - return instance.helpers.each(context, options); - } else { - return inverse(this); - } - } else { - if (options.data && options.ids) { - var data = _utils.createFrame(options.data); - data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name); - options = { data: data }; - } - - return fn(context, options); - } - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFVBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1VBQ3pCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixVQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsZUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QixNQUFNLElBQUksT0FYeUIsT0FBTyxDQVd4QixPQUFPLENBQUMsRUFBRTtBQUMzQixZQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLGNBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLG1CQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQzlCOztBQUVELGlCQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoRCxNQUFNO0FBQ0wsaUJBQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RCO09BQ0YsTUFBTTtBQUNMLFlBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLGNBQUksSUFBSSxHQUFHLE9BdkJRLFdBQVcsQ0F1QlAsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGNBQUksQ0FBQyxXQUFXLEdBQUcsT0F4Qm5CLGlCQUFpQixDQXdCb0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLGlCQUFPLEdBQUcsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUM7U0FDeEI7O0FBRUQsZUFBTyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzdCO0tBQ0YsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiYmxvY2staGVscGVyLW1pc3NpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheX0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignYmxvY2tIZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGxldCBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgICBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoY29udGV4dCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGZuKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PT0gZmFsc2UgfHwgY29udGV4dCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkoY29udGV4dCkpIHtcbiAgICAgIGlmIChjb250ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgICAgb3B0aW9ucy5pZHMgPSBbb3B0aW9ucy5uYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzLmVhY2goY29udGV4dCwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBsZXQgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBhcHBlbmRDb250ZXh0UGF0aChvcHRpb25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMubmFtZSk7XG4gICAgICAgIG9wdGlvbnMgPSB7ZGF0YTogZGF0YX07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICB9XG4gIH0pO1xufVxuIl19 -; -define('handlebars/helpers/each',['exports', 'module', '../utils', '../exception'], function (exports, module, _utils, _exception) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - module.exports = function (instance) { - instance.registerHelper('each', function (context, options) { - if (!options) { - throw new _Exception['default']('Must pass iterator to #each'); - } - - var fn = options.fn, - inverse = options.inverse, - i = 0, - ret = '', - data = undefined, - contextPath = undefined; - - if (options.data && options.ids) { - contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; - } - - if (_utils.isFunction(context)) { - context = context.call(this); - } - - if (options.data) { - data = _utils.createFrame(options.data); - } - - function execIteration(field, index, last) { - if (data) { - data.key = field; - data.index = index; - data.first = index === 0; - data.last = !!last; - - if (contextPath) { - data.contextPath = contextPath + field; - } - } - - ret = ret + fn(context[field], { - data: data, - blockParams: _utils.blockParams([context[field], field], [contextPath + field, null]) - }); - } - - if (context && typeof context === 'object') { - if (_utils.isArray(context)) { - for (var j = context.length; i < j; i++) { - if (i in context) { - execIteration(i, i, i === context.length - 1); - } - } - } else { - var priorKey = undefined; - - for (var key in context) { - if (context.hasOwnProperty(key)) { - // We're running the iterations one step out of sync so we can detect - // the last iteration without have to scan the object twice and create - // an itermediate keys array. - if (priorKey !== undefined) { - execIteration(priorKey, i - 1); - } - priorKey = key; - i++; - } - } - if (priorKey !== undefined) { - execIteration(priorKey, i - 1, true); - } - } - } - - if (i === 0) { - ret = inverse(this); - } - - return ret; - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7bUJBR2UsVUFBUyxRQUFRLEVBQUU7QUFDaEMsWUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFVBQUksQ0FBQyxPQUFPLEVBQUU7QUFDWixjQUFNLDBCQUFjLDZCQUE2QixDQUFDLENBQUM7T0FDcEQ7O0FBRUQsVUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUU7VUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU87VUFDekIsQ0FBQyxHQUFHLENBQUM7VUFDTCxHQUFHLEdBQUcsRUFBRTtVQUNSLElBQUksWUFBQTtVQUNKLFdBQVcsWUFBQSxDQUFDOztBQUVoQixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixtQkFBVyxHQUFHLE9BakJaLGlCQUFpQixDQWlCYSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO09BQ2pGOztBQUVELFVBQUksT0FwQnNELFVBQVUsQ0FvQnJELE9BQU8sQ0FBQyxFQUFFO0FBQUUsZUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FBRTs7QUFFMUQsVUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLFlBQUksR0FBRyxPQXZCMkIsV0FBVyxDQXVCMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2xDOztBQUVELGVBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFlBQUksSUFBSSxFQUFFO0FBQ1IsY0FBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsY0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsY0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLGNBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsY0FBSSxXQUFXLEVBQUU7QUFDZixnQkFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1dBQ3hDO1NBQ0Y7O0FBRUQsV0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLGNBQUksRUFBRSxJQUFJO0FBQ1YscUJBQVcsRUFBRSxPQXhDTSxXQUFXLENBd0NMLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMvRSxDQUFDLENBQUM7T0FDSjs7QUFFRCxVQUFJLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7QUFDMUMsWUFBSSxPQTdDMkMsT0FBTyxDQTZDMUMsT0FBTyxDQUFDLEVBQUU7QUFDcEIsZUFBSyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsZ0JBQUksQ0FBQyxJQUFJLE9BQU8sRUFBRTtBQUNoQiwyQkFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDL0M7V0FDRjtTQUNGLE1BQU07QUFDTCxjQUFJLFFBQVEsWUFBQSxDQUFDOztBQUViLGVBQUssSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFO0FBQ3ZCLGdCQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Ozs7QUFJL0Isa0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiw2QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7ZUFDaEM7QUFDRCxzQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGVBQUMsRUFBRSxDQUFDO2FBQ0w7V0FDRjtBQUNELGNBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQix5QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQ3RDO1NBQ0Y7T0FDRjs7QUFFRCxVQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxXQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3JCOztBQUVELGFBQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGJsb2NrUGFyYW1zLCBjcmVhdGVGcmFtZSwgaXNBcnJheSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICByZXQgPSAnJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29udGV4dFBhdGg7XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5pZHNbMF0pICsgJy4nO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH1cblxuICAgIGlmIChvcHRpb25zLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmtleSA9IGZpZWxkO1xuICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgZGF0YS5sYXN0ID0gISFsYXN0O1xuXG4gICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dFtmaWVsZF0sIGZpZWxkXSwgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSBpbiBjb250ZXh0KSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIHRoZSBpdGVyYXRpb25zIG9uZSBzdGVwIG91dCBvZiBzeW5jIHNvIHdlIGNhbiBkZXRlY3RcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgICBpZiAocHJpb3JLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmlvcktleSA9IGtleTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ== -; -define('handlebars/helpers/helper-missing',['exports', 'module', '../exception'], function (exports, module, _exception) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - module.exports = function (instance) { - instance.registerHelper('helperMissing', function () /* [args, ]options */{ - if (arguments.length === 1) { - // A missing field in a {{foo}} construct. - return undefined; - } else { - // Someone is actually trying to call something, blow up. - throw new _Exception['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); - } - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLGlDQUFnQztBQUN2RSxVQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOztBQUUxQixlQUFPLFNBQVMsQ0FBQztPQUNsQixNQUFNOztBQUVMLGNBQU0sMEJBQWMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO09BQ3ZGO0tBQ0YsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiaGVscGVyLW1pc3NpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdoZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oLyogW2FyZ3MsIF1vcHRpb25zICovKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIEEgbWlzc2luZyBmaWVsZCBpbiBhIHt7Zm9vfX0gY29uc3RydWN0LlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU29tZW9uZSBpcyBhY3R1YWxseSB0cnlpbmcgdG8gY2FsbCBzb21ldGhpbmcsIGJsb3cgdXAuXG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ== -; -define('handlebars/helpers/if',['exports', 'module', '../utils'], function (exports, module, _utils) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('if', function (conditional, options) { - if (_utils.isFunction(conditional)) { - conditional = conditional.call(this); - } - - // Default behavior is to render the positive path if the value is truthy and not empty. - // The `includeZero` option may be set to treat the condtional as purely not empty based on the - // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. - if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - - instance.registerHelper('unless', function (conditional, options) { - return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash }); - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxVQUFJLE9BSlMsVUFBVSxDQUlSLFdBQVcsQ0FBQyxFQUFFO0FBQUUsbUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQUU7Ozs7O0FBS3RFLFVBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLE9BVC9DLE9BQU8sQ0FTZ0QsV0FBVyxDQUFDLEVBQUU7QUFDdkUsZUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzlCLE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDekI7S0FDRixDQUFDLENBQUM7O0FBRUgsWUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELGFBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztLQUN2SCxDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJpZi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNFbXB0eSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaWYnLCBmdW5jdGlvbihjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNvbmRpdGlvbmFsKSkgeyBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7IH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIG5vdCBlbXB0eS5cbiAgICAvLyBUaGUgYGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29uZHRpb25hbCBhcyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZVxuICAgIC8vIGJlaGF2aW9yIG9mIGlzRW1wdHkuIEVmZmVjdGl2ZWx5IHRoaXMgZGV0ZXJtaW5lcyBpZiAwIGlzIGhhbmRsZWQgYnkgdGhlIHBvc2l0aXZlIHBhdGggb3IgbmVnYXRpdmUuXG4gICAgaWYgKCghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFjb25kaXRpb25hbCkgfHwgaXNFbXB0eShjb25kaXRpb25hbCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uKGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnNbJ2lmJ10uY2FsbCh0aGlzLCBjb25kaXRpb25hbCwge2ZuOiBvcHRpb25zLmludmVyc2UsIGludmVyc2U6IG9wdGlvbnMuZm4sIGhhc2g6IG9wdGlvbnMuaGFzaH0pO1xuICB9KTtcbn1cbiJdfQ== -; -define('handlebars/helpers/log',['exports', 'module'], function (exports, module) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('log', function () /* message, options */{ - var args = [undefined], - options = arguments[arguments.length - 1]; - for (var i = 0; i < arguments.length - 1; i++) { - args.push(arguments[i]); - } - - var level = 1; - if (options.hash.level != null) { - level = options.hash.level; - } else if (options.data && options.data.level != null) { - level = options.data.level; - } - args[0] = level; - - instance.log.apply(instance, args); - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFBZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxrQ0FBaUM7QUFDOUQsVUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUM7VUFDbEIsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxZQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3pCOztBQUVELFVBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNkLFVBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQzlCLGFBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztPQUM1QixNQUFNLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7QUFDckQsYUFBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO09BQzVCO0FBQ0QsVUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFaEIsY0FBUSxDQUFDLEdBQUcsTUFBQSxDQUFaLFFBQVEsRUFBUyxJQUFJLENBQUMsQ0FBQztLQUN4QixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJsb2cuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9nJywgZnVuY3Rpb24oLyogbWVzc2FnZSwgb3B0aW9ucyAqLykge1xuICAgIGxldCBhcmdzID0gW3VuZGVmaW5lZF0sXG4gICAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgbGV0IGxldmVsID0gMTtcbiAgICBpZiAob3B0aW9ucy5oYXNoLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5oYXNoLmxldmVsO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuZGF0YS5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuZGF0YS5sZXZlbDtcbiAgICB9XG4gICAgYXJnc1swXSA9IGxldmVsO1xuXG4gICAgaW5zdGFuY2UubG9nKC4uLiBhcmdzKTtcbiAgfSk7XG59XG4iXX0= -; -define('handlebars/helpers/lookup',['exports', 'module'], function (exports, module) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('lookup', function (obj, field) { - return obj && obj[field]; - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFBZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxVQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDckQsYUFBTyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzFCLENBQUMsQ0FBQztHQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmpbZmllbGRdO1xuICB9KTtcbn1cbiJdfQ== -; -define('handlebars/helpers/with',['exports', 'module', '../utils'], function (exports, module, _utils) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('with', function (context, options) { - if (_utils.isFunction(context)) { - context = context.call(this); - } - - var fn = options.fn; - - if (!_utils.isEmpty(context)) { - var data = options.data; - if (options.data && options.ids) { - data = _utils.createFrame(options.data); - data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); - } - - return fn(context, { - data: data, - blockParams: _utils.blockParams([context], [data && data.contextPath]) - }); - } else { - return options.inverse(this); - } - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7bUJBRWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsWUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFVBQUksT0FKc0QsVUFBVSxDQUlyRCxPQUFPLENBQUMsRUFBRTtBQUFFLGVBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQUU7O0FBRTFELFVBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7O0FBRXBCLFVBQUksQ0FBQyxPQVI0QyxPQUFPLENBUTNDLE9BQU8sQ0FBQyxFQUFFO0FBQ3JCLFlBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsWUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsY0FBSSxHQUFHLE9BWHlCLFdBQVcsQ0FXeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLGNBQUksQ0FBQyxXQUFXLEdBQUcsT0FabkIsaUJBQWlCLENBWW9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRjs7QUFFRCxlQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsY0FBSSxFQUFFLElBQUk7QUFDVixxQkFBVyxFQUFFLE9BakJNLFdBQVcsQ0FpQkwsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDaEUsQ0FBQyxDQUFDO09BQ0osTUFBTTtBQUNMLGVBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM5QjtLQUNGLENBQUMsQ0FBQztHQUNKIiwiZmlsZSI6IndpdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBibG9ja1BhcmFtcywgY3JlYXRlRnJhbWUsIGlzRW1wdHksIGlzRnVuY3Rpb259IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHsgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfVxuXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmICghaXNFbXB0eShjb250ZXh0KSkge1xuICAgICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dF0sIFtkYXRhICYmIGRhdGEuY29udGV4dFBhdGhdKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ== -; -define('handlebars/helpers',['exports', './helpers/block-helper-missing', './helpers/each', './helpers/helper-missing', './helpers/if', './helpers/log', './helpers/lookup', './helpers/with'], function (exports, _helpersBlockHelperMissing, _helpersEach, _helpersHelperMissing, _helpersIf, _helpersLog, _helpersLookup, _helpersWith) { - 'use strict'; - - exports.__esModule = true; - exports.registerDefaultHelpers = registerDefaultHelpers; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _registerBlockHelperMissing = _interopRequireDefault(_helpersBlockHelperMissing); - - var _registerEach = _interopRequireDefault(_helpersEach); - - var _registerHelperMissing = _interopRequireDefault(_helpersHelperMissing); - - var _registerIf = _interopRequireDefault(_helpersIf); - - var _registerLog = _interopRequireDefault(_helpersLog); - - var _registerLookup = _interopRequireDefault(_helpersLookup); - - var _registerWith = _interopRequireDefault(_helpersWith); - - function registerDefaultHelpers(instance) { - _registerBlockHelperMissing['default'](instance); - _registerEach['default'](instance); - _registerHelperMissing['default'](instance); - _registerIf['default'](instance); - _registerLog['default'](instance); - _registerLookup['default'](instance); - _registerWith['default'](instance); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRTyxXQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQywyQ0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsNkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsc0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLDJCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDRCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLCtCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDZCQUFhLFFBQVEsQ0FBQyxDQUFDO0dBQ3hCIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2Jsb2NrLWhlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlckVhY2ggZnJvbSAnLi9oZWxwZXJzL2VhY2gnO1xuaW1wb3J0IHJlZ2lzdGVySGVscGVyTWlzc2luZyBmcm9tICcuL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcnO1xuaW1wb3J0IHJlZ2lzdGVySWYgZnJvbSAnLi9oZWxwZXJzL2lmJztcbmltcG9ydCByZWdpc3RlckxvZyBmcm9tICcuL2hlbHBlcnMvbG9nJztcbmltcG9ydCByZWdpc3Rlckxvb2t1cCBmcm9tICcuL2hlbHBlcnMvbG9va3VwJztcbmltcG9ydCByZWdpc3RlcldpdGggZnJvbSAnLi9oZWxwZXJzL3dpdGgnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0SGVscGVycyhpbnN0YW5jZSkge1xuICByZWdpc3RlckJsb2NrSGVscGVyTWlzc2luZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyRWFjaChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVySGVscGVyTWlzc2luZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVySWYoaW5zdGFuY2UpO1xuICByZWdpc3RlckxvZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyTG9va3VwKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJXaXRoKGluc3RhbmNlKTtcbn1cbiJdfQ== -; -define('handlebars/decorators/inline',['exports', 'module', '../utils'], function (exports, module, _utils) { - 'use strict'; - - module.exports = function (instance) { - instance.registerDecorator('inline', function (fn, props, container, options) { - var ret = fn; - if (!props.partials) { - props.partials = {}; - ret = function (context, options) { - // Create a new partials stack frame prior to exec. - var original = container.partials; - container.partials = _utils.extend({}, original, props.partials); - var ret = fn(context, options); - container.partials = original; - return ret; - }; - } - - props.partials[options.args[0]] = options.fn; - - return ret; - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFFZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFVBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFVBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLGFBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFdBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLGNBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsbUJBQVMsQ0FBQyxRQUFRLEdBQUcsT0FWckIsTUFBTSxDQVVzQixFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxjQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLG1CQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixpQkFBTyxHQUFHLENBQUM7U0FDWixDQUFDO09BQ0g7O0FBRUQsV0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFN0MsYUFBTyxHQUFHLENBQUM7S0FDWixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJpbmxpbmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckRlY29yYXRvcignaW5saW5lJywgZnVuY3Rpb24oZm4sIHByb3BzLCBjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgICBsZXQgcmV0ID0gZm47XG4gICAgaWYgKCFwcm9wcy5wYXJ0aWFscykge1xuICAgICAgcHJvcHMucGFydGlhbHMgPSB7fTtcbiAgICAgIHJldCA9IGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBhcnRpYWxzIHN0YWNrIGZyYW1lIHByaW9yIHRvIGV4ZWMuXG4gICAgICAgIGxldCBvcmlnaW5hbCA9IGNvbnRhaW5lci5wYXJ0aWFscztcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gZXh0ZW5kKHt9LCBvcmlnaW5hbCwgcHJvcHMucGFydGlhbHMpO1xuICAgICAgICBsZXQgcmV0ID0gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9yaWdpbmFsO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm9wcy5wYXJ0aWFsc1tvcHRpb25zLmFyZ3NbMF1dID0gb3B0aW9ucy5mbjtcblxuICAgIHJldHVybiByZXQ7XG4gIH0pO1xufVxuIl19 -; -define('handlebars/decorators',['exports', './decorators/inline'], function (exports, _decoratorsInline) { - 'use strict'; - - exports.__esModule = true; - exports.registerDefaultDecorators = registerDefaultDecorators; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _registerInline = _interopRequireDefault(_decoratorsInline); - - function registerDefaultDecorators(instance) { - _registerInline['default'](instance); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFTyxXQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCwrQkFBZSxRQUFRLENBQUMsQ0FBQztHQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG5cbiJdfQ== -; -define('handlebars/logger',['exports', 'module', './utils'], function (exports, module, _utils) { - 'use strict'; - - var logger = { - methodMap: ['debug', 'info', 'warn', 'error'], - level: 'info', - - // Maps a given level value to the `methodMap` indexes above. - lookupLevel: function lookupLevel(level) { - if (typeof level === 'string') { - var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); - if (levelMap >= 0) { - level = levelMap; - } else { - level = parseInt(level, 10); - } - } - - return level; - }, - - // Can be overridden in the host environment - log: function log(level) { - level = logger.lookupLevel(level); - - if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { - var method = logger.methodMap[level]; - if (!console[method]) { - // eslint-disable-line no-console - method = 'log'; - } - - for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - message[_key - 1] = arguments[_key]; - } - - console[method].apply(console, message); // eslint-disable-line no-console - } - } - }; - - module.exports = logger; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxNQUFJLE1BQU0sR0FBRztBQUNYLGFBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxTQUFLLEVBQUUsTUFBTTs7O0FBR2IsZUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixVQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixZQUFJLFFBQVEsR0FBRyxPQVRiLE9BQU8sQ0FTYyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlELFlBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUNqQixlQUFLLEdBQUcsUUFBUSxDQUFDO1NBQ2xCLE1BQU07QUFDTCxlQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM3QjtPQUNGOztBQUVELGFBQU8sS0FBSyxDQUFDO0tBQ2Q7OztBQUdELE9BQUcsRUFBRSxhQUFTLEtBQUssRUFBYztBQUMvQixXQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFbEMsVUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFO0FBQy9FLFlBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTs7QUFDcEIsZ0JBQU0sR0FBRyxLQUFLLENBQUM7U0FDaEI7OzBDQVBtQixPQUFPO0FBQVAsaUJBQU87OztBQVEzQixlQUFPLENBQUMsTUFBTSxPQUFDLENBQWYsT0FBTyxFQUFZLE9BQU8sQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7R0FDRixDQUFDOzttQkFFYSxNQUFNIiwiZmlsZSI6ImxvZ2dlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5kZXhPZn0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWwpIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIG1ldGhvZCA9ICdsb2cnO1xuICAgICAgfVxuICAgICAgY29uc29sZVttZXRob2RdKC4uLm1lc3NhZ2UpOyAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiJdfQ== -; -define('handlebars/base',['exports', './utils', './exception', './helpers', './decorators', './logger'], function (exports, _utils, _exception, _helpers, _decorators, _logger) { - 'use strict'; - - exports.__esModule = true; - exports.HandlebarsEnvironment = HandlebarsEnvironment; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - var _logger2 = _interopRequireDefault(_logger); - - var VERSION = '4.0.6'; - exports.VERSION = VERSION; - var COMPILER_REVISION = 7; - - exports.COMPILER_REVISION = COMPILER_REVISION; - var REVISION_CHANGES = { - 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it - 2: '== 1.0.0-rc.3', - 3: '== 1.0.0-rc.4', - 4: '== 1.x.x', - 5: '== 2.0.0-alpha.x', - 6: '>= 2.0.0-beta.1', - 7: '>= 4.0.0' - }; - - exports.REVISION_CHANGES = REVISION_CHANGES; - var objectType = '[object Object]'; - - function HandlebarsEnvironment(helpers, partials, decorators) { - this.helpers = helpers || {}; - this.partials = partials || {}; - this.decorators = decorators || {}; - - _helpers.registerDefaultHelpers(this); - _decorators.registerDefaultDecorators(this); - } - - HandlebarsEnvironment.prototype = { - constructor: HandlebarsEnvironment, - - logger: _logger2['default'], - log: _logger2['default'].log, - - registerHelper: function registerHelper(name, fn) { - if (_utils.toString.call(name) === objectType) { - if (fn) { - throw new _Exception['default']('Arg not supported with multiple helpers'); - } - _utils.extend(this.helpers, name); - } else { - this.helpers[name] = fn; - } - }, - unregisterHelper: function unregisterHelper(name) { - delete this.helpers[name]; - }, - - registerPartial: function registerPartial(name, partial) { - if (_utils.toString.call(name) === objectType) { - _utils.extend(this.partials, name); - } else { - if (typeof partial === 'undefined') { - throw new _Exception['default']('Attempting to register a partial called "' + name + '" as undefined'); - } - this.partials[name] = partial; - } - }, - unregisterPartial: function unregisterPartial(name) { - delete this.partials[name]; - }, - - registerDecorator: function registerDecorator(name, fn) { - if (_utils.toString.call(name) === objectType) { - if (fn) { - throw new _Exception['default']('Arg not supported with multiple decorators'); - } - _utils.extend(this.decorators, name); - } else { - this.decorators[name] = fn; - } - }, - unregisterDecorator: function unregisterDecorator(name) { - delete this.decorators[name]; - } - }; - - var log = _logger2['default'].log; - - exports.log = log; - exports.createFrame = _utils.createFrame; - exports.logger = _logger2['default']; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQU1PLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQzs7QUFDeEIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7OztBQUU1QixNQUFNLGdCQUFnQixHQUFHO0FBQzlCLEtBQUMsRUFBRSxhQUFhO0FBQ2hCLEtBQUMsRUFBRSxlQUFlO0FBQ2xCLEtBQUMsRUFBRSxlQUFlO0FBQ2xCLEtBQUMsRUFBRSxVQUFVO0FBQ2IsS0FBQyxFQUFFLGtCQUFrQjtBQUNyQixLQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEtBQUMsRUFBRSxVQUFVO0dBQ2QsQ0FBQzs7O0FBRUYsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7O0FBRTlCLFdBQVMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbkUsUUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzdCLFFBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMvQixRQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7O0FBRW5DLGFBeEJNLHNCQUFzQixDQXdCTCxJQUFJLENBQUMsQ0FBQztBQUM3QixnQkF4Qk0seUJBQXlCLENBd0JMLElBQUksQ0FBQyxDQUFDO0dBQ2pDOztBQUVELHVCQUFxQixDQUFDLFNBQVMsR0FBRztBQUNoQyxlQUFXLEVBQUUscUJBQXFCOztBQUVsQyxVQUFNLHFCQUFRO0FBQ2QsT0FBRyxFQUFFLG9CQUFPLEdBQUc7O0FBRWYsa0JBQWMsRUFBRSx3QkFBUyxJQUFJLEVBQUUsRUFBRSxFQUFFO0FBQ2pDLFVBQUksT0FyQ3FCLFFBQVEsQ0FxQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsWUFBSSxFQUFFLEVBQUU7QUFBRSxnQkFBTSwwQkFBYyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQUU7QUFDM0UsZUF2Q2UsTUFBTSxDQXVDZCxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzVCLE1BQU07QUFDTCxZQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztPQUN6QjtLQUNGO0FBQ0Qsb0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLGFBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQjs7QUFFRCxtQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsVUFBSSxPQWpEcUIsUUFBUSxDQWlEcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxlQWxEZSxNQUFNLENBa0RkLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDN0IsTUFBTTtBQUNMLFlBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGdCQUFNLHdFQUEwRCxJQUFJLG9CQUFpQixDQUFDO1NBQ3ZGO0FBQ0QsWUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7T0FDL0I7S0FDRjtBQUNELHFCQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRTtBQUNoQyxhQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDNUI7O0FBRUQscUJBQWlCLEVBQUUsMkJBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNwQyxVQUFJLE9BL0RxQixRQUFRLENBK0RwQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFlBQUksRUFBRSxFQUFFO0FBQUUsZ0JBQU0sMEJBQWMsNENBQTRDLENBQUMsQ0FBQztTQUFFO0FBQzlFLGVBakVlLE1BQU0sQ0FpRWQsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUMvQixNQUFNO0FBQ0wsWUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDNUI7S0FDRjtBQUNELHVCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxhQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDOztBQUVLLE1BQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1VBRXBCLFdBQVcsVUE3RVgsV0FBVztVQTZFRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZUZyYW1lLCBleHRlbmQsIHRvU3RyaW5nfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtyZWdpc3RlckRlZmF1bHRIZWxwZXJzfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtyZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC42JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDc7XG5cbmV4cG9ydCBjb25zdCBSRVZJU0lPTl9DSEFOR0VTID0ge1xuICAxOiAnPD0gMS4wLnJjLjInLCAvLyAxLjAucmMuMiBpcyBhY3R1YWxseSByZXYyIGJ1dCBkb2Vzbid0IHJlcG9ydCBpdFxuICAyOiAnPT0gMS4wLjAtcmMuMycsXG4gIDM6ICc9PSAxLjAuMC1yYy40JyxcbiAgNDogJz09IDEueC54JyxcbiAgNTogJz09IDIuMC4wLWFscGhhLngnLFxuICA2OiAnPj0gMi4wLjAtYmV0YS4xJyxcbiAgNzogJz49IDQuMC4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTsgfVxuICAgICAgZXh0ZW5kKHRoaXMuaGVscGVycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVscGVyc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckhlbHBlcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmhlbHBlcnNbbmFtZV07XG4gIH0sXG5cbiAgcmVnaXN0ZXJQYXJ0aWFsOiBmdW5jdGlvbihuYW1lLCBwYXJ0aWFsKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGV4dGVuZCh0aGlzLnBhcnRpYWxzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0aWFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGBBdHRlbXB0aW5nIHRvIHJlZ2lzdGVyIGEgcGFydGlhbCBjYWxsZWQgXCIke25hbWV9XCIgYXMgdW5kZWZpbmVkYCk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhcnRpYWxzW25hbWVdID0gcGFydGlhbDtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJQYXJ0aWFsOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMucGFydGlhbHNbbmFtZV07XG4gIH0sXG5cbiAgcmVnaXN0ZXJEZWNvcmF0b3I6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGRlY29yYXRvcnMnKTsgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHtjcmVhdGVGcmFtZSwgbG9nZ2VyfTtcbiJdfQ== -; -define('handlebars/safe-string',['exports', 'module'], function (exports, module) { - // Build out our basic SafeString type - 'use strict'; - - function SafeString(string) { - this.string = string; - } - - SafeString.prototype.toString = SafeString.prototype.toHTML = function () { - return '' + this.string; - }; - - module.exports = SafeString; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxXQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsUUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7R0FDdEI7O0FBRUQsWUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxXQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0dBQ3pCLENBQUM7O21CQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ== -; -define('handlebars/runtime',['exports', './utils', './exception', './base'], function (exports, _utils, _exception, _base) { - 'use strict'; - - exports.__esModule = true; - exports.checkRevision = checkRevision; - exports.template = template; - exports.wrapProgram = wrapProgram; - exports.resolvePartial = resolvePartial; - exports.invokePartial = invokePartial; - exports.noop = noop; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - function checkRevision(compilerInfo) { - var compilerRevision = compilerInfo && compilerInfo[0] || 1, - currentRevision = _base.COMPILER_REVISION; - - if (compilerRevision !== currentRevision) { - if (compilerRevision < currentRevision) { - var runtimeVersions = _base.REVISION_CHANGES[currentRevision], - compilerVersions = _base.REVISION_CHANGES[compilerRevision]; - throw new _Exception['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); - } else { - // Use the embedded version info since the runtime doesn't know about this revision yet - throw new _Exception['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); - } - } - } - - function template(templateSpec, env) { - /* istanbul ignore next */ - if (!env) { - throw new _Exception['default']('No environment passed to template'); - } - if (!templateSpec || !templateSpec.main) { - throw new _Exception['default']('Unknown template object: ' + typeof templateSpec); - } - - templateSpec.main.decorator = templateSpec.main_d; - - // Note: Using env.VM references rather than local var references throughout this section to allow - // for external users to override these as psuedo-supported APIs. - env.VM.checkRevision(templateSpec.compiler); - - function invokePartialWrapper(partial, context, options) { - if (options.hash) { - context = _utils.extend({}, context, options.hash); - if (options.ids) { - options.ids[0] = true; - } - } - - partial = env.VM.resolvePartial.call(this, partial, context, options); - var result = env.VM.invokePartial.call(this, partial, context, options); - - if (result == null && env.compile) { - options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); - result = options.partials[options.name](context, options); - } - if (result != null) { - if (options.indent) { - var lines = result.split('\n'); - for (var i = 0, l = lines.length; i < l; i++) { - if (!lines[i] && i + 1 === l) { - break; - } - - lines[i] = options.indent + lines[i]; - } - result = lines.join('\n'); - } - return result; - } else { - throw new _Exception['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); - } - } - - // Just add water - var container = { - strict: function strict(obj, name) { - if (!(name in obj)) { - throw new _Exception['default']('"' + name + '" not defined in ' + obj); - } - return obj[name]; - }, - lookup: function lookup(depths, name) { - var len = depths.length; - for (var i = 0; i < len; i++) { - if (depths[i] && depths[i][name] != null) { - return depths[i][name]; - } - } - }, - lambda: function lambda(current, context) { - return typeof current === 'function' ? current.call(context) : current; - }, - - escapeExpression: _utils.escapeExpression, - invokePartial: invokePartialWrapper, - - fn: function fn(i) { - var ret = templateSpec[i]; - ret.decorator = templateSpec[i + '_d']; - return ret; - }, - - programs: [], - program: function program(i, data, declaredBlockParams, blockParams, depths) { - var programWrapper = this.programs[i], - fn = this.fn(i); - if (data || depths || blockParams || declaredBlockParams) { - programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); - } else if (!programWrapper) { - programWrapper = this.programs[i] = wrapProgram(this, i, fn); - } - return programWrapper; - }, - - data: function data(value, depth) { - while (value && depth--) { - value = value._parent; - } - return value; - }, - merge: function merge(param, common) { - var obj = param || common; - - if (param && common && param !== common) { - obj = _utils.extend({}, common, param); - } - - return obj; - }, - - noop: env.VM.noop, - compilerInfo: templateSpec.compiler - }; - - function ret(context) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var data = options.data; - - ret._setup(options); - if (!options.partial && templateSpec.useData) { - data = initData(context, data); - } - var depths = undefined, - blockParams = templateSpec.useBlockParams ? [] : undefined; - if (templateSpec.useDepths) { - if (options.depths) { - depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; - } else { - depths = [context]; - } - } - - function main(context /*, options*/) { - return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); - } - main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); - return main(context, options); - } - ret.isTop = true; - - ret._setup = function (options) { - if (!options.partial) { - container.helpers = container.merge(options.helpers, env.helpers); - - if (templateSpec.usePartial) { - container.partials = container.merge(options.partials, env.partials); - } - if (templateSpec.usePartial || templateSpec.useDecorators) { - container.decorators = container.merge(options.decorators, env.decorators); - } - } else { - container.helpers = options.helpers; - container.partials = options.partials; - container.decorators = options.decorators; - } - }; - - ret._child = function (i, data, blockParams, depths) { - if (templateSpec.useBlockParams && !blockParams) { - throw new _Exception['default']('must pass block params'); - } - if (templateSpec.useDepths && !depths) { - throw new _Exception['default']('must pass parent depths'); - } - - return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); - }; - return ret; - } - - function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { - function prog(context) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var currentDepths = depths; - if (depths && context != depths[0]) { - currentDepths = [context].concat(depths); - } - - return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); - } - - prog = executeDecorators(fn, prog, container, depths, data, blockParams); - - prog.program = i; - prog.depth = depths ? depths.length : 0; - prog.blockParams = declaredBlockParams || 0; - return prog; - } - - function resolvePartial(partial, context, options) { - if (!partial) { - if (options.name === '@partial-block') { - var data = options.data; - while (data['partial-block'] === noop) { - data = data._parent; - } - partial = data['partial-block']; - data['partial-block'] = noop; - } else { - partial = options.partials[options.name]; - } - } else if (!partial.call && !options.name) { - // This is a dynamic partial that returned a string - options.name = partial; - partial = options.partials[partial]; - } - return partial; - } - - function invokePartial(partial, context, options) { - options.partial = true; - if (options.ids) { - options.data.contextPath = options.ids[0] || options.data.contextPath; - } - - var partialBlock = undefined; - if (options.fn && options.fn !== noop) { - options.data = _base.createFrame(options.data); - partialBlock = options.data['partial-block'] = options.fn; - - if (partialBlock.partials) { - options.partials = _utils.extend({}, options.partials, partialBlock.partials); - } - } - - if (partial === undefined && partialBlock) { - partial = partialBlock; - } - - if (partial === undefined) { - throw new _Exception['default']('The partial ' + options.name + ' could not be found'); - } else if (partial instanceof Function) { - return partial(context, options); - } - } - - function noop() { - return ''; - } - - function initData(context, data) { - if (!data || !('root' in data)) { - data = data ? _base.createFrame(data) : {}; - data.root = context; - } - return data; - } - - function executeDecorators(fn, prog, container, depths, data, blockParams) { - if (fn.decorator) { - var props = {}; - prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); - _utils.extend(prog, props); - } - return prog; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUlPLFdBQVMsYUFBYSxDQUFDLFlBQVksRUFBRTtBQUMxQyxRQUFNLGdCQUFnQixHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RCxlQUFlLFNBSmQsaUJBQWlCLEFBSWlCLENBQUM7O0FBRTFDLFFBQUksZ0JBQWdCLEtBQUssZUFBZSxFQUFFO0FBQ3hDLFVBQUksZ0JBQWdCLEdBQUcsZUFBZSxFQUFFO0FBQ3RDLFlBQU0sZUFBZSxHQUFHLE1BUkYsZ0JBQWdCLENBUUcsZUFBZSxDQUFDO1lBQ25ELGdCQUFnQixHQUFHLE1BVEgsZ0JBQWdCLENBU0ksZ0JBQWdCLENBQUMsQ0FBQztBQUM1RCxjQUFNLDBCQUFjLHlGQUF5RixHQUN2RyxxREFBcUQsR0FBRyxlQUFlLEdBQUcsbURBQW1ELEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUM7T0FDaEssTUFBTTs7QUFFTCxjQUFNLDBCQUFjLHdGQUF3RixHQUN0RyxpREFBaUQsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7T0FDbkY7S0FDRjtHQUNGOztBQUVNLFdBQVMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7O0FBRTFDLFFBQUksQ0FBQyxHQUFHLEVBQUU7QUFDUixZQUFNLDBCQUFjLG1DQUFtQyxDQUFDLENBQUM7S0FDMUQ7QUFDRCxRQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRTtBQUN2QyxZQUFNLDBCQUFjLDJCQUEyQixHQUFHLE9BQU8sWUFBWSxDQUFDLENBQUM7S0FDeEU7O0FBRUQsZ0JBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7QUFJbEQsT0FBRyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENB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R0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLENBQUM7S0FDNUUsTUFBTSxJQUFJLE9BQU8sWUFBWSxRQUFRLEVBQUU7QUFDdEMsYUFBTyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ2xDO0dBQ0Y7O0FBRU0sV0FBUyxJQUFJLEdBQUc7QUFBRSxXQUFPLEVBQUUsQ0FBQztHQUFFOztBQUVyQyxXQUFTLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQy9CLFFBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFBLEFBQUMsRUFBRTtBQUM5QixVQUFJLEdBQUcsSUFBSSxHQUFHLE1BbFE0QixXQUFXLENBa1EzQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckMsVUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7S0FDckI7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiOztBQUVELFdBQVMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7QUFDekUsUUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFO0FBQ2hCLFVBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLFVBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1RixhQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDM0I7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHsgQ09NUElMRVJfUkVWSVNJT04sIFJFVklTSU9OX0NIQU5HRVMsIGNyZWF0ZUZyYW1lIH0gZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUmV2aXNpb24oY29tcGlsZXJJbmZvKSB7XG4gIGNvbnN0IGNvbXBpbGVyUmV2aXNpb24gPSBjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdIHx8IDEsXG4gICAgICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChjb21waWxlclJldmlzaW9uICE9PSBjdXJyZW50UmV2aXNpb24pIHtcbiAgICBpZiAoY29tcGlsZXJSZXZpc2lvbiA8IGN1cnJlbnRSZXZpc2lvbikge1xuICAgICAgY29uc3QgcnVudGltZVZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjdXJyZW50UmV2aXNpb25dLFxuICAgICAgICAgICAgY29tcGlsZXJWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcHJlY29tcGlsZXIgdG8gYSBuZXdlciB2ZXJzaW9uICgnICsgcnVudGltZVZlcnNpb25zICsgJykgb3IgZG93bmdyYWRlIHlvdXIgcnVudGltZSB0byBhbiBvbGRlciB2ZXJzaW9uICgnICsgY29tcGlsZXJWZXJzaW9ucyArICcpLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHJ1bnRpbWUgdG8gYSBuZXdlciB2ZXJzaW9uICgnICsgY29tcGlsZXJJbmZvWzFdICsgJykuJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZSh0ZW1wbGF0ZVNwZWMsIGVudikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoIWVudikge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ05vIGVudmlyb25tZW50IHBhc3NlZCB0byB0ZW1wbGF0ZScpO1xuICB9XG4gIGlmICghdGVtcGxhdGVTcGVjIHx8ICF0ZW1wbGF0ZVNwZWMubWFpbikge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdGVtcGxhdGUgb2JqZWN0OiAnICsgdHlwZW9mIHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICB0ZW1wbGF0ZVNwZWMubWFpbi5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWMubWFpbl9kO1xuXG4gIC8vIE5vdGU6IFVzaW5nIGVudi5WTSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIGxvY2FsIHZhciByZWZlcmVuY2VzIHRocm91Z2hvdXQgdGhpcyBzZWN0aW9uIHRvIGFsbG93XG4gIC8vIGZvciBleHRlcm5hbCB1c2VycyB0byBvdmVycmlkZSB0aGVzZSBhcyBwc3VlZG8tc3VwcG9ydGVkIEFQSXMuXG4gIGVudi5WTS5jaGVja1JldmlzaW9uKHRlbXBsYXRlU3BlYy5jb21waWxlcik7XG5cbiAgZnVuY3Rpb24gaW52b2tlUGFydGlhbFdyYXBwZXIocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmhhc2gpIHtcbiAgICAgIGNvbnRleHQgPSBVdGlscy5leHRlbmQoe30sIGNvbnRleHQsIG9wdGlvbnMuaGFzaCk7XG4gICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgb3B0aW9ucy5pZHNbMF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnRpYWwgPSBlbnYuVk0ucmVzb2x2ZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcblxuICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiBlbnYuY29tcGlsZSkge1xuICAgICAgb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdID0gZW52LmNvbXBpbGUocGFydGlhbCwgdGVtcGxhdGVTcGVjLmNvbXBpbGVyT3B0aW9ucywgZW52KTtcbiAgICAgIHJlc3VsdCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXShjb250ZXh0LCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUaGUgcGFydGlhbCAnICsgb3B0aW9ucy5uYW1lICsgJyBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIGluIHJ1bnRpbWUtb25seSBtb2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gSnVzdCBhZGQgd2F0ZXJcbiAgbGV0IGNvbnRhaW5lciA9IHtcbiAgICBzdHJpY3Q6IGZ1bmN0aW9uKG9iaiwgbmFtZSkge1xuICAgICAgaWYgKCEobmFtZSBpbiBvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1wiJyArIG5hbWUgKyAnXCIgbm90IGRlZmluZWQgaW4gJyArIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqW25hbWVdO1xuICAgIH0sXG4gICAgbG9va3VwOiBmdW5jdGlvbihkZXB0aHMsIG5hbWUpIHtcbiAgICAgIGNvbnN0IGxlbiA9IGRlcHRocy5sZW5ndGg7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmIChkZXB0aHNbaV0gJiYgZGVwdGhzW2ldW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZGVwdGhzW2ldW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBsYW1iZGE6IGZ1bmN0aW9uKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgbGV0IHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uKGksIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICAgIGxldCBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0sXG4gICAgICAgICAgZm4gPSB0aGlzLmZuKGkpO1xuICAgICAgaWYgKGRhdGEgfHwgZGVwdGhzIHx8IGJsb2NrUGFyYW1zIHx8IGRlY2xhcmVkQmxvY2tQYXJhbXMpIHtcbiAgICAgICAgcHJvZ3JhbVdyYXBwZXIgPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbiwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2U6IGZ1bmN0aW9uKHBhcmFtLCBjb21tb24pIHtcbiAgICAgIGxldCBvYmogPSBwYXJhbSB8fCBjb21tb247XG5cbiAgICAgIGlmIChwYXJhbSAmJiBjb21tb24gJiYgKHBhcmFtICE9PSBjb21tb24pKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgICBibG9ja1BhcmFtcyA9IHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzKSB7XG4gICAgICBpZiAob3B0aW9ucy5kZXB0aHMpIHtcbiAgICAgICAgZGVwdGhzID0gY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXSA/IFtjb250ZXh0XS5jb25jYXQob3B0aW9ucy5kZXB0aHMpIDogb3B0aW9ucy5kZXB0aHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXB0aHMgPSBbY29udGV4dF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFpbihjb250ZXh0LyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuICcnICsgdGVtcGxhdGVTcGVjLm1haW4oY29udGFpbmVyLCBjb250ZXh0LCBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICB9XG4gICAgbWFpbiA9IGV4ZWN1dGVEZWNvcmF0b3JzKHRlbXBsYXRlU3BlYy5tYWluLCBtYWluLCBjb250YWluZXIsIG9wdGlvbnMuZGVwdGhzIHx8IFtdLCBkYXRhLCBibG9ja1BhcmFtcyk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0LmlzVG9wID0gdHJ1ZTtcblxuICByZXQuX3NldHVwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsKSB7XG4gICAgICBjb250YWluZXIuaGVscGVycyA9IGNvbnRhaW5lci5tZXJnZShvcHRpb25zLmhlbHBlcnMsIGVudi5oZWxwZXJzKTtcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZShvcHRpb25zLnBhcnRpYWxzLCBlbnYucGFydGlhbHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsIHx8IHRlbXBsYXRlU3BlYy51c2VEZWNvcmF0b3JzKSB7XG4gICAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gY29udGFpbmVyLm1lcmdlKG9wdGlvbnMuZGVjb3JhdG9ycywgZW52LmRlY29yYXRvcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICB9XG4gIH07XG5cbiAgcmV0Ll9jaGlsZCA9IGZ1bmN0aW9uKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIGJsb2NrIHBhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocyAmJiAhZGVwdGhzKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgcGFyZW50IGRlcHRocycpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwUHJvZ3JhbShjb250YWluZXIsIGksIHRlbXBsYXRlU3BlY1tpXSwgZGF0YSwgMCwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShjb250YWluZXIsIGksIGZuLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKGRlcHRocyAmJiBjb250ZXh0ICE9IGRlcHRoc1swXSkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oY29udGFpbmVyLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLFxuICAgICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgICAgYmxvY2tQYXJhbXMgJiYgW29wdGlvbnMuYmxvY2tQYXJhbXNdLmNvbmNhdChibG9ja1BhcmFtcyksXG4gICAgICAgIGN1cnJlbnREZXB0aHMpO1xuICB9XG5cbiAgcHJvZyA9IGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpO1xuXG4gIHByb2cucHJvZ3JhbSA9IGk7XG4gIHByb2cuZGVwdGggPSBkZXB0aHMgPyBkZXB0aHMubGVuZ3RoIDogMDtcbiAgcHJvZy5ibG9ja1BhcmFtcyA9IGRlY2xhcmVkQmxvY2tQYXJhbXMgfHwgMDtcbiAgcmV0dXJuIHByb2c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIGlmICghcGFydGlhbCkge1xuICAgIGlmIChvcHRpb25zLm5hbWUgPT09ICdAcGFydGlhbC1ibG9jaycpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgd2hpbGUgKGRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9PT0gbm9vcCkge1xuICAgICAgICBkYXRhID0gZGF0YS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcGFydGlhbCA9IGRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgICAgIGRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IG5vb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV07XG4gICAgfVxuICB9IGVsc2UgaWYgKCFwYXJ0aWFsLmNhbGwgJiYgIW9wdGlvbnMubmFtZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHBhcnRpYWwgdGhhdCByZXR1cm5lZCBhIHN0cmluZ1xuICAgIG9wdGlvbnMubmFtZSA9IHBhcnRpYWw7XG4gICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbcGFydGlhbF07XG4gIH1cbiAgcmV0dXJuIHBhcnRpYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBvcHRpb25zLmZuO1xuXG4gICAgaWYgKHBhcnRpYWxCbG9jay5wYXJ0aWFscykge1xuICAgICAgb3B0aW9ucy5wYXJ0aWFscyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucy5wYXJ0aWFscywgcGFydGlhbEJsb2NrLnBhcnRpYWxzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkICYmIHBhcnRpYWxCbG9jaykge1xuICAgIHBhcnRpYWwgPSBwYXJ0aWFsQmxvY2s7XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7IHJldHVybiAnJzsgfVxuXG5mdW5jdGlvbiBpbml0RGF0YShjb250ZXh0LCBkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhKCdyb290JyBpbiBkYXRhKSkge1xuICAgIGRhdGEgPSBkYXRhID8gY3JlYXRlRnJhbWUoZGF0YSkgOiB7fTtcbiAgICBkYXRhLnJvb3QgPSBjb250ZXh0O1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKSB7XG4gIGlmIChmbi5kZWNvcmF0b3IpIHtcbiAgICBsZXQgcHJvcHMgPSB7fTtcbiAgICBwcm9nID0gZm4uZGVjb3JhdG9yKHByb2csIHByb3BzLCBjb250YWluZXIsIGRlcHRocyAmJiBkZXB0aHNbMF0sIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7XG4gIH1cbiAgcmV0dXJuIHByb2c7XG59XG4iXX0= -; -define('handlebars/no-conflict',['exports', 'module'], function (exports, module) { - /* global window */ - 'use strict'; - - module.exports = function (Handlebars) { - /* istanbul ignore next */ - var root = typeof global !== 'undefined' ? global : window, - $Handlebars = root.Handlebars; - /* istanbul ignore next */ - Handlebars.noConflict = function () { - if (root.Handlebars === Handlebars) { - root.Handlebars = $Handlebars; - } - return Handlebars; - }; - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7bUJBQ2UsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLFFBQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtRQUN0RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFbEMsY0FBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFVBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsWUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7T0FDL0I7QUFDRCxhQUFPLFVBQVUsQ0FBQztLQUNuQixDQUFDO0dBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgd2luZG93ICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgICAkSGFuZGxlYmFycyA9IHJvb3QuSGFuZGxlYmFycztcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgSGFuZGxlYmFycy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHJvb3QuSGFuZGxlYmFycyA9PT0gSGFuZGxlYmFycykge1xuICAgICAgcm9vdC5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7XG4gICAgfVxuICAgIHJldHVybiBIYW5kbGViYXJzO1xuICB9O1xufVxuIl19 -; -define('handlebars.runtime',['exports', 'module', './handlebars/base', './handlebars/safe-string', './handlebars/exception', './handlebars/utils', './handlebars/runtime', './handlebars/no-conflict'], function (exports, module, _handlebarsBase, _handlebarsSafeString, _handlebarsException, _handlebarsUtils, _handlebarsRuntime, _handlebarsNoConflict) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - // Each of these augment the Handlebars object. No need to setup here. - // (This is done to easily share code between commonjs and browse envs) - - var _SafeString = _interopRequireDefault(_handlebarsSafeString); - - var _Exception = _interopRequireDefault(_handlebarsException); - - var _noConflict = _interopRequireDefault(_handlebarsNoConflict); - - // For compatibility and usage outside of module systems, make the Handlebars object a namespace - function create() { - var hb = new _handlebarsBase.HandlebarsEnvironment(); - - _handlebarsUtils.extend(hb, _handlebarsBase); - hb.SafeString = _SafeString['default']; - hb.Exception = _Exception['default']; - hb.Utils = _handlebarsUtils; - hb.escapeExpression = _handlebarsUtils.escapeExpression; - - hb.VM = _handlebarsRuntime; - hb.template = function (spec) { - return _handlebarsRuntime.template(spec, hb); - }; - - return hb; - } - - var inst = create(); - inst.create = create; - - _noConflict['default'](inst); - - inst['default'] = inst; - - module.exports = inst; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSxXQUFTLE1BQU0sR0FBRztBQUNoQixRQUFJLEVBQUUsR0FBRyxJQUFJLGdCQUFLLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLHFCQUFNLE1BQU0sQ0FBQyxFQUFFLGtCQUFPLENBQUM7QUFDdkIsTUFBRSxDQUFDLFVBQVUseUJBQWEsQ0FBQztBQUMzQixNQUFFLENBQUMsU0FBUyx3QkFBWSxDQUFDO0FBQ3pCLE1BQUUsQ0FBQyxLQUFLLG1CQUFRLENBQUM7QUFDakIsTUFBRSxDQUFDLGdCQUFnQixHQUFHLGlCQUFNLGdCQUFnQixDQUFDOztBQUU3QyxNQUFFLENBQUMsRUFBRSxxQkFBVSxDQUFDO0FBQ2hCLE1BQUUsQ0FBQyxRQUFRLEdBQUcsVUFBUyxJQUFJLEVBQUU7QUFDM0IsYUFBTyxtQkFBUSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ25DLENBQUM7O0FBRUYsV0FBTyxFQUFFLENBQUM7R0FDWDs7QUFFRCxNQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIseUJBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLE1BQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O21CQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5ydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYmFzZSBmcm9tICcuL2hhbmRsZWJhcnMvYmFzZSc7XG5cbi8vIEVhY2ggb2YgdGhlc2UgYXVnbWVudCB0aGUgSGFuZGxlYmFycyBvYmplY3QuIE5vIG5lZWQgdG8gc2V0dXAgaGVyZS5cbi8vIChUaGlzIGlzIGRvbmUgdG8gZWFzaWx5IHNoYXJlIGNvZGUgYmV0d2VlbiBjb21tb25qcyBhbmQgYnJvd3NlIGVudnMpXG5pbXBvcnQgU2FmZVN0cmluZyBmcm9tICcuL2hhbmRsZWJhcnMvc2FmZS1zdHJpbmcnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2hhbmRsZWJhcnMvZXhjZXB0aW9uJztcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4vaGFuZGxlYmFycy91dGlscyc7XG5pbXBvcnQgKiBhcyBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy9ydW50aW1lJztcblxuaW1wb3J0IG5vQ29uZmxpY3QgZnJvbSAnLi9oYW5kbGViYXJzL25vLWNvbmZsaWN0JztcblxuLy8gRm9yIGNvbXBhdGliaWxpdHkgYW5kIHVzYWdlIG91dHNpZGUgb2YgbW9kdWxlIHN5c3RlbXMsIG1ha2UgdGhlIEhhbmRsZWJhcnMgb2JqZWN0IGEgbmFtZXNwYWNlXG5mdW5jdGlvbiBjcmVhdGUoKSB7XG4gIGxldCBoYiA9IG5ldyBiYXNlLkhhbmRsZWJhcnNFbnZpcm9ubWVudCgpO1xuXG4gIFV0aWxzLmV4dGVuZChoYiwgYmFzZSk7XG4gIGhiLlNhZmVTdHJpbmcgPSBTYWZlU3RyaW5nO1xuICBoYi5FeGNlcHRpb24gPSBFeGNlcHRpb247XG4gIGhiLlV0aWxzID0gVXRpbHM7XG4gIGhiLmVzY2FwZUV4cHJlc3Npb24gPSBVdGlscy5lc2NhcGVFeHByZXNzaW9uO1xuXG4gIGhiLlZNID0gcnVudGltZTtcbiAgaGIudGVtcGxhdGUgPSBmdW5jdGlvbihzcGVjKSB7XG4gICAgcmV0dXJuIHJ1bnRpbWUudGVtcGxhdGUoc3BlYywgaGIpO1xuICB9O1xuXG4gIHJldHVybiBoYjtcbn1cblxubGV0IGluc3QgPSBjcmVhdGUoKTtcbmluc3QuY3JlYXRlID0gY3JlYXRlO1xuXG5ub0NvbmZsaWN0KGluc3QpO1xuXG5pbnN0WydkZWZhdWx0J10gPSBpbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBpbnN0O1xuIl19 -; -define('handlebars/compiler/ast',['exports', 'module'], function (exports, module) { - 'use strict'; - - var AST = { - // Public API used to evaluate derived attributes regarding AST nodes - helpers: { - // a mustache is definitely a helper if: - // * it is an eligible helper, and - // * it has at least one parameter or hash segment - helperExpression: function helperExpression(node) { - return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash); - }, - - scopedId: function scopedId(path) { - return (/^\.|this\b/.test(path.original) - ); - }, - - // an ID is simple if it only has one part, and that part is not - // `..` or `this`. - simpleId: function simpleId(path) { - return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth; - } - } - }; - - // Must be exported as an object rather than the root of the module as the jison lexer - // must modify the object to operate properly. - module.exports = AST; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFJLEdBQUcsR0FBRzs7QUFFUixXQUFPLEVBQUU7Ozs7QUFJUCxzQkFBZ0IsRUFBRSwwQkFBUyxJQUFJLEVBQUU7QUFDL0IsZUFBTyxBQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssZUFBZSxJQUM3QixDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssbUJBQW1CLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxnQkFBZ0IsQ0FBQSxJQUNuRSxDQUFDLEVBQUUsQUFBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFLLElBQUksQ0FBQyxJQUFJLENBQUEsQUFBQyxBQUFDLENBQUM7T0FDaEU7O0FBRUQsY0FBUSxFQUFFLGtCQUFTLElBQUksRUFBRTtBQUN2QixlQUFPLEFBQUMsYUFBWSxDQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1VBQUM7T0FDM0M7Ozs7QUFJRCxjQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGVBQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO09BQzlFO0tBQ0Y7R0FDRixDQUFDOzs7O21CQUthLEdBQUciLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IEFTVCA9IHtcbiAgLy8gUHVibGljIEFQSSB1c2VkIHRvIGV2YWx1YXRlIGRlcml2ZWQgYXR0cmlidXRlcyByZWdhcmRpbmcgQVNUIG5vZGVzXG4gIGhlbHBlcnM6IHtcbiAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdCBpcyBhbiBlbGlnaWJsZSBoZWxwZXIsIGFuZFxuICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50XG4gICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIChub2RlLnR5cGUgPT09ICdTdWJFeHByZXNzaW9uJylcbiAgICAgICAgICB8fCAoKG5vZGUudHlwZSA9PT0gJ011c3RhY2hlU3RhdGVtZW50JyB8fCBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpXG4gICAgICAgICAgICAmJiAhISgobm9kZS5wYXJhbXMgJiYgbm9kZS5wYXJhbXMubGVuZ3RoKSB8fCBub2RlLmhhc2gpKTtcbiAgICB9LFxuXG4gICAgc2NvcGVkSWQ6IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgIHJldHVybiAoL15cXC58dGhpc1xcYi8pLnRlc3QocGF0aC5vcmlnaW5hbCk7XG4gICAgfSxcblxuICAgIC8vIGFuIElEIGlzIHNpbXBsZSBpZiBpdCBvbmx5IGhhcyBvbmUgcGFydCwgYW5kIHRoYXQgcGFydCBpcyBub3RcbiAgICAvLyBgLi5gIG9yIGB0aGlzYC5cbiAgICBzaW1wbGVJZDogZnVuY3Rpb24ocGF0aCkge1xuICAgICAgcmV0dXJuIHBhdGgucGFydHMubGVuZ3RoID09PSAxICYmICFBU1QuaGVscGVycy5zY29wZWRJZChwYXRoKSAmJiAhcGF0aC5kZXB0aDtcbiAgICB9XG4gIH1cbn07XG5cblxuLy8gTXVzdCBiZSBleHBvcnRlZCBhcyBhbiBvYmplY3QgcmF0aGVyIHRoYW4gdGhlIHJvb3Qgb2YgdGhlIG1vZHVsZSBhcyB0aGUgamlzb24gbGV4ZXJcbi8vIG11c3QgbW9kaWZ5IHRoZSBvYmplY3QgdG8gb3BlcmF0ZSBwcm9wZXJseS5cbmV4cG9ydCBkZWZhdWx0IEFTVDtcbiJdfQ== -; -define('handlebars/compiler/parser',["exports"], function (exports) { - /* istanbul ignore next */ - /* Jison generated parser */ - "use strict"; - - var handlebars = (function () { - var parser = { trace: function trace() {}, - yy: {}, - symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition_plus0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" }, - productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 1], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$ - /**/) { - - var $0 = $$.length - 1; - switch (yystate) { - case 1: - return $$[$0 - 1]; - break; - case 2: - this.$ = yy.prepareProgram($$[$0]); - break; - case 3: - this.$ = $$[$0]; - break; - case 4: - this.$ = $$[$0]; - break; - case 5: - this.$ = $$[$0]; - break; - case 6: - this.$ = $$[$0]; - break; - case 7: - this.$ = $$[$0]; - break; - case 8: - this.$ = $$[$0]; - break; - case 9: - this.$ = { - type: 'CommentStatement', - value: yy.stripComment($$[$0]), - strip: yy.stripFlags($$[$0], $$[$0]), - loc: yy.locInfo(this._$) - }; - - break; - case 10: - this.$ = { - type: 'ContentStatement', - original: $$[$0], - value: $$[$0], - loc: yy.locInfo(this._$) - }; - - break; - case 11: - this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); - break; - case 12: - this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] }; - break; - case 13: - this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$); - break; - case 14: - this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$); - break; - case 15: - this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; - break; - case 16: - this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; - break; - case 17: - this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; - break; - case 18: - this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] }; - break; - case 19: - var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$), - program = yy.prepareProgram([inverse], $$[$0 - 1].loc); - program.chained = true; - - this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true }; - - break; - case 20: - this.$ = $$[$0]; - break; - case 21: - this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) }; - break; - case 22: - this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); - break; - case 23: - this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); - break; - case 24: - this.$ = { - type: 'PartialStatement', - name: $$[$0 - 3], - params: $$[$0 - 2], - hash: $$[$0 - 1], - indent: '', - strip: yy.stripFlags($$[$0 - 4], $$[$0]), - loc: yy.locInfo(this._$) - }; - - break; - case 25: - this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); - break; - case 26: - this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) }; - break; - case 27: - this.$ = $$[$0]; - break; - case 28: - this.$ = $$[$0]; - break; - case 29: - this.$ = { - type: 'SubExpression', - path: $$[$0 - 3], - params: $$[$0 - 2], - hash: $$[$0 - 1], - loc: yy.locInfo(this._$) - }; - - break; - case 30: - this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) }; - break; - case 31: - this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) }; - break; - case 32: - this.$ = yy.id($$[$0 - 1]); - break; - case 33: - this.$ = $$[$0]; - break; - case 34: - this.$ = $$[$0]; - break; - case 35: - this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) }; - break; - case 36: - this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) }; - break; - case 37: - this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) }; - break; - case 38: - this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) }; - break; - case 39: - this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) }; - break; - case 40: - this.$ = $$[$0]; - break; - case 41: - this.$ = $$[$0]; - break; - case 42: - this.$ = yy.preparePath(true, $$[$0], this._$); - break; - case 43: - this.$ = yy.preparePath(false, $$[$0], this._$); - break; - case 44: - $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2]; - break; - case 45: - this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }]; - break; - case 46: - this.$ = []; - break; - case 47: - $$[$0 - 1].push($$[$0]); - break; - case 48: - this.$ = [$$[$0]]; - break; - case 49: - $$[$0 - 1].push($$[$0]); - break; - case 50: - this.$ = []; - break; - case 51: - $$[$0 - 1].push($$[$0]); - break; - case 58: - this.$ = []; - break; - case 59: - $$[$0 - 1].push($$[$0]); - break; - case 64: - this.$ = []; - break; - case 65: - $$[$0 - 1].push($$[$0]); - break; - case 70: - this.$ = []; - break; - case 71: - $$[$0 - 1].push($$[$0]); - break; - case 78: - this.$ = []; - break; - case 79: - $$[$0 - 1].push($$[$0]); - break; - case 82: - this.$ = []; - break; - case 83: - $$[$0 - 1].push($$[$0]); - break; - case 86: - this.$ = []; - break; - case 87: - $$[$0 - 1].push($$[$0]); - break; - case 90: - this.$ = []; - break; - case 91: - $$[$0 - 1].push($$[$0]); - break; - case 94: - this.$ = []; - break; - case 95: - $$[$0 - 1].push($$[$0]); - break; - case 98: - this.$ = [$$[$0]]; - break; - case 99: - $$[$0 - 1].push($$[$0]); - break; - case 100: - this.$ = [$$[$0]]; - break; - case 101: - $$[$0 - 1].push($$[$0]); - break; - } - }, - table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 13: 40, 15: [1, 20], 17: 39 }, { 20: 42, 56: 41, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 45, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 48, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 42, 56: 49, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 50, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 51] }, { 72: [1, 35], 86: 52 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 53, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 54, 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 55, 47: [2, 54] }, { 28: 60, 43: 61, 44: [1, 59], 47: [2, 56] }, { 13: 63, 15: [1, 20], 18: [1, 62] }, { 15: [2, 48], 18: [2, 48] }, { 33: [2, 86], 57: 64, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 65, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 66, 47: [1, 67] }, { 30: 68, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 69, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 70, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 71, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 75, 33: [2, 80], 50: 72, 63: 73, 64: 76, 65: [1, 44], 69: 74, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 80] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 51] }, { 20: 75, 53: 81, 54: [2, 84], 63: 82, 64: 76, 65: [1, 44], 69: 83, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 84, 47: [1, 67] }, { 47: [2, 55] }, { 4: 85, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 86, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 87, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 88, 47: [1, 67] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 75, 33: [2, 88], 58: 89, 63: 90, 64: 76, 65: [1, 44], 69: 91, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 92, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 93, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 31: 94, 33: [2, 60], 63: 95, 64: 76, 65: [1, 44], 69: 96, 70: 77, 71: 78, 72: [1, 79], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 66], 36: 97, 63: 98, 64: 76, 65: [1, 44], 69: 99, 70: 77, 71: 78, 72: [1, 79], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 22: 100, 23: [2, 52], 63: 101, 64: 76, 65: [1, 44], 69: 102, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 92], 62: 103, 63: 104, 64: 76, 65: [1, 44], 69: 105, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 106] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 107, 72: [1, 108], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 109], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 110] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 112, 46: 111, 47: [2, 76] }, { 33: [2, 70], 40: 113, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 114] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 75, 63: 116, 64: 76, 65: [1, 44], 67: 115, 68: [2, 96], 69: 117, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 118] }, { 32: 119, 33: [2, 62], 74: 120, 75: [1, 121] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 122, 74: 123, 75: [1, 121] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 124] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 125] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 109] }, { 20: 75, 63: 126, 64: 76, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 75, 33: [2, 72], 41: 127, 63: 128, 64: 76, 65: [1, 44], 69: 129, 70: 77, 71: 78, 72: [1, 79], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 130] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 131] }, { 33: [2, 63] }, { 72: [1, 133], 76: 132 }, { 33: [1, 134] }, { 33: [2, 69] }, { 15: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 135, 74: 136, 75: [1, 121] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 138], 77: [1, 137] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 139] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }], - defaultActions: { 4: [2, 1], 55: [2, 55], 57: [2, 20], 61: [2, 57], 74: [2, 81], 83: [2, 85], 87: [2, 18], 91: [2, 89], 102: [2, 53], 105: [2, 93], 111: [2, 19], 112: [2, 77], 117: [2, 97], 120: [2, 63], 123: [2, 69], 124: [2, 12], 136: [2, 75], 137: [2, 32] }, - parseError: function parseError(str, hash) { - throw new Error(str); - }, - parse: function parse(input) { - var self = this, - stack = [0], - vstack = [null], - lstack = [], - table = this.table, - yytext = "", - yylineno = 0, - yyleng = 0, - recovering = 0, - TERROR = 2, - EOF = 1; - this.lexer.setInput(input); - this.lexer.yy = this.yy; - this.yy.lexer = this.lexer; - this.yy.parser = this; - if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {}; - var yyloc = this.lexer.yylloc; - lstack.push(yyloc); - var ranges = this.lexer.options && this.lexer.options.ranges; - if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError; - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - function lex() { - var token; - token = self.lexer.lex() || 1; - if (typeof token !== "number") { - token = self.symbols_[token] || token; - } - return token; - } - var symbol, - preErrorSymbol, - state, - action, - a, - r, - yyval = {}, - p, - len, - newState, - expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - if (!recovering) { - expected = []; - for (p in table[state]) if (this.terminals_[p] && p > 2) { - expected.push("'" + this.terminals_[p] + "'"); - } - if (this.lexer.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected }); - } - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(this.lexer.yytext); - lstack.push(this.lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = this.lexer.yyleng; - yytext = this.lexer.yytext; - yylineno = this.lexer.yylineno; - yyloc = this.lexer.yylloc; - if (recovering > 0) recovering--; - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; - if (ranges) { - yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; - } - r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - /* Jison generated lexer */ - var lexer = (function () { - var lexer = { EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - setInput: function setInput(input) { - this._input = input; - this._more = this._less = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 }; - if (this.options.ranges) this.yylloc.range = [0, 0]; - this.offset = 0; - return this; - }, - input: function input() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) this.yylloc.range[1]++; - - this._input = this._input.slice(1); - return ch; - }, - unput: function unput(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len - 1); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) this.yylineno -= lines.length - 1; - var r = this.yylloc.range; - - this.yylloc = { first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - return this; - }, - more: function more() { - this._more = true; - return this; - }, - less: function less(n) { - this.unput(this.match.slice(n)); - }, - pastInput: function pastInput() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); - }, - upcomingInput: function upcomingInput() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, - showPosition: function showPosition() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - next: function next() { - if (this.done) { - return this.EOF; - } - if (!this._input) this.done = true; - - var token, match, tempMatch, index, col, lines; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (!this.options.flex) break; - } - } - if (match) { - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) this.yylineno += lines.length; - this.yylloc = { first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) this.done = false; - if (token) return token;else return; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno }); - } - }, - lex: function lex() { - var r = this.next(); - if (typeof r !== 'undefined') { - return r; - } else { - return this.lex(); - } - }, - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - popState: function popState() { - return this.conditionStack.pop(); - }, - _currentRules: function _currentRules() { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - }, - topState: function topState() { - return this.conditionStack[this.conditionStack.length - 2]; - }, - pushState: function begin(condition) { - this.begin(condition); - } }; - lexer.options = {}; - lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START - /**/) { - - function strip(start, end) { - return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng - end); - } - - var YYSTATE = YY_START; - switch ($avoiding_name_collisions) { - case 0: - if (yy_.yytext.slice(-2) === "\\\\") { - strip(0, 1); - this.begin("mu"); - } else if (yy_.yytext.slice(-1) === "\\") { - strip(0, 1); - this.begin("emu"); - } else { - this.begin("mu"); - } - if (yy_.yytext) return 15; - - break; - case 1: - return 15; - break; - case 2: - this.popState(); - return 15; - - break; - case 3: - this.begin('raw');return 15; - break; - case 4: - this.popState(); - // Should be using `this.topState()` below, but it currently - // returns the second top instead of the first top. Opened an - // issue about it at https://github.com/zaach/jison/issues/291 - if (this.conditionStack[this.conditionStack.length - 1] === 'raw') { - return 15; - } else { - yy_.yytext = yy_.yytext.substr(5, yy_.yyleng - 9); - return 'END_RAW_BLOCK'; - } - - break; - case 5: - return 15; - break; - case 6: - this.popState(); - return 14; - - break; - case 7: - return 65; - break; - case 8: - return 68; - break; - case 9: - return 19; - break; - case 10: - this.popState(); - this.begin('raw'); - return 23; - - break; - case 11: - return 55; - break; - case 12: - return 60; - break; - case 13: - return 29; - break; - case 14: - return 47; - break; - case 15: - this.popState();return 44; - break; - case 16: - this.popState();return 44; - break; - case 17: - return 34; - break; - case 18: - return 39; - break; - case 19: - return 51; - break; - case 20: - return 48; - break; - case 21: - this.unput(yy_.yytext); - this.popState(); - this.begin('com'); - - break; - case 22: - this.popState(); - return 14; - - break; - case 23: - return 48; - break; - case 24: - return 73; - break; - case 25: - return 72; - break; - case 26: - return 72; - break; - case 27: - return 87; - break; - case 28: - // ignore whitespace - break; - case 29: - this.popState();return 54; - break; - case 30: - this.popState();return 33; - break; - case 31: - yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80; - break; - case 32: - yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80; - break; - case 33: - return 85; - break; - case 34: - return 82; - break; - case 35: - return 82; - break; - case 36: - return 83; - break; - case 37: - return 84; - break; - case 38: - return 81; - break; - case 39: - return 75; - break; - case 40: - return 77; - break; - case 41: - return 72; - break; - case 42: - yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72; - break; - case 43: - return 'INVALID'; - break; - case 44: - return 5; - break; - } - }; - lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^\/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]*?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/]; - lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } }; - return lexer; - })(); - parser.lexer = lexer; - function Parser() { - this.yy = {}; - }Parser.prototype = parser;parser.Parser = Parser; - return new Parser(); - })();exports.__esModule = true; - exports['default'] = handlebars; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLFFBQUksVUFBVSxHQUFHLENBQUMsWUFBVTtBQUM1QixZQUFJLE1BQU0sR0FBRyxFQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssR0FBRyxFQUFHO0FBQ3pDLGNBQUUsRUFBRSxFQUFFO0FBQ04sb0JBQVEsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsMkJBQTJCLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsMEJBQTBCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFB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RUFBRSxFQUFDLEtBQUssRUFBQztBQUM1ZSx3QkFBWSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFB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QUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3RFLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2Riw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEYsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JJLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckksOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMvRSw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUNILDRCQUFJLE9BQU8sR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDOzRCQUM3RSxPQUFPLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekQsK0JBQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDOztBQUV2Qiw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQzs7QUFFdEUsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUMsQ0FBQztBQUMxRSw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RILDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEgsOEJBQU07QUFB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SyxFQUFFO0FBQUUsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQUFBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEcsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7QUFDM0QsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDcEIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQywwQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEVBQUU7QUFBQyw0QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMEJBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLDBCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qiw4QkFBTTtBQUFBLEFBQ04seUJBQUssR0FBRztBQUFDLDRCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0IsOEJBQU07QUFBQSxBQUNOLHlCQUFLLEdBQUc7QUFBQywwQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0IsOEJBQU07QUFBQSxpQkFDTDthQUNBO0FBQ0QsaUJBQUssRUFBRSxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQztBQUN4Z1csMEJBQWMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVB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QUFBLEFBQ04seUJBQUssRUFBRTtBQUFDLCtCQUFPLEVBQUUsQ0FBQztBQUNsQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUNMLDRCQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2Qiw0QkFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2hCLDRCQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVwQiw4QkFBTTtBQUFBLEFBQ04seUJBQUssRUFBRTtBQUNMLDRCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsK0JBQU8sRUFBRSxDQUFDOztBQUVaLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsK0JBQU8sRUFBRSxDQUFDO0FBQ2xCLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFOztBQUNQLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsNEJBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDhCQUFNO0FBQUEsQUFDTix5QkFBSyxFQUFFO0FBQUMsMkJBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFDLEdBQUcsQ0FBQyxDQUFDLEFBQUMsT0FBTyxFQUFF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RUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLENBQUMsRUFBQyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUMsRUFBQyxLQUFLLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxLQUFLLEVBQUMsRUFBQyxTQUFTLEVBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLFdBQVcsRUFBQyxJQUFJLEVBQUMsRUFBQyxDQUFDO0FBQzNVLG1CQUFPLEtBQUssQ0FBQztTQUFDLENBQUEsRUFBRyxDQUFBO0FBQ2pCLGNBQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3JCLGlCQUFTLE1BQU0sR0FBSTtBQUFFLGdCQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUFFLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JGLGVBQU8sSUFBSSxNQUFNLEVBQUEsQ0FBQztLQUNqQixDQUFBLEVBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUMvQixXQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsVUFBVSxDQUFDIiwiZmlsZSI6InBhcnNlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4vKiBKaXNvbiBnZW5lcmF0ZWQgcGFyc2VyICovXG52YXIgaGFuZGxlYmFycyA9IChmdW5jdGlvbigpe1xudmFyIHBhcnNlciA9IHt0cmFjZTogZnVuY3Rpb24gdHJhY2UoKSB7IH0sXG55eToge30sXG5zeW1ib2xzXzoge1wiZXJyb3JcIjoyLFwicm9vdFwiOjMsXCJwcm9ncmFtXCI6NCxcIkVPRlwiOjUsXCJwcm9ncmFtX3JlcGV0aXRpb24wXCI6NixcInN0YXRlbWVudFwiOjcsXCJtdXN0YWNoZVwiOjgsXCJibG9ja1wiOjksXCJyYXdCbG9ja1wiOjEwLFwicGFydGlhbFwiOjExLFwicGFydGlhbEJsb2NrXCI6MTIsXCJjb250ZW50XCI6MTMsXCJDT01NRU5UXCI6MTQsXCJDT05URU5UXCI6MTUsXCJvcGVuUmF3QmxvY2tcIjoxNixcInJhd0Jsb2NrX3JlcGV0aXRpb25fcGx1czBcIjoxNyxcIkVORF9SQVdfQkxPQ0tcIjoxOCxcIk9QRU5fUkFXX0JMT0NLXCI6MTksXCJoZWxwZXJOYW1lXCI6MjAsXCJvcGVuUmF3QmxvY2tfcmVwZXRpdGlvbjBcIjoyMSxcIm9wZW5SYXdCbG9ja19vcHRpb24wXCI6MjIsXCJDTE9TRV9SQVdfQkxPQ0tcIjoyMyxcIm9wZW5CbG9ja1wiOjI0LFwiYmxvY2tfb3B0aW9uMFwiOjI1LFwiY2xvc2VCbG9ja1wiOjI2LFwib3BlbkludmVyc2VcIjoyNyxcImJsb2NrX29wdGlvbjFcIjoyOCxcIk9QRU5fQkxPQ0tcIjoyOSxcIm9wZW5CbG9ja19yZXBldGl0aW9uMFwiOjMwLFwib3BlbkJsb2NrX29wdGlvbjBcIjozMSxcIm9wZW5CbG9ja19vcHRpb24xXCI6MzIsXCJDTE9TRVwiOjMzLFwiT1BFTl9JTlZFUlNFXCI6MzQsXCJvcGVuSW52ZXJzZV9yZXBldGl0aW9uMFwiOjM1LFwib3BlbkludmVyc2Vfb3B0aW9uMFwiOjM2LFwib3BlbkludmVyc2Vfb3B0aW9uMVwiOjM3LFwib3BlbkludmVyc2VDaGFpblwiOjM4LFwiT1BFTl9JTlZFUlNFX0NIQUlOXCI6MzksXCJvcGVuSW52ZXJzZUNoYWluX3JlcGV0aXRpb24wXCI6NDAsXCJvcGVuSW52ZXJzZUNoYWluX29wdGlvbjBcIjo0MSxcIm9wZW5JbnZlcnNlQ2hhaW5fb3B0aW9uMVwiOjQyLFwiaW52ZXJzZUFuZFByb2dyYW1cIjo0MyxcIklOVkVSU0VcIjo0NCxcImludmVyc2VDaGFpblwiOjQ1LFwiaW52ZXJzZUNoYWluX29wdGlvbjBcIjo0NixcIk9QRU5fRU5EQkxPQ0tcIjo0NyxcIk9QRU5cIjo0OCxcIm11c3RhY2hlX3JlcGV0aXRpb24wXCI6NDksXCJtdXN0YWNoZV9vcHRpb24wXCI6NTAsXCJPUEVOX1VORVNDQVBFRFwiOjUxLFwibXVzdGFjaGVfcmVwZXRpdGlvbjFcIjo1MixcIm11c3RhY2hlX29wdGlvbjFcIjo1MyxcIkNMT1NFX1VORVNDQVBFRFwiOjU0LFwiT1BFTl9QQVJUSUFMXCI6NTUsXCJwYXJ0aWFsTmFtZVwiOjU2LFwicGFydGlhbF9yZXBldGl0aW9uMFwiOjU3LFwicGFydGlhbF9vcHRpb24wXCI6NTgsXCJvcGVuUGFydGlhbEJsb2NrXCI6NTksXCJPUEVOX1BBUlRJQUxfQkxPQ0tcIjo2MCxcIm9wZW5QYXJ0aWFsQmxvY2tfcmVwZXRpdGlvbjBcIjo2MSxcIm9wZW5QYXJ0aWFsQmxvY2tfb3B0aW9uMFwiOjYyLFwicGFyYW1cIjo2MyxcInNleHByXCI6NjQsXCJPUEVOX1NFWFBSXCI6NjUsXCJzZXhwcl9yZXBldGl0aW9uMFwiOjY2LFwic2V4cHJfb3B0aW9uMFwiOjY3LFwiQ0xPU0VfU0VYUFJcIjo2OCxcImhhc2hcIjo2OSxcImhhc2hfcmVwZXRpdGlvbl9wbHVzMFwiOjcwLFwiaGFzaFNlZ21lbnRcIjo3MSxcIklEXCI6NzIsXCJFUVVBTFNcIjo3MyxcImJsb2NrUGFyYW1zXCI6NzQsXCJPUEVOX0JMT0NLX1BBUkFNU1wiOjc1LFwiYmxvY2tQYXJhbXNfcmVwZXRpdGlvbl9wbHVzMFwiOjc2LFwiQ0xPU0VfQkxPQ0tfUEFSQU1TXCI6NzcsXCJwYXRoXCI6NzgsXCJkYXRhTmFtZVwiOjc5LFwiU1RSSU5HXCI6ODAsXCJOVU1CRVJcIjo4MSxcIkJPT0xFQU5cIjo4MixcIlVOREVGSU5FRFwiOjgzLFwiTlVMTFwiOjg0LFwiREFUQVwiOjg1LFwicGF0aFNlZ21lbnRzXCI6ODYsXCJTRVBcIjo4NyxcIiRhY2NlcHRcIjowLFwiJGVuZFwiOjF9LFxudGVybWluYWxzXzogezI6XCJlcnJvclwiLDU6XCJFT0ZcIiwxNDpcIkNPTU1FTlRcIiwxNTpcIkNPTlRFTlRcIiwxODpcIkVORF9SQVdfQkxPQ0tcIiwxOTpcIk9QRU5fUkFXX0JMT0NLXCIsMjM6XCJDTE9TRV9SQVdfQkxPQ0tcIiwyOTpcIk9QRU5fQkxPQ0tcIiwzMzpcIkNMT1NFXCIsMzQ6XCJPUEVOX0lOVkVSU0VcIiwzOTpcIk9QRU5fSU5WRVJTRV9DSEFJTlwiLDQ0OlwiSU5WRVJTRVwiLDQ3OlwiT1BFTl9FTkRCTE9DS1wiLDQ4OlwiT1BFTlwiLDUxOlwiT1BFTl9VTkVTQ0FQRURcIiw1NDpcIkNMT1NFX1VORVNDQVBFRFwiLDU1OlwiT1BFTl9QQVJUSUFMXCIsNjA6XCJPUEVOX1BBUlRJQUxfQkxPQ0tcIiw2NTpcIk9QRU5fU0VYUFJcIiw2ODpcIkNMT1NFX1NFWFBSXCIsNzI6XCJJRFwiLDczOlwiRVFVQUxTXCIsNzU6XCJPUEVOX0JMT0NLX1BBUkFNU1wiLDc3OlwiQ0xPU0VfQkxPQ0tfUEFSQU1TXCIsODA6XCJTVFJJTkdcIiw4MTpcIk5VTUJFUlwiLDgyOlwiQk9PTEVBTlwiLDgzOlwiVU5ERUZJTkVEXCIsODQ6XCJOVUxMXCIsODU6XCJEQVRBXCIsODc6XCJTRVBcIn0sXG5wcm9kdWN0aW9uc186IFswLFszLDJdLFs0LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFs3LDFdLFsxMywxXSxbMTAsM10sWzE2LDVdLFs5LDRdLFs5LDRdLFsyNCw2XSxbMjcsNl0sWzM4LDZdLFs0MywyXSxbNDUsM10sWzQ1LDFdLFsyNiwzXSxbOCw1XSxbOCw1XSxbMTEsNV0sWzEyLDNdLFs1OSw1XSxbNjMsMV0sWzYzLDFdLFs2NCw1XSxbNjksMV0sWzcxLDNdLFs3NCwzXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzU2LDFdLFs1NiwxXSxbNzksMl0sWzc4LDFdLFs4NiwzXSxbODYsMV0sWzYsMF0sWzYsMl0sWzE3LDFdLFsxNywyXSxbMjEsMF0sWzIxLDJdLFsyMiwwXSxbMjIsMV0sWzI1LDBdLFsyNSwxXSxbMjgsMF0sWzI4LDFdLFszMCwwXSxbMzAsMl0sWzMxLDBdLFszMSwxXSxbMzIsMF0sWzMyLDFdLFszNSwwXSxbMzUsMl0sWzM2LDBdLFszNiwxXSxbMzcsMF0sWzM3LDFdLFs0MCwwXSxbNDAsMl0sWzQxLDBdLFs0MSwxXSxbNDIsMF0sWzQyLDFdLFs0NiwwXSxbNDYsMV0sWzQ5LDBdLFs0OSwyXSxbNTAsMF0sWzUwLDFdLFs1MiwwXSxbNTIsMl0sWzUzLDBdLFs1MywxXSxbNTcsMF0sWzU3LDJdLFs1OCwwXSxbNTgsMV0sWzYxLDBdLFs2MSwyXSxbNjIsMF0sWzYyLDFdLFs2NiwwXSxbNjYsMl0sWzY3LDBdLFs2NywxXSxbNzAsMV0sWzcwLDJdLFs3NiwxXSxbNzYsMl1dLFxucGVyZm9ybUFjdGlvbjogZnVuY3Rpb24gYW5vbnltb3VzKHl5dGV4dCx5eWxlbmcseXlsaW5lbm8seXkseXlzdGF0ZSwkJCxfJFxuLyoqLykge1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6IHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjp0aGlzLiQgPSB5eS5wcmVwYXJlUHJvZ3JhbSgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDM6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDQ6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDU6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDY6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDc6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDk6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbW1lbnRTdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMTA6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbnRlbnRTdGF0ZW1lbnQnLFxuICAgICAgb3JpZ2luYWw6ICQkWyQwXSxcbiAgICAgIHZhbHVlOiAkJFskMF0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAxMTp0aGlzLiQgPSB5eS5wcmVwYXJlUmF3QmxvY2soJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDEyOnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdIH07XG5icmVhaztcbmNhc2UgMTM6dGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE0OnRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRydWUsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMuJCA9IHsgb3BlbjogJCRbJDAtNV0sIHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTc6dGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxODp0aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTFdLCAkJFskMC0xXSksIHByb2dyYW06ICQkWyQwXSB9O1xuYnJlYWs7XG5jYXNlIDE5OlxuICAgIHZhciBpbnZlcnNlID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKSxcbiAgICAgICAgcHJvZ3JhbSA9IHl5LnByZXBhcmVQcm9ncmFtKFtpbnZlcnNlXSwgJCRbJDAtMV0ubG9jKTtcbiAgICBwcm9ncmFtLmNoYWluZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kID0geyBzdHJpcDogJCRbJDAtMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07XG4gIFxuYnJlYWs7XG5jYXNlIDIwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyMTp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMjp0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIzOnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjQ6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLFxuICAgICAgbmFtZTogJCRbJDAtM10sXG4gICAgICBwYXJhbXM6ICQkWyQwLTJdLFxuICAgICAgaGFzaDogJCRbJDAtMV0sXG4gICAgICBpbmRlbnQ6ICcnLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAyNTp0aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNjp0aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMjg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDI5OlxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgIHBhdGg6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMzA6dGhpcy4kID0ge3R5cGU6ICdIYXNoJywgcGFpcnM6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzMTp0aGlzLiQgPSB7dHlwZTogJ0hhc2hQYWlyJywga2V5OiB5eS5pZCgkJFskMC0yXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzI6dGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDMzOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAzNDp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzU6dGhpcy4kID0ge3R5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQwXSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNjp0aGlzLiQgPSB7dHlwZTogJ051bWJlckxpdGVyYWwnLCB2YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNzp0aGlzLiQgPSB7dHlwZTogJ0Jvb2xlYW5MaXRlcmFsJywgdmFsdWU6ICQkWyQwXSA9PT0gJ3RydWUnLCBvcmlnaW5hbDogJCRbJDBdID09PSAndHJ1ZScsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzg6dGhpcy4kID0ge3R5cGU6ICdVbmRlZmluZWRMaXRlcmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzOTp0aGlzLiQgPSB7dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDQwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA0MTp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgNDI6dGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0Mzp0aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0NDogJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNDU6dGhpcy4kID0gW3twYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdfV07XG5icmVhaztcbmNhc2UgNDY6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNDc6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDQ4OnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDQ5OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA1MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA1MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNTg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDY0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDY1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA3MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA3MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNzg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNzk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDgyOnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDgzOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA4Njp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA4NzokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgOTA6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgOTE6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDk0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDk1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA5ODp0aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xuY2FzZSA5OTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgMTAwOnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDEwMTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbn1cbn0sXG50YWJsZTogW3szOjEsNDoyLDU6WzIsNDZdLDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE6WzNdfSx7NTpbMSw0XX0sezU6WzIsMl0sNzo1LDg6Niw5OjcsMTA6OCwxMTo5LDEyOjEwLDEzOjExLDE0OlsxLDEyXSwxNTpbMSwyMF0sMTY6MTcsMTk6WzEsMjNdLDI0OjE1LDI3OjE2LDI5OlsxLDIxXSwzNDpbMSwyMl0sMzk6WzIsMl0sNDQ6WzIsMl0sNDc6WzIsMl0sNDg6WzEsMTNdLDUxOlsxLDE0XSw1NTpbMSwxOF0sNTk6MTksNjA6WzEsMjRdfSx7MTpbMiwxXX0sezU6WzIsNDddLDE0OlsyLDQ3XSwxNTpbMiw0N10sMTk6WzIsNDddLDI5OlsyLDQ3XSwzNDpbMiw0N10sMzk6WzIsNDddLDQ0OlsyLDQ3XSw0NzpbMiw0N10sNDg6WzIsNDddLDUxOlsyLDQ3XSw1NTpbMiw0N10sNjA6WzIsNDddfSx7NTpbMiwzXSwxNDpbMiwzXSwxNTpbMiwzXSwxOTpbMiwzXSwyOTpbMiwzXSwzNDpbMiwzXSwzOTpbMiwzXSw0NDpbMiwzXSw0NzpbMiwzXSw0ODpbMiwzXSw1MTpbMiwzXSw1NTpbMiwzXSw2MDpbMiwzXX0sezU6WzIsNF0sMTQ6WzIsNF0sMTU6WzIsNF0sMTk6WzIsNF0sMjk6WzIsNF0sMzQ6WzIsNF0sMzk6WzIsNF0sNDQ6WzIsNF0sNDc6WzIsNF0sNDg6WzIsNF0sNTE6WzIsNF0sNTU6WzIsNF0sNjA6WzIsNF19LHs1OlsyLDVdLDE0OlsyLDVdLDE1OlsyLDVdLDE5OlsyLDVdLDI5OlsyLDVdLDM0OlsyLDVdLDM5OlsyLDVdLDQ0OlsyLDVdLDQ3OlsyLDVdLDQ4OlsyLDVdLDUxOlsyLDVdLDU1OlsyLDVdLDYwOlsyLDVdfSx7NTpbMiw2XSwxNDpbMiw2XSwxNTpbMiw2XSwxOTpbMiw2XSwyOTpbMiw2XSwzNDpbMiw2XSwzOTpbMiw2XSw0NDpbMiw2XSw0NzpbMiw2XSw0ODpbMiw2XSw1MTpbMiw2XSw1NTpbMiw2XSw2MDpbMiw2XX0sezU6WzIsN10sMTQ6WzIsN10sMTU6WzIsN10sMTk6WzIsN10sMjk6WzIsN10sMzQ6WzIsN10sMzk6WzIsN10sNDQ6WzIsN10sNDc6WzIsN10sNDg6WzIsN10sNTE6WzIsN10sNTU6WzIsN10sNjA6WzIsN119LHs1OlsyLDhdLDE0OlsyLDhdLDE1OlsyLDhdLDE5OlsyLDhdLDI5OlsyLDhdLDM0OlsyLDhdLDM5OlsyLDhdLDQ0OlsyLDhdLDQ3OlsyLDhdLDQ4OlsyLDhdLDUxOlsyLDhdLDU1OlsyLDhdLDYwOlsyLDhdfSx7NTpbMiw5XSwxNDpbMiw5XSwxNTpbMiw5XSwxOTpbMiw5XSwyOTpbMiw5XSwzNDpbMiw5XSwzOTpbMiw5XSw0NDpbMiw5XSw0NzpbMiw5XSw0ODpbMiw5XSw1MTpbMiw5XSw1NTpbMiw5XSw2MDpbMiw5XX0sezIwOjI1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjM2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6MzcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sMzk6WzIsNDZdLDQ0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NDozOCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezEzOjQwLDE1OlsxLDIwXSwxNzozOX0sezIwOjQyLDU2OjQxLDY0OjQzLDY1OlsxLDQ0XSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs0OjQ1LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ3OlsyLDQ2XSw0ODpbMiw0Nl0sNTE6WzIsNDZdLDU1OlsyLDQ2XSw2MDpbMiw0Nl19LHs1OlsyLDEwXSwxNDpbMiwxMF0sMTU6WzIsMTBdLDE4OlsyLDEwXSwxOTpbMiwxMF0sMjk6WzIsMTBdLDM0OlsyLDEwXSwzOTpbMiwxMF0sNDQ6WzIsMTBdLDQ3OlsyLDEwXSw0ODpbMiwxMF0sNTE6WzIsMTBdLDU1OlsyLDEwXSw2MDpbMiwxMF19LHsyMDo0Niw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo0Nyw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo0OCw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo0Miw1Njo0OSw2NDo0Myw2NTpbMSw0NF0sNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MzM6WzIsNzhdLDQ5OjUwLDY1OlsyLDc4XSw3MjpbMiw3OF0sODA6WzIsNzhdLDgxOlsyLDc4XSw4MjpbMiw3OF0sODM6WzIsNzhdLDg0OlsyLDc4XSw4NTpbMiw3OF19LHsyMzpbMiwzM10sMzM6WzIsMzNdLDU0OlsyLDMzXSw2NTpbMiwzM10sNjg6WzIsMzNdLDcyOlsyLDMzXSw3NTpbMiwzM10sODA6WzIsMzNdLDgxOlsyLDMzXSw4MjpbMiwzM10sODM6WzIsMzNdLDg0OlsyLDMzXSw4NTpbMiwzM119LHsyMzpbMiwzNF0sMzM6WzIsMzRdLDU0OlsyLDM0XSw2NTpbMiwzNF0sNjg6WzIsMzRdLDcyOlsyLDM0XSw3NTpbMiwzNF0sODA6WzIsMzRdLDgxOlsyLDM0XSw4MjpbMiwzNF0sODM6WzIsMzRdLDg0OlsyLDM0XSw4NTpbMiwzNF19LHsyMzpbMiwzNV0sMzM6WzIsMzVdLDU0OlsyLDM1XSw2NTpbMiwzNV0sNjg6WzIsMzVdLDcyOlsyLDM1XSw3NTpbMiwzNV0sODA6WzIsMzVdLDgxOlsyLDM1XSw4MjpbMiwzNV0sODM6WzIsMzVdLDg0OlsyLDM1XSw4NTpbMiwzNV19LHsyMzpbMiwzNl0sMzM6WzIsMzZdLDU0OlsyLDM2XSw2NTpbMiwzNl0sNjg6WzIsMzZdLDcyOlsyLDM2XSw3NTpbMiwzNl0sODA6WzIsMzZdLDgxOlsyLDM2XSw4MjpbMiwzNl0sODM6WzIsMzZdLDg0OlsyLDM2XSw4NTpbMiwzNl19LHsyMzpbMiwzN10sMzM6WzIsMzddLDU0OlsyLDM3XSw2NTpbMiwzN10sNjg6WzIsMzddLDcyOlsyLDM3XSw3NTpbMiwzN10sODA6WzIsMzddLDgxOlsyLDM3XSw4MjpbMiwzN10sODM6WzIsMzddLDg0OlsyLDM3XSw4NTpbMiwzN119LHsyMzpbMiwzOF0sMzM6WzIsMzhdLDU0OlsyLDM4XSw2NTpbMiwzOF0sNjg6WzIsMzhdLDcyOlsyLDM4XSw3NTpbMiwzOF0sODA6WzIsMzhdLDgxOlsyLDM4XSw4MjpbMiwzOF0sODM6WzIsMzhdLDg0OlsyLDM4XSw4NTpbMiwzOF19LHsyMzpbMiwzOV0sMzM6WzIsMzldLDU0OlsyLDM5XSw2NTpbMiwzOV0sNjg6WzIsMzldLDcyOlsyLDM5XSw3NTpbMiwzOV0sODA6WzIsMzldLDgxOlsyLDM5XSw4MjpbMiwzOV0sODM6WzIsMzldLDg0OlsyLDM5XSw4NTpbMiwzOV19LHsyMzpbMiw0M10sMzM6WzIsNDNdLDU0OlsyLDQzXSw2NTpbMiw0M10sNjg6WzIsNDNdLDcyOlsyLDQzXSw3NTpbMiw0M10sODA6WzIsNDNdLDgxOlsyLDQzXSw4MjpbMiw0M10sODM6WzIsNDNdLDg0OlsyLDQzXSw4NTpbMiw0M10sODc6WzEsNTFdfSx7NzI6WzEsMzVdLDg2OjUyfSx7MjM6WzIsNDVdLDMzOlsyLDQ1XSw1NDpbMiw0NV0sNjU6WzIsNDVdLDY4OlsyLDQ1XSw3MjpbMiw0NV0sNzU6WzIsNDVdLDgwOlsyLDQ1XSw4MTpbMiw0NV0sODI6WzIsNDVdLDgzOlsyLDQ1XSw4NDpbMiw0NV0sODU6WzIsNDVdLDg3OlsyLDQ1XX0sezUyOjUzLDU0OlsyLDgyXSw2NTpbMiw4Ml0sNzI6WzIsODJdLDgwOlsyLDgyXSw4MTpbMiw4Ml0sODI6WzIsODJdLDgzOlsyLDgyXSw4NDpbMiw4Ml0sODU6WzIsODJdfSx7MjU6NTQsMzg6NTYsMzk6WzEsNThdLDQzOjU3LDQ0OlsxLDU5XSw0NTo1NSw0NzpbMiw1NF19LHsyODo2MCw0Mzo2MSw0NDpbMSw1OV0sNDc6WzIsNTZdfSx7MTM6NjMsMTU6WzEsMjBdLDE4OlsxLDYyXX0sezE1OlsyLDQ4XSwxODpbMiw0OF19LHszMzpbMiw4Nl0sNTc6NjQsNjU6WzIsODZdLDcyOlsyLDg2XSw4MDpbMiw4Nl0sODE6WzIsODZdLDgyOlsyLDg2XSw4MzpbMiw4Nl0sODQ6WzIsODZdLDg1OlsyLDg2XX0sezMzOlsyLDQwXSw2NTpbMiw0MF0sNzI6WzIsNDBdLDgwOlsyLDQwXSw4MTpbMiw0MF0sODI6WzIsNDBdLDgzOlsyLDQwXSw4NDpbMiw0MF0sODU6WzIsNDBdfSx7MzM6WzIsNDFdLDY1OlsyLDQxXSw3MjpbMiw0MV0sODA6WzIsNDFdLDgxOlsyLDQxXSw4MjpbMiw0MV0sODM6WzIsNDFdLDg0OlsyLDQxXSw4NTpbMiw0MV19LHsyMDo2NSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo2Niw0NzpbMSw2N119LHszMDo2OCwzMzpbMiw1OF0sNjU6WzIsNThdLDcyOlsyLDU4XSw3NTpbMiw1OF0sODA6WzIsNThdLDgxOlsyLDU4XSw4MjpbMiw1OF0sODM6WzIsNThdLDg0OlsyLDU4XSw4NTpbMiw1OF19LHszMzpbMiw2NF0sMzU6NjksNjU6WzIsNjRdLDcyOlsyLDY0XSw3NTpbMiw2NF0sODA6WzIsNjRdLDgxOlsyLDY0XSw4MjpbMiw2NF0sODM6WzIsNjRdLDg0OlsyLDY0XSw4NTpbMiw2NF19LHsyMTo3MCwyMzpbMiw1MF0sNjU6WzIsNTBdLDcyOlsyLDUwXSw4MDpbMiw1MF0sODE6WzIsNTBdLDgyOlsyLDUwXSw4MzpbMiw1MF0sODQ6WzIsNTBdLDg1OlsyLDUwXX0sezMzOlsyLDkwXSw2MTo3MSw2NTpbMiw5MF0sNzI6WzIsOTBdLDgwOlsyLDkwXSw4MTpbMiw5MF0sODI6WzIsOTBdLDgzOlsyLDkwXSw4NDpbMiw5MF0sODU6WzIsOTBdfSx7MjA6NzUsMzM6WzIsODBdLDUwOjcyLDYzOjczLDY0Ojc2LDY1OlsxLDQ0XSw2OTo3NCw3MDo3Nyw3MTo3OCw3MjpbMSw3OV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs3MjpbMSw4MF19LHsyMzpbMiw0Ml0sMzM6WzIsNDJdLDU0OlsyLDQyXSw2NTpbMiw0Ml0sNjg6WzIsNDJdLDcyOlsyLDQyXSw3NTpbMiw0Ml0sODA6WzIsNDJdLDgxOlsyLDQyXSw4MjpbMiw0Ml0sODM6WzIsNDJdLDg0OlsyLDQyXSw4NTpbMiw0Ml0sODc6WzEsNTFdfSx7MjA6NzUsNTM6ODEsNTQ6WzIsODRdLDYzOjgyLDY0Ojc2LDY1OlsxLDQ0XSw2OTo4Myw3MDo3Nyw3MTo3OCw3MjpbMSw3OV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo4NCw0NzpbMSw2N119LHs0NzpbMiw1NV19LHs0Ojg1LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDM5OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezQ3OlsyLDIwXX0sezIwOjg2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6ODcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezI2Ojg4LDQ3OlsxLDY3XX0sezQ3OlsyLDU3XX0sezU6WzIsMTFdLDE0OlsyLDExXSwxNTpbMiwxMV0sMTk6WzIsMTFdLDI5OlsyLDExXSwzNDpbMiwxMV0sMzk6WzIsMTFdLDQ0OlsyLDExXSw0NzpbMiwxMV0sNDg6WzIsMTFdLDUxOlsyLDExXSw1NTpbMiwxMV0sNjA6WzIsMTFdfSx7MTU6WzIsNDldLDE4OlsyLDQ5XX0sezIwOjc1LDMzOlsyLDg4XSw1ODo4OSw2Mzo5MCw2NDo3Niw2NTpbMSw0NF0sNjk6OTEsNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NjU6WzIsOTRdLDY2OjkyLDY4OlsyLDk0XSw3MjpbMiw5NF0sODA6WzIsOTRdLDgxOlsyLDk0XSw4MjpbMiw5NF0sODM6WzIsOTRdLDg0OlsyLDk0XSw4NTpbMiw5NF19LHs1OlsyLDI1XSwxNDpbMiwyNV0sMTU6WzIsMjVdLDE5OlsyLDI1XSwyOTpbMiwyNV0sMzQ6WzIsMjVdLDM5OlsyLDI1XSw0NDpbMiwyNV0sNDc6WzIsMjVdLDQ4OlsyLDI1XSw1MTpbMiwyNV0sNTU6WzIsMjVdLDYwOlsyLDI1XX0sezIwOjkzLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc1LDMxOjk0LDMzOlsyLDYwXSw2Mzo5NSw2NDo3Niw2NTpbMSw0NF0sNjk6OTYsNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc1OlsyLDYwXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc1LDMzOlsyLDY2XSwzNjo5Nyw2Mzo5OCw2NDo3Niw2NTpbMSw0NF0sNjk6OTksNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc1OlsyLDY2XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc1LDIyOjEwMCwyMzpbMiw1Ml0sNjM6MTAxLDY0Ojc2LDY1OlsxLDQ0XSw2OToxMDIsNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NzUsMzM6WzIsOTJdLDYyOjEwMyw2MzoxMDQsNjQ6NzYsNjU6WzEsNDRdLDY5OjEwNSw3MDo3Nyw3MTo3OCw3MjpbMSw3OV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHszMzpbMSwxMDZdfSx7MzM6WzIsNzldLDY1OlsyLDc5XSw3MjpbMiw3OV0sODA6WzIsNzldLDgxOlsyLDc5XSw4MjpbMiw3OV0sODM6WzIsNzldLDg0OlsyLDc5XSw4NTpbMiw3OV19LHszMzpbMiw4MV19LHsyMzpbMiwyN10sMzM6WzIsMjddLDU0OlsyLDI3XSw2NTpbMiwyN10sNjg6WzIsMjddLDcyOlsyLDI3XSw3NTpbMiwyN10sODA6WzIsMjddLDgxOlsyLDI3XSw4MjpbMiwyN10sODM6WzIsMjddLDg0OlsyLDI3XSw4NTpbMiwyN119LHsyMzpbMiwyOF0sMzM6WzIsMjhdLDU0OlsyLDI4XSw2NTpbMiwyOF0sNjg6WzIsMjhdLDcyOlsyLDI4XSw3NTpbMiwyOF0sODA6WzIsMjhdLDgxOlsyLDI4XSw4MjpbMiwyOF0sODM6WzIsMjhdLDg0OlsyLDI4XSw4NTpbMiwyOF19LHsyMzpbMiwzMF0sMzM6WzIsMzBdLDU0OlsyLDMwXSw2ODpbMiwzMF0sNzE6MTA3LDcyOlsxLDEwOF0sNzU6WzIsMzBdfSx7MjM6WzIsOThdLDMzOlsyLDk4XSw1NDpbMiw5OF0sNjg6WzIsOThdLDcyOlsyLDk4XSw3NTpbMiw5OF19LHsyMzpbMiw0NV0sMzM6WzIsNDVdLDU0OlsyLDQ1XSw2NTpbMiw0NV0sNjg6WzIsNDVdLDcyOlsyLDQ1XSw3MzpbMSwxMDldLDc1OlsyLDQ1XSw4MDpbMiw0NV0sODE6WzIsNDVdLDgyOlsyLDQ1XSw4MzpbMiw0NV0sODQ6WzIsNDVdLDg1OlsyLDQ1XSw4NzpbMiw0NV19LHsyMzpbMiw0NF0sMzM6WzIsNDRdLDU0OlsyLDQ0XSw2NTpbMiw0NF0sNjg6WzIsNDRdLDcyOlsyLDQ0XSw3NTpbMiw0NF0sODA6WzIsNDRdLDgxOlsyLDQ0XSw4MjpbMiw0NF0sODM6WzIsNDRdLDg0OlsyLDQ0XSw4NTpbMiw0NF0sODc6WzIsNDRdfSx7NTQ6WzEsMTEwXX0sezU0OlsyLDgzXSw2NTpbMiw4M10sNzI6WzIsODNdLDgwOlsyLDgzXSw4MTpbMiw4M10sODI6WzIsODNdLDgzOlsyLDgzXSw4NDpbMiw4M10sODU6WzIsODNdfSx7NTQ6WzIsODVdfSx7NTpbMiwxM10sMTQ6WzIsMTNdLDE1OlsyLDEzXSwxOTpbMiwxM10sMjk6WzIsMTNdLDM0OlsyLDEzXSwzOTpbMiwxM10sNDQ6WzIsMTNdLDQ3OlsyLDEzXSw0ODpbMiwxM10sNTE6WzIsMTNdLDU1OlsyLDEzXSw2MDpbMiwxM119LHszODo1NiwzOTpbMSw1OF0sNDM6NTcsNDQ6WzEsNTldLDQ1OjExMiw0NjoxMTEsNDc6WzIsNzZdfSx7MzM6WzIsNzBdLDQwOjExMyw2NTpbMiw3MF0sNzI6WzIsNzBdLDc1OlsyLDcwXSw4MDpbMiw3MF0sODE6WzIsNzBdLDgyOlsyLDcwXSw4MzpbMiw3MF0sODQ6WzIsNzBdLDg1OlsyLDcwXX0sezQ3OlsyLDE4XX0sezU6WzIsMTRdLDE0OlsyLDE0XSwxNTpbMiwxNF0sMTk6WzIsMTRdLDI5OlsyLDE0XSwzNDpbMiwxNF0sMzk6WzIsMTRdLDQ0OlsyLDE0XSw0NzpbMiwxNF0sNDg6WzIsMTRdLDUxOlsyLDE0XSw1NTpbMiwxNF0sNjA6WzIsMTRdfSx7MzM6WzEsMTE0XX0sezMzOlsyLDg3XSw2NTpbMiw4N10sNzI6WzIsODddLDgwOlsyLDg3XSw4MTpbMiw4N10sODI6WzIsODddLDgzOlsyLDg3XSw4NDpbMiw4N10sODU6WzIsODddfSx7MzM6WzIsODldfSx7MjA6NzUsNjM6MTE2LDY0Ojc2LDY1OlsxLDQ0XSw2NzoxMTUsNjg6WzIsOTZdLDY5OjExNyw3MDo3Nyw3MTo3OCw3MjpbMSw3OV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHszMzpbMSwxMThdfSx7MzI6MTE5LDMzOlsyLDYyXSw3NDoxMjAsNzU6WzEsMTIxXX0sezMzOlsyLDU5XSw2NTpbMiw1OV0sNzI6WzIsNTldLDc1OlsyLDU5XSw4MDpbMiw1OV0sODE6WzIsNTldLDgyOlsyLDU5XSw4MzpbMiw1OV0sODQ6WzIsNTldLDg1OlsyLDU5XX0sezMzOlsyLDYxXSw3NTpbMiw2MV19LHszMzpbMiw2OF0sMzc6MTIyLDc0OjEyMyw3NTpbMSwxMjFdfSx7MzM6WzIsNjVdLDY1OlsyLDY1XSw3MjpbMiw2NV0sNzU6WzIsNjVdLDgwOlsyLDY1XSw4MTpbMiw2NV0sODI6WzIsNjVdLDgzOlsyLDY1XSw4NDpbMiw2NV0sODU6WzIsNjVdfSx7MzM6WzIsNjddLDc1OlsyLDY3XX0sezIzOlsxLDEyNF19LHsyMzpbMiw1MV0sNjU6WzIsNTFdLDcyOlsyLDUxXSw4MDpbMiw1MV0sODE6WzIsNTFdLDgyOlsyLDUxXSw4MzpbMiw1MV0sODQ6WzIsNTFdLDg1OlsyLDUxXX0sezIzOlsyLDUzXX0sezMzOlsxLDEyNV19LHszMzpbMiw5MV0sNjU6WzIsOTFdLDcyOlsyLDkxXSw4MDpbMiw5MV0sODE6WzIsOTFdLDgyOlsyLDkxXSw4MzpbMiw5MV0sODQ6WzIsOTFdLDg1OlsyLDkxXX0sezMzOlsyLDkzXX0sezU6WzIsMjJdLDE0OlsyLDIyXSwxNTpbMiwyMl0sMTk6WzIsMjJdLDI5OlsyLDIyXSwzNDpbMiwyMl0sMzk6WzIsMjJdLDQ0OlsyLDIyXSw0NzpbMiwyMl0sNDg6WzIsMjJdLDUxOlsyLDIyXSw1NTpbMiwyMl0sNjA6WzIsMjJdfSx7MjM6WzIsOTldLDMzOlsyLDk5XSw1NDpbMiw5OV0sNjg6WzIsOTldLDcyOlsyLDk5XSw3NTpbMiw5OV19LHs3MzpbMSwxMDldfSx7MjA6NzUsNjM6MTI2LDY0Ojc2LDY1OlsxLDQ0XSw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs1OlsyLDIzXSwxNDpbMiwyM10sMTU6WzIsMjNdLDE5OlsyLDIzXSwyOTpbMiwyM10sMzQ6WzIsMjNdLDM5OlsyLDIzXSw0NDpbMiwyM10sNDc6WzIsMjNdLDQ4OlsyLDIzXSw1MTpbMiwyM10sNTU6WzIsMjNdLDYwOlsyLDIzXX0sezQ3OlsyLDE5XX0sezQ3OlsyLDc3XX0sezIwOjc1LDMzOlsyLDcyXSw0MToxMjcsNjM6MTI4LDY0Ojc2LDY1OlsxLDQ0XSw2OToxMjksNzA6NzcsNzE6NzgsNzI6WzEsNzldLDc1OlsyLDcyXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezU6WzIsMjRdLDE0OlsyLDI0XSwxNTpbMiwyNF0sMTk6WzIsMjRdLDI5OlsyLDI0XSwzNDpbMiwyNF0sMzk6WzIsMjRdLDQ0OlsyLDI0XSw0NzpbMiwyNF0sNDg6WzIsMjRdLDUxOlsyLDI0XSw1NTpbMiwyNF0sNjA6WzIsMjRdfSx7Njg6WzEsMTMwXX0sezY1OlsyLDk1XSw2ODpbMiw5NV0sNzI6WzIsOTVdLDgwOlsyLDk1XSw4MTpbMiw5NV0sODI6WzIsOTVdLDgzOlsyLDk1XSw4NDpbMiw5NV0sODU6WzIsOTVdfSx7Njg6WzIsOTddfSx7NTpbMiwyMV0sMTQ6WzIsMjFdLDE1OlsyLDIxXSwxOTpbMiwyMV0sMjk6WzIsMjFdLDM0OlsyLDIxXSwzOTpbMiwyMV0sNDQ6WzIsMjFdLDQ3OlsyLDIxXSw0ODpbMiwyMV0sNTE6WzIsMjFdLDU1OlsyLDIxXSw2MDpbMiwyMV19LHszMzpbMSwxMzFdfSx7MzM6WzIsNjNdfSx7NzI6WzEsMTMzXSw3NjoxMzJ9LHszMzpbMSwxMzRdfSx7MzM6WzIsNjldfSx7MTU6WzIsMTJdfSx7MTQ6WzIsMjZdLDE1OlsyLDI2XSwxOTpbMiwyNl0sMjk6WzIsMjZdLDM0OlsyLDI2XSw0NzpbMiwyNl0sNDg6WzIsMjZdLDUxOlsyLDI2XSw1NTpbMiwyNl0sNjA6WzIsMjZdfSx7MjM6WzIsMzFdLDMzOlsyLDMxXSw1NDpbMiwzMV0sNjg6WzIsMzFdLDcyOlsyLDMxXSw3NTpbMiwzMV19LHszMzpbMiw3NF0sNDI6MTM1LDc0OjEzNiw3NTpbMSwxMjFdfSx7MzM6WzIsNzFdLDY1OlsyLDcxXSw3MjpbMiw3MV0sNzU6WzIsNzFdLDgwOlsyLDcxXSw4MTpbMiw3MV0sODI6WzIsNzFdLDgzOlsyLDcxXSw4NDpbMiw3MV0sODU6WzIsNzFdfSx7MzM6WzIsNzNdLDc1OlsyLDczXX0sezIzOlsyLDI5XSwzMzpbMiwyOV0sNTQ6WzIsMjldLDY1OlsyLDI5XSw2ODpbMiwyOV0sNzI6WzIsMjldLDc1OlsyLDI5XSw4MDpbMiwyOV0sODE6WzIsMjldLDgyOlsyLDI5XSw4MzpbMiwyOV0sODQ6WzIsMjldLDg1OlsyLDI5XX0sezE0OlsyLDE1XSwxNTpbMiwxNV0sMTk6WzIsMTVdLDI5OlsyLDE1XSwzNDpbMiwxNV0sMzk6WzIsMTVdLDQ0OlsyLDE1XSw0NzpbMiwxNV0sNDg6WzIsMTVdLDUxOlsyLDE1XSw1NTpbMiwxNV0sNjA6WzIsMTVdfSx7NzI6WzEsMTM4XSw3NzpbMSwxMzddfSx7NzI6WzIsMTAwXSw3NzpbMiwxMDBdfSx7MTQ6WzIsMTZdLDE1OlsyLDE2XSwxOTpbMiwxNl0sMjk6WzIsMTZdLDM0OlsyLDE2XSw0NDpbMiwxNl0sNDc6WzIsMTZdLDQ4OlsyLDE2XSw1MTpbMiwxNl0sNTU6WzIsMTZdLDYwOlsyLDE2XX0sezMzOlsxLDEzOV19LHszMzpbMiw3NV19LHszMzpbMiwzMl19LHs3MjpbMiwxMDFdLDc3OlsyLDEwMV19LHsxNDpbMiwxN10sMTU6WzIsMTddLDE5OlsyLDE3XSwyOTpbMiwxN10sMzQ6WzIsMTddLDM5OlsyLDE3XSw0NDpbMiwxN10sNDc6WzIsMTddLDQ4OlsyLDE3XSw1MTpbMiwxN10sNTU6WzIsMTddLDYwOlsyLDE3XX1dLFxuZGVmYXVsdEFjdGlvbnM6IHs0OlsyLDFdLDU1OlsyLDU1XSw1NzpbMiwyMF0sNjE6WzIsNTddLDc0OlsyLDgxXSw4MzpbMiw4NV0sODc6WzIsMThdLDkxOlsyLDg5XSwxMDI6WzIsNTNdLDEwNTpbMiw5M10sMTExOlsyLDE5XSwxMTI6WzIsNzddLDExNzpbMiw5N10sMTIwOlsyLDYzXSwxMjM6WzIsNjldLDEyNDpbMiwxMl0sMTM2OlsyLDc1XSwxMzc6WzIsMzJdfSxcbnBhcnNlRXJyb3I6IGZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG59LFxucGFyc2U6IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzLCBzdGFjayA9IFswXSwgdnN0YWNrID0gW251bGxdLCBsc3RhY2sgPSBbXSwgdGFibGUgPSB0aGlzLnRhYmxlLCB5eXRleHQgPSBcIlwiLCB5eWxpbmVubyA9IDAsIHl5bGVuZyA9IDAsIHJlY292ZXJpbmcgPSAwLCBURVJST1IgPSAyLCBFT0YgPSAxO1xuICAgIHRoaXMubGV4ZXIuc2V0SW5wdXQoaW5wdXQpO1xuICAgIHRoaXMubGV4ZXIueXkgPSB0aGlzLnl5O1xuICAgIHRoaXMueXkubGV4ZXIgPSB0aGlzLmxleGVyO1xuICAgIHRoaXMueXkucGFyc2VyID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRoaXMubGV4ZXIueXlsbG9jID09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIHRoaXMubGV4ZXIueXlsbG9jID0ge307XG4gICAgdmFyIHl5bG9jID0gdGhpcy5sZXhlci55eWxsb2M7XG4gICAgbHN0YWNrLnB1c2goeXlsb2MpO1xuICAgIHZhciByYW5nZXMgPSB0aGlzLmxleGVyLm9wdGlvbnMgJiYgdGhpcy5sZXhlci5vcHRpb25zLnJhbmdlcztcbiAgICBpZiAodHlwZW9mIHRoaXMueXkucGFyc2VFcnJvciA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICB0aGlzLnBhcnNlRXJyb3IgPSB0aGlzLnl5LnBhcnNlRXJyb3I7XG4gICAgZnVuY3Rpb24gcG9wU3RhY2sobikge1xuICAgICAgICBzdGFjay5sZW5ndGggPSBzdGFjay5sZW5ndGggLSAyICogbjtcbiAgICAgICAgdnN0YWNrLmxlbmd0aCA9IHZzdGFjay5sZW5ndGggLSBuO1xuICAgICAgICBsc3RhY2subGVuZ3RoID0gbHN0YWNrLmxlbmd0aCAtIG47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxleCgpIHtcbiAgICAgICAgdmFyIHRva2VuO1xuICAgICAgICB0b2tlbiA9IHNlbGYubGV4ZXIubGV4KCkgfHwgMTtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgdG9rZW4gPSBzZWxmLnN5bWJvbHNfW3Rva2VuXSB8fCB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgfVxuICAgIHZhciBzeW1ib2wsIHByZUVycm9yU3ltYm9sLCBzdGF0ZSwgYWN0aW9uLCBhLCByLCB5eXZhbCA9IHt9LCBwLCBsZW4sIG5ld1N0YXRlLCBleHBlY3RlZDtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBzdGF0ZSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV0pIHtcbiAgICAgICAgICAgIGFjdGlvbiA9IHRoaXMuZGVmYXVsdEFjdGlvbnNbc3RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHN5bWJvbCA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ltYm9sID09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICBzeW1ib2wgPSBsZXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFjdGlvbiA9IHRhYmxlW3N0YXRlXSAmJiB0YWJsZVtzdGF0ZV1bc3ltYm9sXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbiA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhYWN0aW9uLmxlbmd0aCB8fCAhYWN0aW9uWzBdKSB7XG4gICAgICAgICAgICB2YXIgZXJyU3RyID0gXCJcIjtcbiAgICAgICAgICAgIGlmICghcmVjb3ZlcmluZykge1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChwIGluIHRhYmxlW3N0YXRlXSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYWxzX1twXSAmJiBwID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucHVzaChcIidcIiArIHRoaXMudGVybWluYWxzX1twXSArIFwiJ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxleGVyLnNob3dQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBlcnJTdHIgPSBcIlBhcnNlIGVycm9yIG9uIGxpbmUgXCIgKyAoeXlsaW5lbm8gKyAxKSArIFwiOlxcblwiICsgdGhpcy5sZXhlci5zaG93UG9zaXRpb24oKSArIFwiXFxuRXhwZWN0aW5nIFwiICsgZXhwZWN0ZWQuam9pbihcIiwgXCIpICsgXCIsIGdvdCAnXCIgKyAodGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sKSArIFwiJ1wiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6IFVuZXhwZWN0ZWQgXCIgKyAoc3ltYm9sID09IDE/XCJlbmQgb2YgaW5wdXRcIjpcIidcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnBhcnNlRXJyb3IoZXJyU3RyLCB7dGV4dDogdGhpcy5sZXhlci5tYXRjaCwgdG9rZW46IHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCwgbGluZTogdGhpcy5sZXhlci55eWxpbmVubywgbG9jOiB5eWxvYywgZXhwZWN0ZWQ6IGV4cGVjdGVkfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvblswXSBpbnN0YW5jZW9mIEFycmF5ICYmIGFjdGlvbi5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXJzZSBFcnJvcjogbXVsdGlwbGUgYWN0aW9ucyBwb3NzaWJsZSBhdCBzdGF0ZTogXCIgKyBzdGF0ZSArIFwiLCB0b2tlbjogXCIgKyBzeW1ib2wpO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uWzBdKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHN0YWNrLnB1c2goc3ltYm9sKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHRoaXMubGV4ZXIueXl0ZXh0KTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHRoaXMubGV4ZXIueXlsbG9jKTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0aW9uWzFdKTtcbiAgICAgICAgICAgIHN5bWJvbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXByZUVycm9yU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgeXlsZW5nID0gdGhpcy5sZXhlci55eWxlbmc7XG4gICAgICAgICAgICAgICAgeXl0ZXh0ID0gdGhpcy5sZXhlci55eXRleHQ7XG4gICAgICAgICAgICAgICAgeXlsaW5lbm8gPSB0aGlzLmxleGVyLnl5bGluZW5vO1xuICAgICAgICAgICAgICAgIHl5bG9jID0gdGhpcy5sZXhlci55eWxsb2M7XG4gICAgICAgICAgICAgICAgaWYgKHJlY292ZXJpbmcgPiAwKVxuICAgICAgICAgICAgICAgICAgICByZWNvdmVyaW5nLS07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IHByZUVycm9yU3ltYm9sO1xuICAgICAgICAgICAgICAgIHByZUVycm9yU3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBsZW4gPSB0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzFdO1xuICAgICAgICAgICAgeXl2YWwuJCA9IHZzdGFja1t2c3RhY2subGVuZ3RoIC0gbGVuXTtcbiAgICAgICAgICAgIHl5dmFsLl8kID0ge2ZpcnN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfbGluZSwgbGFzdF9saW5lOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIDFdLmxhc3RfbGluZSwgZmlyc3RfY29sdW1uOiBsc3RhY2tbbHN0YWNrLmxlbmd0aCAtIChsZW4gfHwgMSldLmZpcnN0X2NvbHVtbiwgbGFzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9jb2x1bW59O1xuICAgICAgICAgICAgaWYgKHJhbmdlcykge1xuICAgICAgICAgICAgICAgIHl5dmFsLl8kLnJhbmdlID0gW2xzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0ucmFuZ2VbMF0sIGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ucmFuZ2VbMV1dO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMucGVyZm9ybUFjdGlvbi5jYWxsKHl5dmFsLCB5eXRleHQsIHl5bGVuZywgeXlsaW5lbm8sIHRoaXMueXksIGFjdGlvblsxXSwgdnN0YWNrLCBsc3RhY2spO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGVuKSB7XG4gICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay5zbGljZSgwLCAtMSAqIGxlbiAqIDIpO1xuICAgICAgICAgICAgICAgIHZzdGFjayA9IHZzdGFjay5zbGljZSgwLCAtMSAqIGxlbik7XG4gICAgICAgICAgICAgICAgbHN0YWNrID0gbHN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YWNrLnB1c2godGhpcy5wcm9kdWN0aW9uc19bYWN0aW9uWzFdXVswXSk7XG4gICAgICAgICAgICB2c3RhY2sucHVzaCh5eXZhbC4kKTtcbiAgICAgICAgICAgIGxzdGFjay5wdXNoKHl5dmFsLl8kKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0gdGFibGVbc3RhY2tbc3RhY2subGVuZ3RoIC0gMl1dW3N0YWNrW3N0YWNrLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgIHN0YWNrLnB1c2gobmV3U3RhdGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxufTtcbi8qIEppc29uIGdlbmVyYXRlZCBsZXhlciAqL1xudmFyIGxleGVyID0gKGZ1bmN0aW9uKCl7XG52YXIgbGV4ZXIgPSAoe0VPRjoxLFxucGFyc2VFcnJvcjpmdW5jdGlvbiBwYXJzZUVycm9yKHN0ciwgaGFzaCkge1xuICAgICAgICBpZiAodGhpcy55eS5wYXJzZXIpIHtcbiAgICAgICAgICAgIHRoaXMueXkucGFyc2VyLnBhcnNlRXJyb3Ioc3RyLCBoYXNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihzdHIpO1xuICAgICAgICB9XG4gICAgfSxcbnNldElucHV0OmZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLl9tb3JlID0gdGhpcy5fbGVzcyA9IHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnl5bGluZW5vID0gdGhpcy55eWxlbmcgPSAwO1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMubWF0Y2hlZCA9IHRoaXMubWF0Y2ggPSAnJztcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjayA9IFsnSU5JVElBTCddO1xuICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOjEsZmlyc3RfY29sdW1uOjAsbGFzdF9saW5lOjEsbGFzdF9jb2x1bW46MH07XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5bGxvYy5yYW5nZSA9IFswLDBdO1xuICAgICAgICB0aGlzLm9mZnNldCA9IDA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5pbnB1dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjaCA9IHRoaXMuX2lucHV0WzBdO1xuICAgICAgICB0aGlzLnl5dGV4dCArPSBjaDtcbiAgICAgICAgdGhpcy55eWxlbmcrKztcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5tYXRjaCArPSBjaDtcbiAgICAgICAgdGhpcy5tYXRjaGVkICs9IGNoO1xuICAgICAgICB2YXIgbGluZXMgPSBjaC5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgIGlmIChsaW5lcykge1xuICAgICAgICAgICAgdGhpcy55eWxpbmVubysrO1xuICAgICAgICAgICAgdGhpcy55eWxsb2MubGFzdF9saW5lKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbisrO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB0aGlzLnl5bGxvYy5yYW5nZVsxXSsrO1xuXG4gICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9LFxudW5wdXQ6ZnVuY3Rpb24gKGNoKSB7XG4gICAgICAgIHZhciBsZW4gPSBjaC5sZW5ndGg7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSBjaCArIHRoaXMuX2lucHV0O1xuICAgICAgICB0aGlzLnl5dGV4dCA9IHRoaXMueXl0ZXh0LnN1YnN0cigwLCB0aGlzLnl5dGV4dC5sZW5ndGgtbGVuLTEpO1xuICAgICAgICAvL3RoaXMueXlsZW5nIC09IGxlbjtcbiAgICAgICAgdGhpcy5vZmZzZXQgLT0gbGVuO1xuICAgICAgICB2YXIgb2xkTGluZXMgPSB0aGlzLm1hdGNoLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvZyk7XG4gICAgICAgIHRoaXMubWF0Y2ggPSB0aGlzLm1hdGNoLnN1YnN0cigwLCB0aGlzLm1hdGNoLmxlbmd0aC0xKTtcbiAgICAgICAgdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaGVkLnN1YnN0cigwLCB0aGlzLm1hdGNoZWQubGVuZ3RoLTEpO1xuXG4gICAgICAgIGlmIChsaW5lcy5sZW5ndGgtMSkgdGhpcy55eWxpbmVubyAtPSBsaW5lcy5sZW5ndGgtMTtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnl5bGxvYy5yYW5nZTtcblxuICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5maXJzdF9saW5lLFxuICAgICAgICAgIGxhc3RfbGluZTogdGhpcy55eWxpbmVubysxLFxuICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uLFxuICAgICAgICAgIGxhc3RfY29sdW1uOiBsaW5lcyA/XG4gICAgICAgICAgICAgIChsaW5lcy5sZW5ndGggPT09IG9sZExpbmVzLmxlbmd0aCA/IHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiA6IDApICsgb2xkTGluZXNbb2xkTGluZXMubGVuZ3RoIC0gbGluZXMubGVuZ3RoXS5sZW5ndGggLSBsaW5lc1swXS5sZW5ndGg6XG4gICAgICAgICAgICAgIHRoaXMueXlsbG9jLmZpcnN0X2NvbHVtbiAtIGxlblxuICAgICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLnJhbmdlID0gW3JbMF0sIHJbMF0gKyB0aGlzLnl5bGVuZyAtIGxlbl07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbm1vcmU6ZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLl9tb3JlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbmxlc3M6ZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgdGhpcy51bnB1dCh0aGlzLm1hdGNoLnNsaWNlKG4pKTtcbiAgICB9LFxucGFzdElucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhc3QgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGggLSB0aGlzLm1hdGNoLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiAocGFzdC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSArIHBhc3Quc3Vic3RyKC0yMCkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIH0sXG51cGNvbWluZ0lucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG5leHQgPSB0aGlzLm1hdGNoO1xuICAgICAgICBpZiAobmV4dC5sZW5ndGggPCAyMCkge1xuICAgICAgICAgICAgbmV4dCArPSB0aGlzLl9pbnB1dC5zdWJzdHIoMCwgMjAtbmV4dC5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobmV4dC5zdWJzdHIoMCwyMCkrKG5leHQubGVuZ3RoID4gMjAgPyAnLi4uJzonJykpLnJlcGxhY2UoL1xcbi9nLCBcIlwiKTtcbiAgICB9LFxuc2hvd1Bvc2l0aW9uOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByZSA9IHRoaXMucGFzdElucHV0KCk7XG4gICAgICAgIHZhciBjID0gbmV3IEFycmF5KHByZS5sZW5ndGggKyAxKS5qb2luKFwiLVwiKTtcbiAgICAgICAgcmV0dXJuIHByZSArIHRoaXMudXBjb21pbmdJbnB1dCgpICsgXCJcXG5cIiArIGMrXCJeXCI7XG4gICAgfSxcbm5leHQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pbnB1dCkgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgICB2YXIgdG9rZW4sXG4gICAgICAgICAgICBtYXRjaCxcbiAgICAgICAgICAgIHRlbXBNYXRjaCxcbiAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgbGluZXM7XG4gICAgICAgIGlmICghdGhpcy5fbW9yZSkge1xuICAgICAgICAgICAgdGhpcy55eXRleHQgPSAnJztcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggPSAnJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgcnVsZXMgPSB0aGlzLl9jdXJyZW50UnVsZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaT0wO2kgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGVtcE1hdGNoID0gdGhpcy5faW5wdXQubWF0Y2godGhpcy5ydWxlc1tydWxlc1tpXV0pO1xuICAgICAgICAgICAgaWYgKHRlbXBNYXRjaCAmJiAoIW1hdGNoIHx8IHRlbXBNYXRjaFswXS5sZW5ndGggPiBtYXRjaFswXS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSB0ZW1wTWF0Y2g7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLmZsZXgpIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgbGluZXMgPSBtYXRjaFswXS5tYXRjaCgvKD86XFxyXFxuP3xcXG4pLiovZyk7XG4gICAgICAgICAgICBpZiAobGluZXMpIHRoaXMueXlsaW5lbm8gKz0gbGluZXMubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy55eWxsb2MgPSB7Zmlyc3RfbGluZTogdGhpcy55eWxsb2MubGFzdF9saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9jb2x1bW46IHRoaXMueXlsbG9jLmxhc3RfY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID8gbGluZXNbbGluZXMubGVuZ3RoLTFdLmxlbmd0aC1saW5lc1tsaW5lcy5sZW5ndGgtMV0ubWF0Y2goL1xccj9cXG4/LylbMF0ubGVuZ3RoIDogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4gKyBtYXRjaFswXS5sZW5ndGh9O1xuICAgICAgICAgICAgdGhpcy55eXRleHQgKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICB0aGlzLm1hdGNoICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVzID0gbWF0Y2g7XG4gICAgICAgICAgICB0aGlzLnl5bGVuZyA9IHRoaXMueXl0ZXh0Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMucmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbdGhpcy5vZmZzZXQsIHRoaXMub2Zmc2V0ICs9IHRoaXMueXlsZW5nXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX21vcmUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0ID0gdGhpcy5faW5wdXQuc2xpY2UobWF0Y2hbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2hlZCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIHRva2VuID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwodGhpcywgdGhpcy55eSwgdGhpcywgcnVsZXNbaW5kZXhdLHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuZG9uZSAmJiB0aGlzLl9pbnB1dCkgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodG9rZW4pIHJldHVybiB0b2tlbjtcbiAgICAgICAgICAgIGVsc2UgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9pbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuRU9GO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VFcnJvcignTGV4aWNhbCBlcnJvciBvbiBsaW5lICcrKHRoaXMueXlsaW5lbm8rMSkrJy4gVW5yZWNvZ25pemVkIHRleHQuXFxuJyt0aGlzLnNob3dQb3NpdGlvbigpLFxuICAgICAgICAgICAgICAgICAgICB7dGV4dDogXCJcIiwgdG9rZW46IG51bGwsIGxpbmU6IHRoaXMueXlsaW5lbm99KTtcbiAgICAgICAgfVxuICAgIH0sXG5sZXg6ZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luKGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrLnB1c2goY29uZGl0aW9uKTtcbiAgICB9LFxucG9wU3RhdGU6ZnVuY3Rpb24gcG9wU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvblN0YWNrLnBvcCgpO1xuICAgIH0sXG5fY3VycmVudFJ1bGVzOmZ1bmN0aW9uIF9jdXJyZW50UnVsZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM7XG4gICAgfSxcbnRvcFN0YXRlOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl07XG4gICAgfSxcbnB1c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbihjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5iZWdpbihjb25kaXRpb24pO1xuICAgIH19KTtcbmxleGVyLm9wdGlvbnMgPSB7fTtcbmxleGVyLnBlcmZvcm1BY3Rpb24gPSBmdW5jdGlvbiBhbm9ueW1vdXMoeXkseXlfLCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsWVlfU1RBUlRcbi8qKi8pIHtcblxuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHIoc3RhcnQsIHl5Xy55eWxlbmctZW5kKTtcbn1cblxuXG52YXIgWVlTVEFURT1ZWV9TVEFSVFxuc3dpdGNoKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMpIHtcbmNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dC5zbGljZSgtMikgPT09IFwiXFxcXFxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcIm11XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYoeXlfLnl5dGV4dC5zbGljZSgtMSkgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXAoMCwxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwiZW11XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih5eV8ueXl0ZXh0KSByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAxOnJldHVybiAxNTtcbmJyZWFrO1xuY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYnJlYWs7XG5jYXNlIDM6dGhpcy5iZWdpbigncmF3Jyk7IHJldHVybiAxNTtcbmJyZWFrO1xuY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG91bGQgYmUgdXNpbmcgYHRoaXMudG9wU3RhdGUoKWAgYmVsb3csIGJ1dCBpdCBjdXJyZW50bHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRoZSBzZWNvbmQgdG9wIGluc3RlYWQgb2YgdGhlIGZpcnN0IHRvcC4gT3BlbmVkIGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXNzdWUgYWJvdXQgaXQgYXQgaHR0cHM6Ly9naXRodWIuY29tL3phYWNoL2ppc29uL2lzc3Vlcy8yOTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSA9PT0gJ3JhdycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlfLnl5dGV4dCA9IHl5Xy55eXRleHQuc3Vic3RyKDUsIHl5Xy55eWxlbmctOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0VORF9SQVdfQkxPQ0snO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYnJlYWs7XG5jYXNlIDU6IHJldHVybiAxNTsgXG5icmVhaztcbmNhc2UgNjpcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICByZXR1cm4gMTQ7XG5cbmJyZWFrO1xuY2FzZSA3OnJldHVybiA2NTtcbmJyZWFrO1xuY2FzZSA4OnJldHVybiA2ODtcbmJyZWFrO1xuY2FzZSA5OiByZXR1cm4gMTk7IFxuYnJlYWs7XG5jYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKCdyYXcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAxMTpyZXR1cm4gNTU7XG5icmVhaztcbmNhc2UgMTI6cmV0dXJuIDYwO1xuYnJlYWs7XG5jYXNlIDEzOnJldHVybiAyOTtcbmJyZWFrO1xuY2FzZSAxNDpyZXR1cm4gNDc7XG5icmVhaztcbmNhc2UgMTU6dGhpcy5wb3BTdGF0ZSgpOyByZXR1cm4gNDQ7XG5icmVhaztcbmNhc2UgMTY6dGhpcy5wb3BTdGF0ZSgpOyByZXR1cm4gNDQ7XG5icmVhaztcbmNhc2UgMTc6cmV0dXJuIDM0O1xuYnJlYWs7XG5jYXNlIDE4OnJldHVybiAzOTtcbmJyZWFrO1xuY2FzZSAxOTpyZXR1cm4gNTE7XG5icmVhaztcbmNhc2UgMjA6cmV0dXJuIDQ4O1xuYnJlYWs7XG5jYXNlIDIxOlxuICB0aGlzLnVucHV0KHl5Xy55eXRleHQpO1xuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHRoaXMuYmVnaW4oJ2NvbScpO1xuXG5icmVhaztcbmNhc2UgMjI6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgMjM6cmV0dXJuIDQ4O1xuYnJlYWs7XG5jYXNlIDI0OnJldHVybiA3MztcbmJyZWFrO1xuY2FzZSAyNTpyZXR1cm4gNzI7XG5icmVhaztcbmNhc2UgMjY6cmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDI3OnJldHVybiA4NztcbmJyZWFrO1xuY2FzZSAyODovLyBpZ25vcmUgd2hpdGVzcGFjZVxuYnJlYWs7XG5jYXNlIDI5OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDU0O1xuYnJlYWs7XG5jYXNlIDMwOnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDMzO1xuYnJlYWs7XG5jYXNlIDMxOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpOyByZXR1cm4gODA7XG5icmVhaztcbmNhc2UgMzI6eXlfLnl5dGV4dCA9IHN0cmlwKDEsMikucmVwbGFjZSgvXFxcXCcvZyxcIidcIik7IHJldHVybiA4MDtcbmJyZWFrO1xuY2FzZSAzMzpyZXR1cm4gODU7XG5icmVhaztcbmNhc2UgMzQ6cmV0dXJuIDgyO1xuYnJlYWs7XG5jYXNlIDM1OnJldHVybiA4MjtcbmJyZWFrO1xuY2FzZSAzNjpyZXR1cm4gODM7XG5icmVhaztcbmNhc2UgMzc6cmV0dXJuIDg0O1xuYnJlYWs7XG5jYXNlIDM4OnJldHVybiA4MTtcbmJyZWFrO1xuY2FzZSAzOTpyZXR1cm4gNzU7XG5icmVhaztcbmNhc2UgNDA6cmV0dXJuIDc3O1xuYnJlYWs7XG5jYXNlIDQxOnJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSA0Mjp5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5yZXBsYWNlKC9cXFxcKFtcXFxcXFxdXSkvZywnJDEnKTsgcmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDQzOnJldHVybiAnSU5WQUxJRCc7XG5icmVhaztcbmNhc2UgNDQ6cmV0dXJuIDU7XG5icmVhaztcbn1cbn07XG5sZXhlci5ydWxlcyA9IFsvXig/OlteXFx4MDBdKj8oPz0oXFx7XFx7KSkpLywvXig/OlteXFx4MDBdKykvLC9eKD86W15cXHgwMF17Mix9Pyg/PShcXHtcXHt8XFxcXFxce1xce3xcXFxcXFxcXFxce1xce3wkKSkpLywvXig/Olxce1xce1xce1xceyg/PVteXFwvXSkpLywvXig/Olxce1xce1xce1xce1xcL1teXFxzIVwiIyUtLFxcLlxcLzstPkBcXFstXFxeYFxcey1+XSsoPz1bPX1cXHNcXC8uXSlcXH1cXH1cXH1cXH0pLywvXig/OlteXFx4MDBdKj8oPz0oXFx7XFx7XFx7XFx7KSkpLywvXig/OltcXHNcXFNdKj8tLSh+KT9cXH1cXH0pLywvXig/OlxcKCkvLC9eKD86XFwpKS8sL14oPzpcXHtcXHtcXHtcXHspLywvXig/OlxcfVxcfVxcfVxcfSkvLC9eKD86XFx7XFx7KH4pPz4pLywvXig/Olxce1xceyh+KT8jPikvLC9eKD86XFx7XFx7KH4pPyNcXCo/KS8sL14oPzpcXHtcXHsofik/XFwvKS8sL14oPzpcXHtcXHsofik/XFxeXFxzKih+KT9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXHMqZWxzZVxccyoofik/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFxeKS8sL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXGIpLywvXig/Olxce1xceyh+KT9cXHspLywvXig/Olxce1xceyh+KT8mKS8sL14oPzpcXHtcXHsofik/IS0tKS8sL14oPzpcXHtcXHsofik/IVtcXHNcXFNdKj9cXH1cXH0pLywvXig/Olxce1xceyh+KT9cXCo/KS8sL14oPzo9KS8sL14oPzpcXC5cXC4pLywvXig/OlxcLig/PShbPX59XFxzXFwvLil8XSkpKS8sL14oPzpbXFwvLl0pLywvXig/OlxccyspLywvXig/OlxcfSh+KT9cXH1cXH0pLywvXig/Oih+KT9cXH1cXH0pLywvXig/OlwiKFxcXFxbXCJdfFteXCJdKSpcIikvLC9eKD86JyhcXFxcWyddfFteJ10pKicpLywvXig/OkApLywvXig/OnRydWUoPz0oW359XFxzKV0pKSkvLC9eKD86ZmFsc2UoPz0oW359XFxzKV0pKSkvLC9eKD86dW5kZWZpbmVkKD89KFt+fVxccyldKSkpLywvXig/Om51bGwoPz0oW359XFxzKV0pKSkvLC9eKD86LT9bMC05XSsoPzpcXC5bMC05XSspPyg/PShbfn1cXHMpXSkpKS8sL14oPzphc1xccytcXHwpLywvXig/OlxcfCkvLC9eKD86KFteXFxzIVwiIyUtLFxcLlxcLzstPkBcXFstXFxeYFxcey1+XSsoPz0oWz1+fVxcc1xcLy4pfF0pKSkpLywvXig/OlxcWyhcXFxcXFxdfFteXFxdXSkqXFxdKS8sL14oPzouKS8sL14oPzokKS9dO1xubGV4ZXIuY29uZGl0aW9ucyA9IHtcIm11XCI6e1wicnVsZXNcIjpbNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDRdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiZW11XCI6e1wicnVsZXNcIjpbMl0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJjb21cIjp7XCJydWxlc1wiOls2XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcInJhd1wiOntcInJ1bGVzXCI6WzMsNCw1XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcIklOSVRJQUxcIjp7XCJydWxlc1wiOlswLDEsNDRdLFwiaW5jbHVzaXZlXCI6dHJ1ZX19O1xucmV0dXJuIGxleGVyO30pKClcbnBhcnNlci5sZXhlciA9IGxleGVyO1xuZnVuY3Rpb24gUGFyc2VyICgpIHsgdGhpcy55eSA9IHt9OyB9UGFyc2VyLnByb3RvdHlwZSA9IHBhcnNlcjtwYXJzZXIuUGFyc2VyID0gUGFyc2VyO1xucmV0dXJuIG5ldyBQYXJzZXI7XG59KSgpO2V4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzWydkZWZhdWx0J10gPSBoYW5kbGViYXJzO1xuIl19 -; -define('handlebars/compiler/visitor',['exports', 'module', '../exception'], function (exports, module, _exception) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - function Visitor() { - this.parents = []; - } - - Visitor.prototype = { - constructor: Visitor, - mutating: false, - - // Visits a given value. If mutating, will replace the value if necessary. - acceptKey: function acceptKey(node, name) { - var value = this.accept(node[name]); - if (this.mutating) { - // Hacky sanity check: This may have a few false positives for type for the helper - // methods but will generally do the right thing without a lot of overhead. - if (value && !Visitor.prototype[value.type]) { - throw new _Exception['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type); - } - node[name] = value; - } - }, - - // Performs an accept operation with added sanity check to ensure - // required keys are not removed. - acceptRequired: function acceptRequired(node, name) { - this.acceptKey(node, name); - - if (!node[name]) { - throw new _Exception['default'](node.type + ' requires ' + name); - } - }, - - // Traverses a given array. If mutating, empty respnses will be removed - // for child elements. - acceptArray: function acceptArray(array) { - for (var i = 0, l = array.length; i < l; i++) { - this.acceptKey(array, i); - - if (!array[i]) { - array.splice(i, 1); - i--; - l--; - } - } - }, - - accept: function accept(object) { - if (!object) { - return; - } - - /* istanbul ignore next: Sanity code */ - if (!this[object.type]) { - throw new _Exception['default']('Unknown type: ' + object.type, object); - } - - if (this.current) { - this.parents.unshift(this.current); - } - this.current = object; - - var ret = this[object.type](object); - - this.current = this.parents.shift(); - - if (!this.mutating || ret) { - return ret; - } else if (ret !== false) { - return object; - } - }, - - Program: function Program(program) { - this.acceptArray(program.body); - }, - - MustacheStatement: visitSubExpression, - Decorator: visitSubExpression, - - BlockStatement: visitBlock, - DecoratorBlock: visitBlock, - - PartialStatement: visitPartial, - PartialBlockStatement: function PartialBlockStatement(partial) { - visitPartial.call(this, partial); - - this.acceptKey(partial, 'program'); - }, - - ContentStatement: function ContentStatement() /* content */{}, - CommentStatement: function CommentStatement() /* comment */{}, - - SubExpression: visitSubExpression, - - PathExpression: function PathExpression() /* path */{}, - - StringLiteral: function StringLiteral() /* string */{}, - NumberLiteral: function NumberLiteral() /* number */{}, - BooleanLiteral: function BooleanLiteral() /* bool */{}, - UndefinedLiteral: function UndefinedLiteral() /* literal */{}, - NullLiteral: function NullLiteral() /* literal */{}, - - Hash: function Hash(hash) { - this.acceptArray(hash.pairs); - }, - HashPair: function HashPair(pair) { - this.acceptRequired(pair, 'value'); - } - }; - - function visitSubExpression(mustache) { - this.acceptRequired(mustache, 'path'); - this.acceptArray(mustache.params); - this.acceptKey(mustache, 'hash'); - } - function visitBlock(block) { - visitSubExpression.call(this, block); - - this.acceptKey(block, 'program'); - this.acceptKey(block, 'inverse'); - } - function visitPartial(partial) { - this.acceptRequired(partial, 'name'); - this.acceptArray(partial.params); - this.acceptKey(partial, 'hash'); - } - - module.exports = Visitor; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRUEsV0FBUyxPQUFPLEdBQUc7QUFDakIsUUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7R0FDbkI7O0FBRUQsU0FBTyxDQUFDLFNBQVMsR0FBRztBQUNsQixlQUFXLEVBQUUsT0FBTztBQUNwQixZQUFRLEVBQUUsS0FBSzs7O0FBR2YsYUFBUyxFQUFFLG1CQUFTLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDOUIsVUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwQyxVQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7OztBQUdqQixZQUFJLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzNDLGdCQUFNLDBCQUFjLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcseUJBQXlCLEdBQUcsSUFBSSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEg7QUFDRCxZQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO09BQ3BCO0tBQ0Y7Ozs7QUFJRCxrQkFBYyxFQUFFLHdCQUFTLElBQUksRUFBRSxJQUFJLEVBQUU7QUFDbkMsVUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRTNCLFVBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDZixjQUFNLDBCQUFjLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDO09BQ3REO0tBQ0Y7Ozs7QUFJRCxlQUFXLEVBQUUscUJBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENB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SSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDbEM7QUFDRCxXQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUU7QUFDekIsc0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQzs7QUFFckMsUUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDakMsUUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7R0FDbEM7QUFDRCxXQUFTLFlBQVksQ0FBQyxPQUFPLEVBQUU7QUFDN0IsUUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckMsUUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakMsUUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7R0FDakM7O21CQUVjLE9BQU8iLCJmaWxlIjoidmlzaXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZnVuY3Rpb24gVmlzaXRvcigpIHtcbiAgdGhpcy5wYXJlbnRzID0gW107XG59XG5cblZpc2l0b3IucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVmlzaXRvcixcbiAgbXV0YXRpbmc6IGZhbHNlLFxuXG4gIC8vIFZpc2l0cyBhIGdpdmVuIHZhbHVlLiBJZiBtdXRhdGluZywgd2lsbCByZXBsYWNlIHRoZSB2YWx1ZSBpZiBuZWNlc3NhcnkuXG4gIGFjY2VwdEtleTogZnVuY3Rpb24obm9kZSwgbmFtZSkge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuYWNjZXB0KG5vZGVbbmFtZV0pO1xuICAgIGlmICh0aGlzLm11dGF0aW5nKSB7XG4gICAgICAvLyBIYWNreSBzYW5pdHkgY2hlY2s6IFRoaXMgbWF5IGhhdmUgYSBmZXcgZmFsc2UgcG9zaXRpdmVzIGZvciB0eXBlIGZvciB0aGUgaGVscGVyXG4gICAgICAvLyBtZXRob2RzIGJ1dCB3aWxsIGdlbmVyYWxseSBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aG91dCBhIGxvdCBvZiBvdmVyaGVhZC5cbiAgICAgIGlmICh2YWx1ZSAmJiAhVmlzaXRvci5wcm90b3R5cGVbdmFsdWUudHlwZV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5leHBlY3RlZCBub2RlIHR5cGUgXCInICsgdmFsdWUudHlwZSArICdcIiBmb3VuZCB3aGVuIGFjY2VwdGluZyAnICsgbmFtZSArICcgb24gJyArIG5vZGUudHlwZSk7XG4gICAgICB9XG4gICAgICBub2RlW25hbWVdID0gdmFsdWU7XG4gICAgfVxuICB9LFxuXG4gIC8vIFBlcmZvcm1zIGFuIGFjY2VwdCBvcGVyYXRpb24gd2l0aCBhZGRlZCBzYW5pdHkgY2hlY2sgdG8gZW5zdXJlXG4gIC8vIHJlcXVpcmVkIGtleXMgYXJlIG5vdCByZW1vdmVkLlxuICBhY2NlcHRSZXF1aXJlZDogZnVuY3Rpb24obm9kZSwgbmFtZSkge1xuICAgIHRoaXMuYWNjZXB0S2V5KG5vZGUsIG5hbWUpO1xuXG4gICAgaWYgKCFub2RlW25hbWVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKG5vZGUudHlwZSArICcgcmVxdWlyZXMgJyArIG5hbWUpO1xuICAgIH1cbiAgfSxcblxuICAvLyBUcmF2ZXJzZXMgYSBnaXZlbiBhcnJheS4gSWYgbXV0YXRpbmcsIGVtcHR5IHJlc3Buc2VzIHdpbGwgYmUgcmVtb3ZlZFxuICAvLyBmb3IgY2hpbGQgZWxlbWVudHMuXG4gIGFjY2VwdEFycmF5OiBmdW5jdGlvbihhcnJheSkge1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gYXJyYXkubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLmFjY2VwdEtleShhcnJheSwgaSk7XG5cbiAgICAgIGlmICghYXJyYXlbaV0pIHtcbiAgICAgICAgYXJyYXkuc3BsaWNlKGksIDEpO1xuICAgICAgICBpLS07XG4gICAgICAgIGwtLTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgYWNjZXB0OiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBpZiAoIW9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqL1xuICAgIGlmICghdGhpc1tvYmplY3QudHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdHlwZTogJyArIG9iamVjdC50eXBlLCBvYmplY3QpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmN1cnJlbnQpIHtcbiAgICAgIHRoaXMucGFyZW50cy51bnNoaWZ0KHRoaXMuY3VycmVudCk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudCA9IG9iamVjdDtcblxuICAgIGxldCByZXQgPSB0aGlzW29iamVjdC50eXBlXShvYmplY3QpO1xuXG4gICAgdGhpcy5jdXJyZW50ID0gdGhpcy5wYXJlbnRzLnNoaWZ0KCk7XG5cbiAgICBpZiAoIXRoaXMubXV0YXRpbmcgfHwgcmV0KSB7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gZWxzZSBpZiAocmV0ICE9PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG4gIH0sXG5cbiAgUHJvZ3JhbTogZnVuY3Rpb24ocHJvZ3JhbSkge1xuICAgIHRoaXMuYWNjZXB0QXJyYXkocHJvZ3JhbS5ib2R5KTtcbiAgfSxcblxuICBNdXN0YWNoZVN0YXRlbWVudDogdmlzaXRTdWJFeHByZXNzaW9uLFxuICBEZWNvcmF0b3I6IHZpc2l0U3ViRXhwcmVzc2lvbixcblxuICBCbG9ja1N0YXRlbWVudDogdmlzaXRCbG9jayxcbiAgRGVjb3JhdG9yQmxvY2s6IHZpc2l0QmxvY2ssXG5cbiAgUGFydGlhbFN0YXRlbWVudDogdmlzaXRQYXJ0aWFsLFxuICBQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgICB2aXNpdFBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsKTtcblxuICAgIHRoaXMuYWNjZXB0S2V5KHBhcnRpYWwsICdwcm9ncmFtJyk7XG4gIH0sXG5cbiAgQ29udGVudFN0YXRlbWVudDogZnVuY3Rpb24oLyogY29udGVudCAqLykge30sXG4gIENvbW1lbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKC8qIGNvbW1lbnQgKi8pIHt9LFxuXG4gIFN1YkV4cHJlc3Npb246IHZpc2l0U3ViRXhwcmVzc2lvbixcblxuICBQYXRoRXhwcmVzc2lvbjogZnVuY3Rpb24oLyogcGF0aCAqLykge30sXG5cbiAgU3RyaW5nTGl0ZXJhbDogZnVuY3Rpb24oLyogc3RyaW5nICovKSB7fSxcbiAgTnVtYmVyTGl0ZXJhbDogZnVuY3Rpb24oLyogbnVtYmVyICovKSB7fSxcbiAgQm9vbGVhbkxpdGVyYWw6IGZ1bmN0aW9uKC8qIGJvb2wgKi8pIHt9LFxuICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbigvKiBsaXRlcmFsICovKSB7fSxcbiAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uKC8qIGxpdGVyYWwgKi8pIHt9LFxuXG4gIEhhc2g6IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICB0aGlzLmFjY2VwdEFycmF5KGhhc2gucGFpcnMpO1xuICB9LFxuICBIYXNoUGFpcjogZnVuY3Rpb24ocGFpcikge1xuICAgIHRoaXMuYWNjZXB0UmVxdWlyZWQocGFpciwgJ3ZhbHVlJyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHZpc2l0U3ViRXhwcmVzc2lvbihtdXN0YWNoZSkge1xuICB0aGlzLmFjY2VwdFJlcXVpcmVkKG11c3RhY2hlLCAncGF0aCcpO1xuICB0aGlzLmFjY2VwdEFycmF5KG11c3RhY2hlLnBhcmFtcyk7XG4gIHRoaXMuYWNjZXB0S2V5KG11c3RhY2hlLCAnaGFzaCcpO1xufVxuZnVuY3Rpb24gdmlzaXRCbG9jayhibG9jaykge1xuICB2aXNpdFN1YkV4cHJlc3Npb24uY2FsbCh0aGlzLCBibG9jayk7XG5cbiAgdGhpcy5hY2NlcHRLZXkoYmxvY2ssICdwcm9ncmFtJyk7XG4gIHRoaXMuYWNjZXB0S2V5KGJsb2NrLCAnaW52ZXJzZScpO1xufVxuZnVuY3Rpb24gdmlzaXRQYXJ0aWFsKHBhcnRpYWwpIHtcbiAgdGhpcy5hY2NlcHRSZXF1aXJlZChwYXJ0aWFsLCAnbmFtZScpO1xuICB0aGlzLmFjY2VwdEFycmF5KHBhcnRpYWwucGFyYW1zKTtcbiAgdGhpcy5hY2NlcHRLZXkocGFydGlhbCwgJ2hhc2gnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlzaXRvcjtcbiJdfQ== -; -define('handlebars/compiler/whitespace-control',['exports', 'module', './visitor'], function (exports, module, _visitor) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Visitor = _interopRequireDefault(_visitor); - - function WhitespaceControl() { - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - this.options = options; - } - WhitespaceControl.prototype = new _Visitor['default'](); - - WhitespaceControl.prototype.Program = function (program) { - var doStandalone = !this.options.ignoreStandalone; - - var isRoot = !this.isRootSeen; - this.isRootSeen = true; - - var body = program.body; - for (var i = 0, l = body.length; i < l; i++) { - var current = body[i], - strip = this.accept(current); - - if (!strip) { - continue; - } - - var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot), - _isNextWhitespace = isNextWhitespace(body, i, isRoot), - openStandalone = strip.openStandalone && _isPrevWhitespace, - closeStandalone = strip.closeStandalone && _isNextWhitespace, - inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace; - - if (strip.close) { - omitRight(body, i, true); - } - if (strip.open) { - omitLeft(body, i, true); - } - - if (doStandalone && inlineStandalone) { - omitRight(body, i); - - if (omitLeft(body, i)) { - // If we are on a standalone node, save the indent info for partials - if (current.type === 'PartialStatement') { - // Pull out the whitespace from the final line - current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1]; - } - } - } - if (doStandalone && openStandalone) { - omitRight((current.program || current.inverse).body); - - // Strip out the previous content node if it's whitespace only - omitLeft(body, i); - } - if (doStandalone && closeStandalone) { - // Always strip the next node - omitRight(body, i); - - omitLeft((current.inverse || current.program).body); - } - } - - return program; - }; - - WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) { - this.accept(block.program); - this.accept(block.inverse); - - // Find the inverse program that is involed with whitespace stripping. - var program = block.program || block.inverse, - inverse = block.program && block.inverse, - firstInverse = inverse, - lastInverse = inverse; - - if (inverse && inverse.chained) { - firstInverse = inverse.body[0].program; - - // Walk the inverse chain to find the last inverse that is actually in the chain. - while (lastInverse.chained) { - lastInverse = lastInverse.body[lastInverse.body.length - 1].program; - } - } - - var strip = { - open: block.openStrip.open, - close: block.closeStrip.close, - - // Determine the standalone candiacy. Basically flag our content as being possibly standalone - // so our parent can determine if we actually are standalone - openStandalone: isNextWhitespace(program.body), - closeStandalone: isPrevWhitespace((firstInverse || program).body) - }; - - if (block.openStrip.close) { - omitRight(program.body, null, true); - } - - if (inverse) { - var inverseStrip = block.inverseStrip; - - if (inverseStrip.open) { - omitLeft(program.body, null, true); - } - - if (inverseStrip.close) { - omitRight(firstInverse.body, null, true); - } - if (block.closeStrip.open) { - omitLeft(lastInverse.body, null, true); - } - - // Find standalone else statments - if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) { - omitLeft(program.body); - omitRight(firstInverse.body); - } - } else if (block.closeStrip.open) { - omitLeft(program.body, null, true); - } - - return strip; - }; - - WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) { - return mustache.strip; - }; - - WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) { - /* istanbul ignore next */ - var strip = node.strip || {}; - return { - inlineStandalone: true, - open: strip.open, - close: strip.close - }; - }; - - function isPrevWhitespace(body, i, isRoot) { - if (i === undefined) { - i = body.length; - } - - // Nodes that end with newlines are considered whitespace (but are special - // cased for strip operations) - var prev = body[i - 1], - sibling = body[i - 2]; - if (!prev) { - return isRoot; - } - - if (prev.type === 'ContentStatement') { - return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original); - } - } - function isNextWhitespace(body, i, isRoot) { - if (i === undefined) { - i = -1; - } - - var next = body[i + 1], - sibling = body[i + 2]; - if (!next) { - return isRoot; - } - - if (next.type === 'ContentStatement') { - return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original); - } - } - - // Marks the node to the right of the position as omitted. - // I.e. {{foo}}' ' will mark the ' ' node as omitted. - // - // If i is undefined, then the first child will be marked as such. - // - // If mulitple is truthy then all whitespace will be stripped out until non-whitespace - // content is met. - function omitRight(body, i, multiple) { - var current = body[i == null ? 0 : i + 1]; - if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) { - return; - } - - var original = current.value; - current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, ''); - current.rightStripped = current.value !== original; - } - - // Marks the node to the left of the position as omitted. - // I.e. ' '{{foo}} will mark the ' ' node as omitted. - // - // If i is undefined then the last child will be marked as such. - // - // If mulitple is truthy then all whitespace will be stripped out until non-whitespace - // content is met. - function omitLeft(body, i, multiple) { - var current = body[i == null ? body.length - 1 : i - 1]; - if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) { - return; - } - - // We omit the last node if it's whitespace only and not preceeded by a non-content node. - var original = current.value; - current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, ''); - current.leftStripped = current.value !== original; - return current.leftStripped; - } - - module.exports = WhitespaceControl; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3doaXRlc3BhY2UtY29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQSxXQUFTLGlCQUFpQixHQUFlO1FBQWQsT0FBTyx5REFBRyxFQUFFOztBQUNyQyxRQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztHQUN4QjtBQUNELG1CQUFpQixDQUFDLFNBQVMsR0FBRyx5QkFBYSxDQUFDOztBQUU1QyxtQkFBaUIsQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLFVBQVMsT0FBTyxFQUFFO0FBQ3RELFFBQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzs7QUFFcEQsUUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzlCLFFBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDOztBQUV2QixRQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3hCLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsVUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUNqQixLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFFakMsVUFBSSxDQUFDLEtBQUssRUFBRTtBQUNWLGlCQUFTO09BQ1Y7O0FBRUQsVUFBSSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztVQUNyRCxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztVQUVyRCxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsSUFBSSxpQkFBaUI7VUFDMUQsZUFBZSxHQUFHLEtB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QUN4RCxRQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssa0JBQWtCLElBQUssQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFlBQVksQUFBQyxFQUFFO0FBQzFGLGFBQU87S0FDUjs7O0FBR0QsUUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUM3QixXQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBSSxNQUFNLEdBQUssU0FBUyxBQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0UsV0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNsRCxXQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUM7R0FDN0I7O21CQUVjLGlCQUFpQiIsImZpbGUiOiJ3aGl0ZXNwYWNlLWNvbnRyb2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5mdW5jdGlvbiBXaGl0ZXNwYWNlQ29udHJvbChvcHRpb25zID0ge30pIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbn1cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZSA9IG5ldyBWaXNpdG9yKCk7XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Qcm9ncmFtID0gZnVuY3Rpb24ocHJvZ3JhbSkge1xuICBjb25zdCBkb1N0YW5kYWxvbmUgPSAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmU7XG5cbiAgbGV0IGlzUm9vdCA9ICF0aGlzLmlzUm9vdFNlZW47XG4gIHRoaXMuaXNSb290U2VlbiA9IHRydWU7XG5cbiAgbGV0IGJvZHkgPSBwcm9ncmFtLmJvZHk7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgY3VycmVudCA9IGJvZHlbaV0sXG4gICAgICAgIHN0cmlwID0gdGhpcy5hY2NlcHQoY3VycmVudCk7XG5cbiAgICBpZiAoIXN0cmlwKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBsZXQgX2lzUHJldldoaXRlc3BhY2UgPSBpc1ByZXZXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCksXG4gICAgICAgIF9pc05leHRXaGl0ZXNwYWNlID0gaXNOZXh0V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuXG4gICAgICAgIG9wZW5TdGFuZGFsb25lID0gc3RyaXAub3BlblN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UsXG4gICAgICAgIGNsb3NlU3RhbmRhbG9uZSA9IHN0cmlwLmNsb3NlU3RhbmRhbG9uZSAmJiBfaXNOZXh0V2hpdGVzcGFjZSxcbiAgICAgICAgaW5saW5lU3RhbmRhbG9uZSA9IHN0cmlwLmlubGluZVN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UgJiYgX2lzTmV4dFdoaXRlc3BhY2U7XG5cbiAgICBpZiAoc3RyaXAuY2xvc2UpIHtcbiAgICAgIG9taXRSaWdodChib2R5LCBpLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KGJvZHksIGksIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgaW5saW5lU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KGJvZHksIGkpO1xuXG4gICAgICBpZiAob21pdExlZnQoYm9keSwgaSkpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgc3RhbmRhbG9uZSBub2RlLCBzYXZlIHRoZSBpbmRlbnQgaW5mbyBmb3IgcGFydGlhbHNcbiAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gJ1BhcnRpYWxTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgZmluYWwgbGluZVxuICAgICAgICAgIGN1cnJlbnQuaW5kZW50ID0gKC8oWyBcXHRdKyQpLykuZXhlYyhib2R5W2kgLSAxXS5vcmlnaW5hbClbMV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBvcGVuU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KChjdXJyZW50LnByb2dyYW0gfHwgY3VycmVudC5pbnZlcnNlKS5ib2R5KTtcblxuICAgICAgLy8gU3RyaXAgb3V0IHRoZSBwcmV2aW91cyBjb250ZW50IG5vZGUgaWYgaXQncyB3aGl0ZXNwYWNlIG9ubHlcbiAgICAgIG9taXRMZWZ0KGJvZHksIGkpO1xuICAgIH1cbiAgICBpZiAoZG9TdGFuZGFsb25lICYmIGNsb3NlU3RhbmRhbG9uZSkge1xuICAgICAgLy8gQWx3YXlzIHN0cmlwIHRoZSBuZXh0IG5vZGVcbiAgICAgIG9taXRSaWdodChib2R5LCBpKTtcblxuICAgICAgb21pdExlZnQoKGN1cnJlbnQuaW52ZXJzZSB8fCBjdXJyZW50LnByb2dyYW0pLmJvZHkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9ncmFtO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkJsb2NrU3RhdGVtZW50ID1cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jayA9XG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuUGFydGlhbEJsb2NrU3RhdGVtZW50ID0gZnVuY3Rpb24oYmxvY2spIHtcbiAgdGhpcy5hY2NlcHQoYmxvY2sucHJvZ3JhbSk7XG4gIHRoaXMuYWNjZXB0KGJsb2NrLmludmVyc2UpO1xuXG4gIC8vIEZpbmQgdGhlIGludmVyc2UgcHJvZ3JhbSB0aGF0IGlzIGludm9sZWQgd2l0aCB3aGl0ZXNwYWNlIHN0cmlwcGluZy5cbiAgbGV0IHByb2dyYW0gPSBibG9jay5wcm9ncmFtIHx8IGJsb2NrLmludmVyc2UsXG4gICAgICBpbnZlcnNlID0gYmxvY2sucHJvZ3JhbSAmJiBibG9jay5pbnZlcnNlLFxuICAgICAgZmlyc3RJbnZlcnNlID0gaW52ZXJzZSxcbiAgICAgIGxhc3RJbnZlcnNlID0gaW52ZXJzZTtcblxuICBpZiAoaW52ZXJzZSAmJiBpbnZlcnNlLmNoYWluZWQpIHtcbiAgICBmaXJzdEludmVyc2UgPSBpbnZlcnNlLmJvZHlbMF0ucHJvZ3JhbTtcblxuICAgIC8vIFdhbGsgdGhlIGludmVyc2UgY2hhaW4gdG8gZmluZCB0aGUgbGFzdCBpbnZlcnNlIHRoYXQgaXMgYWN0dWFsbHkgaW4gdGhlIGNoYWluLlxuICAgIHdoaWxlIChsYXN0SW52ZXJzZS5jaGFpbmVkKSB7XG4gICAgICBsYXN0SW52ZXJzZSA9IGxhc3RJbnZlcnNlLmJvZHlbbGFzdEludmVyc2UuYm9keS5sZW5ndGggLSAxXS5wcm9ncmFtO1xuICAgIH1cbiAgfVxuXG4gIGxldCBzdHJpcCA9IHtcbiAgICBvcGVuOiBibG9jay5vcGVuU3RyaXAub3BlbixcbiAgICBjbG9zZTogYmxvY2suY2xvc2VTdHJpcC5jbG9zZSxcblxuICAgIC8vIERldGVybWluZSB0aGUgc3RhbmRhbG9uZSBjYW5kaWFjeS4gQmFzaWNhbGx5IGZsYWcgb3VyIGNvbnRlbnQgYXMgYmVpbmcgcG9zc2libHkgc3RhbmRhbG9uZVxuICAgIC8vIHNvIG91ciBwYXJlbnQgY2FuIGRldGVybWluZSBpZiB3ZSBhY3R1YWxseSBhcmUgc3RhbmRhbG9uZVxuICAgIG9wZW5TdGFuZGFsb25lOiBpc05leHRXaGl0ZXNwYWNlKHByb2dyYW0uYm9keSksXG4gICAgY2xvc2VTdGFuZGFsb25lOiBpc1ByZXZXaGl0ZXNwYWNlKChmaXJzdEludmVyc2UgfHwgcHJvZ3JhbSkuYm9keSlcbiAgfTtcblxuICBpZiAoYmxvY2sub3BlblN0cmlwLmNsb3NlKSB7XG4gICAgb21pdFJpZ2h0KHByb2dyYW0uYm9keSwgbnVsbCwgdHJ1ZSk7XG4gIH1cblxuICBpZiAoaW52ZXJzZSkge1xuICAgIGxldCBpbnZlcnNlU3RyaXAgPSBibG9jay5pbnZlcnNlU3RyaXA7XG5cbiAgICBpZiAoaW52ZXJzZVN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSwgbnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGludmVyc2VTdHJpcC5jbG9zZSkge1xuICAgICAgb21pdFJpZ2h0KGZpcnN0SW52ZXJzZS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKGJsb2NrLmNsb3NlU3RyaXAub3Blbikge1xuICAgICAgb21pdExlZnQobGFzdEludmVyc2UuYm9keSwgbnVsbCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gRmluZCBzdGFuZGFsb25lIGVsc2Ugc3RhdG1lbnRzXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuaWdub3JlU3RhbmRhbG9uZVxuICAgICAgICAmJiBpc1ByZXZXaGl0ZXNwYWNlKHByb2dyYW0uYm9keSlcbiAgICAgICAgJiYgaXNOZXh0V2hpdGVzcGFjZShmaXJzdEludmVyc2UuYm9keSkpIHtcbiAgICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSk7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChibG9jay5jbG9zZVN0cmlwLm9wZW4pIHtcbiAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHN0cmlwO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkRlY29yYXRvciA9XG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuTXVzdGFjaGVTdGF0ZW1lbnQgPSBmdW5jdGlvbihtdXN0YWNoZSkge1xuICByZXR1cm4gbXVzdGFjaGUuc3RyaXA7XG59O1xuXG5XaGl0ZXNwYWNlQ29udHJvbC5wcm90b3R5cGUuUGFydGlhbFN0YXRlbWVudCA9XG4gICAgV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkNvbW1lbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihub2RlKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCBzdHJpcCA9IG5vZGUuc3RyaXAgfHwge307XG4gIHJldHVybiB7XG4gICAgaW5saW5lU3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBvcGVuOiBzdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBzdHJpcC5jbG9zZVxuICB9O1xufTtcblxuXG5mdW5jdGlvbiBpc1ByZXZXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkge1xuICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IGJvZHkubGVuZ3RoO1xuICB9XG5cbiAgLy8gTm9kZXMgdGhhdCBlbmQgd2l0aCBuZXdsaW5lcyBhcmUgY29uc2lkZXJlZCB3aGl0ZXNwYWNlIChidXQgYXJlIHNwZWNpYWxcbiAgLy8gY2FzZWQgZm9yIHN0cmlwIG9wZXJhdGlvbnMpXG4gIGxldCBwcmV2ID0gYm9keVtpIC0gMV0sXG4gICAgICBzaWJsaW5nID0gYm9keVtpIC0gMl07XG4gIGlmICghcHJldikge1xuICAgIHJldHVybiBpc1Jvb3Q7XG4gIH1cblxuICBpZiAocHJldi50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/ICgvXFxyP1xcblxccyo/JC8pIDogKC8oXnxcXHI/XFxuKVxccyo/JC8pKS50ZXN0KHByZXYub3JpZ2luYWwpO1xuICB9XG59XG5mdW5jdGlvbiBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkge1xuICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IC0xO1xuICB9XG5cbiAgbGV0IG5leHQgPSBib2R5W2kgKyAxXSxcbiAgICAgIHNpYmxpbmcgPSBib2R5W2kgKyAyXTtcbiAgaWYgKCFuZXh0KSB7XG4gICAgcmV0dXJuIGlzUm9vdDtcbiAgfVxuXG4gIGlmIChuZXh0LnR5cGUgPT09ICdDb250ZW50U3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoc2libGluZyB8fCAhaXNSb290ID8gKC9eXFxzKj9cXHI/XFxuLykgOiAoL15cXHMqPyhcXHI/XFxufCQpLykpLnRlc3QobmV4dC5vcmlnaW5hbCk7XG4gIH1cbn1cblxuLy8gTWFya3MgdGhlIG5vZGUgdG8gdGhlIHJpZ2h0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiB7e2Zvb319JyAnIHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCwgdGhlbiB0aGUgZmlyc3QgY2hpbGQgd2lsbCBiZSBtYXJrZWQgYXMgc3VjaC5cbi8vXG4vLyBJZiBtdWxpdHBsZSBpcyB0cnV0aHkgdGhlbiBhbGwgd2hpdGVzcGFjZSB3aWxsIGJlIHN0cmlwcGVkIG91dCB1bnRpbCBub24td2hpdGVzcGFjZVxuLy8gY29udGVudCBpcyBtZXQuXG5mdW5jdGlvbiBvbWl0UmlnaHQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgbGV0IGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IDAgOiBpICsgMV07XG4gIGlmICghY3VycmVudCB8fCBjdXJyZW50LnR5cGUgIT09ICdDb250ZW50U3RhdGVtZW50JyB8fCAoIW11bHRpcGxlICYmIGN1cnJlbnQucmlnaHRTdHJpcHBlZCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgb3JpZ2luYWwgPSBjdXJyZW50LnZhbHVlO1xuICBjdXJyZW50LnZhbHVlID0gY3VycmVudC52YWx1ZS5yZXBsYWNlKG11bHRpcGxlID8gKC9eXFxzKy8pIDogKC9eWyBcXHRdKlxccj9cXG4/LyksICcnKTtcbiAgY3VycmVudC5yaWdodFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7XG59XG5cbi8vIE1hcmtzIHRoZSBub2RlIHRvIHRoZSBsZWZ0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiAnICd7e2Zvb319IHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBsYXN0IGNoaWxkIHdpbGwgYmUgbWFya2VkIGFzIHN1Y2guXG4vL1xuLy8gSWYgbXVsaXRwbGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50aWwgbm9uLXdoaXRlc3BhY2Vcbi8vIGNvbnRlbnQgaXMgbWV0LlxuZnVuY3Rpb24gb21pdExlZnQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgbGV0IGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IGJvZHkubGVuZ3RoIC0gMSA6IGkgLSAxXTtcbiAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQudHlwZSAhPT0gJ0NvbnRlbnRTdGF0ZW1lbnQnIHx8ICghbXVsdGlwbGUgJiYgY3VycmVudC5sZWZ0U3RyaXBwZWQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gV2Ugb21pdCB0aGUgbGFzdCBub2RlIGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5IGFuZCBub3QgcHJlY2VlZGVkIGJ5IGEgbm9uLWNvbnRlbnQgbm9kZS5cbiAgbGV0IG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShtdWx0aXBsZSA/ICgvXFxzKyQvKSA6ICgvWyBcXHRdKyQvKSwgJycpO1xuICBjdXJyZW50LmxlZnRTdHJpcHBlZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsO1xuICByZXR1cm4gY3VycmVudC5sZWZ0U3RyaXBwZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdoaXRlc3BhY2VDb250cm9sO1xuIl19 -; -define('handlebars/compiler/helpers',['exports', '../exception'], function (exports, _exception) { - 'use strict'; - - exports.__esModule = true; - exports.SourceLocation = SourceLocation; - exports.id = id; - exports.stripFlags = stripFlags; - exports.stripComment = stripComment; - exports.preparePath = preparePath; - exports.prepareMustache = prepareMustache; - exports.prepareRawBlock = prepareRawBlock; - exports.prepareBlock = prepareBlock; - exports.prepareProgram = prepareProgram; - exports.preparePartialBlock = preparePartialBlock; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - function validateClose(open, close) { - close = close.path ? close.path.original : close; - - if (open.path.original !== close) { - var errorNode = { loc: open.path.loc }; - - throw new _Exception['default'](open.path.original + " doesn't match " + close, errorNode); - } - } - - function SourceLocation(source, locInfo) { - this.source = source; - this.start = { - line: locInfo.first_line, - column: locInfo.first_column - }; - this.end = { - line: locInfo.last_line, - column: locInfo.last_column - }; - } - - function id(token) { - if (/^\[.*\]$/.test(token)) { - return token.substr(1, token.length - 2); - } else { - return token; - } - } - - function stripFlags(open, close) { - return { - open: open.charAt(2) === '~', - close: close.charAt(close.length - 3) === '~' - }; - } - - function stripComment(comment) { - return comment.replace(/^\{\{~?\!-?-?/, '').replace(/-?-?~?\}\}$/, ''); - } - - function preparePath(data, parts, loc) { - loc = this.locInfo(loc); - - var original = data ? '@' : '', - dig = [], - depth = 0, - depthString = ''; - - for (var i = 0, l = parts.length; i < l; i++) { - var part = parts[i].part, - - // If we have [] syntax then we do not treat path references as operators, - // i.e. foo.[this] resolves to approximately context.foo['this'] - isLiteral = parts[i].original !== part; - original += (parts[i].separator || '') + part; - - if (!isLiteral && (part === '..' || part === '.' || part === 'this')) { - if (dig.length > 0) { - throw new _Exception['default']('Invalid path: ' + original, { loc: loc }); - } else if (part === '..') { - depth++; - depthString += '../'; - } - } else { - dig.push(part); - } - } - - return { - type: 'PathExpression', - data: data, - depth: depth, - parts: dig, - original: original, - loc: loc - }; - } - - function prepareMustache(path, params, hash, open, strip, locInfo) { - // Must use charAt to support IE pre-10 - var escapeFlag = open.charAt(3) || open.charAt(2), - escaped = escapeFlag !== '{' && escapeFlag !== '&'; - - var decorator = /\*/.test(open); - return { - type: decorator ? 'Decorator' : 'MustacheStatement', - path: path, - params: params, - hash: hash, - escaped: escaped, - strip: strip, - loc: this.locInfo(locInfo) - }; - } - - function prepareRawBlock(openRawBlock, contents, close, locInfo) { - validateClose(openRawBlock, close); - - locInfo = this.locInfo(locInfo); - var program = { - type: 'Program', - body: contents, - strip: {}, - loc: locInfo - }; - - return { - type: 'BlockStatement', - path: openRawBlock.path, - params: openRawBlock.params, - hash: openRawBlock.hash, - program: program, - openStrip: {}, - inverseStrip: {}, - closeStrip: {}, - loc: locInfo - }; - } - - function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) { - if (close && close.path) { - validateClose(openBlock, close); - } - - var decorator = /\*/.test(openBlock.open); - - program.blockParams = openBlock.blockParams; - - var inverse = undefined, - inverseStrip = undefined; - - if (inverseAndProgram) { - if (decorator) { - throw new _Exception['default']('Unexpected inverse block on decorator', inverseAndProgram); - } - - if (inverseAndProgram.chain) { - inverseAndProgram.program.body[0].closeStrip = close.strip; - } - - inverseStrip = inverseAndProgram.strip; - inverse = inverseAndProgram.program; - } - - if (inverted) { - inverted = inverse; - inverse = program; - program = inverted; - } - - return { - type: decorator ? 'DecoratorBlock' : 'BlockStatement', - path: openBlock.path, - params: openBlock.params, - hash: openBlock.hash, - program: program, - inverse: inverse, - openStrip: openBlock.strip, - inverseStrip: inverseStrip, - closeStrip: close && close.strip, - loc: this.locInfo(locInfo) - }; - } - - function prepareProgram(statements, loc) { - if (!loc && statements.length) { - var firstLoc = statements[0].loc, - lastLoc = statements[statements.length - 1].loc; - - /* istanbul ignore else */ - if (firstLoc && lastLoc) { - loc = { - source: firstLoc.source, - start: { - line: firstLoc.start.line, - column: firstLoc.start.column - }, - end: { - line: lastLoc.end.line, - column: lastLoc.end.column - } - }; - } - } - - return { - type: 'Program', - body: statements, - strip: {}, - loc: loc - }; - } - - function preparePartialBlock(open, program, close, locInfo) { - validateClose(open, close); - - return { - type: 'PartialBlockStatement', - name: open.path, - params: open.params, - hash: open.hash, - program: program, - openStrip: open.strip, - closeStrip: close && close.strip, - loc: this.locInfo(locInfo) - }; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxXQUFTLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO0FBQ2xDLFNBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQzs7QUFFakQsUUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLLEVBQUU7QUFDaEMsVUFBSSxTQUFTLEdBQUcsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUMsQ0FBQzs7QUFFckMsWUFBTSwwQkFBYyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDaEY7R0FDRjs7QUFFTSxXQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO0FBQzlDLFFBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3JCLFFBQUksQ0FBQyxLQUFLLEdBQUc7QUFDWCxVQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDeEIsWUFBTSxFQUFFLE9BQU8sQ0FBQyxZQUFZO0tBQzdCLENBQUM7QUFDRixRQUFJLENBQUMsR0FBRyxHQUFHO0FBQ1QsVUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3ZCLFlBQU0sRUFBRSxPQUFPLENBQUMsV0FBVztLQUM1QixDQUFDO0dBQ0g7O0FBRU0sV0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFO0FBQ3hCLFFBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMxQixhQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDMUMsTUFBTTtBQUNMLGFB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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZnVuY3Rpb24gdmFsaWRhdGVDbG9zZShvcGVuLCBjbG9zZSkge1xuICBjbG9zZSA9IGNsb3NlLnBhdGggPyBjbG9zZS5wYXRoLm9yaWdpbmFsIDogY2xvc2U7XG5cbiAgaWYgKG9wZW4ucGF0aC5vcmlnaW5hbCAhPT0gY2xvc2UpIHtcbiAgICBsZXQgZXJyb3JOb2RlID0ge2xvYzogb3Blbi5wYXRoLmxvY307XG5cbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKG9wZW4ucGF0aC5vcmlnaW5hbCArIFwiIGRvZXNuJ3QgbWF0Y2ggXCIgKyBjbG9zZSwgZXJyb3JOb2RlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc291cmNlLCBsb2NJbmZvKSB7XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnN0YXJ0ID0ge1xuICAgIGxpbmU6IGxvY0luZm8uZmlyc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8uZmlyc3RfY29sdW1uXG4gIH07XG4gIHRoaXMuZW5kID0ge1xuICAgIGxpbmU6IGxvY0luZm8ubGFzdF9saW5lLFxuICAgIGNvbHVtbjogbG9jSW5mby5sYXN0X2NvbHVtblxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWQodG9rZW4pIHtcbiAgaWYgKC9eXFxbLipcXF0kLy50ZXN0KHRva2VuKSkge1xuICAgIHJldHVybiB0b2tlbi5zdWJzdHIoMSwgdG9rZW4ubGVuZ3RoIC0gMik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEZsYWdzKG9wZW4sIGNsb3NlKSB7XG4gIHJldHVybiB7XG4gICAgb3Blbjogb3Blbi5jaGFyQXQoMikgPT09ICd+JyxcbiAgICBjbG9zZTogY2xvc2UuY2hhckF0KGNsb3NlLmxlbmd0aCAtIDMpID09PSAnfidcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29tbWVudChjb21tZW50KSB7XG4gIHJldHVybiBjb21tZW50LnJlcGxhY2UoL15cXHtcXHt+P1xcIS0/LT8vLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgvLT8tP34/XFx9XFx9JC8sICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVQYXRoKGRhdGEsIHBhcnRzLCBsb2MpIHtcbiAgbG9jID0gdGhpcy5sb2NJbmZvKGxvYyk7XG5cbiAgbGV0IG9yaWdpbmFsID0gZGF0YSA/ICdAJyA6ICcnLFxuICAgICAgZGlnID0gW10sXG4gICAgICBkZXB0aCA9IDAsXG4gICAgICBkZXB0aFN0cmluZyA9ICcnO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcGFydHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgbGV0IHBhcnQgPSBwYXJ0c1tpXS5wYXJ0LFxuICAgICAgICAvLyBJZiB3ZSBoYXZlIFtdIHN5bnRheCB0aGVuIHdlIGRvIG5vdCB0cmVhdCBwYXRoIHJlZmVyZW5jZXMgYXMgb3BlcmF0b3JzLFxuICAgICAgICAvLyBpLmUuIGZvby5bdGhpc10gcmVzb2x2ZXMgdG8gYXBwcm94aW1hdGVseSBjb250ZXh0LmZvb1sndGhpcyddXG4gICAgICAgIGlzTGl0ZXJhbCA9IHBhcnRzW2ldLm9yaWdpbmFsICE9PSBwYXJ0O1xuICAgIG9yaWdpbmFsICs9IChwYXJ0c1tpXS5zZXBhcmF0b3IgfHwgJycpICsgcGFydDtcblxuICAgIGlmICghaXNMaXRlcmFsICYmIChwYXJ0ID09PSAnLi4nIHx8IHBhcnQgPT09ICcuJyB8fCBwYXJ0ID09PSAndGhpcycpKSB7XG4gICAgICBpZiAoZGlnLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignSW52YWxpZCBwYXRoOiAnICsgb3JpZ2luYWwsIHtsb2N9KTtcbiAgICAgIH0gZWxzZSBpZiAocGFydCA9PT0gJy4uJykge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgICBkZXB0aFN0cmluZyArPSAnLi4vJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlnLnB1c2gocGFydCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUGF0aEV4cHJlc3Npb24nLFxuICAgIGRhdGEsXG4gICAgZGVwdGgsXG4gICAgcGFydHM6IGRpZyxcbiAgICBvcmlnaW5hbCxcbiAgICBsb2NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIG9wZW4sIHN0cmlwLCBsb2NJbmZvKSB7XG4gIC8vIE11c3QgdXNlIGNoYXJBdCB0byBzdXBwb3J0IElFIHByZS0xMFxuICBsZXQgZXNjYXBlRmxhZyA9IG9wZW4uY2hhckF0KDMpIHx8IG9wZW4uY2hhckF0KDIpLFxuICAgICAgZXNjYXBlZCA9IGVzY2FwZUZsYWcgIT09ICd7JyAmJiBlc2NhcGVGbGFnICE9PSAnJic7XG5cbiAgbGV0IGRlY29yYXRvciA9ICgvXFwqLy50ZXN0KG9wZW4pKTtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBkZWNvcmF0b3IgPyAnRGVjb3JhdG9yJyA6ICdNdXN0YWNoZVN0YXRlbWVudCcsXG4gICAgcGF0aCxcbiAgICBwYXJhbXMsXG4gICAgaGFzaCxcbiAgICBlc2NhcGVkLFxuICAgIHN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUmF3QmxvY2sob3BlblJhd0Jsb2NrLCBjb250ZW50cywgY2xvc2UsIGxvY0luZm8pIHtcbiAgdmFsaWRhdGVDbG9zZShvcGVuUmF3QmxvY2ssIGNsb3NlKTtcblxuICBsb2NJbmZvID0gdGhpcy5sb2NJbmZvKGxvY0luZm8pO1xuICBsZXQgcHJvZ3JhbSA9IHtcbiAgICB0eXBlOiAnUHJvZ3JhbScsXG4gICAgYm9keTogY29udGVudHMsXG4gICAgc3RyaXA6IHt9LFxuICAgIGxvYzogbG9jSW5mb1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0Jsb2NrU3RhdGVtZW50JyxcbiAgICBwYXRoOiBvcGVuUmF3QmxvY2sucGF0aCxcbiAgICBwYXJhbXM6IG9wZW5SYXdCbG9jay5wYXJhbXMsXG4gICAgaGFzaDogb3BlblJhd0Jsb2NrLmhhc2gsXG4gICAgcHJvZ3JhbSxcbiAgICBvcGVuU3RyaXA6IHt9LFxuICAgIGludmVyc2VTdHJpcDoge30sXG4gICAgY2xvc2VTdHJpcDoge30sXG4gICAgbG9jOiBsb2NJbmZvXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlQmxvY2sob3BlbkJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlQW5kUHJvZ3JhbSwgY2xvc2UsIGludmVydGVkLCBsb2NJbmZvKSB7XG4gIGlmIChjbG9zZSAmJiBjbG9zZS5wYXRoKSB7XG4gICAgdmFsaWRhdGVDbG9zZShvcGVuQmxvY2ssIGNsb3NlKTtcbiAgfVxuXG4gIGxldCBkZWNvcmF0b3IgPSAoL1xcKi8udGVzdChvcGVuQmxvY2sub3BlbikpO1xuXG4gIHByb2dyYW0uYmxvY2tQYXJhbXMgPSBvcGVuQmxvY2suYmxvY2tQYXJhbXM7XG5cbiAgbGV0IGludmVyc2UsXG4gICAgICBpbnZlcnNlU3RyaXA7XG5cbiAgaWYgKGludmVyc2VBbmRQcm9ncmFtKSB7XG4gICAgaWYgKGRlY29yYXRvcikge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5leHBlY3RlZCBpbnZlcnNlIGJsb2NrIG9uIGRlY29yYXRvcicsIGludmVyc2VBbmRQcm9ncmFtKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZUFuZFByb2dyYW0uY2hhaW4pIHtcbiAgICAgIGludmVyc2VBbmRQcm9ncmFtLnByb2dyYW0uYm9keVswXS5jbG9zZVN0cmlwID0gY2xvc2Uuc3RyaXA7XG4gICAgfVxuXG4gICAgaW52ZXJzZVN0cmlwID0gaW52ZXJzZUFuZFByb2dyYW0uc3RyaXA7XG4gICAgaW52ZXJzZSA9IGludmVyc2VBbmRQcm9ncmFtLnByb2dyYW07XG4gIH1cblxuICBpZiAoaW52ZXJ0ZWQpIHtcbiAgICBpbnZlcnRlZCA9IGludmVyc2U7XG4gICAgaW52ZXJzZSA9IHByb2dyYW07XG4gICAgcHJvZ3JhbSA9IGludmVydGVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBkZWNvcmF0b3IgPyAnRGVjb3JhdG9yQmxvY2snIDogJ0Jsb2NrU3RhdGVtZW50JyxcbiAgICBwYXRoOiBvcGVuQmxvY2sucGF0aCxcbiAgICBwYXJhbXM6IG9wZW5CbG9jay5wYXJhbXMsXG4gICAgaGFzaDogb3BlbkJsb2NrLmhhc2gsXG4gICAgcHJvZ3JhbSxcbiAgICBpbnZlcnNlLFxuICAgIG9wZW5TdHJpcDogb3BlbkJsb2NrLnN0cmlwLFxuICAgIGludmVyc2VTdHJpcCxcbiAgICBjbG9zZVN0cmlwOiBjbG9zZSAmJiBjbG9zZS5zdHJpcCxcbiAgICBsb2M6IHRoaXMubG9jSW5mbyhsb2NJbmZvKVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVByb2dyYW0oc3RhdGVtZW50cywgbG9jKSB7XG4gIGlmICghbG9jICYmIHN0YXRlbWVudHMubGVuZ3RoKSB7XG4gICAgY29uc3QgZmlyc3RMb2MgPSBzdGF0ZW1lbnRzWzBdLmxvYyxcbiAgICAgICAgICBsYXN0TG9jID0gc3RhdGVtZW50c1tzdGF0ZW1lbnRzLmxlbmd0aCAtIDFdLmxvYztcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGZpcnN0TG9jICYmIGxhc3RMb2MpIHtcbiAgICAgIGxvYyA9IHtcbiAgICAgICAgc291cmNlOiBmaXJzdExvYy5zb3VyY2UsXG4gICAgICAgIHN0YXJ0OiB7XG4gICAgICAgICAgbGluZTogZmlyc3RMb2Muc3RhcnQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGZpcnN0TG9jLnN0YXJ0LmNvbHVtblxuICAgICAgICB9LFxuICAgICAgICBlbmQ6IHtcbiAgICAgICAgICBsaW5lOiBsYXN0TG9jLmVuZC5saW5lLFxuICAgICAgICAgIGNvbHVtbjogbGFzdExvYy5lbmQuY29sdW1uXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUHJvZ3JhbScsXG4gICAgYm9keTogc3RhdGVtZW50cyxcbiAgICBzdHJpcDoge30sXG4gICAgbG9jOiBsb2NcbiAgfTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVBhcnRpYWxCbG9jayhvcGVuLCBwcm9ncmFtLCBjbG9zZSwgbG9jSW5mbykge1xuICB2YWxpZGF0ZUNsb3NlKG9wZW4sIGNsb3NlKTtcblxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdQYXJ0aWFsQmxvY2tTdGF0ZW1lbnQnLFxuICAgIG5hbWU6IG9wZW4ucGF0aCxcbiAgICBwYXJhbXM6IG9wZW4ucGFyYW1zLFxuICAgIGhhc2g6IG9wZW4uaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIG9wZW5TdHJpcDogb3Blbi5zdHJpcCxcbiAgICBjbG9zZVN0cmlwOiBjbG9zZSAmJiBjbG9zZS5zdHJpcCxcbiAgICBsb2M6IHRoaXMubG9jSW5mbyhsb2NJbmZvKVxuICB9O1xufVxuXG4iXX0= -; -define('handlebars/compiler/base',['exports', './parser', './whitespace-control', './helpers', '../utils'], function (exports, _parser, _whitespaceControl, _helpers, _utils) { - 'use strict'; - - exports.__esModule = true; - exports.parse = parse; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _parser2 = _interopRequireDefault(_parser); - - var _WhitespaceControl = _interopRequireDefault(_whitespaceControl); - - exports.parser = _parser2['default']; - - var yy = {}; - _utils.extend(yy, _helpers); - - function parse(input, options) { - // Just return if an already-compiled AST was passed in. - if (input.type === 'Program') { - return input; - } - - _parser2['default'].yy = yy; - - // Altering the shared object here, but this is ok as parser is a sync operation - yy.locInfo = function (locInfo) { - return new yy.SourceLocation(options && options.srcName, locInfo); - }; - - var strip = new _WhitespaceControl['default'](options); - return strip.accept(_parser2['default'].parse(input)); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztVQUtTLE1BQU07O0FBRWYsTUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1osU0FMUyxNQUFNLENBS1IsRUFBRSxXQUFVLENBQUM7O0FBRWIsV0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTs7QUFFcEMsUUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtBQUFFLGFBQU8sS0FBSyxDQUFDO0tBQUU7O0FBRS9DLHdCQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7OztBQUdmLE1BQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDN0IsYUFBTyxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbkUsQ0FBQzs7QUFFRixRQUFJLEtBQUssR0FBRyxrQ0FBc0IsT0FBTyxDQUFDLENBQUM7QUFDM0MsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLG9CQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0dBQzFDIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGFyc2VyIGZyb20gJy4vcGFyc2VyJztcbmltcG9ydCBXaGl0ZXNwYWNlQ29udHJvbCBmcm9tICcuL3doaXRlc3BhY2UtY29udHJvbCc7XG5pbXBvcnQgKiBhcyBIZWxwZXJzIGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBleHRlbmQgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCB7IHBhcnNlciB9O1xuXG5sZXQgeXkgPSB7fTtcbmV4dGVuZCh5eSwgSGVscGVycyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShpbnB1dCwgb3B0aW9ucykge1xuICAvLyBKdXN0IHJldHVybiBpZiBhbiBhbHJlYWR5LWNvbXBpbGVkIEFTVCB3YXMgcGFzc2VkIGluLlxuICBpZiAoaW5wdXQudHlwZSA9PT0gJ1Byb2dyYW0nKSB7IHJldHVybiBpbnB1dDsgfVxuXG4gIHBhcnNlci55eSA9IHl5O1xuXG4gIC8vIEFsdGVyaW5nIHRoZSBzaGFyZWQgb2JqZWN0IGhlcmUsIGJ1dCB0aGlzIGlzIG9rIGFzIHBhcnNlciBpcyBhIHN5bmMgb3BlcmF0aW9uXG4gIHl5LmxvY0luZm8gPSBmdW5jdGlvbihsb2NJbmZvKSB7XG4gICAgcmV0dXJuIG5ldyB5eS5Tb3VyY2VMb2NhdGlvbihvcHRpb25zICYmIG9wdGlvbnMuc3JjTmFtZSwgbG9jSW5mbyk7XG4gIH07XG5cbiAgbGV0IHN0cmlwID0gbmV3IFdoaXRlc3BhY2VDb250cm9sKG9wdGlvbnMpO1xuICByZXR1cm4gc3RyaXAuYWNjZXB0KHBhcnNlci5wYXJzZShpbnB1dCkpO1xufVxuIl19 -; -define('handlebars/compiler/compiler',['exports', '../exception', '../utils', './ast'], function (exports, _exception, _utils, _ast) { - /* eslint-disable new-cap */ - - 'use strict'; - - exports.__esModule = true; - exports.Compiler = Compiler; - exports.precompile = precompile; - exports.compile = compile; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - var _AST = _interopRequireDefault(_ast); - - var slice = [].slice; - - function Compiler() {} - - // the foundHelper register will disambiguate helper lookup from finding a - // function in a context. This is necessary for mustache compatibility, which - // requires that context functions in blocks are evaluated by blockHelperMissing, - // and then proceed as if the resulting value was provided to blockHelperMissing. - - Compiler.prototype = { - compiler: Compiler, - - equals: function equals(other) { - var len = this.opcodes.length; - if (other.opcodes.length !== len) { - return false; - } - - for (var i = 0; i < len; i++) { - var opcode = this.opcodes[i], - otherOpcode = other.opcodes[i]; - if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) { - return false; - } - } - - // We know that length is the same between the two arrays because they are directly tied - // to the opcode behavior above. - len = this.children.length; - for (var i = 0; i < len; i++) { - if (!this.children[i].equals(other.children[i])) { - return false; - } - } - - return true; - }, - - guid: 0, - - compile: function compile(program, options) { - this.sourceNode = []; - this.opcodes = []; - this.children = []; - this.options = options; - this.stringParams = options.stringParams; - this.trackIds = options.trackIds; - - options.blockParams = options.blockParams || []; - - // These changes will propagate to the other compiler components - var knownHelpers = options.knownHelpers; - options.knownHelpers = { - 'helperMissing': true, - 'blockHelperMissing': true, - 'each': true, - 'if': true, - 'unless': true, - 'with': true, - 'log': true, - 'lookup': true - }; - if (knownHelpers) { - for (var _name in knownHelpers) { - /* istanbul ignore else */ - if (_name in knownHelpers) { - options.knownHelpers[_name] = knownHelpers[_name]; - } - } - } - - return this.accept(program); - }, - - compileProgram: function compileProgram(program) { - var childCompiler = new this.compiler(), - // eslint-disable-line new-cap - result = childCompiler.compile(program, this.options), - guid = this.guid++; - - this.usePartial = this.usePartial || result.usePartial; - - this.children[guid] = result; - this.useDepths = this.useDepths || result.useDepths; - - return guid; - }, - - accept: function accept(node) { - /* istanbul ignore next: Sanity code */ - if (!this[node.type]) { - throw new _Exception['default']('Unknown type: ' + node.type, node); - } - - this.sourceNode.unshift(node); - var ret = this[node.type](node); - this.sourceNode.shift(); - return ret; - }, - - Program: function Program(program) { - this.options.blockParams.unshift(program.blockParams); - - var body = program.body, - bodyLength = body.length; - for (var i = 0; i < bodyLength; i++) { - this.accept(body[i]); - } - - this.options.blockParams.shift(); - - this.isSimple = bodyLength === 1; - this.blockParams = program.blockParams ? program.blockParams.length : 0; - - return this; - }, - - BlockStatement: function BlockStatement(block) { - transformLiteralToPath(block); - - var program = block.program, - inverse = block.inverse; - - program = program && this.compileProgram(program); - inverse = inverse && this.compileProgram(inverse); - - var type = this.classifySexpr(block); - - if (type === 'helper') { - this.helperSexpr(block, program, inverse); - } else if (type === 'simple') { - this.simpleSexpr(block); - - // now that the simple mustache is resolved, we need to - // evaluate it by executing `blockHelperMissing` - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - this.opcode('emptyHash'); - this.opcode('blockValue', block.path.original); - } else { - this.ambiguousSexpr(block, program, inverse); - - // now that the simple mustache is resolved, we need to - // evaluate it by executing `blockHelperMissing` - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - this.opcode('emptyHash'); - this.opcode('ambiguousBlockValue'); - } - - this.opcode('append'); - }, - - DecoratorBlock: function DecoratorBlock(decorator) { - var program = decorator.program && this.compileProgram(decorator.program); - var params = this.setupFullMustacheParams(decorator, program, undefined), - path = decorator.path; - - this.useDecorators = true; - this.opcode('registerDecorator', params.length, path.original); - }, - - PartialStatement: function PartialStatement(partial) { - this.usePartial = true; - - var program = partial.program; - if (program) { - program = this.compileProgram(partial.program); - } - - var params = partial.params; - if (params.length > 1) { - throw new _Exception['default']('Unsupported number of partial arguments: ' + params.length, partial); - } else if (!params.length) { - if (this.options.explicitPartialContext) { - this.opcode('pushLiteral', 'undefined'); - } else { - params.push({ type: 'PathExpression', parts: [], depth: 0 }); - } - } - - var partialName = partial.name.original, - isDynamic = partial.name.type === 'SubExpression'; - if (isDynamic) { - this.accept(partial.name); - } - - this.setupFullMustacheParams(partial, program, undefined, true); - - var indent = partial.indent || ''; - if (this.options.preventIndent && indent) { - this.opcode('appendContent', indent); - indent = ''; - } - - this.opcode('invokePartial', isDynamic, partialName, indent); - this.opcode('append'); - }, - PartialBlockStatement: function PartialBlockStatement(partialBlock) { - this.PartialStatement(partialBlock); - }, - - MustacheStatement: function MustacheStatement(mustache) { - this.SubExpression(mustache); - - if (mustache.escaped && !this.options.noEscape) { - this.opcode('appendEscaped'); - } else { - this.opcode('append'); - } - }, - Decorator: function Decorator(decorator) { - this.DecoratorBlock(decorator); - }, - - ContentStatement: function ContentStatement(content) { - if (content.value) { - this.opcode('appendContent', content.value); - } - }, - - CommentStatement: function CommentStatement() {}, - - SubExpression: function SubExpression(sexpr) { - transformLiteralToPath(sexpr); - var type = this.classifySexpr(sexpr); - - if (type === 'simple') { - this.simpleSexpr(sexpr); - } else if (type === 'helper') { - this.helperSexpr(sexpr); - } else { - this.ambiguousSexpr(sexpr); - } - }, - ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) { - var path = sexpr.path, - name = path.parts[0], - isBlock = program != null || inverse != null; - - this.opcode('getContext', path.depth); - - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - - path.strict = true; - this.accept(path); - - this.opcode('invokeAmbiguous', name, isBlock); - }, - - simpleSexpr: function simpleSexpr(sexpr) { - var path = sexpr.path; - path.strict = true; - this.accept(path); - this.opcode('resolvePossibleLambda'); - }, - - helperSexpr: function helperSexpr(sexpr, program, inverse) { - var params = this.setupFullMustacheParams(sexpr, program, inverse), - path = sexpr.path, - name = path.parts[0]; - - if (this.options.knownHelpers[name]) { - this.opcode('invokeKnownHelper', params.length, name); - } else if (this.options.knownHelpersOnly) { - throw new _Exception['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr); - } else { - path.strict = true; - path.falsy = true; - - this.accept(path); - this.opcode('invokeHelper', params.length, path.original, _AST['default'].helpers.simpleId(path)); - } - }, - - PathExpression: function PathExpression(path) { - this.addDepth(path.depth); - this.opcode('getContext', path.depth); - - var name = path.parts[0], - scoped = _AST['default'].helpers.scopedId(path), - blockParamId = !path.depth && !scoped && this.blockParamIndex(name); - - if (blockParamId) { - this.opcode('lookupBlockParam', blockParamId, path.parts); - } else if (!name) { - // Context reference, i.e. `{{foo .}}` or `{{foo ..}}` - this.opcode('pushContext'); - } else if (path.data) { - this.options.data = true; - this.opcode('lookupData', path.depth, path.parts, path.strict); - } else { - this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped); - } - }, - - StringLiteral: function StringLiteral(string) { - this.opcode('pushString', string.value); - }, - - NumberLiteral: function NumberLiteral(number) { - this.opcode('pushLiteral', number.value); - }, - - BooleanLiteral: function BooleanLiteral(bool) { - this.opcode('pushLiteral', bool.value); - }, - - UndefinedLiteral: function UndefinedLiteral() { - this.opcode('pushLiteral', 'undefined'); - }, - - NullLiteral: function NullLiteral() { - this.opcode('pushLiteral', 'null'); - }, - - Hash: function Hash(hash) { - var pairs = hash.pairs, - i = 0, - l = pairs.length; - - this.opcode('pushHash'); - - for (; i < l; i++) { - this.pushParam(pairs[i].value); - } - while (i--) { - this.opcode('assignToHash', pairs[i].key); - } - this.opcode('popHash'); - }, - - // HELPERS - opcode: function opcode(name) { - this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc }); - }, - - addDepth: function addDepth(depth) { - if (!depth) { - return; - } - - this.useDepths = true; - }, - - classifySexpr: function classifySexpr(sexpr) { - var isSimple = _AST['default'].helpers.simpleId(sexpr.path); - - var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]); - - // a mustache is an eligible helper if: - // * its id is simple (a single part, not `this` or `..`) - var isHelper = !isBlockParam && _AST['default'].helpers.helperExpression(sexpr); - - // if a mustache is an eligible helper but not a definite - // helper, it is ambiguous, and will be resolved in a later - // pass or at runtime. - var isEligible = !isBlockParam && (isHelper || isSimple); - - // if ambiguous, we can possibly resolve the ambiguity now - // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc. - if (isEligible && !isHelper) { - var _name2 = sexpr.path.parts[0], - options = this.options; - - if (options.knownHelpers[_name2]) { - isHelper = true; - } else if (options.knownHelpersOnly) { - isEligible = false; - } - } - - if (isHelper) { - return 'helper'; - } else if (isEligible) { - return 'ambiguous'; - } else { - return 'simple'; - } - }, - - pushParams: function pushParams(params) { - for (var i = 0, l = params.length; i < l; i++) { - this.pushParam(params[i]); - } - }, - - pushParam: function pushParam(val) { - var value = val.value != null ? val.value : val.original || ''; - - if (this.stringParams) { - if (value.replace) { - value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.'); - } - - if (val.depth) { - this.addDepth(val.depth); - } - this.opcode('getContext', val.depth || 0); - this.opcode('pushStringParam', value, val.type); - - if (val.type === 'SubExpression') { - // SubExpressions get evaluated and passed in - // in string params mode. - this.accept(val); - } - } else { - if (this.trackIds) { - var blockParamIndex = undefined; - if (val.parts && !_AST['default'].helpers.scopedId(val) && !val.depth) { - blockParamIndex = this.blockParamIndex(val.parts[0]); - } - if (blockParamIndex) { - var blockParamChild = val.parts.slice(1).join('.'); - this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild); - } else { - value = val.original || value; - if (value.replace) { - value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, ''); - } - - this.opcode('pushId', val.type, value); - } - } - this.accept(val); - } - }, - - setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) { - var params = sexpr.params; - this.pushParams(params); - - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - - if (sexpr.hash) { - this.accept(sexpr.hash); - } else { - this.opcode('emptyHash', omitEmpty); - } - - return params; - }, - - blockParamIndex: function blockParamIndex(name) { - for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) { - var blockParams = this.options.blockParams[depth], - param = blockParams && _utils.indexOf(blockParams, name); - if (blockParams && param >= 0) { - return [depth, param]; - } - } - } - }; - - function precompile(input, options, env) { - if (input == null || typeof input !== 'string' && input.type !== 'Program') { - throw new _Exception['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input); - } - - options = options || {}; - if (!('data' in options)) { - options.data = true; - } - if (options.compat) { - options.useDepths = true; - } - - var ast = env.parse(input, options), - environment = new env.Compiler().compile(ast, options); - return new env.JavaScriptCompiler().compile(environment, options); - } - - function compile(input, options, env) { - if (options === undefined) options = {}; - - if (input == null || typeof input !== 'string' && input.type !== 'Program') { - throw new _Exception['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input); - } - - if (!('data' in options)) { - options.data = true; - } - if (options.compat) { - options.useDepths = true; - } - - var compiled = undefined; - - function compileInput() { - var ast = env.parse(input, options), - environment = new env.Compiler().compile(ast, options), - templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true); - return env.template(templateSpec); - } - - // Template is only compiled on first use and cached after that point. - function ret(context, execOptions) { - if (!compiled) { - compiled = compileInput(); - } - return compiled.call(this, context, execOptions); - } - ret._setup = function (setupOptions) { - if (!compiled) { - compiled = compileInput(); - } - return compiled._setup(setupOptions); - }; - ret._child = function (i, data, blockParams, depths) { - if (!compiled) { - compiled = compileInput(); - } - return compiled._child(i, data, blockParams, depths); - }; - return ret; - } - - function argEquals(a, b) { - if (a === b) { - return true; - } - - if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) { - for (var i = 0; i < a.length; i++) { - if (!argEquals(a[i], b[i])) { - return false; - } - } - return true; - } - } - - function transformLiteralToPath(sexpr) { - if (!sexpr.path.parts) { - var literal = sexpr.path; - // Casting to string here to make false and 0 literal values play nicely with the rest - // of the system. - sexpr.path = { - type: 'PathExpression', - data: false, - depth: 0, - parts: [literal.original + ''], - original: literal.original + '', - loc: literal.loc - }; - } - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTUEsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQzs7QUFFaEIsV0FBUyxRQUFRLEdBQUcsRUFBRTs7Ozs7OztBQU83QixVQUFRLENBQUMsU0FBUyxHQUFHO0FBQ25CLFlBQVEsRUFBRSxRQUFROztBQUVsQixVQUFNLEVBQUUsZ0JBQVMsS0FBSyxFQUFFO0FBQ3RCLFVBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQzlCLFVBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO0FBQ2hDLGVBQU8sS0FBSyxDQUFDO09BQ2Q7O0FBRUQsV0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QixZQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUN4QixXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxZQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNyRixpQkFBTyxLQUFLLENBQUM7U0FDZDtPQUNGOzs7O0FBSUQsU0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQzNCLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUIsWUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FB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S0FBSyxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3JELFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pDLFlBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzFCLGlCQUFPLEtBQUssQ0FBQztTQUNkO09BQ0Y7QUFDRCxhQUFPLElBQUksQ0FBQztLQUNiO0dBQ0Y7O0FBRUQsV0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7QUFDckMsUUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3JCLFVBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7OztBQUd6QixXQUFLLENBQUMsSUFBSSxHQUFHO0FBQ1gsWUFBSSxFQUFFLGdCQUFnQjtBQUN0QixZQUFJLEVBQUUsS0FBSztBQUNYLGFBQUssRUFBRSxDQUFDO0FBQ1IsYUFBSyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDOUIsZ0JBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUU7QUFDL0IsV0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO09BQ2pCLENBQUM7S0FDSDtHQUNGIiwiZmlsZSI6ImNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbmV3LWNhcCAqL1xuXG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5pbXBvcnQge2lzQXJyYXksIGluZGV4T2Z9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBBU1QgZnJvbSAnLi9hc3QnO1xuXG5jb25zdCBzbGljZSA9IFtdLnNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tcGlsZXIoKSB7fVxuXG4vLyB0aGUgZm91bmRIZWxwZXIgcmVnaXN0ZXIgd2lsbCBkaXNhbWJpZ3VhdGUgaGVscGVyIGxvb2t1cCBmcm9tIGZpbmRpbmcgYVxuLy8gZnVuY3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVzdGFjaGUgY29tcGF0aWJpbGl0eSwgd2hpY2hcbi8vIHJlcXVpcmVzIHRoYXQgY29udGV4dCBmdW5jdGlvbnMgaW4gYmxvY2tzIGFyZSBldmFsdWF0ZWQgYnkgYmxvY2tIZWxwZXJNaXNzaW5nLFxuLy8gYW5kIHRoZW4gcHJvY2VlZCBhcyBpZiB0aGUgcmVzdWx0aW5nIHZhbHVlIHdhcyBwcm92aWRlZCB0byBibG9ja0hlbHBlck1pc3NpbmcuXG5cbkNvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgY29tcGlsZXI6IENvbXBpbGVyLFxuXG4gIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5vcGNvZGVzLmxlbmd0aDtcbiAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5ndGggIT09IGxlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sXG4gICAgICAgICAgb3RoZXJPcGNvZGUgPSBvdGhlci5vcGNvZGVzW2ldO1xuICAgICAgaWYgKG9wY29kZS5vcGNvZGUgIT09IG90aGVyT3Bjb2RlLm9wY29kZSB8fCAhYXJnRXF1YWxzKG9wY29kZS5hcmdzLCBvdGhlck9wY29kZS5hcmdzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2Uga25vdyB0aGF0IGxlbmd0aCBpcyB0aGUgc2FtZSBiZXR3ZWVuIHRoZSB0d28gYXJyYXlzIGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0bHkgdGllZFxuICAgIC8vIHRvIHRoZSBvcGNvZGUgYmVoYXZpb3IgYWJvdmUuXG4gICAgbGVuID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKCF0aGlzLmNoaWxkcmVuW2ldLmVxdWFscyhvdGhlci5jaGlsZHJlbltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG4gIGd1aWQ6IDAsXG5cbiAgY29tcGlsZTogZnVuY3Rpb24ocHJvZ3JhbSwgb3B0aW9ucykge1xuICAgIHRoaXMuc291cmNlTm9kZSA9IFtdO1xuICAgIHRoaXMub3Bjb2RlcyA9IFtdO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc3RyaW5nUGFyYW1zID0gb3B0aW9ucy5zdHJpbmdQYXJhbXM7XG4gICAgdGhpcy50cmFja0lkcyA9IG9wdGlvbnMudHJhY2tJZHM7XG5cbiAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gb3B0aW9ucy5ibG9ja1BhcmFtcyB8fCBbXTtcblxuICAgIC8vIFRoZXNlIGNoYW5nZXMgd2lsbCBwcm9wYWdhdGUgdG8gdGhlIG90aGVyIGNvbXBpbGVyIGNvbXBvbmVudHNcbiAgICBsZXQga25vd25IZWxwZXJzID0gb3B0aW9ucy5rbm93bkhlbHBlcnM7XG4gICAgb3B0aW9ucy5rbm93bkhlbHBlcnMgPSB7XG4gICAgICAnaGVscGVyTWlzc2luZyc6IHRydWUsXG4gICAgICAnYmxvY2tIZWxwZXJNaXNzaW5nJzogdHJ1ZSxcbiAgICAgICdlYWNoJzogdHJ1ZSxcbiAgICAgICdpZic6IHRydWUsXG4gICAgICAndW5sZXNzJzogdHJ1ZSxcbiAgICAgICd3aXRoJzogdHJ1ZSxcbiAgICAgICdsb2cnOiB0cnVlLFxuICAgICAgJ2xvb2t1cCc6IHRydWVcbiAgICB9O1xuICAgIGlmIChrbm93bkhlbHBlcnMpIHtcbiAgICAgIGZvciAobGV0IG5hbWUgaW4ga25vd25IZWxwZXJzKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChuYW1lIGluIGtub3duSGVscGVycykge1xuICAgICAgICAgIG9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdID0ga25vd25IZWxwZXJzW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWNjZXB0KHByb2dyYW0pO1xuICB9LFxuXG4gIGNvbXBpbGVQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgbGV0IGNoaWxkQ29tcGlsZXIgPSBuZXcgdGhpcy5jb21waWxlcigpLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcbiAgICAgICAgcmVzdWx0ID0gY2hpbGRDb21waWxlci5jb21waWxlKHByb2dyYW0sIHRoaXMub3B0aW9ucyksXG4gICAgICAgIGd1aWQgPSB0aGlzLmd1aWQrKztcblxuICAgIHRoaXMudXNlUGFydGlhbCA9IHRoaXMudXNlUGFydGlhbCB8fCByZXN1bHQudXNlUGFydGlhbDtcblxuICAgIHRoaXMuY2hpbGRyZW5bZ3VpZF0gPSByZXN1bHQ7XG4gICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCByZXN1bHQudXNlRGVwdGhzO1xuXG4gICAgcmV0dXJuIGd1aWQ7XG4gIH0sXG5cbiAgYWNjZXB0OiBmdW5jdGlvbihub2RlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IFNhbml0eSBjb2RlICovXG4gICAgaWYgKCF0aGlzW25vZGUudHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdHlwZTogJyArIG5vZGUudHlwZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zb3VyY2VOb2RlLnVuc2hpZnQobm9kZSk7XG4gICAgbGV0IHJldCA9IHRoaXNbbm9kZS50eXBlXShub2RlKTtcbiAgICB0aGlzLnNvdXJjZU5vZGUuc2hpZnQoKTtcbiAgICByZXR1cm4gcmV0O1xuICB9LFxuXG4gIFByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICB0aGlzLm9wdGlvbnMuYmxvY2tQYXJhbXMudW5zaGlmdChwcm9ncmFtLmJsb2NrUGFyYW1zKTtcblxuICAgIGxldCBib2R5ID0gcHJvZ3JhbS5ib2R5LFxuICAgICAgICBib2R5TGVuZ3RoID0gYm9keS5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBib2R5TGVuZ3RoOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0KGJvZHlbaV0pO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy5zaGlmdCgpO1xuXG4gICAgdGhpcy5pc1NpbXBsZSA9IGJvZHlMZW5ndGggPT09IDE7XG4gICAgdGhpcy5ibG9ja1BhcmFtcyA9IHByb2dyYW0uYmxvY2tQYXJhbXMgPyBwcm9ncmFtLmJsb2NrUGFyYW1zLmxlbmd0aCA6IDA7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24oYmxvY2spIHtcbiAgICB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKGJsb2NrKTtcblxuICAgIGxldCBwcm9ncmFtID0gYmxvY2sucHJvZ3JhbSxcbiAgICAgICAgaW52ZXJzZSA9IGJsb2NrLmludmVyc2U7XG5cbiAgICBwcm9ncmFtID0gcHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKHByb2dyYW0pO1xuICAgIGludmVyc2UgPSBpbnZlcnNlICYmIHRoaXMuY29tcGlsZVByb2dyYW0oaW52ZXJzZSk7XG5cbiAgICBsZXQgdHlwZSA9IHRoaXMuY2xhc3NpZnlTZXhwcihibG9jayk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2hlbHBlcicpIHtcbiAgICAgIHRoaXMuaGVscGVyU2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NpbXBsZScpIHtcbiAgICAgIHRoaXMuc2ltcGxlU2V4cHIoYmxvY2spO1xuXG4gICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVyTWlzc2luZ2BcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG4gICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7XG4gICAgICB0aGlzLm9wY29kZSgnYmxvY2tWYWx1ZScsIGJsb2NrLnBhdGgub3JpZ2luYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFtYmlndW91c1NleHByKGJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlKTtcblxuICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0b1xuICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgXG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FtYmlndW91c0Jsb2NrVmFsdWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG5cbiAgRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb2dyYW0gPSBkZWNvcmF0b3IucHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKGRlY29yYXRvci5wcm9ncmFtKTtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhkZWNvcmF0b3IsIHByb2dyYW0sIHVuZGVmaW5lZCksXG4gICAgICAgIHBhdGggPSBkZWNvcmF0b3IucGF0aDtcblxuICAgIHRoaXMudXNlRGVjb3JhdG9ycyA9IHRydWU7XG4gICAgdGhpcy5vcGNvZGUoJ3JlZ2lzdGVyRGVjb3JhdG9yJywgcGFyYW1zLmxlbmd0aCwgcGF0aC5vcmlnaW5hbCk7XG4gIH0sXG5cbiAgUGFydGlhbFN0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbCkge1xuICAgIHRoaXMudXNlUGFydGlhbCA9IHRydWU7XG5cbiAgICBsZXQgcHJvZ3JhbSA9IHBhcnRpYWwucHJvZ3JhbTtcbiAgICBpZiAocHJvZ3JhbSkge1xuICAgICAgcHJvZ3JhbSA9IHRoaXMuY29tcGlsZVByb2dyYW0ocGFydGlhbC5wcm9ncmFtKTtcbiAgICB9XG5cbiAgICBsZXQgcGFyYW1zID0gcGFydGlhbC5wYXJhbXM7XG4gICAgaWYgKHBhcmFtcy5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbnN1cHBvcnRlZCBudW1iZXIgb2YgcGFydGlhbCBhcmd1bWVudHM6ICcgKyBwYXJhbXMubGVuZ3RoLCBwYXJ0aWFsKTtcbiAgICB9IGVsc2UgaWYgKCFwYXJhbXMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmV4cGxpY2l0UGFydGlhbENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgJ3VuZGVmaW5lZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1zLnB1c2goe3R5cGU6ICdQYXRoRXhwcmVzc2lvbicsIHBhcnRzOiBbXSwgZGVwdGg6IDB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcGFydGlhbE5hbWUgPSBwYXJ0aWFsLm5hbWUub3JpZ2luYWwsXG4gICAgICAgIGlzRHluYW1pYyA9IHBhcnRpYWwubmFtZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbic7XG4gICAgaWYgKGlzRHluYW1pYykge1xuICAgICAgdGhpcy5hY2NlcHQocGFydGlhbC5uYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKHBhcnRpYWwsIHByb2dyYW0sIHVuZGVmaW5lZCwgdHJ1ZSk7XG5cbiAgICBsZXQgaW5kZW50ID0gcGFydGlhbC5pbmRlbnQgfHwgJyc7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5wcmV2ZW50SW5kZW50ICYmIGluZGVudCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZENvbnRlbnQnLCBpbmRlbnQpO1xuICAgICAgaW5kZW50ID0gJyc7XG4gICAgfVxuXG4gICAgdGhpcy5vcGNvZGUoJ2ludm9rZVBhcnRpYWwnLCBpc0R5bmFtaWMsIHBhcnRpYWxOYW1lLCBpbmRlbnQpO1xuICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTtcbiAgfSxcbiAgUGFydGlhbEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihwYXJ0aWFsQmxvY2spIHtcbiAgICB0aGlzLlBhcnRpYWxTdGF0ZW1lbnQocGFydGlhbEJsb2NrKTtcbiAgfSxcblxuICBNdXN0YWNoZVN0YXRlbWVudDogZnVuY3Rpb24obXVzdGFjaGUpIHtcbiAgICB0aGlzLlN1YkV4cHJlc3Npb24obXVzdGFjaGUpO1xuXG4gICAgaWYgKG11c3RhY2hlLmVzY2FwZWQgJiYgIXRoaXMub3B0aW9ucy5ub0VzY2FwZSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZEVzY2FwZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZCcpO1xuICAgIH1cbiAgfSxcbiAgRGVjb3JhdG9yKGRlY29yYXRvcikge1xuICAgIHRoaXMuRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKTtcbiAgfSxcblxuXG4gIENvbnRlbnRTdGF0ZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgICBpZiAoY29udGVudC52YWx1ZSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2FwcGVuZENvbnRlbnQnLCBjb250ZW50LnZhbHVlKTtcbiAgICB9XG4gIH0sXG5cbiAgQ29tbWVudFN0YXRlbWVudDogZnVuY3Rpb24oKSB7fSxcblxuICBTdWJFeHByZXNzaW9uOiBmdW5jdGlvbihzZXhwcikge1xuICAgIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoc2V4cHIpO1xuICAgIGxldCB0eXBlID0gdGhpcy5jbGFzc2lmeVNleHByKHNleHByKTtcblxuICAgIGlmICh0eXBlID09PSAnc2ltcGxlJykge1xuICAgICAgdGhpcy5zaW1wbGVTZXhwcihzZXhwcik7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnaGVscGVyJykge1xuICAgICAgdGhpcy5oZWxwZXJTZXhwcihzZXhwcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYW1iaWd1b3VzU2V4cHIoc2V4cHIpO1xuICAgIH1cbiAgfSxcbiAgYW1iaWd1b3VzU2V4cHI6IGZ1bmN0aW9uKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSB7XG4gICAgbGV0IHBhdGggPSBzZXhwci5wYXRoLFxuICAgICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXSxcbiAgICAgICAgaXNCbG9jayA9IHByb2dyYW0gIT0gbnVsbCB8fCBpbnZlcnNlICE9IG51bGw7XG5cbiAgICB0aGlzLm9wY29kZSgnZ2V0Q29udGV4dCcsIHBhdGguZGVwdGgpO1xuXG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgcHJvZ3JhbSk7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG5cbiAgICBwYXRoLnN0cmljdCA9IHRydWU7XG4gICAgdGhpcy5hY2NlcHQocGF0aCk7XG5cbiAgICB0aGlzLm9wY29kZSgnaW52b2tlQW1iaWd1b3VzJywgbmFtZSwgaXNCbG9jayk7XG4gIH0sXG5cbiAgc2ltcGxlU2V4cHI6IGZ1bmN0aW9uKHNleHByKSB7XG4gICAgbGV0IHBhdGggPSBzZXhwci5wYXRoO1xuICAgIHBhdGguc3RyaWN0ID0gdHJ1ZTtcbiAgICB0aGlzLmFjY2VwdChwYXRoKTtcbiAgICB0aGlzLm9wY29kZSgncmVzb2x2ZVBvc3NpYmxlTGFtYmRhJyk7XG4gIH0sXG5cbiAgaGVscGVyU2V4cHI6IGZ1bmN0aW9uKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSB7XG4gICAgbGV0IHBhcmFtcyA9IHRoaXMuc2V0dXBGdWxsTXVzdGFjaGVQYXJhbXMoc2V4cHIsIHByb2dyYW0sIGludmVyc2UpLFxuICAgICAgICBwYXRoID0gc2V4cHIucGF0aCxcbiAgICAgICAgbmFtZSA9IHBhdGgucGFydHNbMF07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUtub3duSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignWW91IHNwZWNpZmllZCBrbm93bkhlbHBlcnNPbmx5LCBidXQgdXNlZCB0aGUgdW5rbm93biBoZWxwZXIgJyArIG5hbWUsIHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgICAgcGF0aC5mYWxzeSA9IHRydWU7XG5cbiAgICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUhlbHBlcicsIHBhcmFtcy5sZW5ndGgsIHBhdGgub3JpZ2luYWwsIEFTVC5oZWxwZXJzLnNpbXBsZUlkKHBhdGgpKTtcbiAgICB9XG4gIH0sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICB0aGlzLmFkZERlcHRoKHBhdGguZGVwdGgpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7XG5cbiAgICBsZXQgbmFtZSA9IHBhdGgucGFydHNbMF0sXG4gICAgICAgIHNjb3BlZCA9IEFTVC5oZWxwZXJzLnNjb3BlZElkKHBhdGgpLFxuICAgICAgICBibG9ja1BhcmFtSWQgPSAhcGF0aC5kZXB0aCAmJiAhc2NvcGVkICYmIHRoaXMuYmxvY2tQYXJhbUluZGV4KG5hbWUpO1xuXG4gICAgaWYgKGJsb2NrUGFyYW1JZCkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cEJsb2NrUGFyYW0nLCBibG9ja1BhcmFtSWQsIHBhdGgucGFydHMpO1xuICAgIH0gZWxzZSBpZiAoIW5hbWUpIHtcbiAgICAgIC8vIENvbnRleHQgcmVmZXJlbmNlLCBpLmUuIGB7e2ZvbyAufX1gIG9yIGB7e2ZvbyAuLn19YFxuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hDb250ZXh0Jyk7XG4gICAgfSBlbHNlIGlmIChwYXRoLmRhdGEpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5kYXRhID0gdHJ1ZTtcbiAgICAgIHRoaXMub3Bjb2RlKCdsb29rdXBEYXRhJywgcGF0aC5kZXB0aCwgcGF0aC5wYXJ0cywgcGF0aC5zdHJpY3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wY29kZSgnbG9va3VwT25Db250ZXh0JywgcGF0aC5wYXJ0cywgcGF0aC5mYWxzeSwgcGF0aC5zdHJpY3QsIHNjb3BlZCk7XG4gICAgfVxuICB9LFxuXG4gIFN0cmluZ0xpdGVyYWw6IGZ1bmN0aW9uKHN0cmluZykge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoU3RyaW5nJywgc3RyaW5nLnZhbHVlKTtcbiAgfSxcblxuICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbihudW1iZXIpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBudW1iZXIudmFsdWUpO1xuICB9LFxuXG4gIEJvb2xlYW5MaXRlcmFsOiBmdW5jdGlvbihib29sKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgYm9vbC52YWx1ZSk7XG4gIH0sXG5cbiAgVW5kZWZpbmVkTGl0ZXJhbDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hMaXRlcmFsJywgJ3VuZGVmaW5lZCcpO1xuICB9LFxuXG4gIE51bGxMaXRlcmFsOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAnbnVsbCcpO1xuICB9LFxuXG4gIEhhc2g6IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzLFxuICAgICAgICBpID0gMCxcbiAgICAgICAgbCA9IHBhaXJzLmxlbmd0aDtcblxuICAgIHRoaXMub3Bjb2RlKCdwdXNoSGFzaCcpO1xuXG4gICAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMucHVzaFBhcmFtKHBhaXJzW2ldLnZhbHVlKTtcbiAgICB9XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2Fzc2lnblRvSGFzaCcsIHBhaXJzW2ldLmtleSk7XG4gICAgfVxuICAgIHRoaXMub3Bjb2RlKCdwb3BIYXNoJyk7XG4gIH0sXG5cbiAgLy8gSEVMUEVSU1xuICBvcGNvZGU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB0aGlzLm9wY29kZXMucHVzaCh7IG9wY29kZTogbmFtZSwgYXJnczogc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLCBsb2M6IHRoaXMuc291cmNlTm9kZVswXS5sb2MgfSk7XG4gIH0sXG5cbiAgYWRkRGVwdGg6IGZ1bmN0aW9uKGRlcHRoKSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfSxcblxuICBjbGFzc2lmeVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBpc1NpbXBsZSA9IEFTVC5oZWxwZXJzLnNpbXBsZUlkKHNleHByLnBhdGgpO1xuXG4gICAgbGV0IGlzQmxvY2tQYXJhbSA9IGlzU2ltcGxlICYmICEhdGhpcy5ibG9ja1BhcmFtSW5kZXgoc2V4cHIucGF0aC5wYXJ0c1swXSk7XG5cbiAgICAvLyBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBpZjpcbiAgICAvLyAqIGl0cyBpZCBpcyBzaW1wbGUgKGEgc2luZ2xlIHBhcnQsIG5vdCBgdGhpc2Agb3IgYC4uYClcbiAgICBsZXQgaXNIZWxwZXIgPSAhaXNCbG9ja1BhcmFtICYmIEFTVC5oZWxwZXJzLmhlbHBlckV4cHJlc3Npb24oc2V4cHIpO1xuXG4gICAgLy8gaWYgYSBtdXN0YWNoZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgYnV0IG5vdCBhIGRlZmluaXRlXG4gICAgLy8gaGVscGVyLCBpdCBpcyBhbWJpZ3VvdXMsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGluIGEgbGF0ZXJcbiAgICAvLyBwYXNzIG9yIGF0IHJ1bnRpbWUuXG4gICAgbGV0IGlzRWxpZ2libGUgPSAhaXNCbG9ja1BhcmFtICYmIChpc0hlbHBlciB8fCBpc1NpbXBsZSk7XG5cbiAgICAvLyBpZiBhbWJpZ3VvdXMsIHdlIGNhbiBwb3NzaWJseSByZXNvbHZlIHRoZSBhbWJpZ3VpdHkgbm93XG4gICAgLy8gQW4gZWxpZ2libGUgaGVscGVyIGlzIG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb21wbGV4IHBhdGgsIGkuZS4gYHRoaXMuZm9vYCwgYC4uL2Zvb2AgZXRjLlxuICAgIGlmIChpc0VsaWdpYmxlICYmICFpc0hlbHBlcikge1xuICAgICAgbGV0IG5hbWUgPSBzZXhwci5wYXRoLnBhcnRzWzBdLFxuICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgIGlmIChvcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgICBpc0hlbHBlciA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgICBpc0VsaWdpYmxlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzSGVscGVyKSB7XG4gICAgICByZXR1cm4gJ2hlbHBlcic7XG4gICAgfSBlbHNlIGlmIChpc0VsaWdpYmxlKSB7XG4gICAgICByZXR1cm4gJ2FtYmlndW91cyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnc2ltcGxlJztcbiAgICB9XG4gIH0sXG5cbiAgcHVzaFBhcmFtczogZnVuY3Rpb24ocGFyYW1zKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLnB1c2hQYXJhbShwYXJhbXNbaV0pO1xuICAgIH1cbiAgfSxcblxuICBwdXNoUGFyYW06IGZ1bmN0aW9uKHZhbCkge1xuICAgIGxldCB2YWx1ZSA9IHZhbC52YWx1ZSAhPSBudWxsID8gdmFsLnZhbHVlIDogdmFsLm9yaWdpbmFsIHx8ICcnO1xuXG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgICAucmVwbGFjZSgvXihcXC4/XFwuXFwvKSovZywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvL2csICcuJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWwuZGVwdGgpIHtcbiAgICAgICAgdGhpcy5hZGREZXB0aCh2YWwuZGVwdGgpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCB2YWwuZGVwdGggfHwgMCk7XG4gICAgICB0aGlzLm9wY29kZSgncHVzaFN0cmluZ1BhcmFtJywgdmFsdWUsIHZhbC50eXBlKTtcblxuICAgICAgaWYgKHZhbC50eXBlID09PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgICAgLy8gU3ViRXhwcmVzc2lvbnMgZ2V0IGV2YWx1YXRlZCBhbmQgcGFzc2VkIGluXG4gICAgICAgIC8vIGluIHN0cmluZyBwYXJhbXMgbW9kZS5cbiAgICAgICAgdGhpcy5hY2NlcHQodmFsKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgbGV0IGJsb2NrUGFyYW1JbmRleDtcbiAgICAgICAgaWYgKHZhbC5wYXJ0cyAmJiAhQVNULmhlbHBlcnMuc2NvcGVkSWQodmFsKSAmJiAhdmFsLmRlcHRoKSB7XG4gICAgICAgICAgIGJsb2NrUGFyYW1JbmRleCA9IHRoaXMuYmxvY2tQYXJhbUluZGV4KHZhbC5wYXJ0c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrUGFyYW1JbmRleCkge1xuICAgICAgICAgIGxldCBibG9ja1BhcmFtQ2hpbGQgPSB2YWwucGFydHMuc2xpY2UoMSkuam9pbignLicpO1xuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCAnQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JbmRleCwgYmxvY2tQYXJhbUNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbC5vcmlnaW5hbCB8fCB2YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9edGhpcyg/OlxcLnwkKS8sICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9eXFwuXFwvLywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC4kLywgJycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCB2YWwudHlwZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjY2VwdCh2YWwpO1xuICAgIH1cbiAgfSxcblxuICBzZXR1cEZ1bGxNdXN0YWNoZVBhcmFtczogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UsIG9taXRFbXB0eSkge1xuICAgIGxldCBwYXJhbXMgPSBzZXhwci5wYXJhbXM7XG4gICAgdGhpcy5wdXNoUGFyYW1zKHBhcmFtcyk7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcblxuICAgIGlmIChzZXhwci5oYXNoKSB7XG4gICAgICB0aGlzLmFjY2VwdChzZXhwci5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcsIG9taXRFbXB0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfSxcblxuICBibG9ja1BhcmFtSW5kZXg6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBmb3IgKGxldCBkZXB0aCA9IDAsIGxlbiA9IHRoaXMub3B0aW9ucy5ibG9ja1BhcmFtcy5sZW5ndGg7IGRlcHRoIDwgbGVuOyBkZXB0aCsrKSB7XG4gICAgICBsZXQgYmxvY2tQYXJhbXMgPSB0aGlzLm9wdGlvbnMuYmxvY2tQYXJhbXNbZGVwdGhdLFxuICAgICAgICAgIHBhcmFtID0gYmxvY2tQYXJhbXMgJiYgaW5kZXhPZihibG9ja1BhcmFtcywgbmFtZSk7XG4gICAgICBpZiAoYmxvY2tQYXJhbXMgJiYgcGFyYW0gPj0gMCkge1xuICAgICAgICByZXR1cm4gW2RlcHRoLCBwYXJhbV07XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlY29tcGlsZShpbnB1dCwgb3B0aW9ucywgZW52KSB7XG4gIGlmIChpbnB1dCA9PSBudWxsIHx8ICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LnR5cGUgIT09ICdQcm9ncmFtJykpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdZb3UgbXVzdCBwYXNzIGEgc3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMucHJlY29tcGlsZS4gWW91IHBhc3NlZCAnICsgaW5wdXQpO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGlmICghKCdkYXRhJyBpbiBvcHRpb25zKSkge1xuICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7XG4gIH1cbiAgaWYgKG9wdGlvbnMuY29tcGF0KSB7XG4gICAgb3B0aW9ucy51c2VEZXB0aHMgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGFzdCA9IGVudi5wYXJzZShpbnB1dCwgb3B0aW9ucyksXG4gICAgICBlbnZpcm9ubWVudCA9IG5ldyBlbnYuQ29tcGlsZXIoKS5jb21waWxlKGFzdCwgb3B0aW9ucyk7XG4gIHJldHVybiBuZXcgZW52LkphdmFTY3JpcHRDb21waWxlcigpLmNvbXBpbGUoZW52aXJvbm1lbnQsIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZShpbnB1dCwgb3B0aW9ucyA9IHt9LCBlbnYpIHtcbiAgaWYgKGlucHV0ID09IG51bGwgfHwgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgJiYgaW5wdXQudHlwZSAhPT0gJ1Byb2dyYW0nKSkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1lvdSBtdXN0IHBhc3MgYSBzdHJpbmcgb3IgSGFuZGxlYmFycyBBU1QgdG8gSGFuZGxlYmFycy5jb21waWxlLiBZb3UgcGFzc2VkICcgKyBpbnB1dCk7XG4gIH1cblxuICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHtcbiAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbXBhdCkge1xuICAgIG9wdGlvbnMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBjb21waWxlZDtcblxuICBmdW5jdGlvbiBjb21waWxlSW5wdXQoKSB7XG4gICAgbGV0IGFzdCA9IGVudi5wYXJzZShpbnB1dCwgb3B0aW9ucyksXG4gICAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKSxcbiAgICAgICAgdGVtcGxhdGVTcGVjID0gbmV3IGVudi5KYXZhU2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGVudmlyb25tZW50LCBvcHRpb25zLCB1bmRlZmluZWQsIHRydWUpO1xuICAgIHJldHVybiBlbnYudGVtcGxhdGUodGVtcGxhdGVTcGVjKTtcbiAgfVxuXG4gIC8vIFRlbXBsYXRlIGlzIG9ubHkgY29tcGlsZWQgb24gZmlyc3QgdXNlIGFuZCBjYWNoZWQgYWZ0ZXIgdGhhdCBwb2ludC5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIGV4ZWNPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLmNhbGwodGhpcywgY29udGV4dCwgZXhlY09wdGlvbnMpO1xuICB9XG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihzZXR1cE9wdGlvbnMpIHtcbiAgICBpZiAoIWNvbXBpbGVkKSB7XG4gICAgICBjb21waWxlZCA9IGNvbXBpbGVJbnB1dCgpO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGlsZWQuX3NldHVwKHNldHVwT3B0aW9ucyk7XG4gIH07XG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLl9jaGlsZChpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gYXJnRXF1YWxzKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGEpICYmIGlzQXJyYXkoYikgJiYgYS5sZW5ndGggPT09IGIubGVuZ3RoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWFyZ0VxdWFscyhhW2ldLCBiW2ldKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoc2V4cHIpIHtcbiAgaWYgKCFzZXhwci5wYXRoLnBhcnRzKSB7XG4gICAgbGV0IGxpdGVyYWwgPSBzZXhwci5wYXRoO1xuICAgIC8vIENhc3RpbmcgdG8gc3RyaW5nIGhlcmUgdG8gbWFrZSBmYWxzZSBhbmQgMCBsaXRlcmFsIHZhbHVlcyBwbGF5IG5pY2VseSB3aXRoIHRoZSByZXN0XG4gICAgLy8gb2YgdGhlIHN5c3RlbS5cbiAgICBzZXhwci5wYXRoID0ge1xuICAgICAgdHlwZTogJ1BhdGhFeHByZXNzaW9uJyxcbiAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgZGVwdGg6IDAsXG4gICAgICBwYXJ0czogW2xpdGVyYWwub3JpZ2luYWwgKyAnJ10sXG4gICAgICBvcmlnaW5hbDogbGl0ZXJhbC5vcmlnaW5hbCArICcnLFxuICAgICAgbG9jOiBsaXRlcmFsLmxvY1xuICAgIH07XG4gIH1cbn1cbiJdfQ== -; -define('handlebars/compiler/code-gen',['exports', 'module', '../utils'], function (exports, module, _utils) { - /* global define */ - 'use strict'; - - var SourceNode = undefined; - - try { - /* istanbul ignore next */ - if (typeof define !== 'function' || !define.amd) { - // We don't support this in AMD environments. For these environments, we asusme that - // they are running on the browser and thus have no need for the source-map library. - var SourceMap = require('source-map'); - SourceNode = SourceMap.SourceNode; - } - } catch (err) {} - /* NOP */ - - /* istanbul ignore if: tested but not covered in istanbul due to dist build */ - if (!SourceNode) { - SourceNode = function (line, column, srcFile, chunks) { - this.src = ''; - if (chunks) { - this.add(chunks); - } - }; - /* istanbul ignore next */ - SourceNode.prototype = { - add: function add(chunks) { - if (_utils.isArray(chunks)) { - chunks = chunks.join(''); - } - this.src += chunks; - }, - prepend: function prepend(chunks) { - if (_utils.isArray(chunks)) { - chunks = chunks.join(''); - } - this.src = chunks + this.src; - }, - toStringWithSourceMap: function toStringWithSourceMap() { - return { code: this.toString() }; - }, - toString: function toString() { - return this.src; - } - }; - } - - function castChunk(chunk, codeGen, loc) { - if (_utils.isArray(chunk)) { - var ret = []; - - for (var i = 0, len = chunk.length; i < len; i++) { - ret.push(codeGen.wrap(chunk[i], loc)); - } - return ret; - } else if (typeof chunk === 'boolean' || typeof chunk === 'number') { - // Handle primitives that the SourceNode will throw up on - return chunk + ''; - } - return chunk; - } - - function CodeGen(srcFile) { - this.srcFile = srcFile; - this.source = []; - } - - CodeGen.prototype = { - isEmpty: function isEmpty() { - return !this.source.length; - }, - prepend: function prepend(source, loc) { - this.source.unshift(this.wrap(source, loc)); - }, - push: function push(source, loc) { - this.source.push(this.wrap(source, loc)); - }, - - merge: function merge() { - var source = this.empty(); - this.each(function (line) { - source.add([' ', line, '\n']); - }); - return source; - }, - - each: function each(iter) { - for (var i = 0, len = this.source.length; i < len; i++) { - iter(this.source[i]); - } - }, - - empty: function empty() { - var loc = this.currentLocation || { start: {} }; - return new SourceNode(loc.start.line, loc.start.column, this.srcFile); - }, - wrap: function wrap(chunk) { - var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1]; - - if (chunk instanceof SourceNode) { - return chunk; - } - - chunk = castChunk(chunk, this, loc); - - return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk); - }, - - functionCall: function functionCall(fn, type, params) { - params = this.generateList(params); - return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']); - }, - - quotedString: function quotedString(str) { - return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4 - .replace(/\u2029/g, '\\u2029') + '"'; - }, - - objectLiteral: function objectLiteral(obj) { - var pairs = []; - - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - var value = castChunk(obj[key], this); - if (value !== 'undefined') { - pairs.push([this.quotedString(key), ':', value]); - } - } - } - - var ret = this.generateList(pairs); - ret.prepend('{'); - ret.add('}'); - return ret; - }, - - generateList: function generateList(entries) { - var ret = this.empty(); - - for (var i = 0, len = entries.length; i < len; i++) { - if (i) { - ret.add(','); - } - - ret.add(castChunk(entries[i], this)); - } - - return ret; - }, - - generateArray: function generateArray(entries) { - var ret = this.generateList(entries); - ret.prepend('['); - ret.add(']'); - - return ret; - } - }; - - module.exports = CodeGen; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvZGUtZ2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFHQSxNQUFJLFVBQVUsWUFBQSxDQUFDOztBQUVmLE1BQUk7O0FBRUYsUUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFOzs7QUFHL0MsVUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLGdCQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztLQUNuQztHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUUsRUFFYjs7OztBQUFBLEFBR0QsTUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNmLGNBQVUsR0FBRyxVQUFTLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUNuRCxVQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNkLFVBQUksTUFBTSxFQUFFO0FBQ1YsWUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztPQUNsQjtLQUNGLENBQUM7O0FBRUYsY0FBVSxDQUFDLFNBQVMsR0FBRztBQUNyQixTQUFHLEVBQUUsYUFBUyxNQUFNLEVBQUU7QUFDcEIsWUFBSSxPQTNCRixPQUFPLENBMkJHLE1BQU0sQ0FBQyxFQUFFO0FBQ25CLGdCQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUMxQjtBQUNELFlBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDO09BQ3BCO0FBQ0QsYUFBTyxFQUFFLGlCQUFTLE1BQU0sRUFBRTtBQUN4QixZQUFJLE9BakNGLE9BQU8sQ0FpQ0csTUFBTSxDQUFDLEVBQUU7QUFDbkIsZ0JBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQzFCO0FBQ0QsWUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFD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QUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDckMsU0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixTQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUViLGFBQU8sR0FBRyxDQUFDO0tBQ1o7R0FDRixDQUFDOzttQkFFYSxPQUFPIiwiZmlsZSI6ImNvZGUtZ2VuLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGRlZmluZSAqL1xuaW1wb3J0IHtpc0FycmF5fSBmcm9tICcuLi91dGlscyc7XG5cbmxldCBTb3VyY2VOb2RlO1xuXG50cnkge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ2Z1bmN0aW9uJyB8fCAhZGVmaW5lLmFtZCkge1xuICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgdGhpcyBpbiBBTUQgZW52aXJvbm1lbnRzLiBGb3IgdGhlc2UgZW52aXJvbm1lbnRzLCB3ZSBhc3VzbWUgdGhhdFxuICAgIC8vIHRoZXkgYXJlIHJ1bm5pbmcgb24gdGhlIGJyb3dzZXIgYW5kIHRodXMgaGF2ZSBubyBuZWVkIGZvciB0aGUgc291cmNlLW1hcCBsaWJyYXJ5LlxuICAgIGxldCBTb3VyY2VNYXAgPSByZXF1aXJlKCdzb3VyY2UtbWFwJyk7XG4gICAgU291cmNlTm9kZSA9IFNvdXJjZU1hcC5Tb3VyY2VOb2RlO1xuICB9XG59IGNhdGNoIChlcnIpIHtcbiAgLyogTk9QICovXG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBpZjogdGVzdGVkIGJ1dCBub3QgY292ZXJlZCBpbiBpc3RhbmJ1bCBkdWUgdG8gZGlzdCBidWlsZCAgKi9cbmlmICghU291cmNlTm9kZSkge1xuICBTb3VyY2VOb2RlID0gZnVuY3Rpb24obGluZSwgY29sdW1uLCBzcmNGaWxlLCBjaHVua3MpIHtcbiAgICB0aGlzLnNyYyA9ICcnO1xuICAgIGlmIChjaHVua3MpIHtcbiAgICAgIHRoaXMuYWRkKGNodW5rcyk7XG4gICAgfVxuICB9O1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBTb3VyY2VOb2RlLnByb3RvdHlwZSA9IHtcbiAgICBhZGQ6IGZ1bmN0aW9uKGNodW5rcykge1xuICAgICAgaWYgKGlzQXJyYXkoY2h1bmtzKSkge1xuICAgICAgICBjaHVua3MgPSBjaHVua3Muam9pbignJyk7XG4gICAgICB9XG4gICAgICB0aGlzLnNyYyArPSBjaHVua3M7XG4gICAgfSxcbiAgICBwcmVwZW5kOiBmdW5jdGlvbihjaHVua3MpIHtcbiAgICAgIGlmIChpc0FycmF5KGNodW5rcykpIHtcbiAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcmMgPSBjaHVua3MgKyB0aGlzLnNyYztcbiAgICB9LFxuICAgIHRvU3RyaW5nV2l0aFNvdXJjZU1hcDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge2NvZGU6IHRoaXMudG9TdHJpbmcoKX07XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuICB9O1xufVxuXG5cbmZ1bmN0aW9uIGNhc3RDaHVuayhjaHVuaywgY29kZUdlbiwgbG9jKSB7XG4gIGlmIChpc0FycmF5KGNodW5rKSkge1xuICAgIGxldCByZXQgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjaHVuay5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgcmV0LnB1c2goY29kZUdlbi53cmFwKGNodW5rW2ldLCBsb2MpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfSBlbHNlIGlmICh0eXBlb2YgY2h1bmsgPT09ICdib29sZWFuJyB8fCB0eXBlb2YgY2h1bmsgPT09ICdudW1iZXInKSB7XG4gICAgLy8gSGFuZGxlIHByaW1pdGl2ZXMgdGhhdCB0aGUgU291cmNlTm9kZSB3aWxsIHRocm93IHVwIG9uXG4gICAgcmV0dXJuIGNodW5rICsgJyc7XG4gIH1cbiAgcmV0dXJuIGNodW5rO1xufVxuXG5cbmZ1bmN0aW9uIENvZGVHZW4oc3JjRmlsZSkge1xuICB0aGlzLnNyY0ZpbGUgPSBzcmNGaWxlO1xuICB0aGlzLnNvdXJjZSA9IFtdO1xufVxuXG5Db2RlR2VuLnByb3RvdHlwZSA9IHtcbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gIXRoaXMuc291cmNlLmxlbmd0aDtcbiAgfSxcbiAgcHJlcGVuZDogZnVuY3Rpb24oc291cmNlLCBsb2MpIHtcbiAgICB0aGlzLnNvdXJjZS51bnNoaWZ0KHRoaXMud3JhcChzb3VyY2UsIGxvYykpO1xuICB9LFxuICBwdXNoOiBmdW5jdGlvbihzb3VyY2UsIGxvYykge1xuICAgIHRoaXMuc291cmNlLnB1c2godGhpcy53cmFwKHNvdXJjZSwgbG9jKSk7XG4gIH0sXG5cbiAgbWVyZ2U6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBzb3VyY2UgPSB0aGlzLmVtcHR5KCk7XG4gICAgdGhpcy5lYWNoKGZ1bmN0aW9uKGxpbmUpIHtcbiAgICAgIHNvdXJjZS5hZGQoWycgICcsIGxpbmUsICdcXG4nXSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfSxcblxuICBlYWNoOiBmdW5jdGlvbihpdGVyKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuc291cmNlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpdGVyKHRoaXMuc291cmNlW2ldKTtcbiAgICB9XG4gIH0sXG5cbiAgZW1wdHk6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhdGlvbiB8fCB7c3RhcnQ6IHt9fTtcbiAgICByZXR1cm4gbmV3IFNvdXJjZU5vZGUobG9jLnN0YXJ0LmxpbmUsIGxvYy5zdGFydC5jb2x1bW4sIHRoaXMuc3JjRmlsZSk7XG4gIH0sXG4gIHdyYXA6IGZ1bmN0aW9uKGNodW5rLCBsb2MgPSB0aGlzLmN1cnJlbnRMb2NhdGlvbiB8fCB7c3RhcnQ6IHt9fSkge1xuICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG5cbiAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9jKTtcblxuICAgIHJldHVybiBuZXcgU291cmNlTm9kZShsb2Muc3RhcnQubGluZSwgbG9jLnN0YXJ0LmNvbHVtbiwgdGhpcy5zcmNGaWxlLCBjaHVuayk7XG4gIH0sXG5cbiAgZnVuY3Rpb25DYWxsOiBmdW5jdGlvbihmbiwgdHlwZSwgcGFyYW1zKSB7XG4gICAgcGFyYW1zID0gdGhpcy5nZW5lcmF0ZUxpc3QocGFyYW1zKTtcbiAgICByZXR1cm4gdGhpcy53cmFwKFtmbiwgdHlwZSA/ICcuJyArIHR5cGUgKyAnKCcgOiAnKCcsIHBhcmFtcywgJyknXSk7XG4gIH0sXG5cbiAgcXVvdGVkU3RyaW5nOiBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gJ1wiJyArIChzdHIgKyAnJylcbiAgICAgIC5yZXBsYWNlKC9cXFxcL2csICdcXFxcXFxcXCcpXG4gICAgICAucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpXG4gICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAucmVwbGFjZSgvXFxyL2csICdcXFxccicpXG4gICAgICAucmVwbGFjZSgvXFx1MjAyOC9nLCAnXFxcXHUyMDI4JykgICAvLyBQZXIgRWNtYS0yNjIgNy4zICsgNy44LjRcbiAgICAgIC5yZXBsYWNlKC9cXHUyMDI5L2csICdcXFxcdTIwMjknKSArICdcIic7XG4gIH0sXG5cbiAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgbGV0IHBhaXJzID0gW107XG5cbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gY2FzdENodW5rKG9ialtrZXldLCB0aGlzKTtcbiAgICAgICAgaWYgKHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHBhaXJzLnB1c2goW3RoaXMucXVvdGVkU3RyaW5nKGtleSksICc6JywgdmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChwYWlycyk7XG4gICAgcmV0LnByZXBlbmQoJ3snKTtcbiAgICByZXQuYWRkKCd9Jyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuXG4gIGdlbmVyYXRlTGlzdDogZnVuY3Rpb24oZW50cmllcykge1xuICAgIGxldCByZXQgPSB0aGlzLmVtcHR5KCk7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZW50cmllcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGkpIHtcbiAgICAgICAgcmV0LmFkZCgnLCcpO1xuICAgICAgfVxuXG4gICAgICByZXQuYWRkKGNhc3RDaHVuayhlbnRyaWVzW2ldLCB0aGlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBnZW5lcmF0ZUFycmF5OiBmdW5jdGlvbihlbnRyaWVzKSB7XG4gICAgbGV0IHJldCA9IHRoaXMuZ2VuZXJhdGVMaXN0KGVudHJpZXMpO1xuICAgIHJldC5wcmVwZW5kKCdbJyk7XG4gICAgcmV0LmFkZCgnXScpO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgQ29kZUdlbjtcblxuIl19 -; -define('handlebars/compiler/javascript-compiler',['exports', 'module', '../base', '../exception', '../utils', './code-gen'], function (exports, module, _base, _exception, _utils, _codeGen) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - var _CodeGen = _interopRequireDefault(_codeGen); - - function Literal(value) { - this.value = value; - } - - function JavaScriptCompiler() {} - - JavaScriptCompiler.prototype = { - // PUBLIC API: You can override these methods in a subclass to provide - // alternative compiled forms for name lookup and buffering semantics - nameLookup: function nameLookup(parent, name /* , type*/) { - if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) { - return [parent, '.', name]; - } else { - return [parent, '[', JSON.stringify(name), ']']; - } - }, - depthedLookup: function depthedLookup(name) { - return [this.aliasable('container.lookup'), '(depths, "', name, '")']; - }, - - compilerInfo: function compilerInfo() { - var revision = _base.COMPILER_REVISION, - versions = _base.REVISION_CHANGES[revision]; - return [revision, versions]; - }, - - appendToBuffer: function appendToBuffer(source, location, explicit) { - // Force a source as this simplifies the merge logic. - if (!_utils.isArray(source)) { - source = [source]; - } - source = this.source.wrap(source, location); - - if (this.environment.isSimple) { - return ['return ', source, ';']; - } else if (explicit) { - // This is a case where the buffer operation occurs as a child of another - // construct, generally braces. We have to explicitly output these buffer - // operations to ensure that the emitted code goes in the correct location. - return ['buffer += ', source, ';']; - } else { - source.appendToBuffer = true; - return source; - } - }, - - initializeBuffer: function initializeBuffer() { - return this.quotedString(''); - }, - // END PUBLIC API - - compile: function compile(environment, options, context, asObject) { - this.environment = environment; - this.options = options; - this.stringParams = this.options.stringParams; - this.trackIds = this.options.trackIds; - this.precompile = !asObject; - - this.name = this.environment.name; - this.isChild = !!context; - this.context = context || { - decorators: [], - programs: [], - environments: [] - }; - - this.preamble(); - - this.stackSlot = 0; - this.stackVars = []; - this.aliases = {}; - this.registers = { list: [] }; - this.hashes = []; - this.compileStack = []; - this.inlineStack = []; - this.blockParams = []; - - this.compileChildren(environment, options); - - this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat; - this.useBlockParams = this.useBlockParams || environment.useBlockParams; - - var opcodes = environment.opcodes, - opcode = undefined, - firstLoc = undefined, - i = undefined, - l = undefined; - - for (i = 0, l = opcodes.length; i < l; i++) { - opcode = opcodes[i]; - - this.source.currentLocation = opcode.loc; - firstLoc = firstLoc || opcode.loc; - this[opcode.opcode].apply(this, opcode.args); - } - - // Flush any trailing content that might be pending. - this.source.currentLocation = firstLoc; - this.pushSource(''); - - /* istanbul ignore next */ - if (this.stackSlot || this.inlineStack.length || this.compileStack.length) { - throw new _Exception['default']('Compile completed with content left on stack'); - } - - if (!this.decorators.isEmpty()) { - this.useDecorators = true; - - this.decorators.prepend('var decorators = container.decorators;\n'); - this.decorators.push('return fn;'); - - if (asObject) { - this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]); - } else { - this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\n'); - this.decorators.push('}\n'); - this.decorators = this.decorators.merge(); - } - } else { - this.decorators = undefined; - } - - var fn = this.createFunctionContext(asObject); - if (!this.isChild) { - var ret = { - compiler: this.compilerInfo(), - main: fn - }; - - if (this.decorators) { - ret.main_d = this.decorators; // eslint-disable-line camelcase - ret.useDecorators = true; - } - - var _context = this.context; - var programs = _context.programs; - var decorators = _context.decorators; - - for (i = 0, l = programs.length; i < l; i++) { - if (programs[i]) { - ret[i] = programs[i]; - if (decorators[i]) { - ret[i + '_d'] = decorators[i]; - ret.useDecorators = true; - } - } - } - - if (this.environment.usePartial) { - ret.usePartial = true; - } - if (this.options.data) { - ret.useData = true; - } - if (this.useDepths) { - ret.useDepths = true; - } - if (this.useBlockParams) { - ret.useBlockParams = true; - } - if (this.options.compat) { - ret.compat = true; - } - - if (!asObject) { - ret.compiler = JSON.stringify(ret.compiler); - - this.source.currentLocation = { start: { line: 1, column: 0 } }; - ret = this.objectLiteral(ret); - - if (options.srcName) { - ret = ret.toStringWithSourceMap({ file: options.destName }); - ret.map = ret.map && ret.map.toString(); - } else { - ret = ret.toString(); - } - } else { - ret.compilerOptions = this.options; - } - - return ret; - } else { - return fn; - } - }, - - preamble: function preamble() { - // track the last context pushed into place to allow skipping the - // getContext opcode when it would be a noop - this.lastContext = 0; - this.source = new _CodeGen['default'](this.options.srcName); - this.decorators = new _CodeGen['default'](this.options.srcName); - }, - - createFunctionContext: function createFunctionContext(asObject) { - var varDeclarations = ''; - - var locals = this.stackVars.concat(this.registers.list); - if (locals.length > 0) { - varDeclarations += ', ' + locals.join(', '); - } - - // Generate minimizer alias mappings - // - // When using true SourceNodes, this will update all references to the given alias - // as the source nodes are reused in situ. For the non-source node compilation mode, - // aliases will not be used, but this case is already being run on the client and - // we aren't concern about minimizing the template size. - var aliasCount = 0; - for (var alias in this.aliases) { - // eslint-disable-line guard-for-in - var node = this.aliases[alias]; - - if (this.aliases.hasOwnProperty(alias) && node.children && node.referenceCount > 1) { - varDeclarations += ', alias' + ++aliasCount + '=' + alias; - node.children[0] = 'alias' + aliasCount; - } - } - - var params = ['container', 'depth0', 'helpers', 'partials', 'data']; - - if (this.useBlockParams || this.useDepths) { - params.push('blockParams'); - } - if (this.useDepths) { - params.push('depths'); - } - - // Perform a second pass over the output to merge content when possible - var source = this.mergeSource(varDeclarations); - - if (asObject) { - params.push(source); - - return Function.apply(this, params); - } else { - return this.source.wrap(['function(', params.join(','), ') {\n ', source, '}']); - } - }, - mergeSource: function mergeSource(varDeclarations) { - var isSimple = this.environment.isSimple, - appendOnly = !this.forceBuffer, - appendFirst = undefined, - sourceSeen = undefined, - bufferStart = undefined, - bufferEnd = undefined; - this.source.each(function (line) { - if (line.appendToBuffer) { - if (bufferStart) { - line.prepend(' + '); - } else { - bufferStart = line; - } - bufferEnd = line; - } else { - if (bufferStart) { - if (!sourceSeen) { - appendFirst = true; - } else { - bufferStart.prepend('buffer += '); - } - bufferEnd.add(';'); - bufferStart = bufferEnd = undefined; - } - - sourceSeen = true; - if (!isSimple) { - appendOnly = false; - } - } - }); - - if (appendOnly) { - if (bufferStart) { - bufferStart.prepend('return '); - bufferEnd.add(';'); - } else if (!sourceSeen) { - this.source.push('return "";'); - } - } else { - varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer()); - - if (bufferStart) { - bufferStart.prepend('return buffer + '); - bufferEnd.add(';'); - } else { - this.source.push('return buffer;'); - } - } - - if (varDeclarations) { - this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n')); - } - - return this.source.merge(); - }, - - // [blockValue] - // - // On stack, before: hash, inverse, program, value - // On stack, after: return value of blockHelperMissing - // - // The purpose of this opcode is to take a block of the form - // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and - // replace it on the stack with the result of properly - // invoking blockHelperMissing. - blockValue: function blockValue(name) { - var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'), - params = [this.contextName(0)]; - this.setupHelperArgs(name, 0, params); - - var blockName = this.popStack(); - params.splice(1, 0, blockName); - - this.push(this.source.functionCall(blockHelperMissing, 'call', params)); - }, - - // [ambiguousBlockValue] - // - // On stack, before: hash, inverse, program, value - // Compiler value, before: lastHelper=value of last found helper, if any - // On stack, after, if no lastHelper: same as [blockValue] - // On stack, after, if lastHelper: value - ambiguousBlockValue: function ambiguousBlockValue() { - // We're being a bit cheeky and reusing the options value from the prior exec - var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'), - params = [this.contextName(0)]; - this.setupHelperArgs('', 0, params, true); - - this.flushInline(); - - var current = this.topStack(); - params.splice(1, 0, current); - - this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']); - }, - - // [appendContent] - // - // On stack, before: ... - // On stack, after: ... - // - // Appends the string value of `content` to the current buffer - appendContent: function appendContent(content) { - if (this.pendingContent) { - content = this.pendingContent + content; - } else { - this.pendingLocation = this.source.currentLocation; - } - - this.pendingContent = content; - }, - - // [append] - // - // On stack, before: value, ... - // On stack, after: ... - // - // Coerces `value` to a String and appends it to the current buffer. - // - // If `value` is truthy, or 0, it is coerced into a string and appended - // Otherwise, the empty string is appended - append: function append() { - if (this.isInline()) { - this.replaceStack(function (current) { - return [' != null ? ', current, ' : ""']; - }); - - this.pushSource(this.appendToBuffer(this.popStack())); - } else { - var local = this.popStack(); - this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']); - if (this.environment.isSimple) { - this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']); - } - } - }, - - // [appendEscaped] - // - // On stack, before: value, ... - // On stack, after: ... - // - // Escape `value` and append it to the buffer - appendEscaped: function appendEscaped() { - this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')'])); - }, - - // [getContext] - // - // On stack, before: ... - // On stack, after: ... - // Compiler value, after: lastContext=depth - // - // Set the value of the `lastContext` compiler value to the depth - getContext: function getContext(depth) { - this.lastContext = depth; - }, - - // [pushContext] - // - // On stack, before: ... - // On stack, after: currentContext, ... - // - // Pushes the value of the current context onto the stack. - pushContext: function pushContext() { - this.pushStackLiteral(this.contextName(this.lastContext)); - }, - - // [lookupOnContext] - // - // On stack, before: ... - // On stack, after: currentContext[name], ... - // - // Looks up the value of `name` on the current context and pushes - // it onto the stack. - lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) { - var i = 0; - - if (!scoped && this.options.compat && !this.lastContext) { - // The depthed query is expected to handle the undefined logic for the root level that - // is implemented below, so we evaluate that directly in compat mode - this.push(this.depthedLookup(parts[i++])); - } else { - this.pushContext(); - } - - this.resolvePath('context', parts, i, falsy, strict); - }, - - // [lookupBlockParam] - // - // On stack, before: ... - // On stack, after: blockParam[name], ... - // - // Looks up the value of `parts` on the given block param and pushes - // it onto the stack. - lookupBlockParam: function lookupBlockParam(blockParamId, parts) { - this.useBlockParams = true; - - this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']); - this.resolvePath('context', parts, 1); - }, - - // [lookupData] - // - // On stack, before: ... - // On stack, after: data, ... - // - // Push the data lookup operator - lookupData: function lookupData(depth, parts, strict) { - if (!depth) { - this.pushStackLiteral('data'); - } else { - this.pushStackLiteral('container.data(data, ' + depth + ')'); - } - - this.resolvePath('data', parts, 0, true, strict); - }, - - resolvePath: function resolvePath(type, parts, i, falsy, strict) { - // istanbul ignore next - - var _this = this; - - if (this.options.strict || this.options.assumeObjects) { - this.push(strictLookup(this.options.strict && strict, this, parts, type)); - return; - } - - var len = parts.length; - for (; i < len; i++) { - /* eslint-disable no-loop-func */ - this.replaceStack(function (current) { - var lookup = _this.nameLookup(current, parts[i], type); - // We want to ensure that zero and false are handled properly if the context (falsy flag) - // needs to have the special handling for these values. - if (!falsy) { - return [' != null ? ', lookup, ' : ', current]; - } else { - // Otherwise we can use generic falsy handling - return [' && ', lookup]; - } - }); - /* eslint-enable no-loop-func */ - } - }, - - // [resolvePossibleLambda] - // - // On stack, before: value, ... - // On stack, after: resolved value, ... - // - // If the `value` is a lambda, replace it on the stack by - // the return value of the lambda - resolvePossibleLambda: function resolvePossibleLambda() { - this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']); - }, - - // [pushStringParam] - // - // On stack, before: ... - // On stack, after: string, currentContext, ... - // - // This opcode is designed for use in string mode, which - // provides the string value of a parameter along with its - // depth rather than resolving it immediately. - pushStringParam: function pushStringParam(string, type) { - this.pushContext(); - this.pushString(type); - - // If it's a subexpression, the string result - // will be pushed after this opcode. - if (type !== 'SubExpression') { - if (typeof string === 'string') { - this.pushString(string); - } else { - this.pushStackLiteral(string); - } - } - }, - - emptyHash: function emptyHash(omitEmpty) { - if (this.trackIds) { - this.push('{}'); // hashIds - } - if (this.stringParams) { - this.push('{}'); // hashContexts - this.push('{}'); // hashTypes - } - this.pushStackLiteral(omitEmpty ? 'undefined' : '{}'); - }, - pushHash: function pushHash() { - if (this.hash) { - this.hashes.push(this.hash); - } - this.hash = { values: [], types: [], contexts: [], ids: [] }; - }, - popHash: function popHash() { - var hash = this.hash; - this.hash = this.hashes.pop(); - - if (this.trackIds) { - this.push(this.objectLiteral(hash.ids)); - } - if (this.stringParams) { - this.push(this.objectLiteral(hash.contexts)); - this.push(this.objectLiteral(hash.types)); - } - - this.push(this.objectLiteral(hash.values)); - }, - - // [pushString] - // - // On stack, before: ... - // On stack, after: quotedString(string), ... - // - // Push a quoted version of `string` onto the stack - pushString: function pushString(string) { - this.pushStackLiteral(this.quotedString(string)); - }, - - // [pushLiteral] - // - // On stack, before: ... - // On stack, after: value, ... - // - // Pushes a value onto the stack. This operation prevents - // the compiler from creating a temporary variable to hold - // it. - pushLiteral: function pushLiteral(value) { - this.pushStackLiteral(value); - }, - - // [pushProgram] - // - // On stack, before: ... - // On stack, after: program(guid), ... - // - // Push a program expression onto the stack. This takes - // a compile-time guid and converts it into a runtime-accessible - // expression. - pushProgram: function pushProgram(guid) { - if (guid != null) { - this.pushStackLiteral(this.programExpression(guid)); - } else { - this.pushStackLiteral(null); - } - }, - - // [registerDecorator] - // - // On stack, before: hash, program, params..., ... - // On stack, after: ... - // - // Pops off the decorator's parameters, invokes the decorator, - // and inserts the decorator into the decorators list. - registerDecorator: function registerDecorator(paramSize, name) { - var foundDecorator = this.nameLookup('decorators', name, 'decorator'), - options = this.setupHelperArgs(name, paramSize); - - this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']); - }, - - // [invokeHelper] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of helper invocation - // - // Pops off the helper's parameters, invokes the helper, - // and pushes the helper's return value onto the stack. - // - // If the helper is not found, `helperMissing` is called. - invokeHelper: function invokeHelper(paramSize, name, isSimple) { - var nonHelper = this.popStack(), - helper = this.setupHelper(paramSize, name), - simple = isSimple ? [helper.name, ' || '] : ''; - - var lookup = ['('].concat(simple, nonHelper); - if (!this.options.strict) { - lookup.push(' || ', this.aliasable('helpers.helperMissing')); - } - lookup.push(')'); - - this.push(this.source.functionCall(lookup, 'call', helper.callParams)); - }, - - // [invokeKnownHelper] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of helper invocation - // - // This operation is used when the helper is known to exist, - // so a `helperMissing` fallback is not required. - invokeKnownHelper: function invokeKnownHelper(paramSize, name) { - var helper = this.setupHelper(paramSize, name); - this.push(this.source.functionCall(helper.name, 'call', helper.callParams)); - }, - - // [invokeAmbiguous] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of disambiguation - // - // This operation is used when an expression like `{{foo}}` - // is provided, but we don't know at compile-time whether it - // is a helper or a path. - // - // This operation emits more code than the other options, - // and can be avoided by passing the `knownHelpers` and - // `knownHelpersOnly` flags at compile-time. - invokeAmbiguous: function invokeAmbiguous(name, helperCall) { - this.useRegister('helper'); - - var nonHelper = this.popStack(); - - this.emptyHash(); - var helper = this.setupHelper(0, name, helperCall); - - var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper'); - - var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')']; - if (!this.options.strict) { - lookup[0] = '(helper = '; - lookup.push(' != null ? helper : ', this.aliasable('helpers.helperMissing')); - } - - this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('"function"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']); - }, - - // [invokePartial] - // - // On stack, before: context, ... - // On stack after: result of partial invocation - // - // This operation pops off a context, invokes a partial with that context, - // and pushes the result of the invocation back. - invokePartial: function invokePartial(isDynamic, name, indent) { - var params = [], - options = this.setupParams(name, 1, params); - - if (isDynamic) { - name = this.popStack(); - delete options.name; - } - - if (indent) { - options.indent = JSON.stringify(indent); - } - options.helpers = 'helpers'; - options.partials = 'partials'; - options.decorators = 'container.decorators'; - - if (!isDynamic) { - params.unshift(this.nameLookup('partials', name, 'partial')); - } else { - params.unshift(name); - } - - if (this.options.compat) { - options.depths = 'depths'; - } - options = this.objectLiteral(options); - params.push(options); - - this.push(this.source.functionCall('container.invokePartial', '', params)); - }, - - // [assignToHash] - // - // On stack, before: value, ..., hash, ... - // On stack, after: ..., hash, ... - // - // Pops a value off the stack and assigns it to the current hash - assignToHash: function assignToHash(key) { - var value = this.popStack(), - context = undefined, - type = undefined, - id = undefined; - - if (this.trackIds) { - id = this.popStack(); - } - if (this.stringParams) { - type = this.popStack(); - context = this.popStack(); - } - - var hash = this.hash; - if (context) { - hash.contexts[key] = context; - } - if (type) { - hash.types[key] = type; - } - if (id) { - hash.ids[key] = id; - } - hash.values[key] = value; - }, - - pushId: function pushId(type, name, child) { - if (type === 'BlockParam') { - this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : '')); - } else if (type === 'PathExpression') { - this.pushString(name); - } else if (type === 'SubExpression') { - this.pushStackLiteral('true'); - } else { - this.pushStackLiteral('null'); - } - }, - - // HELPERS - - compiler: JavaScriptCompiler, - - compileChildren: function compileChildren(environment, options) { - var children = environment.children, - child = undefined, - compiler = undefined; - - for (var i = 0, l = children.length; i < l; i++) { - child = children[i]; - compiler = new this.compiler(); // eslint-disable-line new-cap - - var existing = this.matchExistingProgram(child); - - if (existing == null) { - this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children - var index = this.context.programs.length; - child.index = index; - child.name = 'program' + index; - this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile); - this.context.decorators[index] = compiler.decorators; - this.context.environments[index] = child; - - this.useDepths = this.useDepths || compiler.useDepths; - this.useBlockParams = this.useBlockParams || compiler.useBlockParams; - child.useDepths = this.useDepths; - child.useBlockParams = this.useBlockParams; - } else { - child.index = existing.index; - child.name = 'program' + existing.index; - - this.useDepths = this.useDepths || existing.useDepths; - this.useBlockParams = this.useBlockParams || existing.useBlockParams; - } - } - }, - matchExistingProgram: function matchExistingProgram(child) { - for (var i = 0, len = this.context.environments.length; i < len; i++) { - var environment = this.context.environments[i]; - if (environment && environment.equals(child)) { - return environment; - } - } - }, - - programExpression: function programExpression(guid) { - var child = this.environment.children[guid], - programParams = [child.index, 'data', child.blockParams]; - - if (this.useBlockParams || this.useDepths) { - programParams.push('blockParams'); - } - if (this.useDepths) { - programParams.push('depths'); - } - - return 'container.program(' + programParams.join(', ') + ')'; - }, - - useRegister: function useRegister(name) { - if (!this.registers[name]) { - this.registers[name] = true; - this.registers.list.push(name); - } - }, - - push: function push(expr) { - if (!(expr instanceof Literal)) { - expr = this.source.wrap(expr); - } - - this.inlineStack.push(expr); - return expr; - }, - - pushStackLiteral: function pushStackLiteral(item) { - this.push(new Literal(item)); - }, - - pushSource: function pushSource(source) { - if (this.pendingContent) { - this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation)); - this.pendingContent = undefined; - } - - if (source) { - this.source.push(source); - } - }, - - replaceStack: function replaceStack(callback) { - var prefix = ['('], - stack = undefined, - createdStack = undefined, - usedLiteral = undefined; - - /* istanbul ignore next */ - if (!this.isInline()) { - throw new _Exception['default']('replaceStack on non-inline'); - } - - // We want to merge the inline statement into the replacement statement via ',' - var top = this.popStack(true); - - if (top instanceof Literal) { - // Literals do not need to be inlined - stack = [top.value]; - prefix = ['(', stack]; - usedLiteral = true; - } else { - // Get or create the current stack name for use by the inline - createdStack = true; - var _name = this.incrStack(); - - prefix = ['((', this.push(_name), ' = ', top, ')']; - stack = this.topStack(); - } - - var item = callback.call(this, stack); - - if (!usedLiteral) { - this.popStack(); - } - if (createdStack) { - this.stackSlot--; - } - this.push(prefix.concat(item, ')')); - }, - - incrStack: function incrStack() { - this.stackSlot++; - if (this.stackSlot > this.stackVars.length) { - this.stackVars.push('stack' + this.stackSlot); - } - return this.topStackName(); - }, - topStackName: function topStackName() { - return 'stack' + this.stackSlot; - }, - flushInline: function flushInline() { - var inlineStack = this.inlineStack; - this.inlineStack = []; - for (var i = 0, len = inlineStack.length; i < len; i++) { - var entry = inlineStack[i]; - /* istanbul ignore if */ - if (entry instanceof Literal) { - this.compileStack.push(entry); - } else { - var stack = this.incrStack(); - this.pushSource([stack, ' = ', entry, ';']); - this.compileStack.push(stack); - } - } - }, - isInline: function isInline() { - return this.inlineStack.length; - }, - - popStack: function popStack(wrapped) { - var inline = this.isInline(), - item = (inline ? this.inlineStack : this.compileStack).pop(); - - if (!wrapped && item instanceof Literal) { - return item.value; - } else { - if (!inline) { - /* istanbul ignore next */ - if (!this.stackSlot) { - throw new _Exception['default']('Invalid stack pop'); - } - this.stackSlot--; - } - return item; - } - }, - - topStack: function topStack() { - var stack = this.isInline() ? this.inlineStack : this.compileStack, - item = stack[stack.length - 1]; - - /* istanbul ignore if */ - if (item instanceof Literal) { - return item.value; - } else { - return item; - } - }, - - contextName: function contextName(context) { - if (this.useDepths && context) { - return 'depths[' + context + ']'; - } else { - return 'depth' + context; - } - }, - - quotedString: function quotedString(str) { - return this.source.quotedString(str); - }, - - objectLiteral: function objectLiteral(obj) { - return this.source.objectLiteral(obj); - }, - - aliasable: function aliasable(name) { - var ret = this.aliases[name]; - if (ret) { - ret.referenceCount++; - return ret; - } - - ret = this.aliases[name] = this.source.wrap(name); - ret.aliasable = true; - ret.referenceCount = 1; - - return ret; - }, - - setupHelper: function setupHelper(paramSize, name, blockHelper) { - var params = [], - paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper); - var foundHelper = this.nameLookup('helpers', name, 'helper'), - callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : {}'); - - return { - params: params, - paramsInit: paramsInit, - name: foundHelper, - callParams: [callContext].concat(params) - }; - }, - - setupParams: function setupParams(helper, paramSize, params) { - var options = {}, - contexts = [], - types = [], - ids = [], - objectArgs = !params, - param = undefined; - - if (objectArgs) { - params = []; - } - - options.name = this.quotedString(helper); - options.hash = this.popStack(); - - if (this.trackIds) { - options.hashIds = this.popStack(); - } - if (this.stringParams) { - options.hashTypes = this.popStack(); - options.hashContexts = this.popStack(); - } - - var inverse = this.popStack(), - program = this.popStack(); - - // Avoid setting fn and inverse if neither are set. This allows - // helpers to do a check for `if (options.fn)` - if (program || inverse) { - options.fn = program || 'container.noop'; - options.inverse = inverse || 'container.noop'; - } - - // The parameters go on to the stack in order (making sure that they are evaluated in order) - // so we need to pop them off the stack in reverse order - var i = paramSize; - while (i--) { - param = this.popStack(); - params[i] = param; - - if (this.trackIds) { - ids[i] = this.popStack(); - } - if (this.stringParams) { - types[i] = this.popStack(); - contexts[i] = this.popStack(); - } - } - - if (objectArgs) { - options.args = this.source.generateArray(params); - } - - if (this.trackIds) { - options.ids = this.source.generateArray(ids); - } - if (this.stringParams) { - options.types = this.source.generateArray(types); - options.contexts = this.source.generateArray(contexts); - } - - if (this.options.data) { - options.data = 'data'; - } - if (this.useBlockParams) { - options.blockParams = 'blockParams'; - } - return options; - }, - - setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) { - var options = this.setupParams(helper, paramSize, params); - options = this.objectLiteral(options); - if (useRegister) { - this.useRegister('options'); - params.push('options'); - return ['options=', options]; - } else if (params) { - params.push(options); - return ''; - } else { - return options; - } - } - }; - - (function () { - var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' '); - - var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {}; - - for (var i = 0, l = reservedWords.length; i < l; i++) { - compilerWords[reservedWords[i]] = true; - } - })(); - - JavaScriptCompiler.isValidJavaScriptVariableName = function (name) { - return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name); - }; - - function strictLookup(requireTerminal, compiler, parts, type) { - var stack = compiler.popStack(), - i = 0, - len = parts.length; - if (requireTerminal) { - len--; - } - - for (; i < len; i++) { - stack = compiler.nameLookup(stack, parts[i], type); - } - - if (requireTerminal) { - return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ')']; - } else { - return stack; - } - } - - module.exports = JavaScriptCompiler; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFLQSxXQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDdEIsUUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7R0FDcEI7O0FBRUQsV0FBUyxrQkFBa0IsR0FBRyxFQUFFOztBQUVoQyxvQkFBa0IsQ0FBQyxTQUFTLEdBQUc7OztBQUc3QixjQUFVLEVBQUUsb0JBQVMsTUFBTSxFQUFFLElBQUksY0FBYTtBQUM1QyxVQUFJLGtCQUFrQixDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzFELGVBQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzVCLE1BQU07QUFDTCxlQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO09BQ2pEO0tBQ0Y7QUFDRCxpQkFBYSxFQUFFLHVCQUFTLElBQUksRUFBRTtBQUM1QixhQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDdkU7O0FBRUQsZ0JBQVksRUFBRSx3QkFBVztBQUN2QixVQUFNLFFBQVEsU0ExQlQsaUJBQWlCLEFBMEJZO1VBQzVCLFFBQVEsR0FBRyxNQTNCTyxnQkFBZ0IsQ0EyQk4sUUFBUSxDQUFDLENBQUM7QUFDNUMsYUFBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUM3Qjs7QUFFRCxrQkFBYyxFQUFFLHdCQUFTLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFOztBQUVuRCxVQUFJLENBQUMsT0EvQkQsT0FBTyxDQStCRSxNQUFNLENBQUMsRUFBRTtBQUNwQixjQUFNLEdBQUcs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LENBQUM7UUFDTCxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN2QixRQUFJLGVBQWUsRUFBRTtBQUNuQixTQUFHLEVBQUUsQ0FBQztLQUNQOztBQUVELFdBQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuQixXQUFLLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksZUFBZSxFQUFFO0FBQ25CLGFBQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztLQUN6RyxNQUFNO0FBQ0wsYUFBTyxLQUFLLENBQUM7S0FDZDtHQUNGOzttQkFFYyxrQkFBa0IiLCJmaWxlIjoiamF2YXNjcmlwdC1jb21waWxlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENPTVBJTEVSX1JFVklTSU9OLCBSRVZJU0lPTl9DSEFOR0VTIH0gZnJvbSAnLi4vYmFzZSc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5pbXBvcnQge2lzQXJyYXl9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBDb2RlR2VuIGZyb20gJy4vY29kZS1nZW4nO1xuXG5mdW5jdGlvbiBMaXRlcmFsKHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gSmF2YVNjcmlwdENvbXBpbGVyKCkge31cblxuSmF2YVNjcmlwdENvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgLy8gUFVCTElDIEFQSTogWW91IGNhbiBvdmVycmlkZSB0aGVzZSBtZXRob2RzIGluIGEgc3ViY2xhc3MgdG8gcHJvdmlkZVxuICAvLyBhbHRlcm5hdGl2ZSBjb21waWxlZCBmb3JtcyBmb3IgbmFtZSBsb29rdXAgYW5kIGJ1ZmZlcmluZyBzZW1hbnRpY3NcbiAgbmFtZUxvb2t1cDogZnVuY3Rpb24ocGFyZW50LCBuYW1lLyogLCB0eXBlKi8pIHtcbiAgICBpZiAoSmF2YVNjcmlwdENvbXBpbGVyLmlzVmFsaWRKYXZhU2NyaXB0VmFyaWFibGVOYW1lKG5hbWUpKSB7XG4gICAgICByZXR1cm4gW3BhcmVudCwgJy4nLCBuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtwYXJlbnQsICdbJywgSlNPTi5zdHJpbmdpZnkobmFtZSksICddJ107XG4gICAgfVxuICB9LFxuICBkZXB0aGVkTG9va3VwOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgcmV0dXJuIFt0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxvb2t1cCcpLCAnKGRlcHRocywgXCInLCBuYW1lLCAnXCIpJ107XG4gIH0sXG5cbiAgY29tcGlsZXJJbmZvOiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCByZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OLFxuICAgICAgICAgIHZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tyZXZpc2lvbl07XG4gICAgcmV0dXJuIFtyZXZpc2lvbiwgdmVyc2lvbnNdO1xuICB9LFxuXG4gIGFwcGVuZFRvQnVmZmVyOiBmdW5jdGlvbihzb3VyY2UsIGxvY2F0aW9uLCBleHBsaWNpdCkge1xuICAgIC8vIEZvcmNlIGEgc291cmNlIGFzIHRoaXMgc2ltcGxpZmllcyB0aGUgbWVyZ2UgbG9naWMuXG4gICAgaWYgKCFpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHNvdXJjZSA9IFtzb3VyY2VdO1xuICAgIH1cbiAgICBzb3VyY2UgPSB0aGlzLnNvdXJjZS53cmFwKHNvdXJjZSwgbG9jYXRpb24pO1xuXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUpIHtcbiAgICAgIHJldHVybiBbJ3JldHVybiAnLCBzb3VyY2UsICc7J107XG4gICAgfSBlbHNlIGlmIChleHBsaWNpdCkge1xuICAgICAgLy8gVGhpcyBpcyBhIGNhc2Ugd2hlcmUgdGhlIGJ1ZmZlciBvcGVyYXRpb24gb2NjdXJzIGFzIGEgY2hpbGQgb2YgYW5vdGhlclxuICAgICAgLy8gY29uc3RydWN0LCBnZW5lcmFsbHkgYnJhY2VzLiBXZSBoYXZlIHRvIGV4cGxpY2l0bHkgb3V0cHV0IHRoZXNlIGJ1ZmZlclxuICAgICAgLy8gb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhhdCB0aGUgZW1pdHRlZCBjb2RlIGdvZXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uXG4gICAgICByZXR1cm4gWydidWZmZXIgKz0gJywgc291cmNlLCAnOyddO1xuICAgIH0gZWxzZSB7XG4gICAgICBzb3VyY2UuYXBwZW5kVG9CdWZmZXIgPSB0cnVlO1xuICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICB9XG4gIH0sXG5cbiAgaW5pdGlhbGl6ZUJ1ZmZlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVvdGVkU3RyaW5nKCcnKTtcbiAgfSxcbiAgLy8gRU5EIFBVQkxJQyBBUElcblxuICBjb21waWxlOiBmdW5jdGlvbihlbnZpcm9ubWVudCwgb3B0aW9ucywgY29udGV4dCwgYXNPYmplY3QpIHtcbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN0cmluZ1BhcmFtcyA9IHRoaXMub3B0aW9ucy5zdHJpbmdQYXJhbXM7XG4gICAgdGhpcy50cmFja0lkcyA9IHRoaXMub3B0aW9ucy50cmFja0lkcztcbiAgICB0aGlzLnByZWNvbXBpbGUgPSAhYXNPYmplY3Q7XG5cbiAgICB0aGlzLm5hbWUgPSB0aGlzLmVudmlyb25tZW50Lm5hbWU7XG4gICAgdGhpcy5pc0NoaWxkID0gISFjb250ZXh0O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQgfHwge1xuICAgICAgZGVjb3JhdG9yczogW10sXG4gICAgICBwcm9ncmFtczogW10sXG4gICAgICBlbnZpcm9ubWVudHM6IFtdXG4gICAgfTtcblxuICAgIHRoaXMucHJlYW1ibGUoKTtcblxuICAgIHRoaXMuc3RhY2tTbG90ID0gMDtcbiAgICB0aGlzLnN0YWNrVmFycyA9IFtdO1xuICAgIHRoaXMuYWxpYXNlcyA9IHt9O1xuICAgIHRoaXMucmVnaXN0ZXJzID0geyBsaXN0OiBbXSB9O1xuICAgIHRoaXMuaGFzaGVzID0gW107XG4gICAgdGhpcy5jb21waWxlU3RhY2sgPSBbXTtcbiAgICB0aGlzLmlubGluZVN0YWNrID0gW107XG4gICAgdGhpcy5ibG9ja1BhcmFtcyA9IFtdO1xuXG4gICAgdGhpcy5jb21waWxlQ2hpbGRyZW4oZW52aXJvbm1lbnQsIG9wdGlvbnMpO1xuXG4gICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBlbnZpcm9ubWVudC51c2VEZXB0aHMgfHwgZW52aXJvbm1lbnQudXNlRGVjb3JhdG9ycyB8fCB0aGlzLm9wdGlvbnMuY29tcGF0O1xuICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGVudmlyb25tZW50LnVzZUJsb2NrUGFyYW1zO1xuXG4gICAgbGV0IG9wY29kZXMgPSBlbnZpcm9ubWVudC5vcGNvZGVzLFxuICAgICAgICBvcGNvZGUsXG4gICAgICAgIGZpcnN0TG9jLFxuICAgICAgICBpLFxuICAgICAgICBsO1xuXG4gICAgZm9yIChpID0gMCwgbCA9IG9wY29kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBvcGNvZGUgPSBvcGNvZGVzW2ldO1xuXG4gICAgICB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb24gPSBvcGNvZGUubG9jO1xuICAgICAgZmlyc3RMb2MgPSBmaXJzdExvYyB8fCBvcGNvZGUubG9jO1xuICAgICAgdGhpc1tvcGNvZGUub3Bjb2RlXS5hcHBseSh0aGlzLCBvcGNvZGUuYXJncyk7XG4gICAgfVxuXG4gICAgLy8gRmx1c2ggYW55IHRyYWlsaW5nIGNvbnRlbnQgdGhhdCBtaWdodCBiZSBwZW5kaW5nLlxuICAgIHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiA9IGZpcnN0TG9jO1xuICAgIHRoaXMucHVzaFNvdXJjZSgnJyk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICh0aGlzLnN0YWNrU2xvdCB8fCB0aGlzLmlubGluZVN0YWNrLmxlbmd0aCB8fCB0aGlzLmNvbXBpbGVTdGFjay5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0NvbXBpbGUgY29tcGxldGVkIHdpdGggY29udGVudCBsZWZ0IG9uIHN0YWNrJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRlY29yYXRvcnMuaXNFbXB0eSgpKSB7XG4gICAgICB0aGlzLnVzZURlY29yYXRvcnMgPSB0cnVlO1xuXG4gICAgICB0aGlzLmRlY29yYXRvcnMucHJlcGVuZCgndmFyIGRlY29yYXRvcnMgPSBjb250YWluZXIuZGVjb3JhdG9ycztcXG4nKTtcbiAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCdyZXR1cm4gZm47Jyk7XG5cbiAgICAgIGlmIChhc09iamVjdCkge1xuICAgICAgICB0aGlzLmRlY29yYXRvcnMgPSBGdW5jdGlvbi5hcHBseSh0aGlzLCBbJ2ZuJywgJ3Byb3BzJywgJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnZGF0YScsICdibG9ja1BhcmFtcycsICdkZXB0aHMnLCB0aGlzLmRlY29yYXRvcnMubWVyZ2UoKV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoJ2Z1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBkZXB0aDAsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcXG4nKTtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzLnB1c2goJ31cXG4nKTtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzID0gdGhpcy5kZWNvcmF0b3JzLm1lcmdlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9ycyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBsZXQgZm4gPSB0aGlzLmNyZWF0ZUZ1bmN0aW9uQ29udGV4dChhc09iamVjdCk7XG4gICAgaWYgKCF0aGlzLmlzQ2hpbGQpIHtcbiAgICAgIGxldCByZXQgPSB7XG4gICAgICAgIGNvbXBpbGVyOiB0aGlzLmNvbXBpbGVySW5mbygpLFxuICAgICAgICBtYWluOiBmblxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuZGVjb3JhdG9ycykge1xuICAgICAgICByZXQubWFpbl9kID0gdGhpcy5kZWNvcmF0b3JzOyAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4gICAgICAgIHJldC51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgbGV0IHtwcm9ncmFtcywgZGVjb3JhdG9yc30gPSB0aGlzLmNvbnRleHQ7XG4gICAgICBmb3IgKGkgPSAwLCBsID0gcHJvZ3JhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChwcm9ncmFtc1tpXSkge1xuICAgICAgICAgIHJldFtpXSA9IHByb2dyYW1zW2ldO1xuICAgICAgICAgIGlmIChkZWNvcmF0b3JzW2ldKSB7XG4gICAgICAgICAgICByZXRbaSArICdfZCddID0gZGVjb3JhdG9yc1tpXTtcbiAgICAgICAgICAgIHJldC51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQudXNlUGFydGlhbCkge1xuICAgICAgICByZXQudXNlUGFydGlhbCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmRhdGEpIHtcbiAgICAgICAgcmV0LnVzZURhdGEgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudXNlRGVwdGhzKSB7XG4gICAgICAgIHJldC51c2VEZXB0aHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudXNlQmxvY2tQYXJhbXMpIHtcbiAgICAgICAgcmV0LnVzZUJsb2NrUGFyYW1zID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuY29tcGF0KSB7XG4gICAgICAgIHJldC5jb21wYXQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWFzT2JqZWN0KSB7XG4gICAgICAgIHJldC5jb21waWxlciA9IEpTT04uc3RyaW5naWZ5KHJldC5jb21waWxlcik7XG5cbiAgICAgICAgdGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uID0ge3N0YXJ0OiB7bGluZTogMSwgY29sdW1uOiAwfX07XG4gICAgICAgIHJldCA9IHRoaXMub2JqZWN0TGl0ZXJhbChyZXQpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnNyY05hbWUpIHtcbiAgICAgICAgICByZXQgPSByZXQudG9TdHJpbmdXaXRoU291cmNlTWFwKHtmaWxlOiBvcHRpb25zLmRlc3ROYW1lfSk7XG4gICAgICAgICAgcmV0Lm1hcCA9IHJldC5tYXAgJiYgcmV0Lm1hcC50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldCA9IHJldC50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQuY29tcGlsZXJPcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm47XG4gICAgfVxuICB9LFxuXG4gIHByZWFtYmxlOiBmdW5jdGlvbigpIHtcbiAgICAvLyB0cmFjayB0aGUgbGFzdCBjb250ZXh0IHB1c2hlZCBpbnRvIHBsYWNlIHRvIGFsbG93IHNraXBwaW5nIHRoZVxuICAgIC8vIGdldENvbnRleHQgb3Bjb2RlIHdoZW4gaXQgd291bGQgYmUgYSBub29wXG4gICAgdGhpcy5sYXN0Q29udGV4dCA9IDA7XG4gICAgdGhpcy5zb3VyY2UgPSBuZXcgQ29kZUdlbih0aGlzLm9wdGlvbnMuc3JjTmFtZSk7XG4gICAgdGhpcy5kZWNvcmF0b3JzID0gbmV3IENvZGVHZW4odGhpcy5vcHRpb25zLnNyY05hbWUpO1xuICB9LFxuXG4gIGNyZWF0ZUZ1bmN0aW9uQ29udGV4dDogZnVuY3Rpb24oYXNPYmplY3QpIHtcbiAgICBsZXQgdmFyRGVjbGFyYXRpb25zID0gJyc7XG5cbiAgICBsZXQgbG9jYWxzID0gdGhpcy5zdGFja1ZhcnMuY29uY2F0KHRoaXMucmVnaXN0ZXJzLmxpc3QpO1xuICAgIGlmIChsb2NhbHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsICcgKyBsb2NhbHMuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICAvLyBHZW5lcmF0ZSBtaW5pbWl6ZXIgYWxpYXMgbWFwcGluZ3NcbiAgICAvL1xuICAgIC8vIFdoZW4gdXNpbmcgdHJ1ZSBTb3VyY2VOb2RlcywgdGhpcyB3aWxsIHVwZGF0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgZ2l2ZW4gYWxpYXNcbiAgICAvLyBhcyB0aGUgc291cmNlIG5vZGVzIGFyZSByZXVzZWQgaW4gc2l0dS4gRm9yIHRoZSBub24tc291cmNlIG5vZGUgY29tcGlsYXRpb24gbW9kZSxcbiAgICAvLyBhbGlhc2VzIHdpbGwgbm90IGJlIHVzZWQsIGJ1dCB0aGlzIGNhc2UgaXMgYWxyZWFkeSBiZWluZyBydW4gb24gdGhlIGNsaWVudCBhbmRcbiAgICAvLyB3ZSBhcmVuJ3QgY29uY2VybiBhYm91dCBtaW5pbWl6aW5nIHRoZSB0ZW1wbGF0ZSBzaXplLlxuICAgIGxldCBhbGlhc0NvdW50ID0gMDtcbiAgICBmb3IgKGxldCBhbGlhcyBpbiB0aGlzLmFsaWFzZXMpIHsgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBndWFyZC1mb3ItaW5cbiAgICAgIGxldCBub2RlID0gdGhpcy5hbGlhc2VzW2FsaWFzXTtcblxuICAgICAgaWYgKHRoaXMuYWxpYXNlcy5oYXNPd25Qcm9wZXJ0eShhbGlhcykgJiYgbm9kZS5jaGlsZHJlbiAmJiBub2RlLnJlZmVyZW5jZUNvdW50ID4gMSkge1xuICAgICAgICB2YXJEZWNsYXJhdGlvbnMgKz0gJywgYWxpYXMnICsgKCsrYWxpYXNDb3VudCkgKyAnPScgKyBhbGlhcztcbiAgICAgICAgbm9kZS5jaGlsZHJlblswXSA9ICdhbGlhcycgKyBhbGlhc0NvdW50O1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBbJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnaGVscGVycycsICdwYXJ0aWFscycsICdkYXRhJ107XG5cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2RlcHRocycpO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBvdXRwdXQgdG8gbWVyZ2UgY29udGVudCB3aGVuIHBvc3NpYmxlXG4gICAgbGV0IHNvdXJjZSA9IHRoaXMubWVyZ2VTb3VyY2UodmFyRGVjbGFyYXRpb25zKTtcblxuICAgIGlmIChhc09iamVjdCkge1xuICAgICAgcGFyYW1zLnB1c2goc291cmNlKTtcblxuICAgICAgcmV0dXJuIEZ1bmN0aW9uLmFwcGx5KHRoaXMsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZS53cmFwKFsnZnVuY3Rpb24oJywgcGFyYW1zLmpvaW4oJywnKSwgJykge1xcbiAgJywgc291cmNlLCAnfSddKTtcbiAgICB9XG4gIH0sXG4gIG1lcmdlU291cmNlOiBmdW5jdGlvbih2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICBsZXQgaXNTaW1wbGUgPSB0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlLFxuICAgICAgICBhcHBlbmRPbmx5ID0gIXRoaXMuZm9yY2VCdWZmZXIsXG4gICAgICAgIGFwcGVuZEZpcnN0LFxuXG4gICAgICAgIHNvdXJjZVNlZW4sXG4gICAgICAgIGJ1ZmZlclN0YXJ0LFxuICAgICAgICBidWZmZXJFbmQ7XG4gICAgdGhpcy5zb3VyY2UuZWFjaCgobGluZSkgPT4ge1xuICAgICAgaWYgKGxpbmUuYXBwZW5kVG9CdWZmZXIpIHtcbiAgICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgICAgbGluZS5wcmVwZW5kKCcgICsgJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmZmVyU3RhcnQgPSBsaW5lO1xuICAgICAgICB9XG4gICAgICAgIGJ1ZmZlckVuZCA9IGxpbmU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgICBpZiAoIXNvdXJjZVNlZW4pIHtcbiAgICAgICAgICAgIGFwcGVuZEZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgnYnVmZmVyICs9ICcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICAgICAgYnVmZmVyU3RhcnQgPSBidWZmZXJFbmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBzb3VyY2VTZWVuID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFpc1NpbXBsZSkge1xuICAgICAgICAgIGFwcGVuZE9ubHkgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG5cbiAgICBpZiAoYXBwZW5kT25seSkge1xuICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ3JldHVybiAnKTtcbiAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpO1xuICAgICAgfSBlbHNlIGlmICghc291cmNlU2Vlbikge1xuICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKCdyZXR1cm4gXCJcIjsnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsIGJ1ZmZlciA9ICcgKyAoYXBwZW5kRmlyc3QgPyAnJyA6IHRoaXMuaW5pdGlhbGl6ZUJ1ZmZlcigpKTtcblxuICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ3JldHVybiBidWZmZXIgKyAnKTtcbiAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucHVzaCgncmV0dXJuIGJ1ZmZlcjsnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFyRGVjbGFyYXRpb25zKSB7XG4gICAgICB0aGlzLnNvdXJjZS5wcmVwZW5kKCd2YXIgJyArIHZhckRlY2xhcmF0aW9ucy5zdWJzdHJpbmcoMikgKyAoYXBwZW5kRmlyc3QgPyAnJyA6ICc7XFxuJykpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnNvdXJjZS5tZXJnZSgpO1xuICB9LFxuXG4gIC8vIFtibG9ja1ZhbHVlXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCB2YWx1ZVxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJldHVybiB2YWx1ZSBvZiBibG9ja0hlbHBlck1pc3NpbmdcbiAgLy9cbiAgLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBvcGNvZGUgaXMgdG8gdGFrZSBhIGJsb2NrIG9mIHRoZSBmb3JtXG4gIC8vIGB7eyN0aGlzLmZvb319Li4ue3svdGhpcy5mb299fWAsIHJlc29sdmUgdGhlIHZhbHVlIG9mIGBmb29gLCBhbmRcbiAgLy8gcmVwbGFjZSBpdCBvbiB0aGUgc3RhY2sgd2l0aCB0aGUgcmVzdWx0IG9mIHByb3Blcmx5XG4gIC8vIGludm9raW5nIGJsb2NrSGVscGVyTWlzc2luZy5cbiAgYmxvY2tWYWx1ZTogZnVuY3Rpb24obmFtZSkge1xuICAgIGxldCBibG9ja0hlbHBlck1pc3NpbmcgPSB0aGlzLmFsaWFzYWJsZSgnaGVscGVycy5ibG9ja0hlbHBlck1pc3NpbmcnKSxcbiAgICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldO1xuICAgIHRoaXMuc2V0dXBIZWxwZXJBcmdzKG5hbWUsIDAsIHBhcmFtcyk7XG5cbiAgICBsZXQgYmxvY2tOYW1lID0gdGhpcy5wb3BTdGFjaygpO1xuICAgIHBhcmFtcy5zcGxpY2UoMSwgMCwgYmxvY2tOYW1lKTtcblxuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoYmxvY2tIZWxwZXJNaXNzaW5nLCAnY2FsbCcsIHBhcmFtcykpO1xuICB9LFxuXG4gIC8vIFthbWJpZ3VvdXNCbG9ja1ZhbHVlXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCB2YWx1ZVxuICAvLyBDb21waWxlciB2YWx1ZSwgYmVmb3JlOiBsYXN0SGVscGVyPXZhbHVlIG9mIGxhc3QgZm91bmQgaGVscGVyLCBpZiBhbnlcbiAgLy8gT24gc3RhY2ssIGFmdGVyLCBpZiBubyBsYXN0SGVscGVyOiBzYW1lIGFzIFtibG9ja1ZhbHVlXVxuICAvLyBPbiBzdGFjaywgYWZ0ZXIsIGlmIGxhc3RIZWxwZXI6IHZhbHVlXG4gIGFtYmlndW91c0Jsb2NrVmFsdWU6IGZ1bmN0aW9uKCkge1xuICAgIC8vIFdlJ3JlIGJlaW5nIGEgYml0IGNoZWVreSBhbmQgcmV1c2luZyB0aGUgb3B0aW9ucyB2YWx1ZSBmcm9tIHRoZSBwcmlvciBleGVjXG4gICAgbGV0IGJsb2NrSGVscGVyTWlzc2luZyA9IHRoaXMuYWxpYXNhYmxlKCdoZWxwZXJzLmJsb2NrSGVscGVyTWlzc2luZycpLFxuICAgICAgICBwYXJhbXMgPSBbdGhpcy5jb250ZXh0TmFtZSgwKV07XG4gICAgdGhpcy5zZXR1cEhlbHBlckFyZ3MoJycsIDAsIHBhcmFtcywgdHJ1ZSk7XG5cbiAgICB0aGlzLmZsdXNoSW5saW5lKCk7XG5cbiAgICBsZXQgY3VycmVudCA9IHRoaXMudG9wU3RhY2soKTtcbiAgICBwYXJhbXMuc3BsaWNlKDEsIDAsIGN1cnJlbnQpO1xuXG4gICAgdGhpcy5wdXNoU291cmNlKFtcbiAgICAgICAgJ2lmICghJywgdGhpcy5sYXN0SGVscGVyLCAnKSB7ICcsXG4gICAgICAgICAgY3VycmVudCwgJyA9ICcsIHRoaXMuc291cmNlLmZ1bmN0aW9uQ2FsbChibG9ja0hlbHBlck1pc3NpbmcsICdjYWxsJywgcGFyYW1zKSxcbiAgICAgICAgJ30nXSk7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZENvbnRlbnRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBBcHBlbmRzIHRoZSBzdHJpbmcgdmFsdWUgb2YgYGNvbnRlbnRgIHRvIHRoZSBjdXJyZW50IGJ1ZmZlclxuICBhcHBlbmRDb250ZW50OiBmdW5jdGlvbihjb250ZW50KSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnBlbmRpbmdDb250ZW50ICsgY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb24gPSB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IGNvbnRlbnQ7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8gYSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLlxuICAvL1xuICAvLyBJZiBgdmFsdWVgIGlzIHRydXRoeSwgb3IgMCwgaXQgaXMgY29lcmNlZCBpbnRvIGEgc3RyaW5nIGFuZCBhcHBlbmRlZFxuICAvLyBPdGhlcndpc2UsIHRoZSBlbXB0eSBzdHJpbmcgaXMgYXBwZW5kZWRcbiAgYXBwZW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0lubGluZSgpKSB7XG4gICAgICB0aGlzLnJlcGxhY2VTdGFjaygoY3VycmVudCkgPT4gWycgIT0gbnVsbCA/ICcsIGN1cnJlbnQsICcgOiBcIlwiJ10pO1xuXG4gICAgICB0aGlzLnB1c2hTb3VyY2UodGhpcy5hcHBlbmRUb0J1ZmZlcih0aGlzLnBvcFN0YWNrKCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGxvY2FsID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgdGhpcy5wdXNoU291cmNlKFsnaWYgKCcsIGxvY2FsLCAnICE9IG51bGwpIHsgJywgdGhpcy5hcHBlbmRUb0J1ZmZlcihsb2NhbCwgdW5kZWZpbmVkLCB0cnVlKSwgJyB9J10pO1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuaXNTaW1wbGUpIHtcbiAgICAgICAgdGhpcy5wdXNoU291cmNlKFsnZWxzZSB7ICcsIHRoaXMuYXBwZW5kVG9CdWZmZXIoXCInJ1wiLCB1bmRlZmluZWQsIHRydWUpLCAnIH0nXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIFthcHBlbmRFc2NhcGVkXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIEVzY2FwZSBgdmFsdWVgIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGJ1ZmZlclxuICBhcHBlbmRFc2NhcGVkOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1c2hTb3VyY2UodGhpcy5hcHBlbmRUb0J1ZmZlcihcbiAgICAgICAgW3RoaXMuYWxpYXNhYmxlKCdjb250YWluZXIuZXNjYXBlRXhwcmVzc2lvbicpLCAnKCcsIHRoaXMucG9wU3RhY2soKSwgJyknXSkpO1xuICB9LFxuXG4gIC8vIFtnZXRDb250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi5cbiAgLy8gQ29tcGlsZXIgdmFsdWUsIGFmdGVyOiBsYXN0Q29udGV4dD1kZXB0aFxuICAvL1xuICAvLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSBgbGFzdENvbnRleHRgIGNvbXBpbGVyIHZhbHVlIHRvIHRoZSBkZXB0aFxuICBnZXRDb250ZXh0OiBmdW5jdGlvbihkZXB0aCkge1xuICAgIHRoaXMubGFzdENvbnRleHQgPSBkZXB0aDtcbiAgfSxcblxuICAvLyBbcHVzaENvbnRleHRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGN1cnJlbnRDb250ZXh0LCAuLi5cbiAgLy9cbiAgLy8gUHVzaGVzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBjb250ZXh0IG9udG8gdGhlIHN0YWNrLlxuICBwdXNoQ29udGV4dDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHRoaXMuY29udGV4dE5hbWUodGhpcy5sYXN0Q29udGV4dCkpO1xuICB9LFxuXG4gIC8vIFtsb29rdXBPbkNvbnRleHRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IGN1cnJlbnRDb250ZXh0W25hbWVdLCAuLi5cbiAgLy9cbiAgLy8gTG9va3MgdXAgdGhlIHZhbHVlIG9mIGBuYW1lYCBvbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwdXNoZXNcbiAgLy8gaXQgb250byB0aGUgc3RhY2suXG4gIGxvb2t1cE9uQ29udGV4dDogZnVuY3Rpb24ocGFydHMsIGZhbHN5LCBzdHJpY3QsIHNjb3BlZCkge1xuICAgIGxldCBpID0gMDtcblxuICAgIGlmICghc2NvcGVkICYmIHRoaXMub3B0aW9ucy5jb21wYXQgJiYgIXRoaXMubGFzdENvbnRleHQpIHtcbiAgICAgIC8vIFRoZSBkZXB0aGVkIHF1ZXJ5IGlzIGV4cGVjdGVkIHRvIGhhbmRsZSB0aGUgdW5kZWZpbmVkIGxvZ2ljIGZvciB0aGUgcm9vdCBsZXZlbCB0aGF0XG4gICAgICAvLyBpcyBpbXBsZW1lbnRlZCBiZWxvdywgc28gd2UgZXZhbHVhdGUgdGhhdCBkaXJlY3RseSBpbiBjb21wYXQgbW9kZVxuICAgICAgdGhpcy5wdXNoKHRoaXMuZGVwdGhlZExvb2t1cChwYXJ0c1tpKytdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaENvbnRleHQoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVQYXRoKCdjb250ZXh0JywgcGFydHMsIGksIGZhbHN5LCBzdHJpY3QpO1xuICB9LFxuXG4gIC8vIFtsb29rdXBCbG9ja1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBibG9ja1BhcmFtW25hbWVdLCAuLi5cbiAgLy9cbiAgLy8gTG9va3MgdXAgdGhlIHZhbHVlIG9mIGBwYXJ0c2Agb24gdGhlIGdpdmVuIGJsb2NrIHBhcmFtIGFuZCBwdXNoZXNcbiAgLy8gaXQgb250byB0aGUgc3RhY2suXG4gIGxvb2t1cEJsb2NrUGFyYW06IGZ1bmN0aW9uKGJsb2NrUGFyYW1JZCwgcGFydHMpIHtcbiAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdHJ1ZTtcblxuICAgIHRoaXMucHVzaChbJ2Jsb2NrUGFyYW1zWycsIGJsb2NrUGFyYW1JZFswXSwgJ11bJywgYmxvY2tQYXJhbUlkWzFdLCAnXSddKTtcbiAgICB0aGlzLnJlc29sdmVQYXRoKCdjb250ZXh0JywgcGFydHMsIDEpO1xuICB9LFxuXG4gIC8vIFtsb29rdXBEYXRhXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBkYXRhLCAuLi5cbiAgLy9cbiAgLy8gUHVzaCB0aGUgZGF0YSBsb29rdXAgb3BlcmF0b3JcbiAgbG9va3VwRGF0YTogZnVuY3Rpb24oZGVwdGgsIHBhcnRzLCBzdHJpY3QpIHtcbiAgICBpZiAoIWRlcHRoKSB7XG4gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ2RhdGEnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdjb250YWluZXIuZGF0YShkYXRhLCAnICsgZGVwdGggKyAnKScpO1xuICAgIH1cblxuICAgIHRoaXMucmVzb2x2ZVBhdGgoJ2RhdGEnLCBwYXJ0cywgMCwgdHJ1ZSwgc3RyaWN0KTtcbiAgfSxcblxuICByZXNvbHZlUGF0aDogZnVuY3Rpb24odHlwZSwgcGFydHMsIGksIGZhbHN5LCBzdHJpY3QpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLnN0cmljdCB8fCB0aGlzLm9wdGlvbnMuYXNzdW1lT2JqZWN0cykge1xuICAgICAgdGhpcy5wdXNoKHN0cmljdExvb2t1cCh0aGlzLm9wdGlvbnMuc3RyaWN0ICYmIHN0cmljdCwgdGhpcywgcGFydHMsIHR5cGUpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbGVuID0gcGFydHMubGVuZ3RoO1xuICAgIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuICAgICAgdGhpcy5yZXBsYWNlU3RhY2soKGN1cnJlbnQpID0+IHtcbiAgICAgICAgbGV0IGxvb2t1cCA9IHRoaXMubmFtZUxvb2t1cChjdXJyZW50LCBwYXJ0c1tpXSwgdHlwZSk7XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgemVybyBhbmQgZmFsc2UgYXJlIGhhbmRsZWQgcHJvcGVybHkgaWYgdGhlIGNvbnRleHQgKGZhbHN5IGZsYWcpXG4gICAgICAgIC8vIG5lZWRzIHRvIGhhdmUgdGhlIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZXNlIHZhbHVlcy5cbiAgICAgICAgaWYgKCFmYWxzeSkge1xuICAgICAgICAgIHJldHVybiBbJyAhPSBudWxsID8gJywgbG9va3VwLCAnIDogJywgY3VycmVudF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIHdlIGNhbiB1c2UgZ2VuZXJpYyBmYWxzeSBoYW5kbGluZ1xuICAgICAgICAgIHJldHVybiBbJyAmJiAnLCBsb29rdXBdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG4gICAgfVxuICB9LFxuXG4gIC8vIFtyZXNvbHZlUG9zc2libGVMYW1iZGFdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IHZhbHVlLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXNvbHZlZCB2YWx1ZSwgLi4uXG4gIC8vXG4gIC8vIElmIHRoZSBgdmFsdWVgIGlzIGEgbGFtYmRhLCByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayBieVxuICAvLyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBsYW1iZGFcbiAgcmVzb2x2ZVBvc3NpYmxlTGFtYmRhOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1c2goW3RoaXMuYWxpYXNhYmxlKCdjb250YWluZXIubGFtYmRhJyksICcoJywgdGhpcy5wb3BTdGFjaygpLCAnLCAnLCB0aGlzLmNvbnRleHROYW1lKDApLCAnKSddKTtcbiAgfSxcblxuICAvLyBbcHVzaFN0cmluZ1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBzdHJpbmcsIGN1cnJlbnRDb250ZXh0LCAuLi5cbiAgLy9cbiAgLy8gVGhpcyBvcGNvZGUgaXMgZGVzaWduZWQgZm9yIHVzZSBpbiBzdHJpbmcgbW9kZSwgd2hpY2hcbiAgLy8gcHJvdmlkZXMgdGhlIHN0cmluZyB2YWx1ZSBvZiBhIHBhcmFtZXRlciBhbG9uZyB3aXRoIGl0c1xuICAvLyBkZXB0aCByYXRoZXIgdGhhbiByZXNvbHZpbmcgaXQgaW1tZWRpYXRlbHkuXG4gIHB1c2hTdHJpbmdQYXJhbTogZnVuY3Rpb24oc3RyaW5nLCB0eXBlKSB7XG4gICAgdGhpcy5wdXNoQ29udGV4dCgpO1xuICAgIHRoaXMucHVzaFN0cmluZyh0eXBlKTtcblxuICAgIC8vIElmIGl0J3MgYSBzdWJleHByZXNzaW9uLCB0aGUgc3RyaW5nIHJlc3VsdFxuICAgIC8vIHdpbGwgYmUgcHVzaGVkIGFmdGVyIHRoaXMgb3Bjb2RlLlxuICAgIGlmICh0eXBlICE9PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnB1c2hTdHJpbmcoc3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChzdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBlbXB0eUhhc2g6IGZ1bmN0aW9uKG9taXRFbXB0eSkge1xuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hJZHNcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hDb250ZXh0c1xuICAgICAgdGhpcy5wdXNoKCd7fScpOyAvLyBoYXNoVHlwZXNcbiAgICB9XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG9taXRFbXB0eSA/ICd1bmRlZmluZWQnIDogJ3t9Jyk7XG4gIH0sXG4gIHB1c2hIYXNoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2hlcy5wdXNoKHRoaXMuaGFzaCk7XG4gICAgfVxuICAgIHRoaXMuaGFzaCA9IHt2YWx1ZXM6IFtdLCB0eXBlczogW10sIGNvbnRleHRzOiBbXSwgaWRzOiBbXX07XG4gIH0sXG4gIHBvcEhhc2g6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBoYXNoID0gdGhpcy5oYXNoO1xuICAgIHRoaXMuaGFzaCA9IHRoaXMuaGFzaGVzLnBvcCgpO1xuXG4gICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC5pZHMpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2godGhpcy5vYmplY3RMaXRlcmFsKGhhc2guY29udGV4dHMpKTtcbiAgICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC50eXBlcykpO1xuICAgIH1cblxuICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC52YWx1ZXMpKTtcbiAgfSxcblxuICAvLyBbcHVzaFN0cmluZ11cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcXVvdGVkU3RyaW5nKHN0cmluZyksIC4uLlxuICAvL1xuICAvLyBQdXNoIGEgcXVvdGVkIHZlcnNpb24gb2YgYHN0cmluZ2Agb250byB0aGUgc3RhY2tcbiAgcHVzaFN0cmluZzogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHRoaXMucXVvdGVkU3RyaW5nKHN0cmluZykpO1xuICB9LFxuXG4gIC8vIFtwdXNoTGl0ZXJhbF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogdmFsdWUsIC4uLlxuICAvL1xuICAvLyBQdXNoZXMgYSB2YWx1ZSBvbnRvIHRoZSBzdGFjay4gVGhpcyBvcGVyYXRpb24gcHJldmVudHNcbiAgLy8gdGhlIGNvbXBpbGVyIGZyb20gY3JlYXRpbmcgYSB0ZW1wb3JhcnkgdmFyaWFibGUgdG8gaG9sZFxuICAvLyBpdC5cbiAgcHVzaExpdGVyYWw6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKHZhbHVlKTtcbiAgfSxcblxuICAvLyBbcHVzaFByb2dyYW1dXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHByb2dyYW0oZ3VpZCksIC4uLlxuICAvL1xuICAvLyBQdXNoIGEgcHJvZ3JhbSBleHByZXNzaW9uIG9udG8gdGhlIHN0YWNrLiBUaGlzIHRha2VzXG4gIC8vIGEgY29tcGlsZS10aW1lIGd1aWQgYW5kIGNvbnZlcnRzIGl0IGludG8gYSBydW50aW1lLWFjY2Vzc2libGVcbiAgLy8gZXhwcmVzc2lvbi5cbiAgcHVzaFByb2dyYW06IGZ1bmN0aW9uKGd1aWQpIHtcbiAgICBpZiAoZ3VpZCAhPSBudWxsKSB7XG4gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5wcm9ncmFtRXhwcmVzc2lvbihndWlkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChudWxsKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gW3JlZ2lzdGVyRGVjb3JhdG9yXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgZGVjb3JhdG9yJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgZGVjb3JhdG9yLFxuICAvLyBhbmQgaW5zZXJ0cyB0aGUgZGVjb3JhdG9yIGludG8gdGhlIGRlY29yYXRvcnMgbGlzdC5cbiAgcmVnaXN0ZXJEZWNvcmF0b3IocGFyYW1TaXplLCBuYW1lKSB7XG4gICAgbGV0IGZvdW5kRGVjb3JhdG9yID0gdGhpcy5uYW1lTG9va3VwKCdkZWNvcmF0b3JzJywgbmFtZSwgJ2RlY29yYXRvcicpLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplKTtcblxuICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKFtcbiAgICAgICdmbiA9ICcsXG4gICAgICB0aGlzLmRlY29yYXRvcnMuZnVuY3Rpb25DYWxsKGZvdW5kRGVjb3JhdG9yLCAnJywgWydmbicsICdwcm9wcycsICdjb250YWluZXInLCBvcHRpb25zXSksXG4gICAgICAnIHx8IGZuOydcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlSGVscGVyXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvblxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgaGVscGVyJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgaGVscGVyLFxuICAvLyBhbmQgcHVzaGVzIHRoZSBoZWxwZXIncyByZXR1cm4gdmFsdWUgb250byB0aGUgc3RhY2suXG4gIC8vXG4gIC8vIElmIHRoZSBoZWxwZXIgaXMgbm90IGZvdW5kLCBgaGVscGVyTWlzc2luZ2AgaXMgY2FsbGVkLlxuICBpbnZva2VIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgaXNTaW1wbGUpIHtcbiAgICBsZXQgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICBoZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKHBhcmFtU2l6ZSwgbmFtZSksXG4gICAgICAgIHNpbXBsZSA9IGlzU2ltcGxlID8gW2hlbHBlci5uYW1lLCAnIHx8ICddIDogJyc7XG5cbiAgICBsZXQgbG9va3VwID0gWycoJ10uY29uY2F0KHNpbXBsZSwgbm9uSGVscGVyKTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIGxvb2t1cC5wdXNoKCcgfHwgJywgdGhpcy5hbGlhc2FibGUoJ2hlbHBlcnMuaGVscGVyTWlzc2luZycpKTtcbiAgICB9XG4gICAgbG9va3VwLnB1c2goJyknKTtcblxuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwobG9va3VwLCAnY2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKSk7XG4gIH0sXG5cbiAgLy8gW2ludm9rZUtub3duSGVscGVyXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvblxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gdGhlIGhlbHBlciBpcyBrbm93biB0byBleGlzdCxcbiAgLy8gc28gYSBgaGVscGVyTWlzc2luZ2AgZmFsbGJhY2sgaXMgbm90IHJlcXVpcmVkLlxuICBpbnZva2VLbm93bkhlbHBlcjogZnVuY3Rpb24ocGFyYW1TaXplLCBuYW1lKSB7XG4gICAgbGV0IGhlbHBlciA9IHRoaXMuc2V0dXBIZWxwZXIocGFyYW1TaXplLCBuYW1lKTtcbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGhlbHBlci5uYW1lLCAnY2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKSk7XG4gIH0sXG5cbiAgLy8gW2ludm9rZUFtYmlndW91c11cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgcGFyYW1zLi4uLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXN1bHQgb2YgZGlzYW1iaWd1YXRpb25cbiAgLy9cbiAgLy8gVGhpcyBvcGVyYXRpb24gaXMgdXNlZCB3aGVuIGFuIGV4cHJlc3Npb24gbGlrZSBge3tmb299fWBcbiAgLy8gaXMgcHJvdmlkZWQsIGJ1dCB3ZSBkb24ndCBrbm93IGF0IGNvbXBpbGUtdGltZSB3aGV0aGVyIGl0XG4gIC8vIGlzIGEgaGVscGVyIG9yIGEgcGF0aC5cbiAgLy9cbiAgLy8gVGhpcyBvcGVyYXRpb24gZW1pdHMgbW9yZSBjb2RlIHRoYW4gdGhlIG90aGVyIG9wdGlvbnMsXG4gIC8vIGFuZCBjYW4gYmUgYXZvaWRlZCBieSBwYXNzaW5nIHRoZSBga25vd25IZWxwZXJzYCBhbmRcbiAgLy8gYGtub3duSGVscGVyc09ubHlgIGZsYWdzIGF0IGNvbXBpbGUtdGltZS5cbiAgaW52b2tlQW1iaWd1b3VzOiBmdW5jdGlvbihuYW1lLCBoZWxwZXJDYWxsKSB7XG4gICAgdGhpcy51c2VSZWdpc3RlcignaGVscGVyJyk7XG5cbiAgICBsZXQgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpO1xuXG4gICAgdGhpcy5lbXB0eUhhc2goKTtcbiAgICBsZXQgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcigwLCBuYW1lLCBoZWxwZXJDYWxsKTtcblxuICAgIGxldCBoZWxwZXJOYW1lID0gdGhpcy5sYXN0SGVscGVyID0gdGhpcy5uYW1lTG9va3VwKCdoZWxwZXJzJywgbmFtZSwgJ2hlbHBlcicpO1xuXG4gICAgbGV0IGxvb2t1cCA9IFsnKCcsICcoaGVscGVyID0gJywgaGVscGVyTmFtZSwgJyB8fCAnLCBub25IZWxwZXIsICcpJ107XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBsb29rdXBbMF0gPSAnKGhlbHBlciA9ICc7XG4gICAgICBsb29rdXAucHVzaChcbiAgICAgICAgJyAhPSBudWxsID8gaGVscGVyIDogJyxcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2hlbHBlcnMuaGVscGVyTWlzc2luZycpXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucHVzaChbXG4gICAgICAgICcoJywgbG9va3VwLFxuICAgICAgICAoaGVscGVyLnBhcmFtc0luaXQgPyBbJyksKCcsIGhlbHBlci5wYXJhbXNJbml0XSA6IFtdKSwgJyksJyxcbiAgICAgICAgJyh0eXBlb2YgaGVscGVyID09PSAnLCB0aGlzLmFsaWFzYWJsZSgnXCJmdW5jdGlvblwiJyksICcgPyAnLFxuICAgICAgICB0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoJ2hlbHBlcicsICdjYWxsJywgaGVscGVyLmNhbGxQYXJhbXMpLCAnIDogaGVscGVyKSknXG4gICAgXSk7XG4gIH0sXG5cbiAgLy8gW2ludm9rZVBhcnRpYWxdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGNvbnRleHQsIC4uLlxuICAvLyBPbiBzdGFjayBhZnRlcjogcmVzdWx0IG9mIHBhcnRpYWwgaW52b2NhdGlvblxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBwb3BzIG9mZiBhIGNvbnRleHQsIGludm9rZXMgYSBwYXJ0aWFsIHdpdGggdGhhdCBjb250ZXh0LFxuICAvLyBhbmQgcHVzaGVzIHRoZSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gYmFjay5cbiAgaW52b2tlUGFydGlhbDogZnVuY3Rpb24oaXNEeW5hbWljLCBuYW1lLCBpbmRlbnQpIHtcbiAgICBsZXQgcGFyYW1zID0gW10sXG4gICAgICAgIG9wdGlvbnMgPSB0aGlzLnNldHVwUGFyYW1zKG5hbWUsIDEsIHBhcmFtcyk7XG5cbiAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICBuYW1lID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgZGVsZXRlIG9wdGlvbnMubmFtZTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICBvcHRpb25zLmluZGVudCA9IEpTT04uc3RyaW5naWZ5KGluZGVudCk7XG4gICAgfVxuICAgIG9wdGlvbnMuaGVscGVycyA9ICdoZWxwZXJzJztcbiAgICBvcHRpb25zLnBhcnRpYWxzID0gJ3BhcnRpYWxzJztcbiAgICBvcHRpb25zLmRlY29yYXRvcnMgPSAnY29udGFpbmVyLmRlY29yYXRvcnMnO1xuXG4gICAgaWYgKCFpc0R5bmFtaWMpIHtcbiAgICAgIHBhcmFtcy51bnNoaWZ0KHRoaXMubmFtZUxvb2t1cCgncGFydGlhbHMnLCBuYW1lLCAncGFydGlhbCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnVuc2hpZnQobmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXQpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGhzID0gJ2RlcHRocyc7XG4gICAgfVxuICAgIG9wdGlvbnMgPSB0aGlzLm9iamVjdExpdGVyYWwob3B0aW9ucyk7XG4gICAgcGFyYW1zLnB1c2gob3B0aW9ucyk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdjb250YWluZXIuaW52b2tlUGFydGlhbCcsICcnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYXNzaWduVG9IYXNoXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uLCBoYXNoLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4sIGhhc2gsIC4uLlxuICAvL1xuICAvLyBQb3BzIGEgdmFsdWUgb2ZmIHRoZSBzdGFjayBhbmQgYXNzaWducyBpdCB0byB0aGUgY3VycmVudCBoYXNoXG4gIGFzc2lnblRvSGFzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB0eXBlLFxuICAgICAgICBpZDtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBpZCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0eXBlID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgY29udGV4dCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaGFzaCA9IHRoaXMuaGFzaDtcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgaGFzaC5jb250ZXh0c1trZXldID0gY29udGV4dDtcbiAgICB9XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGhhc2gudHlwZXNba2V5XSA9IHR5cGU7XG4gICAgfVxuICAgIGlmIChpZCkge1xuICAgICAgaGFzaC5pZHNba2V5XSA9IGlkO1xuICAgIH1cbiAgICBoYXNoLnZhbHVlc1trZXldID0gdmFsdWU7XG4gIH0sXG5cbiAgcHVzaElkOiBmdW5jdGlvbih0eXBlLCBuYW1lLCBjaGlsZCkge1xuICAgIGlmICh0eXBlID09PSAnQmxvY2tQYXJhbScpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChcbiAgICAgICAgICAnYmxvY2tQYXJhbXNbJyArIG5hbWVbMF0gKyAnXS5wYXRoWycgKyBuYW1lWzFdICsgJ10nXG4gICAgICAgICAgKyAoY2hpbGQgPyAnICsgJyArIEpTT04uc3RyaW5naWZ5KCcuJyArIGNoaWxkKSA6ICcnKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnUGF0aEV4cHJlc3Npb24nKSB7XG4gICAgICB0aGlzLnB1c2hTdHJpbmcobmFtZSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgndHJ1ZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwoJ251bGwnKTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gSEVMUEVSU1xuXG4gIGNvbXBpbGVyOiBKYXZhU2NyaXB0Q29tcGlsZXIsXG5cbiAgY29tcGlsZUNoaWxkcmVuOiBmdW5jdGlvbihlbnZpcm9ubWVudCwgb3B0aW9ucykge1xuICAgIGxldCBjaGlsZHJlbiA9IGVudmlyb25tZW50LmNoaWxkcmVuLCBjaGlsZCwgY29tcGlsZXI7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICAgIGNvbXBpbGVyID0gbmV3IHRoaXMuY29tcGlsZXIoKTsgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuZXctY2FwXG5cbiAgICAgIGxldCBleGlzdGluZyA9IHRoaXMubWF0Y2hFeGlzdGluZ1Byb2dyYW0oY2hpbGQpO1xuXG4gICAgICBpZiAoZXhpc3RpbmcgPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXMucHVzaCgnJyk7ICAgICAvLyBQbGFjZWhvbGRlciB0byBwcmV2ZW50IG5hbWUgY29uZmxpY3RzIGZvciBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnByb2dyYW1zLmxlbmd0aDtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGluZGV4O1xuICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXNbaW5kZXhdID0gY29tcGlsZXIuY29tcGlsZShjaGlsZCwgb3B0aW9ucywgdGhpcy5jb250ZXh0LCAhdGhpcy5wcmVjb21waWxlKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LmRlY29yYXRvcnNbaW5kZXhdID0gY29tcGlsZXIuZGVjb3JhdG9ycztcbiAgICAgICAgdGhpcy5jb250ZXh0LmVudmlyb25tZW50c1tpbmRleF0gPSBjaGlsZDtcblxuICAgICAgICB0aGlzLnVzZURlcHRocyA9IHRoaXMudXNlRGVwdGhzIHx8IGNvbXBpbGVyLnVzZURlcHRocztcbiAgICAgICAgdGhpcy51c2VCbG9ja1BhcmFtcyA9IHRoaXMudXNlQmxvY2tQYXJhbXMgfHwgY29tcGlsZXIudXNlQmxvY2tQYXJhbXM7XG4gICAgICAgIGNoaWxkLnVzZURlcHRocyA9IHRoaXMudXNlRGVwdGhzO1xuICAgICAgICBjaGlsZC51c2VCbG9ja1BhcmFtcyA9IHRoaXMudXNlQmxvY2tQYXJhbXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZC5pbmRleCA9IGV4aXN0aW5nLmluZGV4O1xuICAgICAgICBjaGlsZC5uYW1lID0gJ3Byb2dyYW0nICsgZXhpc3RpbmcuaW5kZXg7XG5cbiAgICAgICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBleGlzdGluZy51c2VEZXB0aHM7XG4gICAgICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGV4aXN0aW5nLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgbWF0Y2hFeGlzdGluZ1Byb2dyYW06IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBlbnZpcm9ubWVudCA9IHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaV07XG4gICAgICBpZiAoZW52aXJvbm1lbnQgJiYgZW52aXJvbm1lbnQuZXF1YWxzKGNoaWxkKSkge1xuICAgICAgICByZXR1cm4gZW52aXJvbm1lbnQ7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2dyYW1FeHByZXNzaW9uOiBmdW5jdGlvbihndWlkKSB7XG4gICAgbGV0IGNoaWxkID0gdGhpcy5lbnZpcm9ubWVudC5jaGlsZHJlbltndWlkXSxcbiAgICAgICAgcHJvZ3JhbVBhcmFtcyA9IFtjaGlsZC5pbmRleCwgJ2RhdGEnLCBjaGlsZC5ibG9ja1BhcmFtc107XG5cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykge1xuICAgICAgcHJvZ3JhbVBhcmFtcy5wdXNoKCdibG9ja1BhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGhpcy51c2VEZXB0aHMpIHtcbiAgICAgIHByb2dyYW1QYXJhbXMucHVzaCgnZGVwdGhzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdjb250YWluZXIucHJvZ3JhbSgnICsgcHJvZ3JhbVBhcmFtcy5qb2luKCcsICcpICsgJyknO1xuICB9LFxuXG4gIHVzZVJlZ2lzdGVyOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgaWYgKCF0aGlzLnJlZ2lzdGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5yZWdpc3RlcnNbbmFtZV0gPSB0cnVlO1xuICAgICAgdGhpcy5yZWdpc3RlcnMubGlzdC5wdXNoKG5hbWUpO1xuICAgIH1cbiAgfSxcblxuICBwdXNoOiBmdW5jdGlvbihleHByKSB7XG4gICAgaWYgKCEoZXhwciBpbnN0YW5jZW9mIExpdGVyYWwpKSB7XG4gICAgICBleHByID0gdGhpcy5zb3VyY2Uud3JhcChleHByKTtcbiAgICB9XG5cbiAgICB0aGlzLmlubGluZVN0YWNrLnB1c2goZXhwcik7XG4gICAgcmV0dXJuIGV4cHI7XG4gIH0sXG5cbiAgcHVzaFN0YWNrTGl0ZXJhbDogZnVuY3Rpb24oaXRlbSkge1xuICAgIHRoaXMucHVzaChuZXcgTGl0ZXJhbChpdGVtKSk7XG4gIH0sXG5cbiAgcHVzaFNvdXJjZTogZnVuY3Rpb24oc291cmNlKSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIHRoaXMuc291cmNlLnB1c2goXG4gICAgICAgICAgdGhpcy5hcHBlbmRUb0J1ZmZlcih0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcodGhpcy5wZW5kaW5nQ29udGVudCksIHRoaXMucGVuZGluZ0xvY2F0aW9uKSk7XG4gICAgICB0aGlzLnBlbmRpbmdDb250ZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChzb3VyY2UpIHtcbiAgICAgIHRoaXMuc291cmNlLnB1c2goc291cmNlKTtcbiAgICB9XG4gIH0sXG5cbiAgcmVwbGFjZVN0YWNrOiBmdW5jdGlvbihjYWxsYmFjaykge1xuICAgIGxldCBwcmVmaXggPSBbJygnXSxcbiAgICAgICAgc3RhY2ssXG4gICAgICAgIGNyZWF0ZWRTdGFjayxcbiAgICAgICAgdXNlZExpdGVyYWw7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmICghdGhpcy5pc0lubGluZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdyZXBsYWNlU3RhY2sgb24gbm9uLWlubGluZScpO1xuICAgIH1cblxuICAgIC8vIFdlIHdhbnQgdG8gbWVyZ2UgdGhlIGlubGluZSBzdGF0ZW1lbnQgaW50byB0aGUgcmVwbGFjZW1lbnQgc3RhdGVtZW50IHZpYSAnLCdcbiAgICBsZXQgdG9wID0gdGhpcy5wb3BTdGFjayh0cnVlKTtcblxuICAgIGlmICh0b3AgaW5zdGFuY2VvZiBMaXRlcmFsKSB7XG4gICAgICAvLyBMaXRlcmFscyBkbyBub3QgbmVlZCB0byBiZSBpbmxpbmVkXG4gICAgICBzdGFjayA9IFt0b3AudmFsdWVdO1xuICAgICAgcHJlZml4ID0gWycoJywgc3RhY2tdO1xuICAgICAgdXNlZExpdGVyYWwgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBHZXQgb3IgY3JlYXRlIHRoZSBjdXJyZW50IHN0YWNrIG5hbWUgZm9yIHVzZSBieSB0aGUgaW5saW5lXG4gICAgICBjcmVhdGVkU3RhY2sgPSB0cnVlO1xuICAgICAgbGV0IG5hbWUgPSB0aGlzLmluY3JTdGFjaygpO1xuXG4gICAgICBwcmVmaXggPSBbJygoJywgdGhpcy5wdXNoKG5hbWUpLCAnID0gJywgdG9wLCAnKSddO1xuICAgICAgc3RhY2sgPSB0aGlzLnRvcFN0YWNrKCk7XG4gICAgfVxuXG4gICAgbGV0IGl0ZW0gPSBjYWxsYmFjay5jYWxsKHRoaXMsIHN0YWNrKTtcblxuICAgIGlmICghdXNlZExpdGVyYWwpIHtcbiAgICAgIHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG4gICAgaWYgKGNyZWF0ZWRTdGFjaykge1xuICAgICAgdGhpcy5zdGFja1Nsb3QtLTtcbiAgICB9XG4gICAgdGhpcy5wdXNoKHByZWZpeC5jb25jYXQoaXRlbSwgJyknKSk7XG4gIH0sXG5cbiAgaW5jclN0YWNrOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0YWNrU2xvdCsrO1xuICAgIGlmICh0aGlzLnN0YWNrU2xvdCA+IHRoaXMuc3RhY2tWYXJzLmxlbmd0aCkgeyB0aGlzLnN0YWNrVmFycy5wdXNoKCdzdGFjaycgKyB0aGlzLnN0YWNrU2xvdCk7IH1cbiAgICByZXR1cm4gdGhpcy50b3BTdGFja05hbWUoKTtcbiAgfSxcbiAgdG9wU3RhY2tOYW1lOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ3N0YWNrJyArIHRoaXMuc3RhY2tTbG90O1xuICB9LFxuICBmbHVzaElubGluZTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGlubGluZVN0YWNrID0gdGhpcy5pbmxpbmVTdGFjaztcbiAgICB0aGlzLmlubGluZVN0YWNrID0gW107XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGlubGluZVN0YWNrLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBsZXQgZW50cnkgPSBpbmxpbmVTdGFja1tpXTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGVudHJ5IGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgICB0aGlzLmNvbXBpbGVTdGFjay5wdXNoKGVudHJ5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBzdGFjayA9IHRoaXMuaW5jclN0YWNrKCk7XG4gICAgICAgIHRoaXMucHVzaFNvdXJjZShbc3RhY2ssICcgPSAnLCBlbnRyeSwgJzsnXSk7XG4gICAgICAgIHRoaXMuY29tcGlsZVN0YWNrLnB1c2goc3RhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgaXNJbmxpbmU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmlubGluZVN0YWNrLmxlbmd0aDtcbiAgfSxcblxuICBwb3BTdGFjazogZnVuY3Rpb24od3JhcHBlZCkge1xuICAgIGxldCBpbmxpbmUgPSB0aGlzLmlzSW5saW5lKCksXG4gICAgICAgIGl0ZW0gPSAoaW5saW5lID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0YWNrKS5wb3AoKTtcblxuICAgIGlmICghd3JhcHBlZCAmJiAoaXRlbSBpbnN0YW5jZW9mIExpdGVyYWwpKSB7XG4gICAgICByZXR1cm4gaXRlbS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFpbmxpbmUpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgaWYgKCF0aGlzLnN0YWNrU2xvdCkge1xuICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ludmFsaWQgc3RhY2sgcG9wJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGFja1Nsb3QtLTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICB0b3BTdGFjazogZnVuY3Rpb24oKSB7XG4gICAgbGV0IHN0YWNrID0gKHRoaXMuaXNJbmxpbmUoKSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjayksXG4gICAgICAgIGl0ZW0gPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICBjb250ZXh0TmFtZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIGlmICh0aGlzLnVzZURlcHRocyAmJiBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gJ2RlcHRoc1snICsgY29udGV4dCArICddJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdkZXB0aCcgKyBjb250ZXh0O1xuICAgIH1cbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcoc3RyKTtcbiAgfSxcblxuICBvYmplY3RMaXRlcmFsOiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uub2JqZWN0TGl0ZXJhbChvYmopO1xuICB9LFxuXG4gIGFsaWFzYWJsZTogZnVuY3Rpb24obmFtZSkge1xuICAgIGxldCByZXQgPSB0aGlzLmFsaWFzZXNbbmFtZV07XG4gICAgaWYgKHJldCkge1xuICAgICAgcmV0LnJlZmVyZW5jZUNvdW50Kys7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHJldCA9IHRoaXMuYWxpYXNlc1tuYW1lXSA9IHRoaXMuc291cmNlLndyYXAobmFtZSk7XG4gICAgcmV0LmFsaWFzYWJsZSA9IHRydWU7XG4gICAgcmV0LnJlZmVyZW5jZUNvdW50ID0gMTtcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgYmxvY2tIZWxwZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gW10sXG4gICAgICAgIHBhcmFtc0luaXQgPSB0aGlzLnNldHVwSGVscGVyQXJncyhuYW1lLCBwYXJhbVNpemUsIHBhcmFtcywgYmxvY2tIZWxwZXIpO1xuICAgIGxldCBmb3VuZEhlbHBlciA9IHRoaXMubmFtZUxvb2t1cCgnaGVscGVycycsIG5hbWUsICdoZWxwZXInKSxcbiAgICAgICAgY2FsbENvbnRleHQgPSB0aGlzLmFsaWFzYWJsZShgJHt0aGlzLmNvbnRleHROYW1lKDApfSAhPSBudWxsID8gJHt0aGlzLmNvbnRleHROYW1lKDApfSA6IHt9YCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBwYXJhbXNJbml0OiBwYXJhbXNJbml0LFxuICAgICAgbmFtZTogZm91bmRIZWxwZXIsXG4gICAgICBjYWxsUGFyYW1zOiBbY2FsbENvbnRleHRdLmNvbmNhdChwYXJhbXMpXG4gICAgfTtcbiAgfSxcblxuICBzZXR1cFBhcmFtczogZnVuY3Rpb24oaGVscGVyLCBwYXJhbVNpemUsIHBhcmFtcykge1xuICAgIGxldCBvcHRpb25zID0ge30sXG4gICAgICAgIGNvbnRleHRzID0gW10sXG4gICAgICAgIHR5cGVzID0gW10sXG4gICAgICAgIGlkcyA9IFtdLFxuICAgICAgICBvYmplY3RBcmdzID0gIXBhcmFtcyxcbiAgICAgICAgcGFyYW07XG5cbiAgICBpZiAob2JqZWN0QXJncykge1xuICAgICAgcGFyYW1zID0gW107XG4gICAgfVxuXG4gICAgb3B0aW9ucy5uYW1lID0gdGhpcy5xdW90ZWRTdHJpbmcoaGVscGVyKTtcbiAgICBvcHRpb25zLmhhc2ggPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICBpZiAodGhpcy50cmFja0lkcykge1xuICAgICAgb3B0aW9ucy5oYXNoSWRzID0gdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIG9wdGlvbnMuaGFzaFR5cGVzID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgb3B0aW9ucy5oYXNoQ29udGV4dHMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgfVxuXG4gICAgbGV0IGludmVyc2UgPSB0aGlzLnBvcFN0YWNrKCksXG4gICAgICAgIHByb2dyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICAvLyBBdm9pZCBzZXR0aW5nIGZuIGFuZCBpbnZlcnNlIGlmIG5laXRoZXIgYXJlIHNldC4gVGhpcyBhbGxvd3NcbiAgICAvLyBoZWxwZXJzIHRvIGRvIGEgY2hlY2sgZm9yIGBpZiAob3B0aW9ucy5mbilgXG4gICAgaWYgKHByb2dyYW0gfHwgaW52ZXJzZSkge1xuICAgICAgb3B0aW9ucy5mbiA9IHByb2dyYW0gfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICAgIG9wdGlvbnMuaW52ZXJzZSA9IGludmVyc2UgfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICB9XG5cbiAgICAvLyBUaGUgcGFyYW1ldGVycyBnbyBvbiB0byB0aGUgc3RhY2sgaW4gb3JkZXIgKG1ha2luZyBzdXJlIHRoYXQgdGhleSBhcmUgZXZhbHVhdGVkIGluIG9yZGVyKVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gcG9wIHRoZW0gb2ZmIHRoZSBzdGFjayBpbiByZXZlcnNlIG9yZGVyXG4gICAgbGV0IGkgPSBwYXJhbVNpemU7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcGFyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBwYXJhbXNbaV0gPSBwYXJhbTtcblxuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgaWRzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICAgIHR5cGVzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgICBjb250ZXh0c1tpXSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqZWN0QXJncykge1xuICAgICAgb3B0aW9ucy5hcmdzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmlkcyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoaWRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLnR5cGVzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheSh0eXBlcyk7XG4gICAgICBvcHRpb25zLmNvbnRleHRzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShjb250ZXh0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSAnZGF0YSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gJ2Jsb2NrUGFyYW1zJztcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXJBcmdzOiBmdW5jdGlvbihoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zLCB1c2VSZWdpc3Rlcikge1xuICAgIGxldCBvcHRpb25zID0gdGhpcy5zZXR1cFBhcmFtcyhoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zKTtcbiAgICBvcHRpb25zID0gdGhpcy5vYmplY3RMaXRlcmFsKG9wdGlvbnMpO1xuICAgIGlmICh1c2VSZWdpc3Rlcikge1xuICAgICAgdGhpcy51c2VSZWdpc3Rlcignb3B0aW9ucycpO1xuICAgICAgcGFyYW1zLnB1c2goJ29wdGlvbnMnKTtcbiAgICAgIHJldHVybiBbJ29wdGlvbnM9Jywgb3B0aW9uc107XG4gICAgfSBlbHNlIGlmIChwYXJhbXMpIHtcbiAgICAgIHBhcmFtcy5wdXNoKG9wdGlvbnMpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gIH1cbn07XG5cblxuKGZ1bmN0aW9uKCkge1xuICBjb25zdCByZXNlcnZlZFdvcmRzID0gKFxuICAgICdicmVhayBlbHNlIG5ldyB2YXInICtcbiAgICAnIGNhc2UgZmluYWxseSByZXR1cm4gdm9pZCcgK1xuICAgICcgY2F0Y2ggZm9yIHN3aXRjaCB3aGlsZScgK1xuICAgICcgY29udGludWUgZnVuY3Rpb24gdGhpcyB3aXRoJyArXG4gICAgJyBkZWZhdWx0IGlmIHRocm93JyArXG4gICAgJyBkZWxldGUgaW4gdHJ5JyArXG4gICAgJyBkbyBpbnN0YW5jZW9mIHR5cGVvZicgK1xuICAgICcgYWJzdHJhY3QgZW51bSBpbnQgc2hvcnQnICtcbiAgICAnIGJvb2xlYW4gZXhwb3J0IGludGVyZmFjZSBzdGF0aWMnICtcbiAgICAnIGJ5dGUgZXh0ZW5kcyBsb25nIHN1cGVyJyArXG4gICAgJyBjaGFyIGZpbmFsIG5hdGl2ZSBzeW5jaHJvbml6ZWQnICtcbiAgICAnIGNsYXNzIGZsb2F0IHBhY2thZ2UgdGhyb3dzJyArXG4gICAgJyBjb25zdCBnb3RvIHByaXZhdGUgdHJhbnNpZW50JyArXG4gICAgJyBkZWJ1Z2dlciBpbXBsZW1lbnRzIHByb3RlY3RlZCB2b2xhdGlsZScgK1xuICAgICcgZG91YmxlIGltcG9ydCBwdWJsaWMgbGV0IHlpZWxkIGF3YWl0JyArXG4gICAgJyBudWxsIHRydWUgZmFsc2UnXG4gICkuc3BsaXQoJyAnKTtcblxuICBjb25zdCBjb21waWxlcldvcmRzID0gSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTID0ge307XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSByZXNlcnZlZFdvcmRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNvbXBpbGVyV29yZHNbcmVzZXJ2ZWRXb3Jkc1tpXV0gPSB0cnVlO1xuICB9XG59KCkpO1xuXG5KYXZhU2NyaXB0Q29tcGlsZXIuaXNWYWxpZEphdmFTY3JpcHRWYXJpYWJsZU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gIHJldHVybiAhSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTW25hbWVdICYmICgvXlthLXpBLVpfJF1bMC05YS16QS1aXyRdKiQvKS50ZXN0KG5hbWUpO1xufTtcblxuZnVuY3Rpb24gc3RyaWN0TG9va3VwKHJlcXVpcmVUZXJtaW5hbCwgY29tcGlsZXIsIHBhcnRzLCB0eXBlKSB7XG4gIGxldCBzdGFjayA9IGNvbXBpbGVyLnBvcFN0YWNrKCksXG4gICAgICBpID0gMCxcbiAgICAgIGxlbiA9IHBhcnRzLmxlbmd0aDtcbiAgaWYgKHJlcXVpcmVUZXJtaW5hbCkge1xuICAgIGxlbi0tO1xuICB9XG5cbiAgZm9yICg7IGkgPCBsZW47IGkrKykge1xuICAgIHN0YWNrID0gY29tcGlsZXIubmFtZUxvb2t1cChzdGFjaywgcGFydHNbaV0sIHR5cGUpO1xuICB9XG5cbiAgaWYgKHJlcXVpcmVUZXJtaW5hbCkge1xuICAgIHJldHVybiBbY29tcGlsZXIuYWxpYXNhYmxlKCdjb250YWluZXIuc3RyaWN0JyksICcoJywgc3RhY2ssICcsICcsIGNvbXBpbGVyLnF1b3RlZFN0cmluZyhwYXJ0c1tpXSksICcpJ107XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEphdmFTY3JpcHRDb21waWxlcjtcbiJdfQ== -; -define('handlebars',['exports', 'module', './handlebars.runtime', './handlebars/compiler/ast', './handlebars/compiler/base', './handlebars/compiler/compiler', './handlebars/compiler/javascript-compiler', './handlebars/compiler/visitor', './handlebars/no-conflict'], function (exports, module, _handlebarsRuntime, _handlebarsCompilerAst, _handlebarsCompilerBase, _handlebarsCompilerCompiler, _handlebarsCompilerJavascriptCompiler, _handlebarsCompilerVisitor, _handlebarsNoConflict) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _runtime = _interopRequireDefault(_handlebarsRuntime); - - // Compiler imports - - var _AST = _interopRequireDefault(_handlebarsCompilerAst); - - var _JavaScriptCompiler = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler); - - var _Visitor = _interopRequireDefault(_handlebarsCompilerVisitor); - - var _noConflict = _interopRequireDefault(_handlebarsNoConflict); - - var _create = _runtime['default'].create; - function create() { - var hb = _create(); - - hb.compile = function (input, options) { - return _handlebarsCompilerCompiler.compile(input, options, hb); - }; - hb.precompile = function (input, options) { - return _handlebarsCompilerCompiler.precompile(input, options, hb); - }; - - hb.AST = _AST['default']; - hb.Compiler = _handlebarsCompilerCompiler.Compiler; - hb.JavaScriptCompiler = _JavaScriptCompiler['default']; - hb.Parser = _handlebarsCompilerBase.parser; - hb.parse = _handlebarsCompilerBase.parse; - - return hb; - } - - var inst = create(); - inst.create = create; - - _noConflict['default'](inst); - - inst.Visitor = _Visitor['default']; - - inst['default'] = inst; - - module.exports = inst; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQSxNQUFJLE9BQU8sR0FBRyxvQkFBUSxNQUFNLENBQUM7QUFDN0IsV0FBUyxNQUFNLEdBQUc7QUFDaEIsUUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7O0FBRW5CLE1BQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLGFBQU8sNEJBWFEsT0FBTyxDQVdQLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDcEMsQ0FBQztBQUNGLE1BQUUsQ0FBQyxVQUFVLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3ZDLGFBQU8sNEJBZGlCLFVBQVUsQ0FjaEIsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztLQUN2QyxDQUFDOztBQUVGLE1BQUUsQ0FBQyxHQUFHLGtCQUFNLENBQUM7QUFDYixNQUFFLENBQUMsUUFBUSwrQkFsQkosUUFBUSxBQWtCTyxDQUFDO0FBQ3ZCLE1BQUUsQ0FBQyxrQkFBa0IsaUNBQXFCLENBQUM7QUFDM0MsTUFBRSxDQUFDLE1BQU0sMkJBckJGLE1BQU0sQUFxQkssQ0FBQztBQUNuQixNQUFFLENBQUMsS0FBSywyQkF0QmlCLEtBQUssQUFzQmQsQ0FBQzs7QUFFakIsV0FBTyxFQUFFLENBQUM7R0FDWDs7QUFFRCxNQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIseUJBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLE1BQUksQ0FBQyxPQUFPLHNCQUFVLENBQUM7O0FBRXZCLE1BQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O21CQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy5ydW50aW1lJztcblxuLy8gQ29tcGlsZXIgaW1wb3J0c1xuaW1wb3J0IEFTVCBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvYXN0JztcbmltcG9ydCB7IHBhcnNlciBhcyBQYXJzZXIsIHBhcnNlIH0gZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UnO1xuaW1wb3J0IHsgQ29tcGlsZXIsIGNvbXBpbGUsIHByZWNvbXBpbGUgfSBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvY29tcGlsZXInO1xuaW1wb3J0IEphdmFTY3JpcHRDb21waWxlciBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvamF2YXNjcmlwdC1jb21waWxlcic7XG5pbXBvcnQgVmlzaXRvciBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvdmlzaXRvcic7XG5cbmltcG9ydCBub0NvbmZsaWN0IGZyb20gJy4vaGFuZGxlYmFycy9uby1jb25mbGljdCc7XG5cbmxldCBfY3JlYXRlID0gcnVudGltZS5jcmVhdGU7XG5mdW5jdGlvbiBjcmVhdGUoKSB7XG4gIGxldCBoYiA9IF9jcmVhdGUoKTtcblxuICBoYi5jb21waWxlID0gZnVuY3Rpb24oaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gY29tcGlsZShpbnB1dCwgb3B0aW9ucywgaGIpO1xuICB9O1xuICBoYi5wcmVjb21waWxlID0gZnVuY3Rpb24oaW5wdXQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gcHJlY29tcGlsZShpbnB1dCwgb3B0aW9ucywgaGIpO1xuICB9O1xuXG4gIGhiLkFTVCA9IEFTVDtcbiAgaGIuQ29tcGlsZXIgPSBDb21waWxlcjtcbiAgaGIuSmF2YVNjcmlwdENvbXBpbGVyID0gSmF2YVNjcmlwdENvbXBpbGVyO1xuICBoYi5QYXJzZXIgPSBQYXJzZXI7XG4gIGhiLnBhcnNlID0gcGFyc2U7XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3QuVmlzaXRvciA9IFZpc2l0b3I7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0= -; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.amd.min.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.amd.min.js deleted file mode 100644 index ed48300fd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.amd.min.js +++ /dev/null @@ -1,29 +0,0 @@ -/**! - - @license - handlebars v4.0.6 - -Copyright (C) 2011-2016 by Yehuda Katz - -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. - -*/ -define("handlebars/utils",["exports"],function(a){"use strict";function b(a){return j[a]}function c(a){for(var b=1;b":">",'"':""","'":"'","`":"`","=":"="},k=/[&<>"'`=]/g,l=/[&<>"'`=]/,m=Object.prototype.toString;a.toString=m;var n=function(a){return"function"==typeof a};n(/x/)&&(a.isFunction=n=function(a){return"function"==typeof a&&"[object Function]"===m.call(a)}),a.isFunction=n;var o=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===m.call(a)};a.isArray=o}),define("handlebars/exception",["exports","module"],function(a,b){"use strict";function c(a,b){var e=b&&b.loc,f=void 0,g=void 0;e&&(f=e.start.line,g=e.start.column,a+=" - "+f+":"+g);for(var h=Error.prototype.constructor.call(this,a),i=0;i0?(d.ids&&(d.ids=[d.name]),a.helpers.each(b,d)):e(this);if(d.data&&d.ids){var g=c.createFrame(d.data);g.contextPath=c.appendContextPath(d.data.contextPath,d.name),d={data:g}}return f(b,d)})}}),define("handlebars/helpers/each",["exports","module","../utils","../exception"],function(a,b,c,d){"use strict";function e(a){return a&&a.__esModule?a:{"default":a}}var f=e(d);b.exports=function(a){a.registerHelper("each",function(a,b){function d(b,d,f){j&&(j.key=b,j.index=d,j.first=0===d,j.last=!!f,k&&(j.contextPath=k+b)),i+=e(a[b],{data:j,blockParams:c.blockParams([a[b],b],[k+b,null])})}if(!b)throw new f["default"]("Must pass iterator to #each");var e=b.fn,g=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=c.appendContextPath(b.data.contextPath,b.ids[0])+"."),c.isFunction(a)&&(a=a.call(this)),b.data&&(j=c.createFrame(b.data)),a&&"object"==typeof a)if(c.isArray(a))for(var l=a.length;h=0?b:parseInt(a,10)}return a},log:function(a){if(a=d.lookupLevel(a),"undefined"!=typeof console&&d.lookupLevel(d.level)<=a){var b=d.methodMap[a];console[b]||(b="log");for(var c=arguments.length,e=Array(c>1?c-1:0),f=1;f= 2.0.0-beta.1",7:">= 4.0.0"};a.REVISION_CHANGES=m;var n="[object Object]";h.prototype={constructor:h,logger:j["default"],log:j["default"].log,registerHelper:function(a,c){if(b.toString.call(a)===n){if(c)throw new i["default"]("Arg not supported with multiple helpers");b.extend(this.helpers,a)}else this.helpers[a]=c},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,c){if(b.toString.call(a)===n)b.extend(this.partials,a);else{if("undefined"==typeof c)throw new i["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=c}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,c){if(b.toString.call(a)===n){if(c)throw new i["default"]("Arg not supported with multiple decorators");b.extend(this.decorators,a)}else this.decorators[a]=c},unregisterDecorator:function(a){delete this.decorators[a]}};var o=j["default"].log;a.log=o,a.createFrame=b.createFrame,a.logger=j["default"]}),define("handlebars/safe-string",["exports","module"],function(a,b){"use strict";function c(a){this.string=a}c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b.exports=c}),define("handlebars/runtime",["exports","./utils","./exception","./base"],function(a,b,c,d){"use strict";function e(a){return a&&a.__esModule?a:{"default":a}}function f(a){var b=a&&a[0]||1,c=d.COMPILER_REVISION;if(b!==c){if(b2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;gb[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(b.yytext=b.yytext.substr(5,b.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();a.__esModule=!0,a["default"]=b}),define("handlebars/compiler/visitor",["exports","module","../exception"],function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{"default":a}}function e(){this.parents=[]}function f(a){this.acceptRequired(a,"path"),this.acceptArray(a.params),this.acceptKey(a,"hash")}function g(a){f.call(this,a),this.acceptKey(a,"program"),this.acceptKey(a,"inverse")}function h(a){this.acceptRequired(a,"name"),this.acceptArray(a.params),this.acceptKey(a,"hash")}var i=d(c);e.prototype={constructor:e,mutating:!1,acceptKey:function(a,b){var c=this.accept(a[b]);if(this.mutating){if(c&&!e.prototype[c.type])throw new i["default"]('Unexpected node type "'+c.type+'" found when accepting '+b+" on "+a.type);a[b]=c}},acceptRequired:function(a,b){if(this.acceptKey(a,b),!a[b])throw new i["default"](a.type+" requires "+b)},acceptArray:function(a){for(var b=0,c=a.length;b0)throw new o["default"]("Invalid path: "+d,{loc:c});".."===j&&(f++,g+="../")}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new o["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}a.__esModule=!0,a.SourceLocation=e,a.id=f,a.stripFlags=g,a.stripComment=h,a.preparePath=i,a.prepareMustache=j,a.prepareRawBlock=k,a.prepareBlock=l,a.prepareProgram=m,a.preparePartialBlock=n;var o=c(b)}),define("handlebars/compiler/base",["exports","./parser","./whitespace-control","./helpers","../utils"],function(a,b,c,d,e){"use strict";function f(a){return a&&a.__esModule?a:{"default":a}}function g(a,b){if("Program"===a.type)return a;h["default"].yy=j,j.locInfo=function(a){return new j.SourceLocation(b&&b.srcName,a)};var c=new i["default"](b);return c.accept(h["default"].parse(a))}a.__esModule=!0,a.parse=g;var h=f(b),i=f(c);a.parser=h["default"];var j={};e.extend(j,d)}),define("handlebars/compiler/compiler",["exports","../exception","../utils","./ast"],function(a,b,c,d){"use strict";function e(a){return a&&a.__esModule?a:{"default":a}}function f(){}function g(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function h(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function i(a,b){if(a===b)return!0;if(c.isArray(a)&&c.isArray(b)&&a.length===b.length){for(var d=0;d1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){j(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,l["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=l["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c=0)return[b,f]}}}}),define("handlebars/compiler/code-gen",["exports","module","../utils"],function(a,b,c){"use strict";function d(a,b,d){if(c.isArray(a)){for(var e=[],f=0,g=a.length;f0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var f=this;if(this.options.strict||this.options.assumeObjects)return void this.push(j(this.options.strict&&e,this,b,a));for(var g=b.length;cthis.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b= 2.0.0-beta.1', - 7: '>= 4.0.0' - }; - - exports.REVISION_CHANGES = REVISION_CHANGES; - var objectType = '[object Object]'; - - function HandlebarsEnvironment(helpers, partials, decorators) { - this.helpers = helpers || {}; - this.partials = partials || {}; - this.decorators = decorators || {}; - - _helpers.registerDefaultHelpers(this); - _decorators.registerDefaultDecorators(this); - } - - HandlebarsEnvironment.prototype = { - constructor: HandlebarsEnvironment, - - logger: _logger2['default'], - log: _logger2['default'].log, - - registerHelper: function registerHelper(name, fn) { - if (_utils.toString.call(name) === objectType) { - if (fn) { - throw new _exception2['default']('Arg not supported with multiple helpers'); - } - _utils.extend(this.helpers, name); - } else { - this.helpers[name] = fn; - } - }, - unregisterHelper: function unregisterHelper(name) { - delete this.helpers[name]; - }, - - registerPartial: function registerPartial(name, partial) { - if (_utils.toString.call(name) === objectType) { - _utils.extend(this.partials, name); - } else { - if (typeof partial === 'undefined') { - throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined'); - } - this.partials[name] = partial; - } - }, - unregisterPartial: function unregisterPartial(name) { - delete this.partials[name]; - }, - - registerDecorator: function registerDecorator(name, fn) { - if (_utils.toString.call(name) === objectType) { - if (fn) { - throw new _exception2['default']('Arg not supported with multiple decorators'); - } - _utils.extend(this.decorators, name); - } else { - this.decorators[name] = fn; - } - }, - unregisterDecorator: function unregisterDecorator(name) { - delete this.decorators[name]; - } - }; - - var log = _logger2['default'].log; - - exports.log = log; - exports.createFrame = _utils.createFrame; - exports.logger = _logger2['default']; - -/***/ }, -/* 5 */ -/***/ function(module, exports) { - - 'use strict'; - - exports.__esModule = true; - exports.extend = extend; - exports.indexOf = indexOf; - exports.escapeExpression = escapeExpression; - exports.isEmpty = isEmpty; - exports.createFrame = createFrame; - exports.blockParams = blockParams; - exports.appendContextPath = appendContextPath; - var escape = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`', - '=': '=' - }; - - var badChars = /[&<>"'`=]/g, - possible = /[&<>"'`=]/; - - function escapeChar(chr) { - return escape[chr]; - } - - function extend(obj /* , ...source */) { - for (var i = 1; i < arguments.length; i++) { - for (var key in arguments[i]) { - if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { - obj[key] = arguments[i][key]; - } - } - } - - return obj; - } - - var toString = Object.prototype.toString; - - exports.toString = toString; - // Sourced from lodash - // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt - /* eslint-disable func-style */ - var isFunction = function isFunction(value) { - return typeof value === 'function'; - }; - // fallback for older versions of Chrome and Safari - /* istanbul ignore next */ - if (isFunction(/x/)) { - exports.isFunction = isFunction = function (value) { - return typeof value === 'function' && toString.call(value) === '[object Function]'; - }; - } - exports.isFunction = isFunction; - - /* eslint-enable func-style */ - - /* istanbul ignore next */ - var isArray = Array.isArray || function (value) { - return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; - }; - - exports.isArray = isArray; - // Older IE versions do not directly support indexOf so we must implement our own, sadly. - - function indexOf(array, value) { - for (var i = 0, len = array.length; i < len; i++) { - if (array[i] === value) { - return i; - } - } - return -1; - } - - function escapeExpression(string) { - if (typeof string !== 'string') { - // don't escape SafeStrings, since they're already safe - if (string && string.toHTML) { - return string.toHTML(); - } else if (string == null) { - return ''; - } else if (!string) { - return string + ''; - } - - // Force a string conversion as this will be done by the append regardless and - // the regex test will do this transparently behind the scenes, causing issues if - // an object's to string has escaped characters in it. - string = '' + string; - } - - if (!possible.test(string)) { - return string; - } - return string.replace(badChars, escapeChar); - } - - function isEmpty(value) { - if (!value && value !== 0) { - return true; - } else if (isArray(value) && value.length === 0) { - return true; - } else { - return false; - } - } - - function createFrame(object) { - var frame = extend({}, object); - frame._parent = object; - return frame; - } - - function blockParams(params, ids) { - params.path = ids; - return params; - } - - function appendContextPath(contextPath, id) { - return (contextPath ? contextPath + '.' : '') + id; - } - -/***/ }, -/* 6 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _Object$defineProperty = __webpack_require__(7)['default']; - - exports.__esModule = true; - - var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; - - function Exception(message, node) { - var loc = node && node.loc, - line = undefined, - column = undefined; - if (loc) { - line = loc.start.line; - column = loc.start.column; - - message += ' - ' + line + ':' + column; - } - - var tmp = Error.prototype.constructor.call(this, message); - - // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. - for (var idx = 0; idx < errorProps.length; idx++) { - this[errorProps[idx]] = tmp[errorProps[idx]]; - } - - /* istanbul ignore else */ - if (Error.captureStackTrace) { - Error.captureStackTrace(this, Exception); - } - - try { - if (loc) { - this.lineNumber = line; - - // Work around issue under safari where we can't directly set the column value - /* istanbul ignore next */ - if (_Object$defineProperty) { - Object.defineProperty(this, 'column', { value: column }); - } else { - this.column = column; - } - } - } catch (nop) { - /* Ignore if the browser is very particular */ - } - } - - Exception.prototype = new Error(); - - exports['default'] = Exception; - module.exports = exports['default']; - -/***/ }, -/* 7 */ -/***/ function(module, exports, __webpack_require__) { - - module.exports = { "default": __webpack_require__(8), __esModule: true }; - -/***/ }, -/* 8 */ -/***/ function(module, exports, __webpack_require__) { - - var $ = __webpack_require__(9); - module.exports = function defineProperty(it, key, desc){ - return $.setDesc(it, key, desc); - }; - -/***/ }, -/* 9 */ -/***/ function(module, exports) { - - var $Object = Object; - module.exports = { - create: $Object.create, - getProto: $Object.getPrototypeOf, - isEnum: {}.propertyIsEnumerable, - getDesc: $Object.getOwnPropertyDescriptor, - setDesc: $Object.defineProperty, - setDescs: $Object.defineProperties, - getKeys: $Object.keys, - getNames: $Object.getOwnPropertyNames, - getSymbols: $Object.getOwnPropertySymbols, - each: [].forEach - }; - -/***/ }, -/* 10 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(1)['default']; - - exports.__esModule = true; - exports.registerDefaultHelpers = registerDefaultHelpers; - - var _helpersBlockHelperMissing = __webpack_require__(11); - - var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing); - - var _helpersEach = __webpack_require__(12); - - var _helpersEach2 = _interopRequireDefault(_helpersEach); - - var _helpersHelperMissing = __webpack_require__(13); - - var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing); - - var _helpersIf = __webpack_require__(14); - - var _helpersIf2 = _interopRequireDefault(_helpersIf); - - var _helpersLog = __webpack_require__(15); - - var _helpersLog2 = _interopRequireDefault(_helpersLog); - - var _helpersLookup = __webpack_require__(16); - - var _helpersLookup2 = _interopRequireDefault(_helpersLookup); - - var _helpersWith = __webpack_require__(17); - - var _helpersWith2 = _interopRequireDefault(_helpersWith); - - function registerDefaultHelpers(instance) { - _helpersBlockHelperMissing2['default'](instance); - _helpersEach2['default'](instance); - _helpersHelperMissing2['default'](instance); - _helpersIf2['default'](instance); - _helpersLog2['default'](instance); - _helpersLookup2['default'](instance); - _helpersWith2['default'](instance); - } - -/***/ }, -/* 11 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - var _utils = __webpack_require__(5); - - exports['default'] = function (instance) { - instance.registerHelper('blockHelperMissing', function (context, options) { - var inverse = options.inverse, - fn = options.fn; - - if (context === true) { - return fn(this); - } else if (context === false || context == null) { - return inverse(this); - } else if (_utils.isArray(context)) { - if (context.length > 0) { - if (options.ids) { - options.ids = [options.name]; - } - - return instance.helpers.each(context, options); - } else { - return inverse(this); - } - } else { - if (options.data && options.ids) { - var data = _utils.createFrame(options.data); - data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name); - options = { data: data }; - } - - return fn(context, options); - } - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 12 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(1)['default']; - - exports.__esModule = true; - - var _utils = __webpack_require__(5); - - var _exception = __webpack_require__(6); - - var _exception2 = _interopRequireDefault(_exception); - - exports['default'] = function (instance) { - instance.registerHelper('each', function (context, options) { - if (!options) { - throw new _exception2['default']('Must pass iterator to #each'); - } - - var fn = options.fn, - inverse = options.inverse, - i = 0, - ret = '', - data = undefined, - contextPath = undefined; - - if (options.data && options.ids) { - contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; - } - - if (_utils.isFunction(context)) { - context = context.call(this); - } - - if (options.data) { - data = _utils.createFrame(options.data); - } - - function execIteration(field, index, last) { - if (data) { - data.key = field; - data.index = index; - data.first = index === 0; - data.last = !!last; - - if (contextPath) { - data.contextPath = contextPath + field; - } - } - - ret = ret + fn(context[field], { - data: data, - blockParams: _utils.blockParams([context[field], field], [contextPath + field, null]) - }); - } - - if (context && typeof context === 'object') { - if (_utils.isArray(context)) { - for (var j = context.length; i < j; i++) { - if (i in context) { - execIteration(i, i, i === context.length - 1); - } - } - } else { - var priorKey = undefined; - - for (var key in context) { - if (context.hasOwnProperty(key)) { - // We're running the iterations one step out of sync so we can detect - // the last iteration without have to scan the object twice and create - // an itermediate keys array. - if (priorKey !== undefined) { - execIteration(priorKey, i - 1); - } - priorKey = key; - i++; - } - } - if (priorKey !== undefined) { - execIteration(priorKey, i - 1, true); - } - } - } - - if (i === 0) { - ret = inverse(this); - } - - return ret; - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 13 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(1)['default']; - - exports.__esModule = true; - - var _exception = __webpack_require__(6); - - var _exception2 = _interopRequireDefault(_exception); - - exports['default'] = function (instance) { - instance.registerHelper('helperMissing', function () /* [args, ]options */{ - if (arguments.length === 1) { - // A missing field in a {{foo}} construct. - return undefined; - } else { - // Someone is actually trying to call something, blow up. - throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); - } - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 14 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - var _utils = __webpack_require__(5); - - exports['default'] = function (instance) { - instance.registerHelper('if', function (conditional, options) { - if (_utils.isFunction(conditional)) { - conditional = conditional.call(this); - } - - // Default behavior is to render the positive path if the value is truthy and not empty. - // The `includeZero` option may be set to treat the condtional as purely not empty based on the - // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. - if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - - instance.registerHelper('unless', function (conditional, options) { - return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash }); - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 15 */ -/***/ function(module, exports) { - - 'use strict'; - - exports.__esModule = true; - - exports['default'] = function (instance) { - instance.registerHelper('log', function () /* message, options */{ - var args = [undefined], - options = arguments[arguments.length - 1]; - for (var i = 0; i < arguments.length - 1; i++) { - args.push(arguments[i]); - } - - var level = 1; - if (options.hash.level != null) { - level = options.hash.level; - } else if (options.data && options.data.level != null) { - level = options.data.level; - } - args[0] = level; - - instance.log.apply(instance, args); - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 16 */ -/***/ function(module, exports) { - - 'use strict'; - - exports.__esModule = true; - - exports['default'] = function (instance) { - instance.registerHelper('lookup', function (obj, field) { - return obj && obj[field]; - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 17 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - var _utils = __webpack_require__(5); - - exports['default'] = function (instance) { - instance.registerHelper('with', function (context, options) { - if (_utils.isFunction(context)) { - context = context.call(this); - } - - var fn = options.fn; - - if (!_utils.isEmpty(context)) { - var data = options.data; - if (options.data && options.ids) { - data = _utils.createFrame(options.data); - data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); - } - - return fn(context, { - data: data, - blockParams: _utils.blockParams([context], [data && data.contextPath]) - }); - } else { - return options.inverse(this); - } - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 18 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(1)['default']; - - exports.__esModule = true; - exports.registerDefaultDecorators = registerDefaultDecorators; - - var _decoratorsInline = __webpack_require__(19); - - var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline); - - function registerDefaultDecorators(instance) { - _decoratorsInline2['default'](instance); - } - -/***/ }, -/* 19 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - var _utils = __webpack_require__(5); - - exports['default'] = function (instance) { - instance.registerDecorator('inline', function (fn, props, container, options) { - var ret = fn; - if (!props.partials) { - props.partials = {}; - ret = function (context, options) { - // Create a new partials stack frame prior to exec. - var original = container.partials; - container.partials = _utils.extend({}, original, props.partials); - var ret = fn(context, options); - container.partials = original; - return ret; - }; - } - - props.partials[options.args[0]] = options.fn; - - return ret; - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 20 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - var _utils = __webpack_require__(5); - - var logger = { - methodMap: ['debug', 'info', 'warn', 'error'], - level: 'info', - - // Maps a given level value to the `methodMap` indexes above. - lookupLevel: function lookupLevel(level) { - if (typeof level === 'string') { - var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); - if (levelMap >= 0) { - level = levelMap; - } else { - level = parseInt(level, 10); - } - } - - return level; - }, - - // Can be overridden in the host environment - log: function log(level) { - level = logger.lookupLevel(level); - - if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { - var method = logger.methodMap[level]; - if (!console[method]) { - // eslint-disable-line no-console - method = 'log'; - } - - for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - message[_key - 1] = arguments[_key]; - } - - console[method].apply(console, message); // eslint-disable-line no-console - } - } - }; - - exports['default'] = logger; - module.exports = exports['default']; - -/***/ }, -/* 21 */ -/***/ function(module, exports) { - - // Build out our basic SafeString type - 'use strict'; - - exports.__esModule = true; - function SafeString(string) { - this.string = string; - } - - SafeString.prototype.toString = SafeString.prototype.toHTML = function () { - return '' + this.string; - }; - - exports['default'] = SafeString; - module.exports = exports['default']; - -/***/ }, -/* 22 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireWildcard = __webpack_require__(3)['default']; - - var _interopRequireDefault = __webpack_require__(1)['default']; - - exports.__esModule = true; - exports.checkRevision = checkRevision; - exports.template = template; - exports.wrapProgram = wrapProgram; - exports.resolvePartial = resolvePartial; - exports.invokePartial = invokePartial; - exports.noop = noop; - - var _utils = __webpack_require__(5); - - var Utils = _interopRequireWildcard(_utils); - - var _exception = __webpack_require__(6); - - var _exception2 = _interopRequireDefault(_exception); - - var _base = __webpack_require__(4); - - function checkRevision(compilerInfo) { - var compilerRevision = compilerInfo && compilerInfo[0] || 1, - currentRevision = _base.COMPILER_REVISION; - - if (compilerRevision !== currentRevision) { - if (compilerRevision < currentRevision) { - var runtimeVersions = _base.REVISION_CHANGES[currentRevision], - compilerVersions = _base.REVISION_CHANGES[compilerRevision]; - throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); - } else { - // Use the embedded version info since the runtime doesn't know about this revision yet - throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); - } - } - } - - function template(templateSpec, env) { - /* istanbul ignore next */ - if (!env) { - throw new _exception2['default']('No environment passed to template'); - } - if (!templateSpec || !templateSpec.main) { - throw new _exception2['default']('Unknown template object: ' + typeof templateSpec); - } - - templateSpec.main.decorator = templateSpec.main_d; - - // Note: Using env.VM references rather than local var references throughout this section to allow - // for external users to override these as psuedo-supported APIs. - env.VM.checkRevision(templateSpec.compiler); - - function invokePartialWrapper(partial, context, options) { - if (options.hash) { - context = Utils.extend({}, context, options.hash); - if (options.ids) { - options.ids[0] = true; - } - } - - partial = env.VM.resolvePartial.call(this, partial, context, options); - var result = env.VM.invokePartial.call(this, partial, context, options); - - if (result == null && env.compile) { - options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); - result = options.partials[options.name](context, options); - } - if (result != null) { - if (options.indent) { - var lines = result.split('\n'); - for (var i = 0, l = lines.length; i < l; i++) { - if (!lines[i] && i + 1 === l) { - break; - } - - lines[i] = options.indent + lines[i]; - } - result = lines.join('\n'); - } - return result; - } else { - throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); - } - } - - // Just add water - var container = { - strict: function strict(obj, name) { - if (!(name in obj)) { - throw new _exception2['default']('"' + name + '" not defined in ' + obj); - } - return obj[name]; - }, - lookup: function lookup(depths, name) { - var len = depths.length; - for (var i = 0; i < len; i++) { - if (depths[i] && depths[i][name] != null) { - return depths[i][name]; - } - } - }, - lambda: function lambda(current, context) { - return typeof current === 'function' ? current.call(context) : current; - }, - - escapeExpression: Utils.escapeExpression, - invokePartial: invokePartialWrapper, - - fn: function fn(i) { - var ret = templateSpec[i]; - ret.decorator = templateSpec[i + '_d']; - return ret; - }, - - programs: [], - program: function program(i, data, declaredBlockParams, blockParams, depths) { - var programWrapper = this.programs[i], - fn = this.fn(i); - if (data || depths || blockParams || declaredBlockParams) { - programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); - } else if (!programWrapper) { - programWrapper = this.programs[i] = wrapProgram(this, i, fn); - } - return programWrapper; - }, - - data: function data(value, depth) { - while (value && depth--) { - value = value._parent; - } - return value; - }, - merge: function merge(param, common) { - var obj = param || common; - - if (param && common && param !== common) { - obj = Utils.extend({}, common, param); - } - - return obj; - }, - - noop: env.VM.noop, - compilerInfo: templateSpec.compiler - }; - - function ret(context) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var data = options.data; - - ret._setup(options); - if (!options.partial && templateSpec.useData) { - data = initData(context, data); - } - var depths = undefined, - blockParams = templateSpec.useBlockParams ? [] : undefined; - if (templateSpec.useDepths) { - if (options.depths) { - depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; - } else { - depths = [context]; - } - } - - function main(context /*, options*/) { - return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); - } - main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); - return main(context, options); - } - ret.isTop = true; - - ret._setup = function (options) { - if (!options.partial) { - container.helpers = container.merge(options.helpers, env.helpers); - - if (templateSpec.usePartial) { - container.partials = container.merge(options.partials, env.partials); - } - if (templateSpec.usePartial || templateSpec.useDecorators) { - container.decorators = container.merge(options.decorators, env.decorators); - } - } else { - container.helpers = options.helpers; - container.partials = options.partials; - container.decorators = options.decorators; - } - }; - - ret._child = function (i, data, blockParams, depths) { - if (templateSpec.useBlockParams && !blockParams) { - throw new _exception2['default']('must pass block params'); - } - if (templateSpec.useDepths && !depths) { - throw new _exception2['default']('must pass parent depths'); - } - - return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); - }; - return ret; - } - - function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { - function prog(context) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var currentDepths = depths; - if (depths && context != depths[0]) { - currentDepths = [context].concat(depths); - } - - return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); - } - - prog = executeDecorators(fn, prog, container, depths, data, blockParams); - - prog.program = i; - prog.depth = depths ? depths.length : 0; - prog.blockParams = declaredBlockParams || 0; - return prog; - } - - function resolvePartial(partial, context, options) { - if (!partial) { - if (options.name === '@partial-block') { - var data = options.data; - while (data['partial-block'] === noop) { - data = data._parent; - } - partial = data['partial-block']; - data['partial-block'] = noop; - } else { - partial = options.partials[options.name]; - } - } else if (!partial.call && !options.name) { - // This is a dynamic partial that returned a string - options.name = partial; - partial = options.partials[partial]; - } - return partial; - } - - function invokePartial(partial, context, options) { - options.partial = true; - if (options.ids) { - options.data.contextPath = options.ids[0] || options.data.contextPath; - } - - var partialBlock = undefined; - if (options.fn && options.fn !== noop) { - options.data = _base.createFrame(options.data); - partialBlock = options.data['partial-block'] = options.fn; - - if (partialBlock.partials) { - options.partials = Utils.extend({}, options.partials, partialBlock.partials); - } - } - - if (partial === undefined && partialBlock) { - partial = partialBlock; - } - - if (partial === undefined) { - throw new _exception2['default']('The partial ' + options.name + ' could not be found'); - } else if (partial instanceof Function) { - return partial(context, options); - } - } - - function noop() { - return ''; - } - - function initData(context, data) { - if (!data || !('root' in data)) { - data = data ? _base.createFrame(data) : {}; - data.root = context; - } - return data; - } - - function executeDecorators(fn, prog, container, depths, data, blockParams) { - if (fn.decorator) { - var props = {}; - prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); - Utils.extend(prog, props); - } - return prog; - } - -/***/ }, -/* 23 */ -/***/ function(module, exports) { - - /* WEBPACK VAR INJECTION */(function(global) {/* global window */ - 'use strict'; - - exports.__esModule = true; - - exports['default'] = function (Handlebars) { - /* istanbul ignore next */ - var root = typeof global !== 'undefined' ? global : window, - $Handlebars = root.Handlebars; - /* istanbul ignore next */ - Handlebars.noConflict = function () { - if (root.Handlebars === Handlebars) { - root.Handlebars = $Handlebars; - } - return Handlebars; - }; - }; - - module.exports = exports['default']; - /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) - -/***/ }, -/* 24 */ -/***/ function(module, exports) { - - 'use strict'; - - exports.__esModule = true; - var AST = { - // Public API used to evaluate derived attributes regarding AST nodes - helpers: { - // a mustache is definitely a helper if: - // * it is an eligible helper, and - // * it has at least one parameter or hash segment - helperExpression: function helperExpression(node) { - return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash); - }, - - scopedId: function scopedId(path) { - return (/^\.|this\b/.test(path.original) - ); - }, - - // an ID is simple if it only has one part, and that part is not - // `..` or `this`. - simpleId: function simpleId(path) { - return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth; - } - } - }; - - // Must be exported as an object rather than the root of the module as the jison lexer - // must modify the object to operate properly. - exports['default'] = AST; - module.exports = exports['default']; - -/***/ }, -/* 25 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(1)['default']; - - var _interopRequireWildcard = __webpack_require__(3)['default']; - - exports.__esModule = true; - exports.parse = parse; - - var _parser = __webpack_require__(26); - - var _parser2 = _interopRequireDefault(_parser); - - var _whitespaceControl = __webpack_require__(27); - - var _whitespaceControl2 = _interopRequireDefault(_whitespaceControl); - - var _helpers = __webpack_require__(29); - - var Helpers = _interopRequireWildcard(_helpers); - - var _utils = __webpack_require__(5); - - exports.parser = _parser2['default']; - - var yy = {}; - _utils.extend(yy, Helpers); - - function parse(input, options) { - // Just return if an already-compiled AST was passed in. - if (input.type === 'Program') { - return input; - } - - _parser2['default'].yy = yy; - - // Altering the shared object here, but this is ok as parser is a sync operation - yy.locInfo = function (locInfo) { - return new yy.SourceLocation(options && options.srcName, locInfo); - }; - - var strip = new _whitespaceControl2['default'](options); - return strip.accept(_parser2['default'].parse(input)); - } - -/***/ }, -/* 26 */ -/***/ function(module, exports) { - - /* istanbul ignore next */ - /* Jison generated parser */ - "use strict"; - - var handlebars = (function () { - var parser = { trace: function trace() {}, - yy: {}, - symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition_plus0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 }, - terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" }, - productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 1], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]], - performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$ - /**/) { - - var $0 = $$.length - 1; - switch (yystate) { - case 1: - return $$[$0 - 1]; - break; - case 2: - this.$ = yy.prepareProgram($$[$0]); - break; - case 3: - this.$ = $$[$0]; - break; - case 4: - this.$ = $$[$0]; - break; - case 5: - this.$ = $$[$0]; - break; - case 6: - this.$ = $$[$0]; - break; - case 7: - this.$ = $$[$0]; - break; - case 8: - this.$ = $$[$0]; - break; - case 9: - this.$ = { - type: 'CommentStatement', - value: yy.stripComment($$[$0]), - strip: yy.stripFlags($$[$0], $$[$0]), - loc: yy.locInfo(this._$) - }; - - break; - case 10: - this.$ = { - type: 'ContentStatement', - original: $$[$0], - value: $$[$0], - loc: yy.locInfo(this._$) - }; - - break; - case 11: - this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); - break; - case 12: - this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] }; - break; - case 13: - this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$); - break; - case 14: - this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$); - break; - case 15: - this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; - break; - case 16: - this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; - break; - case 17: - this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) }; - break; - case 18: - this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] }; - break; - case 19: - var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$), - program = yy.prepareProgram([inverse], $$[$0 - 1].loc); - program.chained = true; - - this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true }; - - break; - case 20: - this.$ = $$[$0]; - break; - case 21: - this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) }; - break; - case 22: - this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); - break; - case 23: - this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$); - break; - case 24: - this.$ = { - type: 'PartialStatement', - name: $$[$0 - 3], - params: $$[$0 - 2], - hash: $$[$0 - 1], - indent: '', - strip: yy.stripFlags($$[$0 - 4], $$[$0]), - loc: yy.locInfo(this._$) - }; - - break; - case 25: - this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$); - break; - case 26: - this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) }; - break; - case 27: - this.$ = $$[$0]; - break; - case 28: - this.$ = $$[$0]; - break; - case 29: - this.$ = { - type: 'SubExpression', - path: $$[$0 - 3], - params: $$[$0 - 2], - hash: $$[$0 - 1], - loc: yy.locInfo(this._$) - }; - - break; - case 30: - this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) }; - break; - case 31: - this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) }; - break; - case 32: - this.$ = yy.id($$[$0 - 1]); - break; - case 33: - this.$ = $$[$0]; - break; - case 34: - this.$ = $$[$0]; - break; - case 35: - this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) }; - break; - case 36: - this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) }; - break; - case 37: - this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) }; - break; - case 38: - this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) }; - break; - case 39: - this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) }; - break; - case 40: - this.$ = $$[$0]; - break; - case 41: - this.$ = $$[$0]; - break; - case 42: - this.$ = yy.preparePath(true, $$[$0], this._$); - break; - case 43: - this.$ = yy.preparePath(false, $$[$0], this._$); - break; - case 44: - $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2]; - break; - case 45: - this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }]; - break; - case 46: - this.$ = []; - break; - case 47: - $$[$0 - 1].push($$[$0]); - break; - case 48: - this.$ = [$$[$0]]; - break; - case 49: - $$[$0 - 1].push($$[$0]); - break; - case 50: - this.$ = []; - break; - case 51: - $$[$0 - 1].push($$[$0]); - break; - case 58: - this.$ = []; - break; - case 59: - $$[$0 - 1].push($$[$0]); - break; - case 64: - this.$ = []; - break; - case 65: - $$[$0 - 1].push($$[$0]); - break; - case 70: - this.$ = []; - break; - case 71: - $$[$0 - 1].push($$[$0]); - break; - case 78: - this.$ = []; - break; - case 79: - $$[$0 - 1].push($$[$0]); - break; - case 82: - this.$ = []; - break; - case 83: - $$[$0 - 1].push($$[$0]); - break; - case 86: - this.$ = []; - break; - case 87: - $$[$0 - 1].push($$[$0]); - break; - case 90: - this.$ = []; - break; - case 91: - $$[$0 - 1].push($$[$0]); - break; - case 94: - this.$ = []; - break; - case 95: - $$[$0 - 1].push($$[$0]); - break; - case 98: - this.$ = [$$[$0]]; - break; - case 99: - $$[$0 - 1].push($$[$0]); - break; - case 100: - this.$ = [$$[$0]]; - break; - case 101: - $$[$0 - 1].push($$[$0]); - break; - } - }, - table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 13: 40, 15: [1, 20], 17: 39 }, { 20: 42, 56: 41, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 45, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 48, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 42, 56: 49, 64: 43, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 50, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 51] }, { 72: [1, 35], 86: 52 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 53, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 54, 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 55, 47: [2, 54] }, { 28: 60, 43: 61, 44: [1, 59], 47: [2, 56] }, { 13: 63, 15: [1, 20], 18: [1, 62] }, { 15: [2, 48], 18: [2, 48] }, { 33: [2, 86], 57: 64, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 65, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 66, 47: [1, 67] }, { 30: 68, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 69, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 70, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 71, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 75, 33: [2, 80], 50: 72, 63: 73, 64: 76, 65: [1, 44], 69: 74, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 80] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 51] }, { 20: 75, 53: 81, 54: [2, 84], 63: 82, 64: 76, 65: [1, 44], 69: 83, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 84, 47: [1, 67] }, { 47: [2, 55] }, { 4: 85, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 86, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 87, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 88, 47: [1, 67] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 75, 33: [2, 88], 58: 89, 63: 90, 64: 76, 65: [1, 44], 69: 91, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 92, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 93, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 31: 94, 33: [2, 60], 63: 95, 64: 76, 65: [1, 44], 69: 96, 70: 77, 71: 78, 72: [1, 79], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 66], 36: 97, 63: 98, 64: 76, 65: [1, 44], 69: 99, 70: 77, 71: 78, 72: [1, 79], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 22: 100, 23: [2, 52], 63: 101, 64: 76, 65: [1, 44], 69: 102, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 75, 33: [2, 92], 62: 103, 63: 104, 64: 76, 65: [1, 44], 69: 105, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 106] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 107, 72: [1, 108], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 109], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 110] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 56, 39: [1, 58], 43: 57, 44: [1, 59], 45: 112, 46: 111, 47: [2, 76] }, { 33: [2, 70], 40: 113, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 114] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 75, 63: 116, 64: 76, 65: [1, 44], 67: 115, 68: [2, 96], 69: 117, 70: 77, 71: 78, 72: [1, 79], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 118] }, { 32: 119, 33: [2, 62], 74: 120, 75: [1, 121] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 122, 74: 123, 75: [1, 121] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 124] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 125] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 109] }, { 20: 75, 63: 126, 64: 76, 65: [1, 44], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 75, 33: [2, 72], 41: 127, 63: 128, 64: 76, 65: [1, 44], 69: 129, 70: 77, 71: 78, 72: [1, 79], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 130] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 131] }, { 33: [2, 63] }, { 72: [1, 133], 76: 132 }, { 33: [1, 134] }, { 33: [2, 69] }, { 15: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 135, 74: 136, 75: [1, 121] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 138], 77: [1, 137] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 139] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }], - defaultActions: { 4: [2, 1], 55: [2, 55], 57: [2, 20], 61: [2, 57], 74: [2, 81], 83: [2, 85], 87: [2, 18], 91: [2, 89], 102: [2, 53], 105: [2, 93], 111: [2, 19], 112: [2, 77], 117: [2, 97], 120: [2, 63], 123: [2, 69], 124: [2, 12], 136: [2, 75], 137: [2, 32] }, - parseError: function parseError(str, hash) { - throw new Error(str); - }, - parse: function parse(input) { - var self = this, - stack = [0], - vstack = [null], - lstack = [], - table = this.table, - yytext = "", - yylineno = 0, - yyleng = 0, - recovering = 0, - TERROR = 2, - EOF = 1; - this.lexer.setInput(input); - this.lexer.yy = this.yy; - this.yy.lexer = this.lexer; - this.yy.parser = this; - if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {}; - var yyloc = this.lexer.yylloc; - lstack.push(yyloc); - var ranges = this.lexer.options && this.lexer.options.ranges; - if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError; - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - function lex() { - var token; - token = self.lexer.lex() || 1; - if (typeof token !== "number") { - token = self.symbols_[token] || token; - } - return token; - } - var symbol, - preErrorSymbol, - state, - action, - a, - r, - yyval = {}, - p, - len, - newState, - expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - if (!recovering) { - expected = []; - for (p in table[state]) if (this.terminals_[p] && p > 2) { - expected.push("'" + this.terminals_[p] + "'"); - } - if (this.lexer.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected }); - } - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(this.lexer.yytext); - lstack.push(this.lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = this.lexer.yyleng; - yytext = this.lexer.yytext; - yylineno = this.lexer.yylineno; - yyloc = this.lexer.yylloc; - if (recovering > 0) recovering--; - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column }; - if (ranges) { - yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; - } - r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; - } - }; - /* Jison generated lexer */ - var lexer = (function () { - var lexer = { EOF: 1, - parseError: function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, - setInput: function setInput(input) { - this._input = input; - this._more = this._less = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 }; - if (this.options.ranges) this.yylloc.range = [0, 0]; - this.offset = 0; - return this; - }, - input: function input() { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) this.yylloc.range[1]++; - - this._input = this._input.slice(1); - return ch; - }, - unput: function unput(ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length - len - 1); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length - 1); - this.matched = this.matched.substr(0, this.matched.length - 1); - - if (lines.length - 1) this.yylineno -= lines.length - 1; - var r = this.yylloc.range; - - this.yylloc = { first_line: this.yylloc.first_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.first_column, - last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len - }; - - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - return this; - }, - more: function more() { - this._more = true; - return this; - }, - less: function less(n) { - this.unput(this.match.slice(n)); - }, - pastInput: function pastInput() { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, ""); - }, - upcomingInput: function upcomingInput() { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20 - next.length); - } - return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, ""); - }, - showPosition: function showPosition() { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c + "^"; - }, - next: function next() { - if (this.done) { - return this.EOF; - } - if (!this._input) this.done = true; - - var token, match, tempMatch, index, col, lines; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i = 0; i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (!this.options.flex) break; - } - } - if (match) { - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) this.yylineno += lines.length; - this.yylloc = { first_line: this.yylloc.last_line, - last_line: this.yylineno + 1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length }; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]); - if (this.done && this._input) this.done = false; - if (token) return token;else return; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno }); - } - }, - lex: function lex() { - var r = this.next(); - if (typeof r !== 'undefined') { - return r; - } else { - return this.lex(); - } - }, - begin: function begin(condition) { - this.conditionStack.push(condition); - }, - popState: function popState() { - return this.conditionStack.pop(); - }, - _currentRules: function _currentRules() { - return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules; - }, - topState: function topState() { - return this.conditionStack[this.conditionStack.length - 2]; - }, - pushState: function begin(condition) { - this.begin(condition); - } }; - lexer.options = {}; - lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START - /**/) { - - function strip(start, end) { - return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng - end); - } - - var YYSTATE = YY_START; - switch ($avoiding_name_collisions) { - case 0: - if (yy_.yytext.slice(-2) === "\\\\") { - strip(0, 1); - this.begin("mu"); - } else if (yy_.yytext.slice(-1) === "\\") { - strip(0, 1); - this.begin("emu"); - } else { - this.begin("mu"); - } - if (yy_.yytext) return 15; - - break; - case 1: - return 15; - break; - case 2: - this.popState(); - return 15; - - break; - case 3: - this.begin('raw');return 15; - break; - case 4: - this.popState(); - // Should be using `this.topState()` below, but it currently - // returns the second top instead of the first top. Opened an - // issue about it at https://github.com/zaach/jison/issues/291 - if (this.conditionStack[this.conditionStack.length - 1] === 'raw') { - return 15; - } else { - yy_.yytext = yy_.yytext.substr(5, yy_.yyleng - 9); - return 'END_RAW_BLOCK'; - } - - break; - case 5: - return 15; - break; - case 6: - this.popState(); - return 14; - - break; - case 7: - return 65; - break; - case 8: - return 68; - break; - case 9: - return 19; - break; - case 10: - this.popState(); - this.begin('raw'); - return 23; - - break; - case 11: - return 55; - break; - case 12: - return 60; - break; - case 13: - return 29; - break; - case 14: - return 47; - break; - case 15: - this.popState();return 44; - break; - case 16: - this.popState();return 44; - break; - case 17: - return 34; - break; - case 18: - return 39; - break; - case 19: - return 51; - break; - case 20: - return 48; - break; - case 21: - this.unput(yy_.yytext); - this.popState(); - this.begin('com'); - - break; - case 22: - this.popState(); - return 14; - - break; - case 23: - return 48; - break; - case 24: - return 73; - break; - case 25: - return 72; - break; - case 26: - return 72; - break; - case 27: - return 87; - break; - case 28: - // ignore whitespace - break; - case 29: - this.popState();return 54; - break; - case 30: - this.popState();return 33; - break; - case 31: - yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80; - break; - case 32: - yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80; - break; - case 33: - return 85; - break; - case 34: - return 82; - break; - case 35: - return 82; - break; - case 36: - return 83; - break; - case 37: - return 84; - break; - case 38: - return 81; - break; - case 39: - return 75; - break; - case 40: - return 77; - break; - case 41: - return 72; - break; - case 42: - yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72; - break; - case 43: - return 'INVALID'; - break; - case 44: - return 5; - break; - } - }; - lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^\/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]*?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/]; - lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } }; - return lexer; - })(); - parser.lexer = lexer; - function Parser() { - this.yy = {}; - }Parser.prototype = parser;parser.Parser = Parser; - return new Parser(); - })();exports.__esModule = true; - exports['default'] = handlebars; - -/***/ }, -/* 27 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(1)['default']; - - exports.__esModule = true; - - var _visitor = __webpack_require__(28); - - var _visitor2 = _interopRequireDefault(_visitor); - - function WhitespaceControl() { - var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; - - this.options = options; - } - WhitespaceControl.prototype = new _visitor2['default'](); - - WhitespaceControl.prototype.Program = function (program) { - var doStandalone = !this.options.ignoreStandalone; - - var isRoot = !this.isRootSeen; - this.isRootSeen = true; - - var body = program.body; - for (var i = 0, l = body.length; i < l; i++) { - var current = body[i], - strip = this.accept(current); - - if (!strip) { - continue; - } - - var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot), - _isNextWhitespace = isNextWhitespace(body, i, isRoot), - openStandalone = strip.openStandalone && _isPrevWhitespace, - closeStandalone = strip.closeStandalone && _isNextWhitespace, - inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace; - - if (strip.close) { - omitRight(body, i, true); - } - if (strip.open) { - omitLeft(body, i, true); - } - - if (doStandalone && inlineStandalone) { - omitRight(body, i); - - if (omitLeft(body, i)) { - // If we are on a standalone node, save the indent info for partials - if (current.type === 'PartialStatement') { - // Pull out the whitespace from the final line - current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1]; - } - } - } - if (doStandalone && openStandalone) { - omitRight((current.program || current.inverse).body); - - // Strip out the previous content node if it's whitespace only - omitLeft(body, i); - } - if (doStandalone && closeStandalone) { - // Always strip the next node - omitRight(body, i); - - omitLeft((current.inverse || current.program).body); - } - } - - return program; - }; - - WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) { - this.accept(block.program); - this.accept(block.inverse); - - // Find the inverse program that is involed with whitespace stripping. - var program = block.program || block.inverse, - inverse = block.program && block.inverse, - firstInverse = inverse, - lastInverse = inverse; - - if (inverse && inverse.chained) { - firstInverse = inverse.body[0].program; - - // Walk the inverse chain to find the last inverse that is actually in the chain. - while (lastInverse.chained) { - lastInverse = lastInverse.body[lastInverse.body.length - 1].program; - } - } - - var strip = { - open: block.openStrip.open, - close: block.closeStrip.close, - - // Determine the standalone candiacy. Basically flag our content as being possibly standalone - // so our parent can determine if we actually are standalone - openStandalone: isNextWhitespace(program.body), - closeStandalone: isPrevWhitespace((firstInverse || program).body) - }; - - if (block.openStrip.close) { - omitRight(program.body, null, true); - } - - if (inverse) { - var inverseStrip = block.inverseStrip; - - if (inverseStrip.open) { - omitLeft(program.body, null, true); - } - - if (inverseStrip.close) { - omitRight(firstInverse.body, null, true); - } - if (block.closeStrip.open) { - omitLeft(lastInverse.body, null, true); - } - - // Find standalone else statments - if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) { - omitLeft(program.body); - omitRight(firstInverse.body); - } - } else if (block.closeStrip.open) { - omitLeft(program.body, null, true); - } - - return strip; - }; - - WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) { - return mustache.strip; - }; - - WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) { - /* istanbul ignore next */ - var strip = node.strip || {}; - return { - inlineStandalone: true, - open: strip.open, - close: strip.close - }; - }; - - function isPrevWhitespace(body, i, isRoot) { - if (i === undefined) { - i = body.length; - } - - // Nodes that end with newlines are considered whitespace (but are special - // cased for strip operations) - var prev = body[i - 1], - sibling = body[i - 2]; - if (!prev) { - return isRoot; - } - - if (prev.type === 'ContentStatement') { - return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original); - } - } - function isNextWhitespace(body, i, isRoot) { - if (i === undefined) { - i = -1; - } - - var next = body[i + 1], - sibling = body[i + 2]; - if (!next) { - return isRoot; - } - - if (next.type === 'ContentStatement') { - return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original); - } - } - - // Marks the node to the right of the position as omitted. - // I.e. {{foo}}' ' will mark the ' ' node as omitted. - // - // If i is undefined, then the first child will be marked as such. - // - // If mulitple is truthy then all whitespace will be stripped out until non-whitespace - // content is met. - function omitRight(body, i, multiple) { - var current = body[i == null ? 0 : i + 1]; - if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) { - return; - } - - var original = current.value; - current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, ''); - current.rightStripped = current.value !== original; - } - - // Marks the node to the left of the position as omitted. - // I.e. ' '{{foo}} will mark the ' ' node as omitted. - // - // If i is undefined then the last child will be marked as such. - // - // If mulitple is truthy then all whitespace will be stripped out until non-whitespace - // content is met. - function omitLeft(body, i, multiple) { - var current = body[i == null ? body.length - 1 : i - 1]; - if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) { - return; - } - - // We omit the last node if it's whitespace only and not preceeded by a non-content node. - var original = current.value; - current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, ''); - current.leftStripped = current.value !== original; - return current.leftStripped; - } - - exports['default'] = WhitespaceControl; - module.exports = exports['default']; - -/***/ }, -/* 28 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(1)['default']; - - exports.__esModule = true; - - var _exception = __webpack_require__(6); - - var _exception2 = _interopRequireDefault(_exception); - - function Visitor() { - this.parents = []; - } - - Visitor.prototype = { - constructor: Visitor, - mutating: false, - - // Visits a given value. If mutating, will replace the value if necessary. - acceptKey: function acceptKey(node, name) { - var value = this.accept(node[name]); - if (this.mutating) { - // Hacky sanity check: This may have a few false positives for type for the helper - // methods but will generally do the right thing without a lot of overhead. - if (value && !Visitor.prototype[value.type]) { - throw new _exception2['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type); - } - node[name] = value; - } - }, - - // Performs an accept operation with added sanity check to ensure - // required keys are not removed. - acceptRequired: function acceptRequired(node, name) { - this.acceptKey(node, name); - - if (!node[name]) { - throw new _exception2['default'](node.type + ' requires ' + name); - } - }, - - // Traverses a given array. If mutating, empty respnses will be removed - // for child elements. - acceptArray: function acceptArray(array) { - for (var i = 0, l = array.length; i < l; i++) { - this.acceptKey(array, i); - - if (!array[i]) { - array.splice(i, 1); - i--; - l--; - } - } - }, - - accept: function accept(object) { - if (!object) { - return; - } - - /* istanbul ignore next: Sanity code */ - if (!this[object.type]) { - throw new _exception2['default']('Unknown type: ' + object.type, object); - } - - if (this.current) { - this.parents.unshift(this.current); - } - this.current = object; - - var ret = this[object.type](object); - - this.current = this.parents.shift(); - - if (!this.mutating || ret) { - return ret; - } else if (ret !== false) { - return object; - } - }, - - Program: function Program(program) { - this.acceptArray(program.body); - }, - - MustacheStatement: visitSubExpression, - Decorator: visitSubExpression, - - BlockStatement: visitBlock, - DecoratorBlock: visitBlock, - - PartialStatement: visitPartial, - PartialBlockStatement: function PartialBlockStatement(partial) { - visitPartial.call(this, partial); - - this.acceptKey(partial, 'program'); - }, - - ContentStatement: function ContentStatement() /* content */{}, - CommentStatement: function CommentStatement() /* comment */{}, - - SubExpression: visitSubExpression, - - PathExpression: function PathExpression() /* path */{}, - - StringLiteral: function StringLiteral() /* string */{}, - NumberLiteral: function NumberLiteral() /* number */{}, - BooleanLiteral: function BooleanLiteral() /* bool */{}, - UndefinedLiteral: function UndefinedLiteral() /* literal */{}, - NullLiteral: function NullLiteral() /* literal */{}, - - Hash: function Hash(hash) { - this.acceptArray(hash.pairs); - }, - HashPair: function HashPair(pair) { - this.acceptRequired(pair, 'value'); - } - }; - - function visitSubExpression(mustache) { - this.acceptRequired(mustache, 'path'); - this.acceptArray(mustache.params); - this.acceptKey(mustache, 'hash'); - } - function visitBlock(block) { - visitSubExpression.call(this, block); - - this.acceptKey(block, 'program'); - this.acceptKey(block, 'inverse'); - } - function visitPartial(partial) { - this.acceptRequired(partial, 'name'); - this.acceptArray(partial.params); - this.acceptKey(partial, 'hash'); - } - - exports['default'] = Visitor; - module.exports = exports['default']; - -/***/ }, -/* 29 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(1)['default']; - - exports.__esModule = true; - exports.SourceLocation = SourceLocation; - exports.id = id; - exports.stripFlags = stripFlags; - exports.stripComment = stripComment; - exports.preparePath = preparePath; - exports.prepareMustache = prepareMustache; - exports.prepareRawBlock = prepareRawBlock; - exports.prepareBlock = prepareBlock; - exports.prepareProgram = prepareProgram; - exports.preparePartialBlock = preparePartialBlock; - - var _exception = __webpack_require__(6); - - var _exception2 = _interopRequireDefault(_exception); - - function validateClose(open, close) { - close = close.path ? close.path.original : close; - - if (open.path.original !== close) { - var errorNode = { loc: open.path.loc }; - - throw new _exception2['default'](open.path.original + " doesn't match " + close, errorNode); - } - } - - function SourceLocation(source, locInfo) { - this.source = source; - this.start = { - line: locInfo.first_line, - column: locInfo.first_column - }; - this.end = { - line: locInfo.last_line, - column: locInfo.last_column - }; - } - - function id(token) { - if (/^\[.*\]$/.test(token)) { - return token.substr(1, token.length - 2); - } else { - return token; - } - } - - function stripFlags(open, close) { - return { - open: open.charAt(2) === '~', - close: close.charAt(close.length - 3) === '~' - }; - } - - function stripComment(comment) { - return comment.replace(/^\{\{~?\!-?-?/, '').replace(/-?-?~?\}\}$/, ''); - } - - function preparePath(data, parts, loc) { - loc = this.locInfo(loc); - - var original = data ? '@' : '', - dig = [], - depth = 0, - depthString = ''; - - for (var i = 0, l = parts.length; i < l; i++) { - var part = parts[i].part, - - // If we have [] syntax then we do not treat path references as operators, - // i.e. foo.[this] resolves to approximately context.foo['this'] - isLiteral = parts[i].original !== part; - original += (parts[i].separator || '') + part; - - if (!isLiteral && (part === '..' || part === '.' || part === 'this')) { - if (dig.length > 0) { - throw new _exception2['default']('Invalid path: ' + original, { loc: loc }); - } else if (part === '..') { - depth++; - depthString += '../'; - } - } else { - dig.push(part); - } - } - - return { - type: 'PathExpression', - data: data, - depth: depth, - parts: dig, - original: original, - loc: loc - }; - } - - function prepareMustache(path, params, hash, open, strip, locInfo) { - // Must use charAt to support IE pre-10 - var escapeFlag = open.charAt(3) || open.charAt(2), - escaped = escapeFlag !== '{' && escapeFlag !== '&'; - - var decorator = /\*/.test(open); - return { - type: decorator ? 'Decorator' : 'MustacheStatement', - path: path, - params: params, - hash: hash, - escaped: escaped, - strip: strip, - loc: this.locInfo(locInfo) - }; - } - - function prepareRawBlock(openRawBlock, contents, close, locInfo) { - validateClose(openRawBlock, close); - - locInfo = this.locInfo(locInfo); - var program = { - type: 'Program', - body: contents, - strip: {}, - loc: locInfo - }; - - return { - type: 'BlockStatement', - path: openRawBlock.path, - params: openRawBlock.params, - hash: openRawBlock.hash, - program: program, - openStrip: {}, - inverseStrip: {}, - closeStrip: {}, - loc: locInfo - }; - } - - function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) { - if (close && close.path) { - validateClose(openBlock, close); - } - - var decorator = /\*/.test(openBlock.open); - - program.blockParams = openBlock.blockParams; - - var inverse = undefined, - inverseStrip = undefined; - - if (inverseAndProgram) { - if (decorator) { - throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram); - } - - if (inverseAndProgram.chain) { - inverseAndProgram.program.body[0].closeStrip = close.strip; - } - - inverseStrip = inverseAndProgram.strip; - inverse = inverseAndProgram.program; - } - - if (inverted) { - inverted = inverse; - inverse = program; - program = inverted; - } - - return { - type: decorator ? 'DecoratorBlock' : 'BlockStatement', - path: openBlock.path, - params: openBlock.params, - hash: openBlock.hash, - program: program, - inverse: inverse, - openStrip: openBlock.strip, - inverseStrip: inverseStrip, - closeStrip: close && close.strip, - loc: this.locInfo(locInfo) - }; - } - - function prepareProgram(statements, loc) { - if (!loc && statements.length) { - var firstLoc = statements[0].loc, - lastLoc = statements[statements.length - 1].loc; - - /* istanbul ignore else */ - if (firstLoc && lastLoc) { - loc = { - source: firstLoc.source, - start: { - line: firstLoc.start.line, - column: firstLoc.start.column - }, - end: { - line: lastLoc.end.line, - column: lastLoc.end.column - } - }; - } - } - - return { - type: 'Program', - body: statements, - strip: {}, - loc: loc - }; - } - - function preparePartialBlock(open, program, close, locInfo) { - validateClose(open, close); - - return { - type: 'PartialBlockStatement', - name: open.path, - params: open.params, - hash: open.hash, - program: program, - openStrip: open.strip, - closeStrip: close && close.strip, - loc: this.locInfo(locInfo) - }; - } - -/***/ }, -/* 30 */ -/***/ function(module, exports, __webpack_require__) { - - /* eslint-disable new-cap */ - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(1)['default']; - - exports.__esModule = true; - exports.Compiler = Compiler; - exports.precompile = precompile; - exports.compile = compile; - - var _exception = __webpack_require__(6); - - var _exception2 = _interopRequireDefault(_exception); - - var _utils = __webpack_require__(5); - - var _ast = __webpack_require__(24); - - var _ast2 = _interopRequireDefault(_ast); - - var slice = [].slice; - - function Compiler() {} - - // the foundHelper register will disambiguate helper lookup from finding a - // function in a context. This is necessary for mustache compatibility, which - // requires that context functions in blocks are evaluated by blockHelperMissing, - // and then proceed as if the resulting value was provided to blockHelperMissing. - - Compiler.prototype = { - compiler: Compiler, - - equals: function equals(other) { - var len = this.opcodes.length; - if (other.opcodes.length !== len) { - return false; - } - - for (var i = 0; i < len; i++) { - var opcode = this.opcodes[i], - otherOpcode = other.opcodes[i]; - if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) { - return false; - } - } - - // We know that length is the same between the two arrays because they are directly tied - // to the opcode behavior above. - len = this.children.length; - for (var i = 0; i < len; i++) { - if (!this.children[i].equals(other.children[i])) { - return false; - } - } - - return true; - }, - - guid: 0, - - compile: function compile(program, options) { - this.sourceNode = []; - this.opcodes = []; - this.children = []; - this.options = options; - this.stringParams = options.stringParams; - this.trackIds = options.trackIds; - - options.blockParams = options.blockParams || []; - - // These changes will propagate to the other compiler components - var knownHelpers = options.knownHelpers; - options.knownHelpers = { - 'helperMissing': true, - 'blockHelperMissing': true, - 'each': true, - 'if': true, - 'unless': true, - 'with': true, - 'log': true, - 'lookup': true - }; - if (knownHelpers) { - for (var _name in knownHelpers) { - /* istanbul ignore else */ - if (_name in knownHelpers) { - options.knownHelpers[_name] = knownHelpers[_name]; - } - } - } - - return this.accept(program); - }, - - compileProgram: function compileProgram(program) { - var childCompiler = new this.compiler(), - // eslint-disable-line new-cap - result = childCompiler.compile(program, this.options), - guid = this.guid++; - - this.usePartial = this.usePartial || result.usePartial; - - this.children[guid] = result; - this.useDepths = this.useDepths || result.useDepths; - - return guid; - }, - - accept: function accept(node) { - /* istanbul ignore next: Sanity code */ - if (!this[node.type]) { - throw new _exception2['default']('Unknown type: ' + node.type, node); - } - - this.sourceNode.unshift(node); - var ret = this[node.type](node); - this.sourceNode.shift(); - return ret; - }, - - Program: function Program(program) { - this.options.blockParams.unshift(program.blockParams); - - var body = program.body, - bodyLength = body.length; - for (var i = 0; i < bodyLength; i++) { - this.accept(body[i]); - } - - this.options.blockParams.shift(); - - this.isSimple = bodyLength === 1; - this.blockParams = program.blockParams ? program.blockParams.length : 0; - - return this; - }, - - BlockStatement: function BlockStatement(block) { - transformLiteralToPath(block); - - var program = block.program, - inverse = block.inverse; - - program = program && this.compileProgram(program); - inverse = inverse && this.compileProgram(inverse); - - var type = this.classifySexpr(block); - - if (type === 'helper') { - this.helperSexpr(block, program, inverse); - } else if (type === 'simple') { - this.simpleSexpr(block); - - // now that the simple mustache is resolved, we need to - // evaluate it by executing `blockHelperMissing` - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - this.opcode('emptyHash'); - this.opcode('blockValue', block.path.original); - } else { - this.ambiguousSexpr(block, program, inverse); - - // now that the simple mustache is resolved, we need to - // evaluate it by executing `blockHelperMissing` - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - this.opcode('emptyHash'); - this.opcode('ambiguousBlockValue'); - } - - this.opcode('append'); - }, - - DecoratorBlock: function DecoratorBlock(decorator) { - var program = decorator.program && this.compileProgram(decorator.program); - var params = this.setupFullMustacheParams(decorator, program, undefined), - path = decorator.path; - - this.useDecorators = true; - this.opcode('registerDecorator', params.length, path.original); - }, - - PartialStatement: function PartialStatement(partial) { - this.usePartial = true; - - var program = partial.program; - if (program) { - program = this.compileProgram(partial.program); - } - - var params = partial.params; - if (params.length > 1) { - throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial); - } else if (!params.length) { - if (this.options.explicitPartialContext) { - this.opcode('pushLiteral', 'undefined'); - } else { - params.push({ type: 'PathExpression', parts: [], depth: 0 }); - } - } - - var partialName = partial.name.original, - isDynamic = partial.name.type === 'SubExpression'; - if (isDynamic) { - this.accept(partial.name); - } - - this.setupFullMustacheParams(partial, program, undefined, true); - - var indent = partial.indent || ''; - if (this.options.preventIndent && indent) { - this.opcode('appendContent', indent); - indent = ''; - } - - this.opcode('invokePartial', isDynamic, partialName, indent); - this.opcode('append'); - }, - PartialBlockStatement: function PartialBlockStatement(partialBlock) { - this.PartialStatement(partialBlock); - }, - - MustacheStatement: function MustacheStatement(mustache) { - this.SubExpression(mustache); - - if (mustache.escaped && !this.options.noEscape) { - this.opcode('appendEscaped'); - } else { - this.opcode('append'); - } - }, - Decorator: function Decorator(decorator) { - this.DecoratorBlock(decorator); - }, - - ContentStatement: function ContentStatement(content) { - if (content.value) { - this.opcode('appendContent', content.value); - } - }, - - CommentStatement: function CommentStatement() {}, - - SubExpression: function SubExpression(sexpr) { - transformLiteralToPath(sexpr); - var type = this.classifySexpr(sexpr); - - if (type === 'simple') { - this.simpleSexpr(sexpr); - } else if (type === 'helper') { - this.helperSexpr(sexpr); - } else { - this.ambiguousSexpr(sexpr); - } - }, - ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) { - var path = sexpr.path, - name = path.parts[0], - isBlock = program != null || inverse != null; - - this.opcode('getContext', path.depth); - - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - - path.strict = true; - this.accept(path); - - this.opcode('invokeAmbiguous', name, isBlock); - }, - - simpleSexpr: function simpleSexpr(sexpr) { - var path = sexpr.path; - path.strict = true; - this.accept(path); - this.opcode('resolvePossibleLambda'); - }, - - helperSexpr: function helperSexpr(sexpr, program, inverse) { - var params = this.setupFullMustacheParams(sexpr, program, inverse), - path = sexpr.path, - name = path.parts[0]; - - if (this.options.knownHelpers[name]) { - this.opcode('invokeKnownHelper', params.length, name); - } else if (this.options.knownHelpersOnly) { - throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr); - } else { - path.strict = true; - path.falsy = true; - - this.accept(path); - this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path)); - } - }, - - PathExpression: function PathExpression(path) { - this.addDepth(path.depth); - this.opcode('getContext', path.depth); - - var name = path.parts[0], - scoped = _ast2['default'].helpers.scopedId(path), - blockParamId = !path.depth && !scoped && this.blockParamIndex(name); - - if (blockParamId) { - this.opcode('lookupBlockParam', blockParamId, path.parts); - } else if (!name) { - // Context reference, i.e. `{{foo .}}` or `{{foo ..}}` - this.opcode('pushContext'); - } else if (path.data) { - this.options.data = true; - this.opcode('lookupData', path.depth, path.parts, path.strict); - } else { - this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped); - } - }, - - StringLiteral: function StringLiteral(string) { - this.opcode('pushString', string.value); - }, - - NumberLiteral: function NumberLiteral(number) { - this.opcode('pushLiteral', number.value); - }, - - BooleanLiteral: function BooleanLiteral(bool) { - this.opcode('pushLiteral', bool.value); - }, - - UndefinedLiteral: function UndefinedLiteral() { - this.opcode('pushLiteral', 'undefined'); - }, - - NullLiteral: function NullLiteral() { - this.opcode('pushLiteral', 'null'); - }, - - Hash: function Hash(hash) { - var pairs = hash.pairs, - i = 0, - l = pairs.length; - - this.opcode('pushHash'); - - for (; i < l; i++) { - this.pushParam(pairs[i].value); - } - while (i--) { - this.opcode('assignToHash', pairs[i].key); - } - this.opcode('popHash'); - }, - - // HELPERS - opcode: function opcode(name) { - this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc }); - }, - - addDepth: function addDepth(depth) { - if (!depth) { - return; - } - - this.useDepths = true; - }, - - classifySexpr: function classifySexpr(sexpr) { - var isSimple = _ast2['default'].helpers.simpleId(sexpr.path); - - var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]); - - // a mustache is an eligible helper if: - // * its id is simple (a single part, not `this` or `..`) - var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr); - - // if a mustache is an eligible helper but not a definite - // helper, it is ambiguous, and will be resolved in a later - // pass or at runtime. - var isEligible = !isBlockParam && (isHelper || isSimple); - - // if ambiguous, we can possibly resolve the ambiguity now - // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc. - if (isEligible && !isHelper) { - var _name2 = sexpr.path.parts[0], - options = this.options; - - if (options.knownHelpers[_name2]) { - isHelper = true; - } else if (options.knownHelpersOnly) { - isEligible = false; - } - } - - if (isHelper) { - return 'helper'; - } else if (isEligible) { - return 'ambiguous'; - } else { - return 'simple'; - } - }, - - pushParams: function pushParams(params) { - for (var i = 0, l = params.length; i < l; i++) { - this.pushParam(params[i]); - } - }, - - pushParam: function pushParam(val) { - var value = val.value != null ? val.value : val.original || ''; - - if (this.stringParams) { - if (value.replace) { - value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.'); - } - - if (val.depth) { - this.addDepth(val.depth); - } - this.opcode('getContext', val.depth || 0); - this.opcode('pushStringParam', value, val.type); - - if (val.type === 'SubExpression') { - // SubExpressions get evaluated and passed in - // in string params mode. - this.accept(val); - } - } else { - if (this.trackIds) { - var blockParamIndex = undefined; - if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) { - blockParamIndex = this.blockParamIndex(val.parts[0]); - } - if (blockParamIndex) { - var blockParamChild = val.parts.slice(1).join('.'); - this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild); - } else { - value = val.original || value; - if (value.replace) { - value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, ''); - } - - this.opcode('pushId', val.type, value); - } - } - this.accept(val); - } - }, - - setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) { - var params = sexpr.params; - this.pushParams(params); - - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - - if (sexpr.hash) { - this.accept(sexpr.hash); - } else { - this.opcode('emptyHash', omitEmpty); - } - - return params; - }, - - blockParamIndex: function blockParamIndex(name) { - for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) { - var blockParams = this.options.blockParams[depth], - param = blockParams && _utils.indexOf(blockParams, name); - if (blockParams && param >= 0) { - return [depth, param]; - } - } - } - }; - - function precompile(input, options, env) { - if (input == null || typeof input !== 'string' && input.type !== 'Program') { - throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input); - } - - options = options || {}; - if (!('data' in options)) { - options.data = true; - } - if (options.compat) { - options.useDepths = true; - } - - var ast = env.parse(input, options), - environment = new env.Compiler().compile(ast, options); - return new env.JavaScriptCompiler().compile(environment, options); - } - - function compile(input, options, env) { - if (options === undefined) options = {}; - - if (input == null || typeof input !== 'string' && input.type !== 'Program') { - throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input); - } - - if (!('data' in options)) { - options.data = true; - } - if (options.compat) { - options.useDepths = true; - } - - var compiled = undefined; - - function compileInput() { - var ast = env.parse(input, options), - environment = new env.Compiler().compile(ast, options), - templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true); - return env.template(templateSpec); - } - - // Template is only compiled on first use and cached after that point. - function ret(context, execOptions) { - if (!compiled) { - compiled = compileInput(); - } - return compiled.call(this, context, execOptions); - } - ret._setup = function (setupOptions) { - if (!compiled) { - compiled = compileInput(); - } - return compiled._setup(setupOptions); - }; - ret._child = function (i, data, blockParams, depths) { - if (!compiled) { - compiled = compileInput(); - } - return compiled._child(i, data, blockParams, depths); - }; - return ret; - } - - function argEquals(a, b) { - if (a === b) { - return true; - } - - if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) { - for (var i = 0; i < a.length; i++) { - if (!argEquals(a[i], b[i])) { - return false; - } - } - return true; - } - } - - function transformLiteralToPath(sexpr) { - if (!sexpr.path.parts) { - var literal = sexpr.path; - // Casting to string here to make false and 0 literal values play nicely with the rest - // of the system. - sexpr.path = { - type: 'PathExpression', - data: false, - depth: 0, - parts: [literal.original + ''], - original: literal.original + '', - loc: literal.loc - }; - } - } - -/***/ }, -/* 31 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(1)['default']; - - exports.__esModule = true; - - var _base = __webpack_require__(4); - - var _exception = __webpack_require__(6); - - var _exception2 = _interopRequireDefault(_exception); - - var _utils = __webpack_require__(5); - - var _codeGen = __webpack_require__(32); - - var _codeGen2 = _interopRequireDefault(_codeGen); - - function Literal(value) { - this.value = value; - } - - function JavaScriptCompiler() {} - - JavaScriptCompiler.prototype = { - // PUBLIC API: You can override these methods in a subclass to provide - // alternative compiled forms for name lookup and buffering semantics - nameLookup: function nameLookup(parent, name /* , type*/) { - if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) { - return [parent, '.', name]; - } else { - return [parent, '[', JSON.stringify(name), ']']; - } - }, - depthedLookup: function depthedLookup(name) { - return [this.aliasable('container.lookup'), '(depths, "', name, '")']; - }, - - compilerInfo: function compilerInfo() { - var revision = _base.COMPILER_REVISION, - versions = _base.REVISION_CHANGES[revision]; - return [revision, versions]; - }, - - appendToBuffer: function appendToBuffer(source, location, explicit) { - // Force a source as this simplifies the merge logic. - if (!_utils.isArray(source)) { - source = [source]; - } - source = this.source.wrap(source, location); - - if (this.environment.isSimple) { - return ['return ', source, ';']; - } else if (explicit) { - // This is a case where the buffer operation occurs as a child of another - // construct, generally braces. We have to explicitly output these buffer - // operations to ensure that the emitted code goes in the correct location. - return ['buffer += ', source, ';']; - } else { - source.appendToBuffer = true; - return source; - } - }, - - initializeBuffer: function initializeBuffer() { - return this.quotedString(''); - }, - // END PUBLIC API - - compile: function compile(environment, options, context, asObject) { - this.environment = environment; - this.options = options; - this.stringParams = this.options.stringParams; - this.trackIds = this.options.trackIds; - this.precompile = !asObject; - - this.name = this.environment.name; - this.isChild = !!context; - this.context = context || { - decorators: [], - programs: [], - environments: [] - }; - - this.preamble(); - - this.stackSlot = 0; - this.stackVars = []; - this.aliases = {}; - this.registers = { list: [] }; - this.hashes = []; - this.compileStack = []; - this.inlineStack = []; - this.blockParams = []; - - this.compileChildren(environment, options); - - this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat; - this.useBlockParams = this.useBlockParams || environment.useBlockParams; - - var opcodes = environment.opcodes, - opcode = undefined, - firstLoc = undefined, - i = undefined, - l = undefined; - - for (i = 0, l = opcodes.length; i < l; i++) { - opcode = opcodes[i]; - - this.source.currentLocation = opcode.loc; - firstLoc = firstLoc || opcode.loc; - this[opcode.opcode].apply(this, opcode.args); - } - - // Flush any trailing content that might be pending. - this.source.currentLocation = firstLoc; - this.pushSource(''); - - /* istanbul ignore next */ - if (this.stackSlot || this.inlineStack.length || this.compileStack.length) { - throw new _exception2['default']('Compile completed with content left on stack'); - } - - if (!this.decorators.isEmpty()) { - this.useDecorators = true; - - this.decorators.prepend('var decorators = container.decorators;\n'); - this.decorators.push('return fn;'); - - if (asObject) { - this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]); - } else { - this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\n'); - this.decorators.push('}\n'); - this.decorators = this.decorators.merge(); - } - } else { - this.decorators = undefined; - } - - var fn = this.createFunctionContext(asObject); - if (!this.isChild) { - var ret = { - compiler: this.compilerInfo(), - main: fn - }; - - if (this.decorators) { - ret.main_d = this.decorators; // eslint-disable-line camelcase - ret.useDecorators = true; - } - - var _context = this.context; - var programs = _context.programs; - var decorators = _context.decorators; - - for (i = 0, l = programs.length; i < l; i++) { - if (programs[i]) { - ret[i] = programs[i]; - if (decorators[i]) { - ret[i + '_d'] = decorators[i]; - ret.useDecorators = true; - } - } - } - - if (this.environment.usePartial) { - ret.usePartial = true; - } - if (this.options.data) { - ret.useData = true; - } - if (this.useDepths) { - ret.useDepths = true; - } - if (this.useBlockParams) { - ret.useBlockParams = true; - } - if (this.options.compat) { - ret.compat = true; - } - - if (!asObject) { - ret.compiler = JSON.stringify(ret.compiler); - - this.source.currentLocation = { start: { line: 1, column: 0 } }; - ret = this.objectLiteral(ret); - - if (options.srcName) { - ret = ret.toStringWithSourceMap({ file: options.destName }); - ret.map = ret.map && ret.map.toString(); - } else { - ret = ret.toString(); - } - } else { - ret.compilerOptions = this.options; - } - - return ret; - } else { - return fn; - } - }, - - preamble: function preamble() { - // track the last context pushed into place to allow skipping the - // getContext opcode when it would be a noop - this.lastContext = 0; - this.source = new _codeGen2['default'](this.options.srcName); - this.decorators = new _codeGen2['default'](this.options.srcName); - }, - - createFunctionContext: function createFunctionContext(asObject) { - var varDeclarations = ''; - - var locals = this.stackVars.concat(this.registers.list); - if (locals.length > 0) { - varDeclarations += ', ' + locals.join(', '); - } - - // Generate minimizer alias mappings - // - // When using true SourceNodes, this will update all references to the given alias - // as the source nodes are reused in situ. For the non-source node compilation mode, - // aliases will not be used, but this case is already being run on the client and - // we aren't concern about minimizing the template size. - var aliasCount = 0; - for (var alias in this.aliases) { - // eslint-disable-line guard-for-in - var node = this.aliases[alias]; - - if (this.aliases.hasOwnProperty(alias) && node.children && node.referenceCount > 1) { - varDeclarations += ', alias' + ++aliasCount + '=' + alias; - node.children[0] = 'alias' + aliasCount; - } - } - - var params = ['container', 'depth0', 'helpers', 'partials', 'data']; - - if (this.useBlockParams || this.useDepths) { - params.push('blockParams'); - } - if (this.useDepths) { - params.push('depths'); - } - - // Perform a second pass over the output to merge content when possible - var source = this.mergeSource(varDeclarations); - - if (asObject) { - params.push(source); - - return Function.apply(this, params); - } else { - return this.source.wrap(['function(', params.join(','), ') {\n ', source, '}']); - } - }, - mergeSource: function mergeSource(varDeclarations) { - var isSimple = this.environment.isSimple, - appendOnly = !this.forceBuffer, - appendFirst = undefined, - sourceSeen = undefined, - bufferStart = undefined, - bufferEnd = undefined; - this.source.each(function (line) { - if (line.appendToBuffer) { - if (bufferStart) { - line.prepend(' + '); - } else { - bufferStart = line; - } - bufferEnd = line; - } else { - if (bufferStart) { - if (!sourceSeen) { - appendFirst = true; - } else { - bufferStart.prepend('buffer += '); - } - bufferEnd.add(';'); - bufferStart = bufferEnd = undefined; - } - - sourceSeen = true; - if (!isSimple) { - appendOnly = false; - } - } - }); - - if (appendOnly) { - if (bufferStart) { - bufferStart.prepend('return '); - bufferEnd.add(';'); - } else if (!sourceSeen) { - this.source.push('return "";'); - } - } else { - varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer()); - - if (bufferStart) { - bufferStart.prepend('return buffer + '); - bufferEnd.add(';'); - } else { - this.source.push('return buffer;'); - } - } - - if (varDeclarations) { - this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n')); - } - - return this.source.merge(); - }, - - // [blockValue] - // - // On stack, before: hash, inverse, program, value - // On stack, after: return value of blockHelperMissing - // - // The purpose of this opcode is to take a block of the form - // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and - // replace it on the stack with the result of properly - // invoking blockHelperMissing. - blockValue: function blockValue(name) { - var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'), - params = [this.contextName(0)]; - this.setupHelperArgs(name, 0, params); - - var blockName = this.popStack(); - params.splice(1, 0, blockName); - - this.push(this.source.functionCall(blockHelperMissing, 'call', params)); - }, - - // [ambiguousBlockValue] - // - // On stack, before: hash, inverse, program, value - // Compiler value, before: lastHelper=value of last found helper, if any - // On stack, after, if no lastHelper: same as [blockValue] - // On stack, after, if lastHelper: value - ambiguousBlockValue: function ambiguousBlockValue() { - // We're being a bit cheeky and reusing the options value from the prior exec - var blockHelperMissing = this.aliasable('helpers.blockHelperMissing'), - params = [this.contextName(0)]; - this.setupHelperArgs('', 0, params, true); - - this.flushInline(); - - var current = this.topStack(); - params.splice(1, 0, current); - - this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']); - }, - - // [appendContent] - // - // On stack, before: ... - // On stack, after: ... - // - // Appends the string value of `content` to the current buffer - appendContent: function appendContent(content) { - if (this.pendingContent) { - content = this.pendingContent + content; - } else { - this.pendingLocation = this.source.currentLocation; - } - - this.pendingContent = content; - }, - - // [append] - // - // On stack, before: value, ... - // On stack, after: ... - // - // Coerces `value` to a String and appends it to the current buffer. - // - // If `value` is truthy, or 0, it is coerced into a string and appended - // Otherwise, the empty string is appended - append: function append() { - if (this.isInline()) { - this.replaceStack(function (current) { - return [' != null ? ', current, ' : ""']; - }); - - this.pushSource(this.appendToBuffer(this.popStack())); - } else { - var local = this.popStack(); - this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']); - if (this.environment.isSimple) { - this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']); - } - } - }, - - // [appendEscaped] - // - // On stack, before: value, ... - // On stack, after: ... - // - // Escape `value` and append it to the buffer - appendEscaped: function appendEscaped() { - this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')'])); - }, - - // [getContext] - // - // On stack, before: ... - // On stack, after: ... - // Compiler value, after: lastContext=depth - // - // Set the value of the `lastContext` compiler value to the depth - getContext: function getContext(depth) { - this.lastContext = depth; - }, - - // [pushContext] - // - // On stack, before: ... - // On stack, after: currentContext, ... - // - // Pushes the value of the current context onto the stack. - pushContext: function pushContext() { - this.pushStackLiteral(this.contextName(this.lastContext)); - }, - - // [lookupOnContext] - // - // On stack, before: ... - // On stack, after: currentContext[name], ... - // - // Looks up the value of `name` on the current context and pushes - // it onto the stack. - lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) { - var i = 0; - - if (!scoped && this.options.compat && !this.lastContext) { - // The depthed query is expected to handle the undefined logic for the root level that - // is implemented below, so we evaluate that directly in compat mode - this.push(this.depthedLookup(parts[i++])); - } else { - this.pushContext(); - } - - this.resolvePath('context', parts, i, falsy, strict); - }, - - // [lookupBlockParam] - // - // On stack, before: ... - // On stack, after: blockParam[name], ... - // - // Looks up the value of `parts` on the given block param and pushes - // it onto the stack. - lookupBlockParam: function lookupBlockParam(blockParamId, parts) { - this.useBlockParams = true; - - this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']); - this.resolvePath('context', parts, 1); - }, - - // [lookupData] - // - // On stack, before: ... - // On stack, after: data, ... - // - // Push the data lookup operator - lookupData: function lookupData(depth, parts, strict) { - if (!depth) { - this.pushStackLiteral('data'); - } else { - this.pushStackLiteral('container.data(data, ' + depth + ')'); - } - - this.resolvePath('data', parts, 0, true, strict); - }, - - resolvePath: function resolvePath(type, parts, i, falsy, strict) { - // istanbul ignore next - - var _this = this; - - if (this.options.strict || this.options.assumeObjects) { - this.push(strictLookup(this.options.strict && strict, this, parts, type)); - return; - } - - var len = parts.length; - for (; i < len; i++) { - /* eslint-disable no-loop-func */ - this.replaceStack(function (current) { - var lookup = _this.nameLookup(current, parts[i], type); - // We want to ensure that zero and false are handled properly if the context (falsy flag) - // needs to have the special handling for these values. - if (!falsy) { - return [' != null ? ', lookup, ' : ', current]; - } else { - // Otherwise we can use generic falsy handling - return [' && ', lookup]; - } - }); - /* eslint-enable no-loop-func */ - } - }, - - // [resolvePossibleLambda] - // - // On stack, before: value, ... - // On stack, after: resolved value, ... - // - // If the `value` is a lambda, replace it on the stack by - // the return value of the lambda - resolvePossibleLambda: function resolvePossibleLambda() { - this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']); - }, - - // [pushStringParam] - // - // On stack, before: ... - // On stack, after: string, currentContext, ... - // - // This opcode is designed for use in string mode, which - // provides the string value of a parameter along with its - // depth rather than resolving it immediately. - pushStringParam: function pushStringParam(string, type) { - this.pushContext(); - this.pushString(type); - - // If it's a subexpression, the string result - // will be pushed after this opcode. - if (type !== 'SubExpression') { - if (typeof string === 'string') { - this.pushString(string); - } else { - this.pushStackLiteral(string); - } - } - }, - - emptyHash: function emptyHash(omitEmpty) { - if (this.trackIds) { - this.push('{}'); // hashIds - } - if (this.stringParams) { - this.push('{}'); // hashContexts - this.push('{}'); // hashTypes - } - this.pushStackLiteral(omitEmpty ? 'undefined' : '{}'); - }, - pushHash: function pushHash() { - if (this.hash) { - this.hashes.push(this.hash); - } - this.hash = { values: [], types: [], contexts: [], ids: [] }; - }, - popHash: function popHash() { - var hash = this.hash; - this.hash = this.hashes.pop(); - - if (this.trackIds) { - this.push(this.objectLiteral(hash.ids)); - } - if (this.stringParams) { - this.push(this.objectLiteral(hash.contexts)); - this.push(this.objectLiteral(hash.types)); - } - - this.push(this.objectLiteral(hash.values)); - }, - - // [pushString] - // - // On stack, before: ... - // On stack, after: quotedString(string), ... - // - // Push a quoted version of `string` onto the stack - pushString: function pushString(string) { - this.pushStackLiteral(this.quotedString(string)); - }, - - // [pushLiteral] - // - // On stack, before: ... - // On stack, after: value, ... - // - // Pushes a value onto the stack. This operation prevents - // the compiler from creating a temporary variable to hold - // it. - pushLiteral: function pushLiteral(value) { - this.pushStackLiteral(value); - }, - - // [pushProgram] - // - // On stack, before: ... - // On stack, after: program(guid), ... - // - // Push a program expression onto the stack. This takes - // a compile-time guid and converts it into a runtime-accessible - // expression. - pushProgram: function pushProgram(guid) { - if (guid != null) { - this.pushStackLiteral(this.programExpression(guid)); - } else { - this.pushStackLiteral(null); - } - }, - - // [registerDecorator] - // - // On stack, before: hash, program, params..., ... - // On stack, after: ... - // - // Pops off the decorator's parameters, invokes the decorator, - // and inserts the decorator into the decorators list. - registerDecorator: function registerDecorator(paramSize, name) { - var foundDecorator = this.nameLookup('decorators', name, 'decorator'), - options = this.setupHelperArgs(name, paramSize); - - this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']); - }, - - // [invokeHelper] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of helper invocation - // - // Pops off the helper's parameters, invokes the helper, - // and pushes the helper's return value onto the stack. - // - // If the helper is not found, `helperMissing` is called. - invokeHelper: function invokeHelper(paramSize, name, isSimple) { - var nonHelper = this.popStack(), - helper = this.setupHelper(paramSize, name), - simple = isSimple ? [helper.name, ' || '] : ''; - - var lookup = ['('].concat(simple, nonHelper); - if (!this.options.strict) { - lookup.push(' || ', this.aliasable('helpers.helperMissing')); - } - lookup.push(')'); - - this.push(this.source.functionCall(lookup, 'call', helper.callParams)); - }, - - // [invokeKnownHelper] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of helper invocation - // - // This operation is used when the helper is known to exist, - // so a `helperMissing` fallback is not required. - invokeKnownHelper: function invokeKnownHelper(paramSize, name) { - var helper = this.setupHelper(paramSize, name); - this.push(this.source.functionCall(helper.name, 'call', helper.callParams)); - }, - - // [invokeAmbiguous] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of disambiguation - // - // This operation is used when an expression like `{{foo}}` - // is provided, but we don't know at compile-time whether it - // is a helper or a path. - // - // This operation emits more code than the other options, - // and can be avoided by passing the `knownHelpers` and - // `knownHelpersOnly` flags at compile-time. - invokeAmbiguous: function invokeAmbiguous(name, helperCall) { - this.useRegister('helper'); - - var nonHelper = this.popStack(); - - this.emptyHash(); - var helper = this.setupHelper(0, name, helperCall); - - var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper'); - - var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')']; - if (!this.options.strict) { - lookup[0] = '(helper = '; - lookup.push(' != null ? helper : ', this.aliasable('helpers.helperMissing')); - } - - this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('"function"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']); - }, - - // [invokePartial] - // - // On stack, before: context, ... - // On stack after: result of partial invocation - // - // This operation pops off a context, invokes a partial with that context, - // and pushes the result of the invocation back. - invokePartial: function invokePartial(isDynamic, name, indent) { - var params = [], - options = this.setupParams(name, 1, params); - - if (isDynamic) { - name = this.popStack(); - delete options.name; - } - - if (indent) { - options.indent = JSON.stringify(indent); - } - options.helpers = 'helpers'; - options.partials = 'partials'; - options.decorators = 'container.decorators'; - - if (!isDynamic) { - params.unshift(this.nameLookup('partials', name, 'partial')); - } else { - params.unshift(name); - } - - if (this.options.compat) { - options.depths = 'depths'; - } - options = this.objectLiteral(options); - params.push(options); - - this.push(this.source.functionCall('container.invokePartial', '', params)); - }, - - // [assignToHash] - // - // On stack, before: value, ..., hash, ... - // On stack, after: ..., hash, ... - // - // Pops a value off the stack and assigns it to the current hash - assignToHash: function assignToHash(key) { - var value = this.popStack(), - context = undefined, - type = undefined, - id = undefined; - - if (this.trackIds) { - id = this.popStack(); - } - if (this.stringParams) { - type = this.popStack(); - context = this.popStack(); - } - - var hash = this.hash; - if (context) { - hash.contexts[key] = context; - } - if (type) { - hash.types[key] = type; - } - if (id) { - hash.ids[key] = id; - } - hash.values[key] = value; - }, - - pushId: function pushId(type, name, child) { - if (type === 'BlockParam') { - this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : '')); - } else if (type === 'PathExpression') { - this.pushString(name); - } else if (type === 'SubExpression') { - this.pushStackLiteral('true'); - } else { - this.pushStackLiteral('null'); - } - }, - - // HELPERS - - compiler: JavaScriptCompiler, - - compileChildren: function compileChildren(environment, options) { - var children = environment.children, - child = undefined, - compiler = undefined; - - for (var i = 0, l = children.length; i < l; i++) { - child = children[i]; - compiler = new this.compiler(); // eslint-disable-line new-cap - - var existing = this.matchExistingProgram(child); - - if (existing == null) { - this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children - var index = this.context.programs.length; - child.index = index; - child.name = 'program' + index; - this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile); - this.context.decorators[index] = compiler.decorators; - this.context.environments[index] = child; - - this.useDepths = this.useDepths || compiler.useDepths; - this.useBlockParams = this.useBlockParams || compiler.useBlockParams; - child.useDepths = this.useDepths; - child.useBlockParams = this.useBlockParams; - } else { - child.index = existing.index; - child.name = 'program' + existing.index; - - this.useDepths = this.useDepths || existing.useDepths; - this.useBlockParams = this.useBlockParams || existing.useBlockParams; - } - } - }, - matchExistingProgram: function matchExistingProgram(child) { - for (var i = 0, len = this.context.environments.length; i < len; i++) { - var environment = this.context.environments[i]; - if (environment && environment.equals(child)) { - return environment; - } - } - }, - - programExpression: function programExpression(guid) { - var child = this.environment.children[guid], - programParams = [child.index, 'data', child.blockParams]; - - if (this.useBlockParams || this.useDepths) { - programParams.push('blockParams'); - } - if (this.useDepths) { - programParams.push('depths'); - } - - return 'container.program(' + programParams.join(', ') + ')'; - }, - - useRegister: function useRegister(name) { - if (!this.registers[name]) { - this.registers[name] = true; - this.registers.list.push(name); - } - }, - - push: function push(expr) { - if (!(expr instanceof Literal)) { - expr = this.source.wrap(expr); - } - - this.inlineStack.push(expr); - return expr; - }, - - pushStackLiteral: function pushStackLiteral(item) { - this.push(new Literal(item)); - }, - - pushSource: function pushSource(source) { - if (this.pendingContent) { - this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation)); - this.pendingContent = undefined; - } - - if (source) { - this.source.push(source); - } - }, - - replaceStack: function replaceStack(callback) { - var prefix = ['('], - stack = undefined, - createdStack = undefined, - usedLiteral = undefined; - - /* istanbul ignore next */ - if (!this.isInline()) { - throw new _exception2['default']('replaceStack on non-inline'); - } - - // We want to merge the inline statement into the replacement statement via ',' - var top = this.popStack(true); - - if (top instanceof Literal) { - // Literals do not need to be inlined - stack = [top.value]; - prefix = ['(', stack]; - usedLiteral = true; - } else { - // Get or create the current stack name for use by the inline - createdStack = true; - var _name = this.incrStack(); - - prefix = ['((', this.push(_name), ' = ', top, ')']; - stack = this.topStack(); - } - - var item = callback.call(this, stack); - - if (!usedLiteral) { - this.popStack(); - } - if (createdStack) { - this.stackSlot--; - } - this.push(prefix.concat(item, ')')); - }, - - incrStack: function incrStack() { - this.stackSlot++; - if (this.stackSlot > this.stackVars.length) { - this.stackVars.push('stack' + this.stackSlot); - } - return this.topStackName(); - }, - topStackName: function topStackName() { - return 'stack' + this.stackSlot; - }, - flushInline: function flushInline() { - var inlineStack = this.inlineStack; - this.inlineStack = []; - for (var i = 0, len = inlineStack.length; i < len; i++) { - var entry = inlineStack[i]; - /* istanbul ignore if */ - if (entry instanceof Literal) { - this.compileStack.push(entry); - } else { - var stack = this.incrStack(); - this.pushSource([stack, ' = ', entry, ';']); - this.compileStack.push(stack); - } - } - }, - isInline: function isInline() { - return this.inlineStack.length; - }, - - popStack: function popStack(wrapped) { - var inline = this.isInline(), - item = (inline ? this.inlineStack : this.compileStack).pop(); - - if (!wrapped && item instanceof Literal) { - return item.value; - } else { - if (!inline) { - /* istanbul ignore next */ - if (!this.stackSlot) { - throw new _exception2['default']('Invalid stack pop'); - } - this.stackSlot--; - } - return item; - } - }, - - topStack: function topStack() { - var stack = this.isInline() ? this.inlineStack : this.compileStack, - item = stack[stack.length - 1]; - - /* istanbul ignore if */ - if (item instanceof Literal) { - return item.value; - } else { - return item; - } - }, - - contextName: function contextName(context) { - if (this.useDepths && context) { - return 'depths[' + context + ']'; - } else { - return 'depth' + context; - } - }, - - quotedString: function quotedString(str) { - return this.source.quotedString(str); - }, - - objectLiteral: function objectLiteral(obj) { - return this.source.objectLiteral(obj); - }, - - aliasable: function aliasable(name) { - var ret = this.aliases[name]; - if (ret) { - ret.referenceCount++; - return ret; - } - - ret = this.aliases[name] = this.source.wrap(name); - ret.aliasable = true; - ret.referenceCount = 1; - - return ret; - }, - - setupHelper: function setupHelper(paramSize, name, blockHelper) { - var params = [], - paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper); - var foundHelper = this.nameLookup('helpers', name, 'helper'), - callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : {}'); - - return { - params: params, - paramsInit: paramsInit, - name: foundHelper, - callParams: [callContext].concat(params) - }; - }, - - setupParams: function setupParams(helper, paramSize, params) { - var options = {}, - contexts = [], - types = [], - ids = [], - objectArgs = !params, - param = undefined; - - if (objectArgs) { - params = []; - } - - options.name = this.quotedString(helper); - options.hash = this.popStack(); - - if (this.trackIds) { - options.hashIds = this.popStack(); - } - if (this.stringParams) { - options.hashTypes = this.popStack(); - options.hashContexts = this.popStack(); - } - - var inverse = this.popStack(), - program = this.popStack(); - - // Avoid setting fn and inverse if neither are set. This allows - // helpers to do a check for `if (options.fn)` - if (program || inverse) { - options.fn = program || 'container.noop'; - options.inverse = inverse || 'container.noop'; - } - - // The parameters go on to the stack in order (making sure that they are evaluated in order) - // so we need to pop them off the stack in reverse order - var i = paramSize; - while (i--) { - param = this.popStack(); - params[i] = param; - - if (this.trackIds) { - ids[i] = this.popStack(); - } - if (this.stringParams) { - types[i] = this.popStack(); - contexts[i] = this.popStack(); - } - } - - if (objectArgs) { - options.args = this.source.generateArray(params); - } - - if (this.trackIds) { - options.ids = this.source.generateArray(ids); - } - if (this.stringParams) { - options.types = this.source.generateArray(types); - options.contexts = this.source.generateArray(contexts); - } - - if (this.options.data) { - options.data = 'data'; - } - if (this.useBlockParams) { - options.blockParams = 'blockParams'; - } - return options; - }, - - setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) { - var options = this.setupParams(helper, paramSize, params); - options = this.objectLiteral(options); - if (useRegister) { - this.useRegister('options'); - params.push('options'); - return ['options=', options]; - } else if (params) { - params.push(options); - return ''; - } else { - return options; - } - } - }; - - (function () { - var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' '); - - var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {}; - - for (var i = 0, l = reservedWords.length; i < l; i++) { - compilerWords[reservedWords[i]] = true; - } - })(); - - JavaScriptCompiler.isValidJavaScriptVariableName = function (name) { - return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name); - }; - - function strictLookup(requireTerminal, compiler, parts, type) { - var stack = compiler.popStack(), - i = 0, - len = parts.length; - if (requireTerminal) { - len--; - } - - for (; i < len; i++) { - stack = compiler.nameLookup(stack, parts[i], type); - } - - if (requireTerminal) { - return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ')']; - } else { - return stack; - } - } - - exports['default'] = JavaScriptCompiler; - module.exports = exports['default']; - -/***/ }, -/* 32 */ -/***/ function(module, exports, __webpack_require__) { - - /* global define */ - 'use strict'; - - exports.__esModule = true; - - var _utils = __webpack_require__(5); - - var SourceNode = undefined; - - try { - /* istanbul ignore next */ - if (false) { - // We don't support this in AMD environments. For these environments, we asusme that - // they are running on the browser and thus have no need for the source-map library. - var SourceMap = require('source-map'); - SourceNode = SourceMap.SourceNode; - } - } catch (err) {} - /* NOP */ - - /* istanbul ignore if: tested but not covered in istanbul due to dist build */ - if (!SourceNode) { - SourceNode = function (line, column, srcFile, chunks) { - this.src = ''; - if (chunks) { - this.add(chunks); - } - }; - /* istanbul ignore next */ - SourceNode.prototype = { - add: function add(chunks) { - if (_utils.isArray(chunks)) { - chunks = chunks.join(''); - } - this.src += chunks; - }, - prepend: function prepend(chunks) { - if (_utils.isArray(chunks)) { - chunks = chunks.join(''); - } - this.src = chunks + this.src; - }, - toStringWithSourceMap: function toStringWithSourceMap() { - return { code: this.toString() }; - }, - toString: function toString() { - return this.src; - } - }; - } - - function castChunk(chunk, codeGen, loc) { - if (_utils.isArray(chunk)) { - var ret = []; - - for (var i = 0, len = chunk.length; i < len; i++) { - ret.push(codeGen.wrap(chunk[i], loc)); - } - return ret; - } else if (typeof chunk === 'boolean' || typeof chunk === 'number') { - // Handle primitives that the SourceNode will throw up on - return chunk + ''; - } - return chunk; - } - - function CodeGen(srcFile) { - this.srcFile = srcFile; - this.source = []; - } - - CodeGen.prototype = { - isEmpty: function isEmpty() { - return !this.source.length; - }, - prepend: function prepend(source, loc) { - this.source.unshift(this.wrap(source, loc)); - }, - push: function push(source, loc) { - this.source.push(this.wrap(source, loc)); - }, - - merge: function merge() { - var source = this.empty(); - this.each(function (line) { - source.add([' ', line, '\n']); - }); - return source; - }, - - each: function each(iter) { - for (var i = 0, len = this.source.length; i < len; i++) { - iter(this.source[i]); - } - }, - - empty: function empty() { - var loc = this.currentLocation || { start: {} }; - return new SourceNode(loc.start.line, loc.start.column, this.srcFile); - }, - wrap: function wrap(chunk) { - var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1]; - - if (chunk instanceof SourceNode) { - return chunk; - } - - chunk = castChunk(chunk, this, loc); - - return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk); - }, - - functionCall: function functionCall(fn, type, params) { - params = this.generateList(params); - return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']); - }, - - quotedString: function quotedString(str) { - return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4 - .replace(/\u2029/g, '\\u2029') + '"'; - }, - - objectLiteral: function objectLiteral(obj) { - var pairs = []; - - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - var value = castChunk(obj[key], this); - if (value !== 'undefined') { - pairs.push([this.quotedString(key), ':', value]); - } - } - } - - var ret = this.generateList(pairs); - ret.prepend('{'); - ret.add('}'); - return ret; - }, - - generateList: function generateList(entries) { - var ret = this.empty(); - - for (var i = 0, len = entries.length; i < len; i++) { - if (i) { - ret.add(','); - } - - ret.add(castChunk(entries[i], this)); - } - - return ret; - }, - - generateArray: function generateArray(entries) { - var ret = this.generateList(entries); - ret.prepend('['); - ret.add(']'); - - return ret; - } - }; - - exports['default'] = CodeGen; - module.exports = exports['default']; - -/***/ } -/******/ ]) -}); -; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.min.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.min.js deleted file mode 100644 index cfcd63e95..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.min.js +++ /dev/null @@ -1,81 +0,0 @@ -/**! - - @license - handlebars v4.0.6 - -Copyright (C) 2011-2016 by Yehuda Katz - -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. - -*/ -/**! - - @license - handlebars v4.0.6 - -Copyright (C) 2011-2016 by Yehuda Katz - -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. - -*/ -/**! - - @license - handlebars v4.0.6 - -Copyright (C) 2011-2016 by Yehuda Katz - -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. - -*/ -!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=r();return a.compile=function(b,c){return k.compile(b,c,a)},a.precompile=function(b,c){return k.precompile(b,c,a)},a.AST=i["default"],a.Compiler=k.Compiler,a.JavaScriptCompiler=m["default"],a.Parser=j.parser,a.parse=j.parse,a}var e=c(1)["default"];b.__esModule=!0;var f=c(2),g=e(f),h=c(24),i=e(h),j=c(25),k=c(30),l=c(31),m=e(l),n=c(28),o=e(n),p=c(23),q=e(p),r=g["default"].create,s=d();s.create=d,q["default"](s),s.Visitor=o["default"],s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(3)["default"],f=c(1)["default"];b.__esModule=!0;var g=c(4),h=e(g),i=c(21),j=f(i),k=c(6),l=f(k),m=c(5),n=e(m),o=c(22),p=e(o),q=c(23),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(1)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(5),g=c(6),h=e(g),i=c(10),j=c(18),k=c(20),l=e(k),m="4.0.5";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b":">",'"':""","'":"'","`":"`","=":"="},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(1)["default"];b.__esModule=!0;var e=c(5),f=c(6),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f2&&v.push("'"+this.terminals_[s]+"'");x=this.lexer.showPosition?"Parse error on line "+(i+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+v.join(", ")+", got '"+(this.terminals_[n]||n)+"'":"Parse error on line "+(i+1)+": Unexpected "+(1==n?"end of input":"'"+(this.terminals_[n]||n)+"'"),this.parseError(x,{text:this.lexer.match,token:this.terminals_[n]||n,line:this.lexer.yylineno,loc:l,expected:v})}}if(q[0]instanceof Array&&q.length>1)throw new Error("Parse Error: multiple actions possible at state: "+p+", token: "+n);switch(q[0]){case 1:d.push(n),e.push(this.lexer.yytext),f.push(this.lexer.yylloc),d.push(q[1]),n=null,o?(n=o,o=null):(j=this.lexer.yyleng,h=this.lexer.yytext,i=this.lexer.yylineno,l=this.lexer.yylloc,k>0&&k--);break;case 2:if(t=this.productions_[q[1]][1],w.$=e[e.length-t],w._$={first_line:f[f.length-(t||1)].first_line,last_line:f[f.length-1].last_line,first_column:f[f.length-(t||1)].first_column,last_column:f[f.length-1].last_column},m&&(w._$.range=[f[f.length-(t||1)].range[0],f[f.length-1].range[1]]),r=this.performAction.call(w,h,j,i,this.yy,q[1],e,f),"undefined"!=typeof r)return r;t&&(d=d.slice(0,-1*t*2),e=e.slice(0,-1*t),f=f.slice(0,-1*t)),d.push(this.productions_[q[1]][0]),e.push(w.$),f.push(w._$),u=g[d[d.length-2]][d[d.length-1]],d.push(u);break;case 3:return!0}}return!0}},c=function(){var a={EOF:1,parseError:function(a,b){if(!this.yy.parser)throw new Error(a);this.yy.parser.parseError(a,b)},setInput:function(a){return this._input=a,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var a=this._input[0];this.yytext+=a,this.yyleng++,this.offset++,this.match+=a,this.matched+=a;var b=a.match(/(?:\r\n?|\n).*/g);return b?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),a},unput:function(a){var b=a.length,c=a.split(/(?:\r\n?|\n)/g);this._input=a+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-b-1),this.offset-=b;var d=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),c.length-1&&(this.yylineno-=c.length-1);var e=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:c?(c.length===d.length?this.yylloc.first_column:0)+d[d.length-c.length].length-c[0].length:this.yylloc.first_column-b},this.options.ranges&&(this.yylloc.range=[e[0],e[0]+this.yyleng-b]),this},more:function(){return this._more=!0,this},less:function(a){this.unput(this.match.slice(a))},pastInput:function(){var a=this.matched.substr(0,this.matched.length-this.match.length);return(a.length>20?"...":"")+a.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var a=this.match;return a.length<20&&(a+=this._input.substr(0,20-a.length)),(a.substr(0,20)+(a.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var a=this.pastInput(),b=new Array(a.length+1).join("-");return a+this.upcomingInput()+"\n"+b+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var a,b,c,d,e;this._more||(this.yytext="",this.match="");for(var f=this._currentRules(),g=0;gb[0].length)||(b=c,d=g,this.options.flex));g++);return b?(e=b[0].match(/(?:\r\n?|\n).*/g),e&&(this.yylineno+=e.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:e?e[e.length-1].length-e[e.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+b[0].length},this.yytext+=b[0],this.match+=b[0],this.matches=b,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._input=this._input.slice(b[0].length),this.matched+=b[0],a=this.performAction.call(this,this.yy,this,f[d],this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),a?a:void 0):""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var a=this.next();return"undefined"!=typeof a?a:this.lex()},begin:function(a){this.conditionStack.push(a)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(a){this.begin(a)}};return a.options={},a.performAction=function(a,b,c,d){function e(a,c){return b.yytext=b.yytext.substr(a,b.yyleng-c)}switch(c){case 0:if("\\\\"===b.yytext.slice(-2)?(e(0,1),this.begin("mu")):"\\"===b.yytext.slice(-1)?(e(0,1),this.begin("emu")):this.begin("mu"),b.yytext)return 15;break;case 1:return 15;case 2:return this.popState(),15;case 3:return this.begin("raw"),15;case 4:return this.popState(),"raw"===this.conditionStack[this.conditionStack.length-1]?15:(b.yytext=b.yytext.substr(5,b.yyleng-9),"END_RAW_BLOCK");case 5:return 15;case 6:return this.popState(),14;case 7:return 65;case 8:return 68;case 9:return 19;case 10:return this.popState(),this.begin("raw"),23;case 11:return 55;case 12:return 60;case 13:return 29;case 14:return 47;case 15:return this.popState(),44;case 16:return this.popState(),44;case 17:return 34;case 18:return 39;case 19:return 51;case 20:return 48;case 21:this.unput(b.yytext),this.popState(),this.begin("com");break;case 22:return this.popState(),14;case 23:return 48;case 24:return 73;case 25:return 72;case 26:return 72;case 27:return 87;case 28:break;case 29:return this.popState(),54;case 30:return this.popState(),33;case 31:return b.yytext=e(1,2).replace(/\\"/g,'"'),80;case 32:return b.yytext=e(1,2).replace(/\\'/g,"'"),80;case 33:return 85;case 34:return 82;case 35:return 82;case 36:return 83;case 37:return 84;case 38:return 81;case 39:return 75;case 40:return 77;case 41:return 72;case 42:return b.yytext=b.yytext.replace(/\\([\\\]])/g,"$1"),72;case 43:return"INVALID";case 44:return 5}},a.rules=[/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/],a.conditions={mu:{rules:[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!1},emu:{rules:[2],inclusive:!1},com:{rules:[6],inclusive:!1},raw:{rules:[3,4,5],inclusive:!1},INITIAL:{rules:[0,1,44],inclusive:!0}},a}();return b.lexer=c,a.prototype=b,b.Parser=a,new a}();b.__esModule=!0,b["default"]=c},function(a,b,c){"use strict";function d(){var a=arguments.length<=0||void 0===arguments[0]?{}:arguments[0];this.options=a}function e(a,b,c){void 0===b&&(b=a.length);var d=a[b-1],e=a[b-2];return d?"ContentStatement"===d.type?(e||!c?/\r?\n\s*?$/:/(^|\r?\n)\s*?$/).test(d.original):void 0:c}function f(a,b,c){void 0===b&&(b=-1);var d=a[b+1],e=a[b+2];return d?"ContentStatement"===d.type?(e||!c?/^\s*?\r?\n/:/^\s*?(\r?\n|$)/).test(d.original):void 0:c}function g(a,b,c){var d=a[null==b?0:b+1];if(d&&"ContentStatement"===d.type&&(c||!d.rightStripped)){var e=d.value;d.value=d.value.replace(c?/^\s+/:/^[ \t]*\r?\n?/,""),d.rightStripped=d.value!==e}}function h(a,b,c){var d=a[null==b?a.length-1:b-1];if(d&&"ContentStatement"===d.type&&(c||!d.leftStripped)){var e=d.value;return d.value=d.value.replace(c?/\s+$/:/[ \t]+$/,""),d.leftStripped=d.value!==e,d.leftStripped}}var i=c(1)["default"];b.__esModule=!0;var j=c(28),k=i(j);d.prototype=new k["default"],d.prototype.Program=function(a){var b=!this.options.ignoreStandalone,c=!this.isRootSeen;this.isRootSeen=!0;for(var d=a.body,i=0,j=d.length;i0)throw new q["default"]("Invalid path: "+d,{loc:c});".."===j&&(f++,g+="../")}}return{type:"PathExpression",data:a,depth:f,parts:e,original:d,loc:c}}function j(a,b,c,d,e,f){var g=d.charAt(3)||d.charAt(2),h="{"!==g&&"&"!==g,i=/\*/.test(d);return{type:i?"Decorator":"MustacheStatement",path:a,params:b,hash:c,escaped:h,strip:e,loc:this.locInfo(f)}}function k(a,b,c,e){d(a,c),e=this.locInfo(e);var f={type:"Program",body:b,strip:{},loc:e};return{type:"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:f,openStrip:{},inverseStrip:{},closeStrip:{},loc:e}}function l(a,b,c,e,f,g){e&&e.path&&d(a,e);var h=/\*/.test(a.open);b.blockParams=a.blockParams;var i=void 0,j=void 0;if(c){if(h)throw new q["default"]("Unexpected inverse block on decorator",c);c.chain&&(c.program.body[0].closeStrip=e.strip),j=c.strip,i=c.program}return f&&(f=i,i=b,b=f),{type:h?"DecoratorBlock":"BlockStatement",path:a.path,params:a.params,hash:a.hash,program:b,inverse:i,openStrip:a.strip,inverseStrip:j,closeStrip:e&&e.strip,loc:this.locInfo(g)}}function m(a,b){if(!b&&a.length){var c=a[0].loc,d=a[a.length-1].loc;c&&d&&(b={source:c.source,start:{line:c.start.line,column:c.start.column},end:{line:d.end.line,column:d.end.column}})}return{type:"Program",body:a,strip:{},loc:b}}function n(a,b,c,e){return d(a,c),{type:"PartialBlockStatement",name:a.path,params:a.params,hash:a.hash,program:b,openStrip:a.strip,closeStrip:c&&c.strip,loc:this.locInfo(e)}}var o=c(1)["default"];b.__esModule=!0,b.SourceLocation=e,b.id=f,b.stripFlags=g,b.stripComment=h,b.preparePath=i,b.prepareMustache=j,b.prepareRawBlock=k,b.prepareBlock=l,b.prepareProgram=m,b.preparePartialBlock=n;var p=c(6),q=o(p)},function(a,b,c){"use strict";function d(){}function e(a,b,c){if(null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.precompile. You passed "+a);b=b||{},"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var d=c.parse(a,b),e=(new c.Compiler).compile(d,b);return(new c.JavaScriptCompiler).compile(e,b)}function f(a,b,c){function d(){var d=c.parse(a,b),e=(new c.Compiler).compile(d,b),f=(new c.JavaScriptCompiler).compile(e,b,void 0,!0);return c.template(f)}function e(a,b){return f||(f=d()),f.call(this,a,b)}if(void 0===b&&(b={}),null==a||"string"!=typeof a&&"Program"!==a.type)throw new k["default"]("You must pass a string or Handlebars AST to Handlebars.compile. You passed "+a);"data"in b||(b.data=!0),b.compat&&(b.useDepths=!0);var f=void 0;return e._setup=function(a){return f||(f=d()),f._setup(a)},e._child=function(a,b,c,e){return f||(f=d()),f._child(a,b,c,e)},e}function g(a,b){if(a===b)return!0;if(l.isArray(a)&&l.isArray(b)&&a.length===b.length){for(var c=0;c1)throw new k["default"]("Unsupported number of partial arguments: "+c.length,a);c.length||(this.options.explicitPartialContext?this.opcode("pushLiteral","undefined"):c.push({type:"PathExpression",parts:[],depth:0}));var d=a.name.original,e="SubExpression"===a.name.type;e&&this.accept(a.name),this.setupFullMustacheParams(a,b,void 0,!0);var f=a.indent||"";this.options.preventIndent&&f&&(this.opcode("appendContent",f),f=""),this.opcode("invokePartial",e,d,f),this.opcode("append")},PartialBlockStatement:function(a){this.PartialStatement(a)},MustacheStatement:function(a){this.SubExpression(a),a.escaped&&!this.options.noEscape?this.opcode("appendEscaped"):this.opcode("append")},Decorator:function(a){this.DecoratorBlock(a)},ContentStatement:function(a){a.value&&this.opcode("appendContent",a.value)},CommentStatement:function(){},SubExpression:function(a){h(a);var b=this.classifySexpr(a);"simple"===b?this.simpleSexpr(a):"helper"===b?this.helperSexpr(a):this.ambiguousSexpr(a)},ambiguousSexpr:function(a,b,c){var d=a.path,e=d.parts[0],f=null!=b||null!=c;this.opcode("getContext",d.depth),this.opcode("pushProgram",b),this.opcode("pushProgram",c),d.strict=!0,this.accept(d),this.opcode("invokeAmbiguous",e,f)},simpleSexpr:function(a){var b=a.path;b.strict=!0,this.accept(b),this.opcode("resolvePossibleLambda")},helperSexpr:function(a,b,c){var d=this.setupFullMustacheParams(a,b,c),e=a.path,f=e.parts[0];if(this.options.knownHelpers[f])this.opcode("invokeKnownHelper",d.length,f);else{if(this.options.knownHelpersOnly)throw new k["default"]("You specified knownHelpersOnly, but used the unknown helper "+f,a);e.strict=!0,e.falsy=!0,this.accept(e),this.opcode("invokeHelper",d.length,e.original,n["default"].helpers.simpleId(e))}},PathExpression:function(a){this.addDepth(a.depth),this.opcode("getContext",a.depth);var b=a.parts[0],c=n["default"].helpers.scopedId(a),d=!a.depth&&!c&&this.blockParamIndex(b);d?this.opcode("lookupBlockParam",d,a.parts):b?a.data?(this.options.data=!0,this.opcode("lookupData",a.depth,a.parts,a.strict)):this.opcode("lookupOnContext",a.parts,a.falsy,a.strict,c):this.opcode("pushContext")},StringLiteral:function(a){this.opcode("pushString",a.value)},NumberLiteral:function(a){this.opcode("pushLiteral",a.value)},BooleanLiteral:function(a){this.opcode("pushLiteral",a.value)},UndefinedLiteral:function(){this.opcode("pushLiteral","undefined")},NullLiteral:function(){this.opcode("pushLiteral","null")},Hash:function(a){var b=a.pairs,c=0,d=b.length;for(this.opcode("pushHash");c=0)return[b,e]}}}},function(a,b,c){"use strict";function d(a){this.value=a}function e(){}function f(a,b,c,d){var e=b.popStack(),f=0,g=c.length;for(a&&g--;f0&&(b+=", "+c.join(", "));var d=0;for(var e in this.aliases){var f=this.aliases[e];this.aliases.hasOwnProperty(e)&&f.children&&f.referenceCount>1&&(b+=", alias"+ ++d+"="+e,f.children[0]="alias"+d)}var g=["container","depth0","helpers","partials","data"];(this.useBlockParams||this.useDepths)&&g.push("blockParams"),this.useDepths&&g.push("depths");var h=this.mergeSource(b);return a?(g.push(h),Function.apply(this,g)):this.source.wrap(["function(",g.join(","),") {\n ",h,"}"])},mergeSource:function(a){var b=this.environment.isSimple,c=!this.forceBuffer,d=void 0,e=void 0,f=void 0,g=void 0;return this.source.each(function(a){a.appendToBuffer?(f?a.prepend(" + "):f=a,g=a):(f&&(e?f.prepend("buffer += "):d=!0,g.add(";"),f=g=void 0),e=!0,b||(c=!1))}),c?f?(f.prepend("return "),g.add(";")):e||this.source.push('return "";'):(a+=", buffer = "+(d?"":this.initializeBuffer()),f?(f.prepend("return buffer + "),g.add(";")):this.source.push("return buffer;")),a&&this.source.prepend("var "+a.substring(2)+(d?"":";\n")),this.source.merge()},blockValue:function(a){var b=this.aliasable("helpers.blockHelperMissing"),c=[this.contextName(0)];this.setupHelperArgs(a,0,c);var d=this.popStack();c.splice(1,0,d),this.push(this.source.functionCall(b,"call",c))},ambiguousBlockValue:function(){var a=this.aliasable("helpers.blockHelperMissing"),b=[this.contextName(0)];this.setupHelperArgs("",0,b,!0),this.flushInline();var c=this.topStack();b.splice(1,0,c),this.pushSource(["if (!",this.lastHelper,") { ",c," = ",this.source.functionCall(a,"call",b),"}"])},appendContent:function(a){this.pendingContent?a=this.pendingContent+a:this.pendingLocation=this.source.currentLocation,this.pendingContent=a},append:function(){if(this.isInline())this.replaceStack(function(a){return[" != null ? ",a,' : ""']}),this.pushSource(this.appendToBuffer(this.popStack()));else{var a=this.popStack();this.pushSource(["if (",a," != null) { ",this.appendToBuffer(a,void 0,!0)," }"]),this.environment.isSimple&&this.pushSource(["else { ",this.appendToBuffer("''",void 0,!0)," }"])}},appendEscaped:function(){this.pushSource(this.appendToBuffer([this.aliasable("container.escapeExpression"),"(",this.popStack(),")"]))},getContext:function(a){this.lastContext=a},pushContext:function(){this.pushStackLiteral(this.contextName(this.lastContext))},lookupOnContext:function(a,b,c,d){var e=0;d||!this.options.compat||this.lastContext?this.pushContext():this.push(this.depthedLookup(a[e++])),this.resolvePath("context",a,e,b,c)},lookupBlockParam:function(a,b){this.useBlockParams=!0,this.push(["blockParams[",a[0],"][",a[1],"]"]),this.resolvePath("context",b,1)},lookupData:function(a,b,c){a?this.pushStackLiteral("container.data(data, "+a+")"):this.pushStackLiteral("data"),this.resolvePath("data",b,0,!0,c)},resolvePath:function(a,b,c,d,e){var g=this;if(this.options.strict||this.options.assumeObjects)return void this.push(f(this.options.strict&&e,this,b,a));for(var h=b.length;cthis.stackVars.length&&this.stackVars.push("stack"+this.stackSlot),this.topStackName()},topStackName:function(){return"stack"+this.stackSlot},flushInline:function(){var a=this.inlineStack;this.inlineStack=[];for(var b=0,c=a.length;b': '>', - '"': '"', - "'": ''', - '`': '`', - '=': '=' - }; - - var badChars = /[&<>"'`=]/g, - possible = /[&<>"'`=]/; - - function escapeChar(chr) { - return escape[chr]; - } - - function extend(obj /* , ...source */) { - for (var i = 1; i < arguments.length; i++) { - for (var key in arguments[i]) { - if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { - obj[key] = arguments[i][key]; - } - } - } - - return obj; - } - - var toString = Object.prototype.toString; - - exports.toString = toString; - // Sourced from lodash - // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt - /* eslint-disable func-style */ - var isFunction = function isFunction(value) { - return typeof value === 'function'; - }; - // fallback for older versions of Chrome and Safari - /* istanbul ignore next */ - if (isFunction(/x/)) { - exports.isFunction = isFunction = function (value) { - return typeof value === 'function' && toString.call(value) === '[object Function]'; - }; - } - exports.isFunction = isFunction; - - /* eslint-enable func-style */ - - /* istanbul ignore next */ - var isArray = Array.isArray || function (value) { - return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; - }; - - exports.isArray = isArray; - // Older IE versions do not directly support indexOf so we must implement our own, sadly. - - function indexOf(array, value) { - for (var i = 0, len = array.length; i < len; i++) { - if (array[i] === value) { - return i; - } - } - return -1; - } - - function escapeExpression(string) { - if (typeof string !== 'string') { - // don't escape SafeStrings, since they're already safe - if (string && string.toHTML) { - return string.toHTML(); - } else if (string == null) { - return ''; - } else if (!string) { - return string + ''; - } - - // Force a string conversion as this will be done by the append regardless and - // the regex test will do this transparently behind the scenes, causing issues if - // an object's to string has escaped characters in it. - string = '' + string; - } - - if (!possible.test(string)) { - return string; - } - return string.replace(badChars, escapeChar); - } - - function isEmpty(value) { - if (!value && value !== 0) { - return true; - } else if (isArray(value) && value.length === 0) { - return true; - } else { - return false; - } - } - - function createFrame(object) { - var frame = extend({}, object); - frame._parent = object; - return frame; - } - - function blockParams(params, ids) { - params.path = ids; - return params; - } - - function appendContextPath(contextPath, id) { - return (contextPath ? contextPath + '.' : '') + id; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsTUFBTSxNQUFNLEdBQUc7QUFDYixPQUFHLEVBQUUsT0FBTztBQUNaLE9BQUcsRUFBRSxNQUFNO0FBQ1gsT0FBRyxFQUFFLE1BQU07QUFDWCxPQUFHLEVBQUUsUUFBUTtBQUNiLE9BQUcsRUFBRSxRQUFRO0FBQ2IsT0FBRyxFQUFFLFFBQVE7QUFDYixPQUFHLEVBQUUsUUFBUTtHQUNkLENBQUM7O0FBRUYsTUFBTSxRQUFRLEdBQUcsWUFBWTtNQUN2QixRQUFRLEdBQUcsV0FBVyxDQUFDOztBQUU3QixXQUFTLFVBQVUsQ0FBQyxHQUFHLEVBQUU7QUFDdkIsV0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7R0FDcEI7O0FBRU0sV0FBUyxNQUFNLENBQUMsR0FBRyxvQkFBbUI7QUFDM0MsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsV0FBSyxJQUFJLEdBQUcsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDNUIsWUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzNELGFBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7T0FDRjtLQUNGOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1o7O0FBRU0sTUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7Ozs7OztBQUtoRCxNQUFJLFVBQVUsR0FBRyxvQkFBUyxLQUFLLEVBQUU7QUFDL0IsV0FBTyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUM7R0FDcEMsQ0FBQzs7O0FBR0YsTUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbkIsWUFJTSxVQUFVLEdBSmhCLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRTtBQUMzQixhQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUFDO0tBQ3BGLENBQUM7R0FDSDtVQUNPLFVBQVUsR0FBVixVQUFVOzs7OztBQUlYLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksVUFBUyxLQUFLLEVBQUU7QUFDdEQsV0FBTyxBQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEdBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7R0FDakcsQ0FBQzs7Ozs7QUFHSyxXQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ3BDLFNBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEQsVUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO0FBQ3RCLGVBQU8sQ0FBQyxDQUFDO09BQ1Y7S0FDRjtBQUNELFdBQU8sQ0FBQyxDQUFDLENBQUM7R0FDWDs7QUFHTSxXQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtBQUN2QyxRQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTs7QUFFOUIsVUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUMzQixlQUFPLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztPQUN4QixNQUFNLElBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUN6QixlQUFPLEVBQUUsQ0FBQztPQUNYLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNsQixlQUFPLE1BQU0sR0FBRyxFQUFFLENBQUM7T0FDcEI7Ozs7O0FBS0QsWUFBTSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7S0FDdEI7O0FBRUQsUUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFBRSxhQUFPLE1BQU0sQ0FBQztLQUFFO0FBQzlDLFdBQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7R0FDN0M7O0FBRU0sV0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFO0FBQzdCLFFBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRTtBQUN6QixhQUFPLElBQUksQ0FBQztLQUNiLE1BQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDL0MsYUFBTyxJQUFJLENBQUM7S0FDYixNQUFNO0FBQ0wsYUFBTyxLQUFLLENBQUM7S0FDZDtHQUNGOztBQUVNLFdBQVMsV0FBVyxDQUFDLE1BQU0sRUFBRTtBQUNsQyxRQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLFNBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3ZCLFdBQU8sS0FBSyxDQUFDO0dBQ2Q7O0FBRU0sV0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtBQUN2QyxVQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUNsQixXQUFPLE1BQU0sQ0FBQztHQUNmOztBQUVNLFdBQVMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRTtBQUNqRCxXQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFBLEdBQUksRUFBRSxDQUFDO0dBQ3BEIiwiZmlsZSI6InV0aWxzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZXNjYXBlID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgJ2AnOiAnJiN4NjA7JyxcbiAgJz0nOiAnJiN4M0Q7J1xufTtcblxuY29uc3QgYmFkQ2hhcnMgPSAvWyY8PlwiJ2A9XS9nLFxuICAgICAgcG9zc2libGUgPSAvWyY8PlwiJ2A9XS87XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXIoY2hyKSB7XG4gIHJldHVybiBlc2NhcGVbY2hyXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChvYmovKiAsIC4uLnNvdXJjZSAqLykge1xuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGtleSBpbiBhcmd1bWVudHNbaV0pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW2ldLCBrZXkpKSB7XG4gICAgICAgIG9ialtrZXldID0gYXJndW1lbnRzW2ldW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZXhwb3J0IGxldCB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIFNvdXJjZWQgZnJvbSBsb2Rhc2hcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9sb2Rhc2gvYmxvYi9tYXN0ZXIvTElDRU5TRS50eHRcbi8qIGVzbGludC1kaXNhYmxlIGZ1bmMtc3R5bGUgKi9cbmxldCBpc0Z1bmN0aW9uID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn07XG4vLyBmYWxsYmFjayBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmlcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAoaXNGdW5jdGlvbigveC8pKSB7XG4gIGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4gIH07XG59XG5leHBvcnQge2lzRnVuY3Rpb259O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSA/IHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nIDogZmFsc2U7XG59O1xuXG4vLyBPbGRlciBJRSB2ZXJzaW9ucyBkbyBub3QgZGlyZWN0bHkgc3VwcG9ydCBpbmRleE9mIHNvIHdlIG11c3QgaW1wbGVtZW50IG91ciBvd24sIHNhZGx5LlxuZXhwb3J0IGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlKSB7XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnJheS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChhcnJheVtpXSA9PT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUV4cHJlc3Npb24oc3RyaW5nKSB7XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIC8vIGRvbid0IGVzY2FwZSBTYWZlU3RyaW5ncywgc2luY2UgdGhleSdyZSBhbHJlYWR5IHNhZmVcbiAgICBpZiAoc3RyaW5nICYmIHN0cmluZy50b0hUTUwpIHtcbiAgICAgIHJldHVybiBzdHJpbmcudG9IVE1MKCk7XG4gICAgfSBlbHNlIGlmIChzdHJpbmcgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSBpZiAoIXN0cmluZykge1xuICAgICAgcmV0dXJuIHN0cmluZyArICcnO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIGEgc3RyaW5nIGNvbnZlcnNpb24gYXMgdGhpcyB3aWxsIGJlIGRvbmUgYnkgdGhlIGFwcGVuZCByZWdhcmRsZXNzIGFuZFxuICAgIC8vIHRoZSByZWdleCB0ZXN0IHdpbGwgZG8gdGhpcyB0cmFuc3BhcmVudGx5IGJlaGluZCB0aGUgc2NlbmVzLCBjYXVzaW5nIGlzc3VlcyBpZlxuICAgIC8vIGFuIG9iamVjdCdzIHRvIHN0cmluZyBoYXMgZXNjYXBlZCBjaGFyYWN0ZXJzIGluIGl0LlxuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nO1xuICB9XG5cbiAgaWYgKCFwb3NzaWJsZS50ZXN0KHN0cmluZykpIHsgcmV0dXJuIHN0cmluZzsgfVxuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoYmFkQ2hhcnMsIGVzY2FwZUNoYXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGcmFtZShvYmplY3QpIHtcbiAgbGV0IGZyYW1lID0gZXh0ZW5kKHt9LCBvYmplY3QpO1xuICBmcmFtZS5fcGFyZW50ID0gb2JqZWN0O1xuICByZXR1cm4gZnJhbWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBibG9ja1BhcmFtcyhwYXJhbXMsIGlkcykge1xuICBwYXJhbXMucGF0aCA9IGlkcztcbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGVuZENvbnRleHRQYXRoKGNvbnRleHRQYXRoLCBpZCkge1xuICByZXR1cm4gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggKyAnLicgOiAnJykgKyBpZDtcbn1cbiJdfQ== -; -define('handlebars/exception',['exports', 'module'], function (exports, module) { - 'use strict'; - - var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; - - function Exception(message, node) { - var loc = node && node.loc, - line = undefined, - column = undefined; - if (loc) { - line = loc.start.line; - column = loc.start.column; - - message += ' - ' + line + ':' + column; - } - - var tmp = Error.prototype.constructor.call(this, message); - - // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. - for (var idx = 0; idx < errorProps.length; idx++) { - this[errorProps[idx]] = tmp[errorProps[idx]]; - } - - /* istanbul ignore else */ - if (Error.captureStackTrace) { - Error.captureStackTrace(this, Exception); - } - - try { - if (loc) { - this.lineNumber = line; - - // Work around issue under safari where we can't directly set the column value - /* istanbul ignore next */ - if (Object.defineProperty) { - Object.defineProperty(this, 'column', { value: column }); - } else { - this.column = column; - } - } - } catch (nop) { - /* Ignore if the browser is very particular */ - } - } - - Exception.prototype = new Error(); - - module.exports = Exception; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxNQUFNLFVBQVUsR0FBRyxDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDOztBQUVuRyxXQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQ2hDLFFBQUksR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLENBQUMsR0FBRztRQUN0QixJQUFJLFlBQUE7UUFDSixNQUFNLFlBQUEsQ0FBQztBQUNYLFFBQUksR0FBRyxFQUFFO0FBQ1AsVUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ3RCLFlBQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQzs7QUFFMUIsYUFBTyxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztLQUN4Qzs7QUFFRCxRQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDOzs7QUFHMUQsU0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7QUFDaEQsVUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztLQUM5Qzs7O0FBR0QsUUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7QUFDM0IsV0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztLQUMxQzs7QUFFRCxRQUFJO0FBQ0YsVUFBSSxHQUFHLEVBQUU7QUFDUCxZQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzs7OztBQUl2QixZQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUU7QUFDekIsZ0JBQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1NBQ3hELE1BQU07QUFDTCxjQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztTQUN0QjtPQUNGO0tBQ0YsQ0FBQyxPQUFPLEdBQUcsRUFBRTs7S0FFYjtHQUNGOztBQUVELFdBQVMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQzs7bUJBRW5CLFNBQVMiLCJmaWxlIjoiZXhjZXB0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiXG5jb25zdCBlcnJvclByb3BzID0gWydkZXNjcmlwdGlvbicsICdmaWxlTmFtZScsICdsaW5lTnVtYmVyJywgJ21lc3NhZ2UnLCAnbmFtZScsICdudW1iZXInLCAnc3RhY2snXTtcblxuZnVuY3Rpb24gRXhjZXB0aW9uKG1lc3NhZ2UsIG5vZGUpIHtcbiAgbGV0IGxvYyA9IG5vZGUgJiYgbm9kZS5sb2MsXG4gICAgICBsaW5lLFxuICAgICAgY29sdW1uO1xuICBpZiAobG9jKSB7XG4gICAgbGluZSA9IGxvYy5zdGFydC5saW5lO1xuICAgIGNvbHVtbiA9IGxvYy5zdGFydC5jb2x1bW47XG5cbiAgICBtZXNzYWdlICs9ICcgLSAnICsgbGluZSArICc6JyArIGNvbHVtbjtcbiAgfVxuXG4gIGxldCB0bXAgPSBFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICAvLyBVbmZvcnR1bmF0ZWx5IGVycm9ycyBhcmUgbm90IGVudW1lcmFibGUgaW4gQ2hyb21lIChhdCBsZWFzdCksIHNvIGBmb3IgcHJvcCBpbiB0bXBgIGRvZXNuJ3Qgd29yay5cbiAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgZXJyb3JQcm9wcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdGhpc1tlcnJvclByb3BzW2lkeF1dID0gdG1wW2Vycm9yUHJvcHNbaWR4XV07XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBFeGNlcHRpb24pO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAobG9jKSB7XG4gICAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lO1xuXG4gICAgICAvLyBXb3JrIGFyb3VuZCBpc3N1ZSB1bmRlciBzYWZhcmkgd2hlcmUgd2UgY2FuJ3QgZGlyZWN0bHkgc2V0IHRoZSBjb2x1bW4gdmFsdWVcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29sdW1uJywge3ZhbHVlOiBjb2x1bW59KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAobm9wKSB7XG4gICAgLyogSWdub3JlIGlmIHRoZSBicm93c2VyIGlzIHZlcnkgcGFydGljdWxhciAqL1xuICB9XG59XG5cbkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblxuZXhwb3J0IGRlZmF1bHQgRXhjZXB0aW9uO1xuIl19 -; -define('handlebars/helpers/block-helper-missing',['exports', 'module', '../utils'], function (exports, module, _utils) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('blockHelperMissing', function (context, options) { - var inverse = options.inverse, - fn = options.fn; - - if (context === true) { - return fn(this); - } else if (context === false || context == null) { - return inverse(this); - } else if (_utils.isArray(context)) { - if (context.length > 0) { - if (options.ids) { - options.ids = [options.name]; - } - - return instance.helpers.each(context, options); - } else { - return inverse(this); - } - } else { - if (options.data && options.ids) { - var data = _utils.createFrame(options.data); - data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name); - options = { data: data }; - } - - return fn(context, options); - } - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFVBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1VBQ3pCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVwQixVQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsZUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QixNQUFNLElBQUksT0FYeUIsT0FBTyxDQVd4QixPQUFPLENBQUMsRUFBRTtBQUMzQixZQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLGNBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLG1CQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1dBQzlCOztBQUVELGlCQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNoRCxNQUFNO0FBQ0wsaUJBQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3RCO09BQ0YsTUFBTTtBQUNMLFlBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQy9CLGNBQUksSUFBSSxHQUFHLE9BdkJRLFdBQVcsQ0F1QlAsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLGNBQUksQ0FBQyxXQUFXLEdBQUcsT0F4Qm5CLGlCQUFpQixDQXdCb0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdFLGlCQUFPLEdBQUcsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFDLENBQUM7U0FDeEI7O0FBRUQsZUFBTyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQzdCO0tBQ0YsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiYmxvY2staGVscGVyLW1pc3NpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheX0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignYmxvY2tIZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGxldCBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgICBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoY29udGV4dCA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIGZuKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoY29udGV4dCA9PT0gZmFsc2UgfHwgY29udGV4dCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkoY29udGV4dCkpIHtcbiAgICAgIGlmIChjb250ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgICAgb3B0aW9ucy5pZHMgPSBbb3B0aW9ucy5uYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzLmVhY2goY29udGV4dCwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBsZXQgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBhcHBlbmRDb250ZXh0UGF0aChvcHRpb25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMubmFtZSk7XG4gICAgICAgIG9wdGlvbnMgPSB7ZGF0YTogZGF0YX07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCBvcHRpb25zKTtcbiAgICB9XG4gIH0pO1xufVxuIl19 -; -define('handlebars/helpers/each',['exports', 'module', '../utils', '../exception'], function (exports, module, _utils, _exception) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - module.exports = function (instance) { - instance.registerHelper('each', function (context, options) { - if (!options) { - throw new _Exception['default']('Must pass iterator to #each'); - } - - var fn = options.fn, - inverse = options.inverse, - i = 0, - ret = '', - data = undefined, - contextPath = undefined; - - if (options.data && options.ids) { - contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; - } - - if (_utils.isFunction(context)) { - context = context.call(this); - } - - if (options.data) { - data = _utils.createFrame(options.data); - } - - function execIteration(field, index, last) { - if (data) { - data.key = field; - data.index = index; - data.first = index === 0; - data.last = !!last; - - if (contextPath) { - data.contextPath = contextPath + field; - } - } - - ret = ret + fn(context[field], { - data: data, - blockParams: _utils.blockParams([context[field], field], [contextPath + field, null]) - }); - } - - if (context && typeof context === 'object') { - if (_utils.isArray(context)) { - for (var j = context.length; i < j; i++) { - if (i in context) { - execIteration(i, i, i === context.length - 1); - } - } - } else { - var priorKey = undefined; - - for (var key in context) { - if (context.hasOwnProperty(key)) { - // We're running the iterations one step out of sync so we can detect - // the last iteration without have to scan the object twice and create - // an itermediate keys array. - if (priorKey !== undefined) { - execIteration(priorKey, i - 1); - } - priorKey = key; - i++; - } - } - if (priorKey !== undefined) { - execIteration(priorKey, i - 1, true); - } - } - } - - if (i === 0) { - ret = inverse(this); - } - - return ret; - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7bUJBR2UsVUFBUyxRQUFRLEVBQUU7QUFDaEMsWUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFVBQUksQ0FBQyxPQUFPLEVBQUU7QUFDWixjQUFNLDBCQUFjLDZCQUE2QixDQUFDLENBQUM7T0FDcEQ7O0FBRUQsVUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUU7VUFDZixPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU87VUFDekIsQ0FBQyxHQUFHLENBQUM7VUFDTCxHQUFHLEdBQUcsRUFBRTtVQUNSLElBQUksWUFBQTtVQUNKLFdBQVcsWUFBQSxDQUFDOztBQUVoQixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixtQkFBVyxHQUFHLE9BakJaLGlCQUFpQixDQWlCYSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO09BQ2pGOztBQUVELFVBQUksT0FwQnNELFVBQVUsQ0FvQnJELE9BQU8sQ0FBQyxFQUFFO0FBQUUsZUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7T0FBRTs7QUFFMUQsVUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ2hCLFlBQUksR0FBRyxPQXZCMkIsV0FBVyxDQXVCMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ2xDOztBQUVELGVBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFlBQUksSUFBSSxFQUFFO0FBQ1IsY0FBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsY0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsY0FBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLGNBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsY0FBSSxXQUFXLEVBQUU7QUFDZixnQkFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEdBQUcsS0FBSyxDQUFDO1dBQ3hDO1NBQ0Y7O0FBRUQsV0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzdCLGNBQUksRUFBRSxJQUFJO0FBQ1YscUJBQVcsRUFBRSxPQXhDTSxXQUFXLENBd0NMLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxHQUFHLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztTQUMvRSxDQUFDLENBQUM7T0FDSjs7QUFFRCxVQUFJLE9BQU8sSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUU7QUFDMUMsWUFBSSxPQTdDMkMsT0FBTyxDQTZDMUMsT0FBTyxDQUFDLEVBQUU7QUFDcEIsZUFBSyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsZ0JBQUksQ0FBQyxJQUFJLE9BQU8sRUFBRTtBQUNoQiwyQkFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDL0M7V0FDRjtTQUNGLE1BQU07QUFDTCxjQUFJLFFBQVEsWUFBQSxDQUFDOztBQUViLGVBQUssSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFO0FBQ3ZCLGdCQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Ozs7QUFJL0Isa0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiw2QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7ZUFDaEM7QUFDRCxzQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGVBQUMsRUFBRSxDQUFDO2FBQ0w7V0FDRjtBQUNELGNBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQix5QkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1dBQ3RDO1NBQ0Y7T0FDRjs7QUFFRCxVQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxXQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQ3JCOztBQUVELGFBQU8sR0FBRyxDQUFDO0tBQ1osQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YXBwZW5kQ29udGV4dFBhdGgsIGJsb2NrUGFyYW1zLCBjcmVhdGVGcmFtZSwgaXNBcnJheSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICByZXQgPSAnJyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgY29udGV4dFBhdGg7XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5pZHNbMF0pICsgJy4nO1xuICAgIH1cblxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7IGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7IH1cblxuICAgIGlmIChvcHRpb25zLmRhdGEpIHtcbiAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmtleSA9IGZpZWxkO1xuICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgZGF0YS5sYXN0ID0gISFsYXN0O1xuXG4gICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dFtmaWVsZF0sIGZpZWxkXSwgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdKVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBpZiAoaSBpbiBjb250ZXh0KSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcHJpb3JLZXk7XG5cbiAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbnRleHQpIHtcbiAgICAgICAgICBpZiAoY29udGV4dC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIHRoZSBpdGVyYXRpb25zIG9uZSBzdGVwIG91dCBvZiBzeW5jIHNvIHdlIGNhbiBkZXRlY3RcbiAgICAgICAgICAgIC8vIHRoZSBsYXN0IGl0ZXJhdGlvbiB3aXRob3V0IGhhdmUgdG8gc2NhbiB0aGUgb2JqZWN0IHR3aWNlIGFuZCBjcmVhdGVcbiAgICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgICBpZiAocHJpb3JLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmlvcktleSA9IGtleTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ== -; -define('handlebars/helpers/helper-missing',['exports', 'module', '../exception'], function (exports, module, _exception) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - module.exports = function (instance) { - instance.registerHelper('helperMissing', function () /* [args, ]options */{ - if (arguments.length === 1) { - // A missing field in a {{foo}} construct. - return undefined; - } else { - // Someone is actually trying to call something, blow up. - throw new _Exception['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); - } - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLGlDQUFnQztBQUN2RSxVQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFOztBQUUxQixlQUFPLFNBQVMsQ0FBQztPQUNsQixNQUFNOztBQUVMLGNBQU0sMEJBQWMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO09BQ3ZGO0tBQ0YsQ0FBQyxDQUFDO0dBQ0oiLCJmaWxlIjoiaGVscGVyLW1pc3NpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdoZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24oLyogW2FyZ3MsIF1vcHRpb25zICovKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIEEgbWlzc2luZyBmaWVsZCBpbiBhIHt7Zm9vfX0gY29uc3RydWN0LlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU29tZW9uZSBpcyBhY3R1YWxseSB0cnlpbmcgdG8gY2FsbCBzb21ldGhpbmcsIGJsb3cgdXAuXG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ== -; -define('handlebars/helpers/if',['exports', 'module', '../utils'], function (exports, module, _utils) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('if', function (conditional, options) { - if (_utils.isFunction(conditional)) { - conditional = conditional.call(this); - } - - // Default behavior is to render the positive path if the value is truthy and not empty. - // The `includeZero` option may be set to treat the condtional as purely not empty based on the - // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. - if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - - instance.registerHelper('unless', function (conditional, options) { - return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash }); - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O21CQUVlLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxVQUFJLE9BSlMsVUFBVSxDQUlSLFdBQVcsQ0FBQyxFQUFFO0FBQUUsbUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQUU7Ozs7O0FBS3RFLFVBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLE9BVC9DLE9BQU8sQ0FTZ0QsV0FBVyxDQUFDLEVBQUU7QUFDdkUsZUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO09BQzlCLE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDekI7S0FDRixDQUFDLENBQUM7O0FBRUgsWUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELGFBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxFQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSSxFQUFDLENBQUMsQ0FBQztLQUN2SCxDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJpZi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aXNFbXB0eSwgaXNGdW5jdGlvbn0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaWYnLCBmdW5jdGlvbihjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChpc0Z1bmN0aW9uKGNvbmRpdGlvbmFsKSkgeyBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7IH1cblxuICAgIC8vIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gcmVuZGVyIHRoZSBwb3NpdGl2ZSBwYXRoIGlmIHRoZSB2YWx1ZSBpcyB0cnV0aHkgYW5kIG5vdCBlbXB0eS5cbiAgICAvLyBUaGUgYGluY2x1ZGVaZXJvYCBvcHRpb24gbWF5IGJlIHNldCB0byB0cmVhdCB0aGUgY29uZHRpb25hbCBhcyBwdXJlbHkgbm90IGVtcHR5IGJhc2VkIG9uIHRoZVxuICAgIC8vIGJlaGF2aW9yIG9mIGlzRW1wdHkuIEVmZmVjdGl2ZWx5IHRoaXMgZGV0ZXJtaW5lcyBpZiAwIGlzIGhhbmRsZWQgYnkgdGhlIHBvc2l0aXZlIHBhdGggb3IgbmVnYXRpdmUuXG4gICAgaWYgKCghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFjb25kaXRpb25hbCkgfHwgaXNFbXB0eShjb25kaXRpb25hbCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uKGNvbmRpdGlvbmFsLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnNbJ2lmJ10uY2FsbCh0aGlzLCBjb25kaXRpb25hbCwge2ZuOiBvcHRpb25zLmludmVyc2UsIGludmVyc2U6IG9wdGlvbnMuZm4sIGhhc2g6IG9wdGlvbnMuaGFzaH0pO1xuICB9KTtcbn1cbiJdfQ== -; -define('handlebars/helpers/log',['exports', 'module'], function (exports, module) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('log', function () /* message, options */{ - var args = [undefined], - options = arguments[arguments.length - 1]; - for (var i = 0; i < arguments.length - 1; i++) { - args.push(arguments[i]); - } - - var level = 1; - if (options.hash.level != null) { - level = options.hash.level; - } else if (options.data && options.data.level != null) { - level = options.data.level; - } - args[0] = level; - - instance.log.apply(instance, args); - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFBZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxrQ0FBaUM7QUFDOUQsVUFBSSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUM7VUFDbEIsT0FBTyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlDLFdBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3QyxZQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ3pCOztBQUVELFVBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNkLFVBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQzlCLGFBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztPQUM1QixNQUFNLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7QUFDckQsYUFBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO09BQzVCO0FBQ0QsVUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQzs7QUFFaEIsY0FBUSxDQUFDLEdBQUcsTUFBQSxDQUFaLFFBQVEsRUFBUyxJQUFJLENBQUMsQ0FBQztLQUN4QixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJsb2cuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9nJywgZnVuY3Rpb24oLyogbWVzc2FnZSwgb3B0aW9ucyAqLykge1xuICAgIGxldCBhcmdzID0gW3VuZGVmaW5lZF0sXG4gICAgICAgIG9wdGlvbnMgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgfVxuXG4gICAgbGV0IGxldmVsID0gMTtcbiAgICBpZiAob3B0aW9ucy5oYXNoLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5oYXNoLmxldmVsO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuZGF0YS5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuZGF0YS5sZXZlbDtcbiAgICB9XG4gICAgYXJnc1swXSA9IGxldmVsO1xuXG4gICAgaW5zdGFuY2UubG9nKC4uLiBhcmdzKTtcbiAgfSk7XG59XG4iXX0= -; -define('handlebars/helpers/lookup',['exports', 'module'], function (exports, module) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('lookup', function (obj, field) { - return obj && obj[field]; - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFBZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxVQUFTLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDckQsYUFBTyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzFCLENBQUMsQ0FBQztHQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkKSB7XG4gICAgcmV0dXJuIG9iaiAmJiBvYmpbZmllbGRdO1xuICB9KTtcbn1cbiJdfQ== -; -define('handlebars/helpers/with',['exports', 'module', '../utils'], function (exports, module, _utils) { - 'use strict'; - - module.exports = function (instance) { - instance.registerHelper('with', function (context, options) { - if (_utils.isFunction(context)) { - context = context.call(this); - } - - var fn = options.fn; - - if (!_utils.isEmpty(context)) { - var data = options.data; - if (options.data && options.ids) { - data = _utils.createFrame(options.data); - data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); - } - - return fn(context, { - data: data, - blockParams: _utils.blockParams([context], [data && data.contextPath]) - }); - } else { - return options.inverse(this); - } - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7bUJBRWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsWUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3pELFVBQUksT0FKc0QsVUFBVSxDQUlyRCxPQUFPLENBQUMsRUFBRTtBQUFFLGVBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO09BQUU7O0FBRTFELFVBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUM7O0FBRXBCLFVBQUksQ0FBQyxPQVI0QyxPQUFPLENBUTNDLE9BQU8sQ0FBQyxFQUFFO0FBQ3JCLFlBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsWUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsY0FBSSxHQUFHLE9BWHlCLFdBQVcsQ0FXeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLGNBQUksQ0FBQyxXQUFXLEdBQUcsT0FabkIsaUJBQWlCLENBWW9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoRjs7QUFFRCxlQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsY0FBSSxFQUFFLElBQUk7QUFDVixxQkFBVyxFQUFFLE9BakJNLFdBQVcsQ0FpQkwsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDaEUsQ0FBQyxDQUFDO09BQ0osTUFBTTtBQUNMLGVBQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUM5QjtLQUNGLENBQUMsQ0FBQztHQUNKIiwiZmlsZSI6IndpdGguanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2FwcGVuZENvbnRleHRQYXRoLCBibG9ja1BhcmFtcywgY3JlYXRlRnJhbWUsIGlzRW1wdHksIGlzRnVuY3Rpb259IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHsgY29udGV4dCA9IGNvbnRleHQuY2FsbCh0aGlzKTsgfVxuXG4gICAgbGV0IGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmICghaXNFbXB0eShjb250ZXh0KSkge1xuICAgICAgbGV0IGRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhbY29udGV4dF0sIFtkYXRhICYmIGRhdGEuY29udGV4dFBhdGhdKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ== -; -define('handlebars/helpers',['exports', './helpers/block-helper-missing', './helpers/each', './helpers/helper-missing', './helpers/if', './helpers/log', './helpers/lookup', './helpers/with'], function (exports, _helpersBlockHelperMissing, _helpersEach, _helpersHelperMissing, _helpersIf, _helpersLog, _helpersLookup, _helpersWith) { - 'use strict'; - - exports.__esModule = true; - exports.registerDefaultHelpers = registerDefaultHelpers; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _registerBlockHelperMissing = _interopRequireDefault(_helpersBlockHelperMissing); - - var _registerEach = _interopRequireDefault(_helpersEach); - - var _registerHelperMissing = _interopRequireDefault(_helpersHelperMissing); - - var _registerIf = _interopRequireDefault(_helpersIf); - - var _registerLog = _interopRequireDefault(_helpersLog); - - var _registerLookup = _interopRequireDefault(_helpersLookup); - - var _registerWith = _interopRequireDefault(_helpersWith); - - function registerDefaultHelpers(instance) { - _registerBlockHelperMissing['default'](instance); - _registerEach['default'](instance); - _registerHelperMissing['default'](instance); - _registerIf['default'](instance); - _registerLog['default'](instance); - _registerLookup['default'](instance); - _registerWith['default'](instance); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRTyxXQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQywyQ0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsNkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsc0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLDJCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDRCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLCtCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDZCQUFhLFFBQVEsQ0FBQyxDQUFDO0dBQ3hCIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2Jsb2NrLWhlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlckVhY2ggZnJvbSAnLi9oZWxwZXJzL2VhY2gnO1xuaW1wb3J0IHJlZ2lzdGVySGVscGVyTWlzc2luZyBmcm9tICcuL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcnO1xuaW1wb3J0IHJlZ2lzdGVySWYgZnJvbSAnLi9oZWxwZXJzL2lmJztcbmltcG9ydCByZWdpc3RlckxvZyBmcm9tICcuL2hlbHBlcnMvbG9nJztcbmltcG9ydCByZWdpc3Rlckxvb2t1cCBmcm9tICcuL2hlbHBlcnMvbG9va3VwJztcbmltcG9ydCByZWdpc3RlcldpdGggZnJvbSAnLi9oZWxwZXJzL3dpdGgnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0SGVscGVycyhpbnN0YW5jZSkge1xuICByZWdpc3RlckJsb2NrSGVscGVyTWlzc2luZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyRWFjaChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVySGVscGVyTWlzc2luZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVySWYoaW5zdGFuY2UpO1xuICByZWdpc3RlckxvZyhpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyTG9va3VwKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJXaXRoKGluc3RhbmNlKTtcbn1cbiJdfQ== -; -define('handlebars/decorators/inline',['exports', 'module', '../utils'], function (exports, module, _utils) { - 'use strict'; - - module.exports = function (instance) { - instance.registerDecorator('inline', function (fn, props, container, options) { - var ret = fn; - if (!props.partials) { - props.partials = {}; - ret = function (context, options) { - // Create a new partials stack frame prior to exec. - var original = container.partials; - container.partials = _utils.extend({}, original, props.partials); - var ret = fn(context, options); - container.partials = original; - return ret; - }; - } - - props.partials[options.args[0]] = options.fn; - - return ret; - }); - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OzttQkFFZSxVQUFTLFFBQVEsRUFBRTtBQUNoQyxZQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFVBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFVBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLGFBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFdBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLGNBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsbUJBQVMsQ0FBQyxRQUFRLEdBQUcsT0FWckIsTUFBTSxDQVVzQixFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxjQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLG1CQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixpQkFBTyxHQUFHLENBQUM7U0FDWixDQUFDO09BQ0g7O0FBRUQsV0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFN0MsYUFBTyxHQUFHLENBQUM7S0FDWixDQUFDLENBQUM7R0FDSiIsImZpbGUiOiJpbmxpbmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2V4dGVuZH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckRlY29yYXRvcignaW5saW5lJywgZnVuY3Rpb24oZm4sIHByb3BzLCBjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgICBsZXQgcmV0ID0gZm47XG4gICAgaWYgKCFwcm9wcy5wYXJ0aWFscykge1xuICAgICAgcHJvcHMucGFydGlhbHMgPSB7fTtcbiAgICAgIHJldCA9IGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBhcnRpYWxzIHN0YWNrIGZyYW1lIHByaW9yIHRvIGV4ZWMuXG4gICAgICAgIGxldCBvcmlnaW5hbCA9IGNvbnRhaW5lci5wYXJ0aWFscztcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gZXh0ZW5kKHt9LCBvcmlnaW5hbCwgcHJvcHMucGFydGlhbHMpO1xuICAgICAgICBsZXQgcmV0ID0gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9yaWdpbmFsO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm9wcy5wYXJ0aWFsc1tvcHRpb25zLmFyZ3NbMF1dID0gb3B0aW9ucy5mbjtcblxuICAgIHJldHVybiByZXQ7XG4gIH0pO1xufVxuIl19 -; -define('handlebars/decorators',['exports', './decorators/inline'], function (exports, _decoratorsInline) { - 'use strict'; - - exports.__esModule = true; - exports.registerDefaultDecorators = registerDefaultDecorators; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _registerInline = _interopRequireDefault(_decoratorsInline); - - function registerDefaultDecorators(instance) { - _registerInline['default'](instance); - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFFTyxXQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCwrQkFBZSxRQUFRLENBQUMsQ0FBQztHQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG5cbiJdfQ== -; -define('handlebars/logger',['exports', 'module', './utils'], function (exports, module, _utils) { - 'use strict'; - - var logger = { - methodMap: ['debug', 'info', 'warn', 'error'], - level: 'info', - - // Maps a given level value to the `methodMap` indexes above. - lookupLevel: function lookupLevel(level) { - if (typeof level === 'string') { - var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); - if (levelMap >= 0) { - level = levelMap; - } else { - level = parseInt(level, 10); - } - } - - return level; - }, - - // Can be overridden in the host environment - log: function log(level) { - level = logger.lookupLevel(level); - - if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { - var method = logger.methodMap[level]; - if (!console[method]) { - // eslint-disable-line no-console - method = 'log'; - } - - for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - message[_key - 1] = arguments[_key]; - } - - console[method].apply(console, message); // eslint-disable-line no-console - } - } - }; - - module.exports = logger; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxNQUFJLE1BQU0sR0FBRztBQUNYLGFBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxTQUFLLEVBQUUsTUFBTTs7O0FBR2IsZUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixVQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixZQUFJLFFBQVEsR0FBRyxPQVRiLE9BQU8sQ0FTYyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQzlELFlBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUNqQixlQUFLLEdBQUcsUUFBUSxDQUFDO1NBQ2xCLE1BQU07QUFDTCxlQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM3QjtPQUNGOztBQUVELGFBQU8sS0FBSyxDQUFDO0tBQ2Q7OztBQUdELE9BQUcsRUFBRSxhQUFTLEtBQUssRUFBYztBQUMvQixXQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFbEMsVUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFO0FBQy9FLFlBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTs7QUFDcEIsZ0JBQU0sR0FBRyxLQUFLLENBQUM7U0FDaEI7OzBDQVBtQixPQUFPO0FBQVAsaUJBQU87OztBQVEzQixlQUFPLENBQUMsTUFBTSxPQUFDLENBQWYsT0FBTyxFQUFZLE9BQU8sQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7R0FDRixDQUFDOzttQkFFYSxNQUFNIiwiZmlsZSI6ImxvZ2dlci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7aW5kZXhPZn0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWwpIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7ICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgICAgIG1ldGhvZCA9ICdsb2cnO1xuICAgICAgfVxuICAgICAgY29uc29sZVttZXRob2RdKC4uLm1lc3NhZ2UpOyAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiJdfQ== -; -define('handlebars/base',['exports', './utils', './exception', './helpers', './decorators', './logger'], function (exports, _utils, _exception, _helpers, _decorators, _logger) { - 'use strict'; - - exports.__esModule = true; - exports.HandlebarsEnvironment = HandlebarsEnvironment; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - var _logger2 = _interopRequireDefault(_logger); - - var VERSION = '4.0.6'; - exports.VERSION = VERSION; - var COMPILER_REVISION = 7; - - exports.COMPILER_REVISION = COMPILER_REVISION; - var REVISION_CHANGES = { - 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it - 2: '== 1.0.0-rc.3', - 3: '== 1.0.0-rc.4', - 4: '== 1.x.x', - 5: '== 2.0.0-alpha.x', - 6: '>= 2.0.0-beta.1', - 7: '>= 4.0.0' - }; - - exports.REVISION_CHANGES = REVISION_CHANGES; - var objectType = '[object Object]'; - - function HandlebarsEnvironment(helpers, partials, decorators) { - this.helpers = helpers || {}; - this.partials = partials || {}; - this.decorators = decorators || {}; - - _helpers.registerDefaultHelpers(this); - _decorators.registerDefaultDecorators(this); - } - - HandlebarsEnvironment.prototype = { - constructor: HandlebarsEnvironment, - - logger: _logger2['default'], - log: _logger2['default'].log, - - registerHelper: function registerHelper(name, fn) { - if (_utils.toString.call(name) === objectType) { - if (fn) { - throw new _Exception['default']('Arg not supported with multiple helpers'); - } - _utils.extend(this.helpers, name); - } else { - this.helpers[name] = fn; - } - }, - unregisterHelper: function unregisterHelper(name) { - delete this.helpers[name]; - }, - - registerPartial: function registerPartial(name, partial) { - if (_utils.toString.call(name) === objectType) { - _utils.extend(this.partials, name); - } else { - if (typeof partial === 'undefined') { - throw new _Exception['default']('Attempting to register a partial called "' + name + '" as undefined'); - } - this.partials[name] = partial; - } - }, - unregisterPartial: function unregisterPartial(name) { - delete this.partials[name]; - }, - - registerDecorator: function registerDecorator(name, fn) { - if (_utils.toString.call(name) === objectType) { - if (fn) { - throw new _Exception['default']('Arg not supported with multiple decorators'); - } - _utils.extend(this.decorators, name); - } else { - this.decorators[name] = fn; - } - }, - unregisterDecorator: function unregisterDecorator(name) { - delete this.decorators[name]; - } - }; - - var log = _logger2['default'].log; - - exports.log = log; - exports.createFrame = _utils.createFrame; - exports.logger = _logger2['default']; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQU1PLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQzs7QUFDeEIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7OztBQUU1QixNQUFNLGdCQUFnQixHQUFHO0FBQzlCLEtBQUMsRUFBRSxhQUFhO0FBQ2hCLEtBQUMsRUFBRSxlQUFlO0FBQ2xCLEtBQUMsRUFBRSxlQUFlO0FBQ2xCLEtBQUMsRUFBRSxVQUFVO0FBQ2IsS0FBQyxFQUFFLGtCQUFrQjtBQUNyQixLQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEtBQUMsRUFBRSxVQUFVO0dBQ2QsQ0FBQzs7O0FBRUYsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUM7O0FBRTlCLFdBQVMscUJBQXFCLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDbkUsUUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO0FBQzdCLFFBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLEVBQUUsQ0FBQztBQUMvQixRQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsSUFBSSxFQUFFLENBQUM7O0FBRW5DLGFBeEJNLHNCQUFzQixDQXdCTCxJQUFJLENBQUMsQ0FBQztBQUM3QixnQkF4Qk0seUJBQXlCLENBd0JMLElBQUksQ0FBQyxDQUFDO0dBQ2pDOztBQUVELHVCQUFxQixDQUFDLFNBQVMsR0FBRztBQUNoQyxlQUFXLEVBQUUscUJBQXFCOztBQUVsQyxVQUFNLHFCQUFRO0FBQ2QsT0FBRyxFQUFFLG9CQUFPLEdBQUc7O0FBRWYsa0JBQWMsRUFBRSx3QkFBUyxJQUFJLEVBQUUsRUFBRSxFQUFFO0FBQ2pDLFVBQUksT0FyQ3FCLFFBQVEsQ0FxQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsWUFBSSxFQUFFLEVBQUU7QUFBRSxnQkFBTSwwQkFBYyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQUU7QUFDM0UsZUF2Q2UsTUFBTSxDQXVDZCxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO09BQzVCLE1BQU07QUFDTCxZQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztPQUN6QjtLQUNGO0FBQ0Qsb0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLGFBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQjs7QUFFRCxtQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsVUFBSSxPQWpEcUIsUUFBUSxDQWlEcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLFVBQVUsRUFBRTtBQUN0QyxlQWxEZSxNQUFNLENBa0RkLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7T0FDN0IsTUFBTTtBQUNMLFlBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGdCQUFNLHdFQUEwRCxJQUFJLG9CQUFpQixDQUFDO1NBQ3ZGO0FBQ0QsWUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUM7T0FDL0I7S0FDRjtBQUNELHFCQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRTtBQUNoQyxhQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDNUI7O0FBRUQscUJBQWlCLEVBQUUsMkJBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNwQyxVQUFJLE9BL0RxQixRQUFRLENBK0RwQixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFlBQUksRUFBRSxFQUFFO0FBQUUsZ0JBQU0sMEJBQWMsNENBQTRDLENBQUMsQ0FBQztTQUFFO0FBQzlFLGVBakVlLE1BQU0sQ0FpRWQsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztPQUMvQixNQUFNO0FBQ0wsWUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7T0FDNUI7S0FDRjtBQUNELHVCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxhQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDOztBQUVLLE1BQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1VBRXBCLFdBQVcsVUE3RVgsV0FBVztVQTZFRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2NyZWF0ZUZyYW1lLCBleHRlbmQsIHRvU3RyaW5nfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtyZWdpc3RlckRlZmF1bHRIZWxwZXJzfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHtyZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC42JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDc7XG5cbmV4cG9ydCBjb25zdCBSRVZJU0lPTl9DSEFOR0VTID0ge1xuICAxOiAnPD0gMS4wLnJjLjInLCAvLyAxLjAucmMuMiBpcyBhY3R1YWxseSByZXYyIGJ1dCBkb2Vzbid0IHJlcG9ydCBpdFxuICAyOiAnPT0gMS4wLjAtcmMuMycsXG4gIDM6ICc9PSAxLjAuMC1yYy40JyxcbiAgNDogJz09IDEueC54JyxcbiAgNTogJz09IDIuMC4wLWFscGhhLngnLFxuICA2OiAnPj0gMi4wLjAtYmV0YS4xJyxcbiAgNzogJz49IDQuMC4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTsgfVxuICAgICAgZXh0ZW5kKHRoaXMuaGVscGVycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVscGVyc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckhlbHBlcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmhlbHBlcnNbbmFtZV07XG4gIH0sXG5cbiAgcmVnaXN0ZXJQYXJ0aWFsOiBmdW5jdGlvbihuYW1lLCBwYXJ0aWFsKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGV4dGVuZCh0aGlzLnBhcnRpYWxzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwYXJ0aWFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKGBBdHRlbXB0aW5nIHRvIHJlZ2lzdGVyIGEgcGFydGlhbCBjYWxsZWQgXCIke25hbWV9XCIgYXMgdW5kZWZpbmVkYCk7XG4gICAgICB9XG4gICAgICB0aGlzLnBhcnRpYWxzW25hbWVdID0gcGFydGlhbDtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJQYXJ0aWFsOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMucGFydGlhbHNbbmFtZV07XG4gIH0sXG5cbiAgcmVnaXN0ZXJEZWNvcmF0b3I6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikgeyB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGRlY29yYXRvcnMnKTsgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHtjcmVhdGVGcmFtZSwgbG9nZ2VyfTtcbiJdfQ== -; -define('handlebars/safe-string',['exports', 'module'], function (exports, module) { - // Build out our basic SafeString type - 'use strict'; - - function SafeString(string) { - this.string = string; - } - - SafeString.prototype.toString = SafeString.prototype.toHTML = function () { - return '' + this.string; - }; - - module.exports = SafeString; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxXQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsUUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7R0FDdEI7O0FBRUQsWUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxXQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0dBQ3pCLENBQUM7O21CQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ== -; -define('handlebars/runtime',['exports', './utils', './exception', './base'], function (exports, _utils, _exception, _base) { - 'use strict'; - - exports.__esModule = true; - exports.checkRevision = checkRevision; - exports.template = template; - exports.wrapProgram = wrapProgram; - exports.resolvePartial = resolvePartial; - exports.invokePartial = invokePartial; - exports.noop = noop; - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var _Exception = _interopRequireDefault(_exception); - - function checkRevision(compilerInfo) { - var compilerRevision = compilerInfo && compilerInfo[0] || 1, - currentRevision = _base.COMPILER_REVISION; - - if (compilerRevision !== currentRevision) { - if (compilerRevision < currentRevision) { - var runtimeVersions = _base.REVISION_CHANGES[currentRevision], - compilerVersions = _base.REVISION_CHANGES[compilerRevision]; - throw new _Exception['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); - } else { - // Use the embedded version info since the runtime doesn't know about this revision yet - throw new _Exception['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); - } - } - } - - function template(templateSpec, env) { - /* istanbul ignore next */ - if (!env) { - throw new _Exception['default']('No environment passed to template'); - } - if (!templateSpec || !templateSpec.main) { - throw new _Exception['default']('Unknown template object: ' + typeof templateSpec); - } - - templateSpec.main.decorator = templateSpec.main_d; - - // Note: Using env.VM references rather than local var references throughout this section to allow - // for external users to override these as psuedo-supported APIs. - env.VM.checkRevision(templateSpec.compiler); - - function invokePartialWrapper(partial, context, options) { - if (options.hash) { - context = _utils.extend({}, context, options.hash); - if (options.ids) { - options.ids[0] = true; - } - } - - partial = env.VM.resolvePartial.call(this, partial, context, options); - var result = env.VM.invokePartial.call(this, partial, context, options); - - if (result == null && env.compile) { - options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); - result = options.partials[options.name](context, options); - } - if (result != null) { - if (options.indent) { - var lines = result.split('\n'); - for (var i = 0, l = lines.length; i < l; i++) { - if (!lines[i] && i + 1 === l) { - break; - } - - lines[i] = options.indent + lines[i]; - } - result = lines.join('\n'); - } - return result; - } else { - throw new _Exception['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); - } - } - - // Just add water - var container = { - strict: function strict(obj, name) { - if (!(name in obj)) { - throw new _Exception['default']('"' + name + '" not defined in ' + obj); - } - return obj[name]; - }, - lookup: function lookup(depths, name) { - var len = depths.length; - for (var i = 0; i < len; i++) { - if (depths[i] && depths[i][name] != null) { - return depths[i][name]; - } - } - }, - lambda: function lambda(current, context) { - return typeof current === 'function' ? current.call(context) : current; - }, - - escapeExpression: _utils.escapeExpression, - invokePartial: invokePartialWrapper, - - fn: function fn(i) { - var ret = templateSpec[i]; - ret.decorator = templateSpec[i + '_d']; - return ret; - }, - - programs: [], - program: function program(i, data, declaredBlockParams, blockParams, depths) { - var programWrapper = this.programs[i], - fn = this.fn(i); - if (data || depths || blockParams || declaredBlockParams) { - programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); - } else if (!programWrapper) { - programWrapper = this.programs[i] = wrapProgram(this, i, fn); - } - return programWrapper; - }, - - data: function data(value, depth) { - while (value && depth--) { - value = value._parent; - } - return value; - }, - merge: function merge(param, common) { - var obj = param || common; - - if (param && common && param !== common) { - obj = _utils.extend({}, common, param); - } - - return obj; - }, - - noop: env.VM.noop, - compilerInfo: templateSpec.compiler - }; - - function ret(context) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var data = options.data; - - ret._setup(options); - if (!options.partial && templateSpec.useData) { - data = initData(context, data); - } - var depths = undefined, - blockParams = templateSpec.useBlockParams ? [] : undefined; - if (templateSpec.useDepths) { - if (options.depths) { - depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; - } else { - depths = [context]; - } - } - - function main(context /*, options*/) { - return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); - } - main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); - return main(context, options); - } - ret.isTop = true; - - ret._setup = function (options) { - if (!options.partial) { - container.helpers = container.merge(options.helpers, env.helpers); - - if (templateSpec.usePartial) { - container.partials = container.merge(options.partials, env.partials); - } - if (templateSpec.usePartial || templateSpec.useDecorators) { - container.decorators = container.merge(options.decorators, env.decorators); - } - } else { - container.helpers = options.helpers; - container.partials = options.partials; - container.decorators = options.decorators; - } - }; - - ret._child = function (i, data, blockParams, depths) { - if (templateSpec.useBlockParams && !blockParams) { - throw new _Exception['default']('must pass block params'); - } - if (templateSpec.useDepths && !depths) { - throw new _Exception['default']('must pass parent depths'); - } - - return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); - }; - return ret; - } - - function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { - function prog(context) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var currentDepths = depths; - if (depths && context != depths[0]) { - currentDepths = [context].concat(depths); - } - - return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); - } - - prog = executeDecorators(fn, prog, container, depths, data, blockParams); - - prog.program = i; - prog.depth = depths ? depths.length : 0; - prog.blockParams = declaredBlockParams || 0; - return prog; - } - - function resolvePartial(partial, context, options) { - if (!partial) { - if (options.name === '@partial-block') { - var data = options.data; - while (data['partial-block'] === noop) { - data = data._parent; - } - partial = data['partial-block']; - data['partial-block'] = noop; - } else { - partial = options.partials[options.name]; - } - } else if (!partial.call && !options.name) { - // This is a dynamic partial that returned a string - options.name = partial; - partial = options.partials[partial]; - } - return partial; - } - - function invokePartial(partial, context, options) { - options.partial = true; - if (options.ids) { - options.data.contextPath = options.ids[0] || options.data.contextPath; - } - - var partialBlock = undefined; - if (options.fn && options.fn !== noop) { - options.data = _base.createFrame(options.data); - partialBlock = options.data['partial-block'] = options.fn; - - if (partialBlock.partials) { - options.partials = _utils.extend({}, options.partials, partialBlock.partials); - } - } - - if (partial === undefined && partialBlock) { - partial = partialBlock; - } - - if (partial === undefined) { - throw new _Exception['default']('The partial ' + options.name + ' could not be found'); - } else if (partial instanceof Function) { - return partial(context, options); - } - } - - function noop() { - return ''; - } - - function initData(context, data) { - if (!data || !('root' in data)) { - data = data ? _base.createFrame(data) : {}; - data.root = context; - } - return data; - } - - function executeDecorators(fn, prog, container, depths, data, blockParams) { - if (fn.decorator) { - var props = {}; - prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); - _utils.extend(prog, props); - } - return prog; - } -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUlPLFdBQVMsYUFBYSxDQUFDLFlBQVksRUFBRTtBQUMxQyxRQUFNLGdCQUFnQixHQUFHLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RCxlQUFlLFNBSmQsaUJBQWlCLEFBSWlCLENBQUM7O0FBRTFDLFFBQUksZ0JBQWdCLEtBQUssZUFBZSxFQUFFO0FBQ3hDLFVBQUksZ0JBQWdCLEdBQUcsZUFBZSxFQUFFO0FBQ3RDLFlBQU0sZUFBZSxHQUFHLE1BUkYsZ0JBQWdCLENBUUcsZUFBZSxDQUFDO1lBQ25ELGdCQUFnQixHQUFHLE1BVEgsZ0JBQWdCLENBU0ksZ0JBQWdCLENBQUMsQ0FBQztBQUM1RCxjQUFNLDBCQUFjLHlGQUF5RixHQUN2RyxxREFBcUQsR0FBRyxlQUFlLEdBQUcsbURBQW1ELEdBQUcsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLENBQUM7T0FDaEssTUFBTTs7QUFFTCxjQUFNLDBCQUFjLHdGQUF3RixHQUN0RyxpREFBaUQsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7T0FDbkY7S0FDRjtHQUNGOztBQUVNLFdBQVMsUUFBUSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUU7O0FBRTFDLFFBQUksQ0FBQyxHQUFHLEVBQUU7QUFDUixZQUFNLDBCQUFjLG1DQUFtQyxDQUFDLENBQUM7S0FDMUQ7QUFDRCxRQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRTtBQUN2QyxZQUFNLDBCQUFjLDJCQUEyQixHQUFHLE9BQU8sWUFBWSxDQUFDLENBQUM7S0FDeEU7O0FBRUQsZ0JBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7QUFJbEQsT0FBRyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztBQUU1QyxhQUFTLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZELFVBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixlQUFPLEdBQUcsT0FBTSxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEQsWUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO0FBQ2YsaUJBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3ZCO09BQ0Y7O0FBRUQsYUFBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0RSxVQUFJLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRXhFLFVBQUksTUFBTSxJQUFJLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO0FBQ2pDLGVBQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekYsY0FBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztPQUMzRDtBQUNELFVBQUksTUFBTSxJQUFJLElBQUksRUFBRTtBQUNsQixZQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDbEIsY0FBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixlQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLGdCQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzVCLG9CQUFNO2FBQ1A7O0FBRUQsaUJBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztXQUN0QztBQUNELGdCQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMzQjtBQUNELGVBQU8sTUFBTSxDQUFDO09BQ2YsTUFBTTtBQUNMLGNBQU0sMEJBQWMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsMERBQTBELENBQUMsQ0FBQztPQUNqSDtLQUNGOzs7QUFHRCxRQUFJLFNBQVMsR0FBRztBQUNkLFlBQU0sRUFBRSxnQkFBUyxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQzFCLFlBQUksRUFBRSxJQUFJLElBQUksR0FBRyxDQUFBLEFBQUMsRUFBRTtBQUNsQixnQkFBTSwwQkFBYyxHQUFHLEdBQUcsSUFBSSxHQUFHLG1CQUFtQixHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQzdEO0FBQ0QsZUFBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDbEI7QUFDRCxZQUFNLEVBQUUsZ0JBQVMsTUFBTSxFQUFFLElBQUksRUFBRTtBQUM3QixZQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzFCLGFBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDNUIsY0FBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRTtBQUN4QyxtQkFBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7V0FDeEI7U0FDRjtPQUNGO0FBQ0QsWUFBTSxFQUFFLGdCQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7QUFDakMsZUFBTyxPQUFPLE9BQU8sS0FBSyxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUM7T0FDeEU7O0FBRUQsc0JBQWdCLEVBQUUsT0FBTSxnQkFBZ0I7QUFDeEMsbUJBQWEsRUFBRSxvQkFBb0I7O0FBRW5DLFFBQUUsRUFBRSxZQUFTLENBQUMsRUFBRTtBQUNkLFlBQUksR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixXQUFHLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdkMsZUFBTyxHQUFHLENBQUM7T0FDWjs7QUFFRCxjQUFRLEVBQUUsRUFBRTtBQUNaLGFBQU8sRUFBRSxpQkFBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUU7QUFDbkUsWUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDakMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEIsWUFBSSxJQUFJLElBQUksTUFBTSxJQUFJLFdBQVcsSUFBSSxtQkFBbUIsRUFBRTtBQUN4RCx3QkFBYyxHQUFHLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQzNGLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRTtBQUMxQix3QkFBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDOUQ7QUFDRCxlQUFPLGNBQWMsQ0FBQztPQUN2Qjs7QUFFRCxVQUFJLEVBQUUsY0FBUyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQzNCLGVBQU8sS0FBSyxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ3ZCLGVBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1NBQ3ZCO0FBQ0QsZUFBTyxLQUFLLENBQUM7T0FDZDtBQUNELFdBQUssRUFBRSxlQUFTLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDN0IsWUFBSSxHQUFHLEdBQUcsS0FBSyxJQUFJLE1BQU0sQ0FBQzs7QUFFMUIsWUFBSSxLQUFLLElBQUksTUFBTSxJQUFLLEtBQUssS0FBSyxNQUFNLEFBQUMsRUFBRTtBQUN6QyxhQUFHLEdBQUcsT0FBTSxNQUFNLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN2Qzs7QUFFRCxlQUFPLEdBQUcsQ0FBQztPQUNaOztBQUVELFVBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUk7QUFDakIsa0JBQVksRUFBRSxZQUFZLENBQUMsUUFBUTtLQUNwQyxDQUFDOztBQUVGLGFBQVMsR0FBRyxDQUFDLE9BQU8sRUFBZ0I7VUFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ2hDLFVBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7O0FBRXhCLFNBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEIsVUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUM1QyxZQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztPQUNoQztBQUNELFVBQUksTUFBTSxZQUFBO1VBQ04sV0FBVyxHQUFHLFlBQVksQ0FBQyxjQUFjLEdBQUcsRUFBRSxHQUFHLFNBQVMsQ0FBQztBQUMvRCxVQUFJLFlBQVksQ0FBQyxTQUFTLEVBQUU7QUFDMUIsWUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGdCQUFNLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7U0FDM0YsTUFBTTtBQUNMLGdCQUFNLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwQjtPQUNGOztBQUVELGVBQVMsSUFBSSxDQUFDLE9BQU8sZ0JBQWU7QUFDbEMsZUFBTyxFQUFFLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO09BQ3JIO0FBQ0QsVUFBSSxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDdEcsYUFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQy9CO0FBQ0QsT0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7O0FBRWpCLE9BQUcsQ0FBQyxNQUFNLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDN0IsVUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDcEIsaUJBQVMsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQzs7QUFFbEUsWUFBSSxZQUFZLENBQUMsVUFBVSxFQUFFO0FBQzNCLG1CQUFTLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDdEU7QUFDRCxZQUFJLFlBQVksQ0FBQyxVQUFVLElBQUksWUFBWSxDQUFDLGFBQWEsRUFBRTtBQUN6RCxtQkFBUyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQzVFO09BQ0YsTUFBTTtBQUNMLGlCQUFTLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDcEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUN0QyxpQkFBUyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO09BQzNDO0tBQ0YsQ0FBQzs7QUFFRixPQUFHLENBQUMsTUFBTSxHQUFHLFVBQVMsQ0FBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFO0FBQ2xELFVBQUksWUFBWSxDQUFDLGNBQWMsSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUMvQyxjQUFNLDBCQUFjLHdCQUF3QixDQUFDLENBQUM7T0FDL0M7QUFDRCxVQUFJLFlBQVksQ0FBQyxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDckMsY0FBTSwwQkFBYyx5QkFBeUIsQ0FBQyxDQUFDO09BQ2hEOztBQUVELGFBQU8sV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ2pGLENBQUM7QUFDRixXQUFPLEdBQUcsQ0FBQztHQUNaOztBQUVNLFdBQVMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFO0FBQzVGLGFBQVMsSUFBSSxDQUFDLE9BQU8sRUFBZ0I7VUFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ2pDLFVBQUksYUFBYSxHQUFHLE1BQU0sQ0FBQztBQUMzQixVQUFJLE1BQU0sSUFBSSxPQUFPLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ2xDLHFCQUFhLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7T0FDMUM7O0FBRUQsYUFBTyxFQUFFLENBQUMsU0FBUyxFQUNmLE9BQU8sRUFDUCxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxRQUFRLEVBQ3JDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxFQUNwQixXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUN4RCxhQUFhLENBQUMsQ0FBQztLQUNwQjs7QUFFRCxRQUFJLEdBQUcsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQzs7QUFFekUsUUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDakIsUUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDeEMsUUFBSSxDQUFDLFdBQVcsR0FBRyxtQkFBbUIsSUFBSSxDQUFDLENBQUM7QUFDNUMsV0FBTyxJQUFJLENBQUM7R0FDYjs7QUFFTSxXQUFTLGNBQWMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN4RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osVUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLGdCQUFnQixFQUFFO0FBQ3JDLFlBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsZUFBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3JDLGNBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3JCO0FBQ0QsZUFBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUNoQyxZQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDO09BQzlCLE1BQU07QUFDTCxlQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7T0FDMUM7S0FDRixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTs7QUFFekMsYUFBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDckM7QUFDRCxXQUFPLE9BQU8sQ0FBQztHQUNoQjs7QUFFTSxXQUFTLGFBQWEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN2RCxXQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUN2QixRQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDZixhQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0tBQ3ZFOztBQUVELFFBQUksWUFBWSxZQUFBLENBQUM7QUFDakIsUUFBSSxPQUFPLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFO0FBQ3JDLGFBQU8sQ0FBQyxJQUFJLEdBQUcsTUEzTzJCLFdBQVcsQ0EyTzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxrQkFBWSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFMUQsVUFBSSxZQUFZLENBQUMsUUFBUSxFQUFFO0FBQ3pCLGVBQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTSxNQUFNLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO09BQzlFO0tBQ0Y7O0FBRUQsUUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLFlBQVksRUFBRTtBQUN6QyxhQUFPLEdBQUcsWUFBWSxDQUFDO0tBQ3hCOztBQUVELFFBQUksT0FBTyxLQUFLLFNBQVMsRUFBRTtBQUN6QixZQUFNLDBCQUFjLGNBQWMsR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLENBQUM7S0FDNUUsTUFBTSxJQUFJLE9BQU8sWUFBWSxRQUFRLEVBQUU7QUFDdEMsYUFBTyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ2xDO0dBQ0Y7O0FBRU0sV0FBUyxJQUFJLEdBQUc7QUFBRSxXQUFPLEVBQUUsQ0FBQztHQUFFOztBQUVyQyxXQUFTLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFO0FBQy9CLFFBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksSUFBSSxDQUFBLEFBQUMsRUFBRTtBQUM5QixVQUFJLEdBQUcsSUFBSSxHQUFHLE1BbFE0QixXQUFXLENBa1EzQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckMsVUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7S0FDckI7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiOztBQUVELFdBQVMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7QUFDekUsUUFBSSxFQUFFLENBQUMsU0FBUyxFQUFFO0FBQ2hCLFVBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNmLFVBQUksR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1RixhQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDM0I7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHsgQ09NUElMRVJfUkVWSVNJT04sIFJFVklTSU9OX0NIQU5HRVMsIGNyZWF0ZUZyYW1lIH0gZnJvbSAnLi9iYXNlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrUmV2aXNpb24oY29tcGlsZXJJbmZvKSB7XG4gIGNvbnN0IGNvbXBpbGVyUmV2aXNpb24gPSBjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdIHx8IDEsXG4gICAgICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChjb21waWxlclJldmlzaW9uICE9PSBjdXJyZW50UmV2aXNpb24pIHtcbiAgICBpZiAoY29tcGlsZXJSZXZpc2lvbiA8IGN1cnJlbnRSZXZpc2lvbikge1xuICAgICAgY29uc3QgcnVudGltZVZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjdXJyZW50UmV2aXNpb25dLFxuICAgICAgICAgICAgY29tcGlsZXJWZXJzaW9ucyA9IFJFVklTSU9OX0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUZW1wbGF0ZSB3YXMgcHJlY29tcGlsZWQgd2l0aCBhbiBvbGRlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICtcbiAgICAgICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcHJlY29tcGlsZXIgdG8gYSBuZXdlciB2ZXJzaW9uICgnICsgcnVudGltZVZlcnNpb25zICsgJykgb3IgZG93bmdyYWRlIHlvdXIgcnVudGltZSB0byBhbiBvbGRlciB2ZXJzaW9uICgnICsgY29tcGlsZXJWZXJzaW9ucyArICcpLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHJ1bnRpbWUgdG8gYSBuZXdlciB2ZXJzaW9uICgnICsgY29tcGlsZXJJbmZvWzFdICsgJykuJyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZW1wbGF0ZSh0ZW1wbGF0ZVNwZWMsIGVudikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICBpZiAoIWVudikge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ05vIGVudmlyb25tZW50IHBhc3NlZCB0byB0ZW1wbGF0ZScpO1xuICB9XG4gIGlmICghdGVtcGxhdGVTcGVjIHx8ICF0ZW1wbGF0ZVNwZWMubWFpbikge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1Vua25vd24gdGVtcGxhdGUgb2JqZWN0OiAnICsgdHlwZW9mIHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICB0ZW1wbGF0ZVNwZWMubWFpbi5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWMubWFpbl9kO1xuXG4gIC8vIE5vdGU6IFVzaW5nIGVudi5WTSByZWZlcmVuY2VzIHJhdGhlciB0aGFuIGxvY2FsIHZhciByZWZlcmVuY2VzIHRocm91Z2hvdXQgdGhpcyBzZWN0aW9uIHRvIGFsbG93XG4gIC8vIGZvciBleHRlcm5hbCB1c2VycyB0byBvdmVycmlkZSB0aGVzZSBhcyBwc3VlZG8tc3VwcG9ydGVkIEFQSXMuXG4gIGVudi5WTS5jaGVja1JldmlzaW9uKHRlbXBsYXRlU3BlYy5jb21waWxlcik7XG5cbiAgZnVuY3Rpb24gaW52b2tlUGFydGlhbFdyYXBwZXIocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmhhc2gpIHtcbiAgICAgIGNvbnRleHQgPSBVdGlscy5leHRlbmQoe30sIGNvbnRleHQsIG9wdGlvbnMuaGFzaCk7XG4gICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgb3B0aW9ucy5pZHNbMF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHBhcnRpYWwgPSBlbnYuVk0ucmVzb2x2ZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbCh0aGlzLCBwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKTtcblxuICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiBlbnYuY29tcGlsZSkge1xuICAgICAgb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdID0gZW52LmNvbXBpbGUocGFydGlhbCwgdGVtcGxhdGVTcGVjLmNvbXBpbGVyT3B0aW9ucywgZW52KTtcbiAgICAgIHJlc3VsdCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXShjb250ZXh0LCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdUaGUgcGFydGlhbCAnICsgb3B0aW9ucy5uYW1lICsgJyBjb3VsZCBub3QgYmUgY29tcGlsZWQgd2hlbiBydW5uaW5nIGluIHJ1bnRpbWUtb25seSBtb2RlJyk7XG4gICAgfVxuICB9XG5cbiAgLy8gSnVzdCBhZGQgd2F0ZXJcbiAgbGV0IGNvbnRhaW5lciA9IHtcbiAgICBzdHJpY3Q6IGZ1bmN0aW9uKG9iaiwgbmFtZSkge1xuICAgICAgaWYgKCEobmFtZSBpbiBvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1wiJyArIG5hbWUgKyAnXCIgbm90IGRlZmluZWQgaW4gJyArIG9iaik7XG4gICAgICB9XG4gICAgICByZXR1cm4gb2JqW25hbWVdO1xuICAgIH0sXG4gICAgbG9va3VwOiBmdW5jdGlvbihkZXB0aHMsIG5hbWUpIHtcbiAgICAgIGNvbnN0IGxlbiA9IGRlcHRocy5sZW5ndGg7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmIChkZXB0aHNbaV0gJiYgZGVwdGhzW2ldW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gZGVwdGhzW2ldW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBsYW1iZGE6IGZ1bmN0aW9uKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24oaSkge1xuICAgICAgbGV0IHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uKGksIGRhdGEsIGRlY2xhcmVkQmxvY2tQYXJhbXMsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICAgIGxldCBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0sXG4gICAgICAgICAgZm4gPSB0aGlzLmZuKGkpO1xuICAgICAgaWYgKGRhdGEgfHwgZGVwdGhzIHx8IGJsb2NrUGFyYW1zIHx8IGRlY2xhcmVkQmxvY2tQYXJhbXMpIHtcbiAgICAgICAgcHJvZ3JhbVdyYXBwZXIgPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbiwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2U6IGZ1bmN0aW9uKHBhcmFtLCBjb21tb24pIHtcbiAgICAgIGxldCBvYmogPSBwYXJhbSB8fCBjb21tb247XG5cbiAgICAgIGlmIChwYXJhbSAmJiBjb21tb24gJiYgKHBhcmFtICE9PSBjb21tb24pKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgICBibG9ja1BhcmFtcyA9IHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIGlmICh0ZW1wbGF0ZVNwZWMudXNlRGVwdGhzKSB7XG4gICAgICBpZiAob3B0aW9ucy5kZXB0aHMpIHtcbiAgICAgICAgZGVwdGhzID0gY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXSA/IFtjb250ZXh0XS5jb25jYXQob3B0aW9ucy5kZXB0aHMpIDogb3B0aW9ucy5kZXB0aHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZXB0aHMgPSBbY29udGV4dF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFpbihjb250ZXh0LyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuICcnICsgdGVtcGxhdGVTcGVjLm1haW4oY29udGFpbmVyLCBjb250ZXh0LCBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICB9XG4gICAgbWFpbiA9IGV4ZWN1dGVEZWNvcmF0b3JzKHRlbXBsYXRlU3BlYy5tYWluLCBtYWluLCBjb250YWluZXIsIG9wdGlvbnMuZGVwdGhzIHx8IFtdLCBkYXRhLCBibG9ja1BhcmFtcyk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbiAgcmV0LmlzVG9wID0gdHJ1ZTtcblxuICByZXQuX3NldHVwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsKSB7XG4gICAgICBjb250YWluZXIuaGVscGVycyA9IGNvbnRhaW5lci5tZXJnZShvcHRpb25zLmhlbHBlcnMsIGVudi5oZWxwZXJzKTtcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZShvcHRpb25zLnBhcnRpYWxzLCBlbnYucGFydGlhbHMpO1xuICAgICAgfVxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsIHx8IHRlbXBsYXRlU3BlYy51c2VEZWNvcmF0b3JzKSB7XG4gICAgICAgIGNvbnRhaW5lci5kZWNvcmF0b3JzID0gY29udGFpbmVyLm1lcmdlKG9wdGlvbnMuZGVjb3JhdG9ycywgZW52LmRlY29yYXRvcnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICB9XG4gIH07XG5cbiAgcmV0Ll9jaGlsZCA9IGZ1bmN0aW9uKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIGJsb2NrIHBhcmFtcycpO1xuICAgIH1cbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocyAmJiAhZGVwdGhzKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdtdXN0IHBhc3MgcGFyZW50IGRlcHRocycpO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwUHJvZ3JhbShjb250YWluZXIsIGksIHRlbXBsYXRlU3BlY1tpXSwgZGF0YSwgMCwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShjb250YWluZXIsIGksIGZuLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKGRlcHRocyAmJiBjb250ZXh0ICE9IGRlcHRoc1swXSkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oY29udGFpbmVyLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLFxuICAgICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgICAgYmxvY2tQYXJhbXMgJiYgW29wdGlvbnMuYmxvY2tQYXJhbXNdLmNvbmNhdChibG9ja1BhcmFtcyksXG4gICAgICAgIGN1cnJlbnREZXB0aHMpO1xuICB9XG5cbiAgcHJvZyA9IGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpO1xuXG4gIHByb2cucHJvZ3JhbSA9IGk7XG4gIHByb2cuZGVwdGggPSBkZXB0aHMgPyBkZXB0aHMubGVuZ3RoIDogMDtcbiAgcHJvZy5ibG9ja1BhcmFtcyA9IGRlY2xhcmVkQmxvY2tQYXJhbXMgfHwgMDtcbiAgcmV0dXJuIHByb2c7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIGlmICghcGFydGlhbCkge1xuICAgIGlmIChvcHRpb25zLm5hbWUgPT09ICdAcGFydGlhbC1ibG9jaycpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgd2hpbGUgKGRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9PT0gbm9vcCkge1xuICAgICAgICBkYXRhID0gZGF0YS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcGFydGlhbCA9IGRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgICAgIGRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IG5vb3A7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV07XG4gICAgfVxuICB9IGVsc2UgaWYgKCFwYXJ0aWFsLmNhbGwgJiYgIW9wdGlvbnMubmFtZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHBhcnRpYWwgdGhhdCByZXR1cm5lZCBhIHN0cmluZ1xuICAgIG9wdGlvbnMubmFtZSA9IHBhcnRpYWw7XG4gICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbcGFydGlhbF07XG4gIH1cbiAgcmV0dXJuIHBhcnRpYWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBvcHRpb25zLmZuO1xuXG4gICAgaWYgKHBhcnRpYWxCbG9jay5wYXJ0aWFscykge1xuICAgICAgb3B0aW9ucy5wYXJ0aWFscyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucy5wYXJ0aWFscywgcGFydGlhbEJsb2NrLnBhcnRpYWxzKTtcbiAgICB9XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkICYmIHBhcnRpYWxCbG9jaykge1xuICAgIHBhcnRpYWwgPSBwYXJ0aWFsQmxvY2s7XG4gIH1cblxuICBpZiAocGFydGlhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vb3AoKSB7IHJldHVybiAnJzsgfVxuXG5mdW5jdGlvbiBpbml0RGF0YShjb250ZXh0LCBkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhKCdyb290JyBpbiBkYXRhKSkge1xuICAgIGRhdGEgPSBkYXRhID8gY3JlYXRlRnJhbWUoZGF0YSkgOiB7fTtcbiAgICBkYXRhLnJvb3QgPSBjb250ZXh0O1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKSB7XG4gIGlmIChmbi5kZWNvcmF0b3IpIHtcbiAgICBsZXQgcHJvcHMgPSB7fTtcbiAgICBwcm9nID0gZm4uZGVjb3JhdG9yKHByb2csIHByb3BzLCBjb250YWluZXIsIGRlcHRocyAmJiBkZXB0aHNbMF0sIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7XG4gIH1cbiAgcmV0dXJuIHByb2c7XG59XG4iXX0= -; -define('handlebars/no-conflict',['exports', 'module'], function (exports, module) { - /* global window */ - 'use strict'; - - module.exports = function (Handlebars) { - /* istanbul ignore next */ - var root = typeof global !== 'undefined' ? global : window, - $Handlebars = root.Handlebars; - /* istanbul ignore next */ - Handlebars.noConflict = function () { - if (root.Handlebars === Handlebars) { - root.Handlebars = $Handlebars; - } - return Handlebars; - }; - }; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7bUJBQ2UsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLFFBQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtRQUN0RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFbEMsY0FBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFVBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsWUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7T0FDL0I7QUFDRCxhQUFPLFVBQVUsQ0FBQztLQUNuQixDQUFDO0dBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgd2luZG93ICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgICAkSGFuZGxlYmFycyA9IHJvb3QuSGFuZGxlYmFycztcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgSGFuZGxlYmFycy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHJvb3QuSGFuZGxlYmFycyA9PT0gSGFuZGxlYmFycykge1xuICAgICAgcm9vdC5IYW5kbGViYXJzID0gJEhhbmRsZWJhcnM7XG4gICAgfVxuICAgIHJldHVybiBIYW5kbGViYXJzO1xuICB9O1xufVxuIl19 -; -define('handlebars.runtime',['exports', 'module', './handlebars/base', './handlebars/safe-string', './handlebars/exception', './handlebars/utils', './handlebars/runtime', './handlebars/no-conflict'], function (exports, module, _handlebarsBase, _handlebarsSafeString, _handlebarsException, _handlebarsUtils, _handlebarsRuntime, _handlebarsNoConflict) { - 'use strict'; - - // istanbul ignore next - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - // Each of these augment the Handlebars object. No need to setup here. - // (This is done to easily share code between commonjs and browse envs) - - var _SafeString = _interopRequireDefault(_handlebarsSafeString); - - var _Exception = _interopRequireDefault(_handlebarsException); - - var _noConflict = _interopRequireDefault(_handlebarsNoConflict); - - // For compatibility and usage outside of module systems, make the Handlebars object a namespace - function create() { - var hb = new _handlebarsBase.HandlebarsEnvironment(); - - _handlebarsUtils.extend(hb, _handlebarsBase); - hb.SafeString = _SafeString['default']; - hb.Exception = _Exception['default']; - hb.Utils = _handlebarsUtils; - hb.escapeExpression = _handlebarsUtils.escapeExpression; - - hb.VM = _handlebarsRuntime; - hb.template = function (spec) { - return _handlebarsRuntime.template(spec, hb); - }; - - return hb; - } - - var inst = create(); - inst.create = create; - - _noConflict['default'](inst); - - inst['default'] = inst; - - module.exports = inst; -}); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZQSxXQUFTLE1BQU0sR0FBRztBQUNoQixRQUFJLEVBQUUsR0FBRyxJQUFJLGdCQUFLLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLHFCQUFNLE1BQU0sQ0FBQyxFQUFFLGtCQUFPLENBQUM7QUFDdkIsTUFBRSxDQUFDLFVBQVUseUJBQWEsQ0FBQztBQUMzQixNQUFFLENBQUMsU0FBUyx3QkFBWSxDQUFDO0FBQ3pCLE1BQUUsQ0FBQyxLQUFLLG1CQUFRLENBQUM7QUFDakIsTUFBRSxDQUFDLGdCQUFnQixHQUFHLGlCQUFNLGdCQUFnQixDQUFDOztBQUU3QyxNQUFFLENBQUMsRUFBRSxxQkFBVSxDQUFDO0FBQ2hCLE1BQUUsQ0FBQyxRQUFRLEdBQUcsVUFBUyxJQUFJLEVBQUU7QUFDM0IsYUFBTyxtQkFBUSxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0tBQ25DLENBQUM7O0FBRUYsV0FBTyxFQUFFLENBQUM7R0FDWDs7QUFFRCxNQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIseUJBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLE1BQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O21CQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5ydW50aW1lLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgYmFzZSBmcm9tICcuL2hhbmRsZWJhcnMvYmFzZSc7XG5cbi8vIEVhY2ggb2YgdGhlc2UgYXVnbWVudCB0aGUgSGFuZGxlYmFycyBvYmplY3QuIE5vIG5lZWQgdG8gc2V0dXAgaGVyZS5cbi8vIChUaGlzIGlzIGRvbmUgdG8gZWFzaWx5IHNoYXJlIGNvZGUgYmV0d2VlbiBjb21tb25qcyBhbmQgYnJvd3NlIGVudnMpXG5pbXBvcnQgU2FmZVN0cmluZyBmcm9tICcuL2hhbmRsZWJhcnMvc2FmZS1zdHJpbmcnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2hhbmRsZWJhcnMvZXhjZXB0aW9uJztcbmltcG9ydCAqIGFzIFV0aWxzIGZyb20gJy4vaGFuZGxlYmFycy91dGlscyc7XG5pbXBvcnQgKiBhcyBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy9ydW50aW1lJztcblxuaW1wb3J0IG5vQ29uZmxpY3QgZnJvbSAnLi9oYW5kbGViYXJzL25vLWNvbmZsaWN0JztcblxuLy8gRm9yIGNvbXBhdGliaWxpdHkgYW5kIHVzYWdlIG91dHNpZGUgb2YgbW9kdWxlIHN5c3RlbXMsIG1ha2UgdGhlIEhhbmRsZWJhcnMgb2JqZWN0IGEgbmFtZXNwYWNlXG5mdW5jdGlvbiBjcmVhdGUoKSB7XG4gIGxldCBoYiA9IG5ldyBiYXNlLkhhbmRsZWJhcnNFbnZpcm9ubWVudCgpO1xuXG4gIFV0aWxzLmV4dGVuZChoYiwgYmFzZSk7XG4gIGhiLlNhZmVTdHJpbmcgPSBTYWZlU3RyaW5nO1xuICBoYi5FeGNlcHRpb24gPSBFeGNlcHRpb247XG4gIGhiLlV0aWxzID0gVXRpbHM7XG4gIGhiLmVzY2FwZUV4cHJlc3Npb24gPSBVdGlscy5lc2NhcGVFeHByZXNzaW9uO1xuXG4gIGhiLlZNID0gcnVudGltZTtcbiAgaGIudGVtcGxhdGUgPSBmdW5jdGlvbihzcGVjKSB7XG4gICAgcmV0dXJuIHJ1bnRpbWUudGVtcGxhdGUoc3BlYywgaGIpO1xuICB9O1xuXG4gIHJldHVybiBoYjtcbn1cblxubGV0IGluc3QgPSBjcmVhdGUoKTtcbmluc3QuY3JlYXRlID0gY3JlYXRlO1xuXG5ub0NvbmZsaWN0KGluc3QpO1xuXG5pbnN0WydkZWZhdWx0J10gPSBpbnN0O1xuXG5leHBvcnQgZGVmYXVsdCBpbnN0O1xuIl19 -; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.runtime.amd.min.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.runtime.amd.min.js deleted file mode 100644 index e1370cf82..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.runtime.amd.min.js +++ /dev/null @@ -1,27 +0,0 @@ -/**! - - @license - handlebars v4.0.6 - -Copyright (C) 2011-2016 by Yehuda Katz - -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. - -*/ -define("handlebars/utils",["exports"],function(a){"use strict";function b(a){return j[a]}function c(a){for(var b=1;b":">",'"':""","'":"'","`":"`","=":"="},k=/[&<>"'`=]/g,l=/[&<>"'`=]/,m=Object.prototype.toString;a.toString=m;var n=function(a){return"function"==typeof a};n(/x/)&&(a.isFunction=n=function(a){return"function"==typeof a&&"[object Function]"===m.call(a)}),a.isFunction=n;var o=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===m.call(a)};a.isArray=o}),define("handlebars/exception",["exports","module"],function(a,b){"use strict";function c(a,b){var e=b&&b.loc,f=void 0,g=void 0;e&&(f=e.start.line,g=e.start.column,a+=" - "+f+":"+g);for(var h=Error.prototype.constructor.call(this,a),i=0;i0?(d.ids&&(d.ids=[d.name]),a.helpers.each(b,d)):e(this);if(d.data&&d.ids){var g=c.createFrame(d.data);g.contextPath=c.appendContextPath(d.data.contextPath,d.name),d={data:g}}return f(b,d)})}}),define("handlebars/helpers/each",["exports","module","../utils","../exception"],function(a,b,c,d){"use strict";function e(a){return a&&a.__esModule?a:{"default":a}}var f=e(d);b.exports=function(a){a.registerHelper("each",function(a,b){function d(b,d,f){j&&(j.key=b,j.index=d,j.first=0===d,j.last=!!f,k&&(j.contextPath=k+b)),i+=e(a[b],{data:j,blockParams:c.blockParams([a[b],b],[k+b,null])})}if(!b)throw new f["default"]("Must pass iterator to #each");var e=b.fn,g=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=c.appendContextPath(b.data.contextPath,b.ids[0])+"."),c.isFunction(a)&&(a=a.call(this)),b.data&&(j=c.createFrame(b.data)),a&&"object"==typeof a)if(c.isArray(a))for(var l=a.length;h=0?b:parseInt(a,10)}return a},log:function(a){if(a=d.lookupLevel(a),"undefined"!=typeof console&&d.lookupLevel(d.level)<=a){var b=d.methodMap[a];console[b]||(b="log");for(var c=arguments.length,e=Array(c>1?c-1:0),f=1;f= 2.0.0-beta.1",7:">= 4.0.0"};a.REVISION_CHANGES=m;var n="[object Object]";h.prototype={constructor:h,logger:j["default"],log:j["default"].log,registerHelper:function(a,c){if(b.toString.call(a)===n){if(c)throw new i["default"]("Arg not supported with multiple helpers");b.extend(this.helpers,a)}else this.helpers[a]=c},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,c){if(b.toString.call(a)===n)b.extend(this.partials,a);else{if("undefined"==typeof c)throw new i["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=c}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,c){if(b.toString.call(a)===n){if(c)throw new i["default"]("Arg not supported with multiple decorators");b.extend(this.decorators,a)}else this.decorators[a]=c},unregisterDecorator:function(a){delete this.decorators[a]}};var o=j["default"].log;a.log=o,a.createFrame=b.createFrame,a.logger=j["default"]}),define("handlebars/safe-string",["exports","module"],function(a,b){"use strict";function c(a){this.string=a}c.prototype.toString=c.prototype.toHTML=function(){return""+this.string},b.exports=c}),define("handlebars/runtime",["exports","./utils","./exception","./base"],function(a,b,c,d){"use strict";function e(a){return a&&a.__esModule?a:{"default":a}}function f(a){var b=a&&a[0]||1,c=d.COMPILER_REVISION;if(b!==c){if(b= 2.0.0-beta.1', - 7: '>= 4.0.0' - }; - - exports.REVISION_CHANGES = REVISION_CHANGES; - var objectType = '[object Object]'; - - function HandlebarsEnvironment(helpers, partials, decorators) { - this.helpers = helpers || {}; - this.partials = partials || {}; - this.decorators = decorators || {}; - - _helpers.registerDefaultHelpers(this); - _decorators.registerDefaultDecorators(this); - } - - HandlebarsEnvironment.prototype = { - constructor: HandlebarsEnvironment, - - logger: _logger2['default'], - log: _logger2['default'].log, - - registerHelper: function registerHelper(name, fn) { - if (_utils.toString.call(name) === objectType) { - if (fn) { - throw new _exception2['default']('Arg not supported with multiple helpers'); - } - _utils.extend(this.helpers, name); - } else { - this.helpers[name] = fn; - } - }, - unregisterHelper: function unregisterHelper(name) { - delete this.helpers[name]; - }, - - registerPartial: function registerPartial(name, partial) { - if (_utils.toString.call(name) === objectType) { - _utils.extend(this.partials, name); - } else { - if (typeof partial === 'undefined') { - throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined'); - } - this.partials[name] = partial; - } - }, - unregisterPartial: function unregisterPartial(name) { - delete this.partials[name]; - }, - - registerDecorator: function registerDecorator(name, fn) { - if (_utils.toString.call(name) === objectType) { - if (fn) { - throw new _exception2['default']('Arg not supported with multiple decorators'); - } - _utils.extend(this.decorators, name); - } else { - this.decorators[name] = fn; - } - }, - unregisterDecorator: function unregisterDecorator(name) { - delete this.decorators[name]; - } - }; - - var log = _logger2['default'].log; - - exports.log = log; - exports.createFrame = _utils.createFrame; - exports.logger = _logger2['default']; - -/***/ }, -/* 4 */ -/***/ function(module, exports) { - - 'use strict'; - - exports.__esModule = true; - exports.extend = extend; - exports.indexOf = indexOf; - exports.escapeExpression = escapeExpression; - exports.isEmpty = isEmpty; - exports.createFrame = createFrame; - exports.blockParams = blockParams; - exports.appendContextPath = appendContextPath; - var escape = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`', - '=': '=' - }; - - var badChars = /[&<>"'`=]/g, - possible = /[&<>"'`=]/; - - function escapeChar(chr) { - return escape[chr]; - } - - function extend(obj /* , ...source */) { - for (var i = 1; i < arguments.length; i++) { - for (var key in arguments[i]) { - if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { - obj[key] = arguments[i][key]; - } - } - } - - return obj; - } - - var toString = Object.prototype.toString; - - exports.toString = toString; - // Sourced from lodash - // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt - /* eslint-disable func-style */ - var isFunction = function isFunction(value) { - return typeof value === 'function'; - }; - // fallback for older versions of Chrome and Safari - /* istanbul ignore next */ - if (isFunction(/x/)) { - exports.isFunction = isFunction = function (value) { - return typeof value === 'function' && toString.call(value) === '[object Function]'; - }; - } - exports.isFunction = isFunction; - - /* eslint-enable func-style */ - - /* istanbul ignore next */ - var isArray = Array.isArray || function (value) { - return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; - }; - - exports.isArray = isArray; - // Older IE versions do not directly support indexOf so we must implement our own, sadly. - - function indexOf(array, value) { - for (var i = 0, len = array.length; i < len; i++) { - if (array[i] === value) { - return i; - } - } - return -1; - } - - function escapeExpression(string) { - if (typeof string !== 'string') { - // don't escape SafeStrings, since they're already safe - if (string && string.toHTML) { - return string.toHTML(); - } else if (string == null) { - return ''; - } else if (!string) { - return string + ''; - } - - // Force a string conversion as this will be done by the append regardless and - // the regex test will do this transparently behind the scenes, causing issues if - // an object's to string has escaped characters in it. - string = '' + string; - } - - if (!possible.test(string)) { - return string; - } - return string.replace(badChars, escapeChar); - } - - function isEmpty(value) { - if (!value && value !== 0) { - return true; - } else if (isArray(value) && value.length === 0) { - return true; - } else { - return false; - } - } - - function createFrame(object) { - var frame = extend({}, object); - frame._parent = object; - return frame; - } - - function blockParams(params, ids) { - params.path = ids; - return params; - } - - function appendContextPath(contextPath, id) { - return (contextPath ? contextPath + '.' : '') + id; - } - -/***/ }, -/* 5 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _Object$defineProperty = __webpack_require__(6)['default']; - - exports.__esModule = true; - - var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; - - function Exception(message, node) { - var loc = node && node.loc, - line = undefined, - column = undefined; - if (loc) { - line = loc.start.line; - column = loc.start.column; - - message += ' - ' + line + ':' + column; - } - - var tmp = Error.prototype.constructor.call(this, message); - - // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. - for (var idx = 0; idx < errorProps.length; idx++) { - this[errorProps[idx]] = tmp[errorProps[idx]]; - } - - /* istanbul ignore else */ - if (Error.captureStackTrace) { - Error.captureStackTrace(this, Exception); - } - - try { - if (loc) { - this.lineNumber = line; - - // Work around issue under safari where we can't directly set the column value - /* istanbul ignore next */ - if (_Object$defineProperty) { - Object.defineProperty(this, 'column', { value: column }); - } else { - this.column = column; - } - } - } catch (nop) { - /* Ignore if the browser is very particular */ - } - } - - Exception.prototype = new Error(); - - exports['default'] = Exception; - module.exports = exports['default']; - -/***/ }, -/* 6 */ -/***/ function(module, exports, __webpack_require__) { - - module.exports = { "default": __webpack_require__(7), __esModule: true }; - -/***/ }, -/* 7 */ -/***/ function(module, exports, __webpack_require__) { - - var $ = __webpack_require__(8); - module.exports = function defineProperty(it, key, desc){ - return $.setDesc(it, key, desc); - }; - -/***/ }, -/* 8 */ -/***/ function(module, exports) { - - var $Object = Object; - module.exports = { - create: $Object.create, - getProto: $Object.getPrototypeOf, - isEnum: {}.propertyIsEnumerable, - getDesc: $Object.getOwnPropertyDescriptor, - setDesc: $Object.defineProperty, - setDescs: $Object.defineProperties, - getKeys: $Object.keys, - getNames: $Object.getOwnPropertyNames, - getSymbols: $Object.getOwnPropertySymbols, - each: [].forEach - }; - -/***/ }, -/* 9 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(2)['default']; - - exports.__esModule = true; - exports.registerDefaultHelpers = registerDefaultHelpers; - - var _helpersBlockHelperMissing = __webpack_require__(10); - - var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing); - - var _helpersEach = __webpack_require__(11); - - var _helpersEach2 = _interopRequireDefault(_helpersEach); - - var _helpersHelperMissing = __webpack_require__(12); - - var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing); - - var _helpersIf = __webpack_require__(13); - - var _helpersIf2 = _interopRequireDefault(_helpersIf); - - var _helpersLog = __webpack_require__(14); - - var _helpersLog2 = _interopRequireDefault(_helpersLog); - - var _helpersLookup = __webpack_require__(15); - - var _helpersLookup2 = _interopRequireDefault(_helpersLookup); - - var _helpersWith = __webpack_require__(16); - - var _helpersWith2 = _interopRequireDefault(_helpersWith); - - function registerDefaultHelpers(instance) { - _helpersBlockHelperMissing2['default'](instance); - _helpersEach2['default'](instance); - _helpersHelperMissing2['default'](instance); - _helpersIf2['default'](instance); - _helpersLog2['default'](instance); - _helpersLookup2['default'](instance); - _helpersWith2['default'](instance); - } - -/***/ }, -/* 10 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - var _utils = __webpack_require__(4); - - exports['default'] = function (instance) { - instance.registerHelper('blockHelperMissing', function (context, options) { - var inverse = options.inverse, - fn = options.fn; - - if (context === true) { - return fn(this); - } else if (context === false || context == null) { - return inverse(this); - } else if (_utils.isArray(context)) { - if (context.length > 0) { - if (options.ids) { - options.ids = [options.name]; - } - - return instance.helpers.each(context, options); - } else { - return inverse(this); - } - } else { - if (options.data && options.ids) { - var data = _utils.createFrame(options.data); - data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name); - options = { data: data }; - } - - return fn(context, options); - } - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 11 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(2)['default']; - - exports.__esModule = true; - - var _utils = __webpack_require__(4); - - var _exception = __webpack_require__(5); - - var _exception2 = _interopRequireDefault(_exception); - - exports['default'] = function (instance) { - instance.registerHelper('each', function (context, options) { - if (!options) { - throw new _exception2['default']('Must pass iterator to #each'); - } - - var fn = options.fn, - inverse = options.inverse, - i = 0, - ret = '', - data = undefined, - contextPath = undefined; - - if (options.data && options.ids) { - contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; - } - - if (_utils.isFunction(context)) { - context = context.call(this); - } - - if (options.data) { - data = _utils.createFrame(options.data); - } - - function execIteration(field, index, last) { - if (data) { - data.key = field; - data.index = index; - data.first = index === 0; - data.last = !!last; - - if (contextPath) { - data.contextPath = contextPath + field; - } - } - - ret = ret + fn(context[field], { - data: data, - blockParams: _utils.blockParams([context[field], field], [contextPath + field, null]) - }); - } - - if (context && typeof context === 'object') { - if (_utils.isArray(context)) { - for (var j = context.length; i < j; i++) { - if (i in context) { - execIteration(i, i, i === context.length - 1); - } - } - } else { - var priorKey = undefined; - - for (var key in context) { - if (context.hasOwnProperty(key)) { - // We're running the iterations one step out of sync so we can detect - // the last iteration without have to scan the object twice and create - // an itermediate keys array. - if (priorKey !== undefined) { - execIteration(priorKey, i - 1); - } - priorKey = key; - i++; - } - } - if (priorKey !== undefined) { - execIteration(priorKey, i - 1, true); - } - } - } - - if (i === 0) { - ret = inverse(this); - } - - return ret; - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 12 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(2)['default']; - - exports.__esModule = true; - - var _exception = __webpack_require__(5); - - var _exception2 = _interopRequireDefault(_exception); - - exports['default'] = function (instance) { - instance.registerHelper('helperMissing', function () /* [args, ]options */{ - if (arguments.length === 1) { - // A missing field in a {{foo}} construct. - return undefined; - } else { - // Someone is actually trying to call something, blow up. - throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); - } - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 13 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - var _utils = __webpack_require__(4); - - exports['default'] = function (instance) { - instance.registerHelper('if', function (conditional, options) { - if (_utils.isFunction(conditional)) { - conditional = conditional.call(this); - } - - // Default behavior is to render the positive path if the value is truthy and not empty. - // The `includeZero` option may be set to treat the condtional as purely not empty based on the - // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. - if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - - instance.registerHelper('unless', function (conditional, options) { - return instance.helpers['if'].call(this, conditional, { fn: options.inverse, inverse: options.fn, hash: options.hash }); - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 14 */ -/***/ function(module, exports) { - - 'use strict'; - - exports.__esModule = true; - - exports['default'] = function (instance) { - instance.registerHelper('log', function () /* message, options */{ - var args = [undefined], - options = arguments[arguments.length - 1]; - for (var i = 0; i < arguments.length - 1; i++) { - args.push(arguments[i]); - } - - var level = 1; - if (options.hash.level != null) { - level = options.hash.level; - } else if (options.data && options.data.level != null) { - level = options.data.level; - } - args[0] = level; - - instance.log.apply(instance, args); - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 15 */ -/***/ function(module, exports) { - - 'use strict'; - - exports.__esModule = true; - - exports['default'] = function (instance) { - instance.registerHelper('lookup', function (obj, field) { - return obj && obj[field]; - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 16 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - var _utils = __webpack_require__(4); - - exports['default'] = function (instance) { - instance.registerHelper('with', function (context, options) { - if (_utils.isFunction(context)) { - context = context.call(this); - } - - var fn = options.fn; - - if (!_utils.isEmpty(context)) { - var data = options.data; - if (options.data && options.ids) { - data = _utils.createFrame(options.data); - data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); - } - - return fn(context, { - data: data, - blockParams: _utils.blockParams([context], [data && data.contextPath]) - }); - } else { - return options.inverse(this); - } - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 17 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireDefault = __webpack_require__(2)['default']; - - exports.__esModule = true; - exports.registerDefaultDecorators = registerDefaultDecorators; - - var _decoratorsInline = __webpack_require__(18); - - var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline); - - function registerDefaultDecorators(instance) { - _decoratorsInline2['default'](instance); - } - -/***/ }, -/* 18 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - var _utils = __webpack_require__(4); - - exports['default'] = function (instance) { - instance.registerDecorator('inline', function (fn, props, container, options) { - var ret = fn; - if (!props.partials) { - props.partials = {}; - ret = function (context, options) { - // Create a new partials stack frame prior to exec. - var original = container.partials; - container.partials = _utils.extend({}, original, props.partials); - var ret = fn(context, options); - container.partials = original; - return ret; - }; - } - - props.partials[options.args[0]] = options.fn; - - return ret; - }); - }; - - module.exports = exports['default']; - -/***/ }, -/* 19 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - exports.__esModule = true; - - var _utils = __webpack_require__(4); - - var logger = { - methodMap: ['debug', 'info', 'warn', 'error'], - level: 'info', - - // Maps a given level value to the `methodMap` indexes above. - lookupLevel: function lookupLevel(level) { - if (typeof level === 'string') { - var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); - if (levelMap >= 0) { - level = levelMap; - } else { - level = parseInt(level, 10); - } - } - - return level; - }, - - // Can be overridden in the host environment - log: function log(level) { - level = logger.lookupLevel(level); - - if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { - var method = logger.methodMap[level]; - if (!console[method]) { - // eslint-disable-line no-console - method = 'log'; - } - - for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - message[_key - 1] = arguments[_key]; - } - - console[method].apply(console, message); // eslint-disable-line no-console - } - } - }; - - exports['default'] = logger; - module.exports = exports['default']; - -/***/ }, -/* 20 */ -/***/ function(module, exports) { - - // Build out our basic SafeString type - 'use strict'; - - exports.__esModule = true; - function SafeString(string) { - this.string = string; - } - - SafeString.prototype.toString = SafeString.prototype.toHTML = function () { - return '' + this.string; - }; - - exports['default'] = SafeString; - module.exports = exports['default']; - -/***/ }, -/* 21 */ -/***/ function(module, exports, __webpack_require__) { - - 'use strict'; - - var _interopRequireWildcard = __webpack_require__(1)['default']; - - var _interopRequireDefault = __webpack_require__(2)['default']; - - exports.__esModule = true; - exports.checkRevision = checkRevision; - exports.template = template; - exports.wrapProgram = wrapProgram; - exports.resolvePartial = resolvePartial; - exports.invokePartial = invokePartial; - exports.noop = noop; - - var _utils = __webpack_require__(4); - - var Utils = _interopRequireWildcard(_utils); - - var _exception = __webpack_require__(5); - - var _exception2 = _interopRequireDefault(_exception); - - var _base = __webpack_require__(3); - - function checkRevision(compilerInfo) { - var compilerRevision = compilerInfo && compilerInfo[0] || 1, - currentRevision = _base.COMPILER_REVISION; - - if (compilerRevision !== currentRevision) { - if (compilerRevision < currentRevision) { - var runtimeVersions = _base.REVISION_CHANGES[currentRevision], - compilerVersions = _base.REVISION_CHANGES[compilerRevision]; - throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); - } else { - // Use the embedded version info since the runtime doesn't know about this revision yet - throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); - } - } - } - - function template(templateSpec, env) { - /* istanbul ignore next */ - if (!env) { - throw new _exception2['default']('No environment passed to template'); - } - if (!templateSpec || !templateSpec.main) { - throw new _exception2['default']('Unknown template object: ' + typeof templateSpec); - } - - templateSpec.main.decorator = templateSpec.main_d; - - // Note: Using env.VM references rather than local var references throughout this section to allow - // for external users to override these as psuedo-supported APIs. - env.VM.checkRevision(templateSpec.compiler); - - function invokePartialWrapper(partial, context, options) { - if (options.hash) { - context = Utils.extend({}, context, options.hash); - if (options.ids) { - options.ids[0] = true; - } - } - - partial = env.VM.resolvePartial.call(this, partial, context, options); - var result = env.VM.invokePartial.call(this, partial, context, options); - - if (result == null && env.compile) { - options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); - result = options.partials[options.name](context, options); - } - if (result != null) { - if (options.indent) { - var lines = result.split('\n'); - for (var i = 0, l = lines.length; i < l; i++) { - if (!lines[i] && i + 1 === l) { - break; - } - - lines[i] = options.indent + lines[i]; - } - result = lines.join('\n'); - } - return result; - } else { - throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); - } - } - - // Just add water - var container = { - strict: function strict(obj, name) { - if (!(name in obj)) { - throw new _exception2['default']('"' + name + '" not defined in ' + obj); - } - return obj[name]; - }, - lookup: function lookup(depths, name) { - var len = depths.length; - for (var i = 0; i < len; i++) { - if (depths[i] && depths[i][name] != null) { - return depths[i][name]; - } - } - }, - lambda: function lambda(current, context) { - return typeof current === 'function' ? current.call(context) : current; - }, - - escapeExpression: Utils.escapeExpression, - invokePartial: invokePartialWrapper, - - fn: function fn(i) { - var ret = templateSpec[i]; - ret.decorator = templateSpec[i + '_d']; - return ret; - }, - - programs: [], - program: function program(i, data, declaredBlockParams, blockParams, depths) { - var programWrapper = this.programs[i], - fn = this.fn(i); - if (data || depths || blockParams || declaredBlockParams) { - programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); - } else if (!programWrapper) { - programWrapper = this.programs[i] = wrapProgram(this, i, fn); - } - return programWrapper; - }, - - data: function data(value, depth) { - while (value && depth--) { - value = value._parent; - } - return value; - }, - merge: function merge(param, common) { - var obj = param || common; - - if (param && common && param !== common) { - obj = Utils.extend({}, common, param); - } - - return obj; - }, - - noop: env.VM.noop, - compilerInfo: templateSpec.compiler - }; - - function ret(context) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var data = options.data; - - ret._setup(options); - if (!options.partial && templateSpec.useData) { - data = initData(context, data); - } - var depths = undefined, - blockParams = templateSpec.useBlockParams ? [] : undefined; - if (templateSpec.useDepths) { - if (options.depths) { - depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; - } else { - depths = [context]; - } - } - - function main(context /*, options*/) { - return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); - } - main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); - return main(context, options); - } - ret.isTop = true; - - ret._setup = function (options) { - if (!options.partial) { - container.helpers = container.merge(options.helpers, env.helpers); - - if (templateSpec.usePartial) { - container.partials = container.merge(options.partials, env.partials); - } - if (templateSpec.usePartial || templateSpec.useDecorators) { - container.decorators = container.merge(options.decorators, env.decorators); - } - } else { - container.helpers = options.helpers; - container.partials = options.partials; - container.decorators = options.decorators; - } - }; - - ret._child = function (i, data, blockParams, depths) { - if (templateSpec.useBlockParams && !blockParams) { - throw new _exception2['default']('must pass block params'); - } - if (templateSpec.useDepths && !depths) { - throw new _exception2['default']('must pass parent depths'); - } - - return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); - }; - return ret; - } - - function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { - function prog(context) { - var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; - - var currentDepths = depths; - if (depths && context != depths[0]) { - currentDepths = [context].concat(depths); - } - - return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); - } - - prog = executeDecorators(fn, prog, container, depths, data, blockParams); - - prog.program = i; - prog.depth = depths ? depths.length : 0; - prog.blockParams = declaredBlockParams || 0; - return prog; - } - - function resolvePartial(partial, context, options) { - if (!partial) { - if (options.name === '@partial-block') { - var data = options.data; - while (data['partial-block'] === noop) { - data = data._parent; - } - partial = data['partial-block']; - data['partial-block'] = noop; - } else { - partial = options.partials[options.name]; - } - } else if (!partial.call && !options.name) { - // This is a dynamic partial that returned a string - options.name = partial; - partial = options.partials[partial]; - } - return partial; - } - - function invokePartial(partial, context, options) { - options.partial = true; - if (options.ids) { - options.data.contextPath = options.ids[0] || options.data.contextPath; - } - - var partialBlock = undefined; - if (options.fn && options.fn !== noop) { - options.data = _base.createFrame(options.data); - partialBlock = options.data['partial-block'] = options.fn; - - if (partialBlock.partials) { - options.partials = Utils.extend({}, options.partials, partialBlock.partials); - } - } - - if (partial === undefined && partialBlock) { - partial = partialBlock; - } - - if (partial === undefined) { - throw new _exception2['default']('The partial ' + options.name + ' could not be found'); - } else if (partial instanceof Function) { - return partial(context, options); - } - } - - function noop() { - return ''; - } - - function initData(context, data) { - if (!data || !('root' in data)) { - data = data ? _base.createFrame(data) : {}; - data.root = context; - } - return data; - } - - function executeDecorators(fn, prog, container, depths, data, blockParams) { - if (fn.decorator) { - var props = {}; - prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); - Utils.extend(prog, props); - } - return prog; - } - -/***/ }, -/* 22 */ -/***/ function(module, exports) { - - /* WEBPACK VAR INJECTION */(function(global) {/* global window */ - 'use strict'; - - exports.__esModule = true; - - exports['default'] = function (Handlebars) { - /* istanbul ignore next */ - var root = typeof global !== 'undefined' ? global : window, - $Handlebars = root.Handlebars; - /* istanbul ignore next */ - Handlebars.noConflict = function () { - if (root.Handlebars === Handlebars) { - root.Handlebars = $Handlebars; - } - return Handlebars; - }; - }; - - module.exports = exports['default']; - /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) - -/***/ } -/******/ ]) -}); -; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.runtime.min.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.runtime.min.js deleted file mode 100644 index bb16b55c6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/dist/handlebars.runtime.min.js +++ /dev/null @@ -1,79 +0,0 @@ -/**! - - @license - handlebars v4.0.6 - -Copyright (C) 2011-2016 by Yehuda Katz - -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. - -*/ -/**! - - @license - handlebars v4.0.6 - -Copyright (C) 2011-2016 by Yehuda Katz - -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. - -*/ -/**! - - @license - handlebars v4.0.6 - -Copyright (C) 2011-2016 by Yehuda Katz - -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. - -*/ -!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Handlebars=b():a.Handlebars=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){"use strict";function d(){var a=new h.HandlebarsEnvironment;return n.extend(a,h),a.SafeString=j["default"],a.Exception=l["default"],a.Utils=n,a.escapeExpression=n.escapeExpression,a.VM=p,a.template=function(b){return p.template(b,a)},a}var e=c(1)["default"],f=c(2)["default"];b.__esModule=!0;var g=c(3),h=e(g),i=c(20),j=f(i),k=c(5),l=f(k),m=c(4),n=e(m),o=c(21),p=e(o),q=c(22),r=f(q),s=d();s.create=d,r["default"](s),s["default"]=s,b["default"]=s,a.exports=b["default"]},function(a,b){"use strict";b["default"]=function(a){if(a&&a.__esModule)return a;var b={};if(null!=a)for(var c in a)Object.prototype.hasOwnProperty.call(a,c)&&(b[c]=a[c]);return b["default"]=a,b},b.__esModule=!0},function(a,b){"use strict";b["default"]=function(a){return a&&a.__esModule?a:{"default":a}},b.__esModule=!0},function(a,b,c){"use strict";function d(a,b,c){this.helpers=a||{},this.partials=b||{},this.decorators=c||{},i.registerDefaultHelpers(this),j.registerDefaultDecorators(this)}var e=c(2)["default"];b.__esModule=!0,b.HandlebarsEnvironment=d;var f=c(4),g=c(5),h=e(g),i=c(9),j=c(17),k=c(19),l=e(k),m="4.0.5";b.VERSION=m;var n=7;b.COMPILER_REVISION=n;var o={1:"<= 1.0.rc.2",2:"== 1.0.0-rc.3",3:"== 1.0.0-rc.4",4:"== 1.x.x",5:"== 2.0.0-alpha.x",6:">= 2.0.0-beta.1",7:">= 4.0.0"};b.REVISION_CHANGES=o;var p="[object Object]";d.prototype={constructor:d,logger:l["default"],log:l["default"].log,registerHelper:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple helpers");f.extend(this.helpers,a)}else this.helpers[a]=b},unregisterHelper:function(a){delete this.helpers[a]},registerPartial:function(a,b){if(f.toString.call(a)===p)f.extend(this.partials,a);else{if("undefined"==typeof b)throw new h["default"]('Attempting to register a partial called "'+a+'" as undefined');this.partials[a]=b}},unregisterPartial:function(a){delete this.partials[a]},registerDecorator:function(a,b){if(f.toString.call(a)===p){if(b)throw new h["default"]("Arg not supported with multiple decorators");f.extend(this.decorators,a)}else this.decorators[a]=b},unregisterDecorator:function(a){delete this.decorators[a]}};var q=l["default"].log;b.log=q,b.createFrame=f.createFrame,b.logger=l["default"]},function(a,b){"use strict";function c(a){return k[a]}function d(a){for(var b=1;b":">",'"':""","'":"'","`":"`","=":"="},l=/[&<>"'`=]/g,m=/[&<>"'`=]/,n=Object.prototype.toString;b.toString=n;var o=function(a){return"function"==typeof a};o(/x/)&&(b.isFunction=o=function(a){return"function"==typeof a&&"[object Function]"===n.call(a)}),b.isFunction=o;var p=Array.isArray||function(a){return!(!a||"object"!=typeof a)&&"[object Array]"===n.call(a)};b.isArray=p},function(a,b,c){"use strict";function d(a,b){var c=b&&b.loc,g=void 0,h=void 0;c&&(g=c.start.line,h=c.start.column,a+=" - "+g+":"+h);for(var i=Error.prototype.constructor.call(this,a),j=0;j0?(c.ids&&(c.ids=[c.name]),a.helpers.each(b,c)):e(this);if(c.data&&c.ids){var g=d.createFrame(c.data);g.contextPath=d.appendContextPath(c.data.contextPath,c.name),c={data:g}}return f(b,c)})},a.exports=b["default"]},function(a,b,c){"use strict";var d=c(2)["default"];b.__esModule=!0;var e=c(4),f=c(5),g=d(f);b["default"]=function(a){a.registerHelper("each",function(a,b){function c(b,c,f){j&&(j.key=b,j.index=c,j.first=0===c,j.last=!!f,k&&(j.contextPath=k+b)),i+=d(a[b],{data:j,blockParams:e.blockParams([a[b],b],[k+b,null])})}if(!b)throw new g["default"]("Must pass iterator to #each");var d=b.fn,f=b.inverse,h=0,i="",j=void 0,k=void 0;if(b.data&&b.ids&&(k=e.appendContextPath(b.data.contextPath,b.ids[0])+"."),e.isFunction(a)&&(a=a.call(this)),b.data&&(j=e.createFrame(b.data)),a&&"object"==typeof a)if(e.isArray(a))for(var l=a.length;h=0?b:parseInt(a,10)}return a},log:function(a){if(a=e.lookupLevel(a),"undefined"!=typeof console&&e.lookupLevel(e.level)<=a){var b=e.methodMap[a];console[b]||(b="log");for(var c=arguments.length,d=Array(c>1?c-1:0),f=1;f= 1; - column: uint >= 0; -} -``` - -### Programs - -```java -interface Program <: Node { - type: "Program"; - body: [ Statement ]; - - blockParams: [ string ]; -} -``` - -### Statements - -```java -interface Statement <: Node { } - -interface MustacheStatement <: Statement { - type: "MustacheStatement"; - - path: PathExpression | Literal; - params: [ Expression ]; - hash: Hash; - - escaped: boolean; - strip: StripFlags | null; -} - -interface BlockStatement <: Statement { - type: "BlockStatement"; - path: PathExpression; - params: [ Expression ]; - hash: Hash; - - program: Program | null; - inverse: Program | null; - - openStrip: StripFlags | null; - inverseStrip: StripFlags | null; - closeStrip: StripFlags | null; -} - -interface PartialStatement <: Statement { - type: "PartialStatement"; - name: PathExpression | SubExpression; - params: [ Expression ]; - hash: Hash; - - indent: string; - strip: StripFlags | null; -} - -interface PartialBlockStatement <: Statement { - type: "PartialBlockStatement"; - name: PathExpression | SubExpression; - params: [ Expression ]; - hash: Hash; - - program: Program | null; - - indent: string; - openStrip: StripFlags | null; - closeStrip: StripFlags | null; -} -``` - -`name` will be a `SubExpression` when tied to a dynamic partial, i.e. `{{> (foo) }}`, otherwise this is a path or literal whose `original` value is used to lookup the desired partial. - - -```java -interface ContentStatement <: Statement { - type: "ContentStatement"; - value: string; - original: string; -} - -interface CommentStatement <: Statement { - type: "CommentStatement"; - value: string; - - strip: StripFlags | null; -} -``` - - -```java -interface Decorator <: Statement { - type: "Decorator"; - - path: PathExpression | Literal; - params: [ Expression ]; - hash: Hash; - - strip: StripFlags | null; -} - -interface DecoratorBlock <: Statement { - type: "DecoratorBlock"; - path: PathExpression | Literal; - params: [ Expression ]; - hash: Hash; - - program: Program | null; - - openStrip: StripFlags | null; - closeStrip: StripFlags | null; -} -``` - -Decorator paths only utilize the `path.original` value and as a consequence do not support depthed evaluation. - -### Expressions - -```java -interface Expression <: Node { } -``` - -##### SubExpressions - -```java -interface SubExpression <: Expression { - type: "SubExpression"; - path: PathExpression; - params: [ Expression ]; - hash: Hash; -} -``` - -##### Paths - -```java -interface PathExpression <: Expression { - type: "PathExpression"; - data: boolean; - depth: uint >= 0; - parts: [ string ]; - original: string; -} -``` - -- `data` is true when the given expression is a `@data` reference. -- `depth` is an integer representation of which context the expression references. `0` represents the current context, `1` would be `../`, etc. -- `parts` is an array of the names in the path. `foo.bar` would be `['foo', 'bar']`. Scope references, `.`, `..`, and `this` should be omitted from this array. -- `original` is the path as entered by the user. Separator and scope references are left untouched. - - -##### Literals - -```java -interface Literal <: Expression { } - -interface StringLiteral <: Literal { - type: "StringLiteral"; - value: string; - original: string; -} - -interface BooleanLiteral <: Literal { - type: "BooleanLiteral"; - value: boolean; - original: boolean; -} - -interface NumberLiteral <: Literal { - type: "NumberLiteral"; - value: number; - original: number; -} - -interface UndefinedLiteral <: Literal { - type: "UndefinedLiteral"; -} - -interface NullLiteral <: Literal { - type: "NullLiteral"; -} -``` - - -### Miscellaneous - -```java -interface Hash <: Node { - type: "Hash"; - pairs: [ HashPair ]; -} - -interface HashPair <: Node { - type: "HashPair"; - key: string; - value: Expression; -} - -interface StripFlags { - open: boolean; - close: boolean; -} -``` - -`StripFlags` are used to signify whitespace control character that may have been entered on a given statement. - -## AST Visitor - -`Handlebars.Visitor` is available as a base class for general interaction with AST structures. This will by default traverse the entire tree and individual methods may be overridden to provide specific responses to particular nodes. - -Recording all referenced partial names: - -```javascript -var Visitor = Handlebars.Visitor; - -function ImportScanner() { - this.partials = []; -} -ImportScanner.prototype = new Visitor(); - -ImportScanner.prototype.PartialStatement = function(partial) { - this.partials.push({request: partial.name.original}); - - Visitor.prototype.PartialStatement.call(this, partial); -}; - -var scanner = new ImportScanner(); -scanner.accept(ast); -``` - -The current node's ancestors will be maintained in the `parents` array, with the most recent parent listed first. - -The visitor may also be configured to operate in mutation mode by setting the `mutation` field to true. When in this mode, handler methods may return any valid AST node and it will replace the one they are currently operating on. Returning `false` will remove the given value (if valid) and returning `undefined` will leave the node in tact. This return structure only apply to mutation mode and non-mutation mode visitors are free to return whatever values they wish. - -Implementors that may need to support mutation mode are encouraged to utilize the `acceptKey`, `acceptRequired` and `acceptArray` helpers which provide the conditional overwrite behavior as well as implement sanity checks where pertinent. - -## JavaScript Compiler - -The `Handlebars.JavaScriptCompiler` object has a number of methods that may be customized to alter the output of the compiler: - -- `nameLookup(parent, name, type)` - Used to generate the code to resolve a give path component. - - - `parent` is the existing code in the path resolution - - `name` is the current path component - - `type` is the type of name being evaluated. May be one of `context`, `data`, `helper`, `decorator`, or `partial`. - - Note that this does not impact dynamic partials, which implementors need to be aware of. Overriding `VM.resolvePartial` may be required to support dynamic cases. - -- `depthedLookup(name)` - Used to generate code that resolves parameters within any context in the stack. Is only used in `compat` mode. - -- `compilerInfo()` - Allows for custom compiler flags used in the runtime version checking logic. - -- `appendToBuffer(source, location, explicit)` - Allows for code buffer emitting code. Defaults behavior is string concatenation. - - - `source` is the source code whose result is to be appending - - `location` is the location of the source in the source map. - - `explicit` is a flag signaling that the emit operation must occur, vs. the lazy evaled options otherwise. - -- `initializeBuffer()` - Allows for buffers other than the default string buffer to be used. Generally needs to be paired with a custom `appendToBuffer` implementation. - -```javascript -function MyCompiler() { - Handlebars.JavaScriptCompiler.apply(this, arguments); -} -MyCompiler.prototype = Object.create(Handlebars.JavaScriptCompiler); - -MyCompiler.nameLookup = function(parent, name, type) { - if (type === 'partial') { - return 'MyPartialList[' + JSON.stringify(name) ']'; - } else { - return Handlebars.JavaScriptCompiler.prototype.nameLookup.call(this, parent, name, type); - } -}; - -var env = Handlebars.create(); -env.JavaScriptCompiler = MyCompiler; -env.compile('my template'); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/docs/decorators-api.md b/fundamentals/bug-challenge-es6/node_modules/handlebars/docs/decorators-api.md deleted file mode 100644 index 566c7eb87..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/docs/decorators-api.md +++ /dev/null @@ -1,19 +0,0 @@ -# Decorators - -Decorators allow for blocks to be annotated with metadata or wrapped in functionality prior to execution of the block. This may be used to communicate with the containing helper or to setup a particular state in the system prior to running the block. - -Decorators are registered through similar methods as helpers, `registerDecorators` and `unregisterDecorators`. These can then be referenced via the friendly name in the template using the `{{* decorator}}` and `{{#* decorator}}{/decorator}}` syntaxes. These syntaxes are derivatives of the normal mustache syntax and as such have all of the same argument and whitespace behaviors. - -Decorators are executed when the block program is instantiated and are passed `(program, props, container, context, data, blockParams, depths)`. - -- `program`: The block to wrap -- `props`: Object used to set metadata on the final function. Any values set on this object will be set on the function, regardless of if the original function is replaced or not. Metadata should be applied using this object as values applied to `program` may be masked by subsequent decorators that may wrap `program`. -- `container`: The current runtime container -- `context`: The current context. Since the decorator is run before the block that contains it, this is the parent context. -- `data`: The current `@data` values -- `blockParams`: The current block parameters stack -- `depths`: The current context stack - -Decorators may set values on `props` or return a modified function that wraps `program` in particular behaviors. If the decorator returns nothing, then `program` is left unaltered. - -The [inline partial](https://github.com/wycats/handlebars.js/blob/master/lib/handlebars/decorators/inline.js) implementation provides an example of decorators being used for both metadata and wrapping behaviors. diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars.js deleted file mode 100644 index f11495905..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars.js +++ /dev/null @@ -1,41 +0,0 @@ -import runtime from './handlebars.runtime'; - -// Compiler imports -import AST from './handlebars/compiler/ast'; -import { parser as Parser, parse } from './handlebars/compiler/base'; -import { Compiler, compile, precompile } from './handlebars/compiler/compiler'; -import JavaScriptCompiler from './handlebars/compiler/javascript-compiler'; -import Visitor from './handlebars/compiler/visitor'; - -import noConflict from './handlebars/no-conflict'; - -let _create = runtime.create; -function create() { - let hb = _create(); - - hb.compile = function(input, options) { - return compile(input, options, hb); - }; - hb.precompile = function(input, options) { - return precompile(input, options, hb); - }; - - hb.AST = AST; - hb.Compiler = Compiler; - hb.JavaScriptCompiler = JavaScriptCompiler; - hb.Parser = Parser; - hb.parse = parse; - - return hb; -} - -let inst = create(); -inst.create = create; - -noConflict(inst); - -inst.Visitor = Visitor; - -inst['default'] = inst; - -export default inst; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars.runtime.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars.runtime.js deleted file mode 100644 index 3d05b5448..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars.runtime.js +++ /dev/null @@ -1,37 +0,0 @@ -import * as base from './handlebars/base'; - -// Each of these augment the Handlebars object. No need to setup here. -// (This is done to easily share code between commonjs and browse envs) -import SafeString from './handlebars/safe-string'; -import Exception from './handlebars/exception'; -import * as Utils from './handlebars/utils'; -import * as runtime from './handlebars/runtime'; - -import noConflict from './handlebars/no-conflict'; - -// For compatibility and usage outside of module systems, make the Handlebars object a namespace -function create() { - let hb = new base.HandlebarsEnvironment(); - - Utils.extend(hb, base); - hb.SafeString = SafeString; - hb.Exception = Exception; - hb.Utils = Utils; - hb.escapeExpression = Utils.escapeExpression; - - hb.VM = runtime; - hb.template = function(spec) { - return runtime.template(spec, hb); - }; - - return hb; -} - -let inst = create(); -inst.create = create; - -noConflict(inst); - -inst['default'] = inst; - -export default inst; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/base.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/base.js deleted file mode 100644 index 155e7ca04..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/base.js +++ /dev/null @@ -1,78 +0,0 @@ -import {createFrame, extend, toString} from './utils'; -import Exception from './exception'; -import {registerDefaultHelpers} from './helpers'; -import {registerDefaultDecorators} from './decorators'; -import logger from './logger'; - -export const VERSION = '4.0.6'; -export const COMPILER_REVISION = 7; - -export const REVISION_CHANGES = { - 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it - 2: '== 1.0.0-rc.3', - 3: '== 1.0.0-rc.4', - 4: '== 1.x.x', - 5: '== 2.0.0-alpha.x', - 6: '>= 2.0.0-beta.1', - 7: '>= 4.0.0' -}; - -const objectType = '[object Object]'; - -export function HandlebarsEnvironment(helpers, partials, decorators) { - this.helpers = helpers || {}; - this.partials = partials || {}; - this.decorators = decorators || {}; - - registerDefaultHelpers(this); - registerDefaultDecorators(this); -} - -HandlebarsEnvironment.prototype = { - constructor: HandlebarsEnvironment, - - logger: logger, - log: logger.log, - - registerHelper: function(name, fn) { - if (toString.call(name) === objectType) { - if (fn) { throw new Exception('Arg not supported with multiple helpers'); } - extend(this.helpers, name); - } else { - this.helpers[name] = fn; - } - }, - unregisterHelper: function(name) { - delete this.helpers[name]; - }, - - registerPartial: function(name, partial) { - if (toString.call(name) === objectType) { - extend(this.partials, name); - } else { - if (typeof partial === 'undefined') { - throw new Exception(`Attempting to register a partial called "${name}" as undefined`); - } - this.partials[name] = partial; - } - }, - unregisterPartial: function(name) { - delete this.partials[name]; - }, - - registerDecorator: function(name, fn) { - if (toString.call(name) === objectType) { - if (fn) { throw new Exception('Arg not supported with multiple decorators'); } - extend(this.decorators, name); - } else { - this.decorators[name] = fn; - } - }, - unregisterDecorator: function(name) { - delete this.decorators[name]; - } -}; - -export let log = logger.log; - -export {createFrame, logger}; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/ast.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/ast.js deleted file mode 100644 index 1699569ba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/ast.js +++ /dev/null @@ -1,28 +0,0 @@ -let AST = { - // Public API used to evaluate derived attributes regarding AST nodes - helpers: { - // a mustache is definitely a helper if: - // * it is an eligible helper, and - // * it has at least one parameter or hash segment - helperExpression: function(node) { - return (node.type === 'SubExpression') - || ((node.type === 'MustacheStatement' || node.type === 'BlockStatement') - && !!((node.params && node.params.length) || node.hash)); - }, - - scopedId: function(path) { - return (/^\.|this\b/).test(path.original); - }, - - // an ID is simple if it only has one part, and that part is not - // `..` or `this`. - simpleId: function(path) { - return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth; - } - } -}; - - -// Must be exported as an object rather than the root of the module as the jison lexer -// must modify the object to operate properly. -export default AST; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/base.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/base.js deleted file mode 100644 index c6871d399..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/base.js +++ /dev/null @@ -1,24 +0,0 @@ -import parser from './parser'; -import WhitespaceControl from './whitespace-control'; -import * as Helpers from './helpers'; -import { extend } from '../utils'; - -export { parser }; - -let yy = {}; -extend(yy, Helpers); - -export function parse(input, options) { - // Just return if an already-compiled AST was passed in. - if (input.type === 'Program') { return input; } - - parser.yy = yy; - - // Altering the shared object here, but this is ok as parser is a sync operation - yy.locInfo = function(locInfo) { - return new yy.SourceLocation(options && options.srcName, locInfo); - }; - - let strip = new WhitespaceControl(options); - return strip.accept(parser.parse(input)); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/code-gen.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/code-gen.js deleted file mode 100644 index 5ec052f77..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/code-gen.js +++ /dev/null @@ -1,168 +0,0 @@ -/* global define */ -import {isArray} from '../utils'; - -let SourceNode; - -try { - /* istanbul ignore next */ - if (typeof define !== 'function' || !define.amd) { - // We don't support this in AMD environments. For these environments, we asusme that - // they are running on the browser and thus have no need for the source-map library. - let SourceMap = require('source-map'); - SourceNode = SourceMap.SourceNode; - } -} catch (err) { - /* NOP */ -} - -/* istanbul ignore if: tested but not covered in istanbul due to dist build */ -if (!SourceNode) { - SourceNode = function(line, column, srcFile, chunks) { - this.src = ''; - if (chunks) { - this.add(chunks); - } - }; - /* istanbul ignore next */ - SourceNode.prototype = { - add: function(chunks) { - if (isArray(chunks)) { - chunks = chunks.join(''); - } - this.src += chunks; - }, - prepend: function(chunks) { - if (isArray(chunks)) { - chunks = chunks.join(''); - } - this.src = chunks + this.src; - }, - toStringWithSourceMap: function() { - return {code: this.toString()}; - }, - toString: function() { - return this.src; - } - }; -} - - -function castChunk(chunk, codeGen, loc) { - if (isArray(chunk)) { - let ret = []; - - for (let i = 0, len = chunk.length; i < len; i++) { - ret.push(codeGen.wrap(chunk[i], loc)); - } - return ret; - } else if (typeof chunk === 'boolean' || typeof chunk === 'number') { - // Handle primitives that the SourceNode will throw up on - return chunk + ''; - } - return chunk; -} - - -function CodeGen(srcFile) { - this.srcFile = srcFile; - this.source = []; -} - -CodeGen.prototype = { - isEmpty() { - return !this.source.length; - }, - prepend: function(source, loc) { - this.source.unshift(this.wrap(source, loc)); - }, - push: function(source, loc) { - this.source.push(this.wrap(source, loc)); - }, - - merge: function() { - let source = this.empty(); - this.each(function(line) { - source.add([' ', line, '\n']); - }); - return source; - }, - - each: function(iter) { - for (let i = 0, len = this.source.length; i < len; i++) { - iter(this.source[i]); - } - }, - - empty: function() { - let loc = this.currentLocation || {start: {}}; - return new SourceNode(loc.start.line, loc.start.column, this.srcFile); - }, - wrap: function(chunk, loc = this.currentLocation || {start: {}}) { - if (chunk instanceof SourceNode) { - return chunk; - } - - chunk = castChunk(chunk, this, loc); - - return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk); - }, - - functionCall: function(fn, type, params) { - params = this.generateList(params); - return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']); - }, - - quotedString: function(str) { - return '"' + (str + '') - .replace(/\\/g, '\\\\') - .replace(/"/g, '\\"') - .replace(/\n/g, '\\n') - .replace(/\r/g, '\\r') - .replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4 - .replace(/\u2029/g, '\\u2029') + '"'; - }, - - objectLiteral: function(obj) { - let pairs = []; - - for (let key in obj) { - if (obj.hasOwnProperty(key)) { - let value = castChunk(obj[key], this); - if (value !== 'undefined') { - pairs.push([this.quotedString(key), ':', value]); - } - } - } - - let ret = this.generateList(pairs); - ret.prepend('{'); - ret.add('}'); - return ret; - }, - - - generateList: function(entries) { - let ret = this.empty(); - - for (let i = 0, len = entries.length; i < len; i++) { - if (i) { - ret.add(','); - } - - ret.add(castChunk(entries[i], this)); - } - - return ret; - }, - - generateArray: function(entries) { - let ret = this.generateList(entries); - ret.prepend('['); - ret.add(']'); - - return ret; - } -}; - -export default CodeGen; - diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/compiler.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/compiler.js deleted file mode 100644 index 987d0d459..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/compiler.js +++ /dev/null @@ -1,558 +0,0 @@ -/* eslint-disable new-cap */ - -import Exception from '../exception'; -import {isArray, indexOf} from '../utils'; -import AST from './ast'; - -const slice = [].slice; - -export function Compiler() {} - -// the foundHelper register will disambiguate helper lookup from finding a -// function in a context. This is necessary for mustache compatibility, which -// requires that context functions in blocks are evaluated by blockHelperMissing, -// and then proceed as if the resulting value was provided to blockHelperMissing. - -Compiler.prototype = { - compiler: Compiler, - - equals: function(other) { - let len = this.opcodes.length; - if (other.opcodes.length !== len) { - return false; - } - - for (let i = 0; i < len; i++) { - let opcode = this.opcodes[i], - otherOpcode = other.opcodes[i]; - if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) { - return false; - } - } - - // We know that length is the same between the two arrays because they are directly tied - // to the opcode behavior above. - len = this.children.length; - for (let i = 0; i < len; i++) { - if (!this.children[i].equals(other.children[i])) { - return false; - } - } - - return true; - }, - - guid: 0, - - compile: function(program, options) { - this.sourceNode = []; - this.opcodes = []; - this.children = []; - this.options = options; - this.stringParams = options.stringParams; - this.trackIds = options.trackIds; - - options.blockParams = options.blockParams || []; - - // These changes will propagate to the other compiler components - let knownHelpers = options.knownHelpers; - options.knownHelpers = { - 'helperMissing': true, - 'blockHelperMissing': true, - 'each': true, - 'if': true, - 'unless': true, - 'with': true, - 'log': true, - 'lookup': true - }; - if (knownHelpers) { - for (let name in knownHelpers) { - /* istanbul ignore else */ - if (name in knownHelpers) { - options.knownHelpers[name] = knownHelpers[name]; - } - } - } - - return this.accept(program); - }, - - compileProgram: function(program) { - let childCompiler = new this.compiler(), // eslint-disable-line new-cap - result = childCompiler.compile(program, this.options), - guid = this.guid++; - - this.usePartial = this.usePartial || result.usePartial; - - this.children[guid] = result; - this.useDepths = this.useDepths || result.useDepths; - - return guid; - }, - - accept: function(node) { - /* istanbul ignore next: Sanity code */ - if (!this[node.type]) { - throw new Exception('Unknown type: ' + node.type, node); - } - - this.sourceNode.unshift(node); - let ret = this[node.type](node); - this.sourceNode.shift(); - return ret; - }, - - Program: function(program) { - this.options.blockParams.unshift(program.blockParams); - - let body = program.body, - bodyLength = body.length; - for (let i = 0; i < bodyLength; i++) { - this.accept(body[i]); - } - - this.options.blockParams.shift(); - - this.isSimple = bodyLength === 1; - this.blockParams = program.blockParams ? program.blockParams.length : 0; - - return this; - }, - - BlockStatement: function(block) { - transformLiteralToPath(block); - - let program = block.program, - inverse = block.inverse; - - program = program && this.compileProgram(program); - inverse = inverse && this.compileProgram(inverse); - - let type = this.classifySexpr(block); - - if (type === 'helper') { - this.helperSexpr(block, program, inverse); - } else if (type === 'simple') { - this.simpleSexpr(block); - - // now that the simple mustache is resolved, we need to - // evaluate it by executing `blockHelperMissing` - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - this.opcode('emptyHash'); - this.opcode('blockValue', block.path.original); - } else { - this.ambiguousSexpr(block, program, inverse); - - // now that the simple mustache is resolved, we need to - // evaluate it by executing `blockHelperMissing` - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - this.opcode('emptyHash'); - this.opcode('ambiguousBlockValue'); - } - - this.opcode('append'); - }, - - DecoratorBlock(decorator) { - let program = decorator.program && this.compileProgram(decorator.program); - let params = this.setupFullMustacheParams(decorator, program, undefined), - path = decorator.path; - - this.useDecorators = true; - this.opcode('registerDecorator', params.length, path.original); - }, - - PartialStatement: function(partial) { - this.usePartial = true; - - let program = partial.program; - if (program) { - program = this.compileProgram(partial.program); - } - - let params = partial.params; - if (params.length > 1) { - throw new Exception('Unsupported number of partial arguments: ' + params.length, partial); - } else if (!params.length) { - if (this.options.explicitPartialContext) { - this.opcode('pushLiteral', 'undefined'); - } else { - params.push({type: 'PathExpression', parts: [], depth: 0}); - } - } - - let partialName = partial.name.original, - isDynamic = partial.name.type === 'SubExpression'; - if (isDynamic) { - this.accept(partial.name); - } - - this.setupFullMustacheParams(partial, program, undefined, true); - - let indent = partial.indent || ''; - if (this.options.preventIndent && indent) { - this.opcode('appendContent', indent); - indent = ''; - } - - this.opcode('invokePartial', isDynamic, partialName, indent); - this.opcode('append'); - }, - PartialBlockStatement: function(partialBlock) { - this.PartialStatement(partialBlock); - }, - - MustacheStatement: function(mustache) { - this.SubExpression(mustache); - - if (mustache.escaped && !this.options.noEscape) { - this.opcode('appendEscaped'); - } else { - this.opcode('append'); - } - }, - Decorator(decorator) { - this.DecoratorBlock(decorator); - }, - - - ContentStatement: function(content) { - if (content.value) { - this.opcode('appendContent', content.value); - } - }, - - CommentStatement: function() {}, - - SubExpression: function(sexpr) { - transformLiteralToPath(sexpr); - let type = this.classifySexpr(sexpr); - - if (type === 'simple') { - this.simpleSexpr(sexpr); - } else if (type === 'helper') { - this.helperSexpr(sexpr); - } else { - this.ambiguousSexpr(sexpr); - } - }, - ambiguousSexpr: function(sexpr, program, inverse) { - let path = sexpr.path, - name = path.parts[0], - isBlock = program != null || inverse != null; - - this.opcode('getContext', path.depth); - - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - - path.strict = true; - this.accept(path); - - this.opcode('invokeAmbiguous', name, isBlock); - }, - - simpleSexpr: function(sexpr) { - let path = sexpr.path; - path.strict = true; - this.accept(path); - this.opcode('resolvePossibleLambda'); - }, - - helperSexpr: function(sexpr, program, inverse) { - let params = this.setupFullMustacheParams(sexpr, program, inverse), - path = sexpr.path, - name = path.parts[0]; - - if (this.options.knownHelpers[name]) { - this.opcode('invokeKnownHelper', params.length, name); - } else if (this.options.knownHelpersOnly) { - throw new Exception('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr); - } else { - path.strict = true; - path.falsy = true; - - this.accept(path); - this.opcode('invokeHelper', params.length, path.original, AST.helpers.simpleId(path)); - } - }, - - PathExpression: function(path) { - this.addDepth(path.depth); - this.opcode('getContext', path.depth); - - let name = path.parts[0], - scoped = AST.helpers.scopedId(path), - blockParamId = !path.depth && !scoped && this.blockParamIndex(name); - - if (blockParamId) { - this.opcode('lookupBlockParam', blockParamId, path.parts); - } else if (!name) { - // Context reference, i.e. `{{foo .}}` or `{{foo ..}}` - this.opcode('pushContext'); - } else if (path.data) { - this.options.data = true; - this.opcode('lookupData', path.depth, path.parts, path.strict); - } else { - this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped); - } - }, - - StringLiteral: function(string) { - this.opcode('pushString', string.value); - }, - - NumberLiteral: function(number) { - this.opcode('pushLiteral', number.value); - }, - - BooleanLiteral: function(bool) { - this.opcode('pushLiteral', bool.value); - }, - - UndefinedLiteral: function() { - this.opcode('pushLiteral', 'undefined'); - }, - - NullLiteral: function() { - this.opcode('pushLiteral', 'null'); - }, - - Hash: function(hash) { - let pairs = hash.pairs, - i = 0, - l = pairs.length; - - this.opcode('pushHash'); - - for (; i < l; i++) { - this.pushParam(pairs[i].value); - } - while (i--) { - this.opcode('assignToHash', pairs[i].key); - } - this.opcode('popHash'); - }, - - // HELPERS - opcode: function(name) { - this.opcodes.push({ opcode: name, args: slice.call(arguments, 1), loc: this.sourceNode[0].loc }); - }, - - addDepth: function(depth) { - if (!depth) { - return; - } - - this.useDepths = true; - }, - - classifySexpr: function(sexpr) { - let isSimple = AST.helpers.simpleId(sexpr.path); - - let isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]); - - // a mustache is an eligible helper if: - // * its id is simple (a single part, not `this` or `..`) - let isHelper = !isBlockParam && AST.helpers.helperExpression(sexpr); - - // if a mustache is an eligible helper but not a definite - // helper, it is ambiguous, and will be resolved in a later - // pass or at runtime. - let isEligible = !isBlockParam && (isHelper || isSimple); - - // if ambiguous, we can possibly resolve the ambiguity now - // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc. - if (isEligible && !isHelper) { - let name = sexpr.path.parts[0], - options = this.options; - - if (options.knownHelpers[name]) { - isHelper = true; - } else if (options.knownHelpersOnly) { - isEligible = false; - } - } - - if (isHelper) { - return 'helper'; - } else if (isEligible) { - return 'ambiguous'; - } else { - return 'simple'; - } - }, - - pushParams: function(params) { - for (let i = 0, l = params.length; i < l; i++) { - this.pushParam(params[i]); - } - }, - - pushParam: function(val) { - let value = val.value != null ? val.value : val.original || ''; - - if (this.stringParams) { - if (value.replace) { - value = value - .replace(/^(\.?\.\/)*/g, '') - .replace(/\//g, '.'); - } - - if (val.depth) { - this.addDepth(val.depth); - } - this.opcode('getContext', val.depth || 0); - this.opcode('pushStringParam', value, val.type); - - if (val.type === 'SubExpression') { - // SubExpressions get evaluated and passed in - // in string params mode. - this.accept(val); - } - } else { - if (this.trackIds) { - let blockParamIndex; - if (val.parts && !AST.helpers.scopedId(val) && !val.depth) { - blockParamIndex = this.blockParamIndex(val.parts[0]); - } - if (blockParamIndex) { - let blockParamChild = val.parts.slice(1).join('.'); - this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild); - } else { - value = val.original || value; - if (value.replace) { - value = value - .replace(/^this(?:\.|$)/, '') - .replace(/^\.\//, '') - .replace(/^\.$/, ''); - } - - this.opcode('pushId', val.type, value); - } - } - this.accept(val); - } - }, - - setupFullMustacheParams: function(sexpr, program, inverse, omitEmpty) { - let params = sexpr.params; - this.pushParams(params); - - this.opcode('pushProgram', program); - this.opcode('pushProgram', inverse); - - if (sexpr.hash) { - this.accept(sexpr.hash); - } else { - this.opcode('emptyHash', omitEmpty); - } - - return params; - }, - - blockParamIndex: function(name) { - for (let depth = 0, len = this.options.blockParams.length; depth < len; depth++) { - let blockParams = this.options.blockParams[depth], - param = blockParams && indexOf(blockParams, name); - if (blockParams && param >= 0) { - return [depth, param]; - } - } - } -}; - -export function precompile(input, options, env) { - if (input == null || (typeof input !== 'string' && input.type !== 'Program')) { - throw new Exception('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input); - } - - options = options || {}; - if (!('data' in options)) { - options.data = true; - } - if (options.compat) { - options.useDepths = true; - } - - let ast = env.parse(input, options), - environment = new env.Compiler().compile(ast, options); - return new env.JavaScriptCompiler().compile(environment, options); -} - -export function compile(input, options = {}, env) { - if (input == null || (typeof input !== 'string' && input.type !== 'Program')) { - throw new Exception('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input); - } - - if (!('data' in options)) { - options.data = true; - } - if (options.compat) { - options.useDepths = true; - } - - let compiled; - - function compileInput() { - let ast = env.parse(input, options), - environment = new env.Compiler().compile(ast, options), - templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true); - return env.template(templateSpec); - } - - // Template is only compiled on first use and cached after that point. - function ret(context, execOptions) { - if (!compiled) { - compiled = compileInput(); - } - return compiled.call(this, context, execOptions); - } - ret._setup = function(setupOptions) { - if (!compiled) { - compiled = compileInput(); - } - return compiled._setup(setupOptions); - }; - ret._child = function(i, data, blockParams, depths) { - if (!compiled) { - compiled = compileInput(); - } - return compiled._child(i, data, blockParams, depths); - }; - return ret; -} - -function argEquals(a, b) { - if (a === b) { - return true; - } - - if (isArray(a) && isArray(b) && a.length === b.length) { - for (let i = 0; i < a.length; i++) { - if (!argEquals(a[i], b[i])) { - return false; - } - } - return true; - } -} - -function transformLiteralToPath(sexpr) { - if (!sexpr.path.parts) { - let literal = sexpr.path; - // Casting to string here to make false and 0 literal values play nicely with the rest - // of the system. - sexpr.path = { - type: 'PathExpression', - data: false, - depth: 0, - parts: [literal.original + ''], - original: literal.original + '', - loc: literal.loc - }; - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/helpers.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/helpers.js deleted file mode 100644 index e09a08df9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/helpers.js +++ /dev/null @@ -1,212 +0,0 @@ -import Exception from '../exception'; - -function validateClose(open, close) { - close = close.path ? close.path.original : close; - - if (open.path.original !== close) { - let errorNode = {loc: open.path.loc}; - - throw new Exception(open.path.original + " doesn't match " + close, errorNode); - } -} - -export function SourceLocation(source, locInfo) { - this.source = source; - this.start = { - line: locInfo.first_line, - column: locInfo.first_column - }; - this.end = { - line: locInfo.last_line, - column: locInfo.last_column - }; -} - -export function id(token) { - if (/^\[.*\]$/.test(token)) { - return token.substr(1, token.length - 2); - } else { - return token; - } -} - -export function stripFlags(open, close) { - return { - open: open.charAt(2) === '~', - close: close.charAt(close.length - 3) === '~' - }; -} - -export function stripComment(comment) { - return comment.replace(/^\{\{~?\!-?-?/, '') - .replace(/-?-?~?\}\}$/, ''); -} - -export function preparePath(data, parts, loc) { - loc = this.locInfo(loc); - - let original = data ? '@' : '', - dig = [], - depth = 0, - depthString = ''; - - for (let i = 0, l = parts.length; i < l; i++) { - let part = parts[i].part, - // If we have [] syntax then we do not treat path references as operators, - // i.e. foo.[this] resolves to approximately context.foo['this'] - isLiteral = parts[i].original !== part; - original += (parts[i].separator || '') + part; - - if (!isLiteral && (part === '..' || part === '.' || part === 'this')) { - if (dig.length > 0) { - throw new Exception('Invalid path: ' + original, {loc}); - } else if (part === '..') { - depth++; - depthString += '../'; - } - } else { - dig.push(part); - } - } - - return { - type: 'PathExpression', - data, - depth, - parts: dig, - original, - loc - }; -} - -export function prepareMustache(path, params, hash, open, strip, locInfo) { - // Must use charAt to support IE pre-10 - let escapeFlag = open.charAt(3) || open.charAt(2), - escaped = escapeFlag !== '{' && escapeFlag !== '&'; - - let decorator = (/\*/.test(open)); - return { - type: decorator ? 'Decorator' : 'MustacheStatement', - path, - params, - hash, - escaped, - strip, - loc: this.locInfo(locInfo) - }; -} - -export function prepareRawBlock(openRawBlock, contents, close, locInfo) { - validateClose(openRawBlock, close); - - locInfo = this.locInfo(locInfo); - let program = { - type: 'Program', - body: contents, - strip: {}, - loc: locInfo - }; - - return { - type: 'BlockStatement', - path: openRawBlock.path, - params: openRawBlock.params, - hash: openRawBlock.hash, - program, - openStrip: {}, - inverseStrip: {}, - closeStrip: {}, - loc: locInfo - }; -} - -export function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) { - if (close && close.path) { - validateClose(openBlock, close); - } - - let decorator = (/\*/.test(openBlock.open)); - - program.blockParams = openBlock.blockParams; - - let inverse, - inverseStrip; - - if (inverseAndProgram) { - if (decorator) { - throw new Exception('Unexpected inverse block on decorator', inverseAndProgram); - } - - if (inverseAndProgram.chain) { - inverseAndProgram.program.body[0].closeStrip = close.strip; - } - - inverseStrip = inverseAndProgram.strip; - inverse = inverseAndProgram.program; - } - - if (inverted) { - inverted = inverse; - inverse = program; - program = inverted; - } - - return { - type: decorator ? 'DecoratorBlock' : 'BlockStatement', - path: openBlock.path, - params: openBlock.params, - hash: openBlock.hash, - program, - inverse, - openStrip: openBlock.strip, - inverseStrip, - closeStrip: close && close.strip, - loc: this.locInfo(locInfo) - }; -} - -export function prepareProgram(statements, loc) { - if (!loc && statements.length) { - const firstLoc = statements[0].loc, - lastLoc = statements[statements.length - 1].loc; - - /* istanbul ignore else */ - if (firstLoc && lastLoc) { - loc = { - source: firstLoc.source, - start: { - line: firstLoc.start.line, - column: firstLoc.start.column - }, - end: { - line: lastLoc.end.line, - column: lastLoc.end.column - } - }; - } - } - - return { - type: 'Program', - body: statements, - strip: {}, - loc: loc - }; -} - - -export function preparePartialBlock(open, program, close, locInfo) { - validateClose(open, close); - - return { - type: 'PartialBlockStatement', - name: open.path, - params: open.params, - hash: open.hash, - program, - openStrip: open.strip, - closeStrip: close && close.strip, - loc: this.locInfo(locInfo) - }; -} - diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/javascript-compiler.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/javascript-compiler.js deleted file mode 100644 index ec8911761..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/javascript-compiler.js +++ /dev/null @@ -1,1137 +0,0 @@ -import { COMPILER_REVISION, REVISION_CHANGES } from '../base'; -import Exception from '../exception'; -import {isArray} from '../utils'; -import CodeGen from './code-gen'; - -function Literal(value) { - this.value = value; -} - -function JavaScriptCompiler() {} - -JavaScriptCompiler.prototype = { - // PUBLIC API: You can override these methods in a subclass to provide - // alternative compiled forms for name lookup and buffering semantics - nameLookup: function(parent, name/* , type*/) { - if (JavaScriptCompiler.isValidJavaScriptVariableName(name)) { - return [parent, '.', name]; - } else { - return [parent, '[', JSON.stringify(name), ']']; - } - }, - depthedLookup: function(name) { - return [this.aliasable('container.lookup'), '(depths, "', name, '")']; - }, - - compilerInfo: function() { - const revision = COMPILER_REVISION, - versions = REVISION_CHANGES[revision]; - return [revision, versions]; - }, - - appendToBuffer: function(source, location, explicit) { - // Force a source as this simplifies the merge logic. - if (!isArray(source)) { - source = [source]; - } - source = this.source.wrap(source, location); - - if (this.environment.isSimple) { - return ['return ', source, ';']; - } else if (explicit) { - // This is a case where the buffer operation occurs as a child of another - // construct, generally braces. We have to explicitly output these buffer - // operations to ensure that the emitted code goes in the correct location. - return ['buffer += ', source, ';']; - } else { - source.appendToBuffer = true; - return source; - } - }, - - initializeBuffer: function() { - return this.quotedString(''); - }, - // END PUBLIC API - - compile: function(environment, options, context, asObject) { - this.environment = environment; - this.options = options; - this.stringParams = this.options.stringParams; - this.trackIds = this.options.trackIds; - this.precompile = !asObject; - - this.name = this.environment.name; - this.isChild = !!context; - this.context = context || { - decorators: [], - programs: [], - environments: [] - }; - - this.preamble(); - - this.stackSlot = 0; - this.stackVars = []; - this.aliases = {}; - this.registers = { list: [] }; - this.hashes = []; - this.compileStack = []; - this.inlineStack = []; - this.blockParams = []; - - this.compileChildren(environment, options); - - this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat; - this.useBlockParams = this.useBlockParams || environment.useBlockParams; - - let opcodes = environment.opcodes, - opcode, - firstLoc, - i, - l; - - for (i = 0, l = opcodes.length; i < l; i++) { - opcode = opcodes[i]; - - this.source.currentLocation = opcode.loc; - firstLoc = firstLoc || opcode.loc; - this[opcode.opcode].apply(this, opcode.args); - } - - // Flush any trailing content that might be pending. - this.source.currentLocation = firstLoc; - this.pushSource(''); - - /* istanbul ignore next */ - if (this.stackSlot || this.inlineStack.length || this.compileStack.length) { - throw new Exception('Compile completed with content left on stack'); - } - - if (!this.decorators.isEmpty()) { - this.useDecorators = true; - - this.decorators.prepend('var decorators = container.decorators;\n'); - this.decorators.push('return fn;'); - - if (asObject) { - this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]); - } else { - this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\n'); - this.decorators.push('}\n'); - this.decorators = this.decorators.merge(); - } - } else { - this.decorators = undefined; - } - - let fn = this.createFunctionContext(asObject); - if (!this.isChild) { - let ret = { - compiler: this.compilerInfo(), - main: fn - }; - - if (this.decorators) { - ret.main_d = this.decorators; // eslint-disable-line camelcase - ret.useDecorators = true; - } - - let {programs, decorators} = this.context; - for (i = 0, l = programs.length; i < l; i++) { - if (programs[i]) { - ret[i] = programs[i]; - if (decorators[i]) { - ret[i + '_d'] = decorators[i]; - ret.useDecorators = true; - } - } - } - - if (this.environment.usePartial) { - ret.usePartial = true; - } - if (this.options.data) { - ret.useData = true; - } - if (this.useDepths) { - ret.useDepths = true; - } - if (this.useBlockParams) { - ret.useBlockParams = true; - } - if (this.options.compat) { - ret.compat = true; - } - - if (!asObject) { - ret.compiler = JSON.stringify(ret.compiler); - - this.source.currentLocation = {start: {line: 1, column: 0}}; - ret = this.objectLiteral(ret); - - if (options.srcName) { - ret = ret.toStringWithSourceMap({file: options.destName}); - ret.map = ret.map && ret.map.toString(); - } else { - ret = ret.toString(); - } - } else { - ret.compilerOptions = this.options; - } - - return ret; - } else { - return fn; - } - }, - - preamble: function() { - // track the last context pushed into place to allow skipping the - // getContext opcode when it would be a noop - this.lastContext = 0; - this.source = new CodeGen(this.options.srcName); - this.decorators = new CodeGen(this.options.srcName); - }, - - createFunctionContext: function(asObject) { - let varDeclarations = ''; - - let locals = this.stackVars.concat(this.registers.list); - if (locals.length > 0) { - varDeclarations += ', ' + locals.join(', '); - } - - // Generate minimizer alias mappings - // - // When using true SourceNodes, this will update all references to the given alias - // as the source nodes are reused in situ. For the non-source node compilation mode, - // aliases will not be used, but this case is already being run on the client and - // we aren't concern about minimizing the template size. - let aliasCount = 0; - for (let alias in this.aliases) { // eslint-disable-line guard-for-in - let node = this.aliases[alias]; - - if (this.aliases.hasOwnProperty(alias) && node.children && node.referenceCount > 1) { - varDeclarations += ', alias' + (++aliasCount) + '=' + alias; - node.children[0] = 'alias' + aliasCount; - } - } - - let params = ['container', 'depth0', 'helpers', 'partials', 'data']; - - if (this.useBlockParams || this.useDepths) { - params.push('blockParams'); - } - if (this.useDepths) { - params.push('depths'); - } - - // Perform a second pass over the output to merge content when possible - let source = this.mergeSource(varDeclarations); - - if (asObject) { - params.push(source); - - return Function.apply(this, params); - } else { - return this.source.wrap(['function(', params.join(','), ') {\n ', source, '}']); - } - }, - mergeSource: function(varDeclarations) { - let isSimple = this.environment.isSimple, - appendOnly = !this.forceBuffer, - appendFirst, - - sourceSeen, - bufferStart, - bufferEnd; - this.source.each((line) => { - if (line.appendToBuffer) { - if (bufferStart) { - line.prepend(' + '); - } else { - bufferStart = line; - } - bufferEnd = line; - } else { - if (bufferStart) { - if (!sourceSeen) { - appendFirst = true; - } else { - bufferStart.prepend('buffer += '); - } - bufferEnd.add(';'); - bufferStart = bufferEnd = undefined; - } - - sourceSeen = true; - if (!isSimple) { - appendOnly = false; - } - } - }); - - - if (appendOnly) { - if (bufferStart) { - bufferStart.prepend('return '); - bufferEnd.add(';'); - } else if (!sourceSeen) { - this.source.push('return "";'); - } - } else { - varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer()); - - if (bufferStart) { - bufferStart.prepend('return buffer + '); - bufferEnd.add(';'); - } else { - this.source.push('return buffer;'); - } - } - - if (varDeclarations) { - this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n')); - } - - return this.source.merge(); - }, - - // [blockValue] - // - // On stack, before: hash, inverse, program, value - // On stack, after: return value of blockHelperMissing - // - // The purpose of this opcode is to take a block of the form - // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and - // replace it on the stack with the result of properly - // invoking blockHelperMissing. - blockValue: function(name) { - let blockHelperMissing = this.aliasable('helpers.blockHelperMissing'), - params = [this.contextName(0)]; - this.setupHelperArgs(name, 0, params); - - let blockName = this.popStack(); - params.splice(1, 0, blockName); - - this.push(this.source.functionCall(blockHelperMissing, 'call', params)); - }, - - // [ambiguousBlockValue] - // - // On stack, before: hash, inverse, program, value - // Compiler value, before: lastHelper=value of last found helper, if any - // On stack, after, if no lastHelper: same as [blockValue] - // On stack, after, if lastHelper: value - ambiguousBlockValue: function() { - // We're being a bit cheeky and reusing the options value from the prior exec - let blockHelperMissing = this.aliasable('helpers.blockHelperMissing'), - params = [this.contextName(0)]; - this.setupHelperArgs('', 0, params, true); - - this.flushInline(); - - let current = this.topStack(); - params.splice(1, 0, current); - - this.pushSource([ - 'if (!', this.lastHelper, ') { ', - current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), - '}']); - }, - - // [appendContent] - // - // On stack, before: ... - // On stack, after: ... - // - // Appends the string value of `content` to the current buffer - appendContent: function(content) { - if (this.pendingContent) { - content = this.pendingContent + content; - } else { - this.pendingLocation = this.source.currentLocation; - } - - this.pendingContent = content; - }, - - // [append] - // - // On stack, before: value, ... - // On stack, after: ... - // - // Coerces `value` to a String and appends it to the current buffer. - // - // If `value` is truthy, or 0, it is coerced into a string and appended - // Otherwise, the empty string is appended - append: function() { - if (this.isInline()) { - this.replaceStack((current) => [' != null ? ', current, ' : ""']); - - this.pushSource(this.appendToBuffer(this.popStack())); - } else { - let local = this.popStack(); - this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']); - if (this.environment.isSimple) { - this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']); - } - } - }, - - // [appendEscaped] - // - // On stack, before: value, ... - // On stack, after: ... - // - // Escape `value` and append it to the buffer - appendEscaped: function() { - this.pushSource(this.appendToBuffer( - [this.aliasable('container.escapeExpression'), '(', this.popStack(), ')'])); - }, - - // [getContext] - // - // On stack, before: ... - // On stack, after: ... - // Compiler value, after: lastContext=depth - // - // Set the value of the `lastContext` compiler value to the depth - getContext: function(depth) { - this.lastContext = depth; - }, - - // [pushContext] - // - // On stack, before: ... - // On stack, after: currentContext, ... - // - // Pushes the value of the current context onto the stack. - pushContext: function() { - this.pushStackLiteral(this.contextName(this.lastContext)); - }, - - // [lookupOnContext] - // - // On stack, before: ... - // On stack, after: currentContext[name], ... - // - // Looks up the value of `name` on the current context and pushes - // it onto the stack. - lookupOnContext: function(parts, falsy, strict, scoped) { - let i = 0; - - if (!scoped && this.options.compat && !this.lastContext) { - // The depthed query is expected to handle the undefined logic for the root level that - // is implemented below, so we evaluate that directly in compat mode - this.push(this.depthedLookup(parts[i++])); - } else { - this.pushContext(); - } - - this.resolvePath('context', parts, i, falsy, strict); - }, - - // [lookupBlockParam] - // - // On stack, before: ... - // On stack, after: blockParam[name], ... - // - // Looks up the value of `parts` on the given block param and pushes - // it onto the stack. - lookupBlockParam: function(blockParamId, parts) { - this.useBlockParams = true; - - this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']); - this.resolvePath('context', parts, 1); - }, - - // [lookupData] - // - // On stack, before: ... - // On stack, after: data, ... - // - // Push the data lookup operator - lookupData: function(depth, parts, strict) { - if (!depth) { - this.pushStackLiteral('data'); - } else { - this.pushStackLiteral('container.data(data, ' + depth + ')'); - } - - this.resolvePath('data', parts, 0, true, strict); - }, - - resolvePath: function(type, parts, i, falsy, strict) { - if (this.options.strict || this.options.assumeObjects) { - this.push(strictLookup(this.options.strict && strict, this, parts, type)); - return; - } - - let len = parts.length; - for (; i < len; i++) { - /* eslint-disable no-loop-func */ - this.replaceStack((current) => { - let lookup = this.nameLookup(current, parts[i], type); - // We want to ensure that zero and false are handled properly if the context (falsy flag) - // needs to have the special handling for these values. - if (!falsy) { - return [' != null ? ', lookup, ' : ', current]; - } else { - // Otherwise we can use generic falsy handling - return [' && ', lookup]; - } - }); - /* eslint-enable no-loop-func */ - } - }, - - // [resolvePossibleLambda] - // - // On stack, before: value, ... - // On stack, after: resolved value, ... - // - // If the `value` is a lambda, replace it on the stack by - // the return value of the lambda - resolvePossibleLambda: function() { - this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']); - }, - - // [pushStringParam] - // - // On stack, before: ... - // On stack, after: string, currentContext, ... - // - // This opcode is designed for use in string mode, which - // provides the string value of a parameter along with its - // depth rather than resolving it immediately. - pushStringParam: function(string, type) { - this.pushContext(); - this.pushString(type); - - // If it's a subexpression, the string result - // will be pushed after this opcode. - if (type !== 'SubExpression') { - if (typeof string === 'string') { - this.pushString(string); - } else { - this.pushStackLiteral(string); - } - } - }, - - emptyHash: function(omitEmpty) { - if (this.trackIds) { - this.push('{}'); // hashIds - } - if (this.stringParams) { - this.push('{}'); // hashContexts - this.push('{}'); // hashTypes - } - this.pushStackLiteral(omitEmpty ? 'undefined' : '{}'); - }, - pushHash: function() { - if (this.hash) { - this.hashes.push(this.hash); - } - this.hash = {values: [], types: [], contexts: [], ids: []}; - }, - popHash: function() { - let hash = this.hash; - this.hash = this.hashes.pop(); - - if (this.trackIds) { - this.push(this.objectLiteral(hash.ids)); - } - if (this.stringParams) { - this.push(this.objectLiteral(hash.contexts)); - this.push(this.objectLiteral(hash.types)); - } - - this.push(this.objectLiteral(hash.values)); - }, - - // [pushString] - // - // On stack, before: ... - // On stack, after: quotedString(string), ... - // - // Push a quoted version of `string` onto the stack - pushString: function(string) { - this.pushStackLiteral(this.quotedString(string)); - }, - - // [pushLiteral] - // - // On stack, before: ... - // On stack, after: value, ... - // - // Pushes a value onto the stack. This operation prevents - // the compiler from creating a temporary variable to hold - // it. - pushLiteral: function(value) { - this.pushStackLiteral(value); - }, - - // [pushProgram] - // - // On stack, before: ... - // On stack, after: program(guid), ... - // - // Push a program expression onto the stack. This takes - // a compile-time guid and converts it into a runtime-accessible - // expression. - pushProgram: function(guid) { - if (guid != null) { - this.pushStackLiteral(this.programExpression(guid)); - } else { - this.pushStackLiteral(null); - } - }, - - // [registerDecorator] - // - // On stack, before: hash, program, params..., ... - // On stack, after: ... - // - // Pops off the decorator's parameters, invokes the decorator, - // and inserts the decorator into the decorators list. - registerDecorator(paramSize, name) { - let foundDecorator = this.nameLookup('decorators', name, 'decorator'), - options = this.setupHelperArgs(name, paramSize); - - this.decorators.push([ - 'fn = ', - this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), - ' || fn;' - ]); - }, - - // [invokeHelper] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of helper invocation - // - // Pops off the helper's parameters, invokes the helper, - // and pushes the helper's return value onto the stack. - // - // If the helper is not found, `helperMissing` is called. - invokeHelper: function(paramSize, name, isSimple) { - let nonHelper = this.popStack(), - helper = this.setupHelper(paramSize, name), - simple = isSimple ? [helper.name, ' || '] : ''; - - let lookup = ['('].concat(simple, nonHelper); - if (!this.options.strict) { - lookup.push(' || ', this.aliasable('helpers.helperMissing')); - } - lookup.push(')'); - - this.push(this.source.functionCall(lookup, 'call', helper.callParams)); - }, - - // [invokeKnownHelper] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of helper invocation - // - // This operation is used when the helper is known to exist, - // so a `helperMissing` fallback is not required. - invokeKnownHelper: function(paramSize, name) { - let helper = this.setupHelper(paramSize, name); - this.push(this.source.functionCall(helper.name, 'call', helper.callParams)); - }, - - // [invokeAmbiguous] - // - // On stack, before: hash, inverse, program, params..., ... - // On stack, after: result of disambiguation - // - // This operation is used when an expression like `{{foo}}` - // is provided, but we don't know at compile-time whether it - // is a helper or a path. - // - // This operation emits more code than the other options, - // and can be avoided by passing the `knownHelpers` and - // `knownHelpersOnly` flags at compile-time. - invokeAmbiguous: function(name, helperCall) { - this.useRegister('helper'); - - let nonHelper = this.popStack(); - - this.emptyHash(); - let helper = this.setupHelper(0, name, helperCall); - - let helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper'); - - let lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')']; - if (!this.options.strict) { - lookup[0] = '(helper = '; - lookup.push( - ' != null ? helper : ', - this.aliasable('helpers.helperMissing') - ); - } - - this.push([ - '(', lookup, - (helper.paramsInit ? ['),(', helper.paramsInit] : []), '),', - '(typeof helper === ', this.aliasable('"function"'), ' ? ', - this.source.functionCall('helper', 'call', helper.callParams), ' : helper))' - ]); - }, - - // [invokePartial] - // - // On stack, before: context, ... - // On stack after: result of partial invocation - // - // This operation pops off a context, invokes a partial with that context, - // and pushes the result of the invocation back. - invokePartial: function(isDynamic, name, indent) { - let params = [], - options = this.setupParams(name, 1, params); - - if (isDynamic) { - name = this.popStack(); - delete options.name; - } - - if (indent) { - options.indent = JSON.stringify(indent); - } - options.helpers = 'helpers'; - options.partials = 'partials'; - options.decorators = 'container.decorators'; - - if (!isDynamic) { - params.unshift(this.nameLookup('partials', name, 'partial')); - } else { - params.unshift(name); - } - - if (this.options.compat) { - options.depths = 'depths'; - } - options = this.objectLiteral(options); - params.push(options); - - this.push(this.source.functionCall('container.invokePartial', '', params)); - }, - - // [assignToHash] - // - // On stack, before: value, ..., hash, ... - // On stack, after: ..., hash, ... - // - // Pops a value off the stack and assigns it to the current hash - assignToHash: function(key) { - let value = this.popStack(), - context, - type, - id; - - if (this.trackIds) { - id = this.popStack(); - } - if (this.stringParams) { - type = this.popStack(); - context = this.popStack(); - } - - let hash = this.hash; - if (context) { - hash.contexts[key] = context; - } - if (type) { - hash.types[key] = type; - } - if (id) { - hash.ids[key] = id; - } - hash.values[key] = value; - }, - - pushId: function(type, name, child) { - if (type === 'BlockParam') { - this.pushStackLiteral( - 'blockParams[' + name[0] + '].path[' + name[1] + ']' - + (child ? ' + ' + JSON.stringify('.' + child) : '')); - } else if (type === 'PathExpression') { - this.pushString(name); - } else if (type === 'SubExpression') { - this.pushStackLiteral('true'); - } else { - this.pushStackLiteral('null'); - } - }, - - // HELPERS - - compiler: JavaScriptCompiler, - - compileChildren: function(environment, options) { - let children = environment.children, child, compiler; - - for (let i = 0, l = children.length; i < l; i++) { - child = children[i]; - compiler = new this.compiler(); // eslint-disable-line new-cap - - let existing = this.matchExistingProgram(child); - - if (existing == null) { - this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children - let index = this.context.programs.length; - child.index = index; - child.name = 'program' + index; - this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile); - this.context.decorators[index] = compiler.decorators; - this.context.environments[index] = child; - - this.useDepths = this.useDepths || compiler.useDepths; - this.useBlockParams = this.useBlockParams || compiler.useBlockParams; - child.useDepths = this.useDepths; - child.useBlockParams = this.useBlockParams; - } else { - child.index = existing.index; - child.name = 'program' + existing.index; - - this.useDepths = this.useDepths || existing.useDepths; - this.useBlockParams = this.useBlockParams || existing.useBlockParams; - } - } - }, - matchExistingProgram: function(child) { - for (let i = 0, len = this.context.environments.length; i < len; i++) { - let environment = this.context.environments[i]; - if (environment && environment.equals(child)) { - return environment; - } - } - }, - - programExpression: function(guid) { - let child = this.environment.children[guid], - programParams = [child.index, 'data', child.blockParams]; - - if (this.useBlockParams || this.useDepths) { - programParams.push('blockParams'); - } - if (this.useDepths) { - programParams.push('depths'); - } - - return 'container.program(' + programParams.join(', ') + ')'; - }, - - useRegister: function(name) { - if (!this.registers[name]) { - this.registers[name] = true; - this.registers.list.push(name); - } - }, - - push: function(expr) { - if (!(expr instanceof Literal)) { - expr = this.source.wrap(expr); - } - - this.inlineStack.push(expr); - return expr; - }, - - pushStackLiteral: function(item) { - this.push(new Literal(item)); - }, - - pushSource: function(source) { - if (this.pendingContent) { - this.source.push( - this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation)); - this.pendingContent = undefined; - } - - if (source) { - this.source.push(source); - } - }, - - replaceStack: function(callback) { - let prefix = ['('], - stack, - createdStack, - usedLiteral; - - /* istanbul ignore next */ - if (!this.isInline()) { - throw new Exception('replaceStack on non-inline'); - } - - // We want to merge the inline statement into the replacement statement via ',' - let top = this.popStack(true); - - if (top instanceof Literal) { - // Literals do not need to be inlined - stack = [top.value]; - prefix = ['(', stack]; - usedLiteral = true; - } else { - // Get or create the current stack name for use by the inline - createdStack = true; - let name = this.incrStack(); - - prefix = ['((', this.push(name), ' = ', top, ')']; - stack = this.topStack(); - } - - let item = callback.call(this, stack); - - if (!usedLiteral) { - this.popStack(); - } - if (createdStack) { - this.stackSlot--; - } - this.push(prefix.concat(item, ')')); - }, - - incrStack: function() { - this.stackSlot++; - if (this.stackSlot > this.stackVars.length) { this.stackVars.push('stack' + this.stackSlot); } - return this.topStackName(); - }, - topStackName: function() { - return 'stack' + this.stackSlot; - }, - flushInline: function() { - let inlineStack = this.inlineStack; - this.inlineStack = []; - for (let i = 0, len = inlineStack.length; i < len; i++) { - let entry = inlineStack[i]; - /* istanbul ignore if */ - if (entry instanceof Literal) { - this.compileStack.push(entry); - } else { - let stack = this.incrStack(); - this.pushSource([stack, ' = ', entry, ';']); - this.compileStack.push(stack); - } - } - }, - isInline: function() { - return this.inlineStack.length; - }, - - popStack: function(wrapped) { - let inline = this.isInline(), - item = (inline ? this.inlineStack : this.compileStack).pop(); - - if (!wrapped && (item instanceof Literal)) { - return item.value; - } else { - if (!inline) { - /* istanbul ignore next */ - if (!this.stackSlot) { - throw new Exception('Invalid stack pop'); - } - this.stackSlot--; - } - return item; - } - }, - - topStack: function() { - let stack = (this.isInline() ? this.inlineStack : this.compileStack), - item = stack[stack.length - 1]; - - /* istanbul ignore if */ - if (item instanceof Literal) { - return item.value; - } else { - return item; - } - }, - - contextName: function(context) { - if (this.useDepths && context) { - return 'depths[' + context + ']'; - } else { - return 'depth' + context; - } - }, - - quotedString: function(str) { - return this.source.quotedString(str); - }, - - objectLiteral: function(obj) { - return this.source.objectLiteral(obj); - }, - - aliasable: function(name) { - let ret = this.aliases[name]; - if (ret) { - ret.referenceCount++; - return ret; - } - - ret = this.aliases[name] = this.source.wrap(name); - ret.aliasable = true; - ret.referenceCount = 1; - - return ret; - }, - - setupHelper: function(paramSize, name, blockHelper) { - let params = [], - paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper); - let foundHelper = this.nameLookup('helpers', name, 'helper'), - callContext = this.aliasable(`${this.contextName(0)} != null ? ${this.contextName(0)} : {}`); - - return { - params: params, - paramsInit: paramsInit, - name: foundHelper, - callParams: [callContext].concat(params) - }; - }, - - setupParams: function(helper, paramSize, params) { - let options = {}, - contexts = [], - types = [], - ids = [], - objectArgs = !params, - param; - - if (objectArgs) { - params = []; - } - - options.name = this.quotedString(helper); - options.hash = this.popStack(); - - if (this.trackIds) { - options.hashIds = this.popStack(); - } - if (this.stringParams) { - options.hashTypes = this.popStack(); - options.hashContexts = this.popStack(); - } - - let inverse = this.popStack(), - program = this.popStack(); - - // Avoid setting fn and inverse if neither are set. This allows - // helpers to do a check for `if (options.fn)` - if (program || inverse) { - options.fn = program || 'container.noop'; - options.inverse = inverse || 'container.noop'; - } - - // The parameters go on to the stack in order (making sure that they are evaluated in order) - // so we need to pop them off the stack in reverse order - let i = paramSize; - while (i--) { - param = this.popStack(); - params[i] = param; - - if (this.trackIds) { - ids[i] = this.popStack(); - } - if (this.stringParams) { - types[i] = this.popStack(); - contexts[i] = this.popStack(); - } - } - - if (objectArgs) { - options.args = this.source.generateArray(params); - } - - if (this.trackIds) { - options.ids = this.source.generateArray(ids); - } - if (this.stringParams) { - options.types = this.source.generateArray(types); - options.contexts = this.source.generateArray(contexts); - } - - if (this.options.data) { - options.data = 'data'; - } - if (this.useBlockParams) { - options.blockParams = 'blockParams'; - } - return options; - }, - - setupHelperArgs: function(helper, paramSize, params, useRegister) { - let options = this.setupParams(helper, paramSize, params); - options = this.objectLiteral(options); - if (useRegister) { - this.useRegister('options'); - params.push('options'); - return ['options=', options]; - } else if (params) { - params.push(options); - return ''; - } else { - return options; - } - } -}; - - -(function() { - const reservedWords = ( - 'break else new var' + - ' case finally return void' + - ' catch for switch while' + - ' continue function this with' + - ' default if throw' + - ' delete in try' + - ' do instanceof typeof' + - ' abstract enum int short' + - ' boolean export interface static' + - ' byte extends long super' + - ' char final native synchronized' + - ' class float package throws' + - ' const goto private transient' + - ' debugger implements protected volatile' + - ' double import public let yield await' + - ' null true false' - ).split(' '); - - const compilerWords = JavaScriptCompiler.RESERVED_WORDS = {}; - - for (let i = 0, l = reservedWords.length; i < l; i++) { - compilerWords[reservedWords[i]] = true; - } -}()); - -JavaScriptCompiler.isValidJavaScriptVariableName = function(name) { - return !JavaScriptCompiler.RESERVED_WORDS[name] && (/^[a-zA-Z_$][0-9a-zA-Z_$]*$/).test(name); -}; - -function strictLookup(requireTerminal, compiler, parts, type) { - let stack = compiler.popStack(), - i = 0, - len = parts.length; - if (requireTerminal) { - len--; - } - - for (; i < len; i++) { - stack = compiler.nameLookup(stack, parts[i], type); - } - - if (requireTerminal) { - return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ')']; - } else { - return stack; - } -} - -export default JavaScriptCompiler; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/parser.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/parser.js deleted file mode 100644 index 04fe6ae3a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/parser.js +++ /dev/null @@ -1,623 +0,0 @@ -/* istanbul ignore next */ -/* Jison generated parser */ -var handlebars = (function(){ -var parser = {trace: function trace() { }, -yy: {}, -symbols_: {"error":2,"root":3,"program":4,"EOF":5,"program_repetition0":6,"statement":7,"mustache":8,"block":9,"rawBlock":10,"partial":11,"partialBlock":12,"content":13,"COMMENT":14,"CONTENT":15,"openRawBlock":16,"rawBlock_repetition_plus0":17,"END_RAW_BLOCK":18,"OPEN_RAW_BLOCK":19,"helperName":20,"openRawBlock_repetition0":21,"openRawBlock_option0":22,"CLOSE_RAW_BLOCK":23,"openBlock":24,"block_option0":25,"closeBlock":26,"openInverse":27,"block_option1":28,"OPEN_BLOCK":29,"openBlock_repetition0":30,"openBlock_option0":31,"openBlock_option1":32,"CLOSE":33,"OPEN_INVERSE":34,"openInverse_repetition0":35,"openInverse_option0":36,"openInverse_option1":37,"openInverseChain":38,"OPEN_INVERSE_CHAIN":39,"openInverseChain_repetition0":40,"openInverseChain_option0":41,"openInverseChain_option1":42,"inverseAndProgram":43,"INVERSE":44,"inverseChain":45,"inverseChain_option0":46,"OPEN_ENDBLOCK":47,"OPEN":48,"mustache_repetition0":49,"mustache_option0":50,"OPEN_UNESCAPED":51,"mustache_repetition1":52,"mustache_option1":53,"CLOSE_UNESCAPED":54,"OPEN_PARTIAL":55,"partialName":56,"partial_repetition0":57,"partial_option0":58,"openPartialBlock":59,"OPEN_PARTIAL_BLOCK":60,"openPartialBlock_repetition0":61,"openPartialBlock_option0":62,"param":63,"sexpr":64,"OPEN_SEXPR":65,"sexpr_repetition0":66,"sexpr_option0":67,"CLOSE_SEXPR":68,"hash":69,"hash_repetition_plus0":70,"hashSegment":71,"ID":72,"EQUALS":73,"blockParams":74,"OPEN_BLOCK_PARAMS":75,"blockParams_repetition_plus0":76,"CLOSE_BLOCK_PARAMS":77,"path":78,"dataName":79,"STRING":80,"NUMBER":81,"BOOLEAN":82,"UNDEFINED":83,"NULL":84,"DATA":85,"pathSegments":86,"SEP":87,"$accept":0,"$end":1}, -terminals_: {2:"error",5:"EOF",14:"COMMENT",15:"CONTENT",18:"END_RAW_BLOCK",19:"OPEN_RAW_BLOCK",23:"CLOSE_RAW_BLOCK",29:"OPEN_BLOCK",33:"CLOSE",34:"OPEN_INVERSE",39:"OPEN_INVERSE_CHAIN",44:"INVERSE",47:"OPEN_ENDBLOCK",48:"OPEN",51:"OPEN_UNESCAPED",54:"CLOSE_UNESCAPED",55:"OPEN_PARTIAL",60:"OPEN_PARTIAL_BLOCK",65:"OPEN_SEXPR",68:"CLOSE_SEXPR",72:"ID",73:"EQUALS",75:"OPEN_BLOCK_PARAMS",77:"CLOSE_BLOCK_PARAMS",80:"STRING",81:"NUMBER",82:"BOOLEAN",83:"UNDEFINED",84:"NULL",85:"DATA",87:"SEP"}, -productions_: [0,[3,2],[4,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[7,1],[13,1],[10,3],[16,5],[9,4],[9,4],[24,6],[27,6],[38,6],[43,2],[45,3],[45,1],[26,3],[8,5],[8,5],[11,5],[12,3],[59,5],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,1],[6,0],[6,2],[17,1],[17,2],[21,0],[21,2],[22,0],[22,1],[25,0],[25,1],[28,0],[28,1],[30,0],[30,2],[31,0],[31,1],[32,0],[32,1],[35,0],[35,2],[36,0],[36,1],[37,0],[37,1],[40,0],[40,2],[41,0],[41,1],[42,0],[42,1],[46,0],[46,1],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]], -performAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$ -/**/) { - -var $0 = $$.length - 1; -switch (yystate) { -case 1: return $$[$0-1]; -break; -case 2:this.$ = yy.prepareProgram($$[$0]); -break; -case 3:this.$ = $$[$0]; -break; -case 4:this.$ = $$[$0]; -break; -case 5:this.$ = $$[$0]; -break; -case 6:this.$ = $$[$0]; -break; -case 7:this.$ = $$[$0]; -break; -case 8:this.$ = $$[$0]; -break; -case 9: - this.$ = { - type: 'CommentStatement', - value: yy.stripComment($$[$0]), - strip: yy.stripFlags($$[$0], $$[$0]), - loc: yy.locInfo(this._$) - }; - -break; -case 10: - this.$ = { - type: 'ContentStatement', - original: $$[$0], - value: $$[$0], - loc: yy.locInfo(this._$) - }; - -break; -case 11:this.$ = yy.prepareRawBlock($$[$0-2], $$[$0-1], $$[$0], this._$); -break; -case 12:this.$ = { path: $$[$0-3], params: $$[$0-2], hash: $$[$0-1] }; -break; -case 13:this.$ = yy.prepareBlock($$[$0-3], $$[$0-2], $$[$0-1], $$[$0], false, this._$); -break; -case 14:this.$ = yy.prepareBlock($$[$0-3], $$[$0-2], $$[$0-1], $$[$0], true, this._$); -break; -case 15:this.$ = { open: $$[$0-5], path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) }; -break; -case 16:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) }; -break; -case 17:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) }; -break; -case 18:this.$ = { strip: yy.stripFlags($$[$0-1], $$[$0-1]), program: $$[$0] }; -break; -case 19: - var inverse = yy.prepareBlock($$[$0-2], $$[$0-1], $$[$0], $$[$0], false, this._$), - program = yy.prepareProgram([inverse], $$[$0-1].loc); - program.chained = true; - - this.$ = { strip: $$[$0-2].strip, program: program, chain: true }; - -break; -case 20:this.$ = $$[$0]; -break; -case 21:this.$ = {path: $$[$0-1], strip: yy.stripFlags($$[$0-2], $$[$0])}; -break; -case 22:this.$ = yy.prepareMustache($$[$0-3], $$[$0-2], $$[$0-1], $$[$0-4], yy.stripFlags($$[$0-4], $$[$0]), this._$); -break; -case 23:this.$ = yy.prepareMustache($$[$0-3], $$[$0-2], $$[$0-1], $$[$0-4], yy.stripFlags($$[$0-4], $$[$0]), this._$); -break; -case 24: - this.$ = { - type: 'PartialStatement', - name: $$[$0-3], - params: $$[$0-2], - hash: $$[$0-1], - indent: '', - strip: yy.stripFlags($$[$0-4], $$[$0]), - loc: yy.locInfo(this._$) - }; - -break; -case 25:this.$ = yy.preparePartialBlock($$[$0-2], $$[$0-1], $$[$0], this._$); -break; -case 26:this.$ = { path: $$[$0-3], params: $$[$0-2], hash: $$[$0-1], strip: yy.stripFlags($$[$0-4], $$[$0]) }; -break; -case 27:this.$ = $$[$0]; -break; -case 28:this.$ = $$[$0]; -break; -case 29: - this.$ = { - type: 'SubExpression', - path: $$[$0-3], - params: $$[$0-2], - hash: $$[$0-1], - loc: yy.locInfo(this._$) - }; - -break; -case 30:this.$ = {type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$)}; -break; -case 31:this.$ = {type: 'HashPair', key: yy.id($$[$0-2]), value: $$[$0], loc: yy.locInfo(this._$)}; -break; -case 32:this.$ = yy.id($$[$0-1]); -break; -case 33:this.$ = $$[$0]; -break; -case 34:this.$ = $$[$0]; -break; -case 35:this.$ = {type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$)}; -break; -case 36:this.$ = {type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$)}; -break; -case 37:this.$ = {type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$)}; -break; -case 38:this.$ = {type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$)}; -break; -case 39:this.$ = {type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$)}; -break; -case 40:this.$ = $$[$0]; -break; -case 41:this.$ = $$[$0]; -break; -case 42:this.$ = yy.preparePath(true, $$[$0], this._$); -break; -case 43:this.$ = yy.preparePath(false, $$[$0], this._$); -break; -case 44: $$[$0-2].push({part: yy.id($$[$0]), original: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2]; -break; -case 45:this.$ = [{part: yy.id($$[$0]), original: $$[$0]}]; -break; -case 46:this.$ = []; -break; -case 47:$$[$0-1].push($$[$0]); -break; -case 48:this.$ = [$$[$0]]; -break; -case 49:$$[$0-1].push($$[$0]); -break; -case 50:this.$ = []; -break; -case 51:$$[$0-1].push($$[$0]); -break; -case 58:this.$ = []; -break; -case 59:$$[$0-1].push($$[$0]); -break; -case 64:this.$ = []; -break; -case 65:$$[$0-1].push($$[$0]); -break; -case 70:this.$ = []; -break; -case 71:$$[$0-1].push($$[$0]); -break; -case 78:this.$ = []; -break; -case 79:$$[$0-1].push($$[$0]); -break; -case 82:this.$ = []; -break; -case 83:$$[$0-1].push($$[$0]); -break; -case 86:this.$ = []; -break; -case 87:$$[$0-1].push($$[$0]); -break; -case 90:this.$ = []; -break; -case 91:$$[$0-1].push($$[$0]); -break; -case 94:this.$ = []; -break; -case 95:$$[$0-1].push($$[$0]); -break; -case 98:this.$ = [$$[$0]]; -break; -case 99:$$[$0-1].push($$[$0]); -break; -case 100:this.$ = [$$[$0]]; -break; -case 101:$$[$0-1].push($$[$0]); -break; -} -}, -table: [{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{13:40,15:[1,20],17:39},{20:42,56:41,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:45,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:48,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:42,56:49,64:43,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:50,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,51]},{72:[1,35],86:52},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:53,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:54,38:56,39:[1,58],43:57,44:[1,59],45:55,47:[2,54]},{28:60,43:61,44:[1,59],47:[2,56]},{13:63,15:[1,20],18:[1,62]},{15:[2,48],18:[2,48]},{33:[2,86],57:64,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:65,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:66,47:[1,67]},{30:68,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:69,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:70,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:71,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:75,33:[2,80],50:72,63:73,64:76,65:[1,44],69:74,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,80]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,51]},{20:75,53:81,54:[2,84],63:82,64:76,65:[1,44],69:83,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:84,47:[1,67]},{47:[2,55]},{4:85,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:86,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:87,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:88,47:[1,67]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:75,33:[2,88],58:89,63:90,64:76,65:[1,44],69:91,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:92,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:93,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,31:94,33:[2,60],63:95,64:76,65:[1,44],69:96,70:77,71:78,72:[1,79],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,66],36:97,63:98,64:76,65:[1,44],69:99,70:77,71:78,72:[1,79],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,22:100,23:[2,52],63:101,64:76,65:[1,44],69:102,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:75,33:[2,92],62:103,63:104,64:76,65:[1,44],69:105,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,106]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:107,72:[1,108],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,109],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,110]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:56,39:[1,58],43:57,44:[1,59],45:112,46:111,47:[2,76]},{33:[2,70],40:113,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,114]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],85:[2,87]},{33:[2,89]},{20:75,63:116,64:76,65:[1,44],67:115,68:[2,96],69:117,70:77,71:78,72:[1,79],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,118]},{32:119,33:[2,62],74:120,75:[1,121]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:122,74:123,75:[1,121]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,124]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,125]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,109]},{20:75,63:126,64:76,65:[1,44],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:75,33:[2,72],41:127,63:128,64:76,65:[1,44],69:129,70:77,71:78,72:[1,79],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,130]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,131]},{33:[2,63]},{72:[1,133],76:132},{33:[1,134]},{33:[2,69]},{15:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:135,74:136,75:[1,121]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,138],77:[1,137]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,139]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}], -defaultActions: {4:[2,1],55:[2,55],57:[2,20],61:[2,57],74:[2,81],83:[2,85],87:[2,18],91:[2,89],102:[2,53],105:[2,93],111:[2,19],112:[2,77],117:[2,97],120:[2,63],123:[2,69],124:[2,12],136:[2,75],137:[2,32]}, -parseError: function parseError(str, hash) { - throw new Error(str); -}, -parse: function parse(input) { - var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1; - this.lexer.setInput(input); - this.lexer.yy = this.yy; - this.yy.lexer = this.lexer; - this.yy.parser = this; - if (typeof this.lexer.yylloc == "undefined") - this.lexer.yylloc = {}; - var yyloc = this.lexer.yylloc; - lstack.push(yyloc); - var ranges = this.lexer.options && this.lexer.options.ranges; - if (typeof this.yy.parseError === "function") - this.parseError = this.yy.parseError; - function popStack(n) { - stack.length = stack.length - 2 * n; - vstack.length = vstack.length - n; - lstack.length = lstack.length - n; - } - function lex() { - var token; - token = self.lexer.lex() || 1; - if (typeof token !== "number") { - token = self.symbols_[token] || token; - } - return token; - } - var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; - while (true) { - state = stack[stack.length - 1]; - if (this.defaultActions[state]) { - action = this.defaultActions[state]; - } else { - if (symbol === null || typeof symbol == "undefined") { - symbol = lex(); - } - action = table[state] && table[state][symbol]; - } - if (typeof action === "undefined" || !action.length || !action[0]) { - var errStr = ""; - if (!recovering) { - expected = []; - for (p in table[state]) - if (this.terminals_[p] && p > 2) { - expected.push("'" + this.terminals_[p] + "'"); - } - if (this.lexer.showPosition) { - errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'"; - } else { - errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1?"end of input":"'" + (this.terminals_[symbol] || symbol) + "'"); - } - this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected}); - } - } - if (action[0] instanceof Array && action.length > 1) { - throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol); - } - switch (action[0]) { - case 1: - stack.push(symbol); - vstack.push(this.lexer.yytext); - lstack.push(this.lexer.yylloc); - stack.push(action[1]); - symbol = null; - if (!preErrorSymbol) { - yyleng = this.lexer.yyleng; - yytext = this.lexer.yytext; - yylineno = this.lexer.yylineno; - yyloc = this.lexer.yylloc; - if (recovering > 0) - recovering--; - } else { - symbol = preErrorSymbol; - preErrorSymbol = null; - } - break; - case 2: - len = this.productions_[action[1]][1]; - yyval.$ = vstack[vstack.length - len]; - yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column}; - if (ranges) { - yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]]; - } - r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack); - if (typeof r !== "undefined") { - return r; - } - if (len) { - stack = stack.slice(0, -1 * len * 2); - vstack = vstack.slice(0, -1 * len); - lstack = lstack.slice(0, -1 * len); - } - stack.push(this.productions_[action[1]][0]); - vstack.push(yyval.$); - lstack.push(yyval._$); - newState = table[stack[stack.length - 2]][stack[stack.length - 1]]; - stack.push(newState); - break; - case 3: - return true; - } - } - return true; -} -}; -/* Jison generated lexer */ -var lexer = (function(){ -var lexer = ({EOF:1, -parseError:function parseError(str, hash) { - if (this.yy.parser) { - this.yy.parser.parseError(str, hash); - } else { - throw new Error(str); - } - }, -setInput:function (input) { - this._input = input; - this._more = this._less = this.done = false; - this.yylineno = this.yyleng = 0; - this.yytext = this.matched = this.match = ''; - this.conditionStack = ['INITIAL']; - this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0}; - if (this.options.ranges) this.yylloc.range = [0,0]; - this.offset = 0; - return this; - }, -input:function () { - var ch = this._input[0]; - this.yytext += ch; - this.yyleng++; - this.offset++; - this.match += ch; - this.matched += ch; - var lines = ch.match(/(?:\r\n?|\n).*/g); - if (lines) { - this.yylineno++; - this.yylloc.last_line++; - } else { - this.yylloc.last_column++; - } - if (this.options.ranges) this.yylloc.range[1]++; - - this._input = this._input.slice(1); - return ch; - }, -unput:function (ch) { - var len = ch.length; - var lines = ch.split(/(?:\r\n?|\n)/g); - - this._input = ch + this._input; - this.yytext = this.yytext.substr(0, this.yytext.length-len-1); - //this.yyleng -= len; - this.offset -= len; - var oldLines = this.match.split(/(?:\r\n?|\n)/g); - this.match = this.match.substr(0, this.match.length-1); - this.matched = this.matched.substr(0, this.matched.length-1); - - if (lines.length-1) this.yylineno -= lines.length-1; - var r = this.yylloc.range; - - this.yylloc = {first_line: this.yylloc.first_line, - last_line: this.yylineno+1, - first_column: this.yylloc.first_column, - last_column: lines ? - (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length: - this.yylloc.first_column - len - }; - - if (this.options.ranges) { - this.yylloc.range = [r[0], r[0] + this.yyleng - len]; - } - return this; - }, -more:function () { - this._more = true; - return this; - }, -less:function (n) { - this.unput(this.match.slice(n)); - }, -pastInput:function () { - var past = this.matched.substr(0, this.matched.length - this.match.length); - return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\n/g, ""); - }, -upcomingInput:function () { - var next = this.match; - if (next.length < 20) { - next += this._input.substr(0, 20-next.length); - } - return (next.substr(0,20)+(next.length > 20 ? '...':'')).replace(/\n/g, ""); - }, -showPosition:function () { - var pre = this.pastInput(); - var c = new Array(pre.length + 1).join("-"); - return pre + this.upcomingInput() + "\n" + c+"^"; - }, -next:function () { - if (this.done) { - return this.EOF; - } - if (!this._input) this.done = true; - - var token, - match, - tempMatch, - index, - col, - lines; - if (!this._more) { - this.yytext = ''; - this.match = ''; - } - var rules = this._currentRules(); - for (var i=0;i < rules.length; i++) { - tempMatch = this._input.match(this.rules[rules[i]]); - if (tempMatch && (!match || tempMatch[0].length > match[0].length)) { - match = tempMatch; - index = i; - if (!this.options.flex) break; - } - } - if (match) { - lines = match[0].match(/(?:\r\n?|\n).*/g); - if (lines) this.yylineno += lines.length; - this.yylloc = {first_line: this.yylloc.last_line, - last_line: this.yylineno+1, - first_column: this.yylloc.last_column, - last_column: lines ? lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length}; - this.yytext += match[0]; - this.match += match[0]; - this.matches = match; - this.yyleng = this.yytext.length; - if (this.options.ranges) { - this.yylloc.range = [this.offset, this.offset += this.yyleng]; - } - this._more = false; - this._input = this._input.slice(match[0].length); - this.matched += match[0]; - token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]); - if (this.done && this._input) this.done = false; - if (token) return token; - else return; - } - if (this._input === "") { - return this.EOF; - } else { - return this.parseError('Lexical error on line '+(this.yylineno+1)+'. Unrecognized text.\n'+this.showPosition(), - {text: "", token: null, line: this.yylineno}); - } - }, -lex:function lex() { - var r = this.next(); - if (typeof r !== 'undefined') { - return r; - } else { - return this.lex(); - } - }, -begin:function begin(condition) { - this.conditionStack.push(condition); - }, -popState:function popState() { - return this.conditionStack.pop(); - }, -_currentRules:function _currentRules() { - return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules; - }, -topState:function () { - return this.conditionStack[this.conditionStack.length-2]; - }, -pushState:function begin(condition) { - this.begin(condition); - }}); -lexer.options = {}; -lexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START -/**/) { - - -function strip(start, end) { - return yy_.yytext = yy_.yytext.substr(start, yy_.yyleng-end); -} - - -var YYSTATE=YY_START -switch($avoiding_name_collisions) { -case 0: - if(yy_.yytext.slice(-2) === "\\\\") { - strip(0,1); - this.begin("mu"); - } else if(yy_.yytext.slice(-1) === "\\") { - strip(0,1); - this.begin("emu"); - } else { - this.begin("mu"); - } - if(yy_.yytext) return 15; - -break; -case 1:return 15; -break; -case 2: - this.popState(); - return 15; - -break; -case 3:this.begin('raw'); return 15; -break; -case 4: - this.popState(); - // Should be using `this.topState()` below, but it currently - // returns the second top instead of the first top. Opened an - // issue about it at https://github.com/zaach/jison/issues/291 - if (this.conditionStack[this.conditionStack.length-1] === 'raw') { - return 15; - } else { - yy_.yytext = yy_.yytext.substr(5, yy_.yyleng-9); - return 'END_RAW_BLOCK'; - } - -break; -case 5: return 15; -break; -case 6: - this.popState(); - return 14; - -break; -case 7:return 65; -break; -case 8:return 68; -break; -case 9: return 19; -break; -case 10: - this.popState(); - this.begin('raw'); - return 23; - -break; -case 11:return 55; -break; -case 12:return 60; -break; -case 13:return 29; -break; -case 14:return 47; -break; -case 15:this.popState(); return 44; -break; -case 16:this.popState(); return 44; -break; -case 17:return 34; -break; -case 18:return 39; -break; -case 19:return 51; -break; -case 20:return 48; -break; -case 21: - this.unput(yy_.yytext); - this.popState(); - this.begin('com'); - -break; -case 22: - this.popState(); - return 14; - -break; -case 23:return 48; -break; -case 24:return 73; -break; -case 25:return 72; -break; -case 26:return 72; -break; -case 27:return 87; -break; -case 28:// ignore whitespace -break; -case 29:this.popState(); return 54; -break; -case 30:this.popState(); return 33; -break; -case 31:yy_.yytext = strip(1,2).replace(/\\"/g,'"'); return 80; -break; -case 32:yy_.yytext = strip(1,2).replace(/\\'/g,"'"); return 80; -break; -case 33:return 85; -break; -case 34:return 82; -break; -case 35:return 82; -break; -case 36:return 83; -break; -case 37:return 84; -break; -case 38:return 81; -break; -case 39:return 75; -break; -case 40:return 77; -break; -case 41:return 72; -break; -case 42:yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g,'$1'); return 72; -break; -case 43:return 'INVALID'; -break; -case 44:return 5; -break; -} -}; -lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/,/^(?:[^\x00]+)/,/^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/,/^(?:\{\{\{\{(?=[^\/]))/,/^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/,/^(?:[^\x00]*?(?=(\{\{\{\{)))/,/^(?:[\s\S]*?--(~)?\}\})/,/^(?:\()/,/^(?:\))/,/^(?:\{\{\{\{)/,/^(?:\}\}\}\})/,/^(?:\{\{(~)?>)/,/^(?:\{\{(~)?#>)/,/^(?:\{\{(~)?#\*?)/,/^(?:\{\{(~)?\/)/,/^(?:\{\{(~)?\^\s*(~)?\}\})/,/^(?:\{\{(~)?\s*else\s*(~)?\}\})/,/^(?:\{\{(~)?\^)/,/^(?:\{\{(~)?\s*else\b)/,/^(?:\{\{(~)?\{)/,/^(?:\{\{(~)?&)/,/^(?:\{\{(~)?!--)/,/^(?:\{\{(~)?![\s\S]*?\}\})/,/^(?:\{\{(~)?\*?)/,/^(?:=)/,/^(?:\.\.)/,/^(?:\.(?=([=~}\s\/.)|])))/,/^(?:[\/.])/,/^(?:\s+)/,/^(?:\}(~)?\}\})/,/^(?:(~)?\}\})/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:@)/,/^(?:true(?=([~}\s)])))/,/^(?:false(?=([~}\s)])))/,/^(?:undefined(?=([~}\s)])))/,/^(?:null(?=([~}\s)])))/,/^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/,/^(?:as\s+\|)/,/^(?:\|)/,/^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/,/^(?:\[(\\\]|[^\]])*\])/,/^(?:.)/,/^(?:$)/]; -lexer.conditions = {"mu":{"rules":[7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"inclusive":false},"emu":{"rules":[2],"inclusive":false},"com":{"rules":[6],"inclusive":false},"raw":{"rules":[3,4,5],"inclusive":false},"INITIAL":{"rules":[0,1,44],"inclusive":true}}; -return lexer;})() -parser.lexer = lexer; -function Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser; -return new Parser; -})();exports.__esModule = true; -exports['default'] = handlebars; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/printer.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/printer.js deleted file mode 100644 index 6ad43baec..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/printer.js +++ /dev/null @@ -1,171 +0,0 @@ -/* eslint-disable new-cap */ -import Visitor from './visitor'; - -export function print(ast) { - return new PrintVisitor().accept(ast); -} - -export function PrintVisitor() { - this.padding = 0; -} - -PrintVisitor.prototype = new Visitor(); - -PrintVisitor.prototype.pad = function(string) { - let out = ''; - - for (let i = 0, l = this.padding; i < l; i++) { - out += ' '; - } - - out += string + '\n'; - return out; -}; - -PrintVisitor.prototype.Program = function(program) { - let out = '', - body = program.body, - i, l; - - if (program.blockParams) { - let blockParams = 'BLOCK PARAMS: ['; - for (i = 0, l = program.blockParams.length; i < l; i++) { - blockParams += ' ' + program.blockParams[i]; - } - blockParams += ' ]'; - out += this.pad(blockParams); - } - - for (i = 0, l = body.length; i < l; i++) { - out += this.accept(body[i]); - } - - this.padding--; - - return out; -}; - -PrintVisitor.prototype.MustacheStatement = function(mustache) { - return this.pad('{{ ' + this.SubExpression(mustache) + ' }}'); -}; -PrintVisitor.prototype.Decorator = function(mustache) { - return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}'); -}; - -PrintVisitor.prototype.BlockStatement = -PrintVisitor.prototype.DecoratorBlock = function(block) { - let out = ''; - - out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:'); - this.padding++; - out += this.pad(this.SubExpression(block)); - if (block.program) { - out += this.pad('PROGRAM:'); - this.padding++; - out += this.accept(block.program); - this.padding--; - } - if (block.inverse) { - if (block.program) { this.padding++; } - out += this.pad('{{^}}'); - this.padding++; - out += this.accept(block.inverse); - this.padding--; - if (block.program) { this.padding--; } - } - this.padding--; - - return out; -}; - -PrintVisitor.prototype.PartialStatement = function(partial) { - let content = 'PARTIAL:' + partial.name.original; - if (partial.params[0]) { - content += ' ' + this.accept(partial.params[0]); - } - if (partial.hash) { - content += ' ' + this.accept(partial.hash); - } - return this.pad('{{> ' + content + ' }}'); -}; -PrintVisitor.prototype.PartialBlockStatement = function(partial) { - let content = 'PARTIAL BLOCK:' + partial.name.original; - if (partial.params[0]) { - content += ' ' + this.accept(partial.params[0]); - } - if (partial.hash) { - content += ' ' + this.accept(partial.hash); - } - - content += ' ' + this.pad('PROGRAM:'); - this.padding++; - content += this.accept(partial.program); - this.padding--; - - return this.pad('{{> ' + content + ' }}'); -}; - -PrintVisitor.prototype.ContentStatement = function(content) { - return this.pad("CONTENT[ '" + content.value + "' ]"); -}; - -PrintVisitor.prototype.CommentStatement = function(comment) { - return this.pad("{{! '" + comment.value + "' }}"); -}; - -PrintVisitor.prototype.SubExpression = function(sexpr) { - let params = sexpr.params, - paramStrings = [], - hash; - - for (let i = 0, l = params.length; i < l; i++) { - paramStrings.push(this.accept(params[i])); - } - - params = '[' + paramStrings.join(', ') + ']'; - - hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : ''; - - return this.accept(sexpr.path) + ' ' + params + hash; -}; - -PrintVisitor.prototype.PathExpression = function(id) { - let path = id.parts.join('/'); - return (id.data ? '@' : '') + 'PATH:' + path; -}; - - -PrintVisitor.prototype.StringLiteral = function(string) { - return '"' + string.value + '"'; -}; - -PrintVisitor.prototype.NumberLiteral = function(number) { - return 'NUMBER{' + number.value + '}'; -}; - -PrintVisitor.prototype.BooleanLiteral = function(bool) { - return 'BOOLEAN{' + bool.value + '}'; -}; - -PrintVisitor.prototype.UndefinedLiteral = function() { - return 'UNDEFINED'; -}; - -PrintVisitor.prototype.NullLiteral = function() { - return 'NULL'; -}; - -PrintVisitor.prototype.Hash = function(hash) { - let pairs = hash.pairs, - joinedPairs = []; - - for (let i = 0, l = pairs.length; i < l; i++) { - joinedPairs.push(this.accept(pairs[i])); - } - - return 'HASH{' + joinedPairs.join(', ') + '}'; -}; -PrintVisitor.prototype.HashPair = function(pair) { - return pair.key + '=' + this.accept(pair.value); -}; -/* eslint-enable new-cap */ diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/visitor.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/visitor.js deleted file mode 100644 index 2c504d1b2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/visitor.js +++ /dev/null @@ -1,129 +0,0 @@ -import Exception from '../exception'; - -function Visitor() { - this.parents = []; -} - -Visitor.prototype = { - constructor: Visitor, - mutating: false, - - // Visits a given value. If mutating, will replace the value if necessary. - acceptKey: function(node, name) { - let value = this.accept(node[name]); - if (this.mutating) { - // Hacky sanity check: This may have a few false positives for type for the helper - // methods but will generally do the right thing without a lot of overhead. - if (value && !Visitor.prototype[value.type]) { - throw new Exception('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type); - } - node[name] = value; - } - }, - - // Performs an accept operation with added sanity check to ensure - // required keys are not removed. - acceptRequired: function(node, name) { - this.acceptKey(node, name); - - if (!node[name]) { - throw new Exception(node.type + ' requires ' + name); - } - }, - - // Traverses a given array. If mutating, empty respnses will be removed - // for child elements. - acceptArray: function(array) { - for (let i = 0, l = array.length; i < l; i++) { - this.acceptKey(array, i); - - if (!array[i]) { - array.splice(i, 1); - i--; - l--; - } - } - }, - - accept: function(object) { - if (!object) { - return; - } - - /* istanbul ignore next: Sanity code */ - if (!this[object.type]) { - throw new Exception('Unknown type: ' + object.type, object); - } - - if (this.current) { - this.parents.unshift(this.current); - } - this.current = object; - - let ret = this[object.type](object); - - this.current = this.parents.shift(); - - if (!this.mutating || ret) { - return ret; - } else if (ret !== false) { - return object; - } - }, - - Program: function(program) { - this.acceptArray(program.body); - }, - - MustacheStatement: visitSubExpression, - Decorator: visitSubExpression, - - BlockStatement: visitBlock, - DecoratorBlock: visitBlock, - - PartialStatement: visitPartial, - PartialBlockStatement: function(partial) { - visitPartial.call(this, partial); - - this.acceptKey(partial, 'program'); - }, - - ContentStatement: function(/* content */) {}, - CommentStatement: function(/* comment */) {}, - - SubExpression: visitSubExpression, - - PathExpression: function(/* path */) {}, - - StringLiteral: function(/* string */) {}, - NumberLiteral: function(/* number */) {}, - BooleanLiteral: function(/* bool */) {}, - UndefinedLiteral: function(/* literal */) {}, - NullLiteral: function(/* literal */) {}, - - Hash: function(hash) { - this.acceptArray(hash.pairs); - }, - HashPair: function(pair) { - this.acceptRequired(pair, 'value'); - } -}; - -function visitSubExpression(mustache) { - this.acceptRequired(mustache, 'path'); - this.acceptArray(mustache.params); - this.acceptKey(mustache, 'hash'); -} -function visitBlock(block) { - visitSubExpression.call(this, block); - - this.acceptKey(block, 'program'); - this.acceptKey(block, 'inverse'); -} -function visitPartial(partial) { - this.acceptRequired(partial, 'name'); - this.acceptArray(partial.params); - this.acceptKey(partial, 'hash'); -} - -export default Visitor; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/whitespace-control.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/whitespace-control.js deleted file mode 100644 index e11483c91..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/compiler/whitespace-control.js +++ /dev/null @@ -1,216 +0,0 @@ -import Visitor from './visitor'; - -function WhitespaceControl(options = {}) { - this.options = options; -} -WhitespaceControl.prototype = new Visitor(); - -WhitespaceControl.prototype.Program = function(program) { - const doStandalone = !this.options.ignoreStandalone; - - let isRoot = !this.isRootSeen; - this.isRootSeen = true; - - let body = program.body; - for (let i = 0, l = body.length; i < l; i++) { - let current = body[i], - strip = this.accept(current); - - if (!strip) { - continue; - } - - let _isPrevWhitespace = isPrevWhitespace(body, i, isRoot), - _isNextWhitespace = isNextWhitespace(body, i, isRoot), - - openStandalone = strip.openStandalone && _isPrevWhitespace, - closeStandalone = strip.closeStandalone && _isNextWhitespace, - inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace; - - if (strip.close) { - omitRight(body, i, true); - } - if (strip.open) { - omitLeft(body, i, true); - } - - if (doStandalone && inlineStandalone) { - omitRight(body, i); - - if (omitLeft(body, i)) { - // If we are on a standalone node, save the indent info for partials - if (current.type === 'PartialStatement') { - // Pull out the whitespace from the final line - current.indent = (/([ \t]+$)/).exec(body[i - 1].original)[1]; - } - } - } - if (doStandalone && openStandalone) { - omitRight((current.program || current.inverse).body); - - // Strip out the previous content node if it's whitespace only - omitLeft(body, i); - } - if (doStandalone && closeStandalone) { - // Always strip the next node - omitRight(body, i); - - omitLeft((current.inverse || current.program).body); - } - } - - return program; -}; - -WhitespaceControl.prototype.BlockStatement = -WhitespaceControl.prototype.DecoratorBlock = -WhitespaceControl.prototype.PartialBlockStatement = function(block) { - this.accept(block.program); - this.accept(block.inverse); - - // Find the inverse program that is involed with whitespace stripping. - let program = block.program || block.inverse, - inverse = block.program && block.inverse, - firstInverse = inverse, - lastInverse = inverse; - - if (inverse && inverse.chained) { - firstInverse = inverse.body[0].program; - - // Walk the inverse chain to find the last inverse that is actually in the chain. - while (lastInverse.chained) { - lastInverse = lastInverse.body[lastInverse.body.length - 1].program; - } - } - - let strip = { - open: block.openStrip.open, - close: block.closeStrip.close, - - // Determine the standalone candiacy. Basically flag our content as being possibly standalone - // so our parent can determine if we actually are standalone - openStandalone: isNextWhitespace(program.body), - closeStandalone: isPrevWhitespace((firstInverse || program).body) - }; - - if (block.openStrip.close) { - omitRight(program.body, null, true); - } - - if (inverse) { - let inverseStrip = block.inverseStrip; - - if (inverseStrip.open) { - omitLeft(program.body, null, true); - } - - if (inverseStrip.close) { - omitRight(firstInverse.body, null, true); - } - if (block.closeStrip.open) { - omitLeft(lastInverse.body, null, true); - } - - // Find standalone else statments - if (!this.options.ignoreStandalone - && isPrevWhitespace(program.body) - && isNextWhitespace(firstInverse.body)) { - omitLeft(program.body); - omitRight(firstInverse.body); - } - } else if (block.closeStrip.open) { - omitLeft(program.body, null, true); - } - - return strip; -}; - -WhitespaceControl.prototype.Decorator = -WhitespaceControl.prototype.MustacheStatement = function(mustache) { - return mustache.strip; -}; - -WhitespaceControl.prototype.PartialStatement = - WhitespaceControl.prototype.CommentStatement = function(node) { - /* istanbul ignore next */ - let strip = node.strip || {}; - return { - inlineStandalone: true, - open: strip.open, - close: strip.close - }; -}; - - -function isPrevWhitespace(body, i, isRoot) { - if (i === undefined) { - i = body.length; - } - - // Nodes that end with newlines are considered whitespace (but are special - // cased for strip operations) - let prev = body[i - 1], - sibling = body[i - 2]; - if (!prev) { - return isRoot; - } - - if (prev.type === 'ContentStatement') { - return (sibling || !isRoot ? (/\r?\n\s*?$/) : (/(^|\r?\n)\s*?$/)).test(prev.original); - } -} -function isNextWhitespace(body, i, isRoot) { - if (i === undefined) { - i = -1; - } - - let next = body[i + 1], - sibling = body[i + 2]; - if (!next) { - return isRoot; - } - - if (next.type === 'ContentStatement') { - return (sibling || !isRoot ? (/^\s*?\r?\n/) : (/^\s*?(\r?\n|$)/)).test(next.original); - } -} - -// Marks the node to the right of the position as omitted. -// I.e. {{foo}}' ' will mark the ' ' node as omitted. -// -// If i is undefined, then the first child will be marked as such. -// -// If mulitple is truthy then all whitespace will be stripped out until non-whitespace -// content is met. -function omitRight(body, i, multiple) { - let current = body[i == null ? 0 : i + 1]; - if (!current || current.type !== 'ContentStatement' || (!multiple && current.rightStripped)) { - return; - } - - let original = current.value; - current.value = current.value.replace(multiple ? (/^\s+/) : (/^[ \t]*\r?\n?/), ''); - current.rightStripped = current.value !== original; -} - -// Marks the node to the left of the position as omitted. -// I.e. ' '{{foo}} will mark the ' ' node as omitted. -// -// If i is undefined then the last child will be marked as such. -// -// If mulitple is truthy then all whitespace will be stripped out until non-whitespace -// content is met. -function omitLeft(body, i, multiple) { - let current = body[i == null ? body.length - 1 : i - 1]; - if (!current || current.type !== 'ContentStatement' || (!multiple && current.leftStripped)) { - return; - } - - // We omit the last node if it's whitespace only and not preceeded by a non-content node. - let original = current.value; - current.value = current.value.replace(multiple ? (/\s+$/) : (/[ \t]+$/), ''); - current.leftStripped = current.value !== original; - return current.leftStripped; -} - -export default WhitespaceControl; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/decorators.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/decorators.js deleted file mode 100644 index 6f5a61525..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/decorators.js +++ /dev/null @@ -1,6 +0,0 @@ -import registerInline from './decorators/inline'; - -export function registerDefaultDecorators(instance) { - registerInline(instance); -} - diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/decorators/inline.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/decorators/inline.js deleted file mode 100644 index 214246620..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/decorators/inline.js +++ /dev/null @@ -1,22 +0,0 @@ -import {extend} from '../utils'; - -export default function(instance) { - instance.registerDecorator('inline', function(fn, props, container, options) { - let ret = fn; - if (!props.partials) { - props.partials = {}; - ret = function(context, options) { - // Create a new partials stack frame prior to exec. - let original = container.partials; - container.partials = extend({}, original, props.partials); - let ret = fn(context, options); - container.partials = original; - return ret; - }; - } - - props.partials[options.args[0]] = options.fn; - - return ret; - }); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/exception.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/exception.js deleted file mode 100644 index 08ae531aa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/exception.js +++ /dev/null @@ -1,46 +0,0 @@ - -const errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; - -function Exception(message, node) { - let loc = node && node.loc, - line, - column; - if (loc) { - line = loc.start.line; - column = loc.start.column; - - message += ' - ' + line + ':' + column; - } - - let tmp = Error.prototype.constructor.call(this, message); - - // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. - for (let idx = 0; idx < errorProps.length; idx++) { - this[errorProps[idx]] = tmp[errorProps[idx]]; - } - - /* istanbul ignore else */ - if (Error.captureStackTrace) { - Error.captureStackTrace(this, Exception); - } - - try { - if (loc) { - this.lineNumber = line; - - // Work around issue under safari where we can't directly set the column value - /* istanbul ignore next */ - if (Object.defineProperty) { - Object.defineProperty(this, 'column', {value: column}); - } else { - this.column = column; - } - } - } catch (nop) { - /* Ignore if the browser is very particular */ - } -} - -Exception.prototype = new Error(); - -export default Exception; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers.js deleted file mode 100644 index 7a4365aea..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers.js +++ /dev/null @@ -1,17 +0,0 @@ -import registerBlockHelperMissing from './helpers/block-helper-missing'; -import registerEach from './helpers/each'; -import registerHelperMissing from './helpers/helper-missing'; -import registerIf from './helpers/if'; -import registerLog from './helpers/log'; -import registerLookup from './helpers/lookup'; -import registerWith from './helpers/with'; - -export function registerDefaultHelpers(instance) { - registerBlockHelperMissing(instance); - registerEach(instance); - registerHelperMissing(instance); - registerIf(instance); - registerLog(instance); - registerLookup(instance); - registerWith(instance); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/block-helper-missing.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/block-helper-missing.js deleted file mode 100644 index 6639ddb9d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/block-helper-missing.js +++ /dev/null @@ -1,32 +0,0 @@ -import {appendContextPath, createFrame, isArray} from '../utils'; - -export default function(instance) { - instance.registerHelper('blockHelperMissing', function(context, options) { - let inverse = options.inverse, - fn = options.fn; - - if (context === true) { - return fn(this); - } else if (context === false || context == null) { - return inverse(this); - } else if (isArray(context)) { - if (context.length > 0) { - if (options.ids) { - options.ids = [options.name]; - } - - return instance.helpers.each(context, options); - } else { - return inverse(this); - } - } else { - if (options.data && options.ids) { - let data = createFrame(options.data); - data.contextPath = appendContextPath(options.data.contextPath, options.name); - options = {data: data}; - } - - return fn(context, options); - } - }); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/each.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/each.js deleted file mode 100644 index fb11903c8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/each.js +++ /dev/null @@ -1,79 +0,0 @@ -import {appendContextPath, blockParams, createFrame, isArray, isFunction} from '../utils'; -import Exception from '../exception'; - -export default function(instance) { - instance.registerHelper('each', function(context, options) { - if (!options) { - throw new Exception('Must pass iterator to #each'); - } - - let fn = options.fn, - inverse = options.inverse, - i = 0, - ret = '', - data, - contextPath; - - if (options.data && options.ids) { - contextPath = appendContextPath(options.data.contextPath, options.ids[0]) + '.'; - } - - if (isFunction(context)) { context = context.call(this); } - - if (options.data) { - data = createFrame(options.data); - } - - function execIteration(field, index, last) { - if (data) { - data.key = field; - data.index = index; - data.first = index === 0; - data.last = !!last; - - if (contextPath) { - data.contextPath = contextPath + field; - } - } - - ret = ret + fn(context[field], { - data: data, - blockParams: blockParams([context[field], field], [contextPath + field, null]) - }); - } - - if (context && typeof context === 'object') { - if (isArray(context)) { - for (let j = context.length; i < j; i++) { - if (i in context) { - execIteration(i, i, i === context.length - 1); - } - } - } else { - let priorKey; - - for (let key in context) { - if (context.hasOwnProperty(key)) { - // We're running the iterations one step out of sync so we can detect - // the last iteration without have to scan the object twice and create - // an itermediate keys array. - if (priorKey !== undefined) { - execIteration(priorKey, i - 1); - } - priorKey = key; - i++; - } - } - if (priorKey !== undefined) { - execIteration(priorKey, i - 1, true); - } - } - } - - if (i === 0) { - ret = inverse(this); - } - - return ret; - }); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/helper-missing.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/helper-missing.js deleted file mode 100644 index ec32e8245..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/helper-missing.js +++ /dev/null @@ -1,13 +0,0 @@ -import Exception from '../exception'; - -export default function(instance) { - instance.registerHelper('helperMissing', function(/* [args, ]options */) { - if (arguments.length === 1) { - // A missing field in a {{foo}} construct. - return undefined; - } else { - // Someone is actually trying to call something, blow up. - throw new Exception('Missing helper: "' + arguments[arguments.length - 1].name + '"'); - } - }); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/if.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/if.js deleted file mode 100644 index 11d08df91..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/if.js +++ /dev/null @@ -1,20 +0,0 @@ -import {isEmpty, isFunction} from '../utils'; - -export default function(instance) { - instance.registerHelper('if', function(conditional, options) { - if (isFunction(conditional)) { conditional = conditional.call(this); } - - // Default behavior is to render the positive path if the value is truthy and not empty. - // The `includeZero` option may be set to treat the condtional as purely not empty based on the - // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. - if ((!options.hash.includeZero && !conditional) || isEmpty(conditional)) { - return options.inverse(this); - } else { - return options.fn(this); - } - }); - - instance.registerHelper('unless', function(conditional, options) { - return instance.helpers['if'].call(this, conditional, {fn: options.inverse, inverse: options.fn, hash: options.hash}); - }); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/log.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/log.js deleted file mode 100644 index 4bde4a10d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/log.js +++ /dev/null @@ -1,19 +0,0 @@ -export default function(instance) { - instance.registerHelper('log', function(/* message, options */) { - let args = [undefined], - options = arguments[arguments.length - 1]; - for (let i = 0; i < arguments.length - 1; i++) { - args.push(arguments[i]); - } - - let level = 1; - if (options.hash.level != null) { - level = options.hash.level; - } else if (options.data && options.data.level != null) { - level = options.data.level; - } - args[0] = level; - - instance.log(... args); - }); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/lookup.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/lookup.js deleted file mode 100644 index a52e77a04..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/lookup.js +++ /dev/null @@ -1,5 +0,0 @@ -export default function(instance) { - instance.registerHelper('lookup', function(obj, field) { - return obj && obj[field]; - }); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/with.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/with.js deleted file mode 100644 index 7418cd066..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/helpers/with.js +++ /dev/null @@ -1,24 +0,0 @@ -import {appendContextPath, blockParams, createFrame, isEmpty, isFunction} from '../utils'; - -export default function(instance) { - instance.registerHelper('with', function(context, options) { - if (isFunction(context)) { context = context.call(this); } - - let fn = options.fn; - - if (!isEmpty(context)) { - let data = options.data; - if (options.data && options.ids) { - data = createFrame(options.data); - data.contextPath = appendContextPath(options.data.contextPath, options.ids[0]); - } - - return fn(context, { - data: data, - blockParams: blockParams([context], [data && data.contextPath]) - }); - } else { - return options.inverse(this); - } - }); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/logger.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/logger.js deleted file mode 100644 index 1ab0051f5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/logger.js +++ /dev/null @@ -1,35 +0,0 @@ -import {indexOf} from './utils'; - -let logger = { - methodMap: ['debug', 'info', 'warn', 'error'], - level: 'info', - - // Maps a given level value to the `methodMap` indexes above. - lookupLevel: function(level) { - if (typeof level === 'string') { - let levelMap = indexOf(logger.methodMap, level.toLowerCase()); - if (levelMap >= 0) { - level = levelMap; - } else { - level = parseInt(level, 10); - } - } - - return level; - }, - - // Can be overridden in the host environment - log: function(level, ...message) { - level = logger.lookupLevel(level); - - if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { - let method = logger.methodMap[level]; - if (!console[method]) { // eslint-disable-line no-console - method = 'log'; - } - console[method](...message); // eslint-disable-line no-console - } - } -}; - -export default logger; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/no-conflict.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/no-conflict.js deleted file mode 100644 index 40a44d7a6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/no-conflict.js +++ /dev/null @@ -1,13 +0,0 @@ -/* global window */ -export default function(Handlebars) { - /* istanbul ignore next */ - let root = typeof global !== 'undefined' ? global : window, - $Handlebars = root.Handlebars; - /* istanbul ignore next */ - Handlebars.noConflict = function() { - if (root.Handlebars === Handlebars) { - root.Handlebars = $Handlebars; - } - return Handlebars; - }; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/runtime.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/runtime.js deleted file mode 100644 index 103b5afab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/runtime.js +++ /dev/null @@ -1,274 +0,0 @@ -import * as Utils from './utils'; -import Exception from './exception'; -import { COMPILER_REVISION, REVISION_CHANGES, createFrame } from './base'; - -export function checkRevision(compilerInfo) { - const compilerRevision = compilerInfo && compilerInfo[0] || 1, - currentRevision = COMPILER_REVISION; - - if (compilerRevision !== currentRevision) { - if (compilerRevision < currentRevision) { - const runtimeVersions = REVISION_CHANGES[currentRevision], - compilerVersions = REVISION_CHANGES[compilerRevision]; - throw new Exception('Template was precompiled with an older version of Handlebars than the current runtime. ' + - 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); - } else { - // Use the embedded version info since the runtime doesn't know about this revision yet - throw new Exception('Template was precompiled with a newer version of Handlebars than the current runtime. ' + - 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); - } - } -} - -export function template(templateSpec, env) { - /* istanbul ignore next */ - if (!env) { - throw new Exception('No environment passed to template'); - } - if (!templateSpec || !templateSpec.main) { - throw new Exception('Unknown template object: ' + typeof templateSpec); - } - - templateSpec.main.decorator = templateSpec.main_d; - - // Note: Using env.VM references rather than local var references throughout this section to allow - // for external users to override these as psuedo-supported APIs. - env.VM.checkRevision(templateSpec.compiler); - - function invokePartialWrapper(partial, context, options) { - if (options.hash) { - context = Utils.extend({}, context, options.hash); - if (options.ids) { - options.ids[0] = true; - } - } - - partial = env.VM.resolvePartial.call(this, partial, context, options); - let result = env.VM.invokePartial.call(this, partial, context, options); - - if (result == null && env.compile) { - options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); - result = options.partials[options.name](context, options); - } - if (result != null) { - if (options.indent) { - let lines = result.split('\n'); - for (let i = 0, l = lines.length; i < l; i++) { - if (!lines[i] && i + 1 === l) { - break; - } - - lines[i] = options.indent + lines[i]; - } - result = lines.join('\n'); - } - return result; - } else { - throw new Exception('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); - } - } - - // Just add water - let container = { - strict: function(obj, name) { - if (!(name in obj)) { - throw new Exception('"' + name + '" not defined in ' + obj); - } - return obj[name]; - }, - lookup: function(depths, name) { - const len = depths.length; - for (let i = 0; i < len; i++) { - if (depths[i] && depths[i][name] != null) { - return depths[i][name]; - } - } - }, - lambda: function(current, context) { - return typeof current === 'function' ? current.call(context) : current; - }, - - escapeExpression: Utils.escapeExpression, - invokePartial: invokePartialWrapper, - - fn: function(i) { - let ret = templateSpec[i]; - ret.decorator = templateSpec[i + '_d']; - return ret; - }, - - programs: [], - program: function(i, data, declaredBlockParams, blockParams, depths) { - let programWrapper = this.programs[i], - fn = this.fn(i); - if (data || depths || blockParams || declaredBlockParams) { - programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); - } else if (!programWrapper) { - programWrapper = this.programs[i] = wrapProgram(this, i, fn); - } - return programWrapper; - }, - - data: function(value, depth) { - while (value && depth--) { - value = value._parent; - } - return value; - }, - merge: function(param, common) { - let obj = param || common; - - if (param && common && (param !== common)) { - obj = Utils.extend({}, common, param); - } - - return obj; - }, - - noop: env.VM.noop, - compilerInfo: templateSpec.compiler - }; - - function ret(context, options = {}) { - let data = options.data; - - ret._setup(options); - if (!options.partial && templateSpec.useData) { - data = initData(context, data); - } - let depths, - blockParams = templateSpec.useBlockParams ? [] : undefined; - if (templateSpec.useDepths) { - if (options.depths) { - depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; - } else { - depths = [context]; - } - } - - function main(context/*, options*/) { - return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); - } - main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); - return main(context, options); - } - ret.isTop = true; - - ret._setup = function(options) { - if (!options.partial) { - container.helpers = container.merge(options.helpers, env.helpers); - - if (templateSpec.usePartial) { - container.partials = container.merge(options.partials, env.partials); - } - if (templateSpec.usePartial || templateSpec.useDecorators) { - container.decorators = container.merge(options.decorators, env.decorators); - } - } else { - container.helpers = options.helpers; - container.partials = options.partials; - container.decorators = options.decorators; - } - }; - - ret._child = function(i, data, blockParams, depths) { - if (templateSpec.useBlockParams && !blockParams) { - throw new Exception('must pass block params'); - } - if (templateSpec.useDepths && !depths) { - throw new Exception('must pass parent depths'); - } - - return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); - }; - return ret; -} - -export function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { - function prog(context, options = {}) { - let currentDepths = depths; - if (depths && context != depths[0]) { - currentDepths = [context].concat(depths); - } - - return fn(container, - context, - container.helpers, container.partials, - options.data || data, - blockParams && [options.blockParams].concat(blockParams), - currentDepths); - } - - prog = executeDecorators(fn, prog, container, depths, data, blockParams); - - prog.program = i; - prog.depth = depths ? depths.length : 0; - prog.blockParams = declaredBlockParams || 0; - return prog; -} - -export function resolvePartial(partial, context, options) { - if (!partial) { - if (options.name === '@partial-block') { - let data = options.data; - while (data['partial-block'] === noop) { - data = data._parent; - } - partial = data['partial-block']; - data['partial-block'] = noop; - } else { - partial = options.partials[options.name]; - } - } else if (!partial.call && !options.name) { - // This is a dynamic partial that returned a string - options.name = partial; - partial = options.partials[partial]; - } - return partial; -} - -export function invokePartial(partial, context, options) { - options.partial = true; - if (options.ids) { - options.data.contextPath = options.ids[0] || options.data.contextPath; - } - - let partialBlock; - if (options.fn && options.fn !== noop) { - options.data = createFrame(options.data); - partialBlock = options.data['partial-block'] = options.fn; - - if (partialBlock.partials) { - options.partials = Utils.extend({}, options.partials, partialBlock.partials); - } - } - - if (partial === undefined && partialBlock) { - partial = partialBlock; - } - - if (partial === undefined) { - throw new Exception('The partial ' + options.name + ' could not be found'); - } else if (partial instanceof Function) { - return partial(context, options); - } -} - -export function noop() { return ''; } - -function initData(context, data) { - if (!data || !('root' in data)) { - data = data ? createFrame(data) : {}; - data.root = context; - } - return data; -} - -function executeDecorators(fn, prog, container, depths, data, blockParams) { - if (fn.decorator) { - let props = {}; - prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); - Utils.extend(prog, props); - } - return prog; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/safe-string.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/safe-string.js deleted file mode 100644 index 468019421..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/safe-string.js +++ /dev/null @@ -1,10 +0,0 @@ -// Build out our basic SafeString type -function SafeString(string) { - this.string = string; -} - -SafeString.prototype.toString = SafeString.prototype.toHTML = function() { - return '' + this.string; -}; - -export default SafeString; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/utils.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/utils.js deleted file mode 100644 index 2584601ef..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/handlebars/utils.js +++ /dev/null @@ -1,108 +0,0 @@ -const escape = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '`': '`', - '=': '=' -}; - -const badChars = /[&<>"'`=]/g, - possible = /[&<>"'`=]/; - -function escapeChar(chr) { - return escape[chr]; -} - -export function extend(obj/* , ...source */) { - for (let i = 1; i < arguments.length; i++) { - for (let key in arguments[i]) { - if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { - obj[key] = arguments[i][key]; - } - } - } - - return obj; -} - -export let toString = Object.prototype.toString; - -// Sourced from lodash -// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt -/* eslint-disable func-style */ -let isFunction = function(value) { - return typeof value === 'function'; -}; -// fallback for older versions of Chrome and Safari -/* istanbul ignore next */ -if (isFunction(/x/)) { - isFunction = function(value) { - return typeof value === 'function' && toString.call(value) === '[object Function]'; - }; -} -export {isFunction}; -/* eslint-enable func-style */ - -/* istanbul ignore next */ -export const isArray = Array.isArray || function(value) { - return (value && typeof value === 'object') ? toString.call(value) === '[object Array]' : false; -}; - -// Older IE versions do not directly support indexOf so we must implement our own, sadly. -export function indexOf(array, value) { - for (let i = 0, len = array.length; i < len; i++) { - if (array[i] === value) { - return i; - } - } - return -1; -} - - -export function escapeExpression(string) { - if (typeof string !== 'string') { - // don't escape SafeStrings, since they're already safe - if (string && string.toHTML) { - return string.toHTML(); - } else if (string == null) { - return ''; - } else if (!string) { - return string + ''; - } - - // Force a string conversion as this will be done by the append regardless and - // the regex test will do this transparently behind the scenes, causing issues if - // an object's to string has escaped characters in it. - string = '' + string; - } - - if (!possible.test(string)) { return string; } - return string.replace(badChars, escapeChar); -} - -export function isEmpty(value) { - if (!value && value !== 0) { - return true; - } else if (isArray(value) && value.length === 0) { - return true; - } else { - return false; - } -} - -export function createFrame(object) { - let frame = extend({}, object); - frame._parent = object; - return frame; -} - -export function blockParams(params, ids) { - params.path = ids; - return params; -} - -export function appendContextPath(contextPath, id) { - return (contextPath ? contextPath + '.' : '') + id; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/index.js deleted file mode 100644 index 0383c02f7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/index.js +++ /dev/null @@ -1,25 +0,0 @@ -// USAGE: -// var handlebars = require('handlebars'); -/* eslint-disable no-var */ - -// var local = handlebars.create(); - -var handlebars = require('../dist/cjs/handlebars')['default']; - -var printer = require('../dist/cjs/handlebars/compiler/printer'); -handlebars.PrintVisitor = printer.PrintVisitor; -handlebars.print = printer.print; - -module.exports = handlebars; - -// Publish a Node.js require() handler for .handlebars and .hbs files -function extension(module, filename) { - var fs = require('fs'); - var templateString = fs.readFileSync(filename, 'utf8'); - module.exports = handlebars.compile(templateString); -} -/* istanbul ignore else */ -if (typeof require !== 'undefined' && require.extensions) { - require.extensions['.handlebars'] = extension; - require.extensions['.hbs'] = extension; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/precompiler.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/precompiler.js deleted file mode 100644 index a20d1419d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/lib/precompiler.js +++ /dev/null @@ -1,276 +0,0 @@ -/* eslint-disable no-console */ -import Async from 'async'; -import fs from 'fs'; -import * as Handlebars from './handlebars'; -import {basename} from 'path'; -import {SourceMapConsumer, SourceNode} from 'source-map'; -import uglify from 'uglify-js'; - -module.exports.loadTemplates = function(opts, callback) { - loadStrings(opts, function(err, strings) { - if (err) { - callback(err); - } else { - loadFiles(opts, function(err, files) { - if (err) { - callback(err); - } else { - opts.templates = strings.concat(files); - callback(undefined, opts); - } - }); - } - }); -}; - -function loadStrings(opts, callback) { - let strings = arrayCast(opts.string), - names = arrayCast(opts.name); - - if (names.length !== strings.length - && strings.length > 1) { - return callback(new Handlebars.Exception('Number of names did not match the number of string inputs')); - } - - Async.map(strings, function(string, callback) { - if (string !== '-') { - callback(undefined, string); - } else { - // Load from stdin - let buffer = ''; - process.stdin.setEncoding('utf8'); - - process.stdin.on('data', function(chunk) { - buffer += chunk; - }); - process.stdin.on('end', function() { - callback(undefined, buffer); - }); - } - }, - function(err, strings) { - strings = strings.map((string, index) => ({ - name: names[index], - path: names[index], - source: string - })); - callback(err, strings); - }); -} - -function loadFiles(opts, callback) { - // Build file extension pattern - let extension = (opts.extension || 'handlebars').replace(/[\\^$*+?.():=!|{}\-\[\]]/g, function(arg) { return '\\' + arg; }); - extension = new RegExp('\\.' + extension + '$'); - - let ret = [], - queue = (opts.files || []).map((template) => ({template, root: opts.root})); - Async.whilst(() => queue.length, function(callback) { - let {template: path, root} = queue.shift(); - - fs.stat(path, function(err, stat) { - if (err) { - return callback(new Handlebars.Exception(`Unable to open template file "${path}"`)); - } - - if (stat.isDirectory()) { - opts.hasDirectory = true; - - fs.readdir(path, function(err, children) { - /* istanbul ignore next : Race condition that being too lazy to test */ - if (err) { - return callback(err); - } - children.forEach(function(file) { - let childPath = path + '/' + file; - - if (extension.test(childPath) || fs.statSync(childPath).isDirectory()) { - queue.push({template: childPath, root: root || path}); - } - }); - - callback(); - }); - } else { - fs.readFile(path, 'utf8', function(err, data) { - /* istanbul ignore next : Race condition that being too lazy to test */ - if (err) { - return callback(err); - } - - if (opts.bom && data.indexOf('\uFEFF') === 0) { - data = data.substring(1); - } - - // Clean the template name - let name = path; - if (!root) { - name = basename(name); - } else if (name.indexOf(root) === 0) { - name = name.substring(root.length + 1); - } - name = name.replace(extension, ''); - - ret.push({ - path: path, - name: name, - source: data - }); - - callback(); - }); - } - }); - }, - function(err) { - if (err) { - callback(err); - } else { - callback(undefined, ret); - } - }); -} - -module.exports.cli = function(opts) { - if (opts.version) { - console.log(Handlebars.VERSION); - return; - } - - if (!opts.templates.length && !opts.hasDirectory) { - throw new Handlebars.Exception('Must define at least one template or directory.'); - } - - if (opts.simple && opts.min) { - throw new Handlebars.Exception('Unable to minimize simple output'); - } - - const multiple = opts.templates.length !== 1 || opts.hasDirectory; - if (opts.simple && multiple) { - throw new Handlebars.Exception('Unable to output multiple templates in simple mode'); - } - - // Force simple mode if we have only one template and it's unnamed. - if (!opts.amd && !opts.commonjs && opts.templates.length === 1 - && !opts.templates[0].name) { - opts.simple = true; - } - - // Convert the known list into a hash - let known = {}; - if (opts.known && !Array.isArray(opts.known)) { - opts.known = [opts.known]; - } - if (opts.known) { - for (let i = 0, len = opts.known.length; i < len; i++) { - known[opts.known[i]] = true; - } - } - - const objectName = opts.partial ? 'Handlebars.partials' : 'templates'; - - let output = new SourceNode(); - if (!opts.simple) { - if (opts.amd) { - output.add('define([\'' + opts.handlebarPath + 'handlebars.runtime\'], function(Handlebars) {\n Handlebars = Handlebars["default"];'); - } else if (opts.commonjs) { - output.add('var Handlebars = require("' + opts.commonjs + '");'); - } else { - output.add('(function() {\n'); - } - output.add(' var template = Handlebars.template, templates = '); - if (opts.namespace) { - output.add(opts.namespace); - output.add(' = '); - output.add(opts.namespace); - output.add(' || '); - } - output.add('{};\n'); - } - - opts.templates.forEach(function(template) { - let options = { - knownHelpers: known, - knownHelpersOnly: opts.o - }; - - if (opts.map) { - options.srcName = template.path; - } - if (opts.data) { - options.data = true; - } - - let precompiled = Handlebars.precompile(template.source, options); - - // If we are generating a source map, we have to reconstruct the SourceNode object - if (opts.map) { - let consumer = new SourceMapConsumer(precompiled.map); - precompiled = SourceNode.fromStringWithSourceMap(precompiled.code, consumer); - } - - if (opts.simple) { - output.add([precompiled, '\n']); - } else { - if (!template.name) { - throw new Handlebars.Exception('Name missing for template'); - } - - if (opts.amd && !multiple) { - output.add('return '); - } - output.add([objectName, '[\'', template.name, '\'] = template(', precompiled, ');\n']); - } - }); - - // Output the content - if (!opts.simple) { - if (opts.amd) { - if (multiple) { - output.add(['return ', objectName, ';\n']); - } - output.add('});'); - } else if (!opts.commonjs) { - output.add('})();'); - } - } - - - if (opts.map) { - output.add('\n//# sourceMappingURL=' + opts.map + '\n'); - } - - output = output.toStringWithSourceMap(); - output.map = output.map + ''; - - if (opts.min) { - output = uglify.minify(output.code, { - fromString: true, - - outSourceMap: opts.map, - inSourceMap: JSON.parse(output.map) - }); - if (opts.map) { - output.code += '\n//# sourceMappingURL=' + opts.map + '\n'; - } - } - - if (opts.map) { - fs.writeFileSync(opts.map, output.map, 'utf8'); - } - output = output.code; - - if (opts.output) { - fs.writeFileSync(opts.output, output, 'utf8'); - } else { - console.log(output); - } -}; - -function arrayCast(value) { - value = value != null ? value : []; - if (!Array.isArray(value)) { - value = [value]; - } - return value; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/README.md b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/README.md deleted file mode 100644 index b7c6786ce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/README.md +++ /dev/null @@ -1,510 +0,0 @@ -# Source Map - -This is a library to generate and consume the source map format -[described here][format]. - -This library is written in the Asynchronous Module Definition format, and works -in the following environments: - -* Modern Browsers supporting ECMAScript 5 (either after the build, or with an - AMD loader such as RequireJS) - -* Inside Firefox (as a JSM file, after the build) - -* With NodeJS versions 0.8.X and higher - -## Node - - $ npm install source-map - -## Building from Source (for everywhere else) - -Install Node and then run - - $ git clone https://fitzgen@github.com/mozilla/source-map.git - $ cd source-map - $ npm link . - -Next, run - - $ node Makefile.dryice.js - -This should spew a bunch of stuff to stdout, and create the following files: - -* `dist/source-map.js` - The unminified browser version. - -* `dist/source-map.min.js` - The minified browser version. - -* `dist/SourceMap.jsm` - The JavaScript Module for inclusion in Firefox source. - -## Examples - -### Consuming a source map - -```js -var rawSourceMap = { - version: 3, - file: 'min.js', - names: ['bar', 'baz', 'n'], - sources: ['one.js', 'two.js'], - sourceRoot: 'http://example.com/www/js/', - mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA' -}; - -var smc = new SourceMapConsumer(rawSourceMap); - -console.log(smc.sources); -// [ 'http://example.com/www/js/one.js', -// 'http://example.com/www/js/two.js' ] - -console.log(smc.originalPositionFor({ - line: 2, - column: 28 -})); -// { source: 'http://example.com/www/js/two.js', -// line: 2, -// column: 10, -// name: 'n' } - -console.log(smc.generatedPositionFor({ - source: 'http://example.com/www/js/two.js', - line: 2, - column: 10 -})); -// { line: 2, column: 28 } - -smc.eachMapping(function (m) { - // ... -}); -``` - -### Generating a source map - -In depth guide: -[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/) - -#### With SourceNode (high level API) - -```js -function compile(ast) { - switch (ast.type) { - case 'BinaryExpression': - return new SourceNode( - ast.location.line, - ast.location.column, - ast.location.source, - [compile(ast.left), " + ", compile(ast.right)] - ); - case 'Literal': - return new SourceNode( - ast.location.line, - ast.location.column, - ast.location.source, - String(ast.value) - ); - // ... - default: - throw new Error("Bad AST"); - } -} - -var ast = parse("40 + 2", "add.js"); -console.log(compile(ast).toStringWithSourceMap({ - file: 'add.js' -})); -// { code: '40 + 2', -// map: [object SourceMapGenerator] } -``` - -#### With SourceMapGenerator (low level API) - -```js -var map = new SourceMapGenerator({ - file: "source-mapped.js" -}); - -map.addMapping({ - generated: { - line: 10, - column: 35 - }, - source: "foo.js", - original: { - line: 33, - column: 2 - }, - name: "christopher" -}); - -console.log(map.toString()); -// '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}' -``` - -## API - -Get a reference to the module: - -```js -// NodeJS -var sourceMap = require('source-map'); - -// Browser builds -var sourceMap = window.sourceMap; - -// Inside Firefox -let sourceMap = {}; -Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap); -``` - -### SourceMapConsumer - -A SourceMapConsumer instance represents a parsed source map which we can query -for information about the original file positions by giving it a file position -in the generated source. - -#### new SourceMapConsumer(rawSourceMap) - -The only parameter is the raw source map (either as a string which can be -`JSON.parse`'d, or an object). According to the spec, source maps have the -following attributes: - -* `version`: Which version of the source map spec this map is following. - -* `sources`: An array of URLs to the original source files. - -* `names`: An array of identifiers which can be referrenced by individual - mappings. - -* `sourceRoot`: Optional. The URL root from which all sources are relative. - -* `sourcesContent`: Optional. An array of contents of the original source files. - -* `mappings`: A string of base64 VLQs which contain the actual mappings. - -* `file`: Optional. The generated filename this source map is associated with. - -#### SourceMapConsumer.prototype.computeColumnSpans() - -Compute the last column for each generated mapping. The last column is -inclusive. - -#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition) - -Returns the original source, line, and column information for the generated -source's line and column positions provided. The only argument is an object with -the following properties: - -* `line`: The line number in the generated source. - -* `column`: The column number in the generated source. - -* `bias`: Either `SourceMapConsumer.GREATEST_LOWER_BOUND` or - `SourceMapConsumer.LEAST_UPPER_BOUND`. Specifies whether to return the closest - element that is smaller than or greater than the one we are searching for, - respectively, if the exact element cannot be found. Defaults to - `SourceMapConsumer.GREATEST_LOWER_BOUND`. - -and an object is returned with the following properties: - -* `source`: The original source file, or null if this information is not - available. - -* `line`: The line number in the original source, or null if this information is - not available. - -* `column`: The column number in the original source, or null or null if this - information is not available. - -* `name`: The original identifier, or null if this information is not available. - -#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition) - -Returns the generated line and column information for the original source, -line, and column positions provided. The only argument is an object with -the following properties: - -* `source`: The filename of the original source. - -* `line`: The line number in the original source. - -* `column`: The column number in the original source. - -and an object is returned with the following properties: - -* `line`: The line number in the generated source, or null. - -* `column`: The column number in the generated source, or null. - -#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition) - -Returns all generated line and column information for the original source, line, -and column provided. If no column is provided, returns all mappings -corresponding to a either the line we are searching for or the next closest line -that has any mappings. Otherwise, returns all mappings corresponding to the -given line and either the column we are searching for or the next closest column -that has any offsets. - -The only argument is an object with the following properties: - -* `source`: The filename of the original source. - -* `line`: The line number in the original source. - -* `column`: Optional. The column number in the original source. - -and an array of objects is returned, each with the following properties: - -* `line`: The line number in the generated source, or null. - -* `column`: The column number in the generated source, or null. - -#### SourceMapConsumer.prototype.hasContentsOfAllSources() - -Return true if we have the embedded source content for every source listed in -the source map, false otherwise. - -In other words, if this method returns `true`, then `smc.sourceContentFor(s)` -will succeed for every source `s` in `smc.sources`. - -#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing]) - -Returns the original source content for the source provided. The only -argument is the URL of the original source file. - -If the source content for the given source is not found, then an error is -thrown. Optionally, pass `true` as the second param to have `null` returned -instead. - -#### SourceMapConsumer.prototype.eachMapping(callback, context, order) - -Iterate over each mapping between an original source/line/column and a -generated line/column in this source map. - -* `callback`: The function that is called with each mapping. Mappings have the - form `{ source, generatedLine, generatedColumn, originalLine, originalColumn, - name }` - -* `context`: Optional. If specified, this object will be the value of `this` - every time that `callback` is called. - -* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or - `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over - the mappings sorted by the generated file's line/column order or the - original's source/line/column order, respectively. Defaults to - `SourceMapConsumer.GENERATED_ORDER`. - -### SourceMapGenerator - -An instance of the SourceMapGenerator represents a source map which is being -built incrementally. - -#### new SourceMapGenerator([startOfSourceMap]) - -You may pass an object with the following properties: - -* `file`: The filename of the generated source that this source map is - associated with. - -* `sourceRoot`: A root for all relative URLs in this source map. - -* `skipValidation`: Optional. When `true`, disables validation of mappings as - they are added. This can improve performance but should be used with - discretion, as a last resort. Even then, one should avoid using this flag when - running tests, if possible. - -#### SourceMapGenerator.fromSourceMap(sourceMapConsumer) - -Creates a new SourceMapGenerator based on a SourceMapConsumer - -* `sourceMapConsumer` The SourceMap. - -#### SourceMapGenerator.prototype.addMapping(mapping) - -Add a single mapping from original source line and column to the generated -source's line and column for this source map being created. The mapping object -should have the following properties: - -* `generated`: An object with the generated line and column positions. - -* `original`: An object with the original line and column positions. - -* `source`: The original source file (relative to the sourceRoot). - -* `name`: An optional original token name for this mapping. - -#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent) - -Set the source content for an original source file. - -* `sourceFile` the URL of the original source file. - -* `sourceContent` the content of the source file. - -#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]]) - -Applies a SourceMap for a source file to the SourceMap. -Each mapping to the supplied source file is rewritten using the -supplied SourceMap. Note: The resolution for the resulting mappings -is the minimium of this map and the supplied map. - -* `sourceMapConsumer`: The SourceMap to be applied. - -* `sourceFile`: Optional. The filename of the source file. - If omitted, sourceMapConsumer.file will be used, if it exists. - Otherwise an error will be thrown. - -* `sourceMapPath`: Optional. The dirname of the path to the SourceMap - to be applied. If relative, it is relative to the SourceMap. - - This parameter is needed when the two SourceMaps aren't in the same - directory, and the SourceMap to be applied contains relative source - paths. If so, those relative source paths need to be rewritten - relative to the SourceMap. - - If omitted, it is assumed that both SourceMaps are in the same directory, - thus not needing any rewriting. (Supplying `'.'` has the same effect.) - -#### SourceMapGenerator.prototype.toString() - -Renders the source map being generated to a string. - -### SourceNode - -SourceNodes provide a way to abstract over interpolating and/or concatenating -snippets of generated JavaScript source code, while maintaining the line and -column information associated between those snippets and the original source -code. This is useful as the final intermediate representation a compiler might -use before outputting the generated JS and source map. - -#### new SourceNode([line, column, source[, chunk[, name]]]) - -* `line`: The original line number associated with this source node, or null if - it isn't associated with an original line. - -* `column`: The original column number associated with this source node, or null - if it isn't associated with an original column. - -* `source`: The original source's filename; null if no filename is provided. - -* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see - below. - -* `name`: Optional. The original identifier. - -#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath]) - -Creates a SourceNode from generated code and a SourceMapConsumer. - -* `code`: The generated code - -* `sourceMapConsumer` The SourceMap for the generated code - -* `relativePath` The optional path that relative sources in `sourceMapConsumer` - should be relative to. - -#### SourceNode.prototype.add(chunk) - -Add a chunk of generated JS to this source node. - -* `chunk`: A string snippet of generated JS code, another instance of - `SourceNode`, or an array where each member is one of those things. - -#### SourceNode.prototype.prepend(chunk) - -Prepend a chunk of generated JS to this source node. - -* `chunk`: A string snippet of generated JS code, another instance of - `SourceNode`, or an array where each member is one of those things. - -#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent) - -Set the source content for a source file. This will be added to the -`SourceMap` in the `sourcesContent` field. - -* `sourceFile`: The filename of the source file - -* `sourceContent`: The content of the source file - -#### SourceNode.prototype.walk(fn) - -Walk over the tree of JS snippets in this node and its children. The walking -function is called once for each snippet of JS and is passed that snippet and -the its original associated source's line/column location. - -* `fn`: The traversal function. - -#### SourceNode.prototype.walkSourceContents(fn) - -Walk over the tree of SourceNodes. The walking function is called for each -source file content and is passed the filename and source content. - -* `fn`: The traversal function. - -#### SourceNode.prototype.join(sep) - -Like `Array.prototype.join` except for SourceNodes. Inserts the separator -between each of this source node's children. - -* `sep`: The separator. - -#### SourceNode.prototype.replaceRight(pattern, replacement) - -Call `String.prototype.replace` on the very right-most source snippet. Useful -for trimming whitespace from the end of a source node, etc. - -* `pattern`: The pattern to replace. - -* `replacement`: The thing to replace the pattern with. - -#### SourceNode.prototype.toString() - -Return the string representation of this source node. Walks over the tree and -concatenates all the various snippets together to one string. - -#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap]) - -Returns the string representation of this tree of source nodes, plus a -SourceMapGenerator which contains all the mappings between the generated and -original sources. - -The arguments are the same as those to `new SourceMapGenerator`. - -## Tests - -[![Build Status](https://travis-ci.org/mozilla/source-map.png?branch=master)](https://travis-ci.org/mozilla/source-map) - -Install NodeJS version 0.8.0 or greater, then run `node test/run-tests.js`. - -To add new tests, create a new file named `test/test-.js` -and export your test functions with names that start with "test", for example - -```js -exports["test doing the foo bar"] = function (assert, util) { - ... -}; -``` - -The new test will be located automatically when you run the suite. - -The `util` argument is the test utility module located at `test/source-map/util`. - -The `assert` argument is a cut down version of node's assert module. You have -access to the following assertion functions: - -* `doesNotThrow` - -* `equal` - -* `ok` - -* `strictEqual` - -* `throws` - -(The reason for the restricted set of test functions is because we need the -tests to run inside Firefox's test suite as well and so the assert module is -shimmed in that environment. See `build/assert-shim.js`.) - -[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit -[feature]: https://wiki.mozilla.org/DevTools/Features/SourceMap -[Dryice]: https://github.com/mozilla/dryice diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/assert-shim.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/assert-shim.js deleted file mode 100644 index daa1a623c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/assert-shim.js +++ /dev/null @@ -1,56 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ -define('test/source-map/assert', ['exports'], function (exports) { - - let do_throw = function (msg) { - throw new Error(msg); - }; - - exports.init = function (throw_fn) { - do_throw = throw_fn; - }; - - exports.doesNotThrow = function (fn) { - try { - fn(); - } - catch (e) { - do_throw(e.message); - } - }; - - exports.equal = function (actual, expected, msg) { - msg = msg || String(actual) + ' != ' + String(expected); - if (actual != expected) { - do_throw(msg); - } - }; - - exports.ok = function (val, msg) { - msg = msg || String(val) + ' is falsey'; - if (!Boolean(val)) { - do_throw(msg); - } - }; - - exports.strictEqual = function (actual, expected, msg) { - msg = msg || String(actual) + ' !== ' + String(expected); - if (actual !== expected) { - do_throw(msg); - } - }; - - exports.throws = function (fn) { - try { - fn(); - do_throw('Expected an error to be thrown, but it wasn\'t.'); - } - catch (e) { - } - }; - -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/mini-require.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/mini-require.js deleted file mode 100644 index 0daf45377..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/mini-require.js +++ /dev/null @@ -1,152 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -/** - * Define a module along with a payload. - * @param {string} moduleName Name for the payload - * @param {ignored} deps Ignored. For compatibility with CommonJS AMD Spec - * @param {function} payload Function with (require, exports, module) params - */ -function define(moduleName, deps, payload) { - if (typeof moduleName != "string") { - throw new TypeError('Expected string, got: ' + moduleName); - } - - if (arguments.length == 2) { - payload = deps; - } - - if (moduleName in define.modules) { - throw new Error("Module already defined: " + moduleName); - } - define.modules[moduleName] = payload; -}; - -/** - * The global store of un-instantiated modules - */ -define.modules = {}; - - -/** - * We invoke require() in the context of a Domain so we can have multiple - * sets of modules running separate from each other. - * This contrasts with JSMs which are singletons, Domains allows us to - * optionally load a CommonJS module twice with separate data each time. - * Perhaps you want 2 command lines with a different set of commands in each, - * for example. - */ -function Domain() { - this.modules = {}; - this._currentModule = null; -} - -(function () { - - /** - * Lookup module names and resolve them by calling the definition function if - * needed. - * There are 2 ways to call this, either with an array of dependencies and a - * callback to call when the dependencies are found (which can happen - * asynchronously in an in-page context) or with a single string an no callback - * where the dependency is resolved synchronously and returned. - * The API is designed to be compatible with the CommonJS AMD spec and - * RequireJS. - * @param {string[]|string} deps A name, or names for the payload - * @param {function|undefined} callback Function to call when the dependencies - * are resolved - * @return {undefined|object} The module required or undefined for - * array/callback method - */ - Domain.prototype.require = function(deps, callback) { - if (Array.isArray(deps)) { - var params = deps.map(function(dep) { - return this.lookup(dep); - }, this); - if (callback) { - callback.apply(null, params); - } - return undefined; - } - else { - return this.lookup(deps); - } - }; - - function normalize(path) { - var bits = path.split('/'); - var i = 1; - while (i < bits.length) { - if (bits[i] === '..') { - bits.splice(i-1, 1); - } else if (bits[i] === '.') { - bits.splice(i, 1); - } else { - i++; - } - } - return bits.join('/'); - } - - function join(a, b) { - a = a.trim(); - b = b.trim(); - if (/^\//.test(b)) { - return b; - } else { - return a.replace(/\/*$/, '/') + b; - } - } - - function dirname(path) { - var bits = path.split('/'); - bits.pop(); - return bits.join('/'); - } - - /** - * Lookup module names and resolve them by calling the definition function if - * needed. - * @param {string} moduleName A name for the payload to lookup - * @return {object} The module specified by aModuleName or null if not found. - */ - Domain.prototype.lookup = function(moduleName) { - if (/^\./.test(moduleName)) { - moduleName = normalize(join(dirname(this._currentModule), moduleName)); - } - - if (moduleName in this.modules) { - var module = this.modules[moduleName]; - return module; - } - - if (!(moduleName in define.modules)) { - throw new Error("Module not defined: " + moduleName); - } - - var module = define.modules[moduleName]; - - if (typeof module == "function") { - var exports = {}; - var previousModule = this._currentModule; - this._currentModule = moduleName; - module(this.require.bind(this), exports, { id: moduleName, uri: "" }); - this._currentModule = previousModule; - module = exports; - } - - // cache the resulting module object for next time - this.modules[moduleName] = module; - - return module; - }; - -}()); - -define.Domain = Domain; -define.globalDomain = new Domain(); -var require = define.globalDomain.require.bind(define.globalDomain); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/prefix-source-map.jsm b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/prefix-source-map.jsm deleted file mode 100644 index 209dbd7d3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/prefix-source-map.jsm +++ /dev/null @@ -1,21 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -/* - * WARNING! - * - * Do not edit this file directly, it is built from the sources at - * https://github.com/mozilla/source-map/ - */ - -/////////////////////////////////////////////////////////////////////////////// - - -this.EXPORTED_SYMBOLS = [ "SourceMapConsumer", "SourceMapGenerator", "SourceNode" ]; - -Components.utils.import("resource://gre/modules/devtools/Console.jsm"); -Components.utils.import('resource://gre/modules/devtools/Require.jsm'); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/prefix-utils.jsm b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/prefix-utils.jsm deleted file mode 100644 index 80341d452..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/prefix-utils.jsm +++ /dev/null @@ -1,18 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ - -/* - * WARNING! - * - * Do not edit this file directly, it is built from the sources at - * https://github.com/mozilla/source-map/ - */ - -Components.utils.import('resource://gre/modules/devtools/Require.jsm'); -Components.utils.import('resource://gre/modules/devtools/SourceMap.jsm'); - -this.EXPORTED_SYMBOLS = [ "define", "runSourceMapTests" ]; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/suffix-browser.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/suffix-browser.js deleted file mode 100644 index fb29ff5fd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/suffix-browser.js +++ /dev/null @@ -1,8 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/////////////////////////////////////////////////////////////////////////////// - -this.sourceMap = { - SourceMapConsumer: require('source-map/source-map-consumer').SourceMapConsumer, - SourceMapGenerator: require('source-map/source-map-generator').SourceMapGenerator, - SourceNode: require('source-map/source-node').SourceNode -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/suffix-source-map.jsm b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/suffix-source-map.jsm deleted file mode 100644 index cf3c2d8d3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/suffix-source-map.jsm +++ /dev/null @@ -1,6 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/////////////////////////////////////////////////////////////////////////////// - -this.SourceMapConsumer = require('source-map/source-map-consumer').SourceMapConsumer; -this.SourceMapGenerator = require('source-map/source-map-generator').SourceMapGenerator; -this.SourceNode = require('source-map/source-node').SourceNode; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/suffix-utils.jsm b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/suffix-utils.jsm deleted file mode 100644 index b31b84cb6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/suffix-utils.jsm +++ /dev/null @@ -1,21 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ -function runSourceMapTests(modName, do_throw) { - let mod = require(modName); - let assert = require('test/source-map/assert'); - let util = require('test/source-map/util'); - - assert.init(do_throw); - - for (let k in mod) { - if (/^test/.test(k)) { - mod[k](assert, util); - } - } - -} -this.runSourceMapTests = runSourceMapTests; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/test-prefix.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/test-prefix.js deleted file mode 100644 index 1b13f300e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/test-prefix.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - * WARNING! - * - * Do not edit this file directly, it is built from the sources at - * https://github.com/mozilla/source-map/ - */ - -Components.utils.import('resource://test/Utils.jsm'); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/test-suffix.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/test-suffix.js deleted file mode 100644 index bec2de3f2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/build/test-suffix.js +++ /dev/null @@ -1,3 +0,0 @@ -function run_test() { - runSourceMapTests('{THIS_MODULE}', do_throw); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map.js deleted file mode 100644 index 121ad2416..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - * Copyright 2009-2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE.txt or: - * http://opensource.org/licenses/BSD-3-Clause - */ -exports.SourceMapGenerator = require('./source-map/source-map-generator').SourceMapGenerator; -exports.SourceMapConsumer = require('./source-map/source-map-consumer').SourceMapConsumer; -exports.SourceNode = require('./source-map/source-node').SourceNode; diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/array-set.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/array-set.js deleted file mode 100644 index 19cb841ca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/array-set.js +++ /dev/null @@ -1,107 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ -if (typeof define !== 'function') { - var define = require('amdefine')(module, require); -} -define(function (require, exports, module) { - - var util = require('./util'); - - /** - * A data structure which is a combination of an array and a set. Adding a new - * member is O(1), testing for membership is O(1), and finding the index of an - * element is O(1). Removing elements from the set is not supported. Only - * strings are supported for membership. - */ - function ArraySet() { - this._array = []; - this._set = {}; - } - - /** - * Static method for creating ArraySet instances from an existing array. - */ - ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { - var set = new ArraySet(); - for (var i = 0, len = aArray.length; i < len; i++) { - set.add(aArray[i], aAllowDuplicates); - } - return set; - }; - - /** - * Return how many unique items are in this ArraySet. If duplicates have been - * added, than those do not count towards the size. - * - * @returns Number - */ - ArraySet.prototype.size = function ArraySet_size() { - return Object.getOwnPropertyNames(this._set).length; - }; - - /** - * Add the given string to this set. - * - * @param String aStr - */ - ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { - var isDuplicate = this.has(aStr); - var idx = this._array.length; - if (!isDuplicate || aAllowDuplicates) { - this._array.push(aStr); - } - if (!isDuplicate) { - this._set[util.toSetString(aStr)] = idx; - } - }; - - /** - * Is the given string a member of this set? - * - * @param String aStr - */ - ArraySet.prototype.has = function ArraySet_has(aStr) { - return Object.prototype.hasOwnProperty.call(this._set, - util.toSetString(aStr)); - }; - - /** - * What is the index of the given string in the array? - * - * @param String aStr - */ - ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { - if (this.has(aStr)) { - return this._set[util.toSetString(aStr)]; - } - throw new Error('"' + aStr + '" is not in the set.'); - }; - - /** - * What is the element at the given index? - * - * @param Number aIdx - */ - ArraySet.prototype.at = function ArraySet_at(aIdx) { - if (aIdx >= 0 && aIdx < this._array.length) { - return this._array[aIdx]; - } - throw new Error('No element indexed by ' + aIdx); - }; - - /** - * Returns the array representation of this set (which has the proper indices - * indicated by indexOf). Note that this is a copy of the internal array used - * for storing the members so that no one can mess with internal state. - */ - ArraySet.prototype.toArray = function ArraySet_toArray() { - return this._array.slice(); - }; - - exports.ArraySet = ArraySet; - -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/base64-vlq.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/base64-vlq.js deleted file mode 100644 index bbe9a58e2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/base64-vlq.js +++ /dev/null @@ -1,146 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - * - * Based on the Base 64 VLQ implementation in Closure Compiler: - * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java - * - * Copyright 2011 The Closure Compiler Authors. All rights reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -if (typeof define !== 'function') { - var define = require('amdefine')(module, require); -} -define(function (require, exports, module) { - - var base64 = require('./base64'); - - // A single base 64 digit can contain 6 bits of data. For the base 64 variable - // length quantities we use in the source map spec, the first bit is the sign, - // the next four bits are the actual value, and the 6th bit is the - // continuation bit. The continuation bit tells us whether there are more - // digits in this value following this digit. - // - // Continuation - // | Sign - // | | - // V V - // 101011 - - var VLQ_BASE_SHIFT = 5; - - // binary: 100000 - var VLQ_BASE = 1 << VLQ_BASE_SHIFT; - - // binary: 011111 - var VLQ_BASE_MASK = VLQ_BASE - 1; - - // binary: 100000 - var VLQ_CONTINUATION_BIT = VLQ_BASE; - - /** - * Converts from a two-complement value to a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) - * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) - */ - function toVLQSigned(aValue) { - return aValue < 0 - ? ((-aValue) << 1) + 1 - : (aValue << 1) + 0; - } - - /** - * Converts to a two-complement value from a value where the sign bit is - * placed in the least significant bit. For example, as decimals: - * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 - * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 - */ - function fromVLQSigned(aValue) { - var isNegative = (aValue & 1) === 1; - var shifted = aValue >> 1; - return isNegative - ? -shifted - : shifted; - } - - /** - * Returns the base 64 VLQ encoded value. - */ - exports.encode = function base64VLQ_encode(aValue) { - var encoded = ""; - var digit; - - var vlq = toVLQSigned(aValue); - - do { - digit = vlq & VLQ_BASE_MASK; - vlq >>>= VLQ_BASE_SHIFT; - if (vlq > 0) { - // There are still more digits in this value, so we must make sure the - // continuation bit is marked. - digit |= VLQ_CONTINUATION_BIT; - } - encoded += base64.encode(digit); - } while (vlq > 0); - - return encoded; - }; - - /** - * Decodes the next base 64 VLQ value from the given string and returns the - * value and the rest of the string via the out parameter. - */ - exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) { - var strLen = aStr.length; - var result = 0; - var shift = 0; - var continuation, digit; - - do { - if (aIndex >= strLen) { - throw new Error("Expected more digits in base 64 VLQ value."); - } - - digit = base64.decode(aStr.charCodeAt(aIndex++)); - if (digit === -1) { - throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1)); - } - - continuation = !!(digit & VLQ_CONTINUATION_BIT); - digit &= VLQ_BASE_MASK; - result = result + (digit << shift); - shift += VLQ_BASE_SHIFT; - } while (continuation); - - aOutParam.value = fromVLQSigned(result); - aOutParam.rest = aIndex; - }; - -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/base64.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/base64.js deleted file mode 100644 index 35adbc1a4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/base64.js +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ -if (typeof define !== 'function') { - var define = require('amdefine')(module, require); -} -define(function (require, exports, module) { - - var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split(''); - - /** - * Encode an integer in the range of 0 to 63 to a single base 64 digit. - */ - exports.encode = function (number) { - if (0 <= number && number < intToCharMap.length) { - return intToCharMap[number]; - } - throw new TypeError("Must be between 0 and 63: " + aNumber); - }; - - /** - * Decode a single base 64 character code digit to an integer. Returns -1 on - * failure. - */ - exports.decode = function (charCode) { - var bigA = 65; // 'A' - var bigZ = 90; // 'Z' - - var littleA = 97; // 'a' - var littleZ = 122; // 'z' - - var zero = 48; // '0' - var nine = 57; // '9' - - var plus = 43; // '+' - var slash = 47; // '/' - - var littleOffset = 26; - var numberOffset = 52; - - // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ - if (bigA <= charCode && charCode <= bigZ) { - return (charCode - bigA); - } - - // 26 - 51: abcdefghijklmnopqrstuvwxyz - if (littleA <= charCode && charCode <= littleZ) { - return (charCode - littleA + littleOffset); - } - - // 52 - 61: 0123456789 - if (zero <= charCode && charCode <= nine) { - return (charCode - zero + numberOffset); - } - - // 62: + - if (charCode == plus) { - return 62; - } - - // 63: / - if (charCode == slash) { - return 63; - } - - // Invalid base64 digit. - return -1; - }; - -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/binary-search.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/binary-search.js deleted file mode 100644 index 7936f7e7c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/binary-search.js +++ /dev/null @@ -1,117 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ -if (typeof define !== 'function') { - var define = require('amdefine')(module, require); -} -define(function (require, exports, module) { - - exports.GREATEST_LOWER_BOUND = 1; - exports.LEAST_UPPER_BOUND = 2; - - /** - * Recursive implementation of binary search. - * - * @param aLow Indices here and lower do not contain the needle. - * @param aHigh Indices here and higher do not contain the needle. - * @param aNeedle The element being searched for. - * @param aHaystack The non-empty array being searched. - * @param aCompare Function which takes two elements and returns -1, 0, or 1. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - */ - function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) { - // This function terminates when one of the following is true: - // - // 1. We find the exact element we are looking for. - // - // 2. We did not find the exact element, but we can return the index of - // the next-closest element. - // - // 3. We did not find the exact element, and there is no next-closest - // element than the one we are searching for, so we return -1. - var mid = Math.floor((aHigh - aLow) / 2) + aLow; - var cmp = aCompare(aNeedle, aHaystack[mid], true); - if (cmp === 0) { - // Found the element we are looking for. - return mid; - } - else if (cmp > 0) { - // Our needle is greater than aHaystack[mid]. - if (aHigh - mid > 1) { - // The element is in the upper half. - return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias); - } - - // The exact needle element was not found in this haystack. Determine if - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return aHigh < aHaystack.length ? aHigh : -1; - } else { - return mid; - } - } - else { - // Our needle is less than aHaystack[mid]. - if (mid - aLow > 1) { - // The element is in the lower half. - return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias); - } - - // we are in termination case (3) or (2) and return the appropriate thing. - if (aBias == exports.LEAST_UPPER_BOUND) { - return mid; - } else { - return aLow < 0 ? -1 : aLow; - } - } - } - - /** - * This is an implementation of binary search which will always try and return - * the index of the closest element if there is no exact hit. This is because - * mappings between original and generated line/col pairs are single points, - * and there is an implicit region between each of them, so a miss just means - * that you aren't on the very start of a region. - * - * @param aNeedle The element you are looking for. - * @param aHaystack The array that is being searched. - * @param aCompare A function which takes the needle and an element in the - * array and returns -1, 0, or 1 depending on whether the needle is less - * than, equal to, or greater than the element, respectively. - * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or - * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'. - */ - exports.search = function search(aNeedle, aHaystack, aCompare, aBias) { - if (aHaystack.length === 0) { - return -1; - } - - var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, - aCompare, aBias || exports.GREATEST_LOWER_BOUND); - if (index < 0) { - return -1; - } - - // We have found either the exact element, or the next-closest element than - // the one we are searching for. However, there may be more than one such - // element. Make sure we always return the smallest of these. - while (index - 1 >= 0) { - if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) { - break; - } - --index; - } - - return index; - }; - -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/mapping-list.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/mapping-list.js deleted file mode 100644 index 01aff2241..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/mapping-list.js +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2014 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ -if (typeof define !== 'function') { - var define = require('amdefine')(module, require); -} -define(function (require, exports, module) { - - var util = require('./util'); - - /** - * Determine whether mappingB is after mappingA with respect to generated - * position. - */ - function generatedPositionAfter(mappingA, mappingB) { - // Optimized for most common case - var lineA = mappingA.generatedLine; - var lineB = mappingB.generatedLine; - var columnA = mappingA.generatedColumn; - var columnB = mappingB.generatedColumn; - return lineB > lineA || lineB == lineA && columnB >= columnA || - util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0; - } - - /** - * A data structure to provide a sorted view of accumulated mappings in a - * performance conscious manner. It trades a neglibable overhead in general - * case for a large speedup in case of mappings being added in order. - */ - function MappingList() { - this._array = []; - this._sorted = true; - // Serves as infimum - this._last = {generatedLine: -1, generatedColumn: 0}; - } - - /** - * Iterate through internal items. This method takes the same arguments that - * `Array.prototype.forEach` takes. - * - * NOTE: The order of the mappings is NOT guaranteed. - */ - MappingList.prototype.unsortedForEach = - function MappingList_forEach(aCallback, aThisArg) { - this._array.forEach(aCallback, aThisArg); - }; - - /** - * Add the given source mapping. - * - * @param Object aMapping - */ - MappingList.prototype.add = function MappingList_add(aMapping) { - var mapping; - if (generatedPositionAfter(this._last, aMapping)) { - this._last = aMapping; - this._array.push(aMapping); - } else { - this._sorted = false; - this._array.push(aMapping); - } - }; - - /** - * Returns the flat, sorted array of mappings. The mappings are sorted by - * generated position. - * - * WARNING: This method returns internal data without copying, for - * performance. The return value must NOT be mutated, and should be treated as - * an immutable borrow. If you want to take ownership, you must make your own - * copy. - */ - MappingList.prototype.toArray = function MappingList_toArray() { - if (!this._sorted) { - this._array.sort(util.compareByGeneratedPositionsInflated); - this._sorted = true; - } - return this._array; - }; - - exports.MappingList = MappingList; - -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/quick-sort.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/quick-sort.js deleted file mode 100644 index e0551eda5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/quick-sort.js +++ /dev/null @@ -1,120 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ -if (typeof define !== 'function') { - var define = require('amdefine')(module, require); -} -define(function (require, exports, module) { - - // It turns out that some (most?) JavaScript engines don't self-host - // `Array.prototype.sort`. This makes sense because C++ will likely remain - // faster than JS when doing raw CPU-intensive sorting. However, when using a - // custom comparator function, calling back and forth between the VM's C++ and - // JIT'd JS is rather slow *and* loses JIT type information, resulting in - // worse generated code for the comparator function than would be optimal. In - // fact, when sorting with a comparator, these costs outweigh the benefits of - // sorting in C++. By using our own JS-implemented Quick Sort (below), we get - // a ~3500ms mean speed-up in `bench/bench.html`. - - /** - * Swap the elements indexed by `x` and `y` in the array `ary`. - * - * @param {Array} ary - * The array. - * @param {Number} x - * The index of the first item. - * @param {Number} y - * The index of the second item. - */ - function swap(ary, x, y) { - var temp = ary[x]; - ary[x] = ary[y]; - ary[y] = temp; - } - - /** - * Returns a random integer within the range `low .. high` inclusive. - * - * @param {Number} low - * The lower bound on the range. - * @param {Number} high - * The upper bound on the range. - */ - function randomIntInRange(low, high) { - return Math.round(low + (Math.random() * (high - low))); - } - - /** - * The Quick Sort algorithm. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - * @param {Number} p - * Start index of the array - * @param {Number} r - * End index of the array - */ - function doQuickSort(ary, comparator, p, r) { - // If our lower bound is less than our upper bound, we (1) partition the - // array into two pieces and (2) recurse on each half. If it is not, this is - // the empty array and our base case. - - if (p < r) { - // (1) Partitioning. - // - // The partitioning chooses a pivot between `p` and `r` and moves all - // elements that are less than or equal to the pivot to the before it, and - // all the elements that are greater than it after it. The effect is that - // once partition is done, the pivot is in the exact place it will be when - // the array is put in sorted order, and it will not need to be moved - // again. This runs in O(n) time. - - // Always choose a random pivot so that an input array which is reverse - // sorted does not cause O(n^2) running time. - var pivotIndex = randomIntInRange(p, r); - var i = p - 1; - - swap(ary, pivotIndex, r); - var pivot = ary[r]; - - // Immediately after `j` is incremented in this loop, the following hold - // true: - // - // * Every element in `ary[p .. i]` is less than or equal to the pivot. - // - // * Every element in `ary[i+1 .. j-1]` is greater than the pivot. - for (var j = p; j < r; j++) { - if (comparator(ary[j], pivot) <= 0) { - i += 1; - swap(ary, i, j); - } - } - - swap(ary, i + 1, j); - var q = i + 1; - - // (2) Recurse on each half. - - doQuickSort(ary, comparator, p, q - 1); - doQuickSort(ary, comparator, q + 1, r); - } - } - - /** - * Sort the given array in-place with the given comparator function. - * - * @param {Array} ary - * An array to sort. - * @param {function} comparator - * Function to use to compare two items. - */ - exports.quickSort = function (ary, comparator) { - doQuickSort(ary, comparator, 0, ary.length - 1); - }; - -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/source-map-consumer.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/source-map-consumer.js deleted file mode 100644 index cbdc467c5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/source-map-consumer.js +++ /dev/null @@ -1,1077 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ -if (typeof define !== 'function') { - var define = require('amdefine')(module, require); -} -define(function (require, exports, module) { - - var util = require('./util'); - var binarySearch = require('./binary-search'); - var ArraySet = require('./array-set').ArraySet; - var base64VLQ = require('./base64-vlq'); - var quickSort = require('./quick-sort').quickSort; - - function SourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - return sourceMap.sections != null - ? new IndexedSourceMapConsumer(sourceMap) - : new BasicSourceMapConsumer(sourceMap); - } - - SourceMapConsumer.fromSourceMap = function(aSourceMap) { - return BasicSourceMapConsumer.fromSourceMap(aSourceMap); - } - - /** - * The version of the source mapping spec that we are consuming. - */ - SourceMapConsumer.prototype._version = 3; - - // `__generatedMappings` and `__originalMappings` are arrays that hold the - // parsed mapping coordinates from the source map's "mappings" attribute. They - // are lazily instantiated, accessed via the `_generatedMappings` and - // `_originalMappings` getters respectively, and we only parse the mappings - // and create these arrays once queried for a source location. We jump through - // these hoops because there can be many thousands of mappings, and parsing - // them is expensive, so we only want to do it if we must. - // - // Each object in the arrays is of the form: - // - // { - // generatedLine: The line number in the generated code, - // generatedColumn: The column number in the generated code, - // source: The path to the original source file that generated this - // chunk of code, - // originalLine: The line number in the original source that - // corresponds to this chunk of generated code, - // originalColumn: The column number in the original source that - // corresponds to this chunk of generated code, - // name: The name of the original symbol which generated this chunk of - // code. - // } - // - // All properties except for `generatedLine` and `generatedColumn` can be - // `null`. - // - // `_generatedMappings` is ordered by the generated positions. - // - // `_originalMappings` is ordered by the original positions. - - SourceMapConsumer.prototype.__generatedMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { - get: function () { - if (!this.__generatedMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__generatedMappings; - } - }); - - SourceMapConsumer.prototype.__originalMappings = null; - Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { - get: function () { - if (!this.__originalMappings) { - this._parseMappings(this._mappings, this.sourceRoot); - } - - return this.__originalMappings; - } - }); - - SourceMapConsumer.prototype._charIsMappingSeparator = - function SourceMapConsumer_charIsMappingSeparator(aStr, index) { - var c = aStr.charAt(index); - return c === ";" || c === ","; - }; - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - SourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - throw new Error("Subclasses must implement _parseMappings"); - }; - - SourceMapConsumer.GENERATED_ORDER = 1; - SourceMapConsumer.ORIGINAL_ORDER = 2; - - SourceMapConsumer.GREATEST_LOWER_BOUND = 1; - SourceMapConsumer.LEAST_UPPER_BOUND = 2; - - /** - * Iterate over each mapping between an original source/line/column and a - * generated line/column in this source map. - * - * @param Function aCallback - * The function that is called with each mapping. - * @param Object aContext - * Optional. If specified, this object will be the value of `this` every - * time that `aCallback` is called. - * @param aOrder - * Either `SourceMapConsumer.GENERATED_ORDER` or - * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to - * iterate over the mappings sorted by the generated file's line/column - * order or the original's source/line/column order, respectively. Defaults to - * `SourceMapConsumer.GENERATED_ORDER`. - */ - SourceMapConsumer.prototype.eachMapping = - function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { - var context = aContext || null; - var order = aOrder || SourceMapConsumer.GENERATED_ORDER; - - var mappings; - switch (order) { - case SourceMapConsumer.GENERATED_ORDER: - mappings = this._generatedMappings; - break; - case SourceMapConsumer.ORIGINAL_ORDER: - mappings = this._originalMappings; - break; - default: - throw new Error("Unknown order of iteration."); - } - - var sourceRoot = this.sourceRoot; - mappings.map(function (mapping) { - var source = mapping.source === null ? null : this._sources.at(mapping.source); - if (source != null && sourceRoot != null) { - source = util.join(sourceRoot, source); - } - return { - source: source, - generatedLine: mapping.generatedLine, - generatedColumn: mapping.generatedColumn, - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: mapping.name === null ? null : this._names.at(mapping.name) - }; - }, this).forEach(aCallback, context); - }; - - /** - * Returns all generated line and column information for the original source, - * line, and column provided. If no column is provided, returns all mappings - * corresponding to a either the line we are searching for or the next - * closest line that has any mappings. Otherwise, returns all mappings - * corresponding to the given line and either the column we are searching for - * or the next closest column that has any offsets. - * - * The only argument is an object with the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: Optional. the column number in the original source. - * - * and an array of objects is returned, each with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - SourceMapConsumer.prototype.allGeneratedPositionsFor = - function SourceMapConsumer_allGeneratedPositionsFor(aArgs) { - var line = util.getArg(aArgs, 'line'); - - // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping - // returns the index of the closest mapping less than the needle. By - // setting needle.originalColumn to 0, we thus find the last mapping for - // the given line, provided such a mapping exists. - var needle = { - source: util.getArg(aArgs, 'source'), - originalLine: line, - originalColumn: util.getArg(aArgs, 'column', 0) - }; - - if (this.sourceRoot != null) { - needle.source = util.relative(this.sourceRoot, needle.source); - } - if (!this._sources.has(needle.source)) { - return []; - } - needle.source = this._sources.indexOf(needle.source); - - var mappings = []; - - var index = this._findMapping(needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - binarySearch.LEAST_UPPER_BOUND); - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (aArgs.column === undefined) { - var originalLine = mapping.originalLine; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we found. Since - // mappings are sorted, this is guaranteed to find all mappings for - // the line we found. - while (mapping && mapping.originalLine === originalLine) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } else { - var originalColumn = mapping.originalColumn; - - // Iterate until either we run out of mappings, or we run into - // a mapping for a different line than the one we were searching for. - // Since mappings are sorted, this is guaranteed to find all mappings for - // the line we are searching for. - while (mapping && - mapping.originalLine === line && - mapping.originalColumn == originalColumn) { - mappings.push({ - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }); - - mapping = this._originalMappings[++index]; - } - } - } - - return mappings; - }; - - exports.SourceMapConsumer = SourceMapConsumer; - - /** - * A BasicSourceMapConsumer instance represents a parsed source map which we can - * query for information about the original file positions by giving it a file - * position in the generated source. - * - * The only parameter is the raw source map (either as a JSON string, or - * already parsed to an object). According to the spec, source maps have the - * following attributes: - * - * - version: Which version of the source map spec this map is following. - * - sources: An array of URLs to the original source files. - * - names: An array of identifiers which can be referrenced by individual mappings. - * - sourceRoot: Optional. The URL root from which all sources are relative. - * - sourcesContent: Optional. An array of contents of the original source files. - * - mappings: A string of base64 VLQs which contain the actual mappings. - * - file: Optional. The generated file this source map is associated with. - * - * Here is an example source map, taken from the source map spec[0]: - * - * { - * version : 3, - * file: "out.js", - * sourceRoot : "", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AA,AB;;ABCDE;" - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# - */ - function BasicSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sources = util.getArg(sourceMap, 'sources'); - // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which - // requires the array) to play nice here. - var names = util.getArg(sourceMap, 'names', []); - var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); - var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); - var mappings = util.getArg(sourceMap, 'mappings'); - var file = util.getArg(sourceMap, 'file', null); - - // Once again, Sass deviates from the spec and supplies the version as a - // string rather than a number, so we use loose equality checking here. - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - // Some source maps produce relative source paths like "./foo.js" instead of - // "foo.js". Normalize these first so that future comparisons will succeed. - // See bugzil.la/1090768. - sources = sources.map(util.normalize); - - // Pass `true` below to allow duplicate names and sources. While source maps - // are intended to be compressed and deduplicated, the TypeScript compiler - // sometimes generates source maps with duplicates in them. See Github issue - // #72 and bugzil.la/889492. - this._names = ArraySet.fromArray(names, true); - this._sources = ArraySet.fromArray(sources, true); - - this.sourceRoot = sourceRoot; - this.sourcesContent = sourcesContent; - this._mappings = mappings; - this.file = file; - } - - BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer; - - /** - * Create a BasicSourceMapConsumer from a SourceMapGenerator. - * - * @param SourceMapGenerator aSourceMap - * The source map that will be consumed. - * @returns BasicSourceMapConsumer - */ - BasicSourceMapConsumer.fromSourceMap = - function SourceMapConsumer_fromSourceMap(aSourceMap) { - var smc = Object.create(BasicSourceMapConsumer.prototype); - - var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); - var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); - smc.sourceRoot = aSourceMap._sourceRoot; - smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), - smc.sourceRoot); - smc.file = aSourceMap._file; - - // Because we are modifying the entries (by converting string sources and - // names to indices into the sources and names ArraySets), we have to make - // a copy of the entry or else bad things happen. Shared mutable state - // strikes again! See github issue #191. - - var generatedMappings = aSourceMap._mappings.toArray().slice(); - var destGeneratedMappings = smc.__generatedMappings = []; - var destOriginalMappings = smc.__originalMappings = []; - - for (var i = 0, length = generatedMappings.length; i < length; i++) { - var srcMapping = generatedMappings[i]; - var destMapping = new Mapping; - destMapping.generatedLine = srcMapping.generatedLine; - destMapping.generatedColumn = srcMapping.generatedColumn; - - if (srcMapping.source) { - destMapping.source = sources.indexOf(srcMapping.source); - destMapping.originalLine = srcMapping.originalLine; - destMapping.originalColumn = srcMapping.originalColumn; - - if (srcMapping.name) { - destMapping.name = names.indexOf(srcMapping.name); - } - - destOriginalMappings.push(destMapping); - } - - destGeneratedMappings.push(destMapping); - } - - quickSort(smc.__originalMappings, util.compareByOriginalPositions); - - return smc; - }; - - /** - * The version of the source mapping spec that we are consuming. - */ - BasicSourceMapConsumer.prototype._version = 3; - - /** - * The list of original sources. - */ - Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', { - get: function () { - return this._sources.toArray().map(function (s) { - return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s; - }, this); - } - }); - - /** - * Provide the JIT with a nice shape / hidden class. - */ - function Mapping() { - this.generatedLine = 0; - this.generatedColumn = 0; - this.source = null; - this.originalLine = null; - this.originalColumn = null; - this.name = null; - } - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - BasicSourceMapConsumer.prototype._parseMappings = - function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { - var generatedLine = 1; - var previousGeneratedColumn = 0; - var previousOriginalLine = 0; - var previousOriginalColumn = 0; - var previousSource = 0; - var previousName = 0; - var length = aStr.length; - var index = 0; - var cachedSegments = {}; - var temp = {}; - var originalMappings = []; - var generatedMappings = []; - var mapping, str, segment, end, value; - - while (index < length) { - if (aStr.charAt(index) === ';') { - generatedLine++; - index++; - previousGeneratedColumn = 0; - } - else if (aStr.charAt(index) === ',') { - index++; - } - else { - mapping = new Mapping(); - mapping.generatedLine = generatedLine; - - // Because each offset is encoded relative to the previous one, - // many segments often have the same encoding. We can exploit this - // fact by caching the parsed variable length fields of each segment, - // allowing us to avoid a second parse if we encounter the same - // segment again. - for (end = index; end < length; end++) { - if (this._charIsMappingSeparator(aStr, end)) { - break; - } - } - str = aStr.slice(index, end); - - segment = cachedSegments[str]; - if (segment) { - index += str.length; - } else { - segment = []; - while (index < end) { - base64VLQ.decode(aStr, index, temp); - value = temp.value; - index = temp.rest; - segment.push(value); - } - - if (segment.length === 2) { - throw new Error('Found a source, but no line and column'); - } - - if (segment.length === 3) { - throw new Error('Found a source and line, but no column'); - } - - cachedSegments[str] = segment; - } - - // Generated column. - mapping.generatedColumn = previousGeneratedColumn + segment[0]; - previousGeneratedColumn = mapping.generatedColumn; - - if (segment.length > 1) { - // Original source. - mapping.source = previousSource + segment[1]; - previousSource += segment[1]; - - // Original line. - mapping.originalLine = previousOriginalLine + segment[2]; - previousOriginalLine = mapping.originalLine; - // Lines are stored 0-based - mapping.originalLine += 1; - - // Original column. - mapping.originalColumn = previousOriginalColumn + segment[3]; - previousOriginalColumn = mapping.originalColumn; - - if (segment.length > 4) { - // Original name. - mapping.name = previousName + segment[4]; - previousName += segment[4]; - } - } - - generatedMappings.push(mapping); - if (typeof mapping.originalLine === 'number') { - originalMappings.push(mapping); - } - } - } - - quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated); - this.__generatedMappings = generatedMappings; - - quickSort(originalMappings, util.compareByOriginalPositions); - this.__originalMappings = originalMappings; - }; - - /** - * Find the mapping that best matches the hypothetical "needle" mapping that - * we are searching for in the given "haystack" of mappings. - */ - BasicSourceMapConsumer.prototype._findMapping = - function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, - aColumnName, aComparator, aBias) { - // To return the position we are searching for, we must first find the - // mapping for the given position and then return the opposite position it - // points to. Because the mappings are sorted, we can use binary search to - // find the best mapping. - - if (aNeedle[aLineName] <= 0) { - throw new TypeError('Line must be greater than or equal to 1, got ' - + aNeedle[aLineName]); - } - if (aNeedle[aColumnName] < 0) { - throw new TypeError('Column must be greater than or equal to 0, got ' - + aNeedle[aColumnName]); - } - - return binarySearch.search(aNeedle, aMappings, aComparator, aBias); - }; - - /** - * Compute the last column for each generated mapping. The last column is - * inclusive. - */ - BasicSourceMapConsumer.prototype.computeColumnSpans = - function SourceMapConsumer_computeColumnSpans() { - for (var index = 0; index < this._generatedMappings.length; ++index) { - var mapping = this._generatedMappings[index]; - - // Mappings do not contain a field for the last generated columnt. We - // can come up with an optimistic estimate, however, by assuming that - // mappings are contiguous (i.e. given two consecutive mappings, the - // first mapping ends where the second one starts). - if (index + 1 < this._generatedMappings.length) { - var nextMapping = this._generatedMappings[index + 1]; - - if (mapping.generatedLine === nextMapping.generatedLine) { - mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1; - continue; - } - } - - // The last mapping for each line spans the entire line. - mapping.lastGeneratedColumn = Infinity; - } - }; - - /** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ - BasicSourceMapConsumer.prototype.originalPositionFor = - function SourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._generatedMappings, - "generatedLine", - "generatedColumn", - util.compareByGeneratedPositionsDeflated, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._generatedMappings[index]; - - if (mapping.generatedLine === needle.generatedLine) { - var source = util.getArg(mapping, 'source', null); - if (source !== null) { - source = this._sources.at(source); - if (this.sourceRoot != null) { - source = util.join(this.sourceRoot, source); - } - } - var name = util.getArg(mapping, 'name', null); - if (name !== null) { - name = this._names.at(name); - } - return { - source: source, - line: util.getArg(mapping, 'originalLine', null), - column: util.getArg(mapping, 'originalColumn', null), - name: name - }; - } - } - - return { - source: null, - line: null, - column: null, - name: null - }; - }; - - /** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ - BasicSourceMapConsumer.prototype.hasContentsOfAllSources = - function BasicSourceMapConsumer_hasContentsOfAllSources() { - if (!this.sourcesContent) { - return false; - } - return this.sourcesContent.length >= this._sources.size() && - !this.sourcesContent.some(function (sc) { return sc == null; }); - }; - - /** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * availible. - */ - BasicSourceMapConsumer.prototype.sourceContentFor = - function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - if (!this.sourcesContent) { - return null; - } - - if (this.sourceRoot != null) { - aSource = util.relative(this.sourceRoot, aSource); - } - - if (this._sources.has(aSource)) { - return this.sourcesContent[this._sources.indexOf(aSource)]; - } - - var url; - if (this.sourceRoot != null - && (url = util.urlParse(this.sourceRoot))) { - // XXX: file:// URIs and absolute paths lead to unexpected behavior for - // many users. We can help them out when they expect file:// URIs to - // behave like it would if they were running a local HTTP server. See - // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. - var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); - if (url.scheme == "file" - && this._sources.has(fileUriAbsPath)) { - return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] - } - - if ((!url.path || url.path == "/") - && this._sources.has("/" + aSource)) { - return this.sourcesContent[this._sources.indexOf("/" + aSource)]; - } - } - - // This function is used recursively from - // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we - // don't want to throw if we can't find the source - we just want to - // return null, so we provide a flag to exit gracefully. - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - - /** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or - * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the - * closest element that is smaller than or greater than the one we are - * searching for, respectively, if the exact element cannot be found. - * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - BasicSourceMapConsumer.prototype.generatedPositionFor = - function SourceMapConsumer_generatedPositionFor(aArgs) { - var source = util.getArg(aArgs, 'source'); - if (this.sourceRoot != null) { - source = util.relative(this.sourceRoot, source); - } - if (!this._sources.has(source)) { - return { - line: null, - column: null, - lastColumn: null - }; - } - source = this._sources.indexOf(source); - - var needle = { - source: source, - originalLine: util.getArg(aArgs, 'line'), - originalColumn: util.getArg(aArgs, 'column') - }; - - var index = this._findMapping( - needle, - this._originalMappings, - "originalLine", - "originalColumn", - util.compareByOriginalPositions, - util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND) - ); - - if (index >= 0) { - var mapping = this._originalMappings[index]; - - if (mapping.source === needle.source) { - return { - line: util.getArg(mapping, 'generatedLine', null), - column: util.getArg(mapping, 'generatedColumn', null), - lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null) - }; - } - } - - return { - line: null, - column: null, - lastColumn: null - }; - }; - - exports.BasicSourceMapConsumer = BasicSourceMapConsumer; - - /** - * An IndexedSourceMapConsumer instance represents a parsed source map which - * we can query for information. It differs from BasicSourceMapConsumer in - * that it takes "indexed" source maps (i.e. ones with a "sections" field) as - * input. - * - * The only parameter is a raw source map (either as a JSON string, or already - * parsed to an object). According to the spec for indexed source maps, they - * have the following attributes: - * - * - version: Which version of the source map spec this map is following. - * - file: Optional. The generated file this source map is associated with. - * - sections: A list of section definitions. - * - * Each value under the "sections" field has two fields: - * - offset: The offset into the original specified at which this section - * begins to apply, defined as an object with a "line" and "column" - * field. - * - map: A source map definition. This source map could also be indexed, - * but doesn't have to be. - * - * Instead of the "map" field, it's also possible to have a "url" field - * specifying a URL to retrieve a source map from, but that's currently - * unsupported. - * - * Here's an example source map, taken from the source map spec[0], but - * modified to omit a section which uses the "url" field. - * - * { - * version : 3, - * file: "app.js", - * sections: [{ - * offset: {line:100, column:10}, - * map: { - * version : 3, - * file: "section.js", - * sources: ["foo.js", "bar.js"], - * names: ["src", "maps", "are", "fun"], - * mappings: "AAAA,E;;ABCDE;" - * } - * }], - * } - * - * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt - */ - function IndexedSourceMapConsumer(aSourceMap) { - var sourceMap = aSourceMap; - if (typeof aSourceMap === 'string') { - sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); - } - - var version = util.getArg(sourceMap, 'version'); - var sections = util.getArg(sourceMap, 'sections'); - - if (version != this._version) { - throw new Error('Unsupported version: ' + version); - } - - this._sources = new ArraySet(); - this._names = new ArraySet(); - - var lastOffset = { - line: -1, - column: 0 - }; - this._sections = sections.map(function (s) { - if (s.url) { - // The url field will require support for asynchronicity. - // See https://github.com/mozilla/source-map/issues/16 - throw new Error('Support for url field in sections not implemented.'); - } - var offset = util.getArg(s, 'offset'); - var offsetLine = util.getArg(offset, 'line'); - var offsetColumn = util.getArg(offset, 'column'); - - if (offsetLine < lastOffset.line || - (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) { - throw new Error('Section offsets must be ordered and non-overlapping.'); - } - lastOffset = offset; - - return { - generatedOffset: { - // The offset fields are 0-based, but we use 1-based indices when - // encoding/decoding from VLQ. - generatedLine: offsetLine + 1, - generatedColumn: offsetColumn + 1 - }, - consumer: new SourceMapConsumer(util.getArg(s, 'map')) - } - }); - } - - IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype); - IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer; - - /** - * The version of the source mapping spec that we are consuming. - */ - IndexedSourceMapConsumer.prototype._version = 3; - - /** - * The list of original sources. - */ - Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', { - get: function () { - var sources = []; - for (var i = 0; i < this._sections.length; i++) { - for (var j = 0; j < this._sections[i].consumer.sources.length; j++) { - sources.push(this._sections[i].consumer.sources[j]); - } - }; - return sources; - } - }); - - /** - * Returns the original source, line, and column information for the generated - * source's line and column positions provided. The only argument is an object - * with the following properties: - * - * - line: The line number in the generated source. - * - column: The column number in the generated source. - * - * and an object is returned with the following properties: - * - * - source: The original source file, or null. - * - line: The line number in the original source, or null. - * - column: The column number in the original source, or null. - * - name: The original identifier, or null. - */ - IndexedSourceMapConsumer.prototype.originalPositionFor = - function IndexedSourceMapConsumer_originalPositionFor(aArgs) { - var needle = { - generatedLine: util.getArg(aArgs, 'line'), - generatedColumn: util.getArg(aArgs, 'column') - }; - - // Find the section containing the generated position we're trying to map - // to an original position. - var sectionIndex = binarySearch.search(needle, this._sections, - function(needle, section) { - var cmp = needle.generatedLine - section.generatedOffset.generatedLine; - if (cmp) { - return cmp; - } - - return (needle.generatedColumn - - section.generatedOffset.generatedColumn); - }); - var section = this._sections[sectionIndex]; - - if (!section) { - return { - source: null, - line: null, - column: null, - name: null - }; - } - - return section.consumer.originalPositionFor({ - line: needle.generatedLine - - (section.generatedOffset.generatedLine - 1), - column: needle.generatedColumn - - (section.generatedOffset.generatedLine === needle.generatedLine - ? section.generatedOffset.generatedColumn - 1 - : 0), - bias: aArgs.bias - }); - }; - - /** - * Return true if we have the source content for every source in the source - * map, false otherwise. - */ - IndexedSourceMapConsumer.prototype.hasContentsOfAllSources = - function IndexedSourceMapConsumer_hasContentsOfAllSources() { - return this._sections.every(function (s) { - return s.consumer.hasContentsOfAllSources(); - }); - }; - - /** - * Returns the original source content. The only argument is the url of the - * original source file. Returns null if no original source content is - * available. - */ - IndexedSourceMapConsumer.prototype.sourceContentFor = - function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - var content = section.consumer.sourceContentFor(aSource, true); - if (content) { - return content; - } - } - if (nullOnMissing) { - return null; - } - else { - throw new Error('"' + aSource + '" is not in the SourceMap.'); - } - }; - - /** - * Returns the generated line and column information for the original source, - * line, and column positions provided. The only argument is an object with - * the following properties: - * - * - source: The filename of the original source. - * - line: The line number in the original source. - * - column: The column number in the original source. - * - * and an object is returned with the following properties: - * - * - line: The line number in the generated source, or null. - * - column: The column number in the generated source, or null. - */ - IndexedSourceMapConsumer.prototype.generatedPositionFor = - function IndexedSourceMapConsumer_generatedPositionFor(aArgs) { - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - - // Only consider this section if the requested source is in the list of - // sources of the consumer. - if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) { - continue; - } - var generatedPosition = section.consumer.generatedPositionFor(aArgs); - if (generatedPosition) { - var ret = { - line: generatedPosition.line + - (section.generatedOffset.generatedLine - 1), - column: generatedPosition.column + - (section.generatedOffset.generatedLine === generatedPosition.line - ? section.generatedOffset.generatedColumn - 1 - : 0) - }; - return ret; - } - } - - return { - line: null, - column: null - }; - }; - - /** - * Parse the mappings in a string in to a data structure which we can easily - * query (the ordered arrays in the `this.__generatedMappings` and - * `this.__originalMappings` properties). - */ - IndexedSourceMapConsumer.prototype._parseMappings = - function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) { - this.__generatedMappings = []; - this.__originalMappings = []; - for (var i = 0; i < this._sections.length; i++) { - var section = this._sections[i]; - var sectionMappings = section.consumer._generatedMappings; - for (var j = 0; j < sectionMappings.length; j++) { - var mapping = sectionMappings[i]; - - var source = section.consumer._sources.at(mapping.source); - if (section.consumer.sourceRoot !== null) { - source = util.join(section.consumer.sourceRoot, source); - } - this._sources.add(source); - source = this._sources.indexOf(source); - - var name = section.consumer._names.at(mapping.name); - this._names.add(name); - name = this._names.indexOf(name); - - // The mappings coming from the consumer for the section have - // generated positions relative to the start of the section, so we - // need to offset them to be relative to the start of the concatenated - // generated file. - var adjustedMapping = { - source: source, - generatedLine: mapping.generatedLine + - (section.generatedOffset.generatedLine - 1), - generatedColumn: mapping.column + - (section.generatedOffset.generatedLine === mapping.generatedLine) - ? section.generatedOffset.generatedColumn - 1 - : 0, - originalLine: mapping.originalLine, - originalColumn: mapping.originalColumn, - name: name - }; - - this.__generatedMappings.push(adjustedMapping); - if (typeof adjustedMapping.originalLine === 'number') { - this.__originalMappings.push(adjustedMapping); - } - }; - }; - - quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated); - quickSort(this.__originalMappings, util.compareByOriginalPositions); - }; - - exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer; - -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/source-map-generator.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/source-map-generator.js deleted file mode 100644 index d8a9025bd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/source-map-generator.js +++ /dev/null @@ -1,399 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ -if (typeof define !== 'function') { - var define = require('amdefine')(module, require); -} -define(function (require, exports, module) { - - var base64VLQ = require('./base64-vlq'); - var util = require('./util'); - var ArraySet = require('./array-set').ArraySet; - var MappingList = require('./mapping-list').MappingList; - - /** - * An instance of the SourceMapGenerator represents a source map which is - * being built incrementally. You may pass an object with the following - * properties: - * - * - file: The filename of the generated source. - * - sourceRoot: A root for all relative URLs in this source map. - */ - function SourceMapGenerator(aArgs) { - if (!aArgs) { - aArgs = {}; - } - this._file = util.getArg(aArgs, 'file', null); - this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); - this._skipValidation = util.getArg(aArgs, 'skipValidation', false); - this._sources = new ArraySet(); - this._names = new ArraySet(); - this._mappings = new MappingList(); - this._sourcesContents = null; - } - - SourceMapGenerator.prototype._version = 3; - - /** - * Creates a new SourceMapGenerator based on a SourceMapConsumer - * - * @param aSourceMapConsumer The SourceMap. - */ - SourceMapGenerator.fromSourceMap = - function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { - var sourceRoot = aSourceMapConsumer.sourceRoot; - var generator = new SourceMapGenerator({ - file: aSourceMapConsumer.file, - sourceRoot: sourceRoot - }); - aSourceMapConsumer.eachMapping(function (mapping) { - var newMapping = { - generated: { - line: mapping.generatedLine, - column: mapping.generatedColumn - } - }; - - if (mapping.source != null) { - newMapping.source = mapping.source; - if (sourceRoot != null) { - newMapping.source = util.relative(sourceRoot, newMapping.source); - } - - newMapping.original = { - line: mapping.originalLine, - column: mapping.originalColumn - }; - - if (mapping.name != null) { - newMapping.name = mapping.name; - } - } - - generator.addMapping(newMapping); - }); - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - generator.setSourceContent(sourceFile, content); - } - }); - return generator; - }; - - /** - * Add a single mapping from original source line and column to the generated - * source's line and column for this source map being created. The mapping - * object should have the following properties: - * - * - generated: An object with the generated line and column positions. - * - original: An object with the original line and column positions. - * - source: The original source file (relative to the sourceRoot). - * - name: An optional original token name for this mapping. - */ - SourceMapGenerator.prototype.addMapping = - function SourceMapGenerator_addMapping(aArgs) { - var generated = util.getArg(aArgs, 'generated'); - var original = util.getArg(aArgs, 'original', null); - var source = util.getArg(aArgs, 'source', null); - var name = util.getArg(aArgs, 'name', null); - - if (!this._skipValidation) { - this._validateMapping(generated, original, source, name); - } - - if (source != null && !this._sources.has(source)) { - this._sources.add(source); - } - - if (name != null && !this._names.has(name)) { - this._names.add(name); - } - - this._mappings.add({ - generatedLine: generated.line, - generatedColumn: generated.column, - originalLine: original != null && original.line, - originalColumn: original != null && original.column, - source: source, - name: name - }); - }; - - /** - * Set the source content for a source file. - */ - SourceMapGenerator.prototype.setSourceContent = - function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { - var source = aSourceFile; - if (this._sourceRoot != null) { - source = util.relative(this._sourceRoot, source); - } - - if (aSourceContent != null) { - // Add the source content to the _sourcesContents map. - // Create a new _sourcesContents map if the property is null. - if (!this._sourcesContents) { - this._sourcesContents = {}; - } - this._sourcesContents[util.toSetString(source)] = aSourceContent; - } else if (this._sourcesContents) { - // Remove the source file from the _sourcesContents map. - // If the _sourcesContents map is empty, set the property to null. - delete this._sourcesContents[util.toSetString(source)]; - if (Object.keys(this._sourcesContents).length === 0) { - this._sourcesContents = null; - } - } - }; - - /** - * Applies the mappings of a sub-source-map for a specific source file to the - * source map being generated. Each mapping to the supplied source file is - * rewritten using the supplied source map. Note: The resolution for the - * resulting mappings is the minimium of this map and the supplied map. - * - * @param aSourceMapConsumer The source map to be applied. - * @param aSourceFile Optional. The filename of the source file. - * If omitted, SourceMapConsumer's file property will be used. - * @param aSourceMapPath Optional. The dirname of the path to the source map - * to be applied. If relative, it is relative to the SourceMapConsumer. - * This parameter is needed when the two source maps aren't in the same - * directory, and the source map to be applied contains relative source - * paths. If so, those relative source paths need to be rewritten - * relative to the SourceMapGenerator. - */ - SourceMapGenerator.prototype.applySourceMap = - function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { - var sourceFile = aSourceFile; - // If aSourceFile is omitted, we will use the file property of the SourceMap - if (aSourceFile == null) { - if (aSourceMapConsumer.file == null) { - throw new Error( - 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + - 'or the source map\'s "file" property. Both were omitted.' - ); - } - sourceFile = aSourceMapConsumer.file; - } - var sourceRoot = this._sourceRoot; - // Make "sourceFile" relative if an absolute Url is passed. - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - // Applying the SourceMap can add and remove items from the sources and - // the names array. - var newSources = new ArraySet(); - var newNames = new ArraySet(); - - // Find mappings for the "sourceFile" - this._mappings.unsortedForEach(function (mapping) { - if (mapping.source === sourceFile && mapping.originalLine != null) { - // Check if it can be mapped by the source map, then update the mapping. - var original = aSourceMapConsumer.originalPositionFor({ - line: mapping.originalLine, - column: mapping.originalColumn - }); - if (original.source != null) { - // Copy mapping - mapping.source = original.source; - if (aSourceMapPath != null) { - mapping.source = util.join(aSourceMapPath, mapping.source) - } - if (sourceRoot != null) { - mapping.source = util.relative(sourceRoot, mapping.source); - } - mapping.originalLine = original.line; - mapping.originalColumn = original.column; - if (original.name != null) { - mapping.name = original.name; - } - } - } - - var source = mapping.source; - if (source != null && !newSources.has(source)) { - newSources.add(source); - } - - var name = mapping.name; - if (name != null && !newNames.has(name)) { - newNames.add(name); - } - - }, this); - this._sources = newSources; - this._names = newNames; - - // Copy sourcesContents of applied map. - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aSourceMapPath != null) { - sourceFile = util.join(aSourceMapPath, sourceFile); - } - if (sourceRoot != null) { - sourceFile = util.relative(sourceRoot, sourceFile); - } - this.setSourceContent(sourceFile, content); - } - }, this); - }; - - /** - * A mapping can have one of the three levels of data: - * - * 1. Just the generated position. - * 2. The Generated position, original position, and original source. - * 3. Generated and original position, original source, as well as a name - * token. - * - * To maintain consistency, we validate that any new mapping being added falls - * in to one of these categories. - */ - SourceMapGenerator.prototype._validateMapping = - function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, - aName) { - if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aGenerated.line > 0 && aGenerated.column >= 0 - && !aOriginal && !aSource && !aName) { - // Case 1. - return; - } - else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated - && aOriginal && 'line' in aOriginal && 'column' in aOriginal - && aGenerated.line > 0 && aGenerated.column >= 0 - && aOriginal.line > 0 && aOriginal.column >= 0 - && aSource) { - // Cases 2 and 3. - return; - } - else { - throw new Error('Invalid mapping: ' + JSON.stringify({ - generated: aGenerated, - source: aSource, - original: aOriginal, - name: aName - })); - } - }; - - /** - * Serialize the accumulated mappings in to the stream of base 64 VLQs - * specified by the source map format. - */ - SourceMapGenerator.prototype._serializeMappings = - function SourceMapGenerator_serializeMappings() { - var previousGeneratedColumn = 0; - var previousGeneratedLine = 1; - var previousOriginalColumn = 0; - var previousOriginalLine = 0; - var previousName = 0; - var previousSource = 0; - var result = ''; - var mapping; - - var mappings = this._mappings.toArray(); - for (var i = 0, len = mappings.length; i < len; i++) { - mapping = mappings[i]; - - if (mapping.generatedLine !== previousGeneratedLine) { - previousGeneratedColumn = 0; - while (mapping.generatedLine !== previousGeneratedLine) { - result += ';'; - previousGeneratedLine++; - } - } - else { - if (i > 0) { - if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) { - continue; - } - result += ','; - } - } - - result += base64VLQ.encode(mapping.generatedColumn - - previousGeneratedColumn); - previousGeneratedColumn = mapping.generatedColumn; - - if (mapping.source != null) { - result += base64VLQ.encode(this._sources.indexOf(mapping.source) - - previousSource); - previousSource = this._sources.indexOf(mapping.source); - - // lines are stored 0-based in SourceMap spec version 3 - result += base64VLQ.encode(mapping.originalLine - 1 - - previousOriginalLine); - previousOriginalLine = mapping.originalLine - 1; - - result += base64VLQ.encode(mapping.originalColumn - - previousOriginalColumn); - previousOriginalColumn = mapping.originalColumn; - - if (mapping.name != null) { - result += base64VLQ.encode(this._names.indexOf(mapping.name) - - previousName); - previousName = this._names.indexOf(mapping.name); - } - } - } - - return result; - }; - - SourceMapGenerator.prototype._generateSourcesContent = - function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { - return aSources.map(function (source) { - if (!this._sourcesContents) { - return null; - } - if (aSourceRoot != null) { - source = util.relative(aSourceRoot, source); - } - var key = util.toSetString(source); - return Object.prototype.hasOwnProperty.call(this._sourcesContents, - key) - ? this._sourcesContents[key] - : null; - }, this); - }; - - /** - * Externalize the source map. - */ - SourceMapGenerator.prototype.toJSON = - function SourceMapGenerator_toJSON() { - var map = { - version: this._version, - sources: this._sources.toArray(), - names: this._names.toArray(), - mappings: this._serializeMappings() - }; - if (this._file != null) { - map.file = this._file; - } - if (this._sourceRoot != null) { - map.sourceRoot = this._sourceRoot; - } - if (this._sourcesContents) { - map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); - } - - return map; - }; - - /** - * Render the source map being generated to a string. - */ - SourceMapGenerator.prototype.toString = - function SourceMapGenerator_toString() { - return JSON.stringify(this.toJSON()); - }; - - exports.SourceMapGenerator = SourceMapGenerator; - -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/source-node.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/source-node.js deleted file mode 100644 index 9ee90bd56..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/source-node.js +++ /dev/null @@ -1,414 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ -if (typeof define !== 'function') { - var define = require('amdefine')(module, require); -} -define(function (require, exports, module) { - - var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator; - var util = require('./util'); - - // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other - // operating systems these days (capturing the result). - var REGEX_NEWLINE = /(\r?\n)/; - - // Newline character code for charCodeAt() comparisons - var NEWLINE_CODE = 10; - - // Private symbol for identifying `SourceNode`s when multiple versions of - // the source-map library are loaded. This MUST NOT CHANGE across - // versions! - var isSourceNode = "$$$isSourceNode$$$"; - - /** - * SourceNodes provide a way to abstract over interpolating/concatenating - * snippets of generated JavaScript source code while maintaining the line and - * column information associated with the original source code. - * - * @param aLine The original line number. - * @param aColumn The original column number. - * @param aSource The original source's filename. - * @param aChunks Optional. An array of strings which are snippets of - * generated JS, or other SourceNodes. - * @param aName The original identifier. - */ - function SourceNode(aLine, aColumn, aSource, aChunks, aName) { - this.children = []; - this.sourceContents = {}; - this.line = aLine == null ? null : aLine; - this.column = aColumn == null ? null : aColumn; - this.source = aSource == null ? null : aSource; - this.name = aName == null ? null : aName; - this[isSourceNode] = true; - if (aChunks != null) this.add(aChunks); - } - - /** - * Creates a SourceNode from generated code and a SourceMapConsumer. - * - * @param aGeneratedCode The generated code - * @param aSourceMapConsumer The SourceMap for the generated code - * @param aRelativePath Optional. The path that relative sources in the - * SourceMapConsumer should be relative to. - */ - SourceNode.fromStringWithSourceMap = - function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) { - // The SourceNode we want to fill with the generated code - // and the SourceMap - var node = new SourceNode(); - - // All even indices of this array are one line of the generated code, - // while all odd indices are the newlines between two adjacent lines - // (since `REGEX_NEWLINE` captures its match). - // Processed fragments are removed from this array, by calling `shiftNextLine`. - var remainingLines = aGeneratedCode.split(REGEX_NEWLINE); - var shiftNextLine = function() { - var lineContents = remainingLines.shift(); - // The last line of a file might not have a newline. - var newLine = remainingLines.shift() || ""; - return lineContents + newLine; - }; - - // We need to remember the position of "remainingLines" - var lastGeneratedLine = 1, lastGeneratedColumn = 0; - - // The generate SourceNodes we need a code range. - // To extract it current and last mapping is used. - // Here we store the last mapping. - var lastMapping = null; - - aSourceMapConsumer.eachMapping(function (mapping) { - if (lastMapping !== null) { - // We add the code from "lastMapping" to "mapping": - // First check if there is a new line in between. - if (lastGeneratedLine < mapping.generatedLine) { - var code = ""; - // Associate first line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - lastGeneratedLine++; - lastGeneratedColumn = 0; - // The remaining code is added without mapping - } else { - // There is no new line in between. - // Associate the code between "lastGeneratedColumn" and - // "mapping.generatedColumn" with "lastMapping" - var nextLine = remainingLines[0]; - var code = nextLine.substr(0, mapping.generatedColumn - - lastGeneratedColumn); - remainingLines[0] = nextLine.substr(mapping.generatedColumn - - lastGeneratedColumn); - lastGeneratedColumn = mapping.generatedColumn; - addMappingWithCode(lastMapping, code); - // No more remaining code, continue - lastMapping = mapping; - return; - } - } - // We add the generated code until the first mapping - // to the SourceNode without any mapping. - // Each line is added as separate string. - while (lastGeneratedLine < mapping.generatedLine) { - node.add(shiftNextLine()); - lastGeneratedLine++; - } - if (lastGeneratedColumn < mapping.generatedColumn) { - var nextLine = remainingLines[0]; - node.add(nextLine.substr(0, mapping.generatedColumn)); - remainingLines[0] = nextLine.substr(mapping.generatedColumn); - lastGeneratedColumn = mapping.generatedColumn; - } - lastMapping = mapping; - }, this); - // We have processed all mappings. - if (remainingLines.length > 0) { - if (lastMapping) { - // Associate the remaining code in the current line with "lastMapping" - addMappingWithCode(lastMapping, shiftNextLine()); - } - // and add the remaining lines without any mapping - node.add(remainingLines.join("")); - } - - // Copy sourcesContent into SourceNode - aSourceMapConsumer.sources.forEach(function (sourceFile) { - var content = aSourceMapConsumer.sourceContentFor(sourceFile); - if (content != null) { - if (aRelativePath != null) { - sourceFile = util.join(aRelativePath, sourceFile); - } - node.setSourceContent(sourceFile, content); - } - }); - - return node; - - function addMappingWithCode(mapping, code) { - if (mapping === null || mapping.source === undefined) { - node.add(code); - } else { - var source = aRelativePath - ? util.join(aRelativePath, mapping.source) - : mapping.source; - node.add(new SourceNode(mapping.originalLine, - mapping.originalColumn, - source, - code, - mapping.name)); - } - } - }; - - /** - * Add a chunk of generated JS to this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ - SourceNode.prototype.add = function SourceNode_add(aChunk) { - if (Array.isArray(aChunk)) { - aChunk.forEach(function (chunk) { - this.add(chunk); - }, this); - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - if (aChunk) { - this.children.push(aChunk); - } - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; - }; - - /** - * Add a chunk of generated JS to the beginning of this source node. - * - * @param aChunk A string snippet of generated JS code, another instance of - * SourceNode, or an array where each member is one of those things. - */ - SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { - if (Array.isArray(aChunk)) { - for (var i = aChunk.length-1; i >= 0; i--) { - this.prepend(aChunk[i]); - } - } - else if (aChunk[isSourceNode] || typeof aChunk === "string") { - this.children.unshift(aChunk); - } - else { - throw new TypeError( - "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk - ); - } - return this; - }; - - /** - * Walk over the tree of JS snippets in this node and its children. The - * walking function is called once for each snippet of JS and is passed that - * snippet and the its original associated source's line/column location. - * - * @param aFn The traversal function. - */ - SourceNode.prototype.walk = function SourceNode_walk(aFn) { - var chunk; - for (var i = 0, len = this.children.length; i < len; i++) { - chunk = this.children[i]; - if (chunk[isSourceNode]) { - chunk.walk(aFn); - } - else { - if (chunk !== '') { - aFn(chunk, { source: this.source, - line: this.line, - column: this.column, - name: this.name }); - } - } - } - }; - - /** - * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between - * each of `this.children`. - * - * @param aSep The separator. - */ - SourceNode.prototype.join = function SourceNode_join(aSep) { - var newChildren; - var i; - var len = this.children.length; - if (len > 0) { - newChildren = []; - for (i = 0; i < len-1; i++) { - newChildren.push(this.children[i]); - newChildren.push(aSep); - } - newChildren.push(this.children[i]); - this.children = newChildren; - } - return this; - }; - - /** - * Call String.prototype.replace on the very right-most source snippet. Useful - * for trimming whitespace from the end of a source node, etc. - * - * @param aPattern The pattern to replace. - * @param aReplacement The thing to replace the pattern with. - */ - SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { - var lastChild = this.children[this.children.length - 1]; - if (lastChild[isSourceNode]) { - lastChild.replaceRight(aPattern, aReplacement); - } - else if (typeof lastChild === 'string') { - this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); - } - else { - this.children.push(''.replace(aPattern, aReplacement)); - } - return this; - }; - - /** - * Set the source content for a source file. This will be added to the SourceMapGenerator - * in the sourcesContent field. - * - * @param aSourceFile The filename of the source file - * @param aSourceContent The content of the source file - */ - SourceNode.prototype.setSourceContent = - function SourceNode_setSourceContent(aSourceFile, aSourceContent) { - this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; - }; - - /** - * Walk over the tree of SourceNodes. The walking function is called for each - * source file content and is passed the filename and source content. - * - * @param aFn The traversal function. - */ - SourceNode.prototype.walkSourceContents = - function SourceNode_walkSourceContents(aFn) { - for (var i = 0, len = this.children.length; i < len; i++) { - if (this.children[i][isSourceNode]) { - this.children[i].walkSourceContents(aFn); - } - } - - var sources = Object.keys(this.sourceContents); - for (var i = 0, len = sources.length; i < len; i++) { - aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); - } - }; - - /** - * Return the string representation of this source node. Walks over the tree - * and concatenates all the various snippets together to one string. - */ - SourceNode.prototype.toString = function SourceNode_toString() { - var str = ""; - this.walk(function (chunk) { - str += chunk; - }); - return str; - }; - - /** - * Returns the string representation of this source node along with a source - * map. - */ - SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { - var generated = { - code: "", - line: 1, - column: 0 - }; - var map = new SourceMapGenerator(aArgs); - var sourceMappingActive = false; - var lastOriginalSource = null; - var lastOriginalLine = null; - var lastOriginalColumn = null; - var lastOriginalName = null; - this.walk(function (chunk, original) { - generated.code += chunk; - if (original.source !== null - && original.line !== null - && original.column !== null) { - if(lastOriginalSource !== original.source - || lastOriginalLine !== original.line - || lastOriginalColumn !== original.column - || lastOriginalName !== original.name) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - lastOriginalSource = original.source; - lastOriginalLine = original.line; - lastOriginalColumn = original.column; - lastOriginalName = original.name; - sourceMappingActive = true; - } else if (sourceMappingActive) { - map.addMapping({ - generated: { - line: generated.line, - column: generated.column - } - }); - lastOriginalSource = null; - sourceMappingActive = false; - } - for (var idx = 0, length = chunk.length; idx < length; idx++) { - if (chunk.charCodeAt(idx) === NEWLINE_CODE) { - generated.line++; - generated.column = 0; - // Mappings end at eol - if (idx + 1 === length) { - lastOriginalSource = null; - sourceMappingActive = false; - } else if (sourceMappingActive) { - map.addMapping({ - source: original.source, - original: { - line: original.line, - column: original.column - }, - generated: { - line: generated.line, - column: generated.column - }, - name: original.name - }); - } - } else { - generated.column++; - } - } - }); - this.walkSourceContents(function (sourceFile, sourceContent) { - map.setSourceContent(sourceFile, sourceContent); - }); - - return { code: generated.code, map: map }; - }; - - exports.SourceNode = SourceNode; - -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/util.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/util.js deleted file mode 100644 index 0b9d75dd8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/lib/source-map/util.js +++ /dev/null @@ -1,370 +0,0 @@ -/* -*- Mode: js; js-indent-level: 2; -*- */ -/* - * Copyright 2011 Mozilla Foundation and contributors - * Licensed under the New BSD license. See LICENSE or: - * http://opensource.org/licenses/BSD-3-Clause - */ -if (typeof define !== 'function') { - var define = require('amdefine')(module, require); -} -define(function (require, exports, module) { - - /** - * This is a helper function for getting values from parameter/options - * objects. - * - * @param args The object we are extracting values from - * @param name The name of the property we are getting. - * @param defaultValue An optional value to return if the property is missing - * from the object. If this is not specified and the property is missing, an - * error will be thrown. - */ - function getArg(aArgs, aName, aDefaultValue) { - if (aName in aArgs) { - return aArgs[aName]; - } else if (arguments.length === 3) { - return aDefaultValue; - } else { - throw new Error('"' + aName + '" is a required argument.'); - } - } - exports.getArg = getArg; - - var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; - var dataUrlRegexp = /^data:.+\,.+$/; - - function urlParse(aUrl) { - var match = aUrl.match(urlRegexp); - if (!match) { - return null; - } - return { - scheme: match[1], - auth: match[2], - host: match[3], - port: match[4], - path: match[5] - }; - } - exports.urlParse = urlParse; - - function urlGenerate(aParsedUrl) { - var url = ''; - if (aParsedUrl.scheme) { - url += aParsedUrl.scheme + ':'; - } - url += '//'; - if (aParsedUrl.auth) { - url += aParsedUrl.auth + '@'; - } - if (aParsedUrl.host) { - url += aParsedUrl.host; - } - if (aParsedUrl.port) { - url += ":" + aParsedUrl.port - } - if (aParsedUrl.path) { - url += aParsedUrl.path; - } - return url; - } - exports.urlGenerate = urlGenerate; - - /** - * Normalizes a path, or the path portion of a URL: - * - * - Replaces consequtive slashes with one slash. - * - Removes unnecessary '.' parts. - * - Removes unnecessary '/..' parts. - * - * Based on code in the Node.js 'path' core module. - * - * @param aPath The path or url to normalize. - */ - function normalize(aPath) { - var path = aPath; - var url = urlParse(aPath); - if (url) { - if (!url.path) { - return aPath; - } - path = url.path; - } - var isAbsolute = (path.charAt(0) === '/'); - - var parts = path.split(/\/+/); - for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { - part = parts[i]; - if (part === '.') { - parts.splice(i, 1); - } else if (part === '..') { - up++; - } else if (up > 0) { - if (part === '') { - // The first part is blank if the path is absolute. Trying to go - // above the root is a no-op. Therefore we can remove all '..' parts - // directly after the root. - parts.splice(i + 1, up); - up = 0; - } else { - parts.splice(i, 2); - up--; - } - } - } - path = parts.join('/'); - - if (path === '') { - path = isAbsolute ? '/' : '.'; - } - - if (url) { - url.path = path; - return urlGenerate(url); - } - return path; - } - exports.normalize = normalize; - - /** - * Joins two paths/URLs. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be joined with the root. - * - * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a - * scheme-relative URL: Then the scheme of aRoot, if any, is prepended - * first. - * - Otherwise aPath is a path. If aRoot is a URL, then its path portion - * is updated with the result and aRoot is returned. Otherwise the result - * is returned. - * - If aPath is absolute, the result is aPath. - * - Otherwise the two paths are joined with a slash. - * - Joining for example 'http://' and 'www.example.com' is also supported. - */ - function join(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - if (aPath === "") { - aPath = "."; - } - var aPathUrl = urlParse(aPath); - var aRootUrl = urlParse(aRoot); - if (aRootUrl) { - aRoot = aRootUrl.path || '/'; - } - - // `join(foo, '//www.example.org')` - if (aPathUrl && !aPathUrl.scheme) { - if (aRootUrl) { - aPathUrl.scheme = aRootUrl.scheme; - } - return urlGenerate(aPathUrl); - } - - if (aPathUrl || aPath.match(dataUrlRegexp)) { - return aPath; - } - - // `join('http://', 'www.example.com')` - if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { - aRootUrl.host = aPath; - return urlGenerate(aRootUrl); - } - - var joined = aPath.charAt(0) === '/' - ? aPath - : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); - - if (aRootUrl) { - aRootUrl.path = joined; - return urlGenerate(aRootUrl); - } - return joined; - } - exports.join = join; - - /** - * Make a path relative to a URL or another path. - * - * @param aRoot The root path or URL. - * @param aPath The path or URL to be made relative to aRoot. - */ - function relative(aRoot, aPath) { - if (aRoot === "") { - aRoot = "."; - } - - aRoot = aRoot.replace(/\/$/, ''); - - // It is possible for the path to be above the root. In this case, simply - // checking whether the root is a prefix of the path won't work. Instead, we - // need to remove components from the root one by one, until either we find - // a prefix that fits, or we run out of components to remove. - var level = 0; - while (aPath.indexOf(aRoot + '/') !== 0) { - var index = aRoot.lastIndexOf("/"); - if (index < 0) { - return aPath; - } - - // If the only part of the root that is left is the scheme (i.e. http://, - // file:///, etc.), one or more slashes (/), or simply nothing at all, we - // have exhausted all components, so the path is not relative to the root. - aRoot = aRoot.slice(0, index); - if (aRoot.match(/^([^\/]+:\/)?\/*$/)) { - return aPath; - } - - ++level; - } - - // Make sure we add a "../" for each component we removed from the root. - return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1); - } - exports.relative = relative; - - /** - * Because behavior goes wacky when you set `__proto__` on objects, we - * have to prefix all the strings in our set with an arbitrary character. - * - * See https://github.com/mozilla/source-map/pull/31 and - * https://github.com/mozilla/source-map/issues/30 - * - * @param String aStr - */ - function toSetString(aStr) { - return '$' + aStr; - } - exports.toSetString = toSetString; - - function fromSetString(aStr) { - return aStr.substr(1); - } - exports.fromSetString = fromSetString; - - /** - * Comparator between two mappings where the original positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same original source/line/column, but different generated - * line and column the same. Useful when searching for a mapping with a - * stubbed out mapping. - */ - function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { - var cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0 || onlyCompareOriginal) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; - }; - exports.compareByOriginalPositions = compareByOriginalPositions; - - /** - * Comparator between two mappings with deflated source and name indices where - * the generated positions are compared. - * - * Optionally pass in `true` as `onlyCompareGenerated` to consider two - * mappings with the same generated line and column, but different - * source/name/original line and column the same. Useful when searching for a - * mapping with a stubbed out mapping. - */ - function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0 || onlyCompareGenerated) { - return cmp; - } - - cmp = mappingA.source - mappingB.source; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return mappingA.name - mappingB.name; - }; - exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated; - - function strcmp(aStr1, aStr2) { - if (aStr1 === aStr2) { - return 0; - } - - if (aStr1 > aStr2) { - return 1; - } - - return -1; - } - - /** - * Comparator between two mappings with inflated source and name strings where - * the generated positions are compared. - */ - function compareByGeneratedPositionsInflated(mappingA, mappingB) { - var cmp = mappingA.generatedLine - mappingB.generatedLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.generatedColumn - mappingB.generatedColumn; - if (cmp !== 0) { - return cmp; - } - - cmp = strcmp(mappingA.source, mappingB.source); - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalLine - mappingB.originalLine; - if (cmp !== 0) { - return cmp; - } - - cmp = mappingA.originalColumn - mappingB.originalColumn; - if (cmp !== 0) { - return cmp; - } - - return strcmp(mappingA.name, mappingB.name); - }; - exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated; - -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/package.json b/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/package.json deleted file mode 100644 index 701ac554d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/node_modules/source-map/package.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "_args": [ - [ - "source-map@^0.4.4", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/handlebars" - ] - ], - "_from": "source-map@>=0.4.4 <0.5.0", - "_id": "source-map@0.4.4", - "_inCache": true, - "_installable": true, - "_location": "/handlebars/source-map", - "_npmUser": { - "email": "fitzgen@gmail.com", - "name": "nickfitzgerald" - }, - "_npmVersion": "1.4.9", - "_phantomChildren": {}, - "_requested": { - "name": "source-map", - "raw": "source-map@^0.4.4", - "rawSpec": "^0.4.4", - "scope": null, - "spec": ">=0.4.4 <0.5.0", - "type": "range" - }, - "_requiredBy": [ - "/handlebars" - ], - "_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "_shasum": "eba4f5da9c0dc999de68032d8b4f76173652036b", - "_shrinkwrap": null, - "_spec": "source-map@^0.4.4", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/handlebars", - "author": { - "email": "nfitzgerald@mozilla.com", - "name": "Nick Fitzgerald" - }, - "bugs": { - "url": "https://github.com/mozilla/source-map/issues" - }, - "contributors": [ - { - "email": "tobias.koppers@googlemail.com", - "name": "Tobias Koppers" - }, - { - "email": "duncan@dweebd.com", - "name": "Duncan Beevers" - }, - { - "email": "scrane@mozilla.com", - "name": "Stephen Crane" - }, - { - "email": "seddon.ryan@gmail.com", - "name": "Ryan Seddon" - }, - { - "email": "miles.elam@deem.com", - "name": "Miles Elam" - }, - { - "email": "mihai.bazon@gmail.com", - "name": "Mihai Bazon" - }, - { - "email": "github.public.email@michael.ficarra.me", - "name": "Michael Ficarra" - }, - { - "email": "todd@twolfson.com", - "name": "Todd Wolfson" - }, - { - "email": "alexander@solovyov.net", - "name": "Alexander Solovyov" - }, - { - "email": "fgnass@gmail.com", - "name": "Felix Gnass" - }, - { - "email": "conrad.irwin@gmail.com", - "name": "Conrad Irwin" - }, - { - "email": "usrbincc@yahoo.com", - "name": "usrbincc" - }, - { - "email": "glasser@davidglasser.net", - "name": "David Glasser" - }, - { - "email": "chase@newrelic.com", - "name": "Chase Douglas" - }, - { - "email": "evan.exe@gmail.com", - "name": "Evan Wallace" - }, - { - "email": "fayearthur@gmail.com", - "name": "Heather Arthur" - }, - { - "email": "hughskennedy@gmail.com", - "name": "Hugh Kennedy" - }, - { - "email": "glasser@davidglasser.net", - "name": "David Glasser" - }, - { - "email": "simon.lydell@gmail.com", - "name": "Simon Lydell" - }, - { - "email": "jellyes2@gmail.com", - "name": "Jmeas Smith" - }, - { - "email": "mzgoddard@gmail.com", - "name": "Michael Z Goddard" - }, - { - "email": "azu@users.noreply.github.com", - "name": "azu" - }, - { - "email": "john@gozde.ca", - "name": "John Gozde" - }, - { - "email": "akirkton@truefitinnovation.com", - "name": "Adam Kirkton" - }, - { - "email": "christopher.montgomery@dowjones.com", - "name": "Chris Montgomery" - }, - { - "email": "jryans@gmail.com", - "name": "J. Ryan Stinnett" - }, - { - "email": "jherrington@walmartlabs.com", - "name": "Jack Herrington" - }, - { - "email": "jeffpalentine@gmail.com", - "name": "Chris Truter" - }, - { - "email": "daniel@danielespeset.com", - "name": "Daniel Espeset" - }, - { - "email": "jamie.lf.wong@gmail.com", - "name": "Jamie Wong" - }, - { - "email": "ejpbruel@mozilla.com", - "name": "Eddy Bruël" - }, - { - "email": "hawkrives@gmail.com", - "name": "Hawken Rives" - }, - { - "email": "giladp007@gmail.com", - "name": "Gilad Peleg" - } - ], - "dependencies": { - "amdefine": ">=0.0.4" - }, - "description": "Generates and consumes source maps", - "devDependencies": { - "dryice": ">=0.4.8" - }, - "directories": { - "lib": "./lib" - }, - "dist": { - "shasum": "eba4f5da9c0dc999de68032d8b4f76173652036b", - "tarball": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz" - }, - "engines": { - "node": ">=0.8.0" - }, - "files": [ - "lib/", - "build/" - ], - "homepage": "https://github.com/mozilla/source-map", - "license": "BSD-3-Clause", - "main": "./lib/source-map.js", - "maintainers": [ - { - "email": "mozilla-developer-tools@googlegroups.com", - "name": "mozilla-devtools" - }, - { - "email": "dherman@mozilla.com", - "name": "mozilla" - }, - { - "email": "fitzgen@gmail.com", - "name": "nickfitzgerald" - } - ], - "name": "source-map", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/mozilla/source-map.git" - }, - "scripts": { - "build": "node Makefile.dryice.js", - "test": "node test/run-tests.js" - }, - "version": "0.4.4" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/package.json b/fundamentals/bug-challenge-es6/node_modules/handlebars/package.json deleted file mode 100644 index 9e6777a77..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/package.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "_args": [ - [ - "handlebars@^4.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-reports" - ] - ], - "_from": "handlebars@>=4.0.3 <5.0.0", - "_id": "handlebars@4.0.6", - "_inCache": true, - "_installable": true, - "_location": "/handlebars", - "_nodeVersion": "4.6.1", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/handlebars-4.0.6.tgz_1479000463304_0.9163416035007685" - }, - "_npmUser": { - "email": "lawnsea@gmail.com", - "name": "lawnsea" - }, - "_npmVersion": "2.15.9", - "_phantomChildren": { - "amdefine": "1.0.1" - }, - "_requested": { - "name": "handlebars", - "raw": "handlebars@^4.0.3", - "rawSpec": "^4.0.3", - "scope": null, - "spec": ">=4.0.3 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul", - "/istanbul-reports" - ], - "_resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.6.tgz", - "_shasum": "2ce4484850537f9c97a8026d5399b935c4ed4ed7", - "_shrinkwrap": null, - "_spec": "handlebars@^4.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-reports", - "author": { - "name": "Yehuda Katz" - }, - "barename": "handlebars", - "bin": { - "handlebars": "bin/handlebars" - }, - "bugs": { - "url": "https://github.com/wycats/handlebars.js/issues" - }, - "dependencies": { - "async": "^1.4.0", - "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" - }, - "description": "Handlebars provides the power necessary to let you build semantic templates effectively with no frustration", - "devDependencies": { - "aws-sdk": "^2.1.49", - "babel-loader": "^5.0.0", - "babel-runtime": "^5.1.10", - "benchmark": "~1.0", - "dustjs-linkedin": "^2.0.2", - "eco": "~1.1.0-rc-3", - "grunt": "~0.4.1", - "grunt-babel": "^5.0.0", - "grunt-cli": "~0.1.10", - "grunt-contrib-clean": "0.x", - "grunt-contrib-concat": "0.x", - "grunt-contrib-connect": "0.x", - "grunt-contrib-copy": "0.x", - "grunt-contrib-requirejs": "0.x", - "grunt-contrib-uglify": "0.x", - "grunt-contrib-watch": "0.x", - "grunt-eslint": "^17.1.0", - "grunt-saucelabs": "8.x", - "grunt-webpack": "^1.0.8", - "istanbul": "^0.3.0", - "jison": "~0.3.0", - "mocha": "~1.20.0", - "mock-stdin": "^0.3.0", - "mustache": "^2.1.3", - "semver": "^5.0.1", - "underscore": "^1.5.1", - "webpack": "^1.12.6", - "webpack-dev-server": "^1.12.1" - }, - "directories": {}, - "dist": { - "shasum": "2ce4484850537f9c97a8026d5399b935c4ed4ed7", - "tarball": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.6.tgz" - }, - "engines": { - "node": ">=0.4.7" - }, - "gitHead": "ad3037cf54132fc5f589134d3bef961a5f751973", - "homepage": "http://www.handlebarsjs.com/", - "jspm": { - "buildConfig": { - "minify": true - }, - "directories": { - "lib": "dist/amd" - }, - "main": "handlebars" - }, - "keywords": [ - "handlebars", - "mustache", - "template", - "html" - ], - "license": "MIT", - "main": "lib/index.js", - "maintainers": [ - { - "email": "erisds@gmail.com", - "name": "erisds" - }, - { - "email": "kpdecker@gmail.com", - "name": "kpdecker" - }, - { - "email": "lawnsea@gmail.com", - "name": "lawnsea" - }, - { - "email": "wycats@gmail.com", - "name": "wycats" - } - ], - "name": "handlebars", - "optionalDependencies": { - "uglify-js": "^2.6" - }, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/wycats/handlebars.js.git" - }, - "scripts": { - "test": "grunt" - }, - "version": "4.0.6" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/print-script b/fundamentals/bug-challenge-es6/node_modules/handlebars/print-script deleted file mode 100755 index 046b99c17..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/print-script +++ /dev/null @@ -1,95 +0,0 @@ -#! /usr/bin/env node -/* eslint-disable no-console, no-var */ -// Util script for debugging source code generation issues - -var script = process.argv[2].replace(/\\n/g, '\n'), - verbose = process.argv[3] === '-v'; - -var Handlebars = require('./lib'), - SourceMap = require('source-map'), - SourceMapConsumer = SourceMap.SourceMapConsumer; - -var template = Handlebars.precompile(script, { - srcName: 'input.hbs', - destName: 'output.js', - - assumeObjects: true, - compat: false, - strict: true, - trackIds: true, - knownHelpersOnly: false - }); - -if (!verbose) { - console.log(template); -} else { - var consumer = new SourceMapConsumer(template.map), - lines = template.code.split('\n'), - srcLines = script.split('\n'); - - console.log(); - console.log('Source:'); - srcLines.forEach(function(source, index) { - console.log(index + 1, source); - }); - console.log(); - console.log('Generated:'); - console.log(template.code); - lines.forEach(function(source, index) { - console.log(index + 1, source); - }); - console.log(); - console.log('Map:'); - console.log(template.map); - console.log(); - - function collectSource(lines, lineName, colName, order) { - var ret = {}, - ordered = [], - last; - - function collect(current) { - if (last) { - var mapLines = lines.slice(last[lineName] - 1, current && current[lineName]); - if (mapLines.length) { - if (current) { - mapLines[mapLines.length - 1] = mapLines[mapLines.length - 1].slice(0, current[colName]); - } - mapLines[0] = mapLines[0].slice(last[colName]); - } - ret[last[lineName] + ':' + last[colName]] = mapLines.join('\n'); - ordered.push({ - startLine: last[lineName], - startCol: last[colName], - endLine: current && current[lineName] - }); - } - last = current; - } - - consumer.eachMapping(collect, undefined, order); - collect(); - - return ret; - } - - srcLines = collectSource(srcLines, 'originalLine', 'originalColumn', SourceMapConsumer.ORIGINAL_ORDER); - lines = collectSource(lines, 'generatedLine', 'generatedColumn'); - - consumer.eachMapping(function(mapping) { - var originalSrc = srcLines[mapping.originalLine + ':' + mapping.originalColumn], - generatedSrc = lines[mapping.generatedLine + ':' + mapping.generatedColumn]; - - if (!mapping.originalLine) { - console.log('generated', mapping.generatedLine + ':' + mapping.generatedColumn, generatedSrc); - } else { - console.log('map', - mapping.source, - mapping.originalLine + ':' + mapping.originalColumn, - originalSrc, - '->', - mapping.generatedLine + ':' + mapping.generatedColumn, - generatedSrc); - } - }); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/release-notes.md b/fundamentals/bug-challenge-es6/node_modules/handlebars/release-notes.md deleted file mode 100644 index 8b073d520..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/release-notes.md +++ /dev/null @@ -1,483 +0,0 @@ -# Release Notes - -## Development - -[Commits](https://github.com/lawnsea/handlebars.js/compare/v4.0.6...master) - -## v4.0.6 - November 12th, 2016 -- [#1243](https://github.com/wycats/handlebars.js/pull/1243) - Walk up data frames for nested @partial-block ([@lawnsea](https://github.com/lawnsea)) -- [#1210](https://github.com/wycats/handlebars.js/pull/1210) - Add a new lightweight package based on handlebars in the README ([@kabirbaidhya](https://github.com/kabirbaidhya)) -- [#1187](https://github.com/wycats/handlebars.js/pull/1187) - Ensure that existing blockParams and depths are respected on dupe programs ([@charleso](https://github.com/charleso)) -- [#1191](https://github.com/wycats/handlebars.js/pull/1191) - Added cory ([@leo](https://github.com/leo)) -- [#1177](https://github.com/wycats/handlebars.js/pull/1177) - Preserve License info in Closure Compiler ([@gennadiylitvinyuk](https://github.com/gennadiylitvinyuk)) -- [#1171](https://github.com/wycats/handlebars.js/pull/1171) - Contributing doc fix: failing thats -> failing tests ([@paulfalgout](https://github.com/paulfalgout)) -- [#1166](https://github.com/wycats/handlebars.js/pull/1166) - Update license date ([@timwangdev](https://github.com/timwangdev)) -- Update jsfiddle to point to latest - 959ee55 (originally dfc7554 by [@kpdecker](https://github.com/kpdecker)) -- [#1163](https://github.com/wycats/handlebars.js/pull/1163) - Fix typos on decorators-api.md. ([@adjohnson916](https://github.com/adjohnson916)) -- Drop extra Error params - 8c19874 (originally 63fdb92 by [@kpdecker](https://github.com/kpdecker)) -- [#1153](https://github.com/wycats/handlebars.js/pull/1153) - Add documentation for running tests to contributing.md ([@ryanmurakami](https://github.com/ryanmurakami)) -- Avoid error in older browsers in test - 400916c (originally a6121ca by [@kpdecker](https://github.com/kpdecker)) -- Update target browser test versions - fee2334 (originally 871c32a by [@kpdecker](https://github.com/kpdecker)) -- Exclude coverage check in exception conditional - 32d6363 (originally 326734b by [@kpdecker](https://github.com/kpdecker)) -- Fix throw when creating exception object in Safari - 20c965c (originally 2ea6119 by [@kpdecker](https://github.com/kpdecker)) -- Update build for modern node versions - 6c9f98c (originally 8289c0b by [@kpdecker](https://github.com/kpdecker)) -- [#1135](https://github.com/wycats/handlebars.js/issues/1135) - Relax depth check for context push - c393c81 (originally 25458fd by [@kpdecker](https://github.com/kpdecker)) - -[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.5...v4.0.6) - -## v4.0.5 - November 19th, 2015 -- [#1132](https://github.com/wycats/handlebars.js/pull/1132) - Update uglify-js to avoid vulnerability ([@plynchnlm](https://api.github.com/users/plynchnlm)) -- [#1129](https://github.com/wycats/handlebars.js/issues/1129) - Minified lib returns an empty string ([@bricss](https://api.github.com/users/bricss)) -- Return current handlebars instance from noConflict - 685cf92 -- Add webpack to dev dependency to support npm 3 - 7a6c228 -- Further relax uglify dependency - 0a3b3c2 -- Include tests for minimized artifacts - c21118d -- Fix lint errors under latest eslint - 9f59de9 -- Add print-script helper script - 98a6717 - -[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.4...v4.0.5) - -## v4.0.4 - October 29th, 2015 -- [#1121](https://github.com/wycats/handlebars.js/pull/1121) - Include partial name in 'undefined partial' exception message ([@shinypb](https://api.github.com/users/shinypb)) -- [#1125](https://github.com/wycats/handlebars.js/pull/1125) - Add promised-handlebars to "in-the-wild"-list ([@nknapp](https://api.github.com/users/nknapp)) - -[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.3...v4.0.4) - -## v4.0.3 - September 23rd, 2015 -- [#1099](https://github.com/wycats/handlebars.js/issues/1099) - @partial-block is overridden ([@btmorex](https://api.github.com/users/btmorex)) -- [#1093](https://github.com/wycats/handlebars.js/issues/1093) - #each skips iteration on undefined values ([@florianpilz](https://api.github.com/users/florianpilz)) -- [#1092](https://github.com/wycats/handlebars.js/issues/1092) - Square braces in key name ([@distantnative](https://api.github.com/users/distantnative)) -- [#1091](https://github.com/wycats/handlebars.js/pull/1091) - fix typo in release notes ([@nikolas](https://api.github.com/users/nikolas)) -- [#1090](https://github.com/wycats/handlebars.js/pull/1090) - grammar fixes in 4.0.0 release notes ([@nikolas](https://api.github.com/users/nikolas)) - -Compatibility notes: -- `each` iteration with `undefined` values has been restored to the 3.0 behaviors. Helper calls with undefined context values will now execute against an arbitrary empty object to avoid executing against global object in non-strict mode. -- `]` can now be included in `[]` wrapped identifiers by escaping with `\`. Any `[]` identifiers that include `\` will now have to properly escape these values. - -[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.2...v4.0.3) - -## v4.0.2 - September 4th, 2015 -- [#1089](https://github.com/wycats/handlebars.js/issues/1089) - "Failover content" not working in multiple levels of inline partials ([@michaellopez](https://api.github.com/users/michaellopez)) - -[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.1...v4.0.2) - -## v4.0.1 - September 2nd, 2015 -- Fix failure when using decorators in partials - 05b82a2 - -[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.0...v4.0.1) - -## v4.0.0 - September 1st, 2015 -- [#1082](https://github.com/wycats/handlebars.js/pull/1082) - Decorators and Inline Partials ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#1076](https://github.com/wycats/handlebars.js/pull/1076) - Implement partial blocks ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#1087](https://github.com/wycats/handlebars.js/pull/1087) - Fix #each when last object entry has empty key ([@denniskuczynski](https://api.github.com/users/denniskuczynski)) -- [#1084](https://github.com/wycats/handlebars.js/pull/1084) - Bump uglify version to fix vulnerability ([@John-Steidley](https://api.github.com/users/John-Steidley)) -- [#1068](https://github.com/wycats/handlebars.js/pull/1068) - Fix typo ([@0xack13](https://api.github.com/users/0xack13)) -- [#1060](https://github.com/wycats/handlebars.js/pull/1060) - #1056 Fixed grammar for nested raw blocks ([@ericbn](https://api.github.com/users/ericbn)) -- [#1052](https://github.com/wycats/handlebars.js/pull/1052) - Updated year in License ([@maqnouch](https://api.github.com/users/maqnouch)) -- [#1037](https://github.com/wycats/handlebars.js/pull/1037) - Fix minor typos in README ([@tomxtobin](https://api.github.com/users/tomxtobin)) -- [#1032](https://github.com/wycats/handlebars.js/issues/1032) - Is it possible to render a partial without the parent scope? ([@aputinski](https://api.github.com/users/aputinski)) -- [#1019](https://github.com/wycats/handlebars.js/pull/1019) - Fixes typo in tests ([@aymerick](https://api.github.com/users/aymerick)) -- [#1016](https://github.com/wycats/handlebars.js/issues/1016) - Version mis-match ([@mayankdedhia](https://api.github.com/users/mayankdedhia)) -- [#1023](https://github.com/wycats/handlebars.js/issues/1023) - is it possible for nested custom helpers to communicate between each other? -- [#893](https://github.com/wycats/handlebars.js/issues/893) - [Proposal] Section blocks. -- [#792](https://github.com/wycats/handlebars.js/issues/792) - feature request: inline partial definitions -- [#583](https://github.com/wycats/handlebars.js/issues/583) - Parent path continues to drill down depth with multiple conditionals -- [#404](https://github.com/wycats/handlebars.js/issues/404) - Add named child helpers that can be referenced by block helpers -- Escape = in HTML content - [83b8e84](https://github.com/wycats/handlebars.js/commit/83b8e84) -- Drop AST constructors in favor of JSON - [95d84ba](https://github.com/wycats/handlebars.js/commit/95d84ba) -- Pass container rather than exec as context - [9a2d1d6](https://github.com/wycats/handlebars.js/commit/9a2d1d6) -- Add ignoreStandalone compiler option - [ea3a5a1](https://github.com/wycats/handlebars.js/commit/ea3a5a1) -- Ignore empty when iterating on sparse arrays - [06d515a](https://github.com/wycats/handlebars.js/commit/06d515a) -- Add support for string and stdin precompilation - [0de8dac](https://github.com/wycats/handlebars.js/commit/0de8dac) -- Simplify object assignment generation logic - [77e6bfc](https://github.com/wycats/handlebars.js/commit/77e6bfc) -- Bulletproof AST.helpers.helperExpression - [93b0760](https://github.com/wycats/handlebars.js/commit/93b0760) -- Always return string responses - [8e868ab](https://github.com/wycats/handlebars.js/commit/8e868ab) -- Pass undefined fields to helpers in strict mode - [5d4b8da](https://github.com/wycats/handlebars.js/commit/5d4b8da) -- Avoid depth creation when context remains the same - [279e038](https://github.com/wycats/handlebars.js/commit/279e038) -- Improve logging API - [9a49d35](https://github.com/wycats/handlebars.js/commit/9a49d35) -- Fix with operator in no @data mode - [231a8d7](https://github.com/wycats/handlebars.js/commit/231a8d7) -- Allow empty key name in each iteration - [1bb640b](https://github.com/wycats/handlebars.js/commit/1bb640b) -- Add with block parameter support - [2a85106](https://github.com/wycats/handlebars.js/commit/2a85106) -- Fix escaping of non-javascript identifiers - [410141c](https://github.com/wycats/handlebars.js/commit/410141c) -- Fix location information for programs - [93faffa](https://github.com/wycats/handlebars.js/commit/93faffa) - -Compatibility notes: -- Depthed paths are now conditionally pushed on to the stack. If the helper uses the same context, then a new stack is not created. This leads to behavior that better matches expectations for helpers like `if` that do not seem to alter the context. Any instances of `../` in templates will need to be checked for the correct behavior under 4.0.0. In general templates will either reduce the number of `../` instances or leave them as is. See [#1028](https://github.com/wycats/handlebars.js/issues/1028). -- The `=` character is now HTML escaped. This closes a potential exploit case when using unquoted attributes, i.e. `
`. In general it's recommended that attributes always be quoted when their values are generated from a mustache to avoid any potential exploit surfaces. -- AST constructors have been dropped in favor of plain old javascript objects -- The runtime version has been increased. Precompiled templates will need to use runtime of at least 4.0.0. - -[Commits](https://github.com/wycats/handlebars.js/compare/v3.0.3...v4.0.0) - -## v3.0.3 - April 28th, 2015 -- [#1004](https://github.com/wycats/handlebars.js/issues/1004) - Latest version breaks with RequireJS (global is undefined) ([@boskee](https://api.github.com/users/boskee)) - -[Commits](https://github.com/wycats/handlebars.js/compare/v3.0.2...v3.0.3) - -## v3.0.2 - April 20th, 2015 -- [#998](https://github.com/wycats/handlebars.js/pull/998) - Add full support for es6 ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#994](https://github.com/wycats/handlebars.js/issues/994) - Access Handlebars.Visitor in browser ([@tamlyn](https://api.github.com/users/tamlyn)) -- [#990](https://github.com/wycats/handlebars.js/issues/990) - Allow passing null/undefined literals subexpressions ([@blimmer](https://api.github.com/users/blimmer)) -- [#989](https://github.com/wycats/handlebars.js/issues/989) - Source-map error with requirejs ([@SteppeEagle](https://api.github.com/users/SteppeEagle)) -- [#967](https://github.com/wycats/handlebars.js/issues/967) - can't access "this" property ([@75lb](https://api.github.com/users/75lb)) -- Use captureStackTrace for error handler - a009a97 -- Ignore branches tested without coverage monitoring - 37a664b - -[Commits](https://github.com/wycats/handlebars.js/compare/v3.0.1...v3.0.2) - -## v3.0.1 - March 24th, 2015 -- [#984](https://github.com/wycats/handlebars.js/pull/984) - Adding documentation for passing arguments into partials ([@johneke](https://api.github.com/users/johneke)) -- [#973](https://github.com/wycats/handlebars.js/issues/973) - version 3 is slower than version 2 ([@elover](https://api.github.com/users/elover)) -- [#966](https://github.com/wycats/handlebars.js/issues/966) - "handlebars --version" does not work with v3.0.0 ([@abloomston](https://api.github.com/users/abloomston)) -- [#964](https://github.com/wycats/handlebars.js/pull/964) - default is a reserved word ([@grassick](https://api.github.com/users/grassick)) -- [#962](https://github.com/wycats/handlebars.js/pull/962) - Add dashbars' link on README. ([@pismute](https://api.github.com/users/pismute)) - -[Commits](https://github.com/wycats/handlebars.js/compare/v3.0.0...v3.0.1) - -## v3.0.0 - February 10th, 2015 -- [#941](https://github.com/wycats/handlebars.js/pull/941) - Add support for dynamic partial names ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#940](https://github.com/wycats/handlebars.js/pull/940) - Add missing reserved words so compiler knows to use array syntax: ([@mattflaschen](https://api.github.com/users/mattflaschen)) -- [#938](https://github.com/wycats/handlebars.js/pull/938) - Fix example using #with helper ([@diwo](https://api.github.com/users/diwo)) -- [#930](https://github.com/wycats/handlebars.js/pull/930) - Add parent tracking and mutation to AST visitors ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#926](https://github.com/wycats/handlebars.js/issues/926) - Depthed lookups fail when program duplicator runs ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#918](https://github.com/wycats/handlebars.js/pull/918) - Add instructions for 'spec/mustache' to CONTRIBUTING.md, fix a few typos ([@oneeman](https://api.github.com/users/oneeman)) -- [#915](https://github.com/wycats/handlebars.js/pull/915) - Ast update ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#910](https://github.com/wycats/handlebars.js/issues/910) - Different behavior of {{@last}} when {{#each}} in {{#each}} ([@zordius](https://api.github.com/users/zordius)) -- [#907](https://github.com/wycats/handlebars.js/issues/907) - Implement named helper variable references ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#906](https://github.com/wycats/handlebars.js/pull/906) - Add parser support for block params ([@mmun](https://api.github.com/users/mmun)) -- [#903](https://github.com/wycats/handlebars.js/issues/903) - Only provide aliases for multiple use calls ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#902](https://github.com/wycats/handlebars.js/pull/902) - Generate Source Maps ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#901](https://github.com/wycats/handlebars.js/issues/901) - Still escapes with noEscape enabled on isolated Handlebars environment ([@zedknight](https://api.github.com/users/zedknight)) -- [#896](https://github.com/wycats/handlebars.js/pull/896) - Simplify BlockNode by removing intermediate MustacheNode ([@mmun](https://api.github.com/users/mmun)) -- [#892](https://github.com/wycats/handlebars.js/pull/892) - Implement parser for else chaining of helpers ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#889](https://github.com/wycats/handlebars.js/issues/889) - Consider extensible parser API ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#887](https://github.com/wycats/handlebars.js/issues/887) - Handlebars.noConflict() option? ([@bradvogel](https://api.github.com/users/bradvogel)) -- [#886](https://github.com/wycats/handlebars.js/issues/886) - Add SafeString to context (or use duck-typing) ([@dominicbarnes](https://api.github.com/users/dominicbarnes)) -- [#870](https://github.com/wycats/handlebars.js/pull/870) - Registering undefined partial throws exception. ([@max-b](https://api.github.com/users/max-b)) -- [#866](https://github.com/wycats/handlebars.js/issues/866) - comments don't respect whitespace control ([@75lb](https://api.github.com/users/75lb)) -- [#863](https://github.com/wycats/handlebars.js/pull/863) - + jsDelivr CDN info ([@tomByrer](https://api.github.com/users/tomByrer)) -- [#858](https://github.com/wycats/handlebars.js/issues/858) - Disable new default auto-indent at included partials ([@majodev](https://api.github.com/users/majodev)) -- [#856](https://github.com/wycats/handlebars.js/pull/856) - jspm compatibility ([@MajorBreakfast](https://api.github.com/users/MajorBreakfast)) -- [#805](https://github.com/wycats/handlebars.js/issues/805) - Request: "strict" lookups ([@nzakas](https://api.github.com/users/nzakas)) - -- Export the default object for handlebars/runtime - 5594416 -- Lookup partials when undefined - 617dd57 - -Compatibility notes: -- Runtime breaking changes. Must match 3.x runtime and precompiler. -- The AST has been upgraded to a public API. - - There are a number of changes to this, but the format is now documented in docs/compiler-api.md - - The Visitor API has been expanded to support mutation and provide a base implementation -- The `JavaScriptCompiler` APIs have been formalized and documented. As part of the sourcemap handling these should be updated to return arrays for concatenation. -- `JavaScriptCompiler.namespace` has been removed as it was unused. -- `SafeString` is now duck typed on `toHTML` - -New Features: -- noConflict -- Source Maps -- Block Params -- Strict Mode -- @last and other each changes -- Chained else blocks -- @data methods can now have helper parameters passed to them -- Dynamic partials - -[Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0...v3.0.0) - -## v2.0.0 - September 1st, 2014 -- Update jsfiddle to 2.0.0-beta.1 - 0670f65 -- Add contrib note regarding handlebarsjs.com docs - 4d17e3c -- Play nice with gemspec version numbers - 64d5481 - -[Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-beta.1...v2.0.0) - -## v2.0.0-beta.1 - August 26th, 2014 -- [#787](https://github.com/wycats/handlebars.js/pull/787) - Remove whitespace surrounding standalone statements ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#827](https://github.com/wycats/handlebars.js/issues/827) - Render false literal as “false” ([@scoot557](https://api.github.com/users/scoot557)) -- [#767](https://github.com/wycats/handlebars.js/issues/767) - Subexpressions bug with hash and context ([@evensoul](https://api.github.com/users/evensoul)) -- Changes to 0/undefined handling - - [#731](https://github.com/wycats/handlebars.js/pull/731) - Strange behavior for {{#foo}} {{bar}} {{/foo}} when foo is 0 ([@kpdecker](https://api.github.com/users/kpdecker)) - - [#820](https://github.com/wycats/handlebars.js/issues/820) - strange behavior for {{foo.bar}} when foo is 0 or null or false ([@zordius](https://api.github.com/users/zordius)) - - [#837](https://github.com/wycats/handlebars.js/issues/837) - Strange input for custom helper ( foo.bar == false when foo is undefined ) ([@zordius](https://api.github.com/users/zordius)) -- [#819](https://github.com/wycats/handlebars.js/pull/819) - Implement recursive field lookup ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#764](https://github.com/wycats/handlebars.js/issues/764) - This reference not working for helpers ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#773](https://github.com/wycats/handlebars.js/issues/773) - Implicit parameters in {{#each}} introduces a peculiarity in helpers calling convention ([@Bertrand](https://api.github.com/users/Bertrand)) -- [#783](https://github.com/wycats/handlebars.js/issues/783) - helperMissing and consistency for different expression types ([@ErisDS](https://api.github.com/users/ErisDS)) -- [#795](https://github.com/wycats/handlebars.js/pull/795) - Turn the precompile script into a wrapper around a module. ([@jwietelmann](https://api.github.com/users/jwietelmann)) -- [#823](https://github.com/wycats/handlebars.js/pull/823) - Support inverse sections on the with helper ([@dan-manges](https://api.github.com/users/dan-manges)) -- [#834](https://github.com/wycats/handlebars.js/pull/834) - Refactor blocks, programs and inverses ([@mmun](https://api.github.com/users/mmun)) -- [#852](https://github.com/wycats/handlebars.js/issues/852) - {{foo~}} space control behavior is different from older version ([@zordius](https://api.github.com/users/zordius)) -- [#835](https://github.com/wycats/handlebars.js/issues/835) - Templates overwritten if file is loaded twice - -- Expose escapeExpression on the root object - 980c38c -- Remove nested function eval in blockHelperMissing - 6f22ec1 -- Fix compiler program de-duping - 9e3f824 - -Compatibility notes: -- The default build now outputs a generic UMD wrapper. This should be transparent change but may cause issues in some environments. -- Runtime compatibility breaks in both directions. Ensure that both compiler and client are upgraded to 2.0.0-beta.1 or higher at the same time. - - `programWithDepth` has been removed an instead an array of context values is passed to fields needing depth lookups. -- `false` values are now printed to output rather than silently dropped -- Lines containing only block statements and whitespace are now removed. This matches the Mustache spec but may cause issues with code that expects whitespace to exist but would not otherwise. -- Partials that are standalone will now indent their rendered content -- `AST.ProgramNode`'s signature has changed. -- Numerious methods/features removed from psuedo-API classes - - `JavaScriptCompiler.register` - - `JavaScriptCompiler.replaceStack` no longer supports non-inline replace - - `Compiler.disassemble` - - `DECLARE` opcode - - `strip` opcode - - `lookup` opcode - - Content nodes may have their `string` values mutated over time. `original` field provides the unmodified value. -- Removed unused `Handlebars.registerHelper` `inverse` parameter -- `each` helper requires iterator parameter - -[Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.4...v2.0.0-beta.1) - -## v2.0.0-alpha.4 - May 19th, 2014 -- Expose setup wrappers for compiled templates - 3638874 - -[Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.3...v2.0.0-alpha.4) - -## v2.0.0-alpha.3 - May 19th, 2014 -- [#797](https://github.com/wycats/handlebars.js/pull/797) - Pass full helper ID to helperMissing when options are provided ([@tomdale](https://api.github.com/users/tomdale)) -- [#793](https://github.com/wycats/handlebars.js/pull/793) - Ensure isHelper is coerced to a boolean ([@mmun](https://api.github.com/users/mmun)) -- Refactor template init logic - 085e5e1 - -[Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) - -## v2.0.0-alpha.2 - March 6th, 2014 -- [#756](https://github.com/wycats/handlebars.js/pull/756) - fix bug in IE<=8 (no Array::map), closes #751 ([@jenseng](https://api.github.com/users/jenseng)) -- [#749](https://github.com/wycats/handlebars.js/pull/749) - properly handle multiple subexpressions in the same hash, fixes #748 ([@jenseng](https://api.github.com/users/jenseng)) -- [#743](https://github.com/wycats/handlebars.js/issues/743) - subexpression confusion/problem? ([@waynedpj](https://api.github.com/users/waynedpj)) -- [#746](https://github.com/wycats/handlebars.js/issues/746) - [CLI] support `handlebars --version` ([@apfelbox](https://api.github.com/users/apfelbox)) -- [#747](https://github.com/wycats/handlebars.js/pull/747) - updated grunt-saucelabs, failing tests revealed ([@Jonahss](https://api.github.com/users/Jonahss)) -- Make JSON a requirement for the compiler. - 058c0fb -- Temporarily kill the AWS publish CI step - 8347ee2 - -Compatibility notes: -- A JSON polyfill is required to run the compiler under IE8 and below. It's recommended that the precompiler be used in lieu of running the compiler on these legacy environments. - -[Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) - -## v2.0.0-alpha.1 - February 10th, 2014 -- [#182](https://github.com/wycats/handlebars.js/pull/182) - Allow passing hash parameters to partials ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#392](https://github.com/wycats/handlebars.js/pull/392) - Access to root context in partials and helpers ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#472](https://github.com/wycats/handlebars.js/issues/472) - Helpers cannot have decimal parameters ([@kayleg](https://api.github.com/users/kayleg)) -- [#569](https://github.com/wycats/handlebars.js/pull/569) - Unable to lookup array values using @index ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#491](https://github.com/wycats/handlebars.js/pull/491) - For nested helpers: get the @ variables of the outer helper from the inner one ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#669](https://github.com/wycats/handlebars.js/issues/669) - Ability to unregister a helper ([@dbachrach](https://api.github.com/users/dbachrach)) -- [#730](https://github.com/wycats/handlebars.js/pull/730) - Raw block helpers ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#634](https://github.com/wycats/handlebars.js/pull/634) - It would be great to have the helper name passed to `blockHelperMissing` ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#729](https://github.com/wycats/handlebars.js/pull/729) - Convert template spec to object literal ([@kpdecker](https://api.github.com/users/kpdecker)) - -- [#658](https://github.com/wycats/handlebars.js/issues/658) - Depthed helpers do not work after an upgrade from 1.0.0 ([@xibxor](https://api.github.com/users/xibxor)) -- [#671](https://github.com/wycats/handlebars.js/issues/671) - Crashes on no-parameter {{#each}} ([@stepancheg](https://api.github.com/users/stepancheg)) -- [#689](https://github.com/wycats/handlebars.js/issues/689) - broken template precompilation ([@AAS](https://api.github.com/users/AAS)) -- [#698](https://github.com/wycats/handlebars.js/pull/698) - Fix parser generation under windows ([@osiris43](https://api.github.com/users/osiris43)) -- [#699](https://github.com/wycats/handlebars.js/issues/699) - @DATA not compiles to invalid JS in stringParams mode ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#705](https://github.com/wycats/handlebars.js/issues/705) - 1.3.0 can not be wrapped in an IIFE ([@craigteegarden](https://api.github.com/users/craigteegarden)) -- [#706](https://github.com/wycats/handlebars.js/pull/706) - README: Use with helper instead of relying on blockHelperMissing ([@scottgonzalez](https://api.github.com/users/scottgonzalez)) - -- [#700](https://github.com/wycats/handlebars.js/pull/700) - Remove redundant conditions ([@blakeembrey](https://api.github.com/users/blakeembrey)) -- [#704](https://github.com/wycats/handlebars.js/pull/704) - JavaScript Compiler Cleanup ([@blakeembrey](https://api.github.com/users/blakeembrey)) - -Compatibility notes: -- `helperMissing` helper no longer has the indexed name argument. Helper name is now available via `options.name`. -- Precompiler output has changed, which breaks compatibility with prior versions of the runtime and precompiled output. -- `JavaScriptCompiler.compilerInfo` now returns generic objects rather than javascript source. -- AST changes - - INTEGER -> NUMBER - - Additional PartialNode hash parameter - - New RawBlockNode type -- Data frames now have a `_parent` field. This is internal but is enumerable for performance/compatibility reasons. - -[Commits](https://github.com/wycats/handlebars.js/compare/v1.3.0...v2.0.0-alpha.1) - -## v1.3.0 - January 1st, 2014 -- [#690](https://github.com/wycats/handlebars.js/pull/690) - Added support for subexpressions ([@machty](https://api.github.com/users/machty)) -- [#696](https://github.com/wycats/handlebars.js/pull/696) - Fix for reserved keyword "default" ([@nateirwin](https://api.github.com/users/nateirwin)) -- [#692](https://github.com/wycats/handlebars.js/pull/692) - add line numbers to nodes when parsing ([@fivetanley](https://api.github.com/users/fivetanley)) -- [#695](https://github.com/wycats/handlebars.js/pull/695) - Pull options out from param setup to allow easier extension ([@blakeembrey](https://api.github.com/users/blakeembrey)) -- [#694](https://github.com/wycats/handlebars.js/pull/694) - Make the environment reusable ([@blakeembrey](https://api.github.com/users/blakeembrey)) -- [#636](https://github.com/wycats/handlebars.js/issues/636) - Print line and column of errors ([@sgronblo](https://api.github.com/users/sgronblo)) -- Use literal for data lookup - c1a93d3 -- Add stack handling sanity checks - cd885bf -- Fix stack id "leak" on replaceStack - ddfe457 -- Fix incorrect stack pop when replacing literals - f4d337d - -[Commits](https://github.com/wycats/handlebars.js/compare/v1.2.1...v1.3.0) - -## v1.2.1 - December 26th, 2013 -- [#684](https://github.com/wycats/handlebars.js/pull/684) - Allow any number of trailing characters for valid JavaScript variable ([@blakeembrey](https://api.github.com/users/blakeembrey)) -- [#686](https://github.com/wycats/handlebars.js/pull/686) - Falsy AMD module names in version 1.2.0 ([@kpdecker](https://api.github.com/users/kpdecker)) - -[Commits](https://github.com/wycats/handlebars.js/compare/v1.2.0...v1.2.1) - -## v1.2.0 - December 23rd, 2013 -- [#675](https://github.com/wycats/handlebars.js/issues/675) - Cannot compile empty template for partial ([@erwinw](https://api.github.com/users/erwinw)) -- [#677](https://github.com/wycats/handlebars.js/issues/677) - Triple brace statements fail under IE ([@hamzaCM](https://api.github.com/users/hamzaCM)) -- [#655](https://github.com/wycats/handlebars.js/issues/655) - Loading Handlebars using bower ([@niki4810](https://api.github.com/users/niki4810)) -- [#657](https://github.com/wycats/handlebars.js/pull/657) - Fixes issue where cli compiles non handlebars templates ([@chrishoage](https://api.github.com/users/chrishoage)) -- [#681](https://github.com/wycats/handlebars.js/pull/681) - Adds in-browser testing and Saucelabs CI ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#661](https://github.com/wycats/handlebars.js/pull/661) - Add @first and @index to #each object iteration ([@cgp](https://api.github.com/users/cgp)) -- [#650](https://github.com/wycats/handlebars.js/pull/650) - Handlebars is MIT-licensed ([@thomasboyt](https://api.github.com/users/thomasboyt)) -- [#641](https://github.com/wycats/handlebars.js/pull/641) - Document ember testing process ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#662](https://github.com/wycats/handlebars.js/issues/662) - handlebars-source 1.1.2 is missing from RubyGems. -- [#656](https://github.com/wycats/handlebars.js/issues/656) - Expose COMPILER_REVISION checks as a hook ([@machty](https://api.github.com/users/machty)) -- [#668](https://github.com/wycats/handlebars.js/issues/668) - Consider publishing handlebars-runtime as a separate module on npm ([@dlmanning](https://api.github.com/users/dlmanning)) -- [#679](https://github.com/wycats/handlebars.js/issues/679) - Unable to override invokePartial ([@mattbrailsford](https://api.github.com/users/mattbrailsford)) -- [#646](https://github.com/wycats/handlebars.js/pull/646) - Fix "\\{{" immediately following "\{{" ([@dmarcotte](https://api.github.com/users/dmarcotte)) -- Allow extend to work with non-prototyped objects - eb53f2e -- Add JavascriptCompiler public API tests - 1a751b2 -- Add AST test coverage for more complex paths - ddea5be -- Fix handling of boolean escape in MustacheNode - b4968bb - -Compatibility notes: -- `@index` and `@first` are now supported for `each` iteration on objects -- `Handlebars.VM.checkRevision` and `Handlebars.JavaScriptCompiler.prototype.compilerInfo` now available to modify the version checking behavior. -- Browserify users may link to the runtime library via `require('handlebars/runtime')` - -[Commits](https://github.com/wycats/handlebars.js/compare/v1.1.2...v1.2.0) - -## v1.1.2 - November 5th, 2013 - -- [#645](https://github.com/wycats/handlebars.js/issues/645) - 1.1.1 fails under IE8 ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#644](https://github.com/wycats/handlebars.js/issues/644) - Using precompiled templates (AMD mode) with handlebars.runtime 1.1.1 ([@fddima](https://api.github.com/users/fddima)) - -- Add simple binary utility tests - 96a45a4 -- Fix empty string compilation - eea708a - -[Commits](https://github.com/wycats/handlebars.js/compare/v1.1.1...v1.1.2) - -## v1.1.1 - November 4th, 2013 - -- [#642](https://github.com/wycats/handlebars.js/issues/642) - handlebars 1.1.0 are broken with nodejs - -- Fix release notes link - 17ba258 - -[Commits](https://github.com/wycats/handlebars.js/compare/v1.1.0...v1.1.1) - -## v1.1.0 - November 3rd, 2013 - -- [#628](https://github.com/wycats/handlebars.js/pull/628) - Convert code to ES6 modules ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#336](https://github.com/wycats/handlebars.js/pull/336) - Add whitespace control syntax ([@kpdecker](https://api.github.com/users/kpdecker)) -- [#535](https://github.com/wycats/handlebars.js/pull/535) - Fix for probable JIT error under Safari ([@sorentwo](https://api.github.com/users/sorentwo)) -- [#483](https://github.com/wycats/handlebars.js/issues/483) - Add first and last @ vars to each helper ([@denniskuczynski](https://api.github.com/users/denniskuczynski)) -- [#557](https://github.com/wycats/handlebars.js/pull/557) - `\\{{foo}}` escaping only works in some situations ([@dmarcotte](https://api.github.com/users/dmarcotte)) -- [#552](https://github.com/wycats/handlebars.js/pull/552) - Added BOM removal flag. ([@blessenm](https://api.github.com/users/blessenm)) -- [#543](https://github.com/wycats/handlebars.js/pull/543) - publish passing master builds to s3 ([@fivetanley](https://api.github.com/users/fivetanley)) - -- [#608](https://github.com/wycats/handlebars.js/issues/608) - Add `includeZero` flag to `if` conditional -- [#498](https://github.com/wycats/handlebars.js/issues/498) - `Handlebars.compile` fails on empty string although a single blank works fine -- [#599](https://github.com/wycats/handlebars.js/issues/599) - lambda helpers only receive options if used with arguments -- [#592](https://github.com/wycats/handlebars.js/issues/592) - Optimize array and subprogram performance -- [#571](https://github.com/wycats/handlebars.js/issues/571) - uglify upgrade breaks compatibility with older versions of node -- [#587](https://github.com/wycats/handlebars.js/issues/587) - Partial inside partial breaks? - - -Compatibility notes: -- The project now includes separate artifacts for AMD, CommonJS, and global objects. - - AMD: Users may load the bundled `handlebars.amd.js` or `handlebars.runtime.amd.js` files or load individual modules directly. AMD users should also note that the handlebars object is exposed via the `default` field on the imported object. This [gist](https://gist.github.com/wycats/7417be0dc361a69d5916) provides some discussion of possible compatibility shims. - - CommonJS/Node: Node loading occurs as normal via `require` - - Globals: The `handlebars.js` and `handlebars.runtime.js` files should behave in the same manner as the v1.0.12 / 1.0.0 release. -- Build artifacts have been removed from the repository. [npm][npm], [components/handlebars.js][components], [cdnjs][cdnjs], or the [builds page][builds-page] should now be used as the source of built artifacts. -- Context-stored helpers are now always passed the `options` hash. Previously no-argument helpers did not have this argument. - - -[Commits](https://github.com/wycats/handlebars.js/compare/v1.0.12...v1.1.0) - -## v1.0.12 / 1.0.0 - May 31 2013 - -- [#515](https://github.com/wycats/handlebars.js/issues/515) - Add node require extensions support ([@jjclark1982](https://github.com/jjclark1982)) -- [#517](https://github.com/wycats/handlebars.js/issues/517) - Fix amd precompiler output with directories ([@blessenm](https://github.com/blessenm)) -- [#433](https://github.com/wycats/handlebars.js/issues/433) - Add support for unicode ids -- [#469](https://github.com/wycats/handlebars.js/issues/469) - Add support for `?` in ids -- [#534](https://github.com/wycats/handlebars.js/issues/534) - Protect from object prototype modifications -- [#519](https://github.com/wycats/handlebars.js/issues/519) - Fix partials with . name ([@jamesgorrie](https://github.com/jamesgorrie)) -- [#519](https://github.com/wycats/handlebars.js/issues/519) - Allow ID or strings in partial names -- [#437](https://github.com/wycats/handlebars.js/issues/437) - Require matching brace counts in escaped expressions -- Merge passed partials and helpers with global namespace values -- Add support for complex ids in @data references -- Docs updates - -Compatibility notes: -- The parser is now stricter on `{{{`, requiring that the end token be `}}}`. Templates that do not - follow this convention should add the additional brace value. -- Code that relies on global the namespace being muted when custom helpers or partials are passed will need to explicitly pass an `undefined` value for any helpers that should not be available. -- The compiler version has changed. Precompiled templates with 1.0.12 or higher must use the 1.0.0 or higher runtime. - -[Commits](https://github.com/wycats/handlebars.js/compare/v1.0.11...v1.0.12) - -## v1.0.11 / 1.0.0-rc4 - May 13 2013 - -- [#458](https://github.com/wycats/handlebars.js/issues/458) - Fix `./foo` syntax ([@jpfiset](https://github.com/jpfiset)) -- [#460](https://github.com/wycats/handlebars.js/issues/460) - Allow `:` in unescaped identifers ([@jpfiset](https://github.com/jpfiset)) -- [#471](https://github.com/wycats/handlebars.js/issues/471) - Create release notes (These!) -- [#456](https://github.com/wycats/handlebars.js/issues/456) - Allow escaping of `\\` -- [#211](https://github.com/wycats/handlebars.js/issues/211) - Fix exception in `escapeExpression` -- [#375](https://github.com/wycats/handlebars.js/issues/375) - Escape unicode newlines -- [#461](https://github.com/wycats/handlebars.js/issues/461) - Do not fail when compiling `""` -- [#302](https://github.com/wycats/handlebars.js/issues/302) - Fix sanity check in knownHelpersOnly mode -- [#369](https://github.com/wycats/handlebars.js/issues/369) - Allow registration of multiple helpers and partial by passing definition object -- Add bower package declaration ([@DevinClark](https://github.com/DevinClark)) -- Add NuSpec package declaration ([@MikeMayer](https://github.com/MikeMayer)) -- Handle empty context in `with` ([@thejohnfreeman](https://github.com/thejohnfreeman)) -- Support custom template extensions in CLI ([@matteoagosti](https://github.com/matteoagosti)) -- Fix Rhino support ([@broady](https://github.com/broady)) -- Include contexts in string mode ([@leshill](https://github.com/leshill)) -- Return precompiled scripts when compiling to AMD ([@JamesMaroney](https://github.com/JamesMaroney)) -- Docs updates ([@iangreenleaf](https://github.com/iangreenleaf), [@gilesbowkett](https://github.com/gilesbowkett), [@utkarsh2012](https://github.com/utkarsh2012)) -- Fix `toString` handling under IE and browserify ([@tommydudebreaux](https://github.com/tommydudebreaux)) -- Add program metadata - -[Commits](https://github.com/wycats/handlebars.js/compare/v1.0.10...v1.0.11) - -## v1.0.10 - Node - Feb 27 2013 - -- [#428](https://github.com/wycats/handlebars.js/issues/428) - Fix incorrect rendering of nested programs -- Fix exception message ([@tricknotes](https://github.com/tricknotes)) -- Added negative number literal support -- Concert library to single IIFE -- Add handlebars-source gemspec ([@machty](https://github.com/machty)) - -[Commits](https://github.com/wycats/handlebars.js/compare/v1.0.9...v1.0.10) - -## v1.0.9 - Node - Feb 15 2013 - -- Added `Handlebars.create` API in node module for sandboxed instances ([@tommydudebreaux](https://github.com/tommydudebreaux)) - -[Commits](https://github.com/wycats/handlebars.js/compare/1.0.0-rc.3...v1.0.9) - -## 1.0.0-rc3 - Browser - Feb 14 2013 - -- Prevent use of `this` or `..` in illogical place ([@leshill](https://github.com/leshill)) -- Allow AST passing for `parse`/`compile`/`precompile` ([@machty](https://github.com/machty)) -- Optimize generated output by inlining statements where possible -- Check compiler version when evaluating templates -- Package browser dist in npm package - -[Commits](https://github.com/wycats/handlebars.js/compare/v1.0.8...1.0.0-rc.3) - -## Prior Versions - -When upgrading from the Handlebars 0.9 series, be aware that the -signature for passing custom helpers or partials to templates has -changed. - -Instead of: - -```js -template(context, helpers, partials, [data]) -``` - -Use: - -```js -template(context, {helpers: helpers, partials: partials, data: data}) -``` - -[builds-page]: http://builds.handlebarsjs.com.s3.amazonaws.com/index.html -[cdnjs]: http://cdnjs.com/libraries/handlebars.js/ -[components]: https://github.com/components/handlebars.js -[npm]: https://npmjs.org/package/handlebars diff --git a/fundamentals/bug-challenge-es6/node_modules/handlebars/runtime.js b/fundamentals/bug-challenge-es6/node_modules/handlebars/runtime.js deleted file mode 100644 index 306207cd2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/handlebars/runtime.js +++ /dev/null @@ -1,3 +0,0 @@ -// Create a simple path alias to allow browserify to resolve -// the runtime on a supported path. -module.exports = require('./dist/cjs/handlebars.runtime')['default']; diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/LICENSE b/fundamentals/bug-challenge-es6/node_modules/har-validator/LICENSE deleted file mode 100644 index ca55c91af..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2015, Ahmad Nassri - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/README.md b/fundamentals/bug-challenge-es6/node_modules/har-validator/README.md deleted file mode 100644 index 91526e6dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/README.md +++ /dev/null @@ -1,309 +0,0 @@ -# HAR Validator [![version][npm-version]][npm-url] [![License][npm-license]][license-url] - -Extremely fast HTTP Archive ([HAR](http://www.softwareishard.com/blog/har-12-spec/)) validator using JSON Schema. - -[![Build Status][travis-image]][travis-url] -[![Downloads][npm-downloads]][npm-url] -[![Code Climate][codeclimate-quality]][codeclimate-url] -[![Coverage Status][codeclimate-coverage]][codeclimate-url] -[![Dependencies][david-image]][david-url] - -## Install - -```shell -# to use in cli -npm install --global har-validator - -# to use as a module -npm install --save har-validator -``` - -## Usage - -``` - - Usage: har-validator [options] - - Options: - - -h, --help output usage information - -V, --version output the version number - -s, --schema [name] validate schema name (log, request, response, etc ...) - -``` - -###### Example - -```shell -har-validator har.json - -har-validator --schema request request.json -``` - -## API - -**Note**: as of [`v2.0.0`](https://github.com/ahmadnassri/har-validator/releases/tag/v2.0.0) this module defaults to Promise based API. *For backward comptability with `v1.x` an [async/callback API](#callback-api) is provided* - -### Validate(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a full [HAR](http://www.softwareishard.com/blog/har-12-spec/) object - -```js -validate(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.log(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a [log](http://www.softwareishard.com/blog/har-12-spec/#log) object - -```js -validate.log(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.cache(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a [cache](http://www.softwareishard.com/blog/har-12-spec/#cache) object - -```js -validate.cache(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.cacheEntry(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a ["beforeRequest" or "afterRequest"](http://www.softwareishard.com/blog/har-12-spec/#cache) objects - -```js -validate.cacheEntry(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.content(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a [content](http://www.softwareishard.com/blog/har-12-spec/#content) object - -```js -validate.content(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.cookie(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a [cookie](http://www.softwareishard.com/blog/har-12-spec/#cookies) object - -```js -validate.cookie(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.creator(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a [creator](http://www.softwareishard.com/blog/har-12-spec/#creator) object - -```js -validate.creator(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.entry(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - an [entry](http://www.softwareishard.com/blog/har-12-spec/#entries) object - -```js -validate.entry(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.log(data) - -alias of [`Validate(data)`](#validate-data-callback-) - -### Validate.page(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a [page](http://www.softwareishard.com/blog/har-12-spec/#pages) object - -```js -validate.page(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.pageTimings(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a [pageTimings](http://www.softwareishard.com/blog/har-12-spec/#pageTimings) object - -```js -validate.pageTimings(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.postData(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a [postData](http://www.softwareishard.com/blog/har-12-spec/#postData) object - -```js -validate.postData(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.record(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a [record](http://www.softwareishard.com/blog/har-12-spec/#headers) object - -```js -validate.record(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.request(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a [request](http://www.softwareishard.com/blog/har-12-spec/#request) object - -```js -validate.request(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.response(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a [response](http://www.softwareishard.com/blog/har-12-spec/#response) object - -```js -validate.cacheEntry(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - -### Validate.timings(data) - -> Returns a promise that resolves to the valid object. - -- **data**: `Object` *(Required)* - a [timings](http://www.softwareishard.com/blog/har-12-spec/#timings) object - -```js -validate.timings(data) - .then(data => console.log('horray!')) - .catch(console.error) -``` - ----- - -## Callback API - -### Validate(data [, callback]) - -> Returns `true` or `false`. - -```js -var HAR = require('./har.json'); -var validate = require('har-validator/lib/async'); - -validate(HAR, function (e, valid) { - if (e) console.log(e.errors) - - if (valid) console.log('horray!'); -}); - -``` -The async API provides exactly the same methods as the [Promise API](#promise-api) - ----- - -## Support - -Donations are welcome to help support the continuous development of this project. - -[![Gratipay][gratipay-image]][gratipay-url] -[![PayPal][paypal-image]][paypal-url] -[![Flattr][flattr-image]][flattr-url] -[![Bitcoin][bitcoin-image]][bitcoin-url] - -## License - -[ISC License](LICENSE) © [Ahmad Nassri](https://www.ahmadnassri.com/) - -[license-url]: https://github.com/ahmadnassri/har-validator/blob/master/LICENSE - -[travis-url]: https://travis-ci.org/ahmadnassri/har-validator -[travis-image]: https://img.shields.io/travis/ahmadnassri/har-validator.svg?style=flat-square - -[npm-url]: https://www.npmjs.com/package/har-validator -[npm-license]: https://img.shields.io/npm/l/har-validator.svg?style=flat-square -[npm-version]: https://img.shields.io/npm/v/har-validator.svg?style=flat-square -[npm-downloads]: https://img.shields.io/npm/dm/har-validator.svg?style=flat-square - -[codeclimate-url]: https://codeclimate.com/github/ahmadnassri/har-validator -[codeclimate-quality]: https://img.shields.io/codeclimate/github/ahmadnassri/har-validator.svg?style=flat-square -[codeclimate-coverage]: https://img.shields.io/codeclimate/coverage/github/ahmadnassri/har-validator.svg?style=flat-square - -[david-url]: https://david-dm.org/ahmadnassri/har-validator -[david-image]: https://img.shields.io/david/ahmadnassri/har-validator.svg?style=flat-square - -[gratipay-url]: https://www.gratipay.com/ahmadnassri/ -[gratipay-image]: https://img.shields.io/gratipay/ahmadnassri.svg?style=flat-square - -[paypal-url]: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=UJ2B2BTK9VLRS&on0=project&os0=har-validator -[paypal-image]: http://img.shields.io/badge/paypal-donate-green.svg?style=flat-square - -[flattr-url]: https://flattr.com/submit/auto?user_id=ahmadnassri&url=https://github.com/ahmadnassri/har-validator&title=har-validator&language=&tags=github&category=software -[flattr-image]: http://img.shields.io/badge/flattr-donate-green.svg?style=flat-square - -[bitcoin-image]: http://img.shields.io/badge/bitcoin-1Nb46sZRVG3or7pNaDjthcGJpWhvoPpCxy-green.svg?style=flat-square -[bitcoin-url]: https://www.coinbase.com/checkouts/ae383ae6bb931a2fa5ad11cec115191e?name=har-validator diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/bin/har-validator b/fundamentals/bug-challenge-es6/node_modules/har-validator/bin/har-validator deleted file mode 100755 index fd7cc0d34..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/bin/har-validator +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env node - -'use strict' - -var chalk = require('chalk') -var cmd = require('commander') -var fs = require('fs') -var path = require('path') -var pkg = require('../package.json') -var Promise = require('pinkie-promise') -var validate = require('..') -var ValidationError = require('../lib/error') - -cmd - .version(pkg.version) - .usage('[options] ') - .option('-s, --schema [name]', 'validate schema name (log, request, response, etc ...)') - .parse(process.argv) - -if (!cmd.args.length) { - cmd.help() -} - -cmd.args.map(function (fileName) { - var file = chalk.yellow.italic(path.basename(fileName)) - - new Promise(function (resolve, reject) { - fs.readFile(fileName, function (err, data) { - return err === null ? resolve(data) : reject(err) - }) - }) - - .then(JSON.parse) - - .then(cmd.schema ? validate[cmd.schema] : validate) - - .then(function (data) { - console.log('%s [%s] is valid', chalk.green('✓'), file) - }) - - .catch(function (err) { - if (err instanceof SyntaxError) { - return console.error('%s [%s] failed to read JSON: %s', chalk.red('✖'), file, chalk.red(err.message)) - } - - if (err instanceof ValidationError) { - err.errors.forEach(function (details) { - console.error('%s [%s] failed validation: (%s: %s) %s', chalk.red('✖'), file, chalk.cyan.italic(details.field), chalk.magenta.italic(details.value), chalk.red(details.message)) - }) - - return - } - - console.error('%s [%s] an unknown error has occured: %s', chalk.red('✖'), file, chalk.red(err.message)) - }) -}) diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/async.js b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/async.js deleted file mode 100644 index 77b99a7db..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/async.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict' - -var runner = require('./runner') -var schemas = require('./schemas') - -module.exports = function (data, cb) { - return runner(schemas.har, data, cb) -} - -Object.keys(schemas).map(function (name) { - module.exports[name] = function (data, cb) { - return runner(schemas[name], data, cb) - } -}) diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/error.js b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/error.js deleted file mode 100644 index fc08a8721..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/error.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict' - -function ValidationError (errors) { - this.name = 'ValidationError' - this.errors = errors -} - -ValidationError.prototype = Error.prototype - -module.exports = ValidationError diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/index.js deleted file mode 100644 index e8351b8d5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict' - -var Promise = require('pinkie-promise') -var runner = require('./runner') -var schemas = require('./schemas') - -var promisify = function (schema) { - return function (data) { - return new Promise(function (resolve, reject) { - runner(schema, data, function (err, valid) { - return err === null ? resolve(data) : reject(err) - }) - }) - } -} - -module.exports = promisify(schemas.har) - -// utility methods for all parts of the schema -Object.keys(schemas).map(function (name) { - module.exports[name] = promisify(schemas[name]) -}) diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/runner.js b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/runner.js deleted file mode 100644 index f0ed484e1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/runner.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict' - -var schemas = require('./schemas') -var ValidationError = require('./error') -var validator = require('is-my-json-valid') - -module.exports = function (schema, data, cb) { - // default value - var valid = false - - // validator config - var validate = validator(schema, { - greedy: true, - verbose: true, - schemas: schemas - }) - - // execute is-my-json-valid - if (data !== undefined) { - valid = validate(data) - } - - // callback? - if (typeof cb === 'function') { - return cb(validate.errors ? new ValidationError(validate.errors) : null, valid) - } - - return valid -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/cache.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/cache.json deleted file mode 100644 index a3ab682d5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/cache.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "properties": { - "beforeRequest": { - "$ref": "#cacheEntry" - }, - "afterRequest": { - "$ref": "#cacheEntry" - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/cacheEntry.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/cacheEntry.json deleted file mode 100644 index a397439fd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/cacheEntry.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "oneOf": [{ - "type": "object", - "optional": true, - "required": [ - "lastAccess", - "eTag", - "hitCount" - ], - "properties": { - "expires": { - "type": "string" - }, - "lastAccess": { - "type": "string" - }, - "eTag": { - "type": "string" - }, - "hitCount": { - "type": "integer" - }, - "comment": { - "type": "string" - } - } - }, { - "type": null, - "additionalProperties": false - }] -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/content.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/content.json deleted file mode 100644 index 3710d7939..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/content.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "type": "object", - "required": [ - "size", - "mimeType" - ], - "properties": { - "size": { - "type": "integer" - }, - "compression": { - "type": "integer" - }, - "mimeType": { - "type": "string" - }, - "text": { - "type": "string" - }, - "encoding": { - "type": "string" - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/cookie.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/cookie.json deleted file mode 100644 index 576818183..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/cookie.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "object", - "required": [ - "name", - "value" - ], - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "path": { - "type": "string" - }, - "domain": { - "type": "string" - }, - "expires": { - "type": ["string", "null"], - "format": "date-time" - }, - "httpOnly": { - "type": "boolean" - }, - "secure": { - "type": "boolean" - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/creator.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/creator.json deleted file mode 100644 index 505860064..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/creator.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "object", - "required": [ - "name", - "version" - ], - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "string" - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/entry.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/entry.json deleted file mode 100644 index 8a9c022bd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/entry.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "type": "object", - "optional": true, - "required": [ - "startedDateTime", - "time", - "request", - "response", - "cache", - "timings" - ], - "properties": { - "pageref": { - "type": "string" - }, - "startedDateTime": { - "type": "string", - "format": "date-time", - "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))" - }, - "time": { - "type": "number", - "min": 0 - }, - "request": { - "$ref": "#request" - }, - "response": { - "$ref": "#response" - }, - "cache": { - "$ref": "#cache" - }, - "timings": { - "$ref": "#timings" - }, - "serverIPAddress": { - "type": "string", - "oneOf": [ - { "format": "ipv4" }, - { "format": "ipv6" } - ] - }, - "connection": { - "type": "string" - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/har.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/har.json deleted file mode 100644 index b542782db..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/har.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "type": "object", - "required": [ - "log" - ], - "properties": { - "log": { - "$ref": "#log" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/index.js b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/index.js deleted file mode 100644 index 7b6db7dab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/index.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict' - -var schemas = { - cache: require('./cache.json'), - cacheEntry: require('./cacheEntry.json'), - content: require('./content.json'), - cookie: require('./cookie.json'), - creator: require('./creator.json'), - entry: require('./entry.json'), - har: require('./har.json'), - log: require('./log.json'), - page: require('./page.json'), - pageTimings: require('./pageTimings.json'), - postData: require('./postData.json'), - record: require('./record.json'), - request: require('./request.json'), - response: require('./response.json'), - timings: require('./timings.json') -} - -// is-my-json-valid does not provide meaningful error messages for external schemas -// this is a workaround -schemas.cache.properties.beforeRequest = schemas.cacheEntry -schemas.cache.properties.afterRequest = schemas.cacheEntry - -schemas.page.properties.pageTimings = schemas.pageTimings - -schemas.request.properties.cookies.items = schemas.cookie -schemas.request.properties.headers.items = schemas.record -schemas.request.properties.queryString.items = schemas.record -schemas.request.properties.postData = schemas.postData - -schemas.response.properties.cookies.items = schemas.cookie -schemas.response.properties.headers.items = schemas.record -schemas.response.properties.content = schemas.content - -schemas.entry.properties.request = schemas.request -schemas.entry.properties.response = schemas.response -schemas.entry.properties.cache = schemas.cache -schemas.entry.properties.timings = schemas.timings - -schemas.log.properties.creator = schemas.creator -schemas.log.properties.browser = schemas.creator -schemas.log.properties.pages.items = schemas.page -schemas.log.properties.entries.items = schemas.entry - -schemas.har.properties.log = schemas.log - -module.exports = schemas diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/log.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/log.json deleted file mode 100644 index 0c91d38bf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/log.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "type": "object", - "required": [ - "version", - "creator", - "entries" - ], - "properties": { - "version": { - "type": "string" - }, - "creator": { - "$ref": "#creator" - }, - "browser": { - "$ref": "#creator" - }, - "pages": { - "type": "array", - "items": { - "$ref": "#page" - } - }, - "entries": { - "type": "array", - "items": { - "$ref": "#entry" - } - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/page.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/page.json deleted file mode 100644 index ef64abe5c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/page.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "type": "object", - "optional": true, - "required": [ - "startedDateTime", - "id", - "title", - "pageTimings" - ], - "properties": { - "startedDateTime": { - "type": "string", - "format": "date-time", - "pattern": "^(\\d{4})(-)?(\\d\\d)(-)?(\\d\\d)(T)?(\\d\\d)(:)?(\\d\\d)(:)?(\\d\\d)(\\.\\d+)?(Z|([+-])(\\d\\d)(:)?(\\d\\d))" - }, - "id": { - "type": "string", - "unique": true - }, - "title": { - "type": "string" - }, - "pageTimings": { - "$ref": "#pageTimings" - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/pageTimings.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/pageTimings.json deleted file mode 100644 index adc83cccd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/pageTimings.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "type": "object", - "properties": { - "onContentLoad": { - "type": "number", - "min": -1 - }, - "onLoad": { - "type": "number", - "min": -1 - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/postData.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/postData.json deleted file mode 100644 index 91958b64a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/postData.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "type": "object", - "optional": true, - "required": [ - "mimeType" - ], - "properties": { - "mimeType": { - "type": "string" - }, - "text": { - "type": "string" - }, - "params": { - "type": "array", - "required": [ - "name" - ], - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "contentType": { - "type": "string" - }, - "comment": { - "type": "string" - } - } - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/record.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/record.json deleted file mode 100644 index 04acd5194..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/record.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "object", - "required": [ - "name", - "value" - ], - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": "string" - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/request.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/request.json deleted file mode 100644 index 639af06dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/request.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "type": "object", - "required": [ - "method", - "url", - "httpVersion", - "cookies", - "headers", - "queryString", - "headersSize", - "bodySize" - ], - "properties": { - "method": { - "type": "string" - }, - "url": { - "type": "string", - "format": "uri" - }, - "httpVersion": { - "type": "string" - }, - "cookies": { - "type": "array", - "items": { - "$ref": "#cookie" - } - }, - "headers": { - "type": "array", - "items": { - "$ref": "#record" - } - }, - "queryString": { - "type": "array", - "items": { - "$ref": "#record" - } - }, - "postData": { - "$ref": "#postData" - }, - "headersSize": { - "type": "integer" - }, - "bodySize": { - "type": "integer" - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/response.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/response.json deleted file mode 100644 index de99c55bb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/response.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "type": "object", - "required": [ - "status", - "statusText", - "httpVersion", - "cookies", - "headers", - "content", - "redirectURL", - "headersSize", - "bodySize" - ], - "properties": { - "status": { - "type": "integer" - }, - "statusText": { - "type": "string" - }, - "httpVersion": { - "type": "string" - }, - "cookies": { - "type": "array", - "items": { - "$ref": "#cookie" - } - }, - "headers": { - "type": "array", - "items": { - "$ref": "#record" - } - }, - "content": { - "$ref": "#content" - }, - "redirectURL": { - "type": "string" - }, - "headersSize": { - "type": "integer" - }, - "bodySize": { - "type": "integer" - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/timings.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/timings.json deleted file mode 100644 index 066ef71a1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/lib/schemas/timings.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "required": [ - "send", - "wait", - "receive" - ], - "properties": { - "dns": { - "type": "number", - "min": -1 - }, - "connect": { - "type": "number", - "min": -1 - }, - "blocked": { - "type": "number", - "min": -1 - }, - "send": { - "type": "number", - "min": -1 - }, - "wait": { - "type": "number", - "min": -1 - }, - "receive": { - "type": "number", - "min": -1 - }, - "ssl": { - "type": "number", - "min": -1 - }, - "comment": { - "type": "string" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/har-validator/package.json b/fundamentals/bug-challenge-es6/node_modules/har-validator/package.json deleted file mode 100644 index 30739f749..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/har-validator/package.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "_args": [ - [ - "har-validator@~2.0.6", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request" - ] - ], - "_from": "har-validator@>=2.0.6 <2.1.0", - "_id": "har-validator@2.0.6", - "_inCache": true, - "_installable": true, - "_location": "/har-validator", - "_nodeVersion": "5.2.0", - "_npmUser": { - "email": "ahmad@ahmadnassri.com", - "name": "ahmadnassri" - }, - "_npmVersion": "3.3.12", - "_phantomChildren": {}, - "_requested": { - "name": "har-validator", - "raw": "har-validator@~2.0.6", - "rawSpec": "~2.0.6", - "scope": null, - "spec": ">=2.0.6 <2.1.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz", - "_shasum": "cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d", - "_shrinkwrap": null, - "_spec": "har-validator@~2.0.6", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request", - "author": { - "email": "ahmad@ahmadnassri.com", - "name": "Ahmad Nassri", - "url": "https://www.ahmadnassri.com/" - }, - "bin": { - "har-validator": "bin/har-validator" - }, - "bugs": { - "url": "https://github.com/ahmadnassri/har-validator/issues" - }, - "dependencies": { - "chalk": "^1.1.1", - "commander": "^2.9.0", - "is-my-json-valid": "^2.12.4", - "pinkie-promise": "^2.0.0" - }, - "description": "Extremely fast HTTP Archive (HAR) validator using JSON Schema", - "devDependencies": { - "codeclimate-test-reporter": "0.2.1", - "echint": "^1.5.1", - "istanbul": "^0.4.2", - "mocha": "^2.3.4", - "require-directory": "^2.1.1", - "should": "^8.1.1", - "standard": "^5.4.1" - }, - "directories": {}, - "dist": { - "shasum": "cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d", - "tarball": "https://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz" - }, - "echint": { - "ignore": [ - "coverage/**" - ] - }, - "engines": { - "node": ">=0.10" - }, - "files": [ - "bin", - "lib" - ], - "gitHead": "92ccddad2e5d13e6e32c764e06c347d67805b211", - "homepage": "https://github.com/ahmadnassri/har-validator", - "keywords": [ - "har", - "http", - "archive", - "validate", - "validator" - ], - "license": "ISC", - "main": "lib/index", - "maintainers": [ - { - "email": "ahmad@ahmadnassri.com", - "name": "ahmadnassri" - } - ], - "name": "har-validator", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/ahmadnassri/har-validator.git" - }, - "scripts": { - "codeclimate": "codeclimate < coverage/lcov.info", - "coverage": "istanbul cover --dir coverage _mocha -- -R dot", - "posttest": "npm run coverage", - "pretest": "standard && echint", - "test": "mocha" - }, - "version": "2.0.6" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/has-ansi/index.js b/fundamentals/bug-challenge-es6/node_modules/has-ansi/index.js deleted file mode 100644 index 98fae0676..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/has-ansi/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -var ansiRegex = require('ansi-regex'); -var re = new RegExp(ansiRegex().source); // remove the `g` flag -module.exports = re.test.bind(re); diff --git a/fundamentals/bug-challenge-es6/node_modules/has-ansi/license b/fundamentals/bug-challenge-es6/node_modules/has-ansi/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/has-ansi/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/has-ansi/package.json b/fundamentals/bug-challenge-es6/node_modules/has-ansi/package.json deleted file mode 100644 index 238d37f44..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/has-ansi/package.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "_args": [ - [ - "has-ansi@^2.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/chalk" - ] - ], - "_from": "has-ansi@>=2.0.0 <3.0.0", - "_id": "has-ansi@2.0.0", - "_inCache": true, - "_installable": true, - "_location": "/has-ansi", - "_nodeVersion": "0.12.5", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.11.2", - "_phantomChildren": {}, - "_requested": { - "name": "has-ansi", - "raw": "has-ansi@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/chalk" - ], - "_resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "_shasum": "34f5049ce1ecdf2b0649af3ef24e45ed35416d91", - "_shrinkwrap": null, - "_spec": "has-ansi@^2.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/chalk", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/has-ansi/issues" - }, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "description": "Check if a string has ANSI escape codes", - "devDependencies": { - "ava": "0.0.4" - }, - "directories": {}, - "dist": { - "shasum": "34f5049ce1ecdf2b0649af3ef24e45ed35416d91", - "tarball": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "0722275e1bef139fcd09137da6e5550c3cd368b9", - "homepage": "https://github.com/sindresorhus/has-ansi", - "keywords": [ - "ansi", - "styles", - "color", - "colour", - "colors", - "terminal", - "console", - "string", - "tty", - "escape", - "shell", - "xterm", - "command-line", - "text", - "regex", - "regexp", - "re", - "match", - "test", - "find", - "pattern", - "has" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - { - "email": "jappelman@xebia.com", - "name": "jbnicolai" - } - ], - "name": "has-ansi", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/has-ansi.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "2.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/has-ansi/readme.md b/fundamentals/bug-challenge-es6/node_modules/has-ansi/readme.md deleted file mode 100644 index 02bc7c230..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/has-ansi/readme.md +++ /dev/null @@ -1,36 +0,0 @@ -# has-ansi [![Build Status](https://travis-ci.org/sindresorhus/has-ansi.svg?branch=master)](https://travis-ci.org/sindresorhus/has-ansi) - -> Check if a string has [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) - - -## Install - -``` -$ npm install --save has-ansi -``` - - -## Usage - -```js -var hasAnsi = require('has-ansi'); - -hasAnsi('\u001b[4mcake\u001b[0m'); -//=> true - -hasAnsi('cake'); -//=> false -``` - - -## Related - -- [has-ansi-cli](https://github.com/sindresorhus/has-ansi-cli) - CLI for this module -- [strip-ansi](https://github.com/sindresorhus/strip-ansi) - Strip ANSI escape codes -- [ansi-regex](https://github.com/sindresorhus/ansi-regex) - Regular expression for matching ANSI escape codes -- [chalk](https://github.com/sindresorhus/chalk) - Terminal string styling done right - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/has-flag/index.js b/fundamentals/bug-challenge-es6/node_modules/has-flag/index.js deleted file mode 100644 index fdcb342f4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/has-flag/index.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; -module.exports = function (flag, argv) { - argv = argv || process.argv; - - var terminatorPos = argv.indexOf('--'); - var prefix = /^--/.test(flag) ? '' : '--'; - var pos = argv.indexOf(prefix + flag); - - return pos !== -1 && (terminatorPos !== -1 ? pos < terminatorPos : true); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/has-flag/license b/fundamentals/bug-challenge-es6/node_modules/has-flag/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/has-flag/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/has-flag/package.json b/fundamentals/bug-challenge-es6/node_modules/has-flag/package.json deleted file mode 100644 index 63b5268c8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/has-flag/package.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "_args": [ - [ - "has-flag@^1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color" - ] - ], - "_from": "has-flag@>=1.0.0 <2.0.0", - "_id": "has-flag@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/has-flag", - "_nodeVersion": "0.12.5", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.11.2", - "_phantomChildren": {}, - "_requested": { - "name": "has-flag", - "raw": "has-flag@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul-lib-report/supports-color", - "/istanbul/supports-color" - ], - "_resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "_shasum": "9d9e793165ce017a00f00418c43f942a7b1d11fa", - "_shrinkwrap": null, - "_spec": "has-flag@^1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/has-flag/issues" - }, - "dependencies": {}, - "description": "Check if argv has a specific flag", - "devDependencies": { - "ava": "0.0.4" - }, - "directories": {}, - "dist": { - "shasum": "9d9e793165ce017a00f00418c43f942a7b1d11fa", - "tarball": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "621de2782d538f28f99f0bb85b158799cb3ae5cf", - "homepage": "https://github.com/sindresorhus/has-flag#readme", - "keywords": [ - "has", - "check", - "detect", - "contains", - "find", - "flag", - "cli", - "command-line", - "argv", - "process", - "arg", - "args", - "argument", - "arguments", - "getopt", - "minimist", - "optimist" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - { - "email": "jappelman@xebia.com", - "name": "Joshua Appelman", - "url": "jbnicolai.com" - }, - { - "email": "i.am.qix@gmail.com", - "name": "JD Ballard", - "url": "github.com/qix-" - } - ], - "name": "has-flag", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/has-flag.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "1.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/has-flag/readme.md b/fundamentals/bug-challenge-es6/node_modules/has-flag/readme.md deleted file mode 100644 index ea5c81793..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/has-flag/readme.md +++ /dev/null @@ -1,64 +0,0 @@ -# has-flag [![Build Status](https://travis-ci.org/sindresorhus/has-flag.svg?branch=master)](https://travis-ci.org/sindresorhus/has-flag) - -> Check if [`argv`](https://nodejs.org/docs/latest/api/process.html#process_process_argv) has a specific flag - -Correctly stops looking after an `--` argument terminator. - - -## Install - -``` -$ npm install --save has-flag -``` - - -## Usage - -```js -// foo.js -var hasFlag = require('has-flag'); - -hasFlag('unicorn'); -//=> true - -hasFlag('--unicorn'); -//=> true - -hasFlag('foo=bar'); -//=> true - -hasFlag('foo'); -//=> false - -hasFlag('rainbow'); -//=> false -``` - -``` -$ node foo.js --unicorn --foo=bar -- --rainbow -``` - - -## API - -### hasFlag(flag, [argv]) - -Returns a boolean whether the flag exists. - -#### flag - -Type: `string` - -CLI flag to look for. The `--` prefix is optional. - -#### argv - -Type: `array` -Default: `process.argv` - -CLI arguments. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/hawk/.npmignore b/fundamentals/bug-challenge-es6/node_modules/hawk/.npmignore deleted file mode 100644 index 96ed0910b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/hawk/.npmignore +++ /dev/null @@ -1,20 +0,0 @@ -.idea -*.iml -npm-debug.log -dump.rdb -node_modules -components -build -results.tap -results.xml -npm-shrinkwrap.json -config.json -.DS_Store -*/.DS_Store -*/*/.DS_Store -._* -*/._* -*/*/._* -coverage.* -lib-cov - diff --git a/fundamentals/bug-challenge-es6/node_modules/hawk/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/hawk/.travis.yml deleted file mode 100755 index 40ca59eee..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/hawk/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -language: node_js - -node_js: - - 0.10 - diff --git a/fundamentals/bug-challenge-es6/node_modules/hawk/LICENSE b/fundamentals/bug-challenge-es6/node_modules/hawk/LICENSE deleted file mode 100755 index 788093684..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/hawk/LICENSE +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2012-2014, Eran Hammer and other contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - -The complete list of contributors can be found at: https://github.com/hueniverse/hawk/graphs/contributors diff --git a/fundamentals/bug-challenge-es6/node_modules/hawk/README.md b/fundamentals/bug-challenge-es6/node_modules/hawk/README.md deleted file mode 100755 index b92cd7c43..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/hawk/README.md +++ /dev/null @@ -1,634 +0,0 @@ -![hawk Logo](https://raw.github.com/hueniverse/hawk/master/images/hawk.png) - - **Hawk** is an HTTP authentication scheme using a message authentication code (MAC) algorithm to provide partial -HTTP request cryptographic verification. For more complex use cases such as access delegation, see [Oz](https://github.com/hueniverse/oz). - -Current version: **3.x** - -Note: 3.x and 2.x are the same exact protocol as 1.1. The version increments reflect changes in the node API. - -[![Build Status](https://secure.travis-ci.org/hueniverse/hawk.png)](http://travis-ci.org/hueniverse/hawk) - -# Table of Content - -- [**Introduction**](#introduction) - - [Replay Protection](#replay-protection) - - [Usage Example](#usage-example) - - [Protocol Example](#protocol-example) - - [Payload Validation](#payload-validation) - - [Response Payload Validation](#response-payload-validation) - - [Browser Support and Considerations](#browser-support-and-considerations) -

-- [**Single URI Authorization**](#single-uri-authorization) - - [Usage Example](#bewit-usage-example) -

-- [**Security Considerations**](#security-considerations) - - [MAC Keys Transmission](#mac-keys-transmission) - - [Confidentiality of Requests](#confidentiality-of-requests) - - [Spoofing by Counterfeit Servers](#spoofing-by-counterfeit-servers) - - [Plaintext Storage of Credentials](#plaintext-storage-of-credentials) - - [Entropy of Keys](#entropy-of-keys) - - [Coverage Limitations](#coverage-limitations) - - [Future Time Manipulation](#future-time-manipulation) - - [Client Clock Poisoning](#client-clock-poisoning) - - [Bewit Limitations](#bewit-limitations) - - [Host Header Forgery](#host-header-forgery) -

-- [**Frequently Asked Questions**](#frequently-asked-questions) -

-- [**Implementations**](#implementations) -- [**Acknowledgements**](#acknowledgements) - -# Introduction - -**Hawk** is an HTTP authentication scheme providing mechanisms for making authenticated HTTP requests with -partial cryptographic verification of the request and response, covering the HTTP method, request URI, host, -and optionally the request payload. - -Similar to the HTTP [Digest access authentication schemes](http://www.ietf.org/rfc/rfc2617.txt), **Hawk** uses a set of -client credentials which include an identifier (e.g. username) and key (e.g. password). Likewise, just as with the Digest scheme, -the key is never included in authenticated requests. Instead, it is used to calculate a request MAC value which is -included in its place. - -However, **Hawk** has several differences from Digest. In particular, while both use a nonce to limit the possibility of -replay attacks, in **Hawk** the client generates the nonce and uses it in combination with a timestamp, leading to less -"chattiness" (interaction with the server). - -Also unlike Digest, this scheme is not intended to protect the key itself (the password in Digest) because -the client and server must both have access to the key material in the clear. - -The primary design goals of this scheme are to: -* simplify and improve HTTP authentication for services that are unwilling or unable to deploy TLS for all resources, -* secure credentials against leakage (e.g., when the client uses some form of dynamic configuration to determine where - to send an authenticated request), and -* avoid the exposure of credentials sent to a malicious server over an unauthenticated secure channel due to client - failure to validate the server's identity as part of its TLS handshake. - -In addition, **Hawk** supports a method for granting third-parties temporary access to individual resources using -a query parameter called _bewit_ (in falconry, a leather strap used to attach a tracking device to the leg of a hawk). - -The **Hawk** scheme requires the establishment of a shared symmetric key between the client and the server, -which is beyond the scope of this module. Typically, the shared credentials are established via an initial -TLS-protected phase or derived from some other shared confidential information available to both the client -and the server. - - -## Replay Protection - -Without replay protection, an attacker can use a compromised (but otherwise valid and authenticated) request more -than once, gaining access to a protected resource. To mitigate this, clients include both a nonce and a timestamp when -making requests. This gives the server enough information to prevent replay attacks. - -The nonce is generated by the client, and is a string unique across all requests with the same timestamp and -key identifier combination. - -The timestamp enables the server to restrict the validity period of the credentials where requests occuring afterwards -are rejected. It also removes the need for the server to retain an unbounded number of nonce values for future checks. -By default, **Hawk** uses a time window of 1 minute to allow for time skew between the client and server (which in -practice translates to a maximum of 2 minutes as the skew can be positive or negative). - -Using a timestamp requires the client's clock to be in sync with the server's clock. **Hawk** requires both the client -clock and the server clock to use NTP to ensure synchronization. However, given the limitations of some client types -(e.g. browsers) to deploy NTP, the server provides the client with its current time (in seconds precision) in response -to a bad timestamp. - -There is no expectation that the client will adjust its system clock to match the server (in fact, this would be a -potential attack vector). Instead, the client only uses the server's time to calculate an offset used only -for communications with that particular server. The protocol rewards clients with synchronized clocks by reducing -the number of round trips required to authenticate the first request. - - -## Usage Example - -Server code: - -```javascript -var Http = require('http'); -var Hawk = require('hawk'); - - -// Credentials lookup function - -var credentialsFunc = function (id, callback) { - - var credentials = { - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256', - user: 'Steve' - }; - - return callback(null, credentials); -}; - -// Create HTTP server - -var handler = function (req, res) { - - // Authenticate incoming request - - Hawk.server.authenticate(req, credentialsFunc, {}, function (err, credentials, artifacts) { - - // Prepare response - - var payload = (!err ? 'Hello ' + credentials.user + ' ' + artifacts.ext : 'Shoosh!'); - var headers = { 'Content-Type': 'text/plain' }; - - // Generate Server-Authorization response header - - var header = Hawk.server.header(credentials, artifacts, { payload: payload, contentType: headers['Content-Type'] }); - headers['Server-Authorization'] = header; - - // Send the response back - - res.writeHead(!err ? 200 : 401, headers); - res.end(payload); - }); -}; - -// Start server - -Http.createServer(handler).listen(8000, 'example.com'); -``` - -Client code: - -```javascript -var Request = require('request'); -var Hawk = require('hawk'); - - -// Client credentials - -var credentials = { - id: 'dh37fgj492je', - key: 'werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn', - algorithm: 'sha256' -} - -// Request options - -var requestOptions = { - uri: 'http://example.com:8000/resource/1?b=1&a=2', - method: 'GET', - headers: {} -}; - -// Generate Authorization request header - -var header = Hawk.client.header('http://example.com:8000/resource/1?b=1&a=2', 'GET', { credentials: credentials, ext: 'some-app-data' }); -requestOptions.headers.Authorization = header.field; - -// Send authenticated request - -Request(requestOptions, function (error, response, body) { - - // Authenticate the server's response - - var isValid = Hawk.client.authenticate(response, credentials, header.artifacts, { payload: body }); - - // Output results - - console.log(response.statusCode + ': ' + body + (isValid ? ' (valid)' : ' (invalid)')); -}); -``` - -**Hawk** utilized the [**SNTP**](https://github.com/hueniverse/sntp) module for time sync management. By default, the local -machine time is used. To automatically retrieve and synchronice the clock within the application, use the SNTP 'start()' method. - -```javascript -Hawk.sntp.start(); -``` - - -## Protocol Example - -The client attempts to access a protected resource without authentication, sending the following HTTP request to -the resource server: - -``` -GET /resource/1?b=1&a=2 HTTP/1.1 -Host: example.com:8000 -``` - -The resource server returns an authentication challenge. - -``` -HTTP/1.1 401 Unauthorized -WWW-Authenticate: Hawk -``` - -The client has previously obtained a set of **Hawk** credentials for accessing resources on the "http://example.com/" -server. The **Hawk** credentials issued to the client include the following attributes: - -* Key identifier: dh37fgj492je -* Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn -* Algorithm: sha256 - -The client generates the authentication header by calculating a timestamp (e.g. the number of seconds since January 1, -1970 00:00:00 GMT), generating a nonce, and constructing the normalized request string (each value followed by a newline -character): - -``` -hawk.1.header -1353832234 -j4h3g2 -GET -/resource/1?b=1&a=2 -example.com -8000 - -some-app-ext-data - -``` - -The request MAC is calculated using HMAC with the specified hash algorithm "sha256" and the key over the normalized request string. -The result is base64-encoded to produce the request MAC: - -``` -6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE= -``` - -The client includes the **Hawk** key identifier, timestamp, nonce, application specific data, and request MAC with the request using -the HTTP `Authorization` request header field: - -``` -GET /resource/1?b=1&a=2 HTTP/1.1 -Host: example.com:8000 -Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", ext="some-app-ext-data", mac="6R4rV5iE+NPoym+WwjeHzjAGXUtLNIxmo1vpMofpLAE=" -``` - -The server validates the request by calculating the request MAC again based on the request received and verifies the validity -and scope of the **Hawk** credentials. If valid, the server responds with the requested resource. - - -### Payload Validation - -**Hawk** provides optional payload validation. When generating the authentication header, the client calculates a payload hash -using the specified hash algorithm. The hash is calculated over the concatenated value of (each followed by a newline character): -* `hawk.1.payload` -* the content-type in lowercase, without any parameters (e.g. `application/json`) -* the request payload prior to any content encoding (the exact representation requirements should be specified by the server for payloads other than simple single-part ascii to ensure interoperability) - -For example: - -* Payload: `Thank you for flying Hawk` -* Content Type: `text/plain` -* Hash (sha256): `Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=` - -Results in the following input to the payload hash function (newline terminated values): - -``` -hawk.1.payload -text/plain -Thank you for flying Hawk - -``` - -Which produces the following hash value: - -``` -Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY= -``` - -The client constructs the normalized request string (newline terminated values): - -``` -hawk.1.header -1353832234 -j4h3g2 -POST -/resource/1?a=1&b=2 -example.com -8000 -Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY= -some-app-ext-data - -``` - -Then calculates the request MAC and includes the **Hawk** key identifier, timestamp, nonce, payload hash, application specific data, -and request MAC, with the request using the HTTP `Authorization` request header field: - -``` -POST /resource/1?a=1&b=2 HTTP/1.1 -Host: example.com:8000 -Authorization: Hawk id="dh37fgj492je", ts="1353832234", nonce="j4h3g2", hash="Yi9LfIIFRtBEPt74PVmbTF/xVAwPn7ub15ePICfgnuY=", ext="some-app-ext-data", mac="aSe1DERmZuRl3pI36/9BdZmnErTw3sNzOOAUlfeKjVw=" -``` - -It is up to the server if and when it validates the payload for any given request, based solely on it's security policy -and the nature of the data included. - -If the payload is available at the time of authentication, the server uses the hash value provided by the client to construct -the normalized string and validates the MAC. If the MAC is valid, the server calculates the payload hash and compares the value -with the provided payload hash in the header. In many cases, checking the MAC first is faster than calculating the payload hash. - -However, if the payload is not available at authentication time (e.g. too large to fit in memory, streamed elsewhere, or processed -at a different stage in the application), the server may choose to defer payload validation for later by retaining the hash value -provided by the client after validating the MAC. - -It is important to note that MAC validation does not mean the hash value provided by the client is valid, only that the value -included in the header was not modified. Without calculating the payload hash on the server and comparing it to the value provided -by the client, the payload may be modified by an attacker. - - -## Response Payload Validation - -**Hawk** provides partial response payload validation. The server includes the `Server-Authorization` response header which enables the -client to authenticate the response and ensure it is talking to the right server. **Hawk** defines the HTTP `Server-Authorization` header -as a response header using the exact same syntax as the `Authorization` request header field. - -The header is contructed using the same process as the client's request header. The server uses the same credentials and other -artifacts provided by the client to constructs the normalized request string. The `ext` and `hash` values are replaced with -new values based on the server response. The rest as identical to those used by the client. - -The result MAC digest is included with the optional `hash` and `ext` values: - -``` -Server-Authorization: Hawk mac="XIJRsMl/4oL+nn+vKoeVZPdCHXB4yJkNnBbTbHFZUYE=", hash="f9cDF/TDm7TkYRLnGwRMfeDzT6LixQVLvrIKhh0vgmM=", ext="response-specific" -``` - - -## Browser Support and Considerations - -A browser script is provided for including using a `'); - expect(encoded).to.equal('\\x3cscript\\x3ealert\\x281\\x29\\x3c\\x2fscript\\x3e'); - done(); - }); - - it('encodes \' characters', function (done) { - - var encoded = Hoek.escapeJavaScript('something(\'param\')'); - expect(encoded).to.equal('something\\x28\\x27param\\x27\\x29'); - done(); - }); - - it('encodes large unicode characters with the correct padding', function (done) { - - var encoded = Hoek.escapeJavaScript(String.fromCharCode(500) + String.fromCharCode(1000)); - expect(encoded).to.equal('\\u0500\\u1000'); - done(); - }); - - it('doesn\'t throw an exception when passed null', function (done) { - - var encoded = Hoek.escapeJavaScript(null); - expect(encoded).to.equal(''); - done(); - }); -}); - -describe('escapeHtml()', function () { - - it('encodes / characters', function (done) { - - var encoded = Hoek.escapeHtml(''); - expect(encoded).to.equal('<script>alert(1)</script>'); - done(); - }); - - it('encodes < and > as named characters', function (done) { - - var encoded = Hoek.escapeHtml(' - - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-api/index.js deleted file mode 100644 index fef396efc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/index.js +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var Reporter = require('./lib/reporter'); -/** - * @module Exports - */ -module.exports = { - config: require('./lib/config'), - cover: require('./lib/run-cover'), - reports: require('./lib/run-reports'), - instrument: require('./lib/run-instrument'), - checkCoverage: require('./lib/run-check-coverage'), - createReporter: function (cfg, opts) { - return new Reporter(cfg, opts); - }, - /** - * asynchronously returns a function that can match filesystem paths. - * The function returned in the callback may be passed directly as a `matcher` - * to the functions in the `hook` module. - * - * When no options are passed, the match function is one that matches all JS - * files under the current working directory except ones under `node_modules` - * - * Match patterns are `ant`-style patterns processed using the `fileset` library. - * Examples not provided due to limitations in putting asterisks inside - * jsdoc comments. Please refer to tests under `test/other/test-matcher.js` - * for examples. - * - * @method matcherFor - * @static - * @param {Object} options Optional. Lookup options. - * @param {String} [options.root] the root of the filesystem tree under - * which to match files. Defaults to `process.cwd()` - * @param {Array} [options.includes] an array of include patterns to match. - * Defaults to all JS files under the root. - * @param {Array} [options.excludes] and array of exclude patterns. File paths - * matching these patterns will be excluded by the returned matcher. - * Defaults to files under `node_modules` found anywhere under root. - * @param {Function(err, matchFunction)} callback The callback that is - * called with two arguments. The first is an `Error` object in case - * of errors or a falsy value if there were no errors. The second - * is a function that may be use as a matcher. - */ - matcherFor: require('./lib/file-matcher').matcherFor, - filesFor: require('./lib/file-matcher').filesFor -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/config.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/config.js deleted file mode 100644 index ec69c72b4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/config.js +++ /dev/null @@ -1,498 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var path = require('path'), - fs = require('fs'), - existsSync = fs.existsSync, - CAMEL_PATTERN = /([a-z])([A-Z])/g, - YML_PATTERN = /\.ya?ml$/, - yaml = require('js-yaml'), - libReport = require('istanbul-lib-report'), - inputError = require('./input-error'); - -function defaultConfig() { - var ret = { - verbose: false, - instrumentation: { - root: '.', - extensions: ['.js'], - 'default-excludes': true, - excludes: [], - variable: '__coverage__', - compact: true, - 'preserve-comments': false, - 'complete-copy': false, - 'save-baseline': false, - 'baseline-file': './coverage/coverage-baseline.raw.json', - 'include-all-sources': false, - 'include-pid': false, - 'es-modules': false, - 'auto-wrap': false - }, - reporting: { - print: 'summary', - reports: [ 'lcov' ], - dir: './coverage', - summarizer: 'pkg', - 'report-config': {} - }, - hooks: { - 'hook-run-in-context': false, - 'post-require-hook': null, - 'handle-sigint': false - }, - check: { - global: { - statements: 0, - lines: 0, - branches: 0, - functions: 0, - excludes: [] // Currently list of files (root + path). For future, extend to patterns. - }, - each: { - statements: 0, - lines: 0, - branches: 0, - functions: 0, - excludes: [] - } - } - }; - ret.reporting.watermarks = libReport.getDefaultWatermarks(); - ret.reporting['report-config'] = {}; - return ret; -} - -function dasherize(word) { - return word.replace(CAMEL_PATTERN, function (match, lch, uch) { - return lch + '-' + uch.toLowerCase(); - }); -} -function isScalar(v) { - if (v === null) { return true; } - return v !== undefined && !Array.isArray(v) && typeof v !== 'object'; -} - -function isObject(v) { - return typeof v === 'object' && v !== null && !Array.isArray(v); -} - -function mergeObjects(explicit, template, bothWays) { - - var ret = {}, - keys = Object.keys(template); - - if (bothWays) { - keys.push.apply(keys, Object.keys(explicit)); - } - keys.forEach(function (k) { - var v1 = template[k], - v2 = explicit[k]; - - if (Array.isArray(v1)) { - ret[k] = Array.isArray(v2) && v2.length > 0 ? v2 : v1; - } else if (isObject(v1)) { - v2 = isObject(v2) ? v2 : {}; - ret[k] = mergeObjects(v2, v1, bothWays); - } else if (!v1 && v2) { - ret[k] = v2; - } else { - ret[k] = isScalar(v2) ? v2 : v1; - } - }); - return ret; -} - -function mergeDefaults(explicit, implicit) { - explicit = explicit || {}; - var initialMerge = mergeObjects(explicit || {}, implicit), - explicitReportConfig = (explicit.reporting || {})['report-config'] || {}, - implicitReportConfig = initialMerge.reporting['report-config'] || {}; - initialMerge.reporting['report-config'] = mergeObjects(explicitReportConfig, implicitReportConfig, true); - return initialMerge; -} - -function addMethods() { - var args = Array.prototype.slice.call(arguments), - cons = args.shift(); - - args.forEach(function (arg) { - var property = dasherize(arg); - cons.prototype[arg] = function () { - return this.config[property]; - }; - }); -} - -/** - * Object that returns instrumentation options - * @class InstrumentOptions - * @module config - * @constructor - * @param config the instrumentation part of the config object - */ -function InstrumentOptions(config) { - this.config = config; -} - -/** - * returns if default excludes should be turned on. Used by the `cover` command. - * @method defaultExcludes - * @return {Boolean} true if default excludes should be turned on - */ -/** - * returns if non-JS files should be copied during instrumentation. Used by the - * `instrument` command. - * @method completeCopy - * @return {Boolean} true if non-JS files should be copied - */ -/** - * the coverage variable name to use. Used by the `instrument` command. - * @method variable - * @return {String} the coverage variable name to use - */ -/** - * returns if the output should be compact JS. Used by the `instrument` command. - * @method compact - * @return {Boolean} true if the output should be compact - */ -/** - * returns if comments should be preserved in the generated JS. Used by the - * `cover` and `instrument` commands. - * @method preserveComments - * @return {Boolean} true if comments should be preserved in the generated JS - */ -/** - * returns if a zero-coverage baseline file should be written as part of - * instrumentation. This allows reporting to display numbers for files that have - * no tests. Used by the `instrument` command. - * @method saveBaseline - * @return {Boolean} true if a baseline coverage file should be written. - */ -/** - * Sets the baseline coverage filename. Used by the `instrument` command. - * @method baselineFile - * @return {String} the name of the baseline coverage file. - */ -/** - * returns if comments the JS to instrument contains es6 Module syntax. - * @method esModules - * @return {Boolean} true if code contains es6 import/export statements. - */ -/** - * returns if the coverage filename should include the PID. Used by the `instrument` command. - * @method includePid - * @return {Boolean} true to include pid in coverage filename. - */ - -addMethods(InstrumentOptions, - 'extensions', 'defaultExcludes', 'completeCopy', - 'variable', 'compact', 'preserveComments', - 'saveBaseline', 'baselineFile', 'esModules', - 'includeAllSources', 'includePid', 'autoWrap'); - -/** - * returns the root directory used by istanbul which is typically the root of the - * source tree. Used by the `cover` and `report` commands. - * @method root - * @return {String} the root directory used by istanbul. - */ -InstrumentOptions.prototype.root = function () { return path.resolve(this.config.root); }; -/** - * returns an array of fileset patterns that should be excluded for instrumentation. - * Used by the `instrument` and `cover` commands. - * @method excludes - * @return {Array} an array of fileset patterns that should be excluded for - * instrumentation. - */ -InstrumentOptions.prototype.excludes = function (excludeTests) { - var defs; - if (this.defaultExcludes()) { - defs = [ '**/node_modules/**' ]; - if (excludeTests) { - defs = defs.concat(['**/test/**', '**/tests/**']); - } - return defs.concat(this.config.excludes); - } - return this.config.excludes; -}; - -InstrumentOptions.prototype.getInstrumenterOpts = function () { - return { - coverageVariable: this.variable(), - compact: this.compact(), - preserveComments: this.preserveComments(), - esModules: this.esModules(), - autoWrap: this.autoWrap() - }; -}; - -/** - * Object that returns reporting options - * @class ReportingOptions - * @module config - * @constructor - * @param config the reporting part of the config object - */ -function ReportingOptions(config) { - this.config = config; -} - -/** - * returns the kind of information to be printed on the console. May be one - * of `summary`, `detail`, `both` or `none`. Used by the - * `cover` command. - * @method print - * @return {String} the kind of information to print to the console at the end - * of the `cover` command execution. - */ -/** - * returns a list of reports that should be generated at the end of a run. Used - * by the `cover` and `report` commands. - * @method reports - * @return {Array} an array of reports that should be produced - */ -/** - * returns the directory under which reports should be generated. Used by the - * `cover` and `report` commands. - * - * @method dir - * @return {String} the directory under which reports should be generated. - */ -/** - * returns an object that has keys that are report format names and values that are objects - * containing detailed configuration for each format. Running `istanbul help config` - * will give you all the keys per report format that can be overridden. - * Used by the `cover` and `report` commands. - * @method reportConfig - * @return {Object} detailed report configuration per report format. - */ -addMethods(ReportingOptions, 'print', 'reports', 'dir', 'reportConfig', 'summarizer'); - -function isInvalidMark(v, key) { - var prefix = 'Watermark for [' + key + '] :'; - - if (v.length !== 2) { - return prefix + 'must be an array of length 2'; - } - v[0] = Number(v[0]); - v[1] = Number(v[1]); - - if (isNaN(v[0]) || isNaN(v[1])) { - return prefix + 'must have valid numbers'; - } - if (v[0] < 0 || v[1] < 0) { - return prefix + 'must be positive numbers'; - } - if (v[1] > 100) { - return prefix + 'cannot exceed 100'; - } - if (v[1] <= v[0]) { - return prefix + 'low must be less than high'; - } - return null; -} - -/** - * returns the low and high watermarks to be used to designate whether coverage - * is `low`, `medium` or `high`. Statements, functions, branches and lines can - * have independent watermarks. These are respected by all reports - * that color for low, medium and high coverage. See the default configuration for exact syntax - * using `istanbul help config`. Used by the `cover` and `report` commands. - * - * @method watermarks - * @return {Object} an object containing low and high watermarks for statements, - * branches, functions and lines. - */ -ReportingOptions.prototype.watermarks = function () { - var v = this.config.watermarks, - defs = libReport.getDefaultWatermarks(), - ret = {}; - - Object.keys(defs).forEach(function (k) { - var mark = v[k], //it will already be a non-zero length array because of the way the merge works - message = isInvalidMark(mark, k); - if (message) { - console.error(message); - ret[k] = defs[k]; - } else { - ret[k] = mark; - } - }); - return ret; -}; - -/** - * Object that returns hook options. Note that istanbul does not provide an - * option to hook `require`. This is always done by the `cover` command. - * @class HookOptions - * @module config - * @constructor - * @param config the hooks part of the config object - */ -function HookOptions(config) { - this.config = config; -} - -/** - * returns if `vm.runInThisContext` needs to be hooked, in addition to the standard - * `require` hooks added by istanbul. This should be true for code that uses - * RequireJS for example. Used by the `cover` command. - * @method hookRunInContext - * @return {Boolean} true if `vm.runInThisContext` needs to be hooked for coverage - */ -/** - * returns a path to JS file or a dependent module that should be used for - * post-processing files after they have been required. See the `yui-istanbul` module for - * an example of a post-require hook. This particular hook modifies the yui loader when - * that file is required to add istanbul interceptors. Use by the `cover` command - * - * @method postRequireHook - * @return {String} a path to a JS file or the name of a node module that needs - * to be used as a `require` post-processor - */ -/** - * returns if istanbul needs to add a SIGINT (control-c, usually) handler to - * save coverage information. Useful for getting code coverage out of processes - * that run forever and need a SIGINT to terminate. - * @method handleSigint - * @return {Boolean} true if SIGINT needs to be hooked to write coverage information - */ - -addMethods(HookOptions, 'hookRunInContext', 'postRequireHook', 'handleSigint'); - -/** - * represents the istanbul configuration and provides sub-objects that can - * return instrumentation, reporting and hook options respectively. - * Usage - * ----- - * - * var configObj = require('istanbul').config.loadFile(); - * - * console.log(configObj.reporting.reports()); - * - * @class Configuration - * @module config - * @param {Object} obj the base object to use as the configuration - * @param {Object} overrides optional - override attributes that are merged into - * the base config - * @constructor - */ -function Configuration(obj, overrides) { - - var config = mergeDefaults(obj, defaultConfig(true)); - if (isObject(overrides)) { - config = mergeDefaults(overrides, config); - } - if (config.verbose) { - console.error('Using configuration'); - console.error('-------------------'); - console.error(yaml.safeDump(config, { indent: 4, flowLevel: 3 })); - console.error('-------------------\n'); - } - this.verbose = config.verbose; - this.instrumentation = new InstrumentOptions(config.instrumentation); - this.reporting = new ReportingOptions(config.reporting); - this.hooks = new HookOptions(config.hooks); - this.check = config.check; // Pass raw config sub-object. -} - -/** - * true if verbose logging is required - * @property verbose - * @type Boolean - */ -/** - * instrumentation options - * @property instrumentation - * @type InstrumentOptions - */ -/** - * reporting options - * @property reporting - * @type ReportingOptions - */ -/** - * hook options - * @property hooks - * @type HookOptions - */ - - -function loadFile(file, overrides) { - var defaultConfigFile = path.resolve('.istanbul.yml'), - configObject; - - if (file) { - if (!existsSync(file)) { - throw inputError.create('Invalid configuration file specified:' + file); - } - } else { - if (existsSync(defaultConfigFile)) { - file = defaultConfigFile; - } - } - - if (file) { - if (overrides && overrides.verbose === true) { - console.error('Loading config: ' + file); - } - configObject = file.match(YML_PATTERN) ? - yaml.safeLoad(fs.readFileSync(file, 'utf8'), { filename: file }) : - require(path.resolve(file)); - } - - return new Configuration(configObject, overrides); -} - -function loadObject(obj, overrides) { - return new Configuration(obj, overrides); -} - -/** - * methods to load the configuration object. - * Usage - * ----- - * - * var config = require('istanbul').config, - * configObj = config.loadFile(); - * - * console.log(configObj.reporting.reports()); - * - * @class Config - * @module main - * @static - */ -module.exports = { - /** - * loads the specified configuration file with optional overrides. Throws - * when a file is specified and it is not found. - * @method loadFile - * @static - * @param {String} file the file to load. If falsy, the default config file, if present, is loaded. - * If not a default config is used. - * @param {Object} overrides - an object with override keys that are merged into the - * config object loaded - * @return {Configuration} the config object with overrides applied - */ - loadFile: loadFile, - /** - * loads the specified configuration object with optional overrides. - * @method loadObject - * @static - * @param {Object} obj the object to use as the base configuration. - * @param {Object} overrides - an object with override keys that are merged into the - * config object - * @return {Configuration} the config object with overrides applied - */ - loadObject: loadObject, - /** - * returns the default configuration object. Note that this is a plain object - * and not a `Configuration` instance. - * @method defaultConfig - * @static - * @return {Object} an object that represents the default config - */ - defaultConfig: defaultConfig -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/file-matcher.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/file-matcher.js deleted file mode 100644 index eedc97133..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/file-matcher.js +++ /dev/null @@ -1,77 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var async = require('async'), - fileset = require('fileset'), - fs = require('fs'), - path = require('path'), - seq = 0; - -function filesFor(options, callback) { - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } - options = options || {}; - - var root = options.root, - includes = options.includes, - excludes = options.excludes, - realpath = options.realpath, - relative = options.relative, - opts; - - root = root || process.cwd(); - includes = includes && Array.isArray(includes) ? includes : [ '**/*.js' ]; - excludes = excludes && Array.isArray(excludes) ? excludes : [ '**/node_modules/**' ]; - - opts = { cwd: root, nodir: true }; - seq += 1; - opts['x' + seq + new Date().getTime()] = true; //cache buster for minimatch cache bug - fileset(includes.join(' '), excludes.join(' '), opts, function (err, files) { - /* istanbul ignore if - untestable */ - if (err) { return callback(err); } - if (relative) { return callback(err, files); } - - if (!realpath) { - files = files.map(function (file) { return path.resolve(root, file); }); - return callback(err, files); - } - - var realPathCache = module.constructor._realpathCache || /* istanbul ignore next */ {}; - - async.map(files, function (file, done) { - fs.realpath(path.resolve(root, file), realPathCache, done); - }, callback); - }); -} - -function matcherFor(options, callback) { - - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } - options = options || {}; - options.relative = false; //force absolute paths - options.realpath = true; //force real paths (to match Node.js module paths) - - filesFor(options, function (err, files) { - var fileMap = {}, - matchFn; - /* istanbul ignore if - untestable */ - if (err) { return callback(err); } - files.forEach(function (file) { fileMap[file] = true; }); - - matchFn = function (file) { return fileMap[file]; }; - matchFn.files = Object.keys(fileMap); - return callback(null, matchFn); - }); -} - -module.exports = { - filesFor: filesFor, - matcherFor: matcherFor -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/input-error.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/input-error.js deleted file mode 100644 index 397315e7e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/input-error.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -module.exports.create = function (message) { - var err = new Error(message); - err.inputError = true; - return err; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/reporter.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/reporter.js deleted file mode 100644 index 4702a5763..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/reporter.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var path = require('path'), - configuration = require('./config'), - inputError = require('./input-error'), - libReport = require('istanbul-lib-report'), - libReports = require('istanbul-reports'); - -function Reporter(cfg, opts) { - opts = opts || {}; - this.config = cfg || configuration.loadFile(); - this.dir = path.resolve(this.config.reporting.dir()); - this.reports = {}; - - var summarizer = opts.summarizer, - s = this.config.reporting.summarizer(); - - if (summarizer && typeof summarizer === 'function') { - this.summarizer = summarizer; - } else { - summarizer = libReport.summarizers[s]; - if (!summarizer) { - throw inputError.create('Invalid summarizer in report config: ' + s); - } - this.summarizer = summarizer; - } -} - -Reporter.prototype = { - /** - * adds a report to be generated. Must be one of the entries returned - * by `Report.getReportList()` - * @method add - * @param {String} fmt the format of the report to generate - */ - add: function (fmt) { - if (this.reports[fmt]) { // already added - return; - } - var config = this.config, - rptConfig = config.reporting.reportConfig()[fmt] || {}; - rptConfig.verbose = config.verbose; - try { - if (this.config.verbose) { - console.error('Create report', fmt,' with', rptConfig); - } - this.reports[fmt] = libReports.create(fmt, rptConfig); - } catch (ex) { - throw inputError.create('Invalid report format [' + fmt + ']'); - } - }, - /** - * adds an array of report formats to be generated - * @method addAll - * @param {Array} fmts an array of report formats - */ - addAll: function (fmts) { - var that = this; - fmts.forEach(function (f) { - that.add(f); - }); - }, - /** - * writes all reports added - * @method write - */ - write: function (coverageMap, opts) { - opts = opts || {}; - var that = this, - sourceFinder = opts.sourceFinder || null, - context, - tree; - - context = libReport.createContext({ - dir: this.dir, - watermarks: this.config.reporting.watermarks(), - sourceFinder: sourceFinder - }); - tree = this.summarizer(coverageMap); - Object.keys(this.reports).forEach(function (name) { - var report = that.reports[name]; - tree.visit(report, context); - }); - } -}; - -module.exports = Reporter; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-check-coverage.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-check-coverage.js deleted file mode 100644 index 0a220fa0d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-check-coverage.js +++ /dev/null @@ -1,148 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var path = require('path'), - fs = require('fs'), - filesFor = require('./file-matcher').filesFor, - libCoverage = require('istanbul-lib-coverage'), - inputError = require('./input-error'), - isAbsolute = path.isAbsolute || function (file) { - return path.resolve(file) === path.normalize(file); - }; - -function removeFiles(origMap, root, files) { - var filesObj = {}, - ret = libCoverage.createCoverageMap(); - - // Create lookup table. - files.forEach(function (file) { - filesObj[file] = true; - }); - - origMap.files().forEach(function (key) { - // Exclude keys will always be relative, but covObj keys can be absolute or relative - var excludeKey = isAbsolute(key) ? path.relative(root, key) : key; - // Also normalize for files that start with `./`, etc. - excludeKey = path.normalize(excludeKey); - if (filesObj[excludeKey] !== true) { - ret.addFileCoverage(origMap.fileCoverageFor(key)); - } - }); - - return ret; -} - -function run(config, opts, callback) { - - if (!callback && typeof(opts) === 'function') { - callback = opts; - opts = {}; - } - - opts = opts || {}; - - var root = opts.root || config.instrumentation.root() || process.cwd(), - includePattern = opts.include || '**/coverage*.json', - errors = [], - check, - makeMap, - processFiles; - - check = function (name, thresholds, actuals) { - [ - "statements", - "branches", - "lines", - "functions" - ].forEach(function (key) { - var actual = actuals[key].pct, - actualUncovered = actuals[key].total - actuals[key].covered, - threshold = thresholds[key]; - - if (threshold < 0) { - if (threshold * -1 < actualUncovered) { - errors.push('ERROR: Uncovered count for ' + key + ' (' + actualUncovered + - ') exceeds ' + name + ' threshold (' + -1 * threshold + ')'); - } - } else { - if (actual < threshold) { - errors.push('ERROR: Coverage for ' + key + ' (' + actual + - '%) does not meet ' + name + ' threshold (' + threshold + '%)'); - } - } - }); - }; - - makeMap = function (files, callback) { - var coverageMap = libCoverage.createCoverageMap(); - if (files.length === 0) { - return callback(inputError.create('ERROR: No coverage files found.')); - } - files.forEach(function (file) { - var coverageObject = JSON.parse(fs.readFileSync(file, 'utf8')); - coverageMap.merge(coverageObject); - }); - return callback(null, coverageMap); - }; - - processFiles = function (coverageMap, callback) { - var thresholds = { - global: { - statements: config.check.global.statements || 0, - branches: config.check.global.branches || 0, - lines: config.check.global.lines || 0, - functions: config.check.global.functions || 0, - excludes: config.check.global.excludes || [] - }, - each: { - statements: config.check.each.statements || 0, - branches: config.check.each.branches || 0, - lines: config.check.each.lines || 0, - functions: config.check.each.functions || 0, - excludes: config.check.each.excludes || [] - } - }, - globalResults = removeFiles(coverageMap, root, thresholds.global.excludes), - eachResults = removeFiles(coverageMap, root, thresholds.each.excludes), - finalError; - - if (config.verbose) { - console.error('Compare actuals against thresholds'); - console.error(JSON.stringify({ - global: globalResults, - each: eachResults, - thresholds: thresholds - }, undefined, 4)); - } - - check("global", thresholds.global, globalResults.getCoverageSummary()); - eachResults.files().forEach(function (key) { - var summary = eachResults.fileCoverageFor(key).toSummary(); - check("per-file" + " (" + key + ") ", thresholds.each, summary); - }); - finalError = errors.length === 0 ? null : errors.join("\n"); - return callback(finalError); - }; - - filesFor({ - root: root, - includes: [includePattern] - }, function (err, files) { - if (err) { - return callback(err); - } - makeMap(files, function (err, map) { - if (err) { - return callback(err); - } - return processFiles(map, callback); - }); - }); -} - -module.exports = { - run: run -}; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-cover.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-cover.js deleted file mode 100644 index f40664543..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-cover.js +++ /dev/null @@ -1,197 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var path = require('path'), - fs = require('fs'), - mkdirp = require('mkdirp'), - clone = require('clone'), - matcherFor = require('./file-matcher').matcherFor, - libInstrument = require('istanbul-lib-instrument'), - libCoverage = require('istanbul-lib-coverage'), - libSourceMaps = require('istanbul-lib-source-maps'), - hook = require('istanbul-lib-hook'), - Reporter = require('./reporter'); - -function getCoverFunctions(config, includes, callback) { - - if (!callback && typeof includes === 'function') { - callback = includes; - includes = null; - } - - var includePid = config.instrumentation.includePid(), - reportingDir = path.resolve(config.reporting.dir()), - reporter = new Reporter(config), - excludes = config.instrumentation.excludes(true), - coverageVar = '$$cov_' + new Date().getTime() + '$$', - instOpts = config.instrumentation.getInstrumenterOpts(), - sourceMapStore = libSourceMaps.createSourceMapStore({}), - instrumenter, - transformer, - reportInitFn, - hookFn, - unhookFn, - coverageFinderFn, - coverageSetterFn, - beforeReportFn, - exitFn; - - instOpts.coverageVariable = coverageVar; - instOpts.sourceMapUrlCallback = function (file, url) { - sourceMapStore.registerURL(file, url); - }; - instrumenter = libInstrument.createInstrumenter(instOpts); - transformer = function (code, file) { - return instrumenter.instrumentSync(code, file); - }; - - coverageFinderFn = function () { - return global[coverageVar]; - }; - - coverageSetterFn = function (cov) { - global[coverageVar] = cov; - }; - - reportInitFn = function () { - // set up reporter - mkdirp.sync(reportingDir); //ensure we fail early if we cannot do this - reporter.addAll(config.reporting.reports()); - if (config.reporting.print() !== 'none') { - switch (config.reporting.print()) { - case 'detail': - reporter.add('text'); - break; - case 'both': - reporter.add('text'); - reporter.add('text-summary'); - break; - default: - reporter.add('text-summary'); - break; - } - } - }; - - hookFn = function (matchFn) { - var hookOpts = { - verbose: config.verbose, - extensions: config.instrumentation.extensions() - }; - - //initialize the global variable - coverageSetterFn({}); - reportInitFn(); - - if (config.hooks.hookRunInContext()) { - hook.hookRunInThisContext(matchFn, transformer, hookOpts); - } - hook.hookRequire(matchFn, transformer, hookOpts); - }; - - unhookFn = function (matchFn) { - hook.unhookRequire(); - hook.unhookRunInThisContext(); - hook.unloadRequireCache(matchFn); - }; - - beforeReportFn = function (matchFn, cov) { - var pidExt = includePid ? ('-' + process.pid) : '', - file = path.resolve(reportingDir, 'coverage' + pidExt + '.raw.json'), - missingFiles, - finalCoverage = cov; - - if (config.instrumentation.includeAllSources()) { - // ensure we don't increase the coverage of existing tested files - // in any way when we require untested files - if (config.verbose) { - console.error("Including all sources not require'd by tests"); - } - missingFiles = []; - // Files that are not touched by code ran by the test runner is manually instrumented, to - // illustrate the missing coverage. - matchFn.files.forEach(function (file) { - if (!cov[file]) { - missingFiles.push(file); - } - }); - if (missingFiles.length > 0) { - finalCoverage = clone(cov); - missingFiles.forEach(function (file) { - try { - require(file); - } catch (ex) { - console.error('Unable to post-instrument: ' + file); - } - }); - missingFiles.forEach(function (file) { - var fc; - if (cov[file]) { - fc = libCoverage.createFileCoverage(cov[file]); - fc.resetHits(); - finalCoverage[file] = fc.toJSON(); - } - }); - } - } - if (Object.keys(finalCoverage).length >0) { - if (config.verbose) { - console.error('============================================================================='); - console.error('Writing coverage object [' + file + ']'); - console.error('Writing coverage reports at [' + reportingDir + ']'); - console.error('============================================================================='); - } - fs.writeFileSync(file, JSON.stringify(finalCoverage), 'utf8'); - } - return finalCoverage; - }; - - exitFn = function (matchFn, reporterOpts) { - var cov, - coverageMap, - transformed; - - cov = coverageFinderFn() || {}; - cov = beforeReportFn(matchFn, cov); - coverageSetterFn(cov); - - if (!(cov && typeof cov === 'object') || Object.keys(cov).length === 0) { - console.error('No coverage information was collected, exit without writing coverage information'); - return; - } - - coverageMap = libCoverage.createCoverageMap(cov); - transformed = sourceMapStore.transformCoverage(coverageMap); - reporterOpts.sourceFinder = transformed.sourceFinder; - reporter.write(transformed.map, reporterOpts); - sourceMapStore.dispose(); - }; - - excludes.push(path.relative(process.cwd(), path.join(reportingDir, '**', '*'))); - includes = includes || config.instrumentation.extensions().map(function (ext) { - return '**/*' + ext; - }); - var matchConfig = { - root: config.instrumentation.root() || /* istanbul ignore next: untestable */ process.cwd(), - includes: includes, - excludes: excludes - }; - matcherFor(matchConfig, function (err, matchFn) { - /* istanbul ignore if: untestable */ - if (err) { - return callback(err); - } - return callback(null, { - coverageFn: coverageFinderFn, - hookFn: hookFn.bind(null, matchFn), - exitFn: exitFn.bind(null, matchFn, {}), // XXX: reporter opts - unhookFn: unhookFn.bind(null, matchFn) - }); - }); -} - -module.exports = { - getCoverFunctions: getCoverFunctions -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-instrument.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-instrument.js deleted file mode 100644 index ba8ff04f1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-instrument.js +++ /dev/null @@ -1,208 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var path = require('path'), - mkdirp = require('mkdirp'), - once = require('once'), - async = require('async'), - fs = require('fs'), - filesFor = require('./file-matcher').filesFor, - libInstrument = require('istanbul-lib-instrument'), - libCoverage = require('istanbul-lib-coverage'), - inputError = require('./input-error'); - -/* - * Chunk file size to use when reading non JavaScript files in memory - * and copying them over when using complete-copy flag. - */ -var READ_FILE_CHUNK_SIZE = 64 * 1024; - -function BaselineCollector(instrumenter) { - this.instrumenter = instrumenter; - this.map = libCoverage.createCoverageMap(); - this.instrument = instrumenter.instrument.bind(this.instrumenter); - - var origInstrumentSync = instrumenter.instrumentSync; - this.instrumentSync = function () { - var args = Array.prototype.slice.call(arguments), - ret = origInstrumentSync.apply(this.instrumenter, args), - baseline = this.instrumenter.lastFileCoverage(); - this.map.addFileCoverage(baseline); - return ret; - }; - //monkey patch the instrumenter to call our version instead - instrumenter.instrumentSync = this.instrumentSync.bind(this); -} - -BaselineCollector.prototype.getCoverage = function () { - return this.map.toJSON(); -}; - - -function processFiles(instrumenter, opts, callback) { - var inputDir = opts.inputDir, - outputDir = opts.outputDir, - relativeNames = opts.names, - extensions = opts.extensions, - verbose = opts.verbose; - - var processor = function (name, callback) { - var inputFile = path.resolve(inputDir, name), - outputFile = path.resolve(outputDir, name), - inputFileExtension = path.extname(inputFile), - isJavaScriptFile = extensions.indexOf(inputFileExtension) > -1, - oDir = path.dirname(outputFile), - readStream, writeStream; - - callback = once(callback); - mkdirp.sync(oDir); - - /* istanbul ignore if */ - if (fs.statSync(inputFile).isDirectory()) { - return callback(null, name); - } - - if (isJavaScriptFile) { - fs.readFile(inputFile, 'utf8', function (err, data) { - /* istanbul ignore if */ if (err) { return callback(err, name); } - instrumenter.instrument(data, inputFile, function (iErr, instrumented) { - if (iErr) { return callback(iErr, name); } - fs.writeFile(outputFile, instrumented, 'utf8', function (err) { - return callback(err, name); - }); - }); - }); - } - else { - // non JavaScript file, copy it as is - readStream = fs.createReadStream(inputFile, {'bufferSize': READ_FILE_CHUNK_SIZE}); - writeStream = fs.createWriteStream(outputFile); - - readStream.on('error', callback); - writeStream.on('error', callback); - - readStream.pipe(writeStream); - readStream.on('end', function() { - callback(null, name); - }); - } - }, - q = async.queue(processor, 10), - errors = [], - count = 0, - startTime = new Date().getTime(); - - q.push(relativeNames, function (err, name) { - var inputFile, outputFile; - if (err) { - errors.push({ file: name, error: err.message || /* istanbul ignore next */ err.toString() }); - inputFile = path.resolve(inputDir, name); - outputFile = path.resolve(outputDir, name); - fs.writeFileSync(outputFile, fs.readFileSync(inputFile)); - } - if (verbose) { - console.error('Processed: ' + name); - } else { - if (count % 100 === 0) { process.stdout.write('.'); } - } - count += 1; - }); - - q.drain = function () { - var endTime = new Date().getTime(); - console.error('\nProcessed [' + count + '] files in ' + Math.floor((endTime - startTime) / 1000) + ' secs'); - if (errors.length > 0) { - console.error('The following ' + errors.length + ' file(s) had errors and were copied as-is'); - console.error(errors); - } - return callback(); - }; -} - - -function run(config, opts, callback) { - opts = opts || {}; - var iOpts = config.instrumentation, - input = opts.input, - output = opts.output, - excludes = opts.excludes, - file, - stats, - stream, - includes, - instrumenter, - origCallback = callback, - needBaseline = iOpts.saveBaseline(), - baselineFile = path.resolve(iOpts.baselineFile()); - - if (iOpts.completeCopy()) { - includes = ['**/*']; - } - else { - includes = iOpts.extensions().map(function(ext) { - return '**/*' + ext; - }); - } - - if (!input) { - return callback(new Error('No input specified')); - } - - instrumenter = libInstrument.createInstrumenter(iOpts.getInstrumenterOpts()); - - if (needBaseline) { - mkdirp.sync(path.dirname(baselineFile)); - instrumenter = new BaselineCollector(instrumenter); - callback = function (err) { - /* istanbul ignore else */ - if (!err) { - console.error('Saving baseline coverage at ' + baselineFile); - fs.writeFileSync(baselineFile, JSON.stringify(instrumenter.getCoverage()), 'utf8'); - } - return origCallback(err); - }; - } - - file = path.resolve(input); - stats = fs.statSync(file); - if (stats.isDirectory()) { - if (!output) { return callback(inputError.create('Need an output directory when input is a directory!')); } - if (output === file) { return callback(inputError.create('Cannot instrument into the same directory/ file as input!')); } - mkdirp.sync(output); - filesFor({ - root: file, - includes: includes, - excludes: excludes || iOpts.excludes(false), - relative: true - }, function (err, files) { - /* istanbul ignore if */ - if (err) { return callback(err); } - processFiles(instrumenter, { - inputDir: file, - outputDir: output, - names: files, - extensions: iOpts.extensions(), - verbose: config.verbose - }, callback); - }); - } else { - if (output) { - stream = fs.createWriteStream(output); - } else { - stream = process.stdout; - } - stream.write(instrumenter.instrumentSync(fs.readFileSync(file, 'utf8'), file)); - if (stream !== process.stdout) { - stream.end(); - } - return callback(); - } -} - -module.exports = { - run: run -}; - - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-reports.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-reports.js deleted file mode 100644 index f535f77b1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/lib/run-reports.js +++ /dev/null @@ -1,53 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var Reporter = require('./reporter'), - fs = require('fs'), - filesFor = require('./file-matcher').filesFor, - libCoverage = require('istanbul-lib-coverage'); - -function run(formats, config, opts, callback) { - if (!callback && typeof(opts) === 'function') { - callback = opts; - opts = {}; - } - opts = opts || {}; - var root, - coverageMap = libCoverage.createCoverageMap(), - includePattern = opts.include || '**/coverage*.raw.json', - reporter = new Reporter(config); - - if (!formats || formats.length === 0) { - formats = config.reporting.reports(); - } - try { - reporter.addAll(formats); - } catch (ex) { - ex.inputError = true; - return callback(ex); - } - - root = opts.root || process.cwd(); - filesFor({ - root: root, - includes: [ includePattern ] - }, function (err, files) { - /* istanbul ignore if */ - if (err) { - return callback(err); - } - files.forEach(function (file) { - var coverageObject = JSON.parse(fs.readFileSync(file, 'utf8')); - coverageMap.merge(coverageObject); - }); - reporter.write(coverageMap, {}); - return callback(); - }); -} - -module.exports = { - run: run -}; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/package.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-api/package.json deleted file mode 100644 index 6e31cbe65..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-api/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_args": [ - [ - "istanbul-api@^1.0.0-aplha.10", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "istanbul-api@>=1.0.0-aplha.10 <2.0.0", - "_id": "istanbul-api@1.0.0-aplha.10", - "_inCache": true, - "_installable": true, - "_location": "/istanbul-api", - "_nodeVersion": "6.2.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/istanbul-api-1.0.0-aplha.10.tgz_1466876888469_0.391846815822646" - }, - "_npmUser": { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - }, - "_npmVersion": "3.9.3", - "_phantomChildren": {}, - "_requested": { - "name": "istanbul-api", - "raw": "istanbul-api@^1.0.0-aplha.10", - "rawSpec": "^1.0.0-aplha.10", - "scope": null, - "spec": ">=1.0.0-aplha.10 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.0.0-aplha.10.tgz", - "_shasum": "902edf5cf5404e0eba7e00ef46408488a0d3e337", - "_shrinkwrap": null, - "_spec": "istanbul-api@^1.0.0-aplha.10", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "author": { - "email": "kananthmail-github@yahoo.com", - "name": "Krishnan Anantheswaran" - }, - "bugs": { - "url": "https://github.com/istanbuljs/istanbul-api/issues" - }, - "dependencies": { - "async": "1.x", - "clone": "^1.0.2", - "fileset": "0.2.x", - "istanbul-lib-coverage": "^1.0.0-alpha", - "istanbul-lib-hook": "^1.0.0-alpha", - "istanbul-lib-instrument": "^1.0.0-alpha", - "istanbul-lib-report": "^1.0.0-alpha", - "istanbul-lib-source-maps": "^1.0.0-alpha", - "istanbul-reports": "^1.0.0-alpha", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "once": "1.x" - }, - "description": "High level API for istanbul features", - "devDependencies": { - "chai": "^3.0.0", - "coveralls": "^2.11.4", - "istanbul": "^0.4.0", - "jshint": "^2.8.0", - "memory-streams": "^0.1.0", - "mocha": "^2.3.3", - "rimraf": "^2.4.3" - }, - "directories": {}, - "dist": { - "shasum": "902edf5cf5404e0eba7e00ef46408488a0d3e337", - "tarball": "https://registry.npmjs.org/istanbul-api/-/istanbul-api-1.0.0-aplha.10.tgz" - }, - "gitHead": "d4062233e1750975a7eb9b0ab744dbd417e1710c", - "homepage": "https://github.com/istanbuljs/istanbul-api#readme", - "keywords": [ - "istanbul", - "api" - ], - "license": "BSD-3-Clause", - "main": "index.js", - "maintainers": [ - { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - } - ], - "name": "istanbul-api", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/istanbuljs/istanbul-api.git" - }, - "scripts": { - "fast": "mocha --slow 1000 test/", - "pretest": "jshint index.js lib/ test/", - "test": "istanbul cover -x 'docs/**' --include-all-sources --print=both _mocha -- --slow 1000 test/", - "xposttest": "istanbul check-coverage --statements 95 --branches 80" - }, - "version": "1.0.0-aplha.10" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/.doc.yml b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/.doc.yml deleted file mode 100644 index dbf917bf9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/.doc.yml +++ /dev/null @@ -1,3 +0,0 @@ -order: - - Exports - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/CHANGELOG.md deleted file mode 100644 index 12057e61a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/CHANGELOG.md +++ /dev/null @@ -1,11 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - - -# [1.0.0](https://github.com/istanbuljs/istanbul-lib-coverage/compare/v1.0.0-alpha.3...v1.0.0) (2016-08-12) - - -### Bug Fixes - -* guard against missing statement ([76aad99](https://github.com/istanbuljs/istanbul-lib-coverage/commit/76aad99)) diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/LICENSE b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/LICENSE deleted file mode 100644 index d55d2916e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/README.md b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/README.md deleted file mode 100644 index 2f893e297..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/README.md +++ /dev/null @@ -1,32 +0,0 @@ -istanbul-lib-coverage ---------------------- - -[![Build Status](https://travis-ci.org/istanbuljs/istanbul-lib-coverage.svg?branch=master)](https://travis-ci.org/istanbuljs/istanbul-lib-coverage) - -An API that provides a read-only view of coverage information with the ability -to merge and summarize coverage info. - -Supersedes `object-utils` and `collector` from the v0 istanbul API. - -See the docs for the full API. - -```js - -var libCoverage = require('istanbul-lib-coverage'); -var map = libCoverage.createCoverageMap(globalCoverageVar); -var summary = libCoverage.createCoverageSummary(); - -// merge another coverage map into the one we created -map.merge(otherCoverageMap); - -// inspect and summarize all file coverage objects in the map -map.files().forEach(function (f) { - var fc = map.fileCoverageFor(f), - s = fc.toSummary(); - summary.merge(s); -}); - -console.log('Global summary', summary); - -``` - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/index.js deleted file mode 100644 index e88298213..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/index.js +++ /dev/null @@ -1,64 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -/** - * istanbul-lib-coverage exports an API that allows you to create and manipulate - * file coverage, coverage maps (a set of file coverage objects) and summary - * coverage objects. File coverage for the same file can be merged as can - * entire coverage maps. - * - * @module Exports - */ -var CoverageSummary = require('./lib/file').CoverageSummary, - FileCoverage = require('./lib/file').FileCoverage, - CoverageMap = require('./lib/coverage-map').CoverageMap; - -module.exports = { - /** - * creates a coverage summary object - * @param {Object} obj an argument with the same semantics - * as the one passed to the `CoverageSummary` constructor - * @returns {CoverageSummary} - */ - createCoverageSummary: function (obj) { - if (obj && obj instanceof CoverageSummary) { - return obj; - } - return new CoverageSummary(obj); - }, - /** - * creates a CoverageMap object - * @param {Object} obj optional - an argument with the same semantics - * as the one passed to the CoverageMap constructor. - * @returns {CoverageMap} - */ - createCoverageMap: function (obj) { - if (obj && obj instanceof CoverageMap) { - return obj; - } - return new CoverageMap(obj); - }, - /** - * creates a FileCoverage object - * @param {Object} obj optional - an argument with the same semantics - * as the one passed to the FileCoverage constructor. - * @returns {FileCoverage} - */ - createFileCoverage: function (obj) { - if (obj && obj instanceof FileCoverage) { - return obj; - } - return new FileCoverage(obj); - } -}; - -/** classes exported for reuse */ -module.exports.classes = { - /** - * the file coverage constructor - */ - FileCoverage: FileCoverage -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/lib/coverage-map.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/lib/coverage-map.js deleted file mode 100644 index 440779a6a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/lib/coverage-map.js +++ /dev/null @@ -1,116 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -var FileCoverage = require('./file').FileCoverage, - CoverageSummary = require('./file').CoverageSummary; - -function loadMap(source) { - var data = {}; - Object.keys(source).forEach(function (k) { - var cov = source[k]; - if (cov instanceof FileCoverage) { - data[k] = cov; - } else { - data[k] = new FileCoverage(cov); - } - }); - return data; -} -/** - * CoverageMap is a map of `FileCoverage` objects keyed by file paths. - * @param {Object} [obj=undefined] obj A coverage map from which to initialize this - * map's contents. This can be the raw global coverage object. - * @constructor - */ -function CoverageMap(obj) { - if (!obj) { - this.data = {}; - } else if (obj instanceof CoverageMap) { - this.data = obj.data; - } else { - this.data = loadMap(obj); - } -} -/** - * merges a second coverage map into this one - * @param {CoverageMap} obj - a CoverageMap or its raw data. Coverage is merged - * correctly for the same files and additional file coverage keys are created - * as needed. - */ -CoverageMap.prototype.merge = function (obj) { - var that = this, - other; - if (obj instanceof CoverageMap) { - other = obj; - } else { - other = new CoverageMap(obj); - } - Object.keys(other.data).forEach(function (k) { - var fc = other.data[k]; - if (that.data[k]) { - that.data[k].merge(fc); - } else { - that.data[k] = fc; - } - }); -}; -/** - * returns a JSON-serializable POJO for this coverage map - * @returns {Object} - */ -CoverageMap.prototype.toJSON = function () { - return this.data; -}; -/** - * returns an array for file paths for which this map has coverage - * @returns {Array{string}} - array of files - */ -CoverageMap.prototype.files = function () { - return Object.keys(this.data); -}; -/** - * returns the file coverage for the specified file. - * @param {String} file - * @returns {FileCoverage} - */ -CoverageMap.prototype.fileCoverageFor = function (file) { - var fc = this.data[file]; - if (!fc) { - throw new Error('No file coverage available for: ' + file); - } - return fc; -}; -/** - * adds a file coverage object to this map. If the path for the object, - * already exists in the map, it is merged with the existing coverage - * otherwise a new key is added to the map. - * @param {FileCoverage} fc the file coverage to add - */ -CoverageMap.prototype.addFileCoverage = function (fc) { - var cov = new FileCoverage(fc), - path = cov.path; - if (this.data[path]) { - this.data[path].merge(cov); - } else { - this.data[path] = cov; - } -}; -/** - * returns the coverage summary for all the file coverage objects in this map. - * @returns {CoverageSummary} - */ -CoverageMap.prototype.getCoverageSummary = function () { - var that = this, - ret = new CoverageSummary(); - this.files().forEach(function (key) { - ret.merge(that.fileCoverageFor(key).toSummary()); - }); - return ret; -}; - -module.exports = { - CoverageMap: CoverageMap -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/lib/file.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/lib/file.js deleted file mode 100644 index 0cfb8a4be..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/lib/file.js +++ /dev/null @@ -1,331 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -function percent(covered, total) { - var tmp; - if (total > 0) { - tmp = 1000 * 100 * covered / total + 5; - return Math.floor(tmp / 10) / 100; - } else { - return 100.00; - } -} - -function blankSummary() { - var empty = function () { - return { - total: 0, - covered: 0, - skipped: 0, - pct: 'Unknown' - }; - }; - return { - lines: empty(), - statements: empty(), - functions: empty(), - branches: empty() - }; -} - -// asserts that a data object "looks like" a summary coverage object -function assertValidSummary(obj) { - var valid = obj && - obj.lines && - obj.statements && - obj.functions && - obj.branches; - if (!valid) { - throw new Error('Invalid summary coverage object, missing keys, found:' + - Object.keys(obj).join(',')); - } -} -/** - * CoverageSummary provides a summary of code coverage . It exposes 4 properties, - * `lines`, `statements`, `branches`, and `functions`. Each of these properties - * is an object that has 4 keys `total`, `covered`, `skipped` and `pct`. - * `pct` is a percentage number (0-100). - * @param {Object|CoverageSummary} [obj=undefined] an optional data object or - * another coverage summary to initialize this object with. - * @constructor - */ -function CoverageSummary(obj) { - if (!obj) { - this.data = blankSummary(); - } else if (obj instanceof CoverageSummary) { - this.data = obj.data; - } else { - this.data = obj; - } - assertValidSummary(this.data); -} - -['lines', 'statements', 'functions', 'branches'].forEach(function (p) { - Object.defineProperty(CoverageSummary.prototype, p, { - enumerable: true, - get: function () { - return this.data[p]; - } - }); -}); - -/** - * merges a second summary coverage object into this one - * @param {CoverageSummary} obj - another coverage summary object - */ -CoverageSummary.prototype.merge = function (obj) { - var that = this, - keys = ['lines', 'statements', 'branches', 'functions']; - keys.forEach(function (key) { - that[key].total += obj[key].total; - that[key].covered += obj[key].covered; - that[key].skipped += obj[key].skipped; - that[key].pct = percent(that[key].covered, that[key].total); - }); - return this; -}; - -/** - * returns a POJO that is JSON serializable. May be used to get the raw - * summary object. - */ -CoverageSummary.prototype.toJSON = function () { - return this.data; -}; - -// returns a data object that represents empty coverage -function emptyCoverage(filePath) { - return { - path: filePath, - statementMap: {}, - fnMap: {}, - branchMap: {}, - s: {}, - f: {}, - b: {} - }; -} -// asserts that a data object "looks like" a coverage object -function assertValidObject(obj) { - var valid = obj && - obj.path && - obj.statementMap && - obj.fnMap && - obj.branchMap && - obj.s && - obj.f && - obj.b; - if (!valid) { - throw new Error('Invalid file coverage object, missing keys, found:' + - Object.keys(obj).join(',')); - } -} -/** - * provides a read-only view of coverage for a single file. - * The deep structure of this object is documented elsewhere. It has the following - * properties: - * - * * `path` - the file path for which coverage is being tracked - * * `statementMap` - map of statement locations keyed by statement index - * * `functionMap` - map of function metadata keyed by function index - * * `branchMap` - map of branch metadata keyed by branch index - * * `s` - hit counts for statements - * * `f` - hit count for functions - * * `b` - hit count for branches - * - * @param {Object|FileCoverage|String} pathOrObj is a string that initializes - * and empty coverage object with the specified file path or a data object that - * has all the required properties for a file coverage object. - * @constructor - */ -function FileCoverage(pathOrObj) { - if (!pathOrObj) { - throw new Error("Coverage must be initialized with a path or an object"); - } - if (typeof pathOrObj === 'string') { - this.data = emptyCoverage(pathOrObj); - } else if (pathOrObj instanceof FileCoverage) { - this.data = pathOrObj.data; - } else if (typeof pathOrObj === 'object') { - this.data = pathOrObj; - } else { - throw new Error('Invalid argument to coverage constructor'); - } - assertValidObject(this.data); -} -/** - * returns computed line coverage from statement coverage. - * This is a map of hits keyed by line number in the source. - */ -FileCoverage.prototype.getLineCoverage = function () { - var statementMap = this.data.statementMap, - statements = this.data.s, - lineMap = {}; - - Object.keys(statements).forEach(function (st) { - if (!statementMap[st]) { - return; - } - var line = statementMap[st].start.line, - count = statements[st], - prevVal = lineMap[line]; - if (prevVal === undefined || prevVal < count) { - lineMap[line] = count; - } - }); - return lineMap; -}; -/** - * returns an array of uncovered line numbers. - * @returns {Array} an array of line numbers for which no hits have been - * collected. - */ -FileCoverage.prototype.getUncoveredLines = function () { - var lc = this.getLineCoverage(), - ret = []; - Object.keys(lc).forEach(function (l) { - var hits = lc[l]; - if (hits === 0) { - ret.push(l); - } - }); - return ret; -}; -/** - * returns a map of branch coverage by source line number. - * @returns {Object} an object keyed by line number. Each object - * has a `covered`, `total` and `coverage` (percentage) property. - */ -FileCoverage.prototype.getBranchCoverageByLine = function () { - var branchMap = this.branchMap, - branches = this.b, - ret = {}; - Object.keys(branchMap).forEach(function (k) { - var line = branchMap[k].line, - branchData = branches[k]; - ret[line] = ret[line] || []; - ret[line].push.apply(ret[line], branchData); - }); - Object.keys(ret).forEach(function (k) { - var dataArray = ret[k], - covered = dataArray.filter(function (item) { return item > 0; }), - coverage = covered.length / dataArray.length * 100; - ret[k] = { covered: covered.length, total: dataArray.length, coverage: coverage }; - }); - return ret; -}; - -// expose coverage data attributes -['path', 'statementMap', 'fnMap', 'branchMap', 's', 'f', 'b' ].forEach(function (p) { - Object.defineProperty(FileCoverage.prototype, p, { - enumerable: true, - get: function () { - return this.data[p]; - } - }); -}); -/** - * return a JSON-serializable POJO for this file coverage object - */ -FileCoverage.prototype.toJSON = function () { - return this.data; -}; -/** - * merges a second coverage object into this one, updating hit counts - * @param {FileCoverage} other - the coverage object to be merged into this one. - * Note that the other object should have the same structure as this one (same file). - */ -FileCoverage.prototype.merge = function (other) { - var that = this; - Object.keys(other.s).forEach(function (k) { - that.data.s[k] += other.s[k]; - }); - Object.keys(other.f).forEach(function (k) { - that.data.f[k] += other.f[k]; - }); - Object.keys(other.b).forEach(function (k) { - var i, - retArray = that.data.b[k], - secondArray = other.b[k]; - for (i = 0; i < retArray.length; i += 1) { - retArray[i] += secondArray[i]; - } - }); -}; - -FileCoverage.prototype.computeSimpleTotals = function (property) { - var stats = this[property], - ret = {total: 0, covered: 0, skipped: 0}; - - if (typeof stats === 'function') { - stats = stats.call(this); - } - Object.keys(stats).forEach(function (key) { - var covered = !!stats[key]; - ret.total += 1; - if (covered) { - ret.covered += 1; - } - }); - ret.pct = percent(ret.covered, ret.total); - return ret; -}; - -FileCoverage.prototype.computeBranchTotals = function () { - var stats = this.b, - ret = {total: 0, covered: 0, skipped: 0}; - - Object.keys(stats).forEach(function (key) { - var branches = stats[key], - covered; - branches.forEach(function (branchHits) { - covered = branchHits > 0; - if (covered) { - ret.covered += 1; - } - }); - ret.total += branches.length; - }); - ret.pct = percent(ret.covered, ret.total); - return ret; -}; -/** - * resets hit counts for all statements, functions and branches - * in this coverage object resulting in zero coverage. - */ -FileCoverage.prototype.resetHits = function () { - var statements = this.s, - functions = this.f, - branches = this.b; - Object.keys(statements).forEach(function (s) { - statements[s] = 0; - }); - Object.keys(functions).forEach(function (f) { - functions[f] = 0; - }); - Object.keys(branches).forEach(function (b) { - var hits = branches[b]; - branches[b] = hits.map(function () { return 0; }); - }); -}; - -/** - * returns a CoverageSummary for this file coverage object - * @returns {CoverageSummary} - */ -FileCoverage.prototype.toSummary = function () { - var ret = {}; - ret.lines = this.computeSimpleTotals('getLineCoverage'); - ret.functions = this.computeSimpleTotals('f', 'fnMap'); - ret.statements = this.computeSimpleTotals('s', 'statementMap'); - ret.branches = this.computeBranchTotals(); - return new CoverageSummary(ret); -}; - -module.exports = { - CoverageSummary: CoverageSummary, - FileCoverage: FileCoverage -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/package.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/package.json deleted file mode 100644 index 5a3e3e427..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-coverage/package.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "_args": [ - [ - "istanbul-lib-coverage@^1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument" - ] - ], - "_from": "istanbul-lib-coverage@>=1.0.0 <2.0.0", - "_id": "istanbul-lib-coverage@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/istanbul-lib-coverage", - "_nodeVersion": "5.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/istanbul-lib-coverage-1.0.0.tgz_1470979978048_0.6411592594813555" - }, - "_npmUser": { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - "_npmVersion": "3.10.6", - "_phantomChildren": {}, - "_requested": { - "name": "istanbul-lib-coverage", - "raw": "istanbul-lib-coverage@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul-lib-instrument" - ], - "_resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz", - "_shasum": "c3f9b6d226da12424064cce87fce0fb57fdfa7a2", - "_shrinkwrap": null, - "_spec": "istanbul-lib-coverage@^1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument", - "author": { - "email": "kananthmail-github@yahoo.com", - "name": "Krishnan Anantheswaran" - }, - "bugs": { - "url": "https://github.com/istanbuljs/istanbul-lib-coverage/issues" - }, - "dependencies": {}, - "description": "Data library for istanbul coverage objects", - "devDependencies": { - "chai": "^3.0.0", - "coveralls": "^2.11.4", - "istanbul": "^0.4.0", - "jshint": "^2.8.0", - "mocha": "^2.2.5", - "standard-version": "^2.4.0" - }, - "directories": {}, - "dist": { - "shasum": "c3f9b6d226da12424064cce87fce0fb57fdfa7a2", - "tarball": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.0.tgz" - }, - "gitHead": "6c9c65ed81ce7c0e8b4efa8a4f5d96f02349c5ea", - "homepage": "https://github.com/istanbuljs/istanbul-lib-coverage", - "karmaDeps": { - "browserify-istanbul": "^0.2.1", - "karma": "^0.13.10", - "karma-browserify": "^4.2.1", - "karma-chrome-launcher": "^0.2.0", - "karma-coverage": "^0.4.2", - "karma-mocha": "^0.2.0", - "karma-phantomjs-launcher": "^0.2.0", - "phantomjs": "^1.9.17" - }, - "keywords": [ - "istanbul", - "coverage", - "data" - ], - "license": "BSD-3-Clause", - "main": "index.js", - "maintainers": [ - { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - } - ], - "name": "istanbul-lib-coverage", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/istanbuljs/istanbul-lib-coverage.git" - }, - "scripts": { - "fast": "mocha test/", - "posttest": "istanbul check-coverage --statements 95 --branches 80", - "pretest": "jshint index.js lib/ test/", - "release": "standard-version", - "test": "istanbul cover -x 'docs/**' --include-all-sources --print=both _mocha -- test/" - }, - "version": "1.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/.doc.yml b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/.doc.yml deleted file mode 100644 index dbf917bf9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/.doc.yml +++ /dev/null @@ -1,3 +0,0 @@ -order: - - Exports - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/LICENSE b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/LICENSE deleted file mode 100644 index d55d2916e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/README.md b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/README.md deleted file mode 100644 index b918dafb4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/README.md +++ /dev/null @@ -1,6 +0,0 @@ -istanbul-lib-hook -================= - -[![Build Status](https://travis-ci.org/istanbuljs/istanbul-lib-hook.svg?branch=master)](https://travis-ci.org/istanbuljs/istanbul-lib-hook) - -Hooks for require, vm and script used in istanbul diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/anchor.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/anchor.js deleted file mode 100644 index 47d871ad4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/anchor.js +++ /dev/null @@ -1,197 +0,0 @@ -/*! - * AnchorJS - v1.2.1 - 2015-07-02 - * https://github.com/bryanbraun/anchorjs - * Copyright (c) 2015 Bryan Braun; Licensed MIT - */ - -function AnchorJS(options) { - 'use strict'; - - this.options = options || {}; - - this._applyRemainingDefaultOptions = function(opts) { - this.options.icon = this.options.hasOwnProperty('icon') ? opts.icon : '\ue9cb'; // Accepts characters (and also URLs?), like '#', '¶', '❡', or '§'. - this.options.visible = this.options.hasOwnProperty('visible') ? opts.visible : 'hover'; // Also accepts 'always' - this.options.placement = this.options.hasOwnProperty('placement') ? opts.placement : 'right'; // Also accepts 'left' - this.options.class = this.options.hasOwnProperty('class') ? opts.class : ''; // Accepts any class name. - }; - - this._applyRemainingDefaultOptions(options); - - this.add = function(selector) { - var elements, - elsWithIds, - idList, - elementID, - i, - roughText, - tidyText, - index, - count, - newTidyText, - readableID, - anchor; - - this._applyRemainingDefaultOptions(this.options); - - // Provide a sensible default selector, if none is given. - if (!selector) { - selector = 'h1, h2, h3, h4, h5, h6'; - } else if (typeof selector !== 'string') { - throw new Error('The selector provided to AnchorJS was invalid.'); - } - - elements = document.querySelectorAll(selector); - if (elements.length === 0) { - return false; - } - - this._addBaselineStyles(); - - // We produce a list of existing IDs so we don't generate a duplicate. - elsWithIds = document.querySelectorAll('[id]'); - idList = [].map.call(elsWithIds, function assign(el) { - return el.id; - }); - - for (i = 0; i < elements.length; i++) { - - if (elements[i].hasAttribute('id')) { - elementID = elements[i].getAttribute('id'); - } else { - roughText = elements[i].textContent; - - // Refine it so it makes a good ID. Strip out non-safe characters, replace - // spaces with hyphens, truncate to 32 characters, and make toLowerCase. - // - // Example string: // '⚡⚡⚡ Unicode icons are cool--but they definitely don't belong in a URL fragment.' - tidyText = roughText.replace(/[^\w\s-]/gi, '') // ' Unicode icons are cool--but they definitely dont belong in a URL fragment' - .replace(/\s+/g, '-') // '-Unicode-icons-are-cool--but-they-definitely-dont-belong-in-a-URL-fragment' - .replace(/-{2,}/g, '-') // '-Unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-URL-fragment' - .substring(0, 64) // '-Unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-URL' - .replace(/^-+|-+$/gm, '') // 'Unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-URL' - .toLowerCase(); // 'unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-url' - - // Compare our generated ID to existing IDs (and increment it if needed) - // before we add it to the page. - newTidyText = tidyText; - count = 0; - do { - if (index !== undefined) { - newTidyText = tidyText + '-' + count; - } - // .indexOf is supported in IE9+. - index = idList.indexOf(newTidyText); - count += 1; - } while (index !== -1); - index = undefined; - idList.push(newTidyText); - - // Assign it to our element. - // Currently the setAttribute element is only supported in IE9 and above. - elements[i].setAttribute('id', newTidyText); - - elementID = newTidyText; - } - - readableID = elementID.replace(/-/g, ' '); - - // The following code builds the following DOM structure in a more effiecient (albeit opaque) way. - // ''; - anchor = document.createElement('a'); - anchor.className = 'anchorjs-link ' + this.options.class; - anchor.href = '#' + elementID; - anchor.setAttribute('aria-label', 'Anchor link for: ' + readableID); - anchor.setAttribute('data-anchorjs-icon', this.options.icon); - - if (this.options.visible === 'always') { - anchor.style.opacity = '1'; - } - - if (this.options.icon === '\ue9cb') { - anchor.style.fontFamily = 'anchorjs-icons'; - anchor.style.fontStyle = 'normal'; - anchor.style.fontVariant = 'normal'; - anchor.style.fontWeight = 'normal'; - anchor.style.lineHeight = 1; - } - - if (this.options.placement === 'left') { - anchor.style.position = 'absolute'; - anchor.style.marginLeft = '-1em'; - anchor.style.paddingRight = '0.5em'; - elements[i].insertBefore(anchor, elements[i].firstChild); - } else { // if the option provided is `right` (or anything else). - anchor.style.paddingLeft = '0.375em'; - elements[i].appendChild(anchor); - } - } - - return this; - }; - - this.remove = function(selector) { - var domAnchor, - elements = document.querySelectorAll(selector); - for (var i = 0; i < elements.length; i++) { - domAnchor = elements[i].querySelector('.anchorjs-link'); - if (domAnchor) { - elements[i].removeChild(domAnchor); - } - } - return this; - }; - - this._addBaselineStyles = function() { - // We don't want to add global baseline styles if they've been added before. - if (document.head.querySelector('style.anchorjs') !== null) { - return; - } - - var style = document.createElement('style'), - linkRule = - ' .anchorjs-link {' + - ' opacity: 0;' + - ' text-decoration: none;' + - ' -webkit-font-smoothing: antialiased;' + - ' -moz-osx-font-smoothing: grayscale;' + - ' }', - hoverRule = - ' *:hover > .anchorjs-link,' + - ' .anchorjs-link:focus {' + - ' opacity: 1;' + - ' }', - anchorjsLinkFontFace = - ' @font-face {' + - ' font-family: "anchorjs-icons";' + - ' font-style: normal;' + - ' font-weight: normal;' + // Icon from icomoon; 10px wide & 10px tall; 2 empty below & 4 above - ' src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBTUAAAC8AAAAYGNtYXAWi9QdAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zgq29TcAAAF4AAABNGhlYWQEZM3pAAACrAAAADZoaGVhBhUDxgAAAuQAAAAkaG10eASAADEAAAMIAAAAFGxvY2EAKACuAAADHAAAAAxtYXhwAAgAVwAAAygAAAAgbmFtZQ5yJ3cAAANIAAAB2nBvc3QAAwAAAAAFJAAAACAAAwJAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpywPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6cv//f//AAAAAAAg6cv//f//AAH/4xY5AAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACADEARAJTAsAAKwBUAAABIiYnJjQ/AT4BMzIWFxYUDwEGIicmND8BNjQnLgEjIgYPAQYUFxYUBw4BIwciJicmND8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFA8BDgEjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAEAAAABAACiToc1Xw889QALBAAAAAAA0XnFFgAAAADRecUWAAAAAAJTAsAAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAAlMAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAAoAAMQAAAAAACgAUAB4AmgABAAAABQBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIABwCfAAEAAAAAAAMADgBLAAEAAAAAAAQADgC0AAEAAAAAAAUACwAqAAEAAAAAAAYADgB1AAEAAAAAAAoAGgDeAAMAAQQJAAEAHAAOAAMAAQQJAAIADgCmAAMAAQQJAAMAHABZAAMAAQQJAAQAHADCAAMAAQQJAAUAFgA1AAMAAQQJAAYAHACDAAMAAQQJAAoANAD4YW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype");' + - ' }', - pseudoElContent = - ' [data-anchorjs-icon]::after {' + - ' content: attr(data-anchorjs-icon);' + - ' }', - firstStyleEl; - - style.className = 'anchorjs'; - style.appendChild(document.createTextNode('')); // Necessary for Webkit. - - // We place it in the head with the other style tags, if possible, so as to - // not look out of place. We insert before the others so these styles can be - // overridden if necessary. - firstStyleEl = document.head.querySelector('[rel="stylesheet"], style'); - if (firstStyleEl === undefined) { - document.head.appendChild(style); - } else { - document.head.insertBefore(style, firstStyleEl); - } - - style.sheet.insertRule(linkRule, style.sheet.cssRules.length); - style.sheet.insertRule(hoverRule, style.sheet.cssRules.length); - style.sheet.insertRule(pseudoElContent, style.sheet.cssRules.length); - style.sheet.insertRule(anchorjsLinkFontFace, style.sheet.cssRules.length); - }; -} - -var anchors = new AnchorJS(); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/bass.css b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/bass.css deleted file mode 100755 index 941c260e7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/bass.css +++ /dev/null @@ -1,850 +0,0 @@ -/* - - Basscss v7.0.3 - Low-level CSS toolkit - http://basscss.com - - 14.88 kB - 3.38 kB Gzipped - 286 Rules - 328 Selectors - 441 Declarations - 95 Properties - -*/ - - - -body { margin: 0 } -img { max-width: 100% } -svg { max-height: 100% } - -input, -select, -textarea, -fieldset { - font-family: inherit; - font-size: 1rem; - box-sizing: border-box; - margin-top: 0; - margin-bottom: 0; -} - -label { - vertical-align: middle; -} - -input[type=text], -input[type=date], -input[type=datetime], -input[type=datetime-local], -input[type=email], -input[type=month], -input[type=number], -input[type=password], -input[type=search], -input[type=tel], -input[type=time], -input[type=url], -input[type=week] { - height: 2.25rem; - padding: .5rem .5rem; - vertical-align: middle; - -webkit-appearance: none; -} - -select { - line-height: 1.75; - padding: .5rem .5rem; -} - -select:not([multiple]) { - height: 2.25rem; - vertical-align: middle; -} - -textarea { - line-height: 1.75; - padding: .5rem .5rem; -} - -table { - border-collapse: separate; - border-spacing: 0; - max-width: 100%; - width: 100%; -} - -th { - text-align: left; - font-weight: bold; -} - -th, -td { - padding: .25rem 1rem; - line-height: inherit; -} - -th { vertical-align: bottom } -td { vertical-align: top } - -body { - font-family: 'Helvetica Neue', Helvetica, sans-serif; - line-height: 1.5; - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - font-family: 'Helvetica Neue', Helvetica, sans-serif; - font-weight: bold; - line-height: 1.25; - margin-top: 1em; - margin-bottom: .5em; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -dl, ol, ul { - margin-top: 0; - margin-bottom: 1rem; -} - -pre, code, samp { - font-family: 'Source Code Pro', Consolas, monospace; - font-size: inherit; -} - -pre { - margin-top: 0; - margin-bottom: 1rem; - overflow-x: scroll; -} - -h1 { font-size: 2rem } -h2 { font-size: 1.5rem } -h3 { font-size: 1.25rem } -h4 { font-size: 1rem } -h5 { font-size: .875rem } -h6 { font-size: .75rem } - -body { - color: #111; - background-color: #fff; -} - -a { - color: #0074d9; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -pre, code { - background-color: transparent; - border-radius: 3px; -} - -hr { - border: 0; - border-bottom-style: solid; - border-bottom-width: 1px; - border-bottom-color: rgba(0,0,0,.125); -} - -.field { - border-style: solid; - border-width: 1px; - border-color: rgba(0,0,0,.125); - border-radius: 3px; -} - -.field:focus, -.field.is-focused { - outline: none; - border-color: #0074d9; - box-shadow: 0 0 0 2px rgba(0, 116, 217, 0.5); -} - -.field:disabled, -.field.is-disabled { - background-color: rgba(0,0,0,.125); - opacity: .5; -} - -.field:read-only:not(select), -.field.is-read-only { - background-color: rgba(0,0,0,.125); -} - - -.field.is-success { - border-color: #2ecc40; -} - -.field.is-success:focus, -.field.is-success.is-focused { - box-shadow: 0 0 0 2px rgba(46, 204, 64, 0.5); -} - -.field.is-warning { - border-color: #ffdc00; -} - -.field.is-warning:focus, -.field.is-warning.is-focused { - box-shadow: 0 0 0 2px rgba(255, 220, 0, 0.5); -} - -.field:invalid, -.field.is-error { - border-color: #ff4136; -} - -.field:invalid:focus, -.field:invalid.is-focused, -.field.is-error:focus, -.field.is-error.is-focused { - box-shadow: 0 0 0 2px rgba(255, 65, 54, 0.5); -} - -.table-light th, -.table-light td { - border-bottom-width: 1px; - border-bottom-style: solid; - border-bottom-color: rgba(0,0,0,.125); -} - -.table-light tr:last-child td { - border-bottom: 0; -} - -.btn { - font-family: inherit; - font-size: inherit; - font-weight: bold; - text-decoration: none; - cursor: pointer; - display: inline-block; - line-height: 1.125rem; - padding: .5rem 1rem; - margin: 0; - height: auto; - border: 1px solid transparent; - vertical-align: middle; - -webkit-appearance: none; - color: inherit; - background-color: transparent; -} - -.btn:hover { - text-decoration: none; -} - -.btn:focus { - outline: none; - border-color: rgba(0,0,0,.125); - box-shadow: 0 0 0 3px rgba(0,0,0,.25); -} - -::-moz-focus-inner { - border: 0; - padding: 0; -} - -.btn-primary { - color: #fff; - background-color: #0074d9; - border-radius: 3px; -} - -.btn-primary:hover { - box-shadow: inset 0 0 0 20rem rgba(0,0,0,.0625); -} - -.btn-primary:active { - box-shadow: inset 0 0 0 20rem rgba(0,0,0,.125), - inset 0 3px 4px 0 rgba(0,0,0,.25), - 0 0 1px rgba(0,0,0,.125); -} - -.btn-primary:disabled, -.btn-primary.is-disabled { - opacity: .5; -} - -.btn-outline, -.btn-outline:hover { - border-color: currentcolor; -} - -.btn-outline { - border-radius: 3px; -} - -.btn-outline:hover { - box-shadow: inset 0 0 0 20rem rgba(0,0,0,.0625); -} - -.btn-outline:active { - box-shadow: inset 0 0 0 20rem rgba(0,0,0,.125), - inset 0 3px 4px 0 rgba(0,0,0,.25), - 0 0 1px rgba(0,0,0,.125); -} - -.btn-outline:disabled, -.btn-outline.is-disabled { - opacity: .5; -} - -.h1 { font-size: 2rem } -.h2 { font-size: 1.5rem } -.h3 { font-size: 1.25rem } -.h4 { font-size: 1rem } -.h5 { font-size: .875rem } -.h6 { font-size: .75rem } - -.bold { font-weight: bold } -.regular { font-weight: normal } -.italic { font-style: italic } -.caps { text-transform: uppercase; letter-spacing: .2em; } - -.left-align { text-align: left } -.center { text-align: center } -.right-align { text-align: right } -.justify { text-align: justify } - -.nowrap { white-space: nowrap } -.break-word { word-wrap: break-word } - -.truncate { - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.list-reset { - list-style: none; - padding-left: 0; -} - -.inline { display: inline } -.block { display: block } -.inline-block { display: inline-block } -.table { display: table } -.table-cell { display: table-cell } - -.overflow-hidden { overflow: hidden } -.overflow-scroll { overflow: scroll } -.overflow-auto { overflow: auto } - -.clearfix:before, -.clearfix:after { - content: " "; - display: table -} -.clearfix:after { clear: both } - -.left { float: left } -.right { float: right } - -.fit { max-width: 100% } - -.border-box { box-sizing: border-box } - -.align-baseline { vertical-align: baseline } -.align-top { vertical-align: top } -.align-middle { vertical-align: middle } -.align-bottom { vertical-align: bottom } - -.m0 { margin: 0 } -.mt0 { margin-top: 0 } -.mr0 { margin-right: 0 } -.mb0 { margin-bottom: 0 } -.ml0 { margin-left: 0 } - -.m1 { margin: .5rem } -.mt1 { margin-top: .5rem } -.mr1 { margin-right: .5rem } -.mb1 { margin-bottom: .5rem } -.ml1 { margin-left: .5rem } - -.m2 { margin: 1rem } -.mt2 { margin-top: 1rem } -.mr2 { margin-right: 1rem } -.mb2 { margin-bottom: 1rem } -.ml2 { margin-left: 1rem } - -.m3 { margin: 2rem } -.mt3 { margin-top: 2rem } -.mr3 { margin-right: 2rem } -.mb3 { margin-bottom: 2rem } -.ml3 { margin-left: 2rem } - -.m4 { margin: 4rem } -.mt4 { margin-top: 4rem } -.mr4 { margin-right: 4rem } -.mb4 { margin-bottom: 4rem } -.ml4 { margin-left: 4rem } - -.mxn1 { margin-left: -.5rem; margin-right: -.5rem; } -.mxn2 { margin-left: -1rem; margin-right: -1rem; } -.mxn3 { margin-left: -2rem; margin-right: -2rem; } -.mxn4 { margin-left: -4rem; margin-right: -4rem; } - -.mx-auto { margin-left: auto; margin-right: auto; } -.p0 { padding: 0 } - -.p1 { padding: .5rem } -.py1 { padding-top: .5rem; padding-bottom: .5rem } -.px1 { padding-left: .5rem; padding-right: .5rem } - -.p2 { padding: 1rem } -.py2 { padding-top: 1rem; padding-bottom: 1rem } -.px2 { padding-left: 1rem; padding-right: 1rem } - -.p3 { padding: 2rem } -.py3 { padding-top: 2rem; padding-bottom: 2rem } -.px3 { padding-left: 2rem; padding-right: 2rem } - -.p4 { padding: 4rem } -.py4 { padding-top: 4rem; padding-bottom: 4rem } -.px4 { padding-left: 4rem; padding-right: 4rem } - -.relative { position: relative } -.absolute { position: absolute } -.fixed { position: fixed } - -.top-0 { top: 0 } -.right-0 { right: 0 } -.bottom-0 { bottom: 0 } -.left-0 { left: 0 } - -.z1 { z-index: 1 } -.z2 { z-index: 2 } -.z3 { z-index: 3 } -.z4 { z-index: 4 } - -.sm-show, .md-show, .lg-show { - display: none !important -} - -@media (min-width: 40em) { - .sm-show { display: block !important } -} - -@media (min-width: 52em) { - .md-show { display: block !important } -} - -@media (min-width: 64em) { - .lg-show { display: block !important } -} - - -@media (min-width: 40em) { - .sm-hide { display: none !important } -} - -@media (min-width: 52em) { - .md-hide { display: none !important } -} - -@media (min-width: 64em) { - .lg-hide { display: none !important } -} - -.display-none { display: none !important } - -.hide { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px, 1px, 1px, 1px); -} - -.container { - max-width: 64em; - margin-left: auto; - margin-right: auto; -} -.col { - float: left; - box-sizing: border-box; -} - -.col-right { - float: right; - box-sizing: border-box; -} - -.col-1 { - width: 8.33333%; -} - -.col-2 { - width: 16.66667%; -} - -.col-3 { - width: 25%; -} - -.col-4 { - width: 33.33333%; -} - -.col-5 { - width: 41.66667%; -} - -.col-6 { - width: 50%; -} - -.col-7 { - width: 58.33333%; -} - -.col-8 { - width: 66.66667%; -} - -.col-9 { - width: 75%; -} - -.col-10 { - width: 83.33333%; -} - -.col-11 { - width: 91.66667%; -} - -.col-12 { - width: 100%; -} -@media (min-width: 40em) { - - .sm-col { - float: left; - box-sizing: border-box; - } - - .sm-col-right { - float: right; - box-sizing: border-box; - } - - .sm-col-1 { - width: 8.33333%; - } - - .sm-col-2 { - width: 16.66667%; - } - - .sm-col-3 { - width: 25%; - } - - .sm-col-4 { - width: 33.33333%; - } - - .sm-col-5 { - width: 41.66667%; - } - - .sm-col-6 { - width: 50%; - } - - .sm-col-7 { - width: 58.33333%; - } - - .sm-col-8 { - width: 66.66667%; - } - - .sm-col-9 { - width: 75%; - } - - .sm-col-10 { - width: 83.33333%; - } - - .sm-col-11 { - width: 91.66667%; - } - - .sm-col-12 { - width: 100%; - } - -} -@media (min-width: 52em) { - - .md-col { - float: left; - box-sizing: border-box; - } - - .md-col-right { - float: right; - box-sizing: border-box; - } - - .md-col-1 { - width: 8.33333%; - } - - .md-col-2 { - width: 16.66667%; - } - - .md-col-3 { - width: 25%; - } - - .md-col-4 { - width: 33.33333%; - } - - .md-col-5 { - width: 41.66667%; - } - - .md-col-6 { - width: 50%; - } - - .md-col-7 { - width: 58.33333%; - } - - .md-col-8 { - width: 66.66667%; - } - - .md-col-9 { - width: 75%; - } - - .md-col-10 { - width: 83.33333%; - } - - .md-col-11 { - width: 91.66667%; - } - - .md-col-12 { - width: 100%; - } - -} -@media (min-width: 64em) { - - .lg-col { - float: left; - box-sizing: border-box; - } - - .lg-col-right { - float: right; - box-sizing: border-box; - } - - .lg-col-1 { - width: 8.33333%; - } - - .lg-col-2 { - width: 16.66667%; - } - - .lg-col-3 { - width: 25%; - } - - .lg-col-4 { - width: 33.33333%; - } - - .lg-col-5 { - width: 41.66667%; - } - - .lg-col-6 { - width: 50%; - } - - .lg-col-7 { - width: 58.33333%; - } - - .lg-col-8 { - width: 66.66667%; - } - - .lg-col-9 { - width: 75%; - } - - .lg-col-10 { - width: 83.33333%; - } - - .lg-col-11 { - width: 91.66667%; - } - - .lg-col-12 { - width: 100%; - } - -} - -.flex { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex } - -.flex-column { -webkit-box-orient: vertical; -webkit-box-direction: normal; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column } -.flex-wrap { -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap } - -.flex-center { -webkit-box-align: center; -webkit-align-items: center; -ms-flex-align: center; align-items: center } -.flex-baseline { -webkit-box-align: baseline; -webkit-align-items: baseline; -ms-flex-align: baseline; align-items: baseline } -.flex-stretch { -webkit-box-align: stretch; -webkit-align-items: stretch; -ms-flex-align: stretch; align-items: stretch } -.flex-start { -webkit-box-align: start; -webkit-align-items: flex-start; -ms-flex-align: start; align-items: flex-start } -.flex-end { -webkit-box-align: end; -webkit-align-items: flex-end; -ms-flex-align: end; align-items: flex-end } - -.flex-justify { -webkit-box-pack: justify; -webkit-justify-content: space-between; -ms-flex-pack: justify; justify-content: space-between } - -.flex-auto { - -webkit-box-flex: 1; - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - min-width: 0; - min-height: 0; -} -.flex-grow { -webkit-box-flex: 1; -webkit-flex: 1 0 auto; -ms-flex: 1 0 auto; flex: 1 0 auto } -.flex-none { -webkit-box-flex: 0; -webkit-flex: none; -ms-flex: none; flex: none } - -.flex-first { -webkit-box-ordinal-group: 0; -webkit-order: -1; -ms-flex-order: -1; order: -1 } -.flex-last { -webkit-box-ordinal-group: 100000; -webkit-order: 99999; -ms-flex-order: 99999; order: 99999 } -@media (min-width: 40em) { - .sm-flex { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex } -} -@media (min-width: 52em) { - .md-flex { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex } -} -@media (min-width: 64em) { - .lg-flex { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex } -} - -.border { - border-style: solid; - border-width: 1px; - border-color: rgba(0,0,0,.125); -} - -.border-top { - border-top-style: solid; - border-top-width: 1px; - border-top-color: rgba(0,0,0,.125); -} - -.border-right { - border-right-style: solid; - border-right-width: 1px; - border-right-color: rgba(0,0,0,.125); -} - -.border-bottom { - border-bottom-style: solid; - border-bottom-width: 1px; - border-bottom-color: rgba(0,0,0,.125); -} - -.border-left { - border-left-style: solid; - border-left-width: 1px; - border-left-color: rgba(0,0,0,.125); -} - -.border-none { border: 0 } - -.rounded { border-radius: 3px } -.circle { border-radius: 50% } - -.rounded-top { border-radius: 3px 3px 0 0 } -.rounded-right { border-radius: 0 3px 3px 0 } -.rounded-bottom { border-radius: 0 0 3px 3px } -.rounded-left { border-radius: 3px 0 0 3px } - -.not-rounded { border-radius: 0 } - -.black { color: #111 } -.gray { color: #aaa } -.silver { color: #ddd } -.white { color: #fff } - -.aqua { color: #7fdbff } -.blue { color: #0074d9 } -.navy { color: #001f3f } -.teal { color: #39cccc } -.green { color: #2ecc40 } -.olive { color: #3d9970 } -.lime { color: #01ff70 } - -.yellow { color: #ffdc00 } -.orange { color: #ff851b } -.red { color: #ff4136 } -.fuchsia { color: #f012be } -.purple { color: #b10dc9 } -.maroon { color: #85144b } - -.color-inherit { color: inherit } -.muted { opacity: .5 } - -.bg-black { background-color: #111 } -.bg-gray { background-color: #aaa } -.bg-silver { background-color: #ddd } -.bg-white { background-color: #fff } - -.bg-aqua { background-color: #7fdbff } -.bg-blue { background-color: #0074d9 } -.bg-navy { background-color: #001f3f } -.bg-teal { background-color: #39cccc } -.bg-green { background-color: #2ecc40 } -.bg-olive { background-color: #3d9970 } -.bg-lime { background-color: #01ff70 } - -.bg-yellow { background-color: #ffdc00 } -.bg-orange { background-color: #ff851b } -.bg-red { background-color: #ff4136 } -.bg-fuchsia { background-color: #f012be } -.bg-purple { background-color: #b10dc9 } -.bg-maroon { background-color: #85144b } - -.bg-darken-1 { background-color: rgba(0,0,0,.0625) } -.bg-darken-2 { background-color: rgba(0,0,0,.125) } -.bg-darken-3 { background-color: rgba(0,0,0,.25) } -.bg-darken-4 { background-color: rgba(0,0,0,.5) } - -.bg-lighten-1 { background-color: rgba(255,255,255,.0625) } -.bg-lighten-2 { background-color: rgba(255,255,255,.125) } -.bg-lighten-3 { background-color: rgba(255,255,255,.25) } -.bg-lighten-4 { background-color: rgba(255,255,255,.5) } - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/github.css b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/github.css deleted file mode 100644 index 8852abb4c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/github.css +++ /dev/null @@ -1,123 +0,0 @@ -/* - -github.com style (c) Vasily Polovnyov - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #333; - background: #f8f8f8; - -webkit-text-size-adjust: none; -} - -.hljs-comment, -.diff .hljs-header, -.hljs-javadoc { - color: #998; - font-style: italic; -} - -.hljs-keyword, -.css .rule .hljs-keyword, -.hljs-winutils, -.nginx .hljs-title, -.hljs-subst, -.hljs-request, -.hljs-status { - color: #1184CE; -} - -.hljs-number, -.hljs-hexcolor, -.ruby .hljs-constant { - color: #ed225d; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.hljs-dartdoc, -.tex .hljs-formula { - color: #ed225d; -} - -.hljs-title, -.hljs-id, -.scss .hljs-preprocessor { - color: #900; - font-weight: bold; -} - -.hljs-list .hljs-keyword, -.hljs-subst { - font-weight: normal; -} - -.hljs-class .hljs-title, -.hljs-type, -.vhdl .hljs-literal, -.tex .hljs-command { - color: #458; - font-weight: bold; -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-rules .hljs-property, -.django .hljs-tag .hljs-keyword { - color: #000080; - font-weight: normal; -} - -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body { - color: #008080; -} - -.hljs-regexp { - color: #009926; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.lisp .hljs-keyword, -.clojure .hljs-keyword, -.scheme .hljs-keyword, -.tex .hljs-special, -.hljs-prompt { - color: #990073; -} - -.hljs-built_in { - color: #0086b3; -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-doctype, -.hljs-shebang, -.hljs-cdata { - color: #999; - font-weight: bold; -} - -.hljs-deletion { - background: #fdd; -} - -.hljs-addition { - background: #dfd; -} - -.diff .hljs-change { - background: #0086b3; -} - -.hljs-chunk { - color: #aaa; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/site.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/site.js deleted file mode 100644 index 2cb0fb340..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/site.js +++ /dev/null @@ -1,40 +0,0 @@ -/* global anchors */ - -// add anchor links to headers -anchors.options.placement = 'left'; -anchors.add().remove('.no-anchor'); - -// Filter UI -var tocElements = document.getElementById('toc').getElementsByTagName('a'); -document.getElementById('filter-input').addEventListener('keyup', function(e) { - - var i, element; - - // enter key - if (e.keyCode === 13) { - // go to the first displayed item in the toc - for (i = 0; i < tocElements.length; i++) { - element = tocElements[i]; - if (!element.classList.contains('hide')) { - location.replace(element.href); - return e.preventDefault(); - } - } - } - - var match = function() { return true; }, - value = this.value.toLowerCase(); - - if (!value.match(/^\s*$/)) { - match = function(text) { return text.toLowerCase().indexOf(value) !== -1; }; - } - - for (i = 0; i < tocElements.length; i++) { - element = tocElements[i]; - if (match(element.innerHTML)) { - element.classList.remove('hide'); - } else { - element.classList.add('hide'); - } - } -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/style.css b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/style.css deleted file mode 100644 index a675e62b9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/assets/style.css +++ /dev/null @@ -1,95 +0,0 @@ -.documentation a { - color: #1184CE; -} - -.documentation .suppress-p-margin p { - margin:0; -} - -.force-inline p { - display: inline; - color: #222; -} - -.container-small { - max-width: 58rem; - margin-left: auto; - margin-right: auto; -} - -.max-height-100 { - max-height: 100%; -} - -.fade { - opacity:0.50; -} - -.button-indent { - padding: .25rem 1.5rem; - font-size: 90%; -} - -.section-indent { - border-left: 2px solid #eee; -} - -.bg-cloudy { - background: #fafafa; -} - -.force-inline * { - display:inline; -} - -section:target h3 { - font-weight:700; -} - -.documentation, -.documentation h1, -.documentation h2, -.documentation h3, -.documentation h4, -.documentation h5, -.documentation h6 { - font-family: 'Source Sans Pro', Helvetica, sans-serif; -} - -.documentation pre, -.documentation code, -.documentation samp { - font-family: 'Source Code Pro', monospace; - font-size: 90%; -} - -.documentation td, -.documentation th { - padding: .25rem .25rem; -} - -h1:hover .anchorjs-link, -h2:hover .anchorjs-link, -h3:hover .anchorjs-link, -h4:hover .anchorjs-link { - opacity: 1; -} - -.collapsible .collapser { - display:none; -} - -.collapsible:target .collapser { - display: block; -} - -.fix-3 { - width: 25%; - max-width: 244px; -} - -@media (min-width: 52em) { - .fix-margin-3 { - margin-left: 25%; - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/index.html b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/index.html deleted file mode 100644 index d2f11e080..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/docs/index.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - istanbul-lib-hook 1.0.0-alpha.2 | Documentation - - - - - - - -
-
- -
-
-
-

- Exports -

-

istanbul-lib-hook provides mechanisms to transform code in the scope of require, -vm.createScript, vm.runInThisContext etc.

-

This mechanism is general and relies on a user-supplied matcher function that -determines when transformations should be performed and a user-supplied transformer -function that performs the actual transform. Instrumenting code for coverage is -one specific example of useful hooking.

-

Note that both the matcher and transformer must execute synchronously.

- -

Examples

-
var hook = require('istanbul-lib-hook'),
-    myMatcher = function (file) { return file.match(/foo/); },
-    myTransformer = function (code, file) {
-        return 'console.log("' + file + '");' + code;
-    };
-
-hook.hookRequire(myMatcher, myTransformer);
-var foo = require('foo'); //will now print foo's module path to console
-
-
-

- hookCreateScript(matcher, transformer, options, opts) -

-

hooks vm.createScript to return transformed code out of which a Script object will be created. -Exceptions in the transform result in the original code being used instead.

- -

Parameters

-
    -
  • matcher - : - -

    {Function(filePath)} a function that is called with the filename passed to vm.createScript -Should return a truthy value when transformations need to be applied to the code, a falsy value otherwise

    - -
    -
  • -
  • transformer - : - -

    {Function(code, filePath)} a function called with the original code and the filename passed to -vm.createScript. Should return the transformed code.

    - -
    -
  • -
  • options - : - -

    {Object} options Optional.

    - -
    -
  • -
      -
    • [Boolean] options.verbose -

      write a line to standard error every time the transformer is called

      -
    • -
    -
  • opts - : - - - -
  • -
-
-
-

- hookRequire(matcher, transformer, options) -

-

hooks require to return transformed code to the node module loader. -Exceptions in the transform result in the original code being used instead.

- -

Parameters

-
    -
  • matcher - : - -

    {Function(filePath)} a function that is called with the absolute path to the file being -require-d. Should return a truthy value when transformations need to be applied to the code, a falsy value otherwise

    - -
    -
  • -
  • transformer - : - -

    {Function(code, filePath)} a function called with the original code and the associated path of the file -from where the code was loaded. Should return the transformed code.

    - -
    -
  • -
  • options - : - -

    {Object} options Optional.

    - -
    -
  • -
      -
    • [Boolean] options.verbose -

      write a line to standard error every time the transformer is called

      -
    • -
    • [Function] options.postLoadHook -

      a function that is called with the name of the file being -required. This is called after the require is processed irrespective of whether it was transformed.

      -
    • -
    -
-
-
-

- hookRunInThisContext(matcher, transformer, opts) -

-

hooks vm.runInThisContext to return transformed code.

- -

Parameters

-
    -
  • matcher - : - -

    {Function(filePath)} a function that is called with the filename passed to vm.createScript -Should return a truthy value when transformations need to be applied to the code, a falsy value otherwise

    - -
    -
  • -
  • transformer - : - -

    {Function(code, filePath)} a function called with the original code and the filename passed to -vm.createScript. Should return the transformed code.

    - -
    -
  • -
  • opts - : - -

    {Object} [opts={}] options

    - -
    -
  • -
      -
    • [Boolean] opts.verbose -

      write a line to standard error every time the transformer is called

      -
    • -
    -
-
-
-

- unhookCreateScript -

-

unhooks vm.createScript, restoring it to its original state.

- -
-
-

- unhookRequire -

-

unhook require to restore it to its original state.

- -
-
-

- unhookRunInThisContext -

-

unhooks vm.runInThisContext, restoring it to its original state.

- -
-
-

- unloadRequireCache(matcher) -

-

unloads the required caches, removing all files that would have matched -the supplied matcher.

- -

Parameters

-
    -
  • Function matcher - : - -

    the match function that accepts a file name and -returns if that file should be unloaded from the cache.

    - -
    -
  • -
-
-
-
-
-
-
- - - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/index.js deleted file mode 100644 index c59df033b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/index.js +++ /dev/null @@ -1,5 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -module.exports = require('./lib/hook'); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/lib/hook.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/lib/hook.js deleted file mode 100644 index ff1119d8e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/lib/hook.js +++ /dev/null @@ -1,183 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var path = require('path'), - vm = require('vm'), - appendTransform = require('append-transform'), - originalCreateScript = vm.createScript, - originalRunInThisContext = vm.runInThisContext; - -function transformFn(matcher, transformer, verbose) { - - return function (code, filename) { - var shouldHook = typeof filename === 'string' && matcher(path.resolve(filename)), - transformed, - changed = false; - - if (shouldHook) { - if (verbose) { - console.error('Module load hook: transform [' + filename + ']'); - } - try { - transformed = transformer(code, filename); - changed = true; - } catch (ex) { - console.error('Transformation error for', filename, '; return original code'); - console.error(ex.message || String(ex)); - if (verbose) { - console.error(ex.stack); - } - transformed = code; - } - } else { - transformed = code; - } - return { code: transformed, changed: changed }; - }; -} -/** - * unloads the required caches, removing all files that would have matched - * the supplied matcher. - * @param {Function} matcher - the match function that accepts a file name and - * returns if that file should be unloaded from the cache. - */ -function unloadRequireCache(matcher) { - /* istanbul ignore else: impossible to test */ - if (matcher && typeof require !== 'undefined' && require && require.cache) { - Object.keys(require.cache).forEach(function (filename) { - if (matcher(filename)) { - delete require.cache[filename]; - } - }); - } -} -/** - * hooks `require` to return transformed code to the node module loader. - * Exceptions in the transform result in the original code being used instead. - * @method hookRequire - * @static - * @param matcher {Function(filePath)} a function that is called with the absolute path to the file being - * `require`-d. Should return a truthy value when transformations need to be applied to the code, a falsy value otherwise - * @param transformer {Function(code, filePath)} a function called with the original code and the associated path of the file - * from where the code was loaded. Should return the transformed code. - * @param options {Object} options Optional. - * @param {Boolean} [options.verbose] write a line to standard error every time the transformer is called - * @param {Function} [options.postLoadHook] a function that is called with the name of the file being - * required. This is called after the require is processed irrespective of whether it was transformed. - * @returns {Function} a reset function that can be called to remove the hook - */ -function hookRequire(matcher, transformer, options) { - options = options || {}; - var extensions, - disable = false, - fn = transformFn(matcher, transformer, options.verbose), - postLoadHook = options.postLoadHook && - typeof options.postLoadHook === 'function' ? options.postLoadHook : null; - - extensions = options.extensions || ['.js']; - - extensions.forEach(function(ext){ - appendTransform(function (code, filename) { - if (disable) { - return code; - } - var ret = fn(code, filename); - if (postLoadHook) { - postLoadHook(filename); - } - return ret.code; - }, ext); - }); - - return function () { - disable = true; - }; -} -/** - * hooks `vm.createScript` to return transformed code out of which a `Script` object will be created. - * Exceptions in the transform result in the original code being used instead. - * @method hookCreateScript - * @static - * @param matcher {Function(filePath)} a function that is called with the filename passed to `vm.createScript` - * Should return a truthy value when transformations need to be applied to the code, a falsy value otherwise - * @param transformer {Function(code, filePath)} a function called with the original code and the filename passed to - * `vm.createScript`. Should return the transformed code. - * @param options {Object} options Optional. - * @param {Boolean} [options.verbose] write a line to standard error every time the transformer is called - */ -function hookCreateScript(matcher, transformer, opts) { - opts = opts || {}; - var fn = transformFn(matcher, transformer, opts.verbose); - vm.createScript = function (code, file) { - var ret = fn(code, file); - return originalCreateScript(ret.code, file); - }; -} -/** - * unhooks vm.createScript, restoring it to its original state. - * @method unhookCreateScript - * @static - */ -function unhookCreateScript() { - vm.createScript = originalCreateScript; -} -/** - * hooks `vm.runInThisContext` to return transformed code. - * @method hookRunInThisContext - * @static - * @param matcher {Function(filePath)} a function that is called with the filename passed to `vm.createScript` - * Should return a truthy value when transformations need to be applied to the code, a falsy value otherwise - * @param transformer {Function(code, filePath)} a function called with the original code and the filename passed to - * `vm.createScript`. Should return the transformed code. - * @param opts {Object} [opts={}] options - * @param {Boolean} [opts.verbose] write a line to standard error every time the transformer is called - */ -function hookRunInThisContext(matcher, transformer, opts) { - opts = opts || {}; - var fn = transformFn(matcher, transformer, opts.verbose); - vm.runInThisContext = function (code, file) { - var ret = fn(code, file); - return originalRunInThisContext(ret.code, file); - }; -} -/** - * unhooks vm.runInThisContext, restoring it to its original state. - * @method unhookRunInThisContext - * @static - */ -function unhookRunInThisContext() { - vm.runInThisContext = originalRunInThisContext; -} -/** - * istanbul-lib-hook provides mechanisms to transform code in the scope of `require`, - * `vm.createScript`, `vm.runInThisContext` etc. - * - * This mechanism is general and relies on a user-supplied `matcher` function that - * determines when transformations should be performed and a user-supplied `transformer` - * function that performs the actual transform. Instrumenting code for coverage is - * one specific example of useful hooking. - * - * Note that both the `matcher` and `transformer` must execute synchronously. - * - * @module Exports - * @example - * var hook = require('istanbul-lib-hook'), - * myMatcher = function (file) { return file.match(/foo/); }, - * myTransformer = function (code, file) { - * return 'console.log("' + file + '");' + code; - * }; - * - * hook.hookRequire(myMatcher, myTransformer); - * var foo = require('foo'); //will now print foo's module path to console - */ -module.exports = { - hookRequire: hookRequire, - hookCreateScript: hookCreateScript, - unhookCreateScript: unhookCreateScript, - hookRunInThisContext : hookRunInThisContext, - unhookRunInThisContext : unhookRunInThisContext, - unloadRequireCache: unloadRequireCache -}; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/package.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/package.json deleted file mode 100644 index ce0b71d88..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-hook/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_args": [ - [ - "istanbul-lib-hook@^1.0.0-alpha", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api" - ] - ], - "_from": "istanbul-lib-hook@>=1.0.0-alpha <2.0.0", - "_id": "istanbul-lib-hook@1.0.0-alpha.4", - "_inCache": true, - "_installable": true, - "_location": "/istanbul-lib-hook", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - }, - "_npmVersion": "3.5.0", - "_phantomChildren": {}, - "_requested": { - "name": "istanbul-lib-hook", - "raw": "istanbul-lib-hook@^1.0.0-alpha", - "rawSpec": "^1.0.0-alpha", - "scope": null, - "spec": ">=1.0.0-alpha <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul-api" - ], - "_resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0-alpha.4.tgz", - "_shasum": "8c5bb9f6fbd8526e0ae6cf639af28266906b938f", - "_shrinkwrap": null, - "_spec": "istanbul-lib-hook@^1.0.0-alpha", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api", - "author": { - "email": "kananthmail-github@yahoo.com", - "name": "Krishnan Anantheswaran" - }, - "bugs": { - "url": "https://github.com/istanbuljs/istanbul-lib-hook/issues" - }, - "dependencies": { - "append-transform": "^0.3.0" - }, - "description": "Hooks for require, vm and script used in istanbul", - "devDependencies": { - "chai": "^3.0.0", - "coveralls": "^2.11.4", - "istanbul": "^0.4.0", - "jshint": "^2.8.0", - "mocha": "^2.3.3" - }, - "directories": {}, - "dist": { - "shasum": "8c5bb9f6fbd8526e0ae6cf639af28266906b938f", - "tarball": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0-alpha.4.tgz" - }, - "gitHead": "7850db731e24e2e21652567869a0aa822d4667de", - "homepage": "https://github.com/istanbuljs/istanbul-lib-hook#readme", - "keywords": [ - "istanbul", - "hook" - ], - "license": "BSD-3-Clause", - "main": "index.js", - "maintainers": [ - { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - } - ], - "name": "istanbul-lib-hook", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/istanbuljs/istanbul-lib-hook.git" - }, - "scripts": { - "fast": "mocha test/", - "posttest": "istanbul check-coverage --statements 95 --branches 80", - "pretest": "jshint index.js lib/ test/", - "test": "istanbul cover -x 'docs/**' --include-all-sources --print=both _mocha -- test/" - }, - "version": "1.0.0-alpha.4" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/.nyc_output/5fa375d5572b5deb0d331d6121bbac6d.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/.nyc_output/5fa375d5572b5deb0d331d6121bbac6d.json deleted file mode 100644 index 4082e5843..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/.nyc_output/5fa375d5572b5deb0d331d6121bbac6d.json +++ /dev/null @@ -1 +0,0 @@ -{"/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/index.js","statementMap":{"0":{"start":{"line":12,"column":4},"end":{"line":12,"column":34}}},"fnMap":{"0":{"name":"createInstrumenter","decl":{"start":{"line":11,"column":9},"end":{"line":11,"column":27}},"loc":{"start":{"line":11,"column":34},"end":{"line":13,"column":1}}}},"branchMap":{},"s":{"0":1},"f":{"0":1},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"31a24e8eaf6dcfede59d03fb18c24dba2abe64db"},"/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/instrumenter.js":{"path":"/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/instrumenter.js","statementMap":{"0":{"start":{"line":12,"column":4},"end":{"line":21,"column":6}},"1":{"start":{"line":41,"column":8},"end":{"line":41,"column":45}},"2":{"start":{"line":42,"column":8},"end":{"line":42,"column":33}},"3":{"start":{"line":43,"column":8},"end":{"line":43,"column":30}},"4":{"start":{"line":51,"column":26},"end":{"line":55,"column":9}},"5":{"start":{"line":52,"column":12},"end":{"line":54,"column":13}},"6":{"start":{"line":53,"column":16},"end":{"line":53,"column":42}},"7":{"start":{"line":56,"column":24},"end":{"line":56,"column":37}},"8":{"start":{"line":57,"column":8},"end":{"line":59,"column":11}},"9":{"start":{"line":58,"column":12},"end":{"line":58,"column":37}},"10":{"start":{"line":60,"column":8},"end":{"line":60,"column":20}},"11":{"start":{"line":76,"column":8},"end":{"line":78,"column":9}},"12":{"start":{"line":77,"column":12},"end":{"line":77,"column":53}},"13":{"start":{"line":79,"column":8},"end":{"line":79,"column":68}},"14":{"start":{"line":80,"column":21},"end":{"line":80,"column":30}},"15":{"start":{"line":81,"column":20},"end":{"line":84,"column":10}},"16":{"start":{"line":85,"column":19},"end":{"line":88,"column":10}},"17":{"start":{"line":89,"column":21},"end":{"line":89,"column":23}},"18":{"start":{"line":90,"column":24},"end":{"line":97,"column":9}},"19":{"start":{"line":94,"column":20},"end":{"line":94,"column":43}},"20":{"start":{"line":98,"column":8},"end":{"line":98,"column":31}},"21":{"start":{"line":100,"column":32},"end":{"line":104,"column":9}},"22":{"start":{"line":105,"column":24},"end":{"line":105,"column":60}},"23":{"start":{"line":106,"column":8},"end":{"line":106,"column":48}},"24":{"start":{"line":107,"column":8},"end":{"line":107,"column":37}},"25":{"start":{"line":108,"column":19},"end":{"line":108,"column":49}},"26":{"start":{"line":109,"column":8},"end":{"line":111,"column":9}},"27":{"start":{"line":110,"column":12},"end":{"line":110,"column":50}},"28":{"start":{"line":112,"column":8},"end":{"line":112,"column":28}},"29":{"start":{"line":127,"column":8},"end":{"line":130,"column":9}},"30":{"start":{"line":128,"column":12},"end":{"line":128,"column":32}},"31":{"start":{"line":129,"column":12},"end":{"line":129,"column":28}},"32":{"start":{"line":131,"column":8},"end":{"line":136,"column":9}},"33":{"start":{"line":132,"column":22},"end":{"line":132,"column":73}},"34":{"start":{"line":133,"column":12},"end":{"line":133,"column":32}},"35":{"start":{"line":135,"column":12},"end":{"line":135,"column":25}},"36":{"start":{"line":143,"column":8},"end":{"line":143,"column":33}},"37":{"start":{"line":150,"column":8},"end":{"line":150,"column":30}}},"fnMap":{"0":{"name":"defaultOpts","decl":{"start":{"line":11,"column":9},"end":{"line":11,"column":20}},"loc":{"start":{"line":11,"column":23},"end":{"line":22,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":40,"column":4},"end":{"line":40,"column":5}},"loc":{"start":{"line":40,"column":36},"end":{"line":44,"column":5}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":50,"column":4},"end":{"line":50,"column":5}},"loc":{"start":{"line":50,"column":24},"end":{"line":61,"column":5}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":51,"column":26},"end":{"line":51,"column":27}},"loc":{"start":{"line":51,"column":50},"end":{"line":55,"column":9}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":57,"column":37},"end":{"line":57,"column":38}},"loc":{"start":{"line":57,"column":50},"end":{"line":59,"column":9}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":75,"column":4},"end":{"line":75,"column":5}},"loc":{"start":{"line":75,"column":51},"end":{"line":113,"column":5}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":93,"column":22},"end":{"line":93,"column":23}},"loc":{"start":{"line":93,"column":38},"end":{"line":95,"column":17}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":126,"column":4},"end":{"line":126,"column":5}},"loc":{"start":{"line":126,"column":57},"end":{"line":137,"column":5}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":142,"column":4},"end":{"line":142,"column":5}},"loc":{"start":{"line":142,"column":23},"end":{"line":144,"column":5}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":149,"column":4},"end":{"line":149,"column":5}},"loc":{"start":{"line":149,"column":20},"end":{"line":151,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":40,"column":16},"end":{"line":40,"column":34}},"type":"default-arg","locations":[{"start":{"line":40,"column":21},"end":{"line":40,"column":34}}]},"1":{"loc":{"start":{"line":52,"column":12},"end":{"line":54,"column":13}},"type":"if","locations":[{"start":{"line":52,"column":12},"end":{"line":54,"column":13}},{"start":{"line":52,"column":12},"end":{"line":54,"column":13}}]},"2":{"loc":{"start":{"line":76,"column":8},"end":{"line":78,"column":9}},"type":"if","locations":[{"start":{"line":76,"column":8},"end":{"line":78,"column":9}},{"start":{"line":76,"column":8},"end":{"line":78,"column":9}}]},"3":{"loc":{"start":{"line":79,"column":19},"end":{"line":79,"column":67}},"type":"binary-expr","locations":[{"start":{"line":79,"column":19},"end":{"line":79,"column":27}},{"start":{"line":79,"column":31},"end":{"line":79,"column":67}}]},"4":{"loc":{"start":{"line":83,"column":24},"end":{"line":83,"column":60}},"type":"cond-expr","locations":[{"start":{"line":83,"column":41},"end":{"line":83,"column":49}},{"start":{"line":83,"column":52},"end":{"line":83,"column":60}}]},"5":{"loc":{"start":{"line":109,"column":8},"end":{"line":111,"column":9}},"type":"if","locations":[{"start":{"line":109,"column":8},"end":{"line":111,"column":9}},{"start":{"line":109,"column":8},"end":{"line":111,"column":9}}]},"6":{"loc":{"start":{"line":109,"column":12},"end":{"line":109,"column":41}},"type":"binary-expr","locations":[{"start":{"line":109,"column":12},"end":{"line":109,"column":14}},{"start":{"line":109,"column":18},"end":{"line":109,"column":41}}]},"7":{"loc":{"start":{"line":127,"column":8},"end":{"line":130,"column":9}},"type":"if","locations":[{"start":{"line":127,"column":8},"end":{"line":130,"column":9}},{"start":{"line":127,"column":8},"end":{"line":130,"column":9}}]},"8":{"loc":{"start":{"line":127,"column":12},"end":{"line":127,"column":55}},"type":"binary-expr","locations":[{"start":{"line":127,"column":12},"end":{"line":127,"column":21}},{"start":{"line":127,"column":25},"end":{"line":127,"column":55}}]}},"s":{"0":165,"1":164,"2":164,"3":164,"4":164,"5":1312,"6":1135,"7":164,"8":164,"9":1312,"10":164,"11":163,"12":1,"13":162,"14":162,"15":162,"16":159,"17":159,"18":159,"19":159,"20":159,"21":159,"22":159,"23":159,"24":159,"25":159,"26":159,"27":1,"28":159,"29":3,"30":2,"31":2,"32":3,"33":3,"34":2,"35":1,"36":159,"37":1},"f":{"0":165,"1":164,"2":164,"3":1312,"4":1312,"5":163,"6":159,"7":3,"8":159,"9":1},"b":{"0":[1],"1":[1135,177],"2":[1,162],"3":[162,3],"4":[2,160],"5":[1,158],"6":[159,1],"7":[2,1],"8":[3,2]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"967ac84d9dba62d5b2e754d09b2ca73234223da8"},"/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/visitor.js":{"path":"/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/visitor.js","statementMap":{"0":{"start":{"line":7,"column":19},"end":{"line":7,"column":67}},"1":{"start":{"line":9,"column":22},"end":{"line":9,"column":57}},"2":{"start":{"line":13,"column":15},"end":{"line":13,"column":30}},"3":{"start":{"line":14,"column":4},"end":{"line":14,"column":26}},"4":{"start":{"line":15,"column":4},"end":{"line":15,"column":80}},"5":{"start":{"line":22,"column":8},"end":{"line":22,"column":46}},"6":{"start":{"line":23,"column":8},"end":{"line":23,"column":24}},"7":{"start":{"line":24,"column":8},"end":{"line":24,"column":31}},"8":{"start":{"line":25,"column":8},"end":{"line":25,"column":54}},"9":{"start":{"line":27,"column":8},"end":{"line":29,"column":9}},"10":{"start":{"line":28,"column":12},"end":{"line":28,"column":52}},"11":{"start":{"line":30,"column":8},"end":{"line":30,"column":27}},"12":{"start":{"line":31,"column":8},"end":{"line":31,"column":37}},"13":{"start":{"line":37,"column":8},"end":{"line":37,"column":49}},"14":{"start":{"line":42,"column":19},"end":{"line":42,"column":23}},"15":{"start":{"line":43,"column":8},"end":{"line":51,"column":9}},"16":{"start":{"line":44,"column":12},"end":{"line":50,"column":15}},"17":{"start":{"line":45,"column":26},"end":{"line":45,"column":91}},"18":{"start":{"line":46,"column":31},"end":{"line":46,"column":50}},"19":{"start":{"line":47,"column":16},"end":{"line":49,"column":17}},"20":{"start":{"line":48,"column":20},"end":{"line":48,"column":37}},"21":{"start":{"line":52,"column":8},"end":{"line":52,"column":20}},"22":{"start":{"line":57,"column":21},"end":{"line":57,"column":25}},"23":{"start":{"line":58,"column":27},"end":{"line":69,"column":9}},"24":{"start":{"line":59,"column":12},"end":{"line":61,"column":13}},"25":{"start":{"line":60,"column":16},"end":{"line":60,"column":23}},"26":{"start":{"line":62,"column":12},"end":{"line":68,"column":15}},"27":{"start":{"line":63,"column":26},"end":{"line":63,"column":91}},"28":{"start":{"line":64,"column":31},"end":{"line":64,"column":53}},"29":{"start":{"line":65,"column":16},"end":{"line":67,"column":17}},"30":{"start":{"line":66,"column":20},"end":{"line":66,"column":54}},"31":{"start":{"line":70,"column":8},"end":{"line":70,"column":41}},"32":{"start":{"line":71,"column":8},"end":{"line":71,"column":42}},"33":{"start":{"line":76,"column":18},"end":{"line":76,"column":27}},"34":{"start":{"line":78,"column":8},"end":{"line":78,"column":40}},"35":{"start":{"line":81,"column":8},"end":{"line":83,"column":9}},"36":{"start":{"line":82,"column":12},"end":{"line":82,"column":19}},"37":{"start":{"line":85,"column":21},"end":{"line":85,"column":36}},"38":{"start":{"line":86,"column":8},"end":{"line":89,"column":9}},"39":{"start":{"line":87,"column":12},"end":{"line":87,"column":32}},"40":{"start":{"line":88,"column":12},"end":{"line":88,"column":19}},"41":{"start":{"line":91,"column":8},"end":{"line":93,"column":9}},"42":{"start":{"line":92,"column":12},"end":{"line":92,"column":32}},"43":{"start":{"line":100,"column":8},"end":{"line":102,"column":9}},"44":{"start":{"line":101,"column":12},"end":{"line":101,"column":35}},"45":{"start":{"line":104,"column":8},"end":{"line":104,"column":34}},"46":{"start":{"line":109,"column":8},"end":{"line":109,"column":42}},"47":{"start":{"line":110,"column":8},"end":{"line":110,"column":35}},"48":{"start":{"line":115,"column":18},"end":{"line":115,"column":30}},"49":{"start":{"line":116,"column":8},"end":{"line":118,"column":9}},"50":{"start":{"line":117,"column":12},"end":{"line":117,"column":24}},"51":{"start":{"line":119,"column":8},"end":{"line":119,"column":23}},"52":{"start":{"line":124,"column":18},"end":{"line":124,"column":28}},"53":{"start":{"line":125,"column":22},"end":{"line":128,"column":26}},"54":{"start":{"line":127,"column":25},"end":{"line":127,"column":77}},"55":{"start":{"line":128,"column":25},"end":{"line":128,"column":26}},"56":{"start":{"line":130,"column":8},"end":{"line":138,"column":10}},"57":{"start":{"line":142,"column":18},"end":{"line":142,"column":28}},"58":{"start":{"line":143,"column":8},"end":{"line":151,"column":9}},"59":{"start":{"line":144,"column":12},"end":{"line":144,"column":69}},"60":{"start":{"line":145,"column":15},"end":{"line":151,"column":9}},"61":{"start":{"line":146,"column":12},"end":{"line":146,"column":64}},"62":{"start":{"line":147,"column":56},"end":{"line":151,"column":9}},"63":{"start":{"line":148,"column":12},"end":{"line":148,"column":75}},"64":{"start":{"line":150,"column":12},"end":{"line":150,"column":85}},"65":{"start":{"line":156,"column":8},"end":{"line":158,"column":9}},"66":{"start":{"line":159,"column":22},"end":{"line":159,"column":58}},"67":{"start":{"line":160,"column":26},"end":{"line":160,"column":57}},"68":{"start":{"line":161,"column":8},"end":{"line":161,"column":44}},"69":{"start":{"line":165,"column":18},"end":{"line":165,"column":28}},"70":{"start":{"line":167,"column":8},"end":{"line":169,"column":9}},"71":{"start":{"line":170,"column":18},"end":{"line":170,"column":27}},"72":{"start":{"line":171,"column":19},"end":{"line":171,"column":23}},"73":{"start":{"line":173,"column":8},"end":{"line":185,"column":9}},"74":{"start":{"line":176,"column":16},"end":{"line":178,"column":17}},"75":{"start":{"line":177,"column":20},"end":{"line":177,"column":36}},"76":{"start":{"line":179,"column":16},"end":{"line":179,"column":22}},"77":{"start":{"line":181,"column":16},"end":{"line":183,"column":17}},"78":{"start":{"line":182,"column":20},"end":{"line":182,"column":36}},"79":{"start":{"line":184,"column":16},"end":{"line":184,"column":22}},"80":{"start":{"line":186,"column":8},"end":{"line":191,"column":9}},"81":{"start":{"line":187,"column":12},"end":{"line":190,"column":14}},"82":{"start":{"line":192,"column":21},"end":{"line":192,"column":70}},"83":{"start":{"line":193,"column":22},"end":{"line":193,"column":74}},"84":{"start":{"line":194,"column":26},"end":{"line":194,"column":57}},"85":{"start":{"line":195,"column":21},"end":{"line":195,"column":37}},"86":{"start":{"line":197,"column":8},"end":{"line":201,"column":9}},"87":{"start":{"line":198,"column":12},"end":{"line":198,"column":69}},"88":{"start":{"line":205,"column":22},"end":{"line":205,"column":61}},"89":{"start":{"line":206,"column":8},"end":{"line":206,"column":53}},"90":{"start":{"line":210,"column":26},"end":{"line":210,"column":83}},"91":{"start":{"line":211,"column":8},"end":{"line":211,"column":44}},"92":{"start":{"line":215,"column":8},"end":{"line":217,"column":9}},"93":{"start":{"line":216,"column":12},"end":{"line":216,"column":19}},"94":{"start":{"line":218,"column":8},"end":{"line":230,"column":9}},"95":{"start":{"line":219,"column":25},"end":{"line":219,"column":43}},"96":{"start":{"line":220,"column":12},"end":{"line":223,"column":13}},"97":{"start":{"line":221,"column":16},"end":{"line":221,"column":70}},"98":{"start":{"line":222,"column":16},"end":{"line":222,"column":72}},"99":{"start":{"line":225,"column":12},"end":{"line":229,"column":15}},"100":{"start":{"line":244,"column":18},"end":{"line":244,"column":55}},"101":{"start":{"line":246,"column":25},"end":{"line":255,"column":5}},"102":{"start":{"line":247,"column":8},"end":{"line":247,"column":27}},"103":{"start":{"line":248,"column":8},"end":{"line":250,"column":9}},"104":{"start":{"line":249,"column":12},"end":{"line":249,"column":19}},"105":{"start":{"line":251,"column":21},"end":{"line":251,"column":25}},"106":{"start":{"line":252,"column":8},"end":{"line":254,"column":11}},"107":{"start":{"line":253,"column":12},"end":{"line":253,"column":37}},"108":{"start":{"line":256,"column":17},"end":{"line":258,"column":5}},"109":{"start":{"line":257,"column":8},"end":{"line":257,"column":32}},"110":{"start":{"line":259,"column":4},"end":{"line":262,"column":6}},"111":{"start":{"line":266,"column":4},"end":{"line":266,"column":38}},"112":{"start":{"line":277,"column":4},"end":{"line":277,"column":37}},"113":{"start":{"line":281,"column":4},"end":{"line":281,"column":50}},"114":{"start":{"line":285,"column":4},"end":{"line":287,"column":5}},"115":{"start":{"line":286,"column":8},"end":{"line":286,"column":55}},"116":{"start":{"line":291,"column":14},"end":{"line":291,"column":24}},"117":{"start":{"line":292,"column":4},"end":{"line":294,"column":5}},"118":{"start":{"line":293,"column":8},"end":{"line":293,"column":47}},"119":{"start":{"line":295,"column":4},"end":{"line":298,"column":5}},"120":{"start":{"line":296,"column":8},"end":{"line":296,"column":56}},"121":{"start":{"line":297,"column":8},"end":{"line":297,"column":46}},"122":{"start":{"line":302,"column":4},"end":{"line":304,"column":6}},"123":{"start":{"line":303,"column":8},"end":{"line":303,"column":45}},"124":{"start":{"line":308,"column":14},"end":{"line":308,"column":23}},"125":{"start":{"line":309,"column":14},"end":{"line":309,"column":24}},"126":{"start":{"line":310,"column":4},"end":{"line":323,"column":5}},"127":{"start":{"line":311,"column":21},"end":{"line":311,"column":31}},"128":{"start":{"line":312,"column":8},"end":{"line":312,"column":29}},"129":{"start":{"line":313,"column":8},"end":{"line":317,"column":11}},"130":{"start":{"line":319,"column":8},"end":{"line":319,"column":26}},"131":{"start":{"line":322,"column":8},"end":{"line":322,"column":34}},"132":{"start":{"line":327,"column":14},"end":{"line":327,"column":23}},"133":{"start":{"line":328,"column":15},"end":{"line":328,"column":30}},"134":{"start":{"line":329,"column":19},"end":{"line":329,"column":32}},"135":{"start":{"line":330,"column":21},"end":{"line":330,"column":36}},"136":{"start":{"line":331,"column":17},"end":{"line":331,"column":48}},"137":{"start":{"line":333,"column":4},"end":{"line":337,"column":5}},"138":{"start":{"line":334,"column":8},"end":{"line":334,"column":53}},"139":{"start":{"line":336,"column":8},"end":{"line":336,"column":72}},"140":{"start":{"line":338,"column":4},"end":{"line":342,"column":5}},"141":{"start":{"line":339,"column":8},"end":{"line":339,"column":52}},"142":{"start":{"line":341,"column":8},"end":{"line":341,"column":71}},"143":{"start":{"line":346,"column":14},"end":{"line":346,"column":57}},"144":{"start":{"line":347,"column":4},"end":{"line":347,"column":45}},"145":{"start":{"line":351,"column":14},"end":{"line":351,"column":24}},"146":{"start":{"line":352,"column":14},"end":{"line":352,"column":62}},"147":{"start":{"line":354,"column":4},"end":{"line":356,"column":5}},"148":{"start":{"line":357,"column":22},"end":{"line":357,"column":63}},"149":{"start":{"line":358,"column":4},"end":{"line":358,"column":67}},"150":{"start":{"line":362,"column":14},"end":{"line":362,"column":23}},"151":{"start":{"line":363,"column":17},"end":{"line":363,"column":63}},"152":{"start":{"line":364,"column":16},"end":{"line":364,"column":42}},"153":{"start":{"line":365,"column":16},"end":{"line":365,"column":41}},"154":{"start":{"line":367,"column":4},"end":{"line":369,"column":5}},"155":{"start":{"line":368,"column":8},"end":{"line":368,"column":65}},"156":{"start":{"line":370,"column":4},"end":{"line":372,"column":5}},"157":{"start":{"line":371,"column":8},"end":{"line":371,"column":64}},"158":{"start":{"line":377,"column":14},"end":{"line":377,"column":24}},"159":{"start":{"line":378,"column":4},"end":{"line":380,"column":5}},"160":{"start":{"line":379,"column":8},"end":{"line":379,"column":15}},"161":{"start":{"line":381,"column":17},"end":{"line":381,"column":19}},"162":{"start":{"line":382,"column":4},"end":{"line":382,"column":39}},"163":{"start":{"line":383,"column":14},"end":{"line":383,"column":62}},"164":{"start":{"line":384,"column":4},"end":{"line":395,"column":5}},"165":{"start":{"line":385,"column":21},"end":{"line":385,"column":30}},"166":{"start":{"line":386,"column":21},"end":{"line":386,"column":44}},"167":{"start":{"line":387,"column":8},"end":{"line":389,"column":9}},"168":{"start":{"line":388,"column":12},"end":{"line":388,"column":21}},"169":{"start":{"line":390,"column":26},"end":{"line":390,"column":67}},"170":{"start":{"line":391,"column":8},"end":{"line":393,"column":9}},"171":{"start":{"line":392,"column":12},"end":{"line":392,"column":21}},"172":{"start":{"line":394,"column":8},"end":{"line":394,"column":82}},"173":{"start":{"line":398,"column":20},"end":{"line":426,"column":1}},"174":{"start":{"line":428,"column":25},"end":{"line":442,"column":2}},"175":{"start":{"line":464,"column":14},"end":{"line":464,"column":19}},"176":{"start":{"line":465,"column":23},"end":{"line":465,"column":81}},"177":{"start":{"line":466,"column":4},"end":{"line":491,"column":6}},"178":{"start":{"line":468,"column":12},"end":{"line":468,"column":51}},"179":{"start":{"line":471,"column":12},"end":{"line":471,"column":36}},"180":{"start":{"line":472,"column":33},"end":{"line":472,"column":56}},"181":{"start":{"line":473,"column":12},"end":{"line":473,"column":50}},"182":{"start":{"line":474,"column":25},"end":{"line":474,"column":91}},"183":{"start":{"line":475,"column":33},"end":{"line":475,"column":60}},"184":{"start":{"line":476,"column":12},"end":{"line":476,"column":43}},"185":{"start":{"line":477,"column":23},"end":{"line":483,"column":14}},"186":{"start":{"line":484,"column":12},"end":{"line":484,"column":31}},"187":{"start":{"line":485,"column":12},"end":{"line":485,"column":39}},"188":{"start":{"line":486,"column":12},"end":{"line":489,"column":14}}},"fnMap":{"0":{"name":"genVar","decl":{"start":{"line":12,"column":9},"end":{"line":12,"column":15}},"loc":{"start":{"line":12,"column":26},"end":{"line":16,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":21,"column":4},"end":{"line":21,"column":5}},"loc":{"start":{"line":21,"column":55},"end":{"line":32,"column":5}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":36,"column":4},"end":{"line":36,"column":5}},"loc":{"start":{"line":36,"column":23},"end":{"line":38,"column":5}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":41,"column":4},"end":{"line":41,"column":5}},"loc":{"start":{"line":41,"column":18},"end":{"line":53,"column":5}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":44,"column":41},"end":{"line":44,"column":42}},"loc":{"start":{"line":44,"column":54},"end":{"line":50,"column":13}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":56,"column":4},"end":{"line":56,"column":5}},"loc":{"start":{"line":56,"column":34},"end":{"line":72,"column":5}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":58,"column":27},"end":{"line":58,"column":28}},"loc":{"start":{"line":58,"column":41},"end":{"line":69,"column":9}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":62,"column":29},"end":{"line":62,"column":30}},"loc":{"start":{"line":62,"column":42},"end":{"line":68,"column":13}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":75,"column":4},"end":{"line":75,"column":5}},"loc":{"start":{"line":75,"column":18},"end":{"line":94,"column":5}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":98,"column":4},"end":{"line":98,"column":5}},"loc":{"start":{"line":98,"column":17},"end":{"line":105,"column":5}}},"10":{"name":"(anonymous_10)","decl":{"start":{"line":108,"column":4},"end":{"line":108,"column":5}},"loc":{"start":{"line":108,"column":31},"end":{"line":111,"column":5}}},"11":{"name":"(anonymous_11)","decl":{"start":{"line":114,"column":4},"end":{"line":114,"column":5}},"loc":{"start":{"line":114,"column":24},"end":{"line":120,"column":5}}},"12":{"name":"(anonymous_12)","decl":{"start":{"line":123,"column":4},"end":{"line":123,"column":5}},"loc":{"start":{"line":123,"column":30},"end":{"line":139,"column":5}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":127,"column":18},"end":{"line":127,"column":19}},"loc":{"start":{"line":127,"column":25},"end":{"line":127,"column":77}}},"14":{"name":"(anonymous_14)","decl":{"start":{"line":128,"column":18},"end":{"line":128,"column":19}},"loc":{"start":{"line":128,"column":25},"end":{"line":128,"column":26}}},"15":{"name":"(anonymous_15)","decl":{"start":{"line":141,"column":4},"end":{"line":141,"column":5}},"loc":{"start":{"line":141,"column":35},"end":{"line":152,"column":5}}},"16":{"name":"(anonymous_16)","decl":{"start":{"line":154,"column":4},"end":{"line":154,"column":5}},"loc":{"start":{"line":154,"column":33},"end":{"line":162,"column":5}}},"17":{"name":"(anonymous_17)","decl":{"start":{"line":164,"column":4},"end":{"line":164,"column":5}},"loc":{"start":{"line":164,"column":32},"end":{"line":202,"column":5}}},"18":{"name":"(anonymous_18)","decl":{"start":{"line":204,"column":4},"end":{"line":204,"column":5}},"loc":{"start":{"line":204,"column":40},"end":{"line":207,"column":5}}},"19":{"name":"(anonymous_19)","decl":{"start":{"line":209,"column":4},"end":{"line":209,"column":5}},"loc":{"start":{"line":209,"column":47},"end":{"line":212,"column":5}}},"20":{"name":"(anonymous_20)","decl":{"start":{"line":214,"column":4},"end":{"line":214,"column":5}},"loc":{"start":{"line":214,"column":52},"end":{"line":231,"column":5}}},"21":{"name":"entries","decl":{"start":{"line":243,"column":9},"end":{"line":243,"column":16}},"loc":{"start":{"line":243,"column":19},"end":{"line":263,"column":1}}},"22":{"name":"(anonymous_22)","decl":{"start":{"line":246,"column":25},"end":{"line":246,"column":26}},"loc":{"start":{"line":246,"column":47},"end":{"line":255,"column":5}}},"23":{"name":"(anonymous_23)","decl":{"start":{"line":252,"column":22},"end":{"line":252,"column":23}},"loc":{"start":{"line":252,"column":35},"end":{"line":254,"column":9}}},"24":{"name":"(anonymous_24)","decl":{"start":{"line":256,"column":17},"end":{"line":256,"column":18}},"loc":{"start":{"line":256,"column":39},"end":{"line":258,"column":5}}},"25":{"name":"coverStatement","decl":{"start":{"line":265,"column":9},"end":{"line":265,"column":23}},"loc":{"start":{"line":265,"column":30},"end":{"line":267,"column":1}}},"26":{"name":"coverFunction","decl":{"start":{"line":276,"column":9},"end":{"line":276,"column":22}},"loc":{"start":{"line":276,"column":29},"end":{"line":278,"column":1}}},"27":{"name":"coverVariableDeclarator","decl":{"start":{"line":280,"column":9},"end":{"line":280,"column":32}},"loc":{"start":{"line":280,"column":39},"end":{"line":282,"column":1}}},"28":{"name":"skipInit","decl":{"start":{"line":284,"column":9},"end":{"line":284,"column":17}},"loc":{"start":{"line":284,"column":24},"end":{"line":288,"column":1}}},"29":{"name":"makeBlock","decl":{"start":{"line":290,"column":9},"end":{"line":290,"column":18}},"loc":{"start":{"line":290,"column":25},"end":{"line":299,"column":1}}},"30":{"name":"blockProp","decl":{"start":{"line":301,"column":9},"end":{"line":301,"column":18}},"loc":{"start":{"line":301,"column":25},"end":{"line":305,"column":1}}},"31":{"name":"(anonymous_31)","decl":{"start":{"line":302,"column":11},"end":{"line":302,"column":12}},"loc":{"start":{"line":302,"column":27},"end":{"line":304,"column":5}}},"32":{"name":"convertArrowExpression","decl":{"start":{"line":307,"column":9},"end":{"line":307,"column":31}},"loc":{"start":{"line":307,"column":38},"end":{"line":324,"column":1}}},"33":{"name":"coverIfBranches","decl":{"start":{"line":326,"column":9},"end":{"line":326,"column":24}},"loc":{"start":{"line":326,"column":31},"end":{"line":343,"column":1}}},"34":{"name":"createSwitchBranch","decl":{"start":{"line":345,"column":9},"end":{"line":345,"column":27}},"loc":{"start":{"line":345,"column":34},"end":{"line":348,"column":1}}},"35":{"name":"coverSwitchCase","decl":{"start":{"line":350,"column":9},"end":{"line":350,"column":24}},"loc":{"start":{"line":350,"column":31},"end":{"line":359,"column":1}}},"36":{"name":"coverTernary","decl":{"start":{"line":361,"column":9},"end":{"line":361,"column":21}},"loc":{"start":{"line":361,"column":28},"end":{"line":373,"column":1}}},"37":{"name":"coverLogicalExpression","decl":{"start":{"line":376,"column":9},"end":{"line":376,"column":31}},"loc":{"start":{"line":376,"column":38},"end":{"line":396,"column":1}}},"38":{"name":"programVisitor","decl":{"start":{"line":463,"column":9},"end":{"line":463,"column":23}},"loc":{"start":{"line":463,"column":133},"end":{"line":492,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":27,"column":8},"end":{"line":29,"column":9}},"type":"if","locations":[{"start":{"line":27,"column":8},"end":{"line":29,"column":9}},{"start":{"line":27,"column":8},"end":{"line":29,"column":9}}]},"1":{"loc":{"start":{"line":37,"column":15},"end":{"line":37,"column":48}},"type":"binary-expr","locations":[{"start":{"line":37,"column":15},"end":{"line":37,"column":30}},{"start":{"line":37,"column":34},"end":{"line":37,"column":48}}]},"2":{"loc":{"start":{"line":43,"column":8},"end":{"line":51,"column":9}},"type":"if","locations":[{"start":{"line":43,"column":8},"end":{"line":51,"column":9}},{"start":{"line":43,"column":8},"end":{"line":51,"column":9}}]},"3":{"loc":{"start":{"line":45,"column":27},"end":{"line":45,"column":83}},"type":"binary-expr","locations":[{"start":{"line":45,"column":27},"end":{"line":45,"column":34}}]},"4":{"loc":{"start":{"line":47,"column":16},"end":{"line":49,"column":17}},"type":"if","locations":[{"start":{"line":47,"column":16},"end":{"line":49,"column":17}},{"start":{"line":47,"column":16},"end":{"line":49,"column":17}}]},"5":{"loc":{"start":{"line":59,"column":12},"end":{"line":61,"column":13}},"type":"if","locations":[{"start":{"line":59,"column":12},"end":{"line":61,"column":13}},{"start":{"line":59,"column":12},"end":{"line":61,"column":13}}]},"6":{"loc":{"start":{"line":63,"column":27},"end":{"line":63,"column":83}},"type":"binary-expr","locations":[{"start":{"line":63,"column":27},"end":{"line":63,"column":34}}]},"7":{"loc":{"start":{"line":65,"column":16},"end":{"line":67,"column":17}},"type":"if","locations":[{"start":{"line":65,"column":16},"end":{"line":67,"column":17}},{"start":{"line":65,"column":16},"end":{"line":67,"column":17}}]},"8":{"loc":{"start":{"line":81,"column":8},"end":{"line":83,"column":9}},"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":83,"column":9}},{"start":{"line":81,"column":8},"end":{"line":83,"column":9}}]},"9":{"loc":{"start":{"line":86,"column":8},"end":{"line":89,"column":9}},"type":"if","locations":[{"start":{"line":86,"column":8},"end":{"line":89,"column":9}},{"start":{"line":86,"column":8},"end":{"line":89,"column":9}}]},"10":{"loc":{"start":{"line":91,"column":8},"end":{"line":93,"column":9}},"type":"if","locations":[{"start":{"line":91,"column":8},"end":{"line":93,"column":9}},{"start":{"line":91,"column":8},"end":{"line":93,"column":9}}]},"11":{"loc":{"start":{"line":100,"column":8},"end":{"line":102,"column":9}},"type":"if","locations":[{"start":{"line":100,"column":8},"end":{"line":102,"column":9}},{"start":{"line":100,"column":8},"end":{"line":102,"column":9}}]},"12":{"loc":{"start":{"line":109,"column":23},"end":{"line":109,"column":41}},"type":"binary-expr","locations":[{"start":{"line":109,"column":23},"end":{"line":109,"column":35}},{"start":{"line":109,"column":39},"end":{"line":109,"column":41}}]},"13":{"loc":{"start":{"line":116,"column":8},"end":{"line":118,"column":9}},"type":"if","locations":[{"start":{"line":116,"column":8},"end":{"line":118,"column":9}},{"start":{"line":116,"column":8},"end":{"line":118,"column":9}}]},"14":{"loc":{"start":{"line":125,"column":22},"end":{"line":128,"column":26}},"type":"cond-expr","locations":[{"start":{"line":127,"column":18},"end":{"line":127,"column":77}},{"start":{"line":128,"column":18},"end":{"line":128,"column":26}}]},"15":{"loc":{"start":{"line":143,"column":8},"end":{"line":151,"column":9}},"type":"if","locations":[{"start":{"line":143,"column":8},"end":{"line":151,"column":9}},{"start":{"line":143,"column":8},"end":{"line":151,"column":9}}]},"16":{"loc":{"start":{"line":145,"column":15},"end":{"line":151,"column":9}},"type":"if","locations":[{"start":{"line":145,"column":15},"end":{"line":151,"column":9}},{"start":{"line":145,"column":15},"end":{"line":151,"column":9}}]},"17":{"loc":{"start":{"line":147,"column":56},"end":{"line":151,"column":9}},"type":"if","locations":[{"start":{"line":147,"column":56},"end":{"line":151,"column":9}},{"start":{"line":147,"column":56},"end":{"line":151,"column":9}}]},"18":{"loc":{"start":{"line":156,"column":8},"end":{"line":158,"column":9}},"type":"if","locations":[{"start":{"line":156,"column":8},"end":{"line":158,"column":9}}]},"19":{"loc":{"start":{"line":156,"column":14},"end":{"line":156,"column":40}},"type":"binary-expr","locations":[{"start":{"line":156,"column":14},"end":{"line":156,"column":23}},{"start":{"line":156,"column":27},"end":{"line":156,"column":40}}]},"20":{"loc":{"start":{"line":167,"column":8},"end":{"line":169,"column":9}},"type":"if","locations":[{"start":{"line":167,"column":8},"end":{"line":169,"column":9}}]},"21":{"loc":{"start":{"line":167,"column":14},"end":{"line":167,"column":40}},"type":"binary-expr","locations":[{"start":{"line":167,"column":14},"end":{"line":167,"column":23}},{"start":{"line":167,"column":27},"end":{"line":167,"column":40}}]},"22":{"loc":{"start":{"line":173,"column":8},"end":{"line":185,"column":9}},"type":"switch","locations":[{"start":{"line":174,"column":12},"end":{"line":179,"column":22}},{"start":{"line":180,"column":12},"end":{"line":184,"column":22}}]},"23":{"loc":{"start":{"line":176,"column":16},"end":{"line":178,"column":17}},"type":"if","locations":[{"start":{"line":176,"column":16},"end":{"line":178,"column":17}}]},"24":{"loc":{"start":{"line":181,"column":16},"end":{"line":183,"column":17}},"type":"if","locations":[{"start":{"line":181,"column":16},"end":{"line":183,"column":17}},{"start":{"line":181,"column":16},"end":{"line":183,"column":17}}]},"25":{"loc":{"start":{"line":186,"column":8},"end":{"line":191,"column":9}},"type":"if","locations":[{"start":{"line":186,"column":8},"end":{"line":191,"column":9}},{"start":{"line":186,"column":8},"end":{"line":191,"column":9}}]},"26":{"loc":{"start":{"line":192,"column":21},"end":{"line":192,"column":70}},"type":"cond-expr","locations":[{"start":{"line":192,"column":36},"end":{"line":192,"column":53}},{"start":{"line":192,"column":56},"end":{"line":192,"column":70}}]},"27":{"loc":{"start":{"line":197,"column":8},"end":{"line":201,"column":9}},"type":"if","locations":[{"start":{"line":197,"column":8},"end":{"line":201,"column":9}}]},"28":{"loc":{"start":{"line":210,"column":62},"end":{"line":210,"column":82}},"type":"binary-expr","locations":[{"start":{"line":210,"column":62},"end":{"line":210,"column":65}},{"start":{"line":210,"column":69},"end":{"line":210,"column":82}}]},"29":{"loc":{"start":{"line":215,"column":8},"end":{"line":217,"column":9}},"type":"if","locations":[{"start":{"line":215,"column":8},"end":{"line":217,"column":9}},{"start":{"line":215,"column":8},"end":{"line":217,"column":9}}]},"30":{"loc":{"start":{"line":218,"column":8},"end":{"line":230,"column":9}},"type":"if","locations":[{"start":{"line":218,"column":8},"end":{"line":230,"column":9}},{"start":{"line":218,"column":8},"end":{"line":230,"column":9}}]},"31":{"loc":{"start":{"line":220,"column":12},"end":{"line":223,"column":13}},"type":"if","locations":[{"start":{"line":220,"column":12},"end":{"line":223,"column":13}},{"start":{"line":220,"column":12},"end":{"line":223,"column":13}}]},"32":{"loc":{"start":{"line":248,"column":8},"end":{"line":250,"column":9}},"type":"if","locations":[{"start":{"line":248,"column":8},"end":{"line":250,"column":9}},{"start":{"line":248,"column":8},"end":{"line":250,"column":9}}]},"33":{"loc":{"start":{"line":285,"column":4},"end":{"line":287,"column":5}},"type":"if","locations":[{"start":{"line":285,"column":4},"end":{"line":287,"column":5}},{"start":{"line":285,"column":4},"end":{"line":287,"column":5}}]},"34":{"loc":{"start":{"line":292,"column":4},"end":{"line":294,"column":5}},"type":"if","locations":[{"start":{"line":292,"column":4},"end":{"line":294,"column":5}},{"start":{"line":292,"column":4},"end":{"line":294,"column":5}}]},"35":{"loc":{"start":{"line":295,"column":4},"end":{"line":298,"column":5}},"type":"if","locations":[{"start":{"line":295,"column":4},"end":{"line":298,"column":5}},{"start":{"line":295,"column":4},"end":{"line":298,"column":5}}]},"36":{"loc":{"start":{"line":310,"column":4},"end":{"line":323,"column":5}},"type":"if","locations":[{"start":{"line":310,"column":4},"end":{"line":323,"column":5}},{"start":{"line":310,"column":4},"end":{"line":323,"column":5}}]},"37":{"loc":{"start":{"line":333,"column":4},"end":{"line":337,"column":5}},"type":"if","locations":[{"start":{"line":333,"column":4},"end":{"line":337,"column":5}},{"start":{"line":333,"column":4},"end":{"line":337,"column":5}}]},"38":{"loc":{"start":{"line":338,"column":4},"end":{"line":342,"column":5}},"type":"if","locations":[{"start":{"line":338,"column":4},"end":{"line":342,"column":5}},{"start":{"line":338,"column":4},"end":{"line":342,"column":5}}]},"39":{"loc":{"start":{"line":354,"column":4},"end":{"line":356,"column":5}},"type":"if","locations":[{"start":{"line":354,"column":4},"end":{"line":356,"column":5}}]},"40":{"loc":{"start":{"line":367,"column":4},"end":{"line":369,"column":5}},"type":"if","locations":[{"start":{"line":367,"column":4},"end":{"line":369,"column":5}},{"start":{"line":367,"column":4},"end":{"line":369,"column":5}}]},"41":{"loc":{"start":{"line":370,"column":4},"end":{"line":372,"column":5}},"type":"if","locations":[{"start":{"line":370,"column":4},"end":{"line":372,"column":5}},{"start":{"line":370,"column":4},"end":{"line":372,"column":5}}]},"42":{"loc":{"start":{"line":378,"column":4},"end":{"line":380,"column":5}},"type":"if","locations":[{"start":{"line":378,"column":4},"end":{"line":380,"column":5}},{"start":{"line":378,"column":4},"end":{"line":380,"column":5}}]},"43":{"loc":{"start":{"line":387,"column":8},"end":{"line":389,"column":9}},"type":"if","locations":[{"start":{"line":387,"column":8},"end":{"line":389,"column":9}},{"start":{"line":387,"column":8},"end":{"line":389,"column":9}}]},"44":{"loc":{"start":{"line":391,"column":8},"end":{"line":393,"column":9}},"type":"if","locations":[{"start":{"line":391,"column":8},"end":{"line":393,"column":9}},{"start":{"line":391,"column":8},"end":{"line":393,"column":9}}]},"45":{"loc":{"start":{"line":463,"column":31},"end":{"line":463,"column":60}},"type":"default-arg","locations":[{"start":{"line":463,"column":48},"end":{"line":463,"column":60}}]},"46":{"loc":{"start":{"line":463,"column":62},"end":{"line":463,"column":131}},"type":"default-arg","locations":[{"start":{"line":463,"column":69},"end":{"line":463,"column":131}}]}},"s":{"0":1,"1":1,"2":159,"3":159,"4":159,"5":159,"6":159,"7":159,"8":159,"9":159,"10":2,"11":159,"12":159,"13":1952,"14":2108,"15":2108,"16":170,"17":39,"18":39,"19":39,"20":35,"21":2108,"22":1952,"23":1952,"24":3904,"25":3607,"26":297,"27":35,"28":35,"29":35,"30":1,"31":1952,"32":1952,"33":1952,"34":1952,"35":1952,"36":26,"37":1926,"38":1926,"39":11,"40":11,"41":1915,"42":12,"43":1952,"44":23,"45":1952,"46":39,"47":39,"48":1958,"49":1958,"50":1903,"51":55,"52":958,"53":958,"54":304,"55":654,"56":958,"57":864,"58":864,"59":208,"60":656,"61":548,"62":108,"63":108,"64":0,"65":644,"66":629,"67":629,"68":629,"69":25,"70":25,"71":25,"72":25,"73":25,"74":11,"75":11,"76":11,"77":5,"78":2,"79":5,"80":25,"81":12,"82":25,"83":25,"84":25,"85":25,"86":25,"87":25,"88":304,"89":304,"90":235,"91":235,"92":45,"93":0,"94":45,"95":18,"96":18,"97":16,"98":16,"99":27,"100":27,"101":27,"102":1952,"103":1952,"104":913,"105":1039,"106":1039,"107":1144,"108":27,"109":1952,"110":27,"111":548,"112":25,"113":96,"114":17,"115":12,"116":251,"117":251,"118":44,"119":251,"120":131,"121":131,"122":8,"123":251,"124":8,"125":8,"126":8,"127":6,"128":6,"129":6,"130":6,"131":6,"132":109,"133":109,"134":109,"135":109,"136":109,"137":109,"138":5,"139":104,"140":109,"141":5,"142":104,"143":17,"144":17,"145":43,"146":43,"147":43,"148":43,"149":43,"150":14,"151":14,"152":14,"153":14,"154":14,"155":13,"156":14,"157":14,"158":16,"159":16,"160":3,"161":13,"162":13,"163":13,"164":13,"165":27,"166":27,"167":27,"168":1,"169":26,"170":26,"171":0,"172":26,"173":1,"174":1,"175":159,"176":159,"177":159,"178":159,"179":159,"180":159,"181":159,"182":159,"183":159,"184":159,"185":159,"186":159,"187":159,"188":159},"f":{"0":159,"1":159,"2":1952,"3":2108,"4":39,"5":1952,"6":3904,"7":35,"8":1952,"9":1952,"10":39,"11":1958,"12":958,"13":304,"14":654,"15":864,"16":644,"17":25,"18":304,"19":235,"20":45,"21":27,"22":1952,"23":1144,"24":1952,"25":548,"26":25,"27":96,"28":17,"29":251,"30":8,"31":251,"32":8,"33":109,"34":17,"35":43,"36":14,"37":16,"38":159},"b":{"0":[2,157],"1":[1952,1903],"2":[170,1938],"3":[39],"4":[35,4],"5":[3607,297],"6":[35],"7":[1,34],"8":[26,1926],"9":[11,1915],"10":[12,1903],"11":[23,1929],"12":[39,39],"13":[1903,55],"14":[304,654],"15":[208,656],"16":[548,108],"17":[108,0],"18":[629],"19":[644,629],"20":[25],"21":[25,25],"22":[11,5],"23":[11],"24":[2,3],"25":[12,13],"26":[13,12],"27":[25],"28":[235,27],"29":[0,45],"30":[18,27],"31":[16,2],"32":[913,1039],"33":[12,5],"34":[44,207],"35":[131,120],"36":[6,2],"37":[5,104],"38":[5,104],"39":[43],"40":[13,1],"41":[14,0],"42":[3,13],"43":[1,26],"44":[0,26],"45":[0],"46":[0]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"3d55aec804b774ba7dd73043efbc5fd7216a5568"},"/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/source-coverage.js":{"path":"/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/source-coverage.js","statementMap":{"0":{"start":{"line":4,"column":4},"end":{"line":13,"column":6}},"1":{"start":{"line":27,"column":8},"end":{"line":27,"column":25}},"2":{"start":{"line":28,"column":8},"end":{"line":34,"column":10}},"3":{"start":{"line":38,"column":16},"end":{"line":38,"column":32}},"4":{"start":{"line":39,"column":8},"end":{"line":39,"column":55}},"5":{"start":{"line":40,"column":8},"end":{"line":40,"column":27}},"6":{"start":{"line":41,"column":8},"end":{"line":41,"column":30}},"7":{"start":{"line":42,"column":8},"end":{"line":42,"column":17}},"8":{"start":{"line":46,"column":16},"end":{"line":46,"column":32}},"9":{"start":{"line":47,"column":8},"end":{"line":47,"column":47}},"10":{"start":{"line":48,"column":8},"end":{"line":52,"column":10}},"11":{"start":{"line":53,"column":8},"end":{"line":53,"column":27}},"12":{"start":{"line":54,"column":8},"end":{"line":54,"column":30}},"13":{"start":{"line":55,"column":8},"end":{"line":55,"column":17}},"14":{"start":{"line":59,"column":16},"end":{"line":59,"column":32}},"15":{"start":{"line":60,"column":8},"end":{"line":60,"column":28}},"16":{"start":{"line":61,"column":8},"end":{"line":65,"column":10}},"17":{"start":{"line":66,"column":8},"end":{"line":66,"column":30}},"18":{"start":{"line":67,"column":8},"end":{"line":67,"column":17}},"19":{"start":{"line":71,"column":20},"end":{"line":71,"column":45}},"20":{"start":{"line":72,"column":21},"end":{"line":72,"column":38}},"21":{"start":{"line":75,"column":8},"end":{"line":77,"column":9}},"22":{"start":{"line":78,"column":8},"end":{"line":78,"column":54}},"23":{"start":{"line":79,"column":8},"end":{"line":79,"column":23}},"24":{"start":{"line":80,"column":8},"end":{"line":80,"column":33}},"25":{"start":{"line":89,"column":8},"end":{"line":89,"column":45}},"26":{"start":{"line":94,"column":18},"end":{"line":94,"column":37}},"27":{"start":{"line":95,"column":23},"end":{"line":95,"column":34}},"28":{"start":{"line":96,"column":8},"end":{"line":101,"column":11}},"29":{"start":{"line":97,"column":12},"end":{"line":100,"column":13}},"30":{"start":{"line":98,"column":16},"end":{"line":98,"column":30}},"31":{"start":{"line":99,"column":16},"end":{"line":99,"column":35}}},"fnMap":{"0":{"name":"cloneLocation","decl":{"start":{"line":3,"column":9},"end":{"line":3,"column":22}},"loc":{"start":{"line":3,"column":28},"end":{"line":14,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":26,"column":4},"end":{"line":26,"column":5}},"loc":{"start":{"line":26,"column":27},"end":{"line":35,"column":5}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":37,"column":4},"end":{"line":37,"column":5}},"loc":{"start":{"line":37,"column":22},"end":{"line":43,"column":5}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":45,"column":4},"end":{"line":45,"column":5}},"loc":{"start":{"line":45,"column":33},"end":{"line":56,"column":5}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":58,"column":4},"end":{"line":58,"column":5}},"loc":{"start":{"line":58,"column":25},"end":{"line":68,"column":5}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":70,"column":4},"end":{"line":70,"column":5}},"loc":{"start":{"line":70,"column":34},"end":{"line":81,"column":5}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":88,"column":4},"end":{"line":88,"column":5}},"loc":{"start":{"line":88,"column":30},"end":{"line":90,"column":5}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":92,"column":4},"end":{"line":92,"column":5}},"loc":{"start":{"line":92,"column":13},"end":{"line":102,"column":5}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":96,"column":33},"end":{"line":96,"column":34}},"loc":{"start":{"line":96,"column":46},"end":{"line":101,"column":9}}}},"branchMap":{"0":{"loc":{"start":{"line":6,"column":18},"end":{"line":6,"column":39}},"type":"binary-expr","locations":[{"start":{"line":6,"column":18},"end":{"line":6,"column":21}},{"start":{"line":6,"column":25},"end":{"line":6,"column":39}}]},"1":{"loc":{"start":{"line":7,"column":20},"end":{"line":7,"column":43}},"type":"binary-expr","locations":[{"start":{"line":7,"column":20},"end":{"line":7,"column":23}},{"start":{"line":7,"column":27},"end":{"line":7,"column":43}}]},"2":{"loc":{"start":{"line":10,"column":18},"end":{"line":10,"column":37}},"type":"binary-expr","locations":[{"start":{"line":10,"column":18},"end":{"line":10,"column":21}},{"start":{"line":10,"column":25},"end":{"line":10,"column":37}}]},"3":{"loc":{"start":{"line":11,"column":20},"end":{"line":11,"column":41}},"type":"binary-expr","locations":[{"start":{"line":11,"column":20},"end":{"line":11,"column":23}},{"start":{"line":11,"column":27},"end":{"line":11,"column":41}}]},"4":{"loc":{"start":{"line":47,"column":15},"end":{"line":47,"column":46}},"type":"binary-expr","locations":[{"start":{"line":47,"column":15},"end":{"line":47,"column":19}},{"start":{"line":47,"column":23},"end":{"line":47,"column":46}}]},"5":{"loc":{"start":{"line":75,"column":8},"end":{"line":77,"column":9}},"type":"if","locations":[{"start":{"line":75,"column":8},"end":{"line":77,"column":9}}]},"6":{"loc":{"start":{"line":97,"column":12},"end":{"line":100,"column":13}},"type":"if","locations":[{"start":{"line":97,"column":12},"end":{"line":100,"column":13}},{"start":{"line":97,"column":12},"end":{"line":100,"column":13}}]}},"s":{"0":1136,"1":159,"2":159,"3":629,"4":629,"5":629,"6":629,"7":629,"8":25,"9":25,"10":25,"11":25,"12":25,"13":25,"14":153,"15":153,"16":153,"17":153,"18":153,"19":304,"20":304,"21":304,"22":304,"23":304,"24":304,"25":2,"26":159,"27":159,"28":159,"29":153,"30":1,"31":1},"f":{"0":1136,"1":159,"2":629,"3":25,"4":153,"5":304,"6":2,"7":159,"8":153},"b":{"0":[1136,1136],"1":[1136,1136],"2":[1136,1136],"3":[1136,1136],"4":[25,12],"5":[304],"6":[1,152]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"f3842695789ac2b06bc6414d269efc4da2592a39"},"/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/constants.js":{"path":"/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/constants.js","statementMap":{"0":{"start":{"line":6,"column":19},"end":{"line":6,"column":25}},"1":{"start":{"line":8,"column":25},"end":{"line":8,"column":42}},"2":{"start":{"line":10,"column":27},"end":{"line":10,"column":92}}},"fnMap":{},"branchMap":{},"s":{"0":1,"1":1,"2":1},"f":{},"b":{},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"8c9d80dbb6702251b3eeb421486fcad04db073a4"},"/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/read-coverage.js":{"path":"/Users/benjamincoe/bcoe/istanbul-lib-instrument/src/read-coverage.js","statementMap":{"0":{"start":{"line":7,"column":4},"end":{"line":9,"column":5}},"1":{"start":{"line":8,"column":8},"end":{"line":8,"column":49}},"2":{"start":{"line":12,"column":16},"end":{"line":18,"column":6}},"3":{"start":{"line":21,"column":4},"end":{"line":36,"column":7}},"4":{"start":{"line":23,"column":29},"end":{"line":23,"column":33}},"5":{"start":{"line":24,"column":12},"end":{"line":34,"column":13}},"6":{"start":{"line":28,"column":35},"end":{"line":28,"column":63}},"7":{"start":{"line":29,"column":16},"end":{"line":31,"column":17}},"8":{"start":{"line":30,"column":20},"end":{"line":30,"column":27}},"9":{"start":{"line":32,"column":16},"end":{"line":32,"column":58}},"10":{"start":{"line":33,"column":16},"end":{"line":33,"column":28}},"11":{"start":{"line":38,"column":4},"end":{"line":40,"column":5}},"12":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"13":{"start":{"line":42,"column":19},"end":{"line":42,"column":21}},"14":{"start":{"line":44,"column":4},"end":{"line":55,"column":5}},"15":{"start":{"line":45,"column":24},"end":{"line":45,"column":51}},"16":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"17":{"start":{"line":47,"column":12},"end":{"line":47,"column":24}},"18":{"start":{"line":49,"column":26},"end":{"line":49,"column":50}},"19":{"start":{"line":50,"column":22},"end":{"line":50,"column":42}},"20":{"start":{"line":51,"column":8},"end":{"line":53,"column":9}},"21":{"start":{"line":52,"column":12},"end":{"line":52,"column":24}},"22":{"start":{"line":54,"column":8},"end":{"line":54,"column":34}},"23":{"start":{"line":57,"column":4},"end":{"line":57,"column":42}},"24":{"start":{"line":59,"column":4},"end":{"line":59,"column":18}}},"fnMap":{"0":{"name":"readInitialCoverage","decl":{"start":{"line":6,"column":24},"end":{"line":6,"column":43}},"loc":{"start":{"line":6,"column":51},"end":{"line":60,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":22,"column":24},"end":{"line":22,"column":25}},"loc":{"start":{"line":22,"column":40},"end":{"line":35,"column":9}}}},"branchMap":{"0":{"loc":{"start":{"line":7,"column":4},"end":{"line":9,"column":5}},"type":"if","locations":[{"start":{"line":7,"column":4},"end":{"line":9,"column":5}},{"start":{"line":7,"column":4},"end":{"line":9,"column":5}}]},"1":{"loc":{"start":{"line":24,"column":12},"end":{"line":34,"column":13}},"type":"if","locations":[{"start":{"line":24,"column":12},"end":{"line":34,"column":13}},{"start":{"line":24,"column":12},"end":{"line":34,"column":13}}]},"2":{"loc":{"start":{"line":24,"column":16},"end":{"line":26,"column":43}},"type":"binary-expr","locations":[{"start":{"line":24,"column":16},"end":{"line":24,"column":30}},{"start":{"line":25,"column":16},"end":{"line":25,"column":40}},{"start":{"line":26,"column":16},"end":{"line":26,"column":43}}]},"3":{"loc":{"start":{"line":29,"column":16},"end":{"line":31,"column":17}},"type":"if","locations":[{"start":{"line":29,"column":16},"end":{"line":31,"column":17}},{"start":{"line":29,"column":16},"end":{"line":31,"column":17}}]},"4":{"loc":{"start":{"line":29,"column":20},"end":{"line":29,"column":77}},"type":"binary-expr","locations":[{"start":{"line":29,"column":20},"end":{"line":29,"column":41}},{"start":{"line":29,"column":45},"end":{"line":29,"column":77}}]},"5":{"loc":{"start":{"line":38,"column":4},"end":{"line":40,"column":5}},"type":"if","locations":[{"start":{"line":38,"column":4},"end":{"line":40,"column":5}},{"start":{"line":38,"column":4},"end":{"line":40,"column":5}}]},"6":{"loc":{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},"type":"if","locations":[{"start":{"line":46,"column":8},"end":{"line":48,"column":9}},{"start":{"line":46,"column":8},"end":{"line":48,"column":9}}]},"7":{"loc":{"start":{"line":51,"column":8},"end":{"line":53,"column":9}},"type":"if","locations":[{"start":{"line":51,"column":8},"end":{"line":53,"column":9}},{"start":{"line":51,"column":8},"end":{"line":53,"column":9}}]}},"s":{"0":152,"1":0,"2":152,"3":152,"4":10069,"5":10069,"6":152,"7":152,"8":0,"9":152,"10":152,"11":152,"12":0,"13":152,"14":152,"15":608,"16":608,"17":0,"18":608,"19":608,"20":608,"21":0,"22":608,"23":152,"24":152},"f":{"0":152,"1":10069},"b":{"0":[0,152],"1":[152,9917],"2":[10069,10069,8481],"3":[0,152],"4":[152,152],"5":[0,152],"6":[0,608],"7":[0,608]},"_coverageSchema":"332fd63041d2c1bcb487cc26dd0d5f7d97098a6c","hash":"d6306ed33aa70d982cebe56e7ec01111d37f22d5"}} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/.nyc_output/9d2485ffab3df61c8f8edab7e5285a3f.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/.nyc_output/9d2485ffab3df61c8f8edab7e5285a3f.json deleted file mode 100644 index 9e26dfeeb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/.nyc_output/9d2485ffab3df61c8f8edab7e5285a3f.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/CHANGELOG.md deleted file mode 100644 index 92cce8615..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/CHANGELOG.md +++ /dev/null @@ -1,81 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - - -# [1.3.0](https://github.com/istanbuljs/istanbul-lib-instrument/compare/v1.2.0...v1.3.0) (2016-11-10) - - -### Features - -* allow an input source-map to be passed to instrumentSync() ([#23](https://github.com/istanbuljs/istanbul-lib-instrument/issues/23)) ([b08e4f5](https://github.com/istanbuljs/istanbul-lib-instrument/commit/b08e4f5)) - - - - -# [1.2.0](https://github.com/istanbuljs/istanbul-lib-instrument/compare/v1.1.4...v1.2.0) (2016-10-25) - - -### Features - -* implement function to extract empty coverage data from an instrumented file ([#28](https://github.com/istanbuljs/istanbul-lib-instrument/issues/28)) ([06d0ef6](https://github.com/istanbuljs/istanbul-lib-instrument/commit/06d0ef6)) - - - - -## [1.1.4](https://github.com/istanbuljs/istanbul-lib-instrument/compare/v1.1.3...v1.1.4) (2016-10-17) - - -### Bug Fixes - -* hoist coverage variable to very top of file ([#26](https://github.com/istanbuljs/istanbul-lib-instrument/issues/26)) ([0225e8c](https://github.com/istanbuljs/istanbul-lib-instrument/commit/0225e8c)) - - - - -## [1.1.3](https://github.com/istanbuljs/istanbul-lib-instrument/compare/v1.1.2...v1.1.3) (2016-09-13) - - -### Performance Improvements - -* simplify coverage variable naming https://github.com/istanbuljs/istanbul-lib-instrument/pull/24 ([7252aae](https://github.com/istanbuljs/istanbul-lib-instrument/commit/7252aae)) - - - - -## [1.1.2](https://github.com/istanbuljs/istanbul-lib-instrument/compare/v1.1.1...v1.1.2) (2016-09-08) - - -### Performance Improvements - -* use zero-based numeric indices for much faster instrumented code ([#22](https://github.com/istanbuljs/istanbul-lib-instrument/issues/22)) ([5b401f5](https://github.com/istanbuljs/istanbul-lib-instrument/commit/5b401f5)) - - - - -## [1.1.1](https://github.com/istanbuljs/istanbul-lib-instrument/compare/v1.1.0...v1.1.1) (2016-08-30) - - -### Bug Fixes - -* upgrade istanbul-lib-coverage ([eb9b1f6](https://github.com/istanbuljs/istanbul-lib-instrument/commit/eb9b1f6)) - - - - -# [1.1.0](https://github.com/istanbuljs/istanbul-lib-instrument/compare/v1.1.0-alpha.4...v1.1.0) (2016-08-11) - - -### Bug Fixes - -* guard against invalid loc ([#16](https://github.com/istanbuljs/istanbul-lib-instrument/issues/16)) ([23ebfc3](https://github.com/istanbuljs/istanbul-lib-instrument/commit/23ebfc3)) - - - - -# [1.1.0-alpha.4](https://github.com/istanbuljs/istanbul-lib-instrument/compare/v1.0.0-alpha.5...v1.1.0-alpha.4) (2016-07-20) - - -### Bug Fixes - -* require more performant babel-generator ([#15](https://github.com/istanbuljs/istanbul-lib-instrument/issues/15)) ([21b2563](https://github.com/istanbuljs/istanbul-lib-instrument/commit/21b2563)) diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/LICENSE b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/LICENSE deleted file mode 100644 index d55d2916e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/README.md b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/README.md deleted file mode 100644 index c98dc25cb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/README.md +++ /dev/null @@ -1,24 +0,0 @@ -istanbul-lib-instrument ------------------------ - -[![Build Status](https://travis-ci.org/istanbuljs/istanbul-lib-instrument.svg?branch=master)](https://travis-ci.org/istanbuljs/istanbul-lib-instrument) - -Istanbul instrumenter library. - -Version 1.1.x now implements instrumentation using `Babel`. The implementation is inspired -by prior art by @dtinth as demonstrated in the `__coverage__` babel plugin. - -It provides 2 "modes" of instrumentation. - -* The old API that is mostly unchanged (except for incompatibilities noted) and - performs the instrumentation using babel as a library. - -* A `programVisitor` function for the Babel AST that can be used by a Babel plugin - to emit instrumentation for ES6 code directly without any source map - processing. This is the preferred path for babel users. The Babel plugin is - called `babel-plugin-istanbul`. - -Incompatibilities and changes to instrumentation behavior can be found in -[v0-changes.md](v0-changes.md). - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/constants.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/constants.js deleted file mode 100644 index 9ab743249..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/constants.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.MAGIC_VALUE = exports.MAGIC_KEY = exports.SHA = undefined; - -var _semver = require('semver'); - -var _package = require('../package.json'); - -var _crypto = require('crypto'); - -// function to use for creating hashes -var SHA = exports.SHA = 'sha1'; -// name of coverage data magic key -var MAGIC_KEY = exports.MAGIC_KEY = '_coverageSchema'; -// name of coverage data magic value -var MAGIC_VALUE = exports.MAGIC_VALUE = (0, _crypto.createHash)(SHA).update(_package.name + '@' + (0, _semver.major)(_package.version)).digest('hex'); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/index.js deleted file mode 100644 index 4a5a979f0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/index.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.readInitialCoverage = exports.programVisitor = exports.createInstrumenter = undefined; - -var _instrumenter = require('./instrumenter'); - -var _instrumenter2 = _interopRequireDefault(_instrumenter); - -var _visitor = require('./visitor'); - -var _visitor2 = _interopRequireDefault(_visitor); - -var _readCoverage = require('./read-coverage'); - -var _readCoverage2 = _interopRequireDefault(_readCoverage); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -/** - * createInstrumenter creates a new instrumenter with the - * supplied options. - * @param {Object} opts - instrumenter options. See the documentation - * for the Instrumenter class. - */ -function createInstrumenter(opts) { - return new _instrumenter2.default(opts); -} - -exports.createInstrumenter = createInstrumenter; -exports.programVisitor = _visitor2.default; -exports.readInitialCoverage = _readCoverage2.default; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/instrumenter.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/instrumenter.js deleted file mode 100644 index 5c4e197c9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/instrumenter.js +++ /dev/null @@ -1,206 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); /* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - - -var _babylon = require('babylon'); - -var babylon = _interopRequireWildcard(_babylon); - -var _babelTypes = require('babel-types'); - -var t = _interopRequireWildcard(_babelTypes); - -var _babelTraverse = require('babel-traverse'); - -var _babelTraverse2 = _interopRequireDefault(_babelTraverse); - -var _babelGenerator = require('babel-generator'); - -var _babelGenerator2 = _interopRequireDefault(_babelGenerator); - -var _visitor = require('./visitor'); - -var _visitor2 = _interopRequireDefault(_visitor); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -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; } } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function defaultOpts() { - return { - coverageVariable: "__coverage__", - preserveComments: false, - compact: true, - esModules: false, - autoWrap: false, - produceSourceMap: false, - sourceMapUrlCallback: null, - debug: false - }; -} -/** - * Instrumenter is the public API for the instrument library. - * It is typically used for ES5 code. For ES6 code that you - * are already running under `babel` use the coverage plugin - * instead. - * @param {Object} opts optional. - * @param {string} [opts.coverageVariable=__coverage__] name of global coverage variable. - * @param {boolean} [opts.preserveComments=false] preserve comments in output - * @param {boolean} [opts.compact=true] generate compact code. - * @param {boolean} [opts.esModules=false] set to true to instrument ES6 modules. - * @param {boolean} [opts.autoWrap=false] set to true to allow `return` statements outside of functions. - * @param {boolean} [opts.produceSourceMap=false] set to true to produce a source map for the instrumented code. - * @param {Function} [opts.sourceMapUrlCallback=null] a callback function that is called when a source map URL - * is found in the original code. This function is called with the source file name and the source map URL. - * @param {boolean} [opts.debug=false] - turn debugging on - */ - -var Instrumenter = function () { - function Instrumenter() { - var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultOpts(); - - _classCallCheck(this, Instrumenter); - - this.opts = this.normalizeOpts(opts); - this.fileCoverage = null; - this.sourceMap = null; - } - /** - * normalize options passed in and assign defaults. - * @param opts - * @private - */ - - - _createClass(Instrumenter, [{ - key: 'normalizeOpts', - value: function normalizeOpts(opts) { - var normalize = function normalize(name, defaultValue) { - if (!opts.hasOwnProperty(name)) { - opts[name] = defaultValue; - } - }; - var defOpts = defaultOpts(); - Object.keys(defOpts).forEach(function (k) { - normalize(k, defOpts[k]); - }); - return opts; - } - /** - * instrument the supplied code and track coverage against the supplied - * filename. It throws if invalid code is passed to it. ES5 and ES6 syntax - * is supported. To instrument ES6 modules, make sure that you set the - * `esModules` property to `true` when creating the instrumenter. - * - * @param {string} code - the code to instrument - * @param {string} filename - the filename against which to track coverage. - * @param {object} [inputSourceMap] - the source map that maps the not instrumented code back to it's original form. - * Is assigned to the coverage object and therefore, is available in the json output and can be used to remap the - * coverage to the untranspiled source. - * @returns {string} the instrumented code. - */ - - }, { - key: 'instrumentSync', - value: function instrumentSync(code, filename, inputSourceMap) { - if (typeof code !== 'string') { - throw new Error('Code must be a string'); - } - filename = filename || String(new Date().getTime()) + '.js'; - var opts = this.opts; - var ast = babylon.parse(code, { - allowReturnOutsideFunction: opts.autoWrap, - sourceType: opts.esModules ? "module" : "script" - }); - var ee = (0, _visitor2.default)(t, filename, { - coverageVariable: opts.coverageVariable, - inputSourceMap: inputSourceMap - }); - var output = {}; - var visitor = { - Program: { - enter: ee.enter, - exit: function exit(path) { - output = ee.exit(path); - } - } - }; - (0, _babelTraverse2.default)(ast, visitor); - - var generateOptions = { - compact: opts.compact, - sourceMaps: opts.produceSourceMap, - sourceFileName: filename - }; - var codeMap = (0, _babelGenerator2.default)(ast, generateOptions, code); - this.fileCoverage = output.fileCoverage; - this.sourceMap = codeMap.map; - var cb = this.opts.sourceMapUrlCallback; - if (cb && output.sourceMappingURL) { - cb(filename, output.sourceMappingURL); - } - return codeMap.code; - } - /** - * callback-style instrument method that calls back with an error - * as opposed to throwing one. Note that in the current implementation, - * the callback will be called in the same process tick and is not asynchronous. - * - * @param {string} code - the code to instrument - * @param {string} filename - the filename against which to track coverage. - * @param {Function} callback - the callback - * @param {Object} inputSourceMap - the source map that maps the not instrumented code back to it's original form. - * Is assigned to the coverage object and therefore, is available in the json output and can be used to remap the - * coverage to the untranspiled source. - */ - - }, { - key: 'instrument', - value: function instrument(code, filename, callback, inputSourceMap) { - if (!callback && typeof filename === 'function') { - callback = filename; - filename = null; - } - try { - var out = this.instrumentSync(code, filename, inputSourceMap); - callback(null, out); - } catch (ex) { - callback(ex); - } - } - /** - * returns the file coverage object for the last file instrumented. - * @returns {Object} the file coverage object. - */ - - }, { - key: 'lastFileCoverage', - value: function lastFileCoverage() { - return this.fileCoverage; - } - /** - * returns the source map produced for the last file instrumented. - * @returns {null|Object} the source map object. - */ - - }, { - key: 'lastSourceMap', - value: function lastSourceMap() { - return this.sourceMap; - } - }]); - - return Instrumenter; -}(); - -exports.default = Instrumenter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/read-coverage.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/read-coverage.js deleted file mode 100644 index 73e74291a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/read-coverage.js +++ /dev/null @@ -1,78 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = readInitialCoverage; - -var _constants = require('./constants'); - -var _babylon = require('babylon'); - -var _babelTraverse = require('babel-traverse'); - -var _babelTraverse2 = _interopRequireDefault(_babelTraverse); - -var _babelTypes = require('babel-types'); - -var t = _interopRequireWildcard(_babelTypes); - -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; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function readInitialCoverage(code) { - if (typeof code !== 'string') { - throw new Error('Code must be a string'); - } - - // Parse as leniently as possible - var ast = (0, _babylon.parse)(code, { - allowImportExportEverywhere: true, - allowReturnOutsideFunction: true, - allowSuperOutsideMethod: true, - sourceType: "script", // I think ? - plugins: ["*"] - }); - - var covScope = void 0; - (0, _babelTraverse2.default)(ast, { - ObjectProperty: function ObjectProperty(path) { - var node = path.node; - - if (!node.computed && t.isIdentifier(node.key) && node.key.name === _constants.MAGIC_KEY) { - var magicValue = path.get('value').evaluate(); - if (!magicValue.confident || magicValue.value !== _constants.MAGIC_VALUE) { - return; - } - covScope = path.scope.getFunctionParent(); - path.stop(); - } - } - }); - - if (!covScope) { - return null; - } - - var result = {}; - - var _arr = ['path', 'hash', 'gcv', 'coverageData']; - for (var _i = 0; _i < _arr.length; _i++) { - var key = _arr[_i]; - var binding = covScope.getOwnBinding(key); - if (!binding) { - return null; - } - var valuePath = binding.path.get('init'); - var value = valuePath.evaluate(); - if (!value.confident) { - return null; - } - result[key] = value.value; - } - - delete result.coverageData[_constants.MAGIC_KEY]; - - return result; -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/source-coverage.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/source-coverage.js deleted file mode 100644 index f2fba09fc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/source-coverage.js +++ /dev/null @@ -1,139 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.SourceCoverage = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _istanbulLibCoverage = require('istanbul-lib-coverage'); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -function cloneLocation(loc) { - return { - start: { - line: loc && loc.start.line, - column: loc && loc.start.column - }, - end: { - line: loc && loc.end.line, - column: loc && loc.end.column - } - }; -} -/** - * SourceCoverage provides mutation methods to manipulate the structure of - * a file coverage object. Used by the instrumenter to create a full coverage - * object for a file incrementally. - * - * @private - * @param pathOrObj {String|Object} - see the argument for {@link FileCoverage} - * @extends FileCoverage - * @constructor - */ - -var SourceCoverage = function (_classes$FileCoverage) { - _inherits(SourceCoverage, _classes$FileCoverage); - - function SourceCoverage(pathOrObj) { - _classCallCheck(this, SourceCoverage); - - var _this = _possibleConstructorReturn(this, (SourceCoverage.__proto__ || Object.getPrototypeOf(SourceCoverage)).call(this, pathOrObj)); - - _this.meta = { - last: { - s: 0, - f: 0, - b: 0 - } - }; - return _this; - } - - _createClass(SourceCoverage, [{ - key: 'newStatement', - value: function newStatement(loc) { - var s = this.meta.last.s; - this.data.statementMap[s] = cloneLocation(loc); - this.data.s[s] = 0; - this.meta.last.s += 1; - return s; - } - }, { - key: 'newFunction', - value: function newFunction(name, decl, loc) { - var f = this.meta.last.f; - name = name || '(anonymous_' + f + ')'; - this.data.fnMap[f] = { - name: name, - decl: cloneLocation(decl), - loc: cloneLocation(loc) - }; - this.data.f[f] = 0; - this.meta.last.f += 1; - return f; - } - }, { - key: 'newBranch', - value: function newBranch(type, loc) { - var b = this.meta.last.b; - this.data.b[b] = []; - this.data.branchMap[b] = { - loc: cloneLocation(loc), - type: type, - locations: [] - }; - this.meta.last.b += 1; - return b; - } - }, { - key: 'addBranchPath', - value: function addBranchPath(name, location) { - var bMeta = this.data.branchMap[name], - counts = this.data.b[name]; - - /* istanbul ignore if: paranoid check */ - if (!bMeta) { - throw new Error("Invalid branch " + name); - } - bMeta.locations.push(cloneLocation(location)); - counts.push(0); - return counts.length - 1; - } - - /** - * Assigns an input source map to the coverage that can be used - * to remap the coverage output to the original source - * @param sourceMap {object} the source map - */ - - }, { - key: 'inputSourceMap', - value: function inputSourceMap(sourceMap) { - this.data.inputSourceMap = sourceMap; - } - }, { - key: 'freeze', - value: function freeze() { - // prune empty branches - var map = this.data.branchMap, - branches = this.data.b; - Object.keys(map).forEach(function (b) { - if (map[b].locations.length === 0) { - delete map[b]; - delete branches[b]; - } - }); - } - }]); - - return SourceCoverage; -}(_istanbulLibCoverage.classes.FileCoverage); - -exports.SourceCoverage = SourceCoverage; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/visitor.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/visitor.js deleted file mode 100644 index cae5146f5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/dist/visitor.js +++ /dev/null @@ -1,528 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _sourceCoverage = require('./source-coverage'); - -var _constants = require('./constants'); - -var _crypto = require('crypto'); - -var _babelTemplate = require('babel-template'); - -var _babelTemplate2 = _interopRequireDefault(_babelTemplate); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -// istanbul ignore comment pattern -var COMMENT_RE = /^\s*istanbul\s+ignore\s+(if|else|next)(?=\W|$)/; -// source map URL pattern -var SOURCE_MAP_RE = /[#@]\s*sourceMappingURL=(.*)\s*$/m; - -// generate a variable name from hashing the supplied file path -function genVar(filename) { - var hash = (0, _crypto.createHash)(_constants.SHA); - hash.update(filename); - return 'cov_' + parseInt(hash.digest('hex').substr(0, 12), 16).toString(36); -} - -// VisitState holds the state of the visitor, provides helper functions -// and is the `this` for the individual coverage visitors. - -var VisitState = function () { - function VisitState(types, sourceFilePath, inputSourceMap) { - _classCallCheck(this, VisitState); - - this.varName = genVar(sourceFilePath); - this.attrs = {}; - this.nextIgnore = null; - this.cov = new _sourceCoverage.SourceCoverage(sourceFilePath); - - if (typeof inputSourceMap !== "undefined") { - this.cov.inputSourceMap(inputSourceMap); - } - this.types = types; - this.sourceMappingURL = null; - } - - // should we ignore the node? Yes, if specifically ignoring - // or if the node is generated. - - - _createClass(VisitState, [{ - key: 'shouldIgnore', - value: function shouldIgnore(path) { - return this.nextIgnore || !path.node.loc; - } - - // extract the ignore comment hint (next|if|else) or null - - }, { - key: 'hintFor', - value: function hintFor(node) { - var hint = null; - if (node.leadingComments) { - node.leadingComments.forEach(function (c) { - var v = (c.value || /* istanbul ignore next: paranoid check */"").trim(); - var groups = v.match(COMMENT_RE); - if (groups) { - hint = groups[1]; - } - }); - } - return hint; - } - - // extract a source map URL from comments and keep track of it - - }, { - key: 'maybeAssignSourceMapURL', - value: function maybeAssignSourceMapURL(node) { - var that = this; - var extractURL = function extractURL(comments) { - if (!comments) { - return; - } - comments.forEach(function (c) { - var v = (c.value || /* istanbul ignore next: paranoid check */"").trim(); - var groups = v.match(SOURCE_MAP_RE); - if (groups) { - that.sourceMappingURL = groups[1]; - } - }); - }; - extractURL(node.leadingComments); - extractURL(node.trailingComments); - } - - // all the generic stuff that needs to be done on enter for every node - - }, { - key: 'onEnter', - value: function onEnter(path) { - var n = path.node; - - this.maybeAssignSourceMapURL(n); - - // if already ignoring, nothing more to do - if (this.nextIgnore !== null) { - return; - } - // check hint to see if ignore should be turned on - var hint = this.hintFor(n); - if (hint === 'next') { - this.nextIgnore = n; - return; - } - // else check custom node attribute set by a prior visitor - if (this.getAttr(path.node, 'skip-all') !== null) { - this.nextIgnore = n; - } - } - - // all the generic stuff on exit of a node, - // including reseting ignores and custom node attrs - - }, { - key: 'onExit', - value: function onExit(path) { - // restore ignore status, if needed - if (path.node === this.nextIgnore) { - this.nextIgnore = null; - } - // nuke all attributes for the node - delete path.node.__cov__; - } - - // set a node attribute for the supplied node - - }, { - key: 'setAttr', - value: function setAttr(node, name, value) { - node.__cov__ = node.__cov__ || {}; - node.__cov__[name] = value; - } - - // retrieve a node attribute for the supplied node or null - - }, { - key: 'getAttr', - value: function getAttr(node, name) { - var c = node.__cov__; - if (!c) { - return null; - } - return c[name]; - } - - // - - }, { - key: 'increase', - value: function increase(type, id, index) { - var T = this.types; - var wrap = index !== null - // If `index` present, turn `x` into `x[index]`. - ? function (x) { - return T.memberExpression(x, T.numericLiteral(index), true); - } : function (x) { - return x; - }; - return T.unaryExpression('++', wrap(T.memberExpression(T.memberExpression(T.identifier(this.varName), T.identifier(type)), T.numericLiteral(id), true))); - } - }, { - key: 'insertCounter', - value: function insertCounter(path, increment) { - var T = this.types; - if (path.isBlockStatement()) { - path.node.body.unshift(T.expressionStatement(increment)); - } else if (path.isStatement()) { - path.insertBefore(T.expressionStatement(increment)); - } else /* istanbul ignore else: not expected */if (path.isExpression()) { - path.replaceWith(T.sequenceExpression([increment, path.node])); - } else { - console.error('Unable to insert counter for node type:', path.node.type); - } - } - }, { - key: 'insertStatementCounter', - value: function insertStatementCounter(path) { - /* istanbul ignore if: paranoid check */ - if (!(path.node && path.node.loc)) { - return; - } - var index = this.cov.newStatement(path.node.loc); - var increment = this.increase('s', index, null); - this.insertCounter(path, increment); - } - }, { - key: 'insertFunctionCounter', - value: function insertFunctionCounter(path) { - var T = this.types; - /* istanbul ignore if: paranoid check */ - if (!(path.node && path.node.loc)) { - return; - } - var n = path.node; - var dloc = null; - // get location for declaration - switch (n.type) { - case "FunctionDeclaration": - /* istanbul ignore else: paranoid check */ - if (n.id) { - dloc = n.id.loc; - } - break; - case "FunctionExpression": - if (n.id) { - dloc = n.id.loc; - } - break; - } - if (!dloc) { - dloc = { - start: n.loc.start, - end: { line: n.loc.start.line, column: n.loc.start.column + 1 } - }; - } - var name = path.node.id ? path.node.id.name : path.node.name; - var index = this.cov.newFunction(name, dloc, path.node.body.loc); - var increment = this.increase('f', index, null); - var body = path.get('body'); - /* istanbul ignore else: not expected */ - if (body.isBlockStatement()) { - body.node.body.unshift(T.expressionStatement(increment)); - } else { - console.error('Unable to process function body node type:', path.node.type); - } - } - }, { - key: 'getBranchIncrement', - value: function getBranchIncrement(branchName, loc) { - var index = this.cov.addBranchPath(branchName, loc); - return this.increase('b', branchName, index); - } - }, { - key: 'insertBranchCounter', - value: function insertBranchCounter(path, branchName, loc) { - var increment = this.getBranchIncrement(branchName, loc || path.node.loc); - this.insertCounter(path, increment); - } - }, { - key: 'findLeaves', - value: function findLeaves(node, accumulator, parent, property) { - if (!node) { - return; - } - if (node.type === "LogicalExpression") { - var hint = this.hintFor(node); - if (hint !== 'next') { - this.findLeaves(node.left, accumulator, node, 'left'); - this.findLeaves(node.right, accumulator, node, 'right'); - } - } else { - accumulator.push({ - node: node, - parent: parent, - property: property - }); - } - } - }]); - - return VisitState; -}(); - -// generic function that takes a set of visitor methods and -// returns a visitor object with `enter` and `exit` properties, -// such that: -// -// * standard entry processing is done -// * the supplied visitors are called only when ignore is not in effect -// This relieves them from worrying about ignore states and generated nodes. -// * standard exit processing is done -// - - -function entries() { - var enter = Array.prototype.slice.call(arguments); - // the enter function - var wrappedEntry = function wrappedEntry(path, node) { - this.onEnter(path); - if (this.shouldIgnore(path)) { - return; - } - var that = this; - enter.forEach(function (e) { - e.call(that, path, node); - }); - }; - var exit = function exit(path, node) { - this.onExit(path, node); - }; - return { - enter: wrappedEntry, - exit: exit - }; -} - -function coverStatement(path) { - this.insertStatementCounter(path); -} - -/* istanbul ignore next: no node.js support */ -function coverAssignmentPattern(path) { - var n = path.node; - var b = this.cov.newBranch('default-arg', n.loc); - this.insertBranchCounter(path.get('right'), b); -} - -function coverFunction(path) { - this.insertFunctionCounter(path); -} - -function coverVariableDeclarator(path) { - this.insertStatementCounter(path.get('init')); -} - -function skipInit(path) { - if (path.node.init) { - this.setAttr(path.node.init, 'skip-all', true); - } -} - -function makeBlock(path) { - var T = this.types; - if (!path.node) { - path.replaceWith(T.blockStatement([])); - } - if (!path.isBlockStatement()) { - path.replaceWith(T.blockStatement([path.node])); - path.node.loc = path.node.body[0].loc; - } -} - -function blockProp(prop) { - return function (path) { - makeBlock.call(this, path.get(prop)); - }; -} - -function convertArrowExpression(path) { - var n = path.node; - var T = this.types; - if (n.expression) { - var bloc = n.body.loc; - n.expression = false; - n.body = T.blockStatement([T.returnStatement(n.body)]); - // restore body location - n.body.loc = bloc; - // set up the location for the return statement so it gets - // instrumented - n.body.body[0].loc = bloc; - } -} - -function coverIfBranches(path) { - var n = path.node, - hint = this.hintFor(n), - ignoreIf = hint === 'if', - ignoreElse = hint === 'else', - branch = this.cov.newBranch('if', n.loc); - - if (ignoreIf) { - this.setAttr(n.consequent, 'skip-all', true); - } else { - this.insertBranchCounter(path.get('consequent'), branch, n.loc); - } - if (ignoreElse) { - this.setAttr(n.alternate, 'skip-all', true); - } else { - this.insertBranchCounter(path.get('alternate'), branch, n.loc); - } -} - -function createSwitchBranch(path) { - var b = this.cov.newBranch('switch', path.node.loc); - this.setAttr(path.node, 'branchName', b); -} - -function coverSwitchCase(path) { - var T = this.types; - var b = this.getAttr(path.parentPath.node, 'branchName'); - /* istanbul ignore if: paranoid check */ - if (b === null) { - throw new Error('Unable to get switch branch name'); - } - var increment = this.getBranchIncrement(b, path.node.loc); - path.node.consequent.unshift(T.expressionStatement(increment)); -} - -function coverTernary(path) { - var n = path.node, - branch = this.cov.newBranch('cond-expr', path.node.loc), - cHint = this.hintFor(n.consequent), - aHint = this.hintFor(n.alternate); - - if (cHint !== 'next') { - this.insertBranchCounter(path.get('consequent'), branch); - } - if (aHint !== 'next') { - this.insertBranchCounter(path.get('alternate'), branch); - } -} - -function coverLogicalExpression(path) { - var T = this.types; - if (path.parentPath.node.type === "LogicalExpression") { - return; // already processed - } - var leaves = []; - this.findLeaves(path.node, leaves); - var b = this.cov.newBranch("binary-expr", path.node.loc); - for (var i = 0; i < leaves.length; i += 1) { - var leaf = leaves[i]; - var hint = this.hintFor(leaf.node); - if (hint === 'next') { - continue; - } - var increment = this.getBranchIncrement(b, leaf.node.loc); - if (!increment) { - continue; - } - leaf.parent[leaf.property] = T.sequenceExpression([increment, leaf.node]); - } -} - -var codeVisitor = { - ArrowFunctionExpression: entries(convertArrowExpression, coverFunction), - AssignmentPattern: entries(coverAssignmentPattern), - BlockStatement: entries(), // ignore processing only - ClassMethod: entries(coverFunction), - ExpressionStatement: entries(coverStatement), - BreakStatement: entries(coverStatement), - ContinueStatement: entries(coverStatement), - DebuggerStatement: entries(coverStatement), - ReturnStatement: entries(coverStatement), - ThrowStatement: entries(coverStatement), - TryStatement: entries(coverStatement), - VariableDeclaration: entries(), // ignore processing only - VariableDeclarator: entries(coverVariableDeclarator), - IfStatement: entries(blockProp('consequent'), blockProp('alternate'), coverStatement, coverIfBranches), - ForStatement: entries(blockProp('body'), skipInit, coverStatement), - ForInStatement: entries(blockProp('body'), skipInit, coverStatement), - ForOfStatement: entries(blockProp('body'), skipInit, coverStatement), - WhileStatement: entries(blockProp('body'), coverStatement), - DoWhileStatement: entries(blockProp('body'), coverStatement), - SwitchStatement: entries(createSwitchBranch, coverStatement), - SwitchCase: entries(coverSwitchCase), - WithStatement: entries(blockProp('body'), coverStatement), - FunctionDeclaration: entries(coverFunction), - FunctionExpression: entries(coverFunction), - LabeledStatement: entries(coverStatement), - ConditionalExpression: entries(coverTernary), - LogicalExpression: entries(coverLogicalExpression) -}; -// the template to insert at the top of the program. -var coverageTemplate = (0, _babelTemplate2.default)('\n var COVERAGE_VAR = (function () {\n var path = PATH,\n hash = HASH,\n global = (new Function(\'return this\'))(),\n gcv = GLOBAL_COVERAGE_VAR,\n coverageData = INITIAL,\n coverage = global[gcv] || (global[gcv] = {});\n if (coverage[path] && coverage[path].hash === hash) {\n return coverage[path];\n }\n coverageData.hash = hash;\n return coverage[path] = coverageData;\n })();\n'); -/** - * programVisitor is a `babel` adaptor for instrumentation. - * It returns an object with two methods `enter` and `exit`. - * These should be assigned to or called from `Program` entry and exit functions - * in a babel visitor. - * These functions do not make assumptions about the state set by Babel and thus - * can be used in a context other than a Babel plugin. - * - * The exit function returns an object that currently has the following keys: - * - * `fileCoverage` - the file coverage object created for the source file. - * `sourceMappingURL` - any source mapping URL found when processing the file. - * - * @param {Object} types - an instance of babel-types - * @param {string} sourceFilePath - the path to source file - * @param {Object} opts - additional options - * @param {string} [opts.coverageVariable=__coverage__] the global coverage variable name. - * @param {object} [opts.inputSourceMap=undefined] the input source map, that maps the uninstrumented code back to the - * original code. - */ -function programVisitor(types) { - var sourceFilePath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'unknown.js'; - var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : { coverageVariable: '__coverage__', inputSourceMap: undefined }; - - var T = types; - var visitState = new VisitState(types, sourceFilePath, opts.inputSourceMap); - return { - enter: function enter(path) { - path.traverse(codeVisitor, visitState); - }, - exit: function exit(path) { - visitState.cov.freeze(); - var coverageData = visitState.cov.toJSON(); - coverageData[_constants.MAGIC_KEY] = _constants.MAGIC_VALUE; - var hash = (0, _crypto.createHash)(_constants.SHA).update(JSON.stringify(coverageData)).digest('hex'); - var coverageNode = T.valueToNode(coverageData); - delete coverageData[_constants.MAGIC_KEY]; - var cv = coverageTemplate({ - GLOBAL_COVERAGE_VAR: T.stringLiteral(opts.coverageVariable), - COVERAGE_VAR: T.identifier(visitState.varName), - PATH: T.stringLiteral(sourceFilePath), - INITIAL: coverageNode, - HASH: T.stringLiteral(hash) - }); - cv._blockHoist = 3; - path.node.body.unshift(cv); - return { - fileCoverage: coverageData, - sourceMappingURL: visitState.sourceMappingURL - }; - } - }; -} - -exports.default = programVisitor; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/package.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/package.json deleted file mode 100644 index a8ed1496a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-instrument/package.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "_args": [ - [ - "istanbul-lib-instrument@^1.1.4", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul" - ] - ], - "_from": "istanbul-lib-instrument@>=1.1.4 <2.0.0", - "_id": "istanbul-lib-instrument@1.3.0", - "_inCache": true, - "_installable": true, - "_location": "/istanbul-lib-instrument", - "_nodeVersion": "4.0.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/istanbul-lib-instrument-1.3.0.tgz_1478757368335_0.7665289628785104" - }, - "_npmUser": { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - "_npmVersion": "3.3.0", - "_phantomChildren": {}, - "_requested": { - "name": "istanbul-lib-instrument", - "raw": "istanbul-lib-instrument@^1.1.4", - "rawSpec": "^1.1.4", - "scope": null, - "spec": ">=1.1.4 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-istanbul" - ], - "_resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.3.0.tgz", - "_shasum": "19f0a973397454989b98330333063a5b56df0e58", - "_shrinkwrap": null, - "_spec": "istanbul-lib-instrument@^1.1.4", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul", - "author": { - "email": "kananthmail-github@yahoo.com", - "name": "Krishnan Anantheswaran" - }, - "bugs": { - "url": "https://github.com/istanbuljs/istanbul-lib-instrument/issues" - }, - "dependencies": { - "babel-generator": "^6.18.0", - "babel-template": "^6.16.0", - "babel-traverse": "^6.18.0", - "babel-types": "^6.18.0", - "babylon": "^6.13.0", - "istanbul-lib-coverage": "^1.0.0", - "semver": "^5.3.0" - }, - "description": "Core istanbul API for JS code coverage", - "devDependencies": { - "babel-cli": "^6.3.17", - "babel-plugin-istanbul": "^2.0.3", - "babel-preset-es2015": "^6.3.13", - "babel-register": "^6.16.3", - "chai": "^3.0.0", - "clone": "^2.0.0", - "coveralls": "^2.11.4", - "cross-env": "^2.0.1", - "documentation": "^4.0.0-beta9", - "js-yaml": "^3.3.1", - "jshint": "^2.8.0", - "mocha": "^3.1.2", - "nopt": "^3.0.6", - "nyc": "^8.3.1", - "standard-version": "^3.0.0" - }, - "directories": {}, - "dist": { - "shasum": "19f0a973397454989b98330333063a5b56df0e58", - "tarball": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-1.3.0.tgz" - }, - "gitHead": "52b94d242229c4d5760442853f4aa86f4f49d74b", - "homepage": "https://github.com/istanbuljs/istanbul-lib-instrument", - "keywords": [ - "coverage", - "istanbul", - "js", - "instrumentation" - ], - "license": "BSD-3-Clause", - "main": "dist/index.js", - "maintainers": [ - { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - } - ], - "name": "istanbul-lib-instrument", - "nyc": { - "include": [ - "src/**/*.js" - ], - "instrument": false, - "require": [ - "babel-register" - ], - "sourceMap": false - }, - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/istanbuljs/istanbul-lib-instrument.git" - }, - "scripts": { - "coverage": "nyc report --reporter=text-lcov | coveralls", - "prepublish": "npm test && npm run release", - "pretest": "jshint src/ test/", - "release": "babel src --out-dir dist && documentation build -f md -o api.md src", - "test": "cross-env NODE_ENV=test nyc --check-coverage --statements 90 --branches 80 mocha --recursive test/", - "version": "standard-version" - }, - "version": "1.3.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/.doc.yml b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/.doc.yml deleted file mode 100644 index dbf917bf9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/.doc.yml +++ /dev/null @@ -1,3 +0,0 @@ -order: - - Exports - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/LICENSE b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/LICENSE deleted file mode 100644 index d55d2916e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/README.md b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/README.md deleted file mode 100644 index a87eb3702..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/README.md +++ /dev/null @@ -1,7 +0,0 @@ -istanbul-lib-report -=================== - -[![Build Status](https://travis-ci.org/istanbuljs/istanbul-lib-report.svg?branch=master)](https://travis-ci.org/istanbuljs/istanbul-lib-report) - -Core reporting utilities for istanbul. Docs to follow. - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/anchor.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/anchor.js deleted file mode 100644 index 47d871ad4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/anchor.js +++ /dev/null @@ -1,197 +0,0 @@ -/*! - * AnchorJS - v1.2.1 - 2015-07-02 - * https://github.com/bryanbraun/anchorjs - * Copyright (c) 2015 Bryan Braun; Licensed MIT - */ - -function AnchorJS(options) { - 'use strict'; - - this.options = options || {}; - - this._applyRemainingDefaultOptions = function(opts) { - this.options.icon = this.options.hasOwnProperty('icon') ? opts.icon : '\ue9cb'; // Accepts characters (and also URLs?), like '#', '¶', '❡', or '§'. - this.options.visible = this.options.hasOwnProperty('visible') ? opts.visible : 'hover'; // Also accepts 'always' - this.options.placement = this.options.hasOwnProperty('placement') ? opts.placement : 'right'; // Also accepts 'left' - this.options.class = this.options.hasOwnProperty('class') ? opts.class : ''; // Accepts any class name. - }; - - this._applyRemainingDefaultOptions(options); - - this.add = function(selector) { - var elements, - elsWithIds, - idList, - elementID, - i, - roughText, - tidyText, - index, - count, - newTidyText, - readableID, - anchor; - - this._applyRemainingDefaultOptions(this.options); - - // Provide a sensible default selector, if none is given. - if (!selector) { - selector = 'h1, h2, h3, h4, h5, h6'; - } else if (typeof selector !== 'string') { - throw new Error('The selector provided to AnchorJS was invalid.'); - } - - elements = document.querySelectorAll(selector); - if (elements.length === 0) { - return false; - } - - this._addBaselineStyles(); - - // We produce a list of existing IDs so we don't generate a duplicate. - elsWithIds = document.querySelectorAll('[id]'); - idList = [].map.call(elsWithIds, function assign(el) { - return el.id; - }); - - for (i = 0; i < elements.length; i++) { - - if (elements[i].hasAttribute('id')) { - elementID = elements[i].getAttribute('id'); - } else { - roughText = elements[i].textContent; - - // Refine it so it makes a good ID. Strip out non-safe characters, replace - // spaces with hyphens, truncate to 32 characters, and make toLowerCase. - // - // Example string: // '⚡⚡⚡ Unicode icons are cool--but they definitely don't belong in a URL fragment.' - tidyText = roughText.replace(/[^\w\s-]/gi, '') // ' Unicode icons are cool--but they definitely dont belong in a URL fragment' - .replace(/\s+/g, '-') // '-Unicode-icons-are-cool--but-they-definitely-dont-belong-in-a-URL-fragment' - .replace(/-{2,}/g, '-') // '-Unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-URL-fragment' - .substring(0, 64) // '-Unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-URL' - .replace(/^-+|-+$/gm, '') // 'Unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-URL' - .toLowerCase(); // 'unicode-icons-are-cool-but-they-definitely-dont-belong-in-a-url' - - // Compare our generated ID to existing IDs (and increment it if needed) - // before we add it to the page. - newTidyText = tidyText; - count = 0; - do { - if (index !== undefined) { - newTidyText = tidyText + '-' + count; - } - // .indexOf is supported in IE9+. - index = idList.indexOf(newTidyText); - count += 1; - } while (index !== -1); - index = undefined; - idList.push(newTidyText); - - // Assign it to our element. - // Currently the setAttribute element is only supported in IE9 and above. - elements[i].setAttribute('id', newTidyText); - - elementID = newTidyText; - } - - readableID = elementID.replace(/-/g, ' '); - - // The following code builds the following DOM structure in a more effiecient (albeit opaque) way. - // ''; - anchor = document.createElement('a'); - anchor.className = 'anchorjs-link ' + this.options.class; - anchor.href = '#' + elementID; - anchor.setAttribute('aria-label', 'Anchor link for: ' + readableID); - anchor.setAttribute('data-anchorjs-icon', this.options.icon); - - if (this.options.visible === 'always') { - anchor.style.opacity = '1'; - } - - if (this.options.icon === '\ue9cb') { - anchor.style.fontFamily = 'anchorjs-icons'; - anchor.style.fontStyle = 'normal'; - anchor.style.fontVariant = 'normal'; - anchor.style.fontWeight = 'normal'; - anchor.style.lineHeight = 1; - } - - if (this.options.placement === 'left') { - anchor.style.position = 'absolute'; - anchor.style.marginLeft = '-1em'; - anchor.style.paddingRight = '0.5em'; - elements[i].insertBefore(anchor, elements[i].firstChild); - } else { // if the option provided is `right` (or anything else). - anchor.style.paddingLeft = '0.375em'; - elements[i].appendChild(anchor); - } - } - - return this; - }; - - this.remove = function(selector) { - var domAnchor, - elements = document.querySelectorAll(selector); - for (var i = 0; i < elements.length; i++) { - domAnchor = elements[i].querySelector('.anchorjs-link'); - if (domAnchor) { - elements[i].removeChild(domAnchor); - } - } - return this; - }; - - this._addBaselineStyles = function() { - // We don't want to add global baseline styles if they've been added before. - if (document.head.querySelector('style.anchorjs') !== null) { - return; - } - - var style = document.createElement('style'), - linkRule = - ' .anchorjs-link {' + - ' opacity: 0;' + - ' text-decoration: none;' + - ' -webkit-font-smoothing: antialiased;' + - ' -moz-osx-font-smoothing: grayscale;' + - ' }', - hoverRule = - ' *:hover > .anchorjs-link,' + - ' .anchorjs-link:focus {' + - ' opacity: 1;' + - ' }', - anchorjsLinkFontFace = - ' @font-face {' + - ' font-family: "anchorjs-icons";' + - ' font-style: normal;' + - ' font-weight: normal;' + // Icon from icomoon; 10px wide & 10px tall; 2 empty below & 4 above - ' src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBTUAAAC8AAAAYGNtYXAWi9QdAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zgq29TcAAAF4AAABNGhlYWQEZM3pAAACrAAAADZoaGVhBhUDxgAAAuQAAAAkaG10eASAADEAAAMIAAAAFGxvY2EAKACuAAADHAAAAAxtYXhwAAgAVwAAAygAAAAgbmFtZQ5yJ3cAAANIAAAB2nBvc3QAAwAAAAAFJAAAACAAAwJAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpywPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6cv//f//AAAAAAAg6cv//f//AAH/4xY5AAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAACADEARAJTAsAAKwBUAAABIiYnJjQ/AT4BMzIWFxYUDwEGIicmND8BNjQnLgEjIgYPAQYUFxYUBw4BIwciJicmND8BNjIXFhQPAQYUFx4BMzI2PwE2NCcmNDc2MhcWFA8BDgEjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAEAAAABAACiToc1Xw889QALBAAAAAAA0XnFFgAAAADRecUWAAAAAAJTAsAAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAAlMAAQAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAACAAAAAoAAMQAAAAAACgAUAB4AmgABAAAABQBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIABwCfAAEAAAAAAAMADgBLAAEAAAAAAAQADgC0AAEAAAAAAAUACwAqAAEAAAAAAAYADgB1AAEAAAAAAAoAGgDeAAMAAQQJAAEAHAAOAAMAAQQJAAIADgCmAAMAAQQJAAMAHABZAAMAAQQJAAQAHADCAAMAAQQJAAUAFgA1AAMAAQQJAAYAHACDAAMAAQQJAAoANAD4YW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzUmVndWxhcgBSAGUAZwB1AGwAYQByYW5jaG9yanMtaWNvbnMAYQBuAGMAaABvAHIAagBzAC0AaQBjAG8AbgBzRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format("truetype");' + - ' }', - pseudoElContent = - ' [data-anchorjs-icon]::after {' + - ' content: attr(data-anchorjs-icon);' + - ' }', - firstStyleEl; - - style.className = 'anchorjs'; - style.appendChild(document.createTextNode('')); // Necessary for Webkit. - - // We place it in the head with the other style tags, if possible, so as to - // not look out of place. We insert before the others so these styles can be - // overridden if necessary. - firstStyleEl = document.head.querySelector('[rel="stylesheet"], style'); - if (firstStyleEl === undefined) { - document.head.appendChild(style); - } else { - document.head.insertBefore(style, firstStyleEl); - } - - style.sheet.insertRule(linkRule, style.sheet.cssRules.length); - style.sheet.insertRule(hoverRule, style.sheet.cssRules.length); - style.sheet.insertRule(pseudoElContent, style.sheet.cssRules.length); - style.sheet.insertRule(anchorjsLinkFontFace, style.sheet.cssRules.length); - }; -} - -var anchors = new AnchorJS(); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/bass.css b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/bass.css deleted file mode 100755 index 941c260e7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/bass.css +++ /dev/null @@ -1,850 +0,0 @@ -/* - - Basscss v7.0.3 - Low-level CSS toolkit - http://basscss.com - - 14.88 kB - 3.38 kB Gzipped - 286 Rules - 328 Selectors - 441 Declarations - 95 Properties - -*/ - - - -body { margin: 0 } -img { max-width: 100% } -svg { max-height: 100% } - -input, -select, -textarea, -fieldset { - font-family: inherit; - font-size: 1rem; - box-sizing: border-box; - margin-top: 0; - margin-bottom: 0; -} - -label { - vertical-align: middle; -} - -input[type=text], -input[type=date], -input[type=datetime], -input[type=datetime-local], -input[type=email], -input[type=month], -input[type=number], -input[type=password], -input[type=search], -input[type=tel], -input[type=time], -input[type=url], -input[type=week] { - height: 2.25rem; - padding: .5rem .5rem; - vertical-align: middle; - -webkit-appearance: none; -} - -select { - line-height: 1.75; - padding: .5rem .5rem; -} - -select:not([multiple]) { - height: 2.25rem; - vertical-align: middle; -} - -textarea { - line-height: 1.75; - padding: .5rem .5rem; -} - -table { - border-collapse: separate; - border-spacing: 0; - max-width: 100%; - width: 100%; -} - -th { - text-align: left; - font-weight: bold; -} - -th, -td { - padding: .25rem 1rem; - line-height: inherit; -} - -th { vertical-align: bottom } -td { vertical-align: top } - -body { - font-family: 'Helvetica Neue', Helvetica, sans-serif; - line-height: 1.5; - font-size: 100%; -} - -h1, h2, h3, h4, h5, h6 { - font-family: 'Helvetica Neue', Helvetica, sans-serif; - font-weight: bold; - line-height: 1.25; - margin-top: 1em; - margin-bottom: .5em; -} - -p { - margin-top: 0; - margin-bottom: 1rem; -} - -dl, ol, ul { - margin-top: 0; - margin-bottom: 1rem; -} - -pre, code, samp { - font-family: 'Source Code Pro', Consolas, monospace; - font-size: inherit; -} - -pre { - margin-top: 0; - margin-bottom: 1rem; - overflow-x: scroll; -} - -h1 { font-size: 2rem } -h2 { font-size: 1.5rem } -h3 { font-size: 1.25rem } -h4 { font-size: 1rem } -h5 { font-size: .875rem } -h6 { font-size: .75rem } - -body { - color: #111; - background-color: #fff; -} - -a { - color: #0074d9; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -pre, code { - background-color: transparent; - border-radius: 3px; -} - -hr { - border: 0; - border-bottom-style: solid; - border-bottom-width: 1px; - border-bottom-color: rgba(0,0,0,.125); -} - -.field { - border-style: solid; - border-width: 1px; - border-color: rgba(0,0,0,.125); - border-radius: 3px; -} - -.field:focus, -.field.is-focused { - outline: none; - border-color: #0074d9; - box-shadow: 0 0 0 2px rgba(0, 116, 217, 0.5); -} - -.field:disabled, -.field.is-disabled { - background-color: rgba(0,0,0,.125); - opacity: .5; -} - -.field:read-only:not(select), -.field.is-read-only { - background-color: rgba(0,0,0,.125); -} - - -.field.is-success { - border-color: #2ecc40; -} - -.field.is-success:focus, -.field.is-success.is-focused { - box-shadow: 0 0 0 2px rgba(46, 204, 64, 0.5); -} - -.field.is-warning { - border-color: #ffdc00; -} - -.field.is-warning:focus, -.field.is-warning.is-focused { - box-shadow: 0 0 0 2px rgba(255, 220, 0, 0.5); -} - -.field:invalid, -.field.is-error { - border-color: #ff4136; -} - -.field:invalid:focus, -.field:invalid.is-focused, -.field.is-error:focus, -.field.is-error.is-focused { - box-shadow: 0 0 0 2px rgba(255, 65, 54, 0.5); -} - -.table-light th, -.table-light td { - border-bottom-width: 1px; - border-bottom-style: solid; - border-bottom-color: rgba(0,0,0,.125); -} - -.table-light tr:last-child td { - border-bottom: 0; -} - -.btn { - font-family: inherit; - font-size: inherit; - font-weight: bold; - text-decoration: none; - cursor: pointer; - display: inline-block; - line-height: 1.125rem; - padding: .5rem 1rem; - margin: 0; - height: auto; - border: 1px solid transparent; - vertical-align: middle; - -webkit-appearance: none; - color: inherit; - background-color: transparent; -} - -.btn:hover { - text-decoration: none; -} - -.btn:focus { - outline: none; - border-color: rgba(0,0,0,.125); - box-shadow: 0 0 0 3px rgba(0,0,0,.25); -} - -::-moz-focus-inner { - border: 0; - padding: 0; -} - -.btn-primary { - color: #fff; - background-color: #0074d9; - border-radius: 3px; -} - -.btn-primary:hover { - box-shadow: inset 0 0 0 20rem rgba(0,0,0,.0625); -} - -.btn-primary:active { - box-shadow: inset 0 0 0 20rem rgba(0,0,0,.125), - inset 0 3px 4px 0 rgba(0,0,0,.25), - 0 0 1px rgba(0,0,0,.125); -} - -.btn-primary:disabled, -.btn-primary.is-disabled { - opacity: .5; -} - -.btn-outline, -.btn-outline:hover { - border-color: currentcolor; -} - -.btn-outline { - border-radius: 3px; -} - -.btn-outline:hover { - box-shadow: inset 0 0 0 20rem rgba(0,0,0,.0625); -} - -.btn-outline:active { - box-shadow: inset 0 0 0 20rem rgba(0,0,0,.125), - inset 0 3px 4px 0 rgba(0,0,0,.25), - 0 0 1px rgba(0,0,0,.125); -} - -.btn-outline:disabled, -.btn-outline.is-disabled { - opacity: .5; -} - -.h1 { font-size: 2rem } -.h2 { font-size: 1.5rem } -.h3 { font-size: 1.25rem } -.h4 { font-size: 1rem } -.h5 { font-size: .875rem } -.h6 { font-size: .75rem } - -.bold { font-weight: bold } -.regular { font-weight: normal } -.italic { font-style: italic } -.caps { text-transform: uppercase; letter-spacing: .2em; } - -.left-align { text-align: left } -.center { text-align: center } -.right-align { text-align: right } -.justify { text-align: justify } - -.nowrap { white-space: nowrap } -.break-word { word-wrap: break-word } - -.truncate { - max-width: 100%; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.list-reset { - list-style: none; - padding-left: 0; -} - -.inline { display: inline } -.block { display: block } -.inline-block { display: inline-block } -.table { display: table } -.table-cell { display: table-cell } - -.overflow-hidden { overflow: hidden } -.overflow-scroll { overflow: scroll } -.overflow-auto { overflow: auto } - -.clearfix:before, -.clearfix:after { - content: " "; - display: table -} -.clearfix:after { clear: both } - -.left { float: left } -.right { float: right } - -.fit { max-width: 100% } - -.border-box { box-sizing: border-box } - -.align-baseline { vertical-align: baseline } -.align-top { vertical-align: top } -.align-middle { vertical-align: middle } -.align-bottom { vertical-align: bottom } - -.m0 { margin: 0 } -.mt0 { margin-top: 0 } -.mr0 { margin-right: 0 } -.mb0 { margin-bottom: 0 } -.ml0 { margin-left: 0 } - -.m1 { margin: .5rem } -.mt1 { margin-top: .5rem } -.mr1 { margin-right: .5rem } -.mb1 { margin-bottom: .5rem } -.ml1 { margin-left: .5rem } - -.m2 { margin: 1rem } -.mt2 { margin-top: 1rem } -.mr2 { margin-right: 1rem } -.mb2 { margin-bottom: 1rem } -.ml2 { margin-left: 1rem } - -.m3 { margin: 2rem } -.mt3 { margin-top: 2rem } -.mr3 { margin-right: 2rem } -.mb3 { margin-bottom: 2rem } -.ml3 { margin-left: 2rem } - -.m4 { margin: 4rem } -.mt4 { margin-top: 4rem } -.mr4 { margin-right: 4rem } -.mb4 { margin-bottom: 4rem } -.ml4 { margin-left: 4rem } - -.mxn1 { margin-left: -.5rem; margin-right: -.5rem; } -.mxn2 { margin-left: -1rem; margin-right: -1rem; } -.mxn3 { margin-left: -2rem; margin-right: -2rem; } -.mxn4 { margin-left: -4rem; margin-right: -4rem; } - -.mx-auto { margin-left: auto; margin-right: auto; } -.p0 { padding: 0 } - -.p1 { padding: .5rem } -.py1 { padding-top: .5rem; padding-bottom: .5rem } -.px1 { padding-left: .5rem; padding-right: .5rem } - -.p2 { padding: 1rem } -.py2 { padding-top: 1rem; padding-bottom: 1rem } -.px2 { padding-left: 1rem; padding-right: 1rem } - -.p3 { padding: 2rem } -.py3 { padding-top: 2rem; padding-bottom: 2rem } -.px3 { padding-left: 2rem; padding-right: 2rem } - -.p4 { padding: 4rem } -.py4 { padding-top: 4rem; padding-bottom: 4rem } -.px4 { padding-left: 4rem; padding-right: 4rem } - -.relative { position: relative } -.absolute { position: absolute } -.fixed { position: fixed } - -.top-0 { top: 0 } -.right-0 { right: 0 } -.bottom-0 { bottom: 0 } -.left-0 { left: 0 } - -.z1 { z-index: 1 } -.z2 { z-index: 2 } -.z3 { z-index: 3 } -.z4 { z-index: 4 } - -.sm-show, .md-show, .lg-show { - display: none !important -} - -@media (min-width: 40em) { - .sm-show { display: block !important } -} - -@media (min-width: 52em) { - .md-show { display: block !important } -} - -@media (min-width: 64em) { - .lg-show { display: block !important } -} - - -@media (min-width: 40em) { - .sm-hide { display: none !important } -} - -@media (min-width: 52em) { - .md-hide { display: none !important } -} - -@media (min-width: 64em) { - .lg-hide { display: none !important } -} - -.display-none { display: none !important } - -.hide { - position: absolute !important; - height: 1px; - width: 1px; - overflow: hidden; - clip: rect(1px, 1px, 1px, 1px); -} - -.container { - max-width: 64em; - margin-left: auto; - margin-right: auto; -} -.col { - float: left; - box-sizing: border-box; -} - -.col-right { - float: right; - box-sizing: border-box; -} - -.col-1 { - width: 8.33333%; -} - -.col-2 { - width: 16.66667%; -} - -.col-3 { - width: 25%; -} - -.col-4 { - width: 33.33333%; -} - -.col-5 { - width: 41.66667%; -} - -.col-6 { - width: 50%; -} - -.col-7 { - width: 58.33333%; -} - -.col-8 { - width: 66.66667%; -} - -.col-9 { - width: 75%; -} - -.col-10 { - width: 83.33333%; -} - -.col-11 { - width: 91.66667%; -} - -.col-12 { - width: 100%; -} -@media (min-width: 40em) { - - .sm-col { - float: left; - box-sizing: border-box; - } - - .sm-col-right { - float: right; - box-sizing: border-box; - } - - .sm-col-1 { - width: 8.33333%; - } - - .sm-col-2 { - width: 16.66667%; - } - - .sm-col-3 { - width: 25%; - } - - .sm-col-4 { - width: 33.33333%; - } - - .sm-col-5 { - width: 41.66667%; - } - - .sm-col-6 { - width: 50%; - } - - .sm-col-7 { - width: 58.33333%; - } - - .sm-col-8 { - width: 66.66667%; - } - - .sm-col-9 { - width: 75%; - } - - .sm-col-10 { - width: 83.33333%; - } - - .sm-col-11 { - width: 91.66667%; - } - - .sm-col-12 { - width: 100%; - } - -} -@media (min-width: 52em) { - - .md-col { - float: left; - box-sizing: border-box; - } - - .md-col-right { - float: right; - box-sizing: border-box; - } - - .md-col-1 { - width: 8.33333%; - } - - .md-col-2 { - width: 16.66667%; - } - - .md-col-3 { - width: 25%; - } - - .md-col-4 { - width: 33.33333%; - } - - .md-col-5 { - width: 41.66667%; - } - - .md-col-6 { - width: 50%; - } - - .md-col-7 { - width: 58.33333%; - } - - .md-col-8 { - width: 66.66667%; - } - - .md-col-9 { - width: 75%; - } - - .md-col-10 { - width: 83.33333%; - } - - .md-col-11 { - width: 91.66667%; - } - - .md-col-12 { - width: 100%; - } - -} -@media (min-width: 64em) { - - .lg-col { - float: left; - box-sizing: border-box; - } - - .lg-col-right { - float: right; - box-sizing: border-box; - } - - .lg-col-1 { - width: 8.33333%; - } - - .lg-col-2 { - width: 16.66667%; - } - - .lg-col-3 { - width: 25%; - } - - .lg-col-4 { - width: 33.33333%; - } - - .lg-col-5 { - width: 41.66667%; - } - - .lg-col-6 { - width: 50%; - } - - .lg-col-7 { - width: 58.33333%; - } - - .lg-col-8 { - width: 66.66667%; - } - - .lg-col-9 { - width: 75%; - } - - .lg-col-10 { - width: 83.33333%; - } - - .lg-col-11 { - width: 91.66667%; - } - - .lg-col-12 { - width: 100%; - } - -} - -.flex { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex } - -.flex-column { -webkit-box-orient: vertical; -webkit-box-direction: normal; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column } -.flex-wrap { -webkit-flex-wrap: wrap; -ms-flex-wrap: wrap; flex-wrap: wrap } - -.flex-center { -webkit-box-align: center; -webkit-align-items: center; -ms-flex-align: center; align-items: center } -.flex-baseline { -webkit-box-align: baseline; -webkit-align-items: baseline; -ms-flex-align: baseline; align-items: baseline } -.flex-stretch { -webkit-box-align: stretch; -webkit-align-items: stretch; -ms-flex-align: stretch; align-items: stretch } -.flex-start { -webkit-box-align: start; -webkit-align-items: flex-start; -ms-flex-align: start; align-items: flex-start } -.flex-end { -webkit-box-align: end; -webkit-align-items: flex-end; -ms-flex-align: end; align-items: flex-end } - -.flex-justify { -webkit-box-pack: justify; -webkit-justify-content: space-between; -ms-flex-pack: justify; justify-content: space-between } - -.flex-auto { - -webkit-box-flex: 1; - -webkit-flex: 1 1 auto; - -ms-flex: 1 1 auto; - flex: 1 1 auto; - min-width: 0; - min-height: 0; -} -.flex-grow { -webkit-box-flex: 1; -webkit-flex: 1 0 auto; -ms-flex: 1 0 auto; flex: 1 0 auto } -.flex-none { -webkit-box-flex: 0; -webkit-flex: none; -ms-flex: none; flex: none } - -.flex-first { -webkit-box-ordinal-group: 0; -webkit-order: -1; -ms-flex-order: -1; order: -1 } -.flex-last { -webkit-box-ordinal-group: 100000; -webkit-order: 99999; -ms-flex-order: 99999; order: 99999 } -@media (min-width: 40em) { - .sm-flex { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex } -} -@media (min-width: 52em) { - .md-flex { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex } -} -@media (min-width: 64em) { - .lg-flex { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex } -} - -.border { - border-style: solid; - border-width: 1px; - border-color: rgba(0,0,0,.125); -} - -.border-top { - border-top-style: solid; - border-top-width: 1px; - border-top-color: rgba(0,0,0,.125); -} - -.border-right { - border-right-style: solid; - border-right-width: 1px; - border-right-color: rgba(0,0,0,.125); -} - -.border-bottom { - border-bottom-style: solid; - border-bottom-width: 1px; - border-bottom-color: rgba(0,0,0,.125); -} - -.border-left { - border-left-style: solid; - border-left-width: 1px; - border-left-color: rgba(0,0,0,.125); -} - -.border-none { border: 0 } - -.rounded { border-radius: 3px } -.circle { border-radius: 50% } - -.rounded-top { border-radius: 3px 3px 0 0 } -.rounded-right { border-radius: 0 3px 3px 0 } -.rounded-bottom { border-radius: 0 0 3px 3px } -.rounded-left { border-radius: 3px 0 0 3px } - -.not-rounded { border-radius: 0 } - -.black { color: #111 } -.gray { color: #aaa } -.silver { color: #ddd } -.white { color: #fff } - -.aqua { color: #7fdbff } -.blue { color: #0074d9 } -.navy { color: #001f3f } -.teal { color: #39cccc } -.green { color: #2ecc40 } -.olive { color: #3d9970 } -.lime { color: #01ff70 } - -.yellow { color: #ffdc00 } -.orange { color: #ff851b } -.red { color: #ff4136 } -.fuchsia { color: #f012be } -.purple { color: #b10dc9 } -.maroon { color: #85144b } - -.color-inherit { color: inherit } -.muted { opacity: .5 } - -.bg-black { background-color: #111 } -.bg-gray { background-color: #aaa } -.bg-silver { background-color: #ddd } -.bg-white { background-color: #fff } - -.bg-aqua { background-color: #7fdbff } -.bg-blue { background-color: #0074d9 } -.bg-navy { background-color: #001f3f } -.bg-teal { background-color: #39cccc } -.bg-green { background-color: #2ecc40 } -.bg-olive { background-color: #3d9970 } -.bg-lime { background-color: #01ff70 } - -.bg-yellow { background-color: #ffdc00 } -.bg-orange { background-color: #ff851b } -.bg-red { background-color: #ff4136 } -.bg-fuchsia { background-color: #f012be } -.bg-purple { background-color: #b10dc9 } -.bg-maroon { background-color: #85144b } - -.bg-darken-1 { background-color: rgba(0,0,0,.0625) } -.bg-darken-2 { background-color: rgba(0,0,0,.125) } -.bg-darken-3 { background-color: rgba(0,0,0,.25) } -.bg-darken-4 { background-color: rgba(0,0,0,.5) } - -.bg-lighten-1 { background-color: rgba(255,255,255,.0625) } -.bg-lighten-2 { background-color: rgba(255,255,255,.125) } -.bg-lighten-3 { background-color: rgba(255,255,255,.25) } -.bg-lighten-4 { background-color: rgba(255,255,255,.5) } - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/github.css b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/github.css deleted file mode 100644 index 8852abb4c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/github.css +++ /dev/null @@ -1,123 +0,0 @@ -/* - -github.com style (c) Vasily Polovnyov - -*/ - -.hljs { - display: block; - overflow-x: auto; - padding: 0.5em; - color: #333; - background: #f8f8f8; - -webkit-text-size-adjust: none; -} - -.hljs-comment, -.diff .hljs-header, -.hljs-javadoc { - color: #998; - font-style: italic; -} - -.hljs-keyword, -.css .rule .hljs-keyword, -.hljs-winutils, -.nginx .hljs-title, -.hljs-subst, -.hljs-request, -.hljs-status { - color: #1184CE; -} - -.hljs-number, -.hljs-hexcolor, -.ruby .hljs-constant { - color: #ed225d; -} - -.hljs-string, -.hljs-tag .hljs-value, -.hljs-phpdoc, -.hljs-dartdoc, -.tex .hljs-formula { - color: #ed225d; -} - -.hljs-title, -.hljs-id, -.scss .hljs-preprocessor { - color: #900; - font-weight: bold; -} - -.hljs-list .hljs-keyword, -.hljs-subst { - font-weight: normal; -} - -.hljs-class .hljs-title, -.hljs-type, -.vhdl .hljs-literal, -.tex .hljs-command { - color: #458; - font-weight: bold; -} - -.hljs-tag, -.hljs-tag .hljs-title, -.hljs-rules .hljs-property, -.django .hljs-tag .hljs-keyword { - color: #000080; - font-weight: normal; -} - -.hljs-attribute, -.hljs-variable, -.lisp .hljs-body { - color: #008080; -} - -.hljs-regexp { - color: #009926; -} - -.hljs-symbol, -.ruby .hljs-symbol .hljs-string, -.lisp .hljs-keyword, -.clojure .hljs-keyword, -.scheme .hljs-keyword, -.tex .hljs-special, -.hljs-prompt { - color: #990073; -} - -.hljs-built_in { - color: #0086b3; -} - -.hljs-preprocessor, -.hljs-pragma, -.hljs-pi, -.hljs-doctype, -.hljs-shebang, -.hljs-cdata { - color: #999; - font-weight: bold; -} - -.hljs-deletion { - background: #fdd; -} - -.hljs-addition { - background: #dfd; -} - -.diff .hljs-change { - background: #0086b3; -} - -.hljs-chunk { - color: #aaa; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/site.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/site.js deleted file mode 100644 index 2cb0fb340..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/site.js +++ /dev/null @@ -1,40 +0,0 @@ -/* global anchors */ - -// add anchor links to headers -anchors.options.placement = 'left'; -anchors.add().remove('.no-anchor'); - -// Filter UI -var tocElements = document.getElementById('toc').getElementsByTagName('a'); -document.getElementById('filter-input').addEventListener('keyup', function(e) { - - var i, element; - - // enter key - if (e.keyCode === 13) { - // go to the first displayed item in the toc - for (i = 0; i < tocElements.length; i++) { - element = tocElements[i]; - if (!element.classList.contains('hide')) { - location.replace(element.href); - return e.preventDefault(); - } - } - } - - var match = function() { return true; }, - value = this.value.toLowerCase(); - - if (!value.match(/^\s*$/)) { - match = function(text) { return text.toLowerCase().indexOf(value) !== -1; }; - } - - for (i = 0; i < tocElements.length; i++) { - element = tocElements[i]; - if (match(element.innerHTML)) { - element.classList.remove('hide'); - } else { - element.classList.add('hide'); - } - } -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/style.css b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/style.css deleted file mode 100644 index a675e62b9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/assets/style.css +++ /dev/null @@ -1,95 +0,0 @@ -.documentation a { - color: #1184CE; -} - -.documentation .suppress-p-margin p { - margin:0; -} - -.force-inline p { - display: inline; - color: #222; -} - -.container-small { - max-width: 58rem; - margin-left: auto; - margin-right: auto; -} - -.max-height-100 { - max-height: 100%; -} - -.fade { - opacity:0.50; -} - -.button-indent { - padding: .25rem 1.5rem; - font-size: 90%; -} - -.section-indent { - border-left: 2px solid #eee; -} - -.bg-cloudy { - background: #fafafa; -} - -.force-inline * { - display:inline; -} - -section:target h3 { - font-weight:700; -} - -.documentation, -.documentation h1, -.documentation h2, -.documentation h3, -.documentation h4, -.documentation h5, -.documentation h6 { - font-family: 'Source Sans Pro', Helvetica, sans-serif; -} - -.documentation pre, -.documentation code, -.documentation samp { - font-family: 'Source Code Pro', monospace; - font-size: 90%; -} - -.documentation td, -.documentation th { - padding: .25rem .25rem; -} - -h1:hover .anchorjs-link, -h2:hover .anchorjs-link, -h3:hover .anchorjs-link, -h4:hover .anchorjs-link { - opacity: 1; -} - -.collapsible .collapser { - display:none; -} - -.collapsible:target .collapser { - display: block; -} - -.fix-3 { - width: 25%; - max-width: 244px; -} - -@media (min-width: 52em) { - .fix-margin-3 { - margin-left: 25%; - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/index.html b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/index.html deleted file mode 100644 index e3b241904..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/docs/index.html +++ /dev/null @@ -1,1238 +0,0 @@ - - - - istanbul-lib-report 1.0.0-alpha.1 | Documentation - - - - - - - -
-
- -
-
-
-

- Exports -

- -

Static members

-
- - - .createContext([opts]) - - -

returns a reporting context for the supplied options

- -
-
-
-
-

- createContext([opts]) -

-

returns a reporting context for the supplied options

- -

Parameters

-
    -
  • [Object] opts - (default null) - : - -

    opts

    - -
    -
  • -
-

Returns

- Context - - - - -
-
-
-
- - - .createReportSource(a, coverageMap, [opts]) - - -

returns a report source for the supplied coverage map and options

- -
-
-
-
-

- createReportSource(a, coverageMap, [opts]) -

-

returns a report source for the supplied coverage map and options

- -

Parameters

-
    -
  • CoverageMap a - : - -

    coverage map

    - -
    -
  • -
  • coverageMap - : - - - -
  • -
  • [Object] opts - (default null) - : - -

    report source options

    - -
    -
  • -
-

Returns

- ReportSource - - - - -
-
-
-
- - - .summarizers - - -

standard summary functions

- -
-
-
-
-

- summarizers -

-

standard summary functions

- -

Static members

-
- - - .flat - - -

a summarizer that creates a flat tree with one root node and bunch of - files directly under it

- -
-
-
-
-

- flat -

-

a summarizer that creates a flat tree with one root node and bunch of - files directly under it

- -
-
-
-
- - - .nested - - -

a summarizer that creates a hierarchical tree where the coverage summaries - of each directly reflect the summaries of all subdirectories and files in it

- -
-
-
-
-

- nested -

-

a summarizer that creates a hierarchical tree where the coverage summaries - of each directly reflect the summaries of all subdirectories and files in it

- -
-
-
-
- - - .pkg - - -

a summarizer that creates a tree in which directories are not nested. - Every subdirectory is a child of the root node and only reflects the - coverage numbers for the files in it (i.e. excludes subdirectories). - This is the default summarizer used by the report source.

- -
-
-
-
-

- pkg -

-

a summarizer that creates a tree in which directories are not nested. - Every subdirectory is a child of the root node and only reflects the - coverage numbers for the files in it (i.e. excludes subdirectories). - This is the default summarizer used by the report source.

- -
-
-
-
-
-
-
- - - .getDefaultWatermarks - - -

returns the default watermarks that would be used when not -overridden

- -
-
-
-
-

- getDefaultWatermarks -

-

returns the default watermarks that would be used when not - overridden

- -

Returns

- Object - : - -

an object with statements, functions, branches, - and line keys. Each value is a 2 element array that has the low and - high watermark as percentages.

- -
-
-
-
-
-
-

- ConsoleWriter -

-

- Extends - ContentWriter -

-

a content writer that writes to the console

- -
-
-

- ContentWriter -

-

abstract interface for writing content

- -

Instance members

-
- - - #close - - -

closes this content writer. Should be called after all writes are complete.

- -
-
-
-
-

- close -

-

closes this content writer. Should be called after all writes are complete.

- -
-
-
-
- - - #colorize(str, clazz) - - -

returns the colorized version of a string. Typically, -content writers that write to files will return the -same string and ones writing to a tty will wrap it in -appropriate escape sequences.

- -
-
-
-
-

- colorize(str, clazz) -

-

returns the colorized version of a string. Typically, - content writers that write to files will return the - same string and ones writing to a tty will wrap it in - appropriate escape sequences.

- -

Parameters

-
    -
  • String str - : - -

    the string to colorize

    - -
    -
  • -
  • String clazz - : - -

    one of high, medium or low

    - -
    -
  • -
-

Returns

- String - : - -

the colorized form of the string

- -
-
-
-
-
- - - #println(str) - - -

writes a string appended with a newline to the destination

- -
-
-
-
-

- println(str) -

-

writes a string appended with a newline to the destination

- -

Parameters

-
    -
  • String str - : - -

    the string to write

    - -
    -
  • -
-
-
-
-
- - - #write(str) - - -

writes a string as-is to the destination

- -
-
-
-
-

- write(str) -

-

writes a string as-is to the destination

- -

Parameters

-
    -
  • String str - : - -

    the string to write

    - -
    -
  • -
-
-
-
-
-
-

- Context([opts]) -

-

A reporting context that is passed to report implementations

- -

Parameters

-
    -
  • [Object] opts - (default null) - : - -

    opts options

    - -
    -
  • -
      -
    • [String] opts.dir - (default 'coverage') -

      opts.dir the reporting directory

      -
    • -
    • [Object] opts.watermarks - (default null) -

      opts.watermarks watermarks for -statements, lines, branches and functions

      -
    • -
    • [Function] opts.sourceFinder - (default fsLookup) -

      opts.sourceFinder a -function that returns source code given a file path. Defaults to -filesystem lookups based on path.

      -
    • -
    -
-

Instance members

-
- - - #classForPercent(type, value) - - -

returns the coverage class given a coverage -types and a percentage value.

- -
-
-
-
-

- classForPercent(type, value) -

-

returns the coverage class given a coverage - types and a percentage value.

- -

Parameters

-
    -
  • String type - : - -

    the coverage type, one of statements, functions, - branches, or lines

    - -
    -
  • -
  • Number value - : - -

    the percentage value

    - -
    -
  • -
-

Returns

- String - : - -

one of high, medium or low

- -
-
-
-
-
- - - #getSource(filePath) - - -

returns the source code for the specified file path or throws if -the source could not be found.

- -
-
-
-
-

- getSource(filePath) -

-

returns the source code for the specified file path or throws if - the source could not be found.

- -

Parameters

-
    -
  • String filePath - : - -

    the file path as found in a file coverage object

    - -
    -
  • -
-

Returns

- String - : - -

the source code

- -
-
-
-
-
- - - #getVisitor(partialVisitor) - - -

returns a full visitor given a partial one.

- -
-
-
-
-

- getVisitor(partialVisitor) -

-

returns a full visitor given a partial one.

- -

Parameters

-
    -
  • Object partialVisitor - : - -

    a partial visitor only having the functions of - interest to the caller. These functions are called with a scope that is the - supplied object.

    - -
    -
  • -
-

Returns

- Visitor - - - - -
-
-
-
- - - #getWriter - - -

returns a FileWriter implementation for reporting use. Also available -as the writer property on the context.

- -
-
-
-
-

- getWriter -

-

returns a FileWriter implementation for reporting use. Also available - as the writer property on the context.

- -

Returns

- Writer - - - - -
-
-
-
- - - #getXMLWriter(contentWriter) - - -

returns an XML writer for the supplied content writer

- -
-
-
-
-

- getXMLWriter(contentWriter) -

-

returns an XML writer for the supplied content writer

- -

Parameters

-
    -
  • ContentWriter contentWriter - : - -

    the content writer to which the returned XML writer - writes data

    - -
    -
  • -
-

Returns

- XMLWriter - - - - -
-
-
-
-
-

- FileContentWriter(fd) -

-

- Extends - ContentWriter -

-

a content writer that writes to a file

- -

Parameters

-
    -
  • Number fd - : - -

    the file descriptor

    - -
    -
  • -
-
-
-

- FileWriter(baseDir) -

-

utility for writing files under a specific directory

- -

Parameters

-
    -
  • String baseDir - : - -

    the base directory under which files should be written

    - -
    -
  • -
-

Instance members

-
- - - #copyFile(source, dest) - - -

copies a file from a source directory to a destination name

- -
-
-
-
-

- copyFile(source, dest) -

-

copies a file from a source directory to a destination name

- -

Parameters

-
    -
  • String source - : - -

    path to source file

    - -
    -
  • -
  • String dest - : - -

    relative path to destination file

    - -
    -
  • -
-
-
-
-
- - - #writeFile(file) - - -

returns a content writer for writing content to the supplied file.

- -
-
-
-
-

- writeFile(file) -

-

returns a content writer for writing content to the supplied file.

- -

Parameters

-
    -
  • String or file - : - -

    the relative path to the file or the special - values "-" or null for writing to the console

    - -
    -
  • -
-

Returns

- ContentWriter - - - - -
-
-
-
- - - #writerForDir(subdir) - - -

returns a FileWriter that is rooted at the supplied subdirectory

- -
-
-
-
-

- writerForDir(subdir) -

-

returns a FileWriter that is rooted at the supplied subdirectory

- -

Parameters

-
    -
  • String subdir - : - -

    the subdirectory under which to root the - returned FileWriter

    - -
    -
  • -
-

Returns

- FileWriter - - - - -
-
-
-
-
-

- ReportSource(coverageMap, opts) -

-

WIP

- -

Parameters

-
    -
  • coverageMap - : - - - -
  • -
  • opts - : - - - -
  • -
-
-
-

- Tree -

-

abstract base class for a coverage tree.

- -

Instance members

-
- - - #getRoot - - -

returns the root node of the tree

- -
-
-
-
-

- getRoot -

-

returns the root node of the tree

- -
-
-
-
- - - #visit(visitor, state) - - -

visits the tree depth-first with the supplied partial visitor

- -
-
-
-
-

- visit(visitor, state) -

-

visits the tree depth-first with the supplied partial visitor

- -

Parameters

-
    -
  • visitor - : - -

    a potentially partial visitor

    - -
    -
  • -
  • state - : - -

    the state to be passed around during tree traversal

    - -
    -
  • -
-
-
-
-
-
-

- Visitor(delegate) -

-

An object with methods that are called during the traversal of the coverage tree. -A visitor has the following methods that are called during tree traversal.

-
    -
  • onStart(root, state) - called before traversal begins
  • -
  • onSummary(node, state) - called for every summary node
  • -
  • onDetail(node, state) - called for every detail node
  • -
  • onSummaryEnd(node, state) - called after all children have been visited for -a summary node.
  • -
  • onEnd(root, state) - called after traversal ends
  • -
- -

Parameters

-
    -
  • delegate - : - -

    a partial visitor that only implements the methods of interest -The visitor object supplies the missing methods as noops. For example, reports -that only need the final coverage summary need implement onStart and nothing -else. Reports that use only detailed coverage information need implement onDetail -and nothing else.

    - -
    -
  • -
-
-
-

- XMLWriter(contentWriter) -

-

a utility class to produce well-formed, indented XML

- -

Parameters

-
    -
  • ContentWriter contentWriter - : - -

    the content writer that this utility wraps

    - -
    -
  • -
-

Instance members

-
- - - #closeAll - - -

closes all open tags and ends the document

- -
-
-
-
-

- closeAll -

-

closes all open tags and ends the document

- -
-
-
-
- - - #closeTag(name) - - -

closes an open XML tag.

- -
-
-
-
-

- closeTag(name) -

-

closes an open XML tag.

- -

Parameters

-
    -
  • String name - : - -

    tag name to close. This must match the writer's - notion of the tag that is currently open.

    - -
    -
  • -
-
-
-
-
- - - #inlineTag(name, [attrs], [content]) - - -

writes a tag and its value opening and closing it at the same time

- -
-
-
-
-

- inlineTag(name, [attrs], [content]) -

-

writes a tag and its value opening and closing it at the same time

- -

Parameters

-
    -
  • String name - : - -

    tag name

    - -
    -
  • -
  • [Object] attrs - (default null) - : - -

    attrs tag attributes

    - -
    -
  • -
  • [String] content - (default null) - : - -

    content optional tag content

    - -
    -
  • -
-
-
-
-
- - - #openTag(name, [attrs]) - - -

writes the opening XML tag with the supplied attributes

- -
-
-
-
-

- openTag(name, [attrs]) -

-

writes the opening XML tag with the supplied attributes

- -

Parameters

-
    -
  • String name - : - -

    tag name

    - -
    -
  • -
  • [Object] attrs - (default null) - : - -

    attrs attributes for the tag

    - -
    -
  • -
-
-
-
-
-
-

- visit(visitor, state) -

-

visit all nodes depth-first from this node down. Note that onStart -and onEnd are never called on the visitor even if the current -node is the root of the tree.

- -

Parameters

-
    -
  • visitor - : - -

    a full visitor that is called during tree traversal

    - -
    -
  • -
  • state - : - -

    optional state that is passed around

    - -
    -
  • -
-
-
-
-
-
-
- - - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/index.js deleted file mode 100644 index 87a8a22b6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/index.js +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -/** - * @module Exports - */ - -var summarizer = require('./lib/summarizer'), - context = require('./lib/context'), - watermarks = require('./lib/watermarks'); - -module.exports = { - /** - * returns a reporting context for the supplied options - * @param {Object} [opts=null] opts - * @returns {Context} - */ - createContext: function (opts) { - return context.create(opts); - }, - /** - * returns the default watermarks that would be used when not - * overridden - * @returns {Object} an object with `statements`, `functions`, `branches`, - * and `line` keys. Each value is a 2 element array that has the low and - * high watermark as percentages. - */ - getDefaultWatermarks: function () { - return watermarks.getDefault(); - } -}; -/** - * standard summary functions - */ -module.exports.summarizers = { - /** - * a summarizer that creates a flat tree with one root node and bunch of - * files directly under it - */ - flat: summarizer.createFlatSummary, - /** - * a summarizer that creates a hierarchical tree where the coverage summaries - * of each directly reflect the summaries of all subdirectories and files in it - */ - nested: summarizer.createNestedSummary, - /** - * a summarizer that creates a tree in which directories are not nested. - * Every subdirectory is a child of the root node and only reflects the - * coverage numbers for the files in it (i.e. excludes subdirectories). - * This is the default summarizer. - */ - pkg: summarizer.createPackageSummary -}; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/context.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/context.js deleted file mode 100644 index 034a2b107..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/context.js +++ /dev/null @@ -1,122 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var FileWriter = require('./file-writer'), - XMLWriter = require('./xml-writer'), - tree = require('./tree'), - watermarks = require('./watermarks'), - fs = require('fs'); - -function defaultSourceLookup(path) { - try { - return fs.readFileSync(path, 'utf8'); - } catch (ex) { - throw new Error('Unable to lookup source: ' + path + '(' + ex.message + ')'); - } -} - -function mergeWatermarks(specified, defaults) { - specified = specified || {}; - Object.keys(defaults).forEach(function (k) { - var specValue = specified[k]; - if (!(specValue && Array.isArray(specValue) && specValue.length === 2)) { - specified[k] = defaults[k]; - } - }); - return specified; -} -/** - * A reporting context that is passed to report implementations - * @param {Object} [opts=null] opts options - * @param {String} [opts.dir='coverage'] opts.dir the reporting directory - * @param {Object} [opts.watermarks=null] opts.watermarks watermarks for - * statements, lines, branches and functions - * @param {Function} [opts.sourceFinder=fsLookup] opts.sourceFinder a - * function that returns source code given a file path. Defaults to - * filesystem lookups based on path. - * @constructor - */ -function Context(opts) { - opts = opts || {}; - this.dir = opts.dir || 'coverage'; - this.watermarks = mergeWatermarks(opts.watermarks, watermarks.getDefault()); - this.sourceFinder = opts.sourceFinder || defaultSourceLookup; - this.data = {}; -} - -Object.defineProperty(Context.prototype, 'writer', { - enumerable: true, - get: function () { - if (!this.data.writer) { - this.data.writer = new FileWriter(this.dir); - } - return this.data.writer; - } -}); - -/** - * returns a FileWriter implementation for reporting use. Also available - * as the `writer` property on the context. - * @returns {Writer} - */ -Context.prototype.getWriter = function () { - return this.writer; -}; - -/** - * returns the source code for the specified file path or throws if - * the source could not be found. - * @param {String} filePath the file path as found in a file coverage object - * @returns {String} the source code - */ -Context.prototype.getSource = function (filePath) { - return this.sourceFinder(filePath); -}; - -/** - * returns the coverage class given a coverage - * types and a percentage value. - * @param {String} type - the coverage type, one of `statements`, `functions`, - * `branches`, or `lines` - * @param {Number} value - the percentage value - * @returns {String} one of `high`, `medium` or `low` - */ -Context.prototype.classForPercent = function (type, value) { - var watermarks = this.watermarks[type]; - if (!watermarks) { - return 'unknown'; - } - if (value < watermarks[0]) { - return 'low'; - } - if (value >= watermarks[1]) { - return 'high'; - } - return 'medium'; -}; -/** - * returns an XML writer for the supplied content writer - * @param {ContentWriter} contentWriter the content writer to which the returned XML writer - * writes data - * @returns {XMLWriter} - */ -Context.prototype.getXMLWriter = function (contentWriter) { - return new XMLWriter(contentWriter); -}; -/** - * returns a full visitor given a partial one. - * @param {Object} partialVisitor a partial visitor only having the functions of - * interest to the caller. These functions are called with a scope that is the - * supplied object. - * @returns {Visitor} - */ -Context.prototype.getVisitor = function (partialVisitor) { - return new tree.Visitor(partialVisitor); -}; - -module.exports = { - create: function (opts) { - return new Context(opts); - } -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/file-writer.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/file-writer.js deleted file mode 100644 index 790d23140..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/file-writer.js +++ /dev/null @@ -1,165 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var util = require('util'), - path = require('path'), - fs = require('fs'), - mkdirp = require('mkdirp'), - supportsColor = require('supports-color'), - isAbsolute = path.isAbsolute || function (p) { - return path.resolve(p) === path.normalize(p); - }; - -/** - * abstract interface for writing content - * @class ContentWriter - * @constructor - */ -/* istanbul ignore next: abstract class */ -function ContentWriter() { -} - -/** - * writes a string as-is to the destination - * @param {String} str the string to write - */ -/* istanbul ignore next: abstract class */ -ContentWriter.prototype.write = function () { - throw new Error('write: must be overridden'); -}; - -/** - * returns the colorized version of a string. Typically, - * content writers that write to files will return the - * same string and ones writing to a tty will wrap it in - * appropriate escape sequences. - * @param {String} str the string to colorize - * @param {String} clazz one of `high`, `medium` or `low` - * @returns {String} the colorized form of the string - */ -ContentWriter.prototype.colorize = function (str /*, clazz*/) { - return str; -}; - -/** - * writes a string appended with a newline to the destination - * @param {String} str the string to write - */ -ContentWriter.prototype.println = function (str) { - this.write(str + '\n'); -}; - -/** - * closes this content writer. Should be called after all writes are complete. - */ -ContentWriter.prototype.close = function () { -}; - -/** - * a content writer that writes to a file - * @param {Number} fd - the file descriptor - * @extends ContentWriter - * @constructor - */ -function FileContentWriter(fd) { - this.fd = fd; -} -util.inherits(FileContentWriter, ContentWriter); - -FileContentWriter.prototype.write = function (str) { - fs.writeSync(this.fd, str); -}; - -FileContentWriter.prototype.close = function () { - fs.closeSync(this.fd); -}; - -/** - * a content writer that writes to the console - * @extends ContentWriter - * @constructor - */ -function ConsoleWriter() { -} -util.inherits(ConsoleWriter, ContentWriter); - -ConsoleWriter.prototype.write = function (str) { - process.stdout.write(str); -}; - -ConsoleWriter.prototype.colorize = function (str, clazz) { - /* istanbul ignore next: different modes for CI and local */ - if (supportsColor) { - switch (clazz) { - case 'low' : - str = '\x1b[91m' + str + '\x1b[0m'; - break; - case 'medium': - str = '\x1b[93m' + str + '\x1b[0m'; - break; - case 'high': - str = '\x1b[92m' + str + '\x1b[0m'; - break; - } - } - return str; -}; - -/** - * utility for writing files under a specific directory - * @class FileWriter - * @param {String} baseDir the base directory under which files should be written - * @constructor - */ -function FileWriter(baseDir) { - if (!baseDir) { - throw new Error('baseDir must be specified'); - } - mkdirp.sync(baseDir); - this.baseDir = baseDir; -} -/** - * returns a FileWriter that is rooted at the supplied subdirectory - * @param {String} subdir the subdirectory under which to root the - * returned FileWriter - * @returns {FileWriter} - */ -FileWriter.prototype.writerForDir = function (subdir) { - if (isAbsolute(subdir)) { - throw new Error('Cannot create subdir writer for absolute path: ' + subdir); - } - return new FileWriter(this.baseDir + '/' + subdir); -}; -/** - * copies a file from a source directory to a destination name - * @param {String} source path to source file - * @param {String} dest relative path to destination file - */ -FileWriter.prototype.copyFile = function (source, dest) { - if (isAbsolute(dest)) { - throw new Error('Cannot write to absolute path: ' + dest); - } - dest = path.resolve(this.baseDir, dest); - mkdirp.sync(path.dirname(dest)); - fs.writeFileSync(dest, fs.readFileSync(source)); -}; -/** - * returns a content writer for writing content to the supplied file. - * @param {String|null} file the relative path to the file or the special - * values `"-"` or `null` for writing to the console - * @returns {ContentWriter} - */ -FileWriter.prototype.writeFile = function (file) { - if (file === null || file === '-') { - return new ConsoleWriter(); - } - if (isAbsolute(file)) { - throw new Error('Cannot write to absolute path: ' + file); - } - file = path.resolve(this.baseDir, file); - mkdirp.sync(path.dirname(file)); - return new FileContentWriter(fs.openSync(file, 'w')); -}; - -module.exports = FileWriter; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/path.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/path.js deleted file mode 100644 index 9d97e15e3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/path.js +++ /dev/null @@ -1,161 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -var path = require('path'), - parsePath = require('path-parse'), - SEP = path.sep || /* istanbul ignore next */ '/', - origParser = parsePath, - origSep = SEP; - -function makeRelativeNormalizedPath(str, sep) { - var parsed = parsePath(str), - root = parsed.root, - dir, - file = parsed.base, - quoted, - pos; - - // handle a weird windows case separately - if (sep === '\\') { - pos = root.indexOf(':\\'); - if (pos >= 0) { - root = root.substring(0, pos + 2); - } - } - dir = parsed.dir.substring(root.length); - - if (str === '') { - return []; - } - - if (sep !== '/') { - quoted = new RegExp(sep.replace(/\W/g, '\\$&'), 'g'); - dir = dir.replace(quoted, '/'); - file = file.replace(quoted, '/'); // excessively paranoid? - } - - if (dir !== '') { - dir = dir + '/' + file; - } else { - dir = file; - } - if (dir.substring(0,1) === '/') { - dir = dir.substring(1); - } - dir = dir.split(/\/+/); - return dir; -} - -function Path(strOrArray) { - if (Array.isArray(strOrArray)) { - this.v = strOrArray; - } else if (typeof strOrArray === "string") { - this.v = makeRelativeNormalizedPath(strOrArray, SEP); - } else { - throw new Error('Invalid Path argument must be string or array:' + strOrArray); - } -} - -Path.prototype.toString = function () { - return this.v.join('/'); -}; - -Path.prototype.hasParent = function () { - return this.v.length > 0; -}; - -Path.prototype.parent = function () { - if (!this.hasParent()) { - throw new Error('Unable to get parent for 0 elem path'); - } - var p = this.v.slice(); - p.pop(); - return new Path(p); -}; - -Path.prototype.elements = function () { - return this.v.slice(); -}; - -Path.prototype.contains = function (other) { - var i; - if (other.length > this.length) { - return false; - } - for (i = 0; i < other.length; i += 1) { - if (this.v[i] !== other.v[i]) { - return false; - } - } - return true; -}; - -Path.prototype.ancestorOf = function (other) { - return other.contains(this) && other.length !== this.length; -}; - -Path.prototype.descendantOf = function (other) { - return this.contains(other) && other.length !== this.length; -}; - -Path.prototype.commonPrefixPath = function (other) { - var len = this.length > other.length ? other.length : this.length, - i, - ret = []; - - for (i = 0; i < len; i +=1 ) { - if (this.v[i] === other.v[i]) { - ret.push(this.v[i]); - } else { - break; - } - } - return new Path(ret); -}; - -['push', 'pop', 'shift', 'unshift', 'splice'].forEach(function (f) { - Path.prototype[f] = function () { - var args = Array.prototype.slice.call(arguments), - v = this.v; - return v[f].apply(v, args); - }; -}); - -Path.compare = function (a, b) { - var al = a.length, - bl = b.length, - astr, - bstr; - if (al < bl) { - return -1; - } - if (al > bl) { - return 1; - } - astr = a.toString(); - bstr = b.toString(); - return astr < bstr ? -1 : astr > bstr ? 1 : 0; -}; - -Object.defineProperty(Path.prototype, 'length', { - enumerable: true, - get: function () { - return this.v.length; - } -}); - -module.exports = Path; -Path.tester = { - setParserAndSep: function (p, sep) { - parsePath = p; - SEP = sep; - }, - reset: function () { - parsePath = origParser; - SEP = origSep; - } -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/summarizer.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/summarizer.js deleted file mode 100644 index ee353b317..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/summarizer.js +++ /dev/null @@ -1,284 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -var Path = require('./path'), - util = require('util'), - tree = require('./tree'), - coverage = require('istanbul-lib-coverage'), - BaseNode = tree.Node, - BaseTree = tree.Tree; - -function ReportNode(path, fileCoverage) { - this.path = path; - this.parent = null; - this.fileCoverage = fileCoverage; - this.children = []; -} - -util.inherits(ReportNode, BaseNode); - -ReportNode.prototype.addChild = function (child) { - child.parent = this; - this.children.push(child); -}; - -ReportNode.prototype.asRelative = function (p) { - /* istanbul ignore if */ - if (p.substring(0,1) === '/') { - return p.substring(1); - } - return p; -}; - -ReportNode.prototype.getQualifiedName = function () { - return this.asRelative(this.path.toString()); -}; - -ReportNode.prototype.getRelativeName = function () { - var parent = this.getParent(), - myPath = this.path, - relPath, - i, - parentPath = parent ? parent.path : new Path([]); - if (parentPath.ancestorOf(myPath)) { - relPath = new Path(myPath.elements()); - for (i = 0; i < parentPath.length; i += 1) { - relPath.shift(); - } - return this.asRelative(relPath.toString()); - } - return this.asRelative(this.path.toString()); -}; - -ReportNode.prototype.getParent = function () { - return this.parent; -}; - -ReportNode.prototype.getChildren = function () { - return this.children; -}; - -ReportNode.prototype.isSummary = function () { - return !this.fileCoverage; -}; - -ReportNode.prototype.getFileCoverage = function () { - return this.fileCoverage; -}; - -ReportNode.prototype.getCoverageSummary = function (filesOnly) { - var cacheProp = 'c_' + (filesOnly ? 'files' : 'full'), - summary; - - if (this.hasOwnProperty(cacheProp)) { - return this[cacheProp]; - } - - if (!this.isSummary()) { - summary = this.getFileCoverage().toSummary(); - } else { - var count = 0; - summary = coverage.createCoverageSummary(); - this.getChildren().forEach(function (child) { - if (filesOnly && child.isSummary()) { - return; - } - count += 1; - summary.merge(child.getCoverageSummary(filesOnly)); - }); - if (count === 0 && filesOnly) { - summary = null; - } - } - this[cacheProp] = summary; - return summary; -}; - -function treeFor(root, childPrefix) { - var tree = new BaseTree(), - visitor, - maybePrefix = function (node) { - if (childPrefix && !node.isRoot()) { - node.path.unshift(childPrefix); - } - }; - tree.getRoot = function () { - return root; - }; - visitor = { - onDetail: function (node) { - maybePrefix(node); - }, - onSummary: function (node) { - maybePrefix(node); - node.children.sort(function (a, b) { - var astr = a.path.toString(), - bstr = b.path.toString(); - return astr < bstr ? -1 : astr > bstr ? 1: /* istanbul ignore next */ 0; - }); - } - }; - tree.visit(visitor); - return tree; -} - -function findCommonParent(paths) { - if (paths.length === 0) { - return new Path([]); - } - var common = paths[0], - i; - - for (i = 1; i < paths.length; i += 1) { - common = common.commonPrefixPath(paths[i]); - if (common.length === 0) { - break; - } - } - return common; -} - -function toInitialList(coverageMap) { - var ret = [], - commonParent; - coverageMap.files().forEach(function (filePath) { - var p = new Path(filePath), - coverage = coverageMap.fileCoverageFor(filePath); - ret.push({ - filePath: filePath, - path: p, - fileCoverage: coverage - }); - }); - commonParent = findCommonParent(ret.map(function (o) { return o.path.parent(); })); - if (commonParent.length > 0) { - ret.forEach(function (o) { - o.path.splice(0, commonParent.length); - }); - } - return { - list: ret, - commonParent: commonParent - }; -} - -function toDirParents(list) { - var nodeMap = {}, - parentNodeList = []; - list.forEach(function (o) { - var node = new ReportNode(o.path, o.fileCoverage), - parentPath = o.path.parent(), - parent = nodeMap[parentPath.toString()]; - - if (!parent) { - parent = new ReportNode(parentPath); - nodeMap[parentPath.toString()] = parent; - parentNodeList.push(parent); - } - parent.addChild(node); - }); - return parentNodeList; -} - -function foldIntoParents(nodeList) { - var ret = [], i, j; - - // sort by longest length first - nodeList.sort(function (a, b) { - return -1 * Path.compare(a.path , b.path); - }); - - for (i = 0; i < nodeList.length; i += 1) { - var first = nodeList[i], - inserted = false; - - for (j = i + 1; j < nodeList.length; j += 1) { - var second = nodeList[j]; - if (second.path.ancestorOf(first.path)) { - second.addChild(first); - inserted = true; - break; - } - } - - if (!inserted) { - ret.push(first); - } - } - return ret; -} - -function createRoot() { - return new ReportNode(new Path([])); -} - -function createNestedSummary(coverageMap) { - var flattened = toInitialList(coverageMap), - dirParents = toDirParents(flattened.list), - topNodes = foldIntoParents(dirParents), - root; - - if (topNodes.length === 0) { - return treeFor(new ReportNode([])); - } - - if (topNodes.length === 1) { - return treeFor(topNodes[0]); - } - - root = createRoot(); - topNodes.forEach(function (node) { - root.addChild(node); - }); - return treeFor(root); -} - -function createPackageSummary(coverageMap) { - var flattened = toInitialList(coverageMap), - dirParents = toDirParents(flattened.list), - common = flattened.commonParent, - prefix, - root; - - if (dirParents.length === 1) { - root = dirParents[0]; - } else { - root = createRoot(); - // if one of the dirs is itself the root, - // then we need to create a top-level dir - dirParents.forEach(function (dp) { - if (dp.path.length === 0) { - prefix = 'root'; - } - }); - if (prefix && common.length > 0) { - prefix = common.elements()[common.elements().length - 1]; - } - dirParents.forEach(function (node) { - root.addChild(node); - }); - } - return treeFor(root, prefix); -} - -function createFlatSummary(coverageMap) { - var flattened = toInitialList(coverageMap), - list = flattened.list, - root; - - root = createRoot(); - list.forEach(function (o) { - var node = new ReportNode(o.path, o.fileCoverage); - root.addChild(node); - }); - return treeFor(root); -} - -module.exports = { - createNestedSummary: createNestedSummary, - createPackageSummary: createPackageSummary, - createFlatSummary: createFlatSummary -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/tree.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/tree.js deleted file mode 100644 index 190808d18..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/tree.js +++ /dev/null @@ -1,167 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -var util = require('util'); -/** - * An object with methods that are called during the traversal of the coverage tree. - * A visitor has the following methods that are called during tree traversal. - * - * * `onStart(root, state)` - called before traversal begins - * * `onSummary(node, state)` - called for every summary node - * * `onDetail(node, state)` - called for every detail node - * * `onSummaryEnd(node, state)` - called after all children have been visited for - * a summary node. - * * `onEnd(root, state)` - called after traversal ends - * - * @param delegate - a partial visitor that only implements the methods of interest - * The visitor object supplies the missing methods as noops. For example, reports - * that only need the final coverage summary need implement `onStart` and nothing - * else. Reports that use only detailed coverage information need implement `onDetail` - * and nothing else. - * @constructor - */ -function Visitor(delegate) { - this.delegate = delegate; -} - -['Start', 'End', 'Summary', 'SummaryEnd', 'Detail' ].forEach(function (k) { - var f = 'on' + k; - Visitor.prototype[f] = function (node, state) { - if (this.delegate[f] && typeof this.delegate[f] === 'function') { - this.delegate[f].call(this.delegate, node, state); - } - }; -}); - -function CompositeVisitor(visitors) { - if (!Array.isArray(visitors)) { - visitors = [visitors]; - } - this.visitors = visitors.map(function (v) { - if (v instanceof Visitor) { - return v; - } - return new Visitor(v); - }); -} - -util.inherits(CompositeVisitor, Visitor); - -['Start', 'Summary', 'SummaryEnd', 'Detail', 'End'].forEach(function (k) { - var f = 'on' + k; - CompositeVisitor.prototype[f] = function (node, state) { - this.visitors.forEach(function (v) { - v[f](node, state); - }); - }; -}); - -function Node() { -} - -/* istanbul ignore next: abstract method */ -Node.prototype.getQualifiedName = function () { - throw new Error('getQualifiedName must be overridden'); -}; - -/* istanbul ignore next: abstract method */ -Node.prototype.getRelativeName = function () { - throw new Error('getRelativeName must be overridden'); -}; - -/* istanbul ignore next: abstract method */ -Node.prototype.isRoot = function () { - return !this.getParent(); -}; - -/* istanbul ignore next: abstract method */ -Node.prototype.getParent = function () { - throw new Error('getParent must be overridden'); -}; - -/* istanbul ignore next: abstract method */ -Node.prototype.getChildren = function () { - throw new Error('getChildren must be overridden'); -}; - -/* istanbul ignore next: abstract method */ -Node.prototype.isSummary = function () { - throw new Error('isSummary must be overridden'); -}; - -/* istanbul ignore next: abstract method */ -Node.prototype.getCoverageSummary = function (/* filesOnly */) { - throw new Error('getCoverageSummary must be overridden'); -}; - -/* istanbul ignore next: abstract method */ -Node.prototype.getFileCoverage = function () { - throw new Error('getFileCoverage must be overridden'); -}; -/** - * visit all nodes depth-first from this node down. Note that `onStart` - * and `onEnd` are never called on the visitor even if the current - * node is the root of the tree. - * @param visitor a full visitor that is called during tree traversal - * @param state optional state that is passed around - */ -Node.prototype.visit = function (visitor, state) { - - var that = this, - visitChildren = function () { - that.getChildren().forEach(function (child) { - child.visit(visitor, state); - }); - }; - - if (this.isSummary()) { - visitor.onSummary(this, state); - } else { - visitor.onDetail(this, state); - } - - visitChildren(); - - if (this.isSummary()) { - visitor.onSummaryEnd(this, state); - } -}; - -/** - * abstract base class for a coverage tree. - * @constructor - */ -function Tree() { -} - -/** - * returns the root node of the tree - */ -/* istanbul ignore next: abstract method */ -Tree.prototype.getRoot = function () { - throw new Error('getRoot must be overridden'); -}; - -/** - * visits the tree depth-first with the supplied partial visitor - * @param visitor - a potentially partial visitor - * @param state - the state to be passed around during tree traversal - */ -Tree.prototype.visit = function (visitor, state) { - if (!(visitor instanceof Visitor)) { - visitor = new Visitor(visitor); - } - visitor.onStart(this.getRoot(), state); - this.getRoot().visit(visitor, state); - visitor.onEnd(this.getRoot(), state); -}; - -module.exports = { - Tree: Tree, - Node: Node, - Visitor: Visitor, - CompositeVisitor: CompositeVisitor -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/watermarks.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/watermarks.js deleted file mode 100644 index a522129f1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/watermarks.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -module.exports = { - getDefault: function () { - return { - statements: [50, 80], - functions: [50, 80], - branches: [50, 80], - lines: [50, 80] - }; - } -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/xml-writer.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/xml-writer.js deleted file mode 100644 index 7f372fb3c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/lib/xml-writer.js +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var INDENT = ' '; - -/** - * a utility class to produce well-formed, indented XML - * @param {ContentWriter} contentWriter the content writer that this utility wraps - * @constructor - */ -function XMLWriter(contentWriter) { - this.cw = contentWriter; - this.stack = []; -} - -function attrString(attrs) { - if (!attrs) { - return ''; - } - var ret = []; - Object.keys(attrs).forEach(function (k) { - var v = attrs[k]; - ret.push(k + '="' + v + '"'); - }); - return ret.length === 0 ? '' : ' ' + ret.join(' '); -} - -XMLWriter.prototype.indent = function (str) { - return this.stack.map(function () { return INDENT; }).join('') + str; -}; - -/** - * writes the opening XML tag with the supplied attributes - * @param {String} name tag name - * @param {Object} [attrs=null] attrs attributes for the tag - */ -XMLWriter.prototype.openTag = function (name, attrs) { - var str = this.indent('<' + name + attrString(attrs) + '>'); - this.cw.println(str); - this.stack.push(name); -}; - -/** - * closes an open XML tag. - * @param {String} name - tag name to close. This must match the writer's - * notion of the tag that is currently open. - */ -XMLWriter.prototype.closeTag = function (name) { - if (this.stack.length === 0) { - throw new Error('Attempt to close tag ' + name + ' when not opened'); - } - var stashed = this.stack.pop(), - str = ''; - - if (stashed !== name) { - throw new Error('Attempt to close tag ' + name + ' when ' + stashed + ' was the one open'); - } - this.cw.println(this.indent(str)); -}; -/** - * writes a tag and its value opening and closing it at the same time - * @param {String} name tag name - * @param {Object} [attrs=null] attrs tag attributes - * @param {String} [content=null] content optional tag content - */ -XMLWriter.prototype.inlineTag = function (name, attrs, content) { - var str = '<' + name + attrString(attrs); - if (content) { - str += '>' + content + ''; - } else { - str += '/>'; - } - str = this.indent(str); - this.cw.println(str); -}; -/** - * closes all open tags and ends the document - */ -XMLWriter.prototype.closeAll = function () { - var that = this; - this.stack.slice().reverse().forEach(function (name) { - that.closeTag(name); - }); -}; - -module.exports = XMLWriter; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/browser.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/browser.js deleted file mode 100644 index ae7c87b17..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/browser.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -module.exports = false; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/index.js deleted file mode 100644 index 113040d63..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/index.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; -var hasFlag = require('has-flag'); - -var support = function (level) { - if (level === 0) { - return false; - } - - return { - level: level, - hasBasic: true, - has256: level >= 2, - has16m: level >= 3 - }; -}; - -var supportLevel = (function () { - if (hasFlag('no-color') || - hasFlag('no-colors') || - hasFlag('color=false')) { - return 0; - } - - if (hasFlag('color=16m') || - hasFlag('color=full') || - hasFlag('color=truecolor')) { - return 3; - } - - if (hasFlag('color=256')) { - return 2; - } - - if (hasFlag('color') || - hasFlag('colors') || - hasFlag('color=true') || - hasFlag('color=always')) { - return 1; - } - - if (process.stdout && !process.stdout.isTTY) { - return 0; - } - - if (process.platform === 'win32') { - return 1; - } - - if ('COLORTERM' in process.env) { - return 1; - } - - if (process.env.TERM === 'dumb') { - return 0; - } - - if (/^xterm-256(?:color)?/.test(process.env.TERM)) { - return 2; - } - - if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { - return 1; - } - - return 0; -})(); - -if (supportLevel === 0 && 'FORCE_COLOR' in process.env) { - supportLevel = 1; -} - -module.exports = process && support(supportLevel); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/license b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/package.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/package.json deleted file mode 100644 index 8210417b1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/package.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "_args": [ - [ - "supports-color@^3.1.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report" - ] - ], - "_from": "supports-color@>=3.1.2 <4.0.0", - "_id": "supports-color@3.1.2", - "_inCache": true, - "_installable": true, - "_location": "/istanbul-lib-report/supports-color", - "_nodeVersion": "4.1.1", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.14.4", - "_phantomChildren": {}, - "_requested": { - "name": "supports-color", - "raw": "supports-color@^3.1.2", - "rawSpec": "^3.1.2", - "scope": null, - "spec": ">=3.1.2 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul-lib-report" - ], - "_resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "_shasum": "72a262894d9d408b956ca05ff37b2ed8a6e2a2d5", - "_shrinkwrap": null, - "_spec": "supports-color@^3.1.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/chalk/supports-color/issues" - }, - "dependencies": { - "has-flag": "^1.0.0" - }, - "description": "Detect whether a terminal supports color", - "devDependencies": { - "mocha": "*", - "require-uncached": "^1.0.2", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "72a262894d9d408b956ca05ff37b2ed8a6e2a2d5", - "tarball": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz" - }, - "engines": { - "node": ">=0.8.0" - }, - "files": [ - "index.js", - "browser.js" - ], - "gitHead": "d9e363732f48ad2bc6b936357246b55e136aa989", - "homepage": "https://github.com/chalk/supports-color", - "keywords": [ - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "ansi", - "styles", - "tty", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "support", - "supports", - "capability", - "detect", - "truecolor", - "16m", - "million" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - { - "email": "jappelman@xebia.com", - "name": "jbnicolai" - } - ], - "name": "supports-color", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/chalk/supports-color.git" - }, - "scripts": { - "test": "xo && mocha", - "travis": "mocha" - }, - "version": "3.1.2", - "xo": { - "envs": [ - "node", - "mocha" - ] - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/readme.md b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/readme.md deleted file mode 100644 index f7bae4c54..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/node_modules/supports-color/readme.md +++ /dev/null @@ -1,60 +0,0 @@ -# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color) - -> Detect whether a terminal supports color - - -## Install - -``` -$ npm install --save supports-color -``` - - -## Usage - -```js -var supportsColor = require('supports-color'); - -if (supportsColor) { - console.log('Terminal supports color'); -} - -if (supportsColor.has256) { - console.log('Terminal supports 256 colors'); -} - -if (supportsColor.has16m) { - console.log('Terminal supports 16 million colors (truecolor)'); -} -``` - - -## API - -Returns an `object`, or `false` if color is not supported. - -The returned object specifies a level of support for color through a `.level` property and a corresponding flag: - -- `.level = 1` and `.hasBasic = true`: Basic color support (16 colors) -- `.level = 2` and `.has256 = true`: 256 color support -- `.level = 3` and `.has16m = true`: 16 million (truecolor) support - - -## Info - -It obeys the `--color` and `--no-color` CLI flags. - -For situations where using `--color` is not possible, add an environment variable `FORCE_COLOR` with any value to force color. Trumps `--no-color`. - -Explicit 256/truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively. - - -## Related - -- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/package.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/package.json deleted file mode 100644 index dcaa442e9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "istanbul-lib-report@^1.0.0-alpha", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api" - ] - ], - "_from": "istanbul-lib-report@>=1.0.0-alpha <2.0.0", - "_id": "istanbul-lib-report@1.0.0-alpha.3", - "_inCache": true, - "_installable": true, - "_location": "/istanbul-lib-report", - "_nodeVersion": "0.10.26", - "_npmUser": { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - }, - "_npmVersion": "2.12.0", - "_phantomChildren": { - "has-flag": "1.0.0" - }, - "_requested": { - "name": "istanbul-lib-report", - "raw": "istanbul-lib-report@^1.0.0-alpha", - "rawSpec": "^1.0.0-alpha", - "scope": null, - "spec": ">=1.0.0-alpha <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul-api" - ], - "_resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz", - "_shasum": "32d5f6ec7f33ca3a602209e278b2e6ff143498af", - "_shrinkwrap": null, - "_spec": "istanbul-lib-report@^1.0.0-alpha", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api", - "author": { - "email": "kananthmail-github@yahoo.com", - "name": "Krishnan Anantheswaran" - }, - "bugs": { - "url": "https://github.com/istanbuljs/istanbul-lib-report/issues" - }, - "dependencies": { - "async": "^1.4.2", - "istanbul-lib-coverage": "^1.0.0-alpha", - "mkdirp": "^0.5.1", - "path-parse": "^1.0.5", - "rimraf": "^2.4.3", - "supports-color": "^3.1.2" - }, - "description": "Base reporting library for istanbul", - "devDependencies": { - "chai": "^3.0.0", - "coveralls": "^2.11.4", - "istanbul": "^0.4.0", - "jshint": "^2.8.0", - "mocha": "^2.3.3" - }, - "directories": {}, - "dist": { - "shasum": "32d5f6ec7f33ca3a602209e278b2e6ff143498af", - "tarball": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz" - }, - "gitHead": "f41bab23a361810d42dc9ede5ed51c6af497a50c", - "homepage": "https://github.com/istanbuljs/istanbul-lib-report", - "keywords": [ - "istanbul", - "report", - "api", - "lib" - ], - "license": "BSD-3-Clause", - "main": "index.js", - "maintainers": [ - { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - } - ], - "name": "istanbul-lib-report", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/istanbuljs/istanbul-lib-report.git" - }, - "scripts": { - "fast": "mocha test/", - "pretest": "jshint index.js lib/ test/", - "test": "istanbul cover -x 'docs/**' --include-all-sources --print=both _mocha -- test/", - "xposttest": "istanbul check-coverage --statements 95 --branches 80" - }, - "version": "1.0.0-alpha.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/.doc.yml b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/.doc.yml deleted file mode 100644 index dbf917bf9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/.doc.yml +++ /dev/null @@ -1,3 +0,0 @@ -order: - - Exports - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/.editorconfig b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/.editorconfig deleted file mode 100644 index 7f18d61b4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/.editorconfig +++ /dev/null @@ -1,16 +0,0 @@ -root = true - -[*] - -# Change these settings to your own preference -indent_style = space -indent_size = 2 - -# We recommend you to keep these unchanged -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[*.md] -trim_trailing_whitespace = false diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/CHANGELOG.md deleted file mode 100644 index 2f93a1e58..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/CHANGELOG.md +++ /dev/null @@ -1,41 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - - -# [1.1.0](https://github.com/istanbuljs/istanbul-lib-source-maps/compare/v1.0.2...v1.1.0) (2016-11-10) - - -### Features - -* read and apply any input source maps stored with coverage data ([#4](https://github.com/istanbuljs/istanbul-lib-source-maps/issues/4)) ([aea405b](https://github.com/istanbuljs/istanbul-lib-source-maps/commit/aea405b)) - - - - -## [1.0.2](https://github.com/istanbuljs/istanbul-lib-source-maps/compare/v1.0.1...v1.0.2) (2016-10-03) - - -### Bug Fixes - -* broken mapped coverage report ([#6](https://github.com/istanbuljs/istanbul-lib-source-maps/issues/6)) ([d9dd738](https://github.com/istanbuljs/istanbul-lib-source-maps/commit/d9dd738)) - - - - -## [1.0.1](https://github.com/istanbuljs/istanbul-lib-source-maps/compare/v1.0.0...v1.0.1) (2016-09-13) - - -### Bug Fixes - -* position validation shouldn't throw away locations with 0 ([#5](https://github.com/istanbuljs/istanbul-lib-source-maps/issues/5)) ([ac4b72c](https://github.com/istanbuljs/istanbul-lib-source-maps/commit/ac4b72c)) - - - - -# [1.0.0](https://github.com/istanbuljs/istanbul-lib-source-maps/compare/v1.0.0-alpha.9...v1.0.0) (2016-08-31) - - -### Bug Fixes - -* discard more bad source map positions ([#3](https://github.com/istanbuljs/istanbul-lib-source-maps/issues/3)) ([ed7b27f](https://github.com/istanbuljs/istanbul-lib-source-maps/commit/ed7b27f)) diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/LICENSE b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/LICENSE deleted file mode 100644 index c05aaafba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright 2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/README.md b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/README.md deleted file mode 100644 index 4959142fb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/README.md +++ /dev/null @@ -1,6 +0,0 @@ -istanbul-lib-source-maps -======================== - -[![Build Status](https://travis-ci.org/istanbuljs/istanbul-lib-source-maps.svg)](https://travis-ci.org/istanbuljs/istanbul-lib-source-maps) - -Source map support for istanbul. Extremely immature at this point. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/index.js deleted file mode 100644 index 225bf5916..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -var MapStore = require('./lib/map-store').MapStore; -/** - * @module Exports - */ -module.exports = { - createSourceMapStore: function (opts) { - return new MapStore(opts); - } -}; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/map-store.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/map-store.js deleted file mode 100644 index 596b8ed7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/map-store.js +++ /dev/null @@ -1,163 +0,0 @@ -/* - Copyright 2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -var path = require('path'), - fs = require('fs'), - pathutils = require('./pathutils'), - sourceStore = require('./source-store'), - transformer = require('./transformer'), - SMC = require('source-map').SourceMapConsumer; - -/** - * tracks source maps for registered files - * @param {Object} opts [opts=undefined] options. - * @param {Boolean} opts.verbose [opts.verbose=false] verbose mode - * @param {String} opts.baseDir [opts.baseDir=null] alternate base directory - * to resolve sourcemap files - * @param {String} opts.sourceStore [opts.sourceStore='memory'] - store that tracks - * embedded sources found in source maps, one of 'memory' or 'file' - * @param {String} opts.tmpdir [opts.tmpdir=undefined] - temporary directory - * to use for storing files. - * @constructor - */ -function MapStore(opts) { - opts = opts || {}; - this.baseDir = opts.baseDir || null; - this.verbose = opts.verbose || false; - this.sourceStore = sourceStore.create(opts.sourceStore, { tmpdir: opts.tmpdir}); - this.data = {}; -} -/** - * registers a source map URL with this store. It makes some input sanity checks - * and silently fails on malformed input. - * @param transformedFilePath - the file path for which the source map is valid. - * This must *exactly* match the path stashed for the coverage object to be - * useful. - * @param sourceMapUrl - the source map URL, **not** a comment - */ -MapStore.prototype.registerURL = function (transformedFilePath, sourceMapUrl) { - var d = 'data:', - b64 = 'base64,', - pos; - - if (sourceMapUrl.length > d.length && sourceMapUrl.substring(0, d.length) === d) { - pos = sourceMapUrl.indexOf(b64); - if (pos > 0) { - this.data[transformedFilePath] = { - type: 'encoded', - data: sourceMapUrl.substring(pos + b64.length) - }; - } else { - console.error('Unable to interpret source map URL: ', sourceMapUrl); - } - return; - } - var dir = path.dirname(path.resolve(transformedFilePath)), - file = path.resolve(dir, sourceMapUrl); - this.data[transformedFilePath] = { type: 'file', data: file }; -}; -/** - * registers a source map object with this store. Makes some basic sanity checks - * and silently fails on malformed input. - * @param transformedFilePath - the file path for which the source map is valid - * @param sourceMap - the source map object - */ -MapStore.prototype.registerMap = function (transformedFilePath, sourceMap) { - if (sourceMap && sourceMap.version) { - this.data[transformedFilePath] = { type: 'object', data: sourceMap }; - } else { - console.error('Invalid source map object', sourceMap); - } -}; -/** - * transforms the coverage map provided into one that refers to original - * sources when valid mappings have been registered with this store. - * @param {CoverageMap} coverageMap - the coverage map to transform - * @returns {Object} an object with 2 properties. `map` for the transformed - * coverage map and `sourceFinder` which is a function to return the source - * text for a file. - */ -MapStore.prototype.transformCoverage = function (coverageMap) { - var that = this, - mappedCoverage, - sourceFinder; - - sourceFinder = function (filePath) { - var content = that.sourceStore.getSource(filePath); - if (content !== null) { - return content; - } - if (pathutils.isAbsolute(filePath)) { - return fs.readFileSync(filePath, 'utf8'); - } - return fs.readFileSync(pathutils.asAbsolute(filePath, that.baseDir)); - }; - - coverageMap.files().forEach(function (file) { - var coverage = coverageMap.fileCoverageFor(file); - if (coverage.data.inputSourceMap && !that.data[file]) { - that.registerMap(file, coverage.data.inputSourceMap); - } - }); - - if (Object.keys(this.data).length === 0) { - return { - map: coverageMap, - sourceFinder: sourceFinder - }; - } - mappedCoverage = transformer.create(function (filePath) { - try { - if (!that.data[filePath]) { - return null; - } - var d = that.data[filePath], - obj, - smc; - - if (d.type === 'file') { - obj = JSON.parse(fs.readFileSync(d.data, 'utf8')); - } else if (d.type === 'encoded') { - obj = JSON.parse(new Buffer(d.data, 'base64').toString()); - } else { - obj = d.data; - } - smc = new SMC(obj); - smc.sources.forEach(function (s) { - var content = smc.sourceContentFor(s), - sourceFilePath = pathutils.relativeTo(s, filePath); - if (content) { - that.sourceStore.registerSource(sourceFilePath, content); - } - }); - return smc; - } catch (ex) { - console.error('Error returning source map for ' + filePath); - console.error(ex.message || ex); - if (this.verbose) { - console.error(ex.stack); - } - return null; - } - }).transform(coverageMap); - - return { - map: mappedCoverage, - sourceFinder: sourceFinder - }; -}; - -/** - * disposes temporary resources allocated by this map store - */ -MapStore.prototype.dispose = function () { - this.sourceStore.dispose(); -}; - -module.exports = { - MapStore: MapStore -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/mapped.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/mapped.js deleted file mode 100644 index fac8d7d5f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/mapped.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - Copyright 2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -var FileCoverage = require('istanbul-lib-coverage').classes.FileCoverage, - util = require('util'); - -function MappedCoverage(pathOrObj) { - FileCoverage.call(this, pathOrObj); - this.meta = { - last: { - s: 0, - f: 0, - b: 0 - }, - seen: {} - }; -} - -util.inherits(MappedCoverage, FileCoverage); - -function locString(loc) { - return [loc.start.line, loc.start.column, loc.end.line, loc.end.column].join(':'); -} - -MappedCoverage.prototype.addStatement = function (loc, hits) { - var key = 's:' + locString(loc), - meta = this.meta, - index = meta.seen[key]; - - if (index === undefined) { - index = meta.last.s; - meta.last.s += 1; - meta.seen[key] = index; - this.statementMap[index] = this.cloneLocation(loc); - } - this.s[index] = this.s[index] || 0; - this.s[index] += hits; - return index; -}; - -MappedCoverage.prototype.addFunction = function (name, decl, loc, hits) { - var key = 'f:' + locString(decl), - meta = this.meta, - index = meta.seen[key]; - - if (index === undefined) { - index = meta.last.f; - meta.last.f += 1; - meta.seen[key] = index; - name = name || '(unknown_' + index + ')'; - this.fnMap[index] = { - name: name, - decl: this.cloneLocation(decl), - loc: this.cloneLocation(loc) - }; - } - this.f[index] = this.f[index] || 0; - this.f[index] += hits; - return index; -}; - -MappedCoverage.prototype.addBranch = function (type, loc, branchLocations, hits) { - var key = ['b'], - meta = this.meta, - that = this, - index, - i; - - branchLocations.forEach(function (l) { - key.push(locString(l)); - }); - - key = key.join(':'); - index = meta.seen[key]; - if (index === undefined) { - index = meta.last.b; - meta.last.b += 1; - meta.seen[key] = index; - this.branchMap[index] = { - loc: loc, - type: type, - locations: branchLocations.map(function (l) { - return that.cloneLocation(l); - }) - }; - } - - if (!this.b[index]) { - this.b[index] = []; - branchLocations.forEach(function () { - that.b[index].push(0); - }); - } - for (i = 0; i < hits.length; i += 1) { - that.b[index][i] += hits[i]; - } - return index; -}; - -// returns a clone of the location object with only -// the attributes of interest -MappedCoverage.prototype.cloneLocation = function (loc) { - return { - start: { - line: loc.start.line, - column: loc.start.column - }, - end: { - line: loc.end.line, - column: loc.end.column - } - }; -}; - -module.exports = { - MappedCoverage: MappedCoverage -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/pathutils.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/pathutils.js deleted file mode 100644 index c72eb6ecf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/pathutils.js +++ /dev/null @@ -1,17 +0,0 @@ -var path = require('path'), - isAbsolute = function (p) { - if (path.isAbsolute) { - return path.isAbsolute(p); - } - return path.resolve(p) === path.normalize(p); - }; - -exports.isAbsolute = isAbsolute; - -exports.asAbsolute = function (file, baseDir) { - return isAbsolute(file) ? file : path.resolve(baseDir || process.cwd, file); -}; - -exports.relativeTo = function (file, origFile) { - return isAbsolute(file) ? file : path.resolve(path.dirname(origFile), file); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/source-store.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/source-store.js deleted file mode 100644 index cb84e9ec8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/source-store.js +++ /dev/null @@ -1,80 +0,0 @@ -var util = require('util'), - os = require('os'), - path = require('path'), - mkdirp = require('mkdirp'), - rimraf = require('rimraf'), - fs = require('fs'); - -function SourceStore(/*opts*/) { -} - -SourceStore.prototype.registerSource = function (/* filePath, sourceText */) { - throw new Error('registerSource must be overridden'); -}; - -SourceStore.prototype.getSource = function (/* filePath */) { - throw new Error('getSource must be overridden'); -}; - -SourceStore.prototype.dispose = function () { -}; - -function MemoryStore() { - this.data = {}; -} - -util.inherits(MemoryStore, SourceStore); - -MemoryStore.prototype.registerSource = function (filePath, sourceText) { - this.data[filePath] = sourceText; -}; - -MemoryStore.prototype.getSource = function (filePath) { - return this.data[filePath] || null; -}; - -function FileStore(opts) { - opts = opts || {}; - var tmpDir = opts.tmpdir || os.tmpdir(); - this.counter = 0; - this.mappings = []; - this.basePath = path.resolve(tmpDir, '.istanbul', 'cache_'); - mkdirp.sync(path.dirname(this.basePath)); -} - -util.inherits(FileStore, SourceStore); - -FileStore.prototype.registerSource = function (filePath, sourceText) { - if (this.mappings[filePath]) { - return; - } - this.counter += 1; - var mapFile = this.basePath + this.counter; - this.mappings[filePath] = mapFile; - fs.writeFileSync(mapFile, sourceText, 'utf8'); -}; - -FileStore.prototype.getSource = function (filePath) { - var mapFile = this.mappings[filePath]; - if (!mapFile) { - return null; - } - return fs.readFileSync(mapFile, 'utf8'); -}; - -FileStore.prototype.dispose = function () { - this.mappings = []; - rimraf.sync(path.dirname(this.basePath)); -}; - -module.exports = { - create: function (type, opts) { - opts = opts || {}; - type = (type || 'memory').toLowerCase(); - - if (type === 'file') { - return new FileStore(opts); - } - return new MemoryStore(opts); - } -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/transformer.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/transformer.js deleted file mode 100644 index 276bf4167..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/lib/transformer.js +++ /dev/null @@ -1,182 +0,0 @@ -/* - Copyright 2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -var pathutils = require('./pathutils'), - libCoverage = require('istanbul-lib-coverage'), - MappedCoverage = require('./mapped').MappedCoverage; - -function isInvalidPosition (pos) { - return !pos || typeof pos.line !== "number" || typeof pos.column !== "number" || pos.line < 0 || pos.column < 0; -} - -/** - * determines the original position for a given location - * @param {SourceMapConsumer} sourceMap the source map - * @param {Object} location the original location Object - * @returns {Object} the remapped location Object - */ -function getMapping(sourceMap, location, origFile) { - - if (!location) { - return null; - } - - if (isInvalidPosition(location.start) || isInvalidPosition(location.end)) { - return null; - } - - var start = sourceMap.originalPositionFor(location.start), - end = sourceMap.originalPositionFor(location.end); - - /* istanbul ignore if: edge case too hard to test for */ - if (!(start && end)) { - return null; - } - if (!(start.source && end.source)) { - return null; - } - if (start.source !== end.source) { - return null; - } - - /* istanbul ignore if: edge case too hard to test for */ - if (start.line === null || start.column === null) { - return null; - } - /* istanbul ignore if: edge case too hard to test for */ - if (end.line === null || end.column === null) { - return null; - } - - if (start.line === end.line && start.column === end.column) { - end = sourceMap.originalPositionFor({ - line: location.end.line, - column: location.end.column, - bias: 2 - }); - end.column = end.column - 1; - } - - return { - source: pathutils.relativeTo(start.source, origFile), - loc: { - start: { - line: start.line, - column: start.column - }, - end: { - line: end.line, - column: end.column - } - } - }; -} - -function SourceMapTransformer(finder, opts) { - opts = opts || {}; - this.finder = finder; - this.baseDir = opts.baseDir || process.cwd(); -} - -SourceMapTransformer.prototype.processFile = function (fc, sourceMap, coverageMapper) { - var changes = 0; - - Object.keys(fc.statementMap).forEach(function (s) { - var loc = fc.statementMap[s], - hits = fc.s[s], - mapping = getMapping(sourceMap, loc, fc.path), - mappedCoverage; - - if (mapping) { - changes += 1; - mappedCoverage = coverageMapper(mapping.source); - mappedCoverage.addStatement(mapping.loc, hits); - } - }); - - Object.keys(fc.fnMap).forEach(function (f) { - var fnMeta = fc.fnMap[f], - hits = fc.f[f], - mapping = getMapping(sourceMap, fnMeta.decl, fc.path), - spanMapping = getMapping(sourceMap, fnMeta.loc, fc.path), - mappedCoverage; - - if (mapping && spanMapping && mapping.source === spanMapping.source) { - changes += 1; - mappedCoverage = coverageMapper(mapping.source); - mappedCoverage.addFunction(fnMeta.name, mapping.loc, spanMapping.loc, hits); - } - }); - - Object.keys(fc.branchMap).forEach(function (b) { - var branchMeta = fc.branchMap[b], - source, - hits = fc.b[b], - mapping, - locs = [], - mappedHits = [], - mappedCoverage, - skip, - i; - for (i = 0; i < branchMeta.locations.length; i += 1) { - mapping = getMapping(sourceMap, branchMeta.locations[i], fc.path); - if (mapping) { - if (!source) { - source = mapping.source; - } - if (mapping.source !== source) { - skip = true; - } - locs.push(mapping.loc); - mappedHits.push(hits[i]); - } - } - if (!skip && locs.length > 0) { - changes += 1; - mappedCoverage = coverageMapper(source); - mappedCoverage.addBranch(branchMeta.type, locs[0] /* XXX */, locs, mappedHits); - } - }); - - return changes > 0; -}; - -SourceMapTransformer.prototype.transform = function (coverageMap) { - var that = this, - finder = this.finder, - output = {}, - getMappedCoverage = function (file) { - if (!output[file]) { - output[file] = new MappedCoverage(file); - } - return output[file]; - }; - - coverageMap.files().forEach(function (file) { - var fc = coverageMap.fileCoverageFor(file), - sourceMap = finder(file), - changed; - - if (!sourceMap) { - output[file] = fc; - return; - } - - changed = that.processFile(fc, sourceMap, getMappedCoverage); - if (!changed) { - console.warn('File [' + file + '] ignored, nothing could be mapped'); - } - }); - return libCoverage.createCoverageMap(output); -}; - -module.exports = { - create: function (finder, opts) { - return new SourceMapTransformer(finder, opts); - } -}; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/package.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/package.json deleted file mode 100644 index fff47a456..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-source-maps/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_args": [ - [ - "istanbul-lib-source-maps@^1.0.0-alpha", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api" - ] - ], - "_from": "istanbul-lib-source-maps@>=1.0.0-alpha <2.0.0", - "_id": "istanbul-lib-source-maps@1.1.0", - "_inCache": true, - "_installable": true, - "_location": "/istanbul-lib-source-maps", - "_nodeVersion": "6.5.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/istanbul-lib-source-maps-1.1.0.tgz_1478758278578_0.8678429392166436" - }, - "_npmUser": { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - "_npmVersion": "4.0.0", - "_phantomChildren": {}, - "_requested": { - "name": "istanbul-lib-source-maps", - "raw": "istanbul-lib-source-maps@^1.0.0-alpha", - "rawSpec": "^1.0.0-alpha", - "scope": null, - "spec": ">=1.0.0-alpha <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul-api" - ], - "_resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.0.tgz", - "_shasum": "9d429218f35b823560ea300a96ff0c3bbdab785f", - "_shrinkwrap": null, - "_spec": "istanbul-lib-source-maps@^1.0.0-alpha", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api", - "author": { - "email": "kananthmail-github@yahoo.com", - "name": "Krishnan Anantheswaran" - }, - "bugs": { - "url": "https://github.com/istanbuljs/istanbul-lib-source-maps/issues" - }, - "dependencies": { - "istanbul-lib-coverage": "^1.0.0-alpha.0", - "mkdirp": "^0.5.1", - "rimraf": "^2.4.4", - "source-map": "^0.5.3" - }, - "description": "Source maps support for istanbul", - "devDependencies": { - "babel-core": "^6.2.1", - "chai": "^3.4.1", - "istanbul": "^0.4.0", - "jshint": "^2.8.0", - "mocha": "^2.3.4", - "standard-version": "^2.4.0", - "ts-node": "^0.5.3" - }, - "directories": {}, - "dist": { - "shasum": "9d429218f35b823560ea300a96ff0c3bbdab785f", - "tarball": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.0.tgz" - }, - "gitHead": "7c077484285b422185aeeaf7f90c0c97e986c79b", - "homepage": "https://github.com/istanbuljs/istanbul-lib-source-maps#readme", - "keywords": [ - "istanbul", - "sourcemaps", - "sourcemap", - "source", - "maps" - ], - "license": "BSD-3-Clause", - "main": "index.js", - "maintainers": [ - { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - } - ], - "name": "istanbul-lib-source-maps", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/istanbuljs/istanbul-lib-source-maps.git" - }, - "scripts": { - "fast": "mocha test/", - "pretest": "jshint index.js lib/ test/", - "release": "standard-version", - "test": "istanbul cover --include-all-sources --print=both _mocha -- test/", - "xposttest": "istanbul check-coverage --statements 95 --branches 80" - }, - "version": "1.1.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.doc.yml b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.doc.yml deleted file mode 100644 index dbf917bf9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.doc.yml +++ /dev/null @@ -1,3 +0,0 @@ -order: - - Exports - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.nyc_output/8762ed8bd43477558a4fdec47d8226a0.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.nyc_output/8762ed8bd43477558a4fdec47d8226a0.json deleted file mode 100644 index 3fce4f6ea..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.nyc_output/8762ed8bd43477558a4fdec47d8226a0.json +++ /dev/null @@ -1 +0,0 @@ -{"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/annotator.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/annotator.js","statementMap":{"0":{"start":{"line":7,"column":20},"end":{"line":7,"column":47}},"1":{"start":{"line":8,"column":9},"end":{"line":8,"column":17}},"2":{"start":{"line":9,"column":9},"end":{"line":9,"column":17}},"3":{"start":{"line":10,"column":12},"end":{"line":10,"column":16}},"4":{"start":{"line":11,"column":12},"end":{"line":11,"column":16}},"5":{"start":{"line":12,"column":13},"end":{"line":12,"column":17}},"6":{"start":{"line":13,"column":12},"end":{"line":13,"column":21}},"7":{"start":{"line":14,"column":12},"end":{"line":14,"column":21}},"8":{"start":{"line":17,"column":4},"end":{"line":17,"column":35}},"9":{"start":{"line":21,"column":4},"end":{"line":21,"column":24}},"10":{"start":{"line":22,"column":4},"end":{"line":26,"column":29}},"11":{"start":{"line":30,"column":20},"end":{"line":30,"column":50}},"12":{"start":{"line":31,"column":4},"end":{"line":33,"column":5}},"13":{"start":{"line":32,"column":8},"end":{"line":32,"column":15}},"14":{"start":{"line":34,"column":4},"end":{"line":40,"column":7}},"15":{"start":{"line":35,"column":20},"end":{"line":35,"column":41}},"16":{"start":{"line":36,"column":8},"end":{"line":39,"column":9}},"17":{"start":{"line":37,"column":12},"end":{"line":37,"column":74}},"18":{"start":{"line":38,"column":12},"end":{"line":38,"column":52}},"19":{"start":{"line":44,"column":25},"end":{"line":44,"column":39}},"20":{"start":{"line":45,"column":24},"end":{"line":45,"column":49}},"21":{"start":{"line":46,"column":4},"end":{"line":69,"column":7}},"22":{"start":{"line":47,"column":20},"end":{"line":47,"column":42}},"23":{"start":{"line":48,"column":19},"end":{"line":48,"column":40}},"24":{"start":{"line":49,"column":19},"end":{"line":49,"column":43}},"25":{"start":{"line":50,"column":23},"end":{"line":50,"column":40}},"26":{"start":{"line":51,"column":21},"end":{"line":51,"column":40}},"27":{"start":{"line":52,"column":24},"end":{"line":52,"column":39}},"28":{"start":{"line":53,"column":22},"end":{"line":53,"column":35}},"29":{"start":{"line":54,"column":23},"end":{"line":54,"column":128}},"30":{"start":{"line":55,"column":24},"end":{"line":55,"column":41}},"31":{"start":{"line":58,"column":8},"end":{"line":68,"column":9}},"32":{"start":{"line":59,"column":12},"end":{"line":62,"column":13}},"33":{"start":{"line":60,"column":16},"end":{"line":60,"column":36}},"34":{"start":{"line":61,"column":16},"end":{"line":61,"column":73}},"35":{"start":{"line":63,"column":12},"end":{"line":63,"column":50}},"36":{"start":{"line":64,"column":12},"end":{"line":67,"column":27}},"37":{"start":{"line":74,"column":18},"end":{"line":74,"column":32}},"38":{"start":{"line":75,"column":17},"end":{"line":75,"column":35}},"39":{"start":{"line":76,"column":4},"end":{"line":78,"column":5}},"40":{"start":{"line":77,"column":8},"end":{"line":77,"column":15}},"41":{"start":{"line":79,"column":4},"end":{"line":102,"column":7}},"42":{"start":{"line":80,"column":20},"end":{"line":80,"column":34}},"43":{"start":{"line":81,"column":19},"end":{"line":81,"column":32}},"44":{"start":{"line":82,"column":19},"end":{"line":82,"column":43}},"45":{"start":{"line":83,"column":23},"end":{"line":83,"column":45}},"46":{"start":{"line":84,"column":21},"end":{"line":84,"column":45}},"47":{"start":{"line":85,"column":24},"end":{"line":85,"column":44}},"48":{"start":{"line":86,"column":22},"end":{"line":86,"column":40}},"49":{"start":{"line":87,"column":23},"end":{"line":87,"column":127}},"50":{"start":{"line":88,"column":24},"end":{"line":88,"column":41}},"51":{"start":{"line":91,"column":8},"end":{"line":101,"column":9}},"52":{"start":{"line":92,"column":12},"end":{"line":95,"column":13}},"53":{"start":{"line":93,"column":16},"end":{"line":93,"column":36}},"54":{"start":{"line":94,"column":16},"end":{"line":94,"column":73}},"55":{"start":{"line":96,"column":12},"end":{"line":96,"column":50}},"56":{"start":{"line":97,"column":12},"end":{"line":100,"column":27}},"57":{"start":{"line":106,"column":22},"end":{"line":106,"column":36}},"58":{"start":{"line":107,"column":21},"end":{"line":107,"column":43}},"59":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"60":{"start":{"line":109,"column":8},"end":{"line":109,"column":15}},"61":{"start":{"line":112,"column":4},"end":{"line":168,"column":7}},"62":{"start":{"line":113,"column":26},"end":{"line":113,"column":49}},"63":{"start":{"line":114,"column":23},"end":{"line":116,"column":17}},"64":{"start":{"line":115,"column":16},"end":{"line":115,"column":29}},"65":{"start":{"line":117,"column":24},"end":{"line":117,"column":56}},"66":{"start":{"line":132,"column":8},"end":{"line":167,"column":9}},"67":{"start":{"line":133,"column":12},"end":{"line":166,"column":13}},"68":{"start":{"line":134,"column":16},"end":{"line":134,"column":39}},"69":{"start":{"line":135,"column":16},"end":{"line":135,"column":36}},"70":{"start":{"line":136,"column":16},"end":{"line":136,"column":48}},"71":{"start":{"line":137,"column":16},"end":{"line":137,"column":45}},"72":{"start":{"line":138,"column":16},"end":{"line":138,"column":45}},"73":{"start":{"line":139,"column":16},"end":{"line":139,"column":44}},"74":{"start":{"line":140,"column":16},"end":{"line":140,"column":40}},"75":{"start":{"line":141,"column":16},"end":{"line":143,"column":55}},"76":{"start":{"line":144,"column":16},"end":{"line":144,"column":46}},"77":{"start":{"line":146,"column":16},"end":{"line":165,"column":17}},"78":{"start":{"line":147,"column":20},"end":{"line":150,"column":21}},"79":{"start":{"line":148,"column":24},"end":{"line":148,"column":44}},"80":{"start":{"line":149,"column":24},"end":{"line":149,"column":81}},"81":{"start":{"line":151,"column":20},"end":{"line":151,"column":58}},"82":{"start":{"line":152,"column":20},"end":{"line":164,"column":21}},"83":{"start":{"line":155,"column":24},"end":{"line":158,"column":84}},"84":{"start":{"line":160,"column":24},"end":{"line":163,"column":39}},"85":{"start":{"line":174,"column":4},"end":{"line":224,"column":5}},"86":{"start":{"line":175,"column":25},"end":{"line":175,"column":65}},"87":{"start":{"line":176,"column":19},"end":{"line":176,"column":51}},"88":{"start":{"line":177,"column":20},"end":{"line":177,"column":21}},"89":{"start":{"line":178,"column":25},"end":{"line":186,"column":14}},"90":{"start":{"line":179,"column":16},"end":{"line":179,"column":27}},"91":{"start":{"line":180,"column":16},"end":{"line":185,"column":18}},"92":{"start":{"line":187,"column":8},"end":{"line":187,"column":82}},"93":{"start":{"line":188,"column":8},"end":{"line":188,"column":48}},"94":{"start":{"line":191,"column":8},"end":{"line":191,"column":51}},"95":{"start":{"line":192,"column":8},"end":{"line":192,"column":52}},"96":{"start":{"line":193,"column":8},"end":{"line":193,"column":53}},"97":{"start":{"line":194,"column":8},"end":{"line":194,"column":27}},"98":{"start":{"line":196,"column":8},"end":{"line":198,"column":11}},"99":{"start":{"line":197,"column":12},"end":{"line":197,"column":66}},"100":{"start":{"line":200,"column":8},"end":{"line":205,"column":11}},"101":{"start":{"line":201,"column":12},"end":{"line":204,"column":14}},"102":{"start":{"line":207,"column":8},"end":{"line":211,"column":10}},"103":{"start":{"line":213,"column":8},"end":{"line":213,"column":35}},"104":{"start":{"line":214,"column":8},"end":{"line":214,"column":59}},"105":{"start":{"line":215,"column":8},"end":{"line":218,"column":11}},"106":{"start":{"line":216,"column":12},"end":{"line":216,"column":33}},"107":{"start":{"line":217,"column":12},"end":{"line":217,"column":63}},"108":{"start":{"line":219,"column":8},"end":{"line":223,"column":10}},"109":{"start":{"line":227,"column":0},"end":{"line":229,"column":2}}},"fnMap":{"0":{"name":"title","decl":{"start":{"line":16,"column":9},"end":{"line":16,"column":14}},"loc":{"start":{"line":16,"column":20},"end":{"line":18,"column":1}}},"1":{"name":"customEscape","decl":{"start":{"line":20,"column":9},"end":{"line":20,"column":21}},"loc":{"start":{"line":20,"column":28},"end":{"line":27,"column":1}}},"2":{"name":"annotateLines","decl":{"start":{"line":29,"column":9},"end":{"line":29,"column":22}},"loc":{"start":{"line":29,"column":53},"end":{"line":41,"column":1}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":34,"column":35},"end":{"line":34,"column":36}},"loc":{"start":{"line":34,"column":57},"end":{"line":40,"column":5}}},"4":{"name":"annotateStatements","decl":{"start":{"line":43,"column":9},"end":{"line":43,"column":27}},"loc":{"start":{"line":43,"column":58},"end":{"line":70,"column":1}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":46,"column":40},"end":{"line":46,"column":41}},"loc":{"start":{"line":46,"column":58},"end":{"line":69,"column":5}}},"6":{"name":"annotateFunctions","decl":{"start":{"line":72,"column":9},"end":{"line":72,"column":26}},"loc":{"start":{"line":72,"column":57},"end":{"line":103,"column":1}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":79,"column":33},"end":{"line":79,"column":34}},"loc":{"start":{"line":79,"column":50},"end":{"line":102,"column":5}}},"8":{"name":"annotateBranches","decl":{"start":{"line":105,"column":9},"end":{"line":105,"column":25}},"loc":{"start":{"line":105,"column":56},"end":{"line":169,"column":1}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":112,"column":37},"end":{"line":112,"column":38}},"loc":{"start":{"line":112,"column":59},"end":{"line":168,"column":5}}},"10":{"name":"(anonymous_10)","decl":{"start":{"line":114,"column":42},"end":{"line":114,"column":43}},"loc":{"start":{"line":114,"column":58},"end":{"line":116,"column":13}}},"11":{"name":"annotateSourceCode","decl":{"start":{"line":171,"column":9},"end":{"line":171,"column":27}},"loc":{"start":{"line":171,"column":55},"end":{"line":225,"column":1}}},"12":{"name":"(anonymous_12)","decl":{"start":{"line":178,"column":34},"end":{"line":178,"column":35}},"loc":{"start":{"line":178,"column":49},"end":{"line":186,"column":13}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":196,"column":35},"end":{"line":196,"column":36}},"loc":{"start":{"line":196,"column":51},"end":{"line":198,"column":9}}},"14":{"name":"(anonymous_14)","decl":{"start":{"line":200,"column":43},"end":{"line":200,"column":44}},"loc":{"start":{"line":200,"column":59},"end":{"line":205,"column":9}}},"15":{"name":"(anonymous_15)","decl":{"start":{"line":215,"column":54},"end":{"line":215,"column":55}},"loc":{"start":{"line":215,"column":70},"end":{"line":218,"column":9}}}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":4},"end":{"line":33,"column":5}},"type":"if","locations":[{"start":{"line":31,"column":4},"end":{"line":33,"column":5}},{"start":{"line":31,"column":4},"end":{"line":33,"column":5}}]},"1":{"loc":{"start":{"line":36,"column":8},"end":{"line":39,"column":9}},"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":39,"column":9}},{"start":{"line":36,"column":8},"end":{"line":39,"column":9}}]},"2":{"loc":{"start":{"line":37,"column":49},"end":{"line":37,"column":73}},"type":"cond-expr","locations":[{"start":{"line":37,"column":61},"end":{"line":37,"column":66}},{"start":{"line":37,"column":69},"end":{"line":37,"column":73}}]},"3":{"loc":{"start":{"line":49,"column":19},"end":{"line":49,"column":43}},"type":"cond-expr","locations":[{"start":{"line":49,"column":31},"end":{"line":49,"column":36}},{"start":{"line":49,"column":39},"end":{"line":49,"column":43}}]},"4":{"loc":{"start":{"line":54,"column":46},"end":{"line":54,"column":83}},"type":"cond-expr","locations":[{"start":{"line":54,"column":58},"end":{"line":54,"column":70}},{"start":{"line":54,"column":73},"end":{"line":54,"column":83}}]},"5":{"loc":{"start":{"line":58,"column":8},"end":{"line":68,"column":9}},"type":"if","locations":[{"start":{"line":58,"column":8},"end":{"line":68,"column":9}},{"start":{"line":58,"column":8},"end":{"line":68,"column":9}}]},"6":{"loc":{"start":{"line":58,"column":12},"end":{"line":58,"column":54}},"type":"binary-expr","locations":[{"start":{"line":58,"column":12},"end":{"line":58,"column":25}},{"start":{"line":58,"column":29},"end":{"line":58,"column":54}}]},"7":{"loc":{"start":{"line":59,"column":12},"end":{"line":62,"column":13}},"type":"if","locations":[{"start":{"line":59,"column":12},"end":{"line":62,"column":13}},{"start":{"line":59,"column":12},"end":{"line":62,"column":13}}]},"8":{"loc":{"start":{"line":66,"column":16},"end":{"line":66,"column":70}},"type":"cond-expr","locations":[{"start":{"line":66,"column":40},"end":{"line":66,"column":46}},{"start":{"line":66,"column":49},"end":{"line":66,"column":70}}]},"9":{"loc":{"start":{"line":76,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":76,"column":4},"end":{"line":78,"column":5}},{"start":{"line":76,"column":4},"end":{"line":78,"column":5}}]},"10":{"loc":{"start":{"line":82,"column":19},"end":{"line":82,"column":43}},"type":"cond-expr","locations":[{"start":{"line":82,"column":31},"end":{"line":82,"column":36}},{"start":{"line":82,"column":39},"end":{"line":82,"column":43}}]},"11":{"loc":{"start":{"line":87,"column":46},"end":{"line":87,"column":83}},"type":"cond-expr","locations":[{"start":{"line":87,"column":58},"end":{"line":87,"column":70}},{"start":{"line":87,"column":73},"end":{"line":87,"column":83}}]},"12":{"loc":{"start":{"line":91,"column":8},"end":{"line":101,"column":9}},"type":"if","locations":[{"start":{"line":91,"column":8},"end":{"line":101,"column":9}},{"start":{"line":91,"column":8},"end":{"line":101,"column":9}}]},"13":{"loc":{"start":{"line":91,"column":12},"end":{"line":91,"column":54}},"type":"binary-expr","locations":[{"start":{"line":91,"column":12},"end":{"line":91,"column":25}},{"start":{"line":91,"column":29},"end":{"line":91,"column":54}}]},"14":{"loc":{"start":{"line":92,"column":12},"end":{"line":95,"column":13}},"type":"if","locations":[{"start":{"line":92,"column":12},"end":{"line":95,"column":13}},{"start":{"line":92,"column":12},"end":{"line":95,"column":13}}]},"15":{"loc":{"start":{"line":99,"column":16},"end":{"line":99,"column":70}},"type":"cond-expr","locations":[{"start":{"line":99,"column":40},"end":{"line":99,"column":46}},{"start":{"line":99,"column":49},"end":{"line":99,"column":70}}]},"16":{"loc":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"type":"if","locations":[{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},{"start":{"line":108,"column":4},"end":{"line":110,"column":5}}]},"17":{"loc":{"start":{"line":132,"column":8},"end":{"line":167,"column":9}},"type":"if","locations":[{"start":{"line":132,"column":8},"end":{"line":167,"column":9}},{"start":{"line":132,"column":8},"end":{"line":167,"column":9}}]},"18":{"loc":{"start":{"line":132,"column":12},"end":{"line":132,"column":72}},"type":"binary-expr","locations":[{"start":{"line":132,"column":12},"end":{"line":132,"column":24}},{"start":{"line":132,"column":29},"end":{"line":132,"column":43}},{"start":{"line":132,"column":47},"end":{"line":132,"column":71}}]},"19":{"loc":{"start":{"line":133,"column":24},"end":{"line":133,"column":70}},"type":"binary-expr","locations":[{"start":{"line":133,"column":24},"end":{"line":133,"column":46}},{"start":{"line":133,"column":50},"end":{"line":133,"column":70}}]},"20":{"loc":{"start":{"line":136,"column":23},"end":{"line":136,"column":47}},"type":"cond-expr","locations":[{"start":{"line":136,"column":35},"end":{"line":136,"column":40}},{"start":{"line":136,"column":43},"end":{"line":136,"column":47}}]},"21":{"loc":{"start":{"line":142,"column":21},"end":{"line":142,"column":62}},"type":"cond-expr","locations":[{"start":{"line":142,"column":33},"end":{"line":142,"column":47}},{"start":{"line":142,"column":50},"end":{"line":142,"column":62}}]},"22":{"loc":{"start":{"line":146,"column":16},"end":{"line":165,"column":17}},"type":"if","locations":[{"start":{"line":146,"column":16},"end":{"line":165,"column":17}},{"start":{"line":146,"column":16},"end":{"line":165,"column":17}}]},"23":{"loc":{"start":{"line":146,"column":20},"end":{"line":146,"column":60}},"type":"binary-expr","locations":[{"start":{"line":146,"column":20},"end":{"line":146,"column":31}},{"start":{"line":146,"column":35},"end":{"line":146,"column":60}}]},"24":{"loc":{"start":{"line":147,"column":20},"end":{"line":150,"column":21}},"type":"if","locations":[{"start":{"line":147,"column":20},"end":{"line":150,"column":21}},{"start":{"line":147,"column":20},"end":{"line":150,"column":21}}]},"25":{"loc":{"start":{"line":152,"column":20},"end":{"line":164,"column":21}},"type":"if","locations":[{"start":{"line":152,"column":20},"end":{"line":164,"column":21}},{"start":{"line":152,"column":20},"end":{"line":164,"column":21}}]},"26":{"loc":{"start":{"line":156,"column":29},"end":{"line":156,"column":79}},"type":"cond-expr","locations":[{"start":{"line":156,"column":41},"end":{"line":156,"column":57}},{"start":{"line":156,"column":60},"end":{"line":156,"column":79}}]},"27":{"loc":{"start":{"line":157,"column":35},"end":{"line":157,"column":58}},"type":"cond-expr","locations":[{"start":{"line":157,"column":45},"end":{"line":157,"column":49}},{"start":{"line":157,"column":52},"end":{"line":157,"column":58}}]},"28":{"loc":{"start":{"line":158,"column":29},"end":{"line":158,"column":48}},"type":"cond-expr","locations":[{"start":{"line":158,"column":39},"end":{"line":158,"column":42}},{"start":{"line":158,"column":45},"end":{"line":158,"column":48}}]},"29":{"loc":{"start":{"line":162,"column":28},"end":{"line":162,"column":82}},"type":"cond-expr","locations":[{"start":{"line":162,"column":52},"end":{"line":162,"column":58}},{"start":{"line":162,"column":61},"end":{"line":162,"column":82}}]},"30":{"loc":{"start":{"line":197,"column":19},"end":{"line":197,"column":65}},"type":"binary-expr","locations":[{"start":{"line":197,"column":19},"end":{"line":197,"column":53}},{"start":{"line":197,"column":57},"end":{"line":197,"column":65}}]},"31":{"loc":{"start":{"line":203,"column":22},"end":{"line":203,"column":64}},"type":"cond-expr","locations":[{"start":{"line":203,"column":38},"end":{"line":203,"column":53}},{"start":{"line":203,"column":56},"end":{"line":203,"column":64}}]},"32":{"loc":{"start":{"line":215,"column":15},"end":{"line":215,"column":29}},"type":"binary-expr","locations":[{"start":{"line":215,"column":15},"end":{"line":215,"column":23}},{"start":{"line":215,"column":27},"end":{"line":215,"column":29}}]}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":6,"9":21,"10":21,"11":2,"12":2,"13":0,"14":2,"15":2,"16":2,"17":1,"18":1,"19":2,"20":2,"21":2,"22":2,"23":2,"24":2,"25":2,"26":2,"27":2,"28":2,"29":2,"30":2,"31":2,"32":0,"33":0,"34":0,"35":0,"36":0,"37":2,"38":2,"39":2,"40":0,"41":2,"42":2,"43":2,"44":2,"45":2,"46":2,"47":2,"48":2,"49":2,"50":2,"51":2,"52":0,"53":0,"54":0,"55":0,"56":0,"57":2,"58":2,"59":2,"60":0,"61":2,"62":2,"63":2,"64":3,"65":2,"66":2,"67":2,"68":2,"69":2,"70":2,"71":2,"72":2,"73":2,"74":2,"75":2,"76":2,"77":2,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":2,"86":2,"87":2,"88":2,"89":2,"90":21,"91":21,"92":2,"93":2,"94":2,"95":2,"96":2,"97":2,"98":2,"99":21,"100":2,"101":21,"102":2,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":1},"f":{"0":6,"1":21,"2":2,"3":2,"4":2,"5":2,"6":2,"7":2,"8":2,"9":2,"10":3,"11":2,"12":21,"13":21,"14":21,"15":0},"b":{"0":[0,2],"1":[1,1],"2":[1,0],"3":[1,1],"4":[0,2],"5":[0,2],"6":[2,1],"7":[0,0],"8":[0,0],"9":[0,2],"10":[1,1],"11":[0,2],"12":[0,2],"13":[2,1],"14":[0,0],"15":[0,0],"16":[0,2],"17":[2,0],"18":[2,1,1],"19":[4,3],"20":[1,1],"21":[0,2],"22":[0,2],"23":[2,1],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[21,9],"31":[1,20],"32":[0,0]},"hash":"10e94bf1768490cfb479e74b4c3d1a99e6408fdd"},"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/insertion-text.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/insertion-text.js","statementMap":{"0":{"start":{"line":6,"column":4},"end":{"line":6,"column":21}},"1":{"start":{"line":7,"column":4},"end":{"line":7,"column":34}},"2":{"start":{"line":8,"column":4},"end":{"line":8,"column":22}},"3":{"start":{"line":9,"column":4},"end":{"line":9,"column":39}},"4":{"start":{"line":10,"column":4},"end":{"line":10,"column":45}},"5":{"start":{"line":11,"column":4},"end":{"line":11,"column":42}},"6":{"start":{"line":14,"column":15},"end":{"line":14,"column":48}},"7":{"start":{"line":16,"column":0},"end":{"line":106,"column":2}},"8":{"start":{"line":19,"column":18},"end":{"line":19,"column":20}},"9":{"start":{"line":20,"column":19},"end":{"line":20,"column":28}},"10":{"start":{"line":21,"column":18},"end":{"line":21,"column":29}},"11":{"start":{"line":23,"column":8},"end":{"line":28,"column":9}},"12":{"start":{"line":24,"column":12},"end":{"line":27,"column":13}},"13":{"start":{"line":25,"column":16},"end":{"line":25,"column":24}},"14":{"start":{"line":26,"column":16},"end":{"line":26,"column":22}},"15":{"start":{"line":29,"column":8},"end":{"line":29,"column":19}},"16":{"start":{"line":32,"column":19},"end":{"line":32,"column":28}},"17":{"start":{"line":33,"column":18},"end":{"line":33,"column":29}},"18":{"start":{"line":34,"column":18},"end":{"line":34,"column":33}},"19":{"start":{"line":36,"column":8},"end":{"line":41,"column":9}},"20":{"start":{"line":37,"column":12},"end":{"line":40,"column":13}},"21":{"start":{"line":38,"column":16},"end":{"line":38,"column":24}},"22":{"start":{"line":39,"column":16},"end":{"line":39,"column":22}},"23":{"start":{"line":42,"column":8},"end":{"line":42,"column":19}},"24":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"25":{"start":{"line":49,"column":8},"end":{"line":49,"column":98}},"26":{"start":{"line":50,"column":8},"end":{"line":50,"column":72}},"27":{"start":{"line":51,"column":8},"end":{"line":51,"column":32}},"28":{"start":{"line":53,"column":8},"end":{"line":60,"column":9}},"29":{"start":{"line":54,"column":12},"end":{"line":56,"column":13}},"30":{"start":{"line":55,"column":16},"end":{"line":55,"column":24}},"31":{"start":{"line":57,"column":12},"end":{"line":59,"column":13}},"32":{"start":{"line":58,"column":16},"end":{"line":58,"column":38}},"33":{"start":{"line":62,"column":18},"end":{"line":62,"column":28}},"34":{"start":{"line":63,"column":21},"end":{"line":63,"column":60}},"35":{"start":{"line":64,"column":22},"end":{"line":64,"column":34}},"36":{"start":{"line":65,"column":19},"end":{"line":65,"column":28}},"37":{"start":{"line":66,"column":8},"end":{"line":66,"column":79}},"38":{"start":{"line":67,"column":8},"end":{"line":67,"column":20}},"39":{"start":{"line":71,"column":22},"end":{"line":71,"column":34}},"40":{"start":{"line":73,"column":31},"end":{"line":73,"column":32}},"41":{"start":{"line":76,"column":8},"end":{"line":84,"column":9}},"42":{"start":{"line":77,"column":12},"end":{"line":77,"column":35}},"43":{"start":{"line":78,"column":12},"end":{"line":80,"column":13}},"44":{"start":{"line":79,"column":16},"end":{"line":79,"column":50}},"45":{"start":{"line":81,"column":12},"end":{"line":83,"column":13}},"46":{"start":{"line":82,"column":16},"end":{"line":82,"column":22}},"47":{"start":{"line":85,"column":8},"end":{"line":89,"column":9}},"48":{"start":{"line":86,"column":12},"end":{"line":86,"column":33}},"49":{"start":{"line":88,"column":12},"end":{"line":88,"column":57}},"50":{"start":{"line":90,"column":8},"end":{"line":90,"column":32}},"51":{"start":{"line":94,"column":8},"end":{"line":94,"column":64}},"52":{"start":{"line":95,"column":8},"end":{"line":95,"column":61}},"53":{"start":{"line":96,"column":8},"end":{"line":96,"column":20}},"54":{"start":{"line":100,"column":8},"end":{"line":100,"column":64}},"55":{"start":{"line":104,"column":8},"end":{"line":104,"column":25}},"56":{"start":{"line":108,"column":0},"end":{"line":108,"column":31}}},"fnMap":{"0":{"name":"InsertionText","decl":{"start":{"line":5,"column":9},"end":{"line":5,"column":22}},"loc":{"start":{"line":5,"column":44},"end":{"line":12,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":23},"end":{"line":18,"column":24}},"loc":{"start":{"line":18,"column":35},"end":{"line":30,"column":5}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":31,"column":22},"end":{"line":31,"column":23}},"loc":{"start":{"line":31,"column":34},"end":{"line":43,"column":5}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":44,"column":20},"end":{"line":44,"column":21}},"loc":{"start":{"line":44,"column":32},"end":{"line":46,"column":5}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":48,"column":14},"end":{"line":48,"column":15}},"loc":{"start":{"line":48,"column":63},"end":{"line":68,"column":5}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":70,"column":16},"end":{"line":70,"column":17}},"loc":{"start":{"line":70,"column":50},"end":{"line":91,"column":5}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":93,"column":10},"end":{"line":93,"column":11}},"loc":{"start":{"line":93,"column":73},"end":{"line":97,"column":5}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":99,"column":14},"end":{"line":99,"column":15}},"loc":{"start":{"line":99,"column":44},"end":{"line":101,"column":5}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":14},"end":{"line":103,"column":15}},"loc":{"start":{"line":103,"column":26},"end":{"line":105,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":12},"end":{"line":27,"column":13}},"type":"if","locations":[{"start":{"line":24,"column":12},"end":{"line":27,"column":13}},{"start":{"line":24,"column":12},"end":{"line":27,"column":13}}]},"1":{"loc":{"start":{"line":37,"column":12},"end":{"line":40,"column":13}},"type":"if","locations":[{"start":{"line":37,"column":12},"end":{"line":40,"column":13}},{"start":{"line":37,"column":12},"end":{"line":40,"column":13}}]},"2":{"loc":{"start":{"line":49,"column":24},"end":{"line":49,"column":97}},"type":"cond-expr","locations":[{"start":{"line":49,"column":63},"end":{"line":49,"column":81}},{"start":{"line":49,"column":84},"end":{"line":49,"column":97}}]},"3":{"loc":{"start":{"line":50,"column":14},"end":{"line":50,"column":71}},"type":"cond-expr","locations":[{"start":{"line":50,"column":44},"end":{"line":50,"column":65}},{"start":{"line":50,"column":68},"end":{"line":50,"column":71}}]},"4":{"loc":{"start":{"line":51,"column":14},"end":{"line":51,"column":31}},"type":"cond-expr","locations":[{"start":{"line":51,"column":24},"end":{"line":51,"column":25}},{"start":{"line":51,"column":28},"end":{"line":51,"column":31}}]},"5":{"loc":{"start":{"line":53,"column":8},"end":{"line":60,"column":9}},"type":"if","locations":[{"start":{"line":53,"column":8},"end":{"line":60,"column":9}},{"start":{"line":53,"column":8},"end":{"line":60,"column":9}}]},"6":{"loc":{"start":{"line":54,"column":12},"end":{"line":56,"column":13}},"type":"if","locations":[{"start":{"line":54,"column":12},"end":{"line":56,"column":13}},{"start":{"line":54,"column":12},"end":{"line":56,"column":13}}]},"7":{"loc":{"start":{"line":57,"column":12},"end":{"line":59,"column":13}},"type":"if","locations":[{"start":{"line":57,"column":12},"end":{"line":59,"column":13}},{"start":{"line":57,"column":12},"end":{"line":59,"column":13}}]},"8":{"loc":{"start":{"line":78,"column":12},"end":{"line":80,"column":13}},"type":"if","locations":[{"start":{"line":78,"column":12},"end":{"line":80,"column":13}},{"start":{"line":78,"column":12},"end":{"line":80,"column":13}}]},"9":{"loc":{"start":{"line":78,"column":16},"end":{"line":78,"column":79}},"type":"binary-expr","locations":[{"start":{"line":78,"column":16},"end":{"line":78,"column":35}},{"start":{"line":78,"column":40},"end":{"line":78,"column":61}},{"start":{"line":78,"column":65},"end":{"line":78,"column":78}}]},"10":{"loc":{"start":{"line":81,"column":12},"end":{"line":83,"column":13}},"type":"if","locations":[{"start":{"line":81,"column":12},"end":{"line":83,"column":13}},{"start":{"line":81,"column":12},"end":{"line":83,"column":13}}]},"11":{"loc":{"start":{"line":85,"column":8},"end":{"line":89,"column":9}},"type":"if","locations":[{"start":{"line":85,"column":8},"end":{"line":89,"column":9}},{"start":{"line":85,"column":8},"end":{"line":89,"column":9}}]},"12":{"loc":{"start":{"line":85,"column":12},"end":{"line":85,"column":46}},"type":"binary-expr","locations":[{"start":{"line":85,"column":12},"end":{"line":85,"column":21}},{"start":{"line":85,"column":25},"end":{"line":85,"column":46}}]}},"s":{"0":39,"1":39,"2":39,"3":39,"4":39,"5":39,"6":1,"7":1,"8":39,"9":39,"10":39,"11":39,"12":79,"13":28,"14":28,"15":39,"16":39,"17":39,"18":39,"19":39,"20":44,"21":28,"22":28,"23":39,"24":37,"25":35,"26":35,"27":35,"28":35,"29":6,"30":2,"31":6,"32":2,"33":35,"34":35,"35":35,"36":35,"37":35,"38":35,"39":35,"40":35,"41":35,"42":26,"43":26,"44":22,"45":26,"46":9,"47":35,"48":8,"49":27,"50":35,"51":10,"52":10,"53":10,"54":1,"55":35,"56":1},"f":{"0":39,"1":39,"2":39,"3":37,"4":35,"5":35,"6":10,"7":1,"8":35},"b":{"0":[28,51],"1":[28,16],"2":[31,4],"3":[1,34],"4":[1,34],"5":[6,29],"6":[2,4],"7":[2,4],"8":[22,4],"9":[26,9,8],"10":[9,17],"11":[8,27],"12":[35,21]},"hash":"2c5d6fd7120447ed365d2ad4a2ffeea0de504c21"}} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.nyc_output/cdd3cb7496f82074334394a6842dc035.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.nyc_output/cdd3cb7496f82074334394a6842dc035.json deleted file mode 100644 index 9e26dfeeb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.nyc_output/cdd3cb7496f82074334394a6842dc035.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.nyc_output/e93f82b9c11758b8ebf42d42e39acc38.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.nyc_output/e93f82b9c11758b8ebf42d42e39acc38.json deleted file mode 100644 index 51a73eea6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/.nyc_output/e93f82b9c11758b8ebf42d42e39acc38.json +++ /dev/null @@ -1 +0,0 @@ -{"/Users/benjamincoe/bcoe/istanbul-reports/coverage/lcov-report/prettify.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/coverage/lcov-report/prettify.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":39}},"1":{"start":{"line":1,"column":39},"end":{"line":1,"column":15785}},"2":{"start":{"line":1,"column":57},"end":{"line":1,"column":103}},"3":{"start":{"line":1,"column":110},"end":{"line":1,"column":270}},"4":{"start":{"line":1,"column":277},"end":{"line":1,"column":379}},"5":{"start":{"line":1,"column":386},"end":{"line":1,"column":644}},"6":{"start":{"line":1,"column":651},"end":{"line":1,"column":794}},"7":{"start":{"line":1,"column":801},"end":{"line":1,"column":1069}},"8":{"start":{"line":1,"column":1076},"end":{"line":1,"column":1234}},"9":{"start":{"line":1,"column":1241},"end":{"line":1,"column":1321}},"10":{"start":{"line":1,"column":1328},"end":{"line":1,"column":1504}},"11":{"start":{"line":1,"column":1511},"end":{"line":1,"column":1665}},"12":{"start":{"line":1,"column":1672},"end":{"line":1,"column":1844}},"13":{"start":{"line":1,"column":1851},"end":{"line":1,"column":1917}},"14":{"start":{"line":1,"column":1924},"end":{"line":1,"column":1939}},"15":{"start":{"line":1,"column":1946},"end":{"line":1,"column":2058}},"16":{"start":{"line":1,"column":2065},"end":{"line":1,"column":2070}},"17":{"start":{"line":1,"column":2077},"end":{"line":1,"column":2082}},"18":{"start":{"line":1,"column":2089},"end":{"line":1,"column":2094}},"19":{"start":{"line":1,"column":2101},"end":{"line":1,"column":2106}},"20":{"start":{"line":1,"column":2113},"end":{"line":1,"column":2118}},"21":{"start":{"line":1,"column":2125},"end":{"line":1,"column":2130}},"22":{"start":{"line":1,"column":2137},"end":{"line":1,"column":2142}},"23":{"start":{"line":1,"column":2149},"end":{"line":1,"column":2154}},"24":{"start":{"line":1,"column":2161},"end":{"line":1,"column":2166}},"25":{"start":{"line":1,"column":2173},"end":{"line":1,"column":2178}},"26":{"start":{"line":1,"column":2185},"end":{"line":1,"column":2190}},"27":{"start":{"line":1,"column":2197},"end":{"line":1,"column":2202}},"28":{"start":{"line":1,"column":2209},"end":{"line":1,"column":2217}},"29":{"start":{"line":1,"column":2224},"end":{"line":1,"column":2523}},"30":{"start":{"line":1,"column":2545},"end":{"line":1,"column":2546}},"31":{"start":{"line":1,"column":2553},"end":{"line":1,"column":2558}},"32":{"start":{"line":1,"column":2566},"end":{"line":1,"column":2571}},"33":{"start":{"line":1,"column":2572},"end":{"line":1,"column":2754}},"34":{"start":{"line":1,"column":2611},"end":{"line":1,"column":2615}},"35":{"start":{"line":1,"column":2616},"end":{"line":1,"column":2753}},"36":{"start":{"line":1,"column":2634},"end":{"line":1,"column":2641}},"37":{"start":{"line":1,"column":2647},"end":{"line":1,"column":2752}},"38":{"start":{"line":1,"column":2730},"end":{"line":1,"column":2737}},"39":{"start":{"line":1,"column":2737},"end":{"line":1,"column":2746}},"40":{"start":{"line":1,"column":2746},"end":{"line":1,"column":2751}},"41":{"start":{"line":1,"column":2760},"end":{"line":1,"column":2789}},"42":{"start":{"line":1,"column":2813},"end":{"line":1,"column":2829}},"43":{"start":{"line":1,"column":2830},"end":{"line":1,"column":2852}},"44":{"start":{"line":1,"column":2842},"end":{"line":1,"column":2851}},"45":{"start":{"line":1,"column":2859},"end":{"line":1,"column":2871}},"46":{"start":{"line":1,"column":2872},"end":{"line":1,"column":2881}},"47":{"start":{"line":1,"column":2881},"end":{"line":1,"column":3054}},"48":{"start":{"line":1,"column":2888},"end":{"line":1,"column":2897}},"49":{"start":{"line":1,"column":2903},"end":{"line":1,"column":3053}},"50":{"start":{"line":1,"column":2924},"end":{"line":1,"column":2958}},"51":{"start":{"line":1,"column":2964},"end":{"line":1,"column":3052}},"52":{"start":{"line":1,"column":2987},"end":{"line":1,"column":3022}},"53":{"start":{"line":1,"column":3028},"end":{"line":1,"column":3051}},"54":{"start":{"line":1,"column":3070},"end":{"line":1,"column":3123}},"55":{"start":{"line":1,"column":3080},"end":{"line":1,"column":3122}},"56":{"start":{"line":1,"column":3130},"end":{"line":1,"column":3153}},"57":{"start":{"line":1,"column":3154},"end":{"line":1,"column":3209}},"58":{"start":{"line":1,"column":3198},"end":{"line":1,"column":3208}},"59":{"start":{"line":1,"column":3209},"end":{"line":1,"column":3218}},"60":{"start":{"line":1,"column":3241},"end":{"line":1,"column":3392}},"61":{"start":{"line":1,"column":3400},"end":{"line":1,"column":3402}},"62":{"start":{"line":1,"column":3410},"end":{"line":1,"column":3412}},"63":{"start":{"line":1,"column":3420},"end":{"line":1,"column":3431}},"64":{"start":{"line":1,"column":3432},"end":{"line":1,"column":3796}},"65":{"start":{"line":1,"column":3482},"end":{"line":1,"column":3488}},"66":{"start":{"line":1,"column":3489},"end":{"line":1,"column":3795}},"67":{"start":{"line":1,"column":3514},"end":{"line":1,"column":3525}},"68":{"start":{"line":1,"column":3538},"end":{"line":1,"column":3544}},"69":{"start":{"line":1,"column":3552},"end":{"line":1,"column":3613}},"70":{"start":{"line":1,"column":3580},"end":{"line":1,"column":3596}},"71":{"start":{"line":1,"column":3596},"end":{"line":1,"column":3601}},"72":{"start":{"line":1,"column":3607},"end":{"line":1,"column":3612}},"73":{"start":{"line":1,"column":3613},"end":{"line":1,"column":3630}},"74":{"start":{"line":1,"column":3630},"end":{"line":1,"column":3794}},"75":{"start":{"line":1,"column":3651},"end":{"line":1,"column":3720}},"76":{"start":{"line":1,"column":3671},"end":{"line":1,"column":3719}},"77":{"start":{"line":1,"column":3720},"end":{"line":1,"column":3793}},"78":{"start":{"line":1,"column":3741},"end":{"line":1,"column":3792}},"79":{"start":{"line":1,"column":3796},"end":{"line":1,"column":3857}},"80":{"start":{"line":1,"column":3820},"end":{"line":1,"column":3854}},"81":{"start":{"line":1,"column":3864},"end":{"line":1,"column":3866}},"82":{"start":{"line":1,"column":3874},"end":{"line":1,"column":3883}},"83":{"start":{"line":1,"column":3884},"end":{"line":1,"column":3998}},"84":{"start":{"line":1,"column":3923},"end":{"line":1,"column":3929}},"85":{"start":{"line":1,"column":3930},"end":{"line":1,"column":3997}},"86":{"start":{"line":1,"column":3949},"end":{"line":1,"column":3976}},"87":{"start":{"line":1,"column":3982},"end":{"line":1,"column":3996}},"88":{"start":{"line":1,"column":4005},"end":{"line":1,"column":4010}},"89":{"start":{"line":1,"column":4011},"end":{"line":1,"column":4031}},"90":{"start":{"line":1,"column":4018},"end":{"line":1,"column":4030}},"91":{"start":{"line":1,"column":4031},"end":{"line":1,"column":4052}},"92":{"start":{"line":1,"column":4052},"end":{"line":1,"column":4182}},"93":{"start":{"line":1,"column":4091},"end":{"line":1,"column":4097}},"94":{"start":{"line":1,"column":4098},"end":{"line":1,"column":4116}},"95":{"start":{"line":1,"column":4116},"end":{"line":1,"column":4181}},"96":{"start":{"line":1,"column":4132},"end":{"line":1,"column":4163}},"97":{"start":{"line":1,"column":4150},"end":{"line":1,"column":4162}},"98":{"start":{"line":1,"column":4163},"end":{"line":1,"column":4180}},"99":{"start":{"line":1,"column":4182},"end":{"line":1,"column":4195}},"100":{"start":{"line":1,"column":4195},"end":{"line":1,"column":4213}},"101":{"start":{"line":1,"column":4236},"end":{"line":1,"column":4424}},"102":{"start":{"line":1,"column":4432},"end":{"line":1,"column":4441}},"103":{"start":{"line":1,"column":4449},"end":{"line":1,"column":4451}},"104":{"start":{"line":1,"column":4452},"end":{"line":1,"column":4595}},"105":{"start":{"line":1,"column":4489},"end":{"line":1,"column":4495}},"106":{"start":{"line":1,"column":4496},"end":{"line":1,"column":4594}},"107":{"start":{"line":1,"column":4509},"end":{"line":1,"column":4513}},"108":{"start":{"line":1,"column":4519},"end":{"line":1,"column":4593}},"109":{"start":{"line":1,"column":4550},"end":{"line":1,"column":4566}},"110":{"start":{"line":1,"column":4567},"end":{"line":1,"column":4592}},"111":{"start":{"line":1,"column":4582},"end":{"line":1,"column":4591}},"112":{"start":{"line":1,"column":4595},"end":{"line":1,"column":4656}},"113":{"start":{"line":1,"column":4627},"end":{"line":1,"column":4655}},"114":{"start":{"line":1,"column":4643},"end":{"line":1,"column":4654}},"115":{"start":{"line":1,"column":4656},"end":{"line":1,"column":4845}},"116":{"start":{"line":1,"column":4693},"end":{"line":1,"column":4699}},"117":{"start":{"line":1,"column":4700},"end":{"line":1,"column":4844}},"118":{"start":{"line":1,"column":4713},"end":{"line":1,"column":4718}},"119":{"start":{"line":1,"column":4718},"end":{"line":1,"column":4754}},"120":{"start":{"line":1,"column":4741},"end":{"line":1,"column":4753}},"121":{"start":{"line":1,"column":4760},"end":{"line":1,"column":4843}},"122":{"start":{"line":1,"column":4791},"end":{"line":1,"column":4807}},"123":{"start":{"line":1,"column":4808},"end":{"line":1,"column":4842}},"124":{"start":{"line":1,"column":4823},"end":{"line":1,"column":4841}},"125":{"start":{"line":1,"column":4845},"end":{"line":1,"column":4919}},"126":{"start":{"line":1,"column":4875},"end":{"line":1,"column":4918}},"127":{"start":{"line":1,"column":4908},"end":{"line":1,"column":4917}},"128":{"start":{"line":1,"column":4919},"end":{"line":1,"column":5178}},"129":{"start":{"line":1,"column":4940},"end":{"line":1,"column":5177}},"130":{"start":{"line":1,"column":4972},"end":{"line":1,"column":4978}},"131":{"start":{"line":1,"column":4986},"end":{"line":1,"column":4998}},"132":{"start":{"line":1,"column":4999},"end":{"line":1,"column":5176}},"133":{"start":{"line":1,"column":5026},"end":{"line":1,"column":5038}},"134":{"start":{"line":1,"column":5044},"end":{"line":1,"column":5175}},"135":{"start":{"line":1,"column":5058},"end":{"line":1,"column":5174}},"136":{"start":{"line":1,"column":5108},"end":{"line":1,"column":5124}},"137":{"start":{"line":1,"column":5125},"end":{"line":1,"column":5172}},"138":{"start":{"line":1,"column":5178},"end":{"line":1,"column":5196}},"139":{"start":{"line":1,"column":5204},"end":{"line":1,"column":5206}},"140":{"start":{"line":1,"column":5207},"end":{"line":1,"column":5327}},"141":{"start":{"line":1,"column":5246},"end":{"line":1,"column":5250}},"142":{"start":{"line":1,"column":5251},"end":{"line":1,"column":5302}},"143":{"start":{"line":1,"column":5279},"end":{"line":1,"column":5301}},"144":{"start":{"line":1,"column":5302},"end":{"line":1,"column":5326}},"145":{"start":{"line":1,"column":5327},"end":{"line":1,"column":5370}},"146":{"start":{"line":1,"column":5391},"end":{"line":1,"column":5415}},"147":{"start":{"line":1,"column":5422},"end":{"line":1,"column":5424}},"148":{"start":{"line":1,"column":5431},"end":{"line":1,"column":5432}},"149":{"start":{"line":1,"column":5439},"end":{"line":1,"column":5441}},"150":{"start":{"line":1,"column":5448},"end":{"line":1,"column":5449}},"151":{"start":{"line":1,"column":5456},"end":{"line":1,"column":5617}},"152":{"start":{"line":1,"column":5475},"end":{"line":1,"column":5502}},"153":{"start":{"line":1,"column":5508},"end":{"line":1,"column":5616}},"154":{"start":{"line":1,"column":5536},"end":{"line":1,"column":5615}},"155":{"start":{"line":1,"column":5623},"end":{"line":1,"column":5650}},"156":{"start":{"line":1,"column":5667},"end":{"line":1,"column":6045}},"157":{"start":{"line":1,"column":5694},"end":{"line":1,"column":5726}},"158":{"start":{"line":1,"column":5719},"end":{"line":1,"column":5725}},"159":{"start":{"line":1,"column":5726},"end":{"line":1,"column":5780}},"160":{"start":{"line":1,"column":5773},"end":{"line":1,"column":5779}},"161":{"start":{"line":1,"column":5787},"end":{"line":1,"column":5798}},"162":{"start":{"line":1,"column":5799},"end":{"line":1,"column":5863}},"163":{"start":{"line":1,"column":5824},"end":{"line":1,"column":5834}},"164":{"start":{"line":1,"column":5834},"end":{"line":1,"column":5846}},"165":{"start":{"line":1,"column":5846},"end":{"line":1,"column":5862}},"166":{"start":{"line":1,"column":5863},"end":{"line":1,"column":5869}},"167":{"start":{"line":1,"column":5890},"end":{"line":1,"column":5902}},"168":{"start":{"line":1,"column":5903},"end":{"line":1,"column":6039}},"169":{"start":{"line":1,"column":5917},"end":{"line":1,"column":5991}},"170":{"start":{"line":1,"column":5924},"end":{"line":1,"column":5956}},"171":{"start":{"line":1,"column":5962},"end":{"line":1,"column":5990}},"172":{"start":{"line":1,"column":5991},"end":{"line":1,"column":5999}},"173":{"start":{"line":1,"column":5999},"end":{"line":1,"column":6009}},"174":{"start":{"line":1,"column":6009},"end":{"line":1,"column":6022}},"175":{"start":{"line":1,"column":6022},"end":{"line":1,"column":6038}},"176":{"start":{"line":1,"column":6039},"end":{"line":1,"column":6044}},"177":{"start":{"line":1,"column":6046},"end":{"line":1,"column":6052}},"178":{"start":{"line":1,"column":6052},"end":{"line":1,"column":6107}},"179":{"start":{"line":1,"column":6128},"end":{"line":1,"column":6142}},"180":{"start":{"line":1,"column":6135},"end":{"line":1,"column":6141}},"181":{"start":{"line":1,"column":6148},"end":{"line":1,"column":6172}},"182":{"start":{"line":1,"column":6173},"end":{"line":1,"column":6178}},"183":{"start":{"line":1,"column":6178},"end":{"line":1,"column":6207}},"184":{"start":{"line":1,"column":6214},"end":{"line":1,"column":6218}},"185":{"start":{"line":1,"column":6239},"end":{"line":1,"column":6248}},"186":{"start":{"line":1,"column":6249},"end":{"line":1,"column":6362}},"187":{"start":{"line":1,"column":6297},"end":{"line":1,"column":6307}},"188":{"start":{"line":1,"column":6308},"end":{"line":1,"column":6361}},"189":{"start":{"line":1,"column":6362},"end":{"line":1,"column":6386}},"190":{"start":{"line":1,"column":6409},"end":{"line":1,"column":6411}},"191":{"start":{"line":1,"column":6418},"end":{"line":1,"column":6700}},"192":{"start":{"line":1,"column":6437},"end":{"line":1,"column":6448}},"193":{"start":{"line":1,"column":6456},"end":{"line":1,"column":6458}},"194":{"start":{"line":1,"column":6466},"end":{"line":1,"column":6468}},"195":{"start":{"line":1,"column":6469},"end":{"line":1,"column":6665}},"196":{"start":{"line":1,"column":6511},"end":{"line":1,"column":6517}},"197":{"start":{"line":1,"column":6525},"end":{"line":1,"column":6529}},"198":{"start":{"line":1,"column":6530},"end":{"line":1,"column":6588}},"199":{"start":{"line":1,"column":6537},"end":{"line":1,"column":6587}},"200":{"start":{"line":1,"column":6568},"end":{"line":1,"column":6586}},"201":{"start":{"line":1,"column":6595},"end":{"line":1,"column":6599}},"202":{"start":{"line":1,"column":6607},"end":{"line":1,"column":6612}},"203":{"start":{"line":1,"column":6613},"end":{"line":1,"column":6664}},"204":{"start":{"line":1,"column":6640},"end":{"line":1,"column":6652}},"205":{"start":{"line":1,"column":6652},"end":{"line":1,"column":6663}},"206":{"start":{"line":1,"column":6665},"end":{"line":1,"column":6688}},"207":{"start":{"line":1,"column":6688},"end":{"line":1,"column":6695}},"208":{"start":{"line":1,"column":6706},"end":{"line":1,"column":6714}},"209":{"start":{"line":1,"column":6721},"end":{"line":1,"column":7510}},"210":{"start":{"line":1,"column":6740},"end":{"line":1,"column":6753}},"211":{"start":{"line":1,"column":6756},"end":{"line":1,"column":6766}},"212":{"start":{"line":1,"column":6774},"end":{"line":1,"column":6779}},"213":{"start":{"line":1,"column":6787},"end":{"line":1,"column":6788}},"214":{"start":{"line":1,"column":6796},"end":{"line":1,"column":6810}},"215":{"start":{"line":1,"column":6818},"end":{"line":1,"column":6820}},"216":{"start":{"line":1,"column":6821},"end":{"line":1,"column":7492}},"217":{"start":{"line":1,"column":6866},"end":{"line":1,"column":6872}},"218":{"start":{"line":1,"column":6880},"end":{"line":1,"column":6886}},"219":{"start":{"line":1,"column":6894},"end":{"line":1,"column":6900}},"220":{"start":{"line":1,"column":6908},"end":{"line":1,"column":7216}},"221":{"start":{"line":1,"column":6933},"end":{"line":1,"column":6941}},"222":{"start":{"line":1,"column":6954},"end":{"line":1,"column":6969}},"223":{"start":{"line":1,"column":6970},"end":{"line":1,"column":7099}},"224":{"start":{"line":1,"column":6977},"end":{"line":1,"column":6996}},"225":{"start":{"line":1,"column":6996},"end":{"line":1,"column":7004}},"226":{"start":{"line":1,"column":7010},"end":{"line":1,"column":7085}},"227":{"start":{"line":1,"column":7034},"end":{"line":1,"column":7043}},"228":{"start":{"line":1,"column":7043},"end":{"line":1,"column":7062}},"229":{"start":{"line":1,"column":7062},"end":{"line":1,"column":7084}},"230":{"start":{"line":1,"column":7069},"end":{"line":1,"column":7078}},"231":{"start":{"line":1,"column":7078},"end":{"line":1,"column":7083}},"232":{"start":{"line":1,"column":7085},"end":{"line":1,"column":7098}},"233":{"start":{"line":1,"column":7093},"end":{"line":1,"column":7097}},"234":{"start":{"line":1,"column":7099},"end":{"line":1,"column":7144}},"235":{"start":{"line":1,"column":7144},"end":{"line":1,"column":7197}},"236":{"start":{"line":1,"column":7183},"end":{"line":1,"column":7192}},"237":{"start":{"line":1,"column":7192},"end":{"line":1,"column":7196}},"238":{"start":{"line":1,"column":7197},"end":{"line":1,"column":7215}},"239":{"start":{"line":1,"column":7205},"end":{"line":1,"column":7214}},"240":{"start":{"line":1,"column":7223},"end":{"line":1,"column":7225}},"241":{"start":{"line":1,"column":7226},"end":{"line":1,"column":7240}},"242":{"start":{"line":1,"column":7240},"end":{"line":1,"column":7491}},"243":{"start":{"line":1,"column":7248},"end":{"line":1,"column":7264}},"244":{"start":{"line":1,"column":7277},"end":{"line":1,"column":7282}},"245":{"start":{"line":1,"column":7290},"end":{"line":1,"column":7304}},"246":{"start":{"line":1,"column":7312},"end":{"line":1,"column":7324}},"247":{"start":{"line":1,"column":7325},"end":{"line":1,"column":7377}},"248":{"start":{"line":1,"column":7335},"end":{"line":1,"column":7361}},"249":{"start":{"line":1,"column":7361},"end":{"line":1,"column":7376}},"250":{"start":{"line":1,"column":7384},"end":{"line":1,"column":7399}},"251":{"start":{"line":1,"column":7400},"end":{"line":1,"column":7432}},"252":{"start":{"line":1,"column":7432},"end":{"line":1,"column":7458}},"253":{"start":{"line":1,"column":7458},"end":{"line":1,"column":7490}},"254":{"start":{"line":1,"column":7492},"end":{"line":1,"column":7509}},"255":{"start":{"line":1,"column":7511},"end":{"line":1,"column":7519}},"256":{"start":{"line":1,"column":7540},"end":{"line":1,"column":7542}},"257":{"start":{"line":1,"column":7545},"end":{"line":1,"column":7547}},"258":{"start":{"line":1,"column":7548},"end":{"line":1,"column":8035}},"259":{"start":{"line":1,"column":7574},"end":{"line":1,"column":7781}},"260":{"start":{"line":1,"column":7787},"end":{"line":1,"column":8034}},"261":{"start":{"line":1,"column":7810},"end":{"line":1,"column":7936}},"262":{"start":{"line":1,"column":7942},"end":{"line":1,"column":8033}},"263":{"start":{"line":1,"column":8035},"end":{"line":1,"column":8104}},"264":{"start":{"line":1,"column":8057},"end":{"line":1,"column":8103}},"265":{"start":{"line":1,"column":8110},"end":{"line":1,"column":8124}},"266":{"start":{"line":1,"column":8125},"end":{"line":1,"column":8474}},"267":{"start":{"line":1,"column":8131},"end":{"line":1,"column":8473}},"268":{"start":{"line":1,"column":8152},"end":{"line":1,"column":8346}},"269":{"start":{"line":1,"column":8160},"end":{"line":1,"column":8220}},"270":{"start":{"line":1,"column":8226},"end":{"line":1,"column":8345}},"271":{"start":{"line":1,"column":8346},"end":{"line":1,"column":8433}},"272":{"start":{"line":1,"column":8439},"end":{"line":1,"column":8472}},"273":{"start":{"line":1,"column":8474},"end":{"line":1,"column":8571}},"274":{"start":{"line":1,"column":8495},"end":{"line":1,"column":8528}},"275":{"start":{"line":1,"column":8528},"end":{"line":1,"column":8570}},"276":{"start":{"line":1,"column":8571},"end":{"line":1,"column":8746}},"277":{"start":{"line":1,"column":8598},"end":{"line":1,"column":8693}},"278":{"start":{"line":1,"column":8695},"end":{"line":1,"column":8745}},"279":{"start":{"line":1,"column":8752},"end":{"line":1,"column":8759}},"280":{"start":{"line":1,"column":8760},"end":{"line":1,"column":8780}},"281":{"start":{"line":1,"column":8766},"end":{"line":1,"column":8779}},"282":{"start":{"line":1,"column":8786},"end":{"line":1,"column":8822}},"283":{"start":{"line":1,"column":8823},"end":{"line":1,"column":8904}},"284":{"start":{"line":1,"column":8836},"end":{"line":1,"column":8903}},"285":{"start":{"line":1,"column":8904},"end":{"line":1,"column":8942}},"286":{"start":{"line":1,"column":8942},"end":{"line":1,"column":9257}},"287":{"start":{"line":1,"column":9257},"end":{"line":1,"column":9270}},"288":{"start":{"line":1,"column":9277},"end":{"line":1,"column":9371}},"289":{"start":{"line":1,"column":9395},"end":{"line":1,"column":9419}},"290":{"start":{"line":1,"column":9427},"end":{"line":1,"column":9437}},"291":{"start":{"line":1,"column":9445},"end":{"line":1,"column":9460}},"292":{"start":{"line":1,"column":9467},"end":{"line":1,"column":9622}},"293":{"start":{"line":1,"column":9486},"end":{"line":1,"column":9513}},"294":{"start":{"line":1,"column":9519},"end":{"line":1,"column":9621}},"295":{"start":{"line":1,"column":9547},"end":{"line":1,"column":9620}},"296":{"start":{"line":1,"column":9628},"end":{"line":1,"column":9655}},"297":{"start":{"line":1,"column":9663},"end":{"line":1,"column":9685}},"298":{"start":{"line":1,"column":9686},"end":{"line":1,"column":9735}},"299":{"start":{"line":1,"column":9706},"end":{"line":1,"column":9734}},"300":{"start":{"line":1,"column":9741},"end":{"line":1,"column":9745}},"301":{"start":{"line":1,"column":9762},"end":{"line":1,"column":10258}},"302":{"start":{"line":1,"column":9789},"end":{"line":1,"column":9820}},"303":{"start":{"line":1,"column":9814},"end":{"line":1,"column":9819}},"304":{"start":{"line":1,"column":9820},"end":{"line":1,"column":9959}},"305":{"start":{"line":1,"column":9843},"end":{"line":1,"column":9850}},"306":{"start":{"line":1,"column":9850},"end":{"line":1,"column":9898}},"307":{"start":{"line":1,"column":9868},"end":{"line":1,"column":9897}},"308":{"start":{"line":1,"column":9904},"end":{"line":1,"column":9958}},"309":{"start":{"line":1,"column":9951},"end":{"line":1,"column":9957}},"310":{"start":{"line":1,"column":9959},"end":{"line":1,"column":9965}},"311":{"start":{"line":1,"column":9979},"end":{"line":1,"column":10252}},"312":{"start":{"line":1,"column":9992},"end":{"line":1,"column":10004}},"313":{"start":{"line":1,"column":10012},"end":{"line":1,"column":10024}},"314":{"start":{"line":1,"column":10025},"end":{"line":1,"column":10251}},"315":{"start":{"line":1,"column":10039},"end":{"line":1,"column":10063}},"316":{"start":{"line":1,"column":10064},"end":{"line":1,"column":10080}},"317":{"start":{"line":1,"column":10087},"end":{"line":1,"column":10122}},"318":{"start":{"line":1,"column":10123},"end":{"line":1,"column":10205}},"319":{"start":{"line":1,"column":10137},"end":{"line":1,"column":10150}},"320":{"start":{"line":1,"column":10151},"end":{"line":1,"column":10204}},"321":{"start":{"line":1,"column":10205},"end":{"line":1,"column":10212}},"322":{"start":{"line":1,"column":10212},"end":{"line":1,"column":10250}},"323":{"start":{"line":1,"column":10220},"end":{"line":1,"column":10249}},"324":{"start":{"line":1,"column":10252},"end":{"line":1,"column":10257}},"325":{"start":{"line":1,"column":10275},"end":{"line":1,"column":10331}},"326":{"start":{"line":1,"column":10298},"end":{"line":1,"column":10315}},"327":{"start":{"line":1,"column":10315},"end":{"line":1,"column":10330}},"328":{"start":{"line":1,"column":10323},"end":{"line":1,"column":10329}},"329":{"start":{"line":1,"column":10357},"end":{"line":1,"column":10382}},"330":{"start":{"line":1,"column":10390},"end":{"line":1,"column":10403}},"331":{"start":{"line":1,"column":10404},"end":{"line":1,"column":10530}},"332":{"start":{"line":1,"column":10418},"end":{"line":1,"column":10426}},"333":{"start":{"line":1,"column":10434},"end":{"line":1,"column":10448}},"334":{"start":{"line":1,"column":10449},"end":{"line":1,"column":10468}},"335":{"start":{"line":1,"column":10468},"end":{"line":1,"column":10529}},"336":{"start":{"line":1,"column":10492},"end":{"line":1,"column":10510}},"337":{"start":{"line":1,"column":10510},"end":{"line":1,"column":10528}},"338":{"start":{"line":1,"column":10530},"end":{"line":1,"column":10539}},"339":{"start":{"line":1,"column":10547},"end":{"line":1,"column":10567}},"340":{"start":{"line":1,"column":10568},"end":{"line":1,"column":10623}},"341":{"start":{"line":1,"column":10617},"end":{"line":1,"column":10622}},"342":{"start":{"line":1,"column":10623},"end":{"line":1,"column":10633}},"343":{"start":{"line":1,"column":10634},"end":{"line":1,"column":10671}},"344":{"start":{"line":1,"column":10662},"end":{"line":1,"column":10670}},"345":{"start":{"line":1,"column":10671},"end":{"line":1,"column":10717}},"346":{"start":{"line":1,"column":10687},"end":{"line":1,"column":10716}},"347":{"start":{"line":1,"column":10724},"end":{"line":1,"column":10746}},"348":{"start":{"line":1,"column":10747},"end":{"line":1,"column":10771}},"349":{"start":{"line":1,"column":10777},"end":{"line":1,"column":10802}},"350":{"start":{"line":1,"column":10803},"end":{"line":1,"column":10951}},"351":{"start":{"line":1,"column":10835},"end":{"line":1,"column":10843}},"352":{"start":{"line":1,"column":10843},"end":{"line":1,"column":10871}},"353":{"start":{"line":1,"column":10871},"end":{"line":1,"column":10932}},"354":{"start":{"line":1,"column":10890},"end":{"line":1,"column":10931}},"355":{"start":{"line":1,"column":10932},"end":{"line":1,"column":10950}},"356":{"start":{"line":1,"column":10951},"end":{"line":1,"column":10968}},"357":{"start":{"line":1,"column":10991},"end":{"line":1,"column":11027}},"358":{"start":{"line":1,"column":11035},"end":{"line":1,"column":11040}},"359":{"start":{"line":1,"column":11048},"end":{"line":1,"column":11061}},"360":{"start":{"line":1,"column":11069},"end":{"line":1,"column":11078}},"361":{"start":{"line":1,"column":11085},"end":{"line":1,"column":11086}},"362":{"start":{"line":1,"column":11094},"end":{"line":1,"column":11102}},"363":{"start":{"line":1,"column":11109},"end":{"line":1,"column":11118}},"364":{"start":{"line":1,"column":11126},"end":{"line":1,"column":11127}},"365":{"start":{"line":1,"column":11134},"end":{"line":1,"column":11148}},"366":{"start":{"line":1,"column":11155},"end":{"line":1,"column":11163}},"367":{"start":{"line":1,"column":11170},"end":{"line":1,"column":11171}},"368":{"start":{"line":1,"column":11172},"end":{"line":1,"column":11180}},"369":{"start":{"line":1,"column":11190},"end":{"line":1,"column":11273}},"370":{"start":{"line":1,"column":11209},"end":{"line":1,"column":11272}},"371":{"start":{"line":1,"column":11229},"end":{"line":1,"column":11245}},"372":{"start":{"line":1,"column":11245},"end":{"line":1,"column":11260}},"373":{"start":{"line":1,"column":11266},"end":{"line":1,"column":11271}},"374":{"start":{"line":1,"column":11273},"end":{"line":1,"column":11278}},"375":{"start":{"line":1,"column":11278},"end":{"line":1,"column":11395}},"376":{"start":{"line":1,"column":11304},"end":{"line":1,"column":11309}},"377":{"start":{"line":1,"column":11317},"end":{"line":1,"column":11324}},"378":{"start":{"line":1,"column":11331},"end":{"line":1,"column":11335}},"379":{"start":{"line":1,"column":11336},"end":{"line":1,"column":11368}},"380":{"start":{"line":1,"column":11363},"end":{"line":1,"column":11367}},"381":{"start":{"line":1,"column":11368},"end":{"line":1,"column":11379}},"382":{"start":{"line":1,"column":11379},"end":{"line":1,"column":11390}},"383":{"start":{"line":1,"column":11390},"end":{"line":1,"column":11394}},"384":{"start":{"line":1,"column":11395},"end":{"line":1,"column":11409}},"385":{"start":{"line":1,"column":11416},"end":{"line":1,"column":11420}},"386":{"start":{"line":1,"column":11421},"end":{"line":1,"column":11892}},"387":{"start":{"line":1,"column":11440},"end":{"line":1,"column":11446}},"388":{"start":{"line":1,"column":11453},"end":{"line":1,"column":11465}},"389":{"start":{"line":1,"column":11473},"end":{"line":1,"column":11477}},"390":{"start":{"line":1,"column":11485},"end":{"line":1,"column":11495}},"391":{"start":{"line":1,"column":11502},"end":{"line":1,"column":11516}},"392":{"start":{"line":1,"column":11524},"end":{"line":1,"column":11532}},"393":{"start":{"line":1,"column":11539},"end":{"line":1,"column":11857}},"394":{"start":{"line":1,"column":11582},"end":{"line":1,"column":11610}},"395":{"start":{"line":1,"column":11589},"end":{"line":1,"column":11609}},"396":{"start":{"line":1,"column":11610},"end":{"line":1,"column":11625}},"397":{"start":{"line":1,"column":11632},"end":{"line":1,"column":11648}},"398":{"start":{"line":1,"column":11656},"end":{"line":1,"column":11680}},"399":{"start":{"line":1,"column":11681},"end":{"line":1,"column":11701}},"400":{"start":{"line":1,"column":11708},"end":{"line":1,"column":11721}},"401":{"start":{"line":1,"column":11722},"end":{"line":1,"column":11745}},"402":{"start":{"line":1,"column":11745},"end":{"line":1,"column":11764}},"403":{"start":{"line":1,"column":11764},"end":{"line":1,"column":11856}},"404":{"start":{"line":1,"column":11772},"end":{"line":1,"column":11821}},"405":{"start":{"line":1,"column":11821},"end":{"line":1,"column":11855}},"406":{"start":{"line":1,"column":11857},"end":{"line":1,"column":11861}},"407":{"start":{"line":1,"column":11861},"end":{"line":1,"column":11876}},"408":{"start":{"line":1,"column":11870},"end":{"line":1,"column":11875}},"409":{"start":{"line":1,"column":11876},"end":{"line":1,"column":11891}},"410":{"start":{"line":1,"column":11886},"end":{"line":1,"column":11890}},"411":{"start":{"line":1,"column":11899},"end":{"line":1,"column":11901}},"412":{"start":{"line":1,"column":11918},"end":{"line":1,"column":12069}},"413":{"start":{"line":1,"column":11952},"end":{"line":1,"column":11956}},"414":{"start":{"line":1,"column":11957},"end":{"line":1,"column":12068}},"415":{"start":{"line":1,"column":11982},"end":{"line":1,"column":11988}},"416":{"start":{"line":1,"column":11994},"end":{"line":1,"column":12067}},"417":{"start":{"line":1,"column":12013},"end":{"line":1,"column":12066}},"418":{"start":{"line":1,"column":12086},"end":{"line":1,"column":12166}},"419":{"start":{"line":1,"column":12116},"end":{"line":1,"column":12165}},"420":{"start":{"line":1,"column":12166},"end":{"line":1,"column":12177}},"421":{"start":{"line":1,"column":12178},"end":{"line":1,"column":12200}},"422":{"start":{"line":1,"column":12200},"end":{"line":1,"column":12643}},"423":{"start":{"line":1,"column":12643},"end":{"line":1,"column":13152}},"424":{"start":{"line":1,"column":13152},"end":{"line":1,"column":13189}},"425":{"start":{"line":1,"column":13189},"end":{"line":1,"column":13287}},"426":{"start":{"line":1,"column":13287},"end":{"line":1,"column":13331}},"427":{"start":{"line":1,"column":13331},"end":{"line":1,"column":13424}},"428":{"start":{"line":1,"column":13424},"end":{"line":1,"column":13472}},"429":{"start":{"line":1,"column":13472},"end":{"line":1,"column":13550}},"430":{"start":{"line":1,"column":13550},"end":{"line":1,"column":13646}},"431":{"start":{"line":1,"column":13646},"end":{"line":1,"column":13743}},"432":{"start":{"line":1,"column":13743},"end":{"line":1,"column":13828}},"433":{"start":{"line":1,"column":13828},"end":{"line":1,"column":13893}},"434":{"start":{"line":1,"column":13893},"end":{"line":1,"column":14024}},"435":{"start":{"line":1,"column":14024},"end":{"line":1,"column":14060}},"436":{"start":{"line":1,"column":14080},"end":{"line":1,"column":14095}},"437":{"start":{"line":1,"column":14096},"end":{"line":1,"column":14267}},"438":{"start":{"line":1,"column":14106},"end":{"line":1,"column":14121}},"439":{"start":{"line":1,"column":14128},"end":{"line":1,"column":14140}},"440":{"start":{"line":1,"column":14141},"end":{"line":1,"column":14156}},"441":{"start":{"line":1,"column":14156},"end":{"line":1,"column":14172}},"442":{"start":{"line":1,"column":14172},"end":{"line":1,"column":14184}},"443":{"start":{"line":1,"column":14184},"end":{"line":1,"column":14194}},"444":{"start":{"line":1,"column":14194},"end":{"line":1,"column":14198}},"445":{"start":{"line":1,"column":14208},"end":{"line":1,"column":14266}},"446":{"start":{"line":1,"column":14232},"end":{"line":1,"column":14265}},"447":{"start":{"line":1,"column":14292},"end":{"line":1,"column":14321}},"448":{"start":{"line":1,"column":14322},"end":{"line":1,"column":14336}},"449":{"start":{"line":1,"column":14336},"end":{"line":1,"column":14349}},"450":{"start":{"line":1,"column":14342},"end":{"line":1,"column":14348}},"451":{"start":{"line":1,"column":14355},"end":{"line":1,"column":14399}},"452":{"start":{"line":1,"column":14400},"end":{"line":1,"column":14405}},"453":{"start":{"line":1,"column":14405},"end":{"line":1,"column":14423}},"454":{"start":{"line":1,"column":14454},"end":{"line":1,"column":14494}},"455":{"start":{"line":1,"column":14502},"end":{"line":1,"column":14531}},"456":{"start":{"line":1,"column":14538},"end":{"line":1,"column":14540}},"457":{"start":{"line":1,"column":14541},"end":{"line":1,"column":14629}},"458":{"start":{"line":1,"column":14573},"end":{"line":1,"column":14628}},"459":{"start":{"line":1,"column":14610},"end":{"line":1,"column":14627}},"460":{"start":{"line":1,"column":14629},"end":{"line":1,"column":14637}},"461":{"start":{"line":1,"column":14643},"end":{"line":1,"column":14647}},"462":{"start":{"line":1,"column":14648},"end":{"line":1,"column":14698}},"463":{"start":{"line":1,"column":14659},"end":{"line":1,"column":14697}},"464":{"start":{"line":1,"column":14677},"end":{"line":1,"column":14695}},"465":{"start":{"line":1,"column":14704},"end":{"line":1,"column":14705}},"466":{"start":{"line":1,"column":14719},"end":{"line":1,"column":14751}},"467":{"start":{"line":1,"column":14759},"end":{"line":1,"column":14776}},"468":{"start":{"line":1,"column":14798},"end":{"line":1,"column":14852}},"469":{"start":{"line":1,"column":14854},"end":{"line":1,"column":15434}},"470":{"start":{"line":1,"column":14894},"end":{"line":1,"column":14898}},"471":{"start":{"line":1,"column":14906},"end":{"line":1,"column":14918}},"472":{"start":{"line":1,"column":14919},"end":{"line":1,"column":15433}},"473":{"start":{"line":1,"column":14959},"end":{"line":1,"column":14971}},"474":{"start":{"line":1,"column":14979},"end":{"line":1,"column":15046}},"475":{"start":{"line":1,"column":15020},"end":{"line":1,"column":15045}},"476":{"start":{"line":1,"column":15046},"end":{"line":1,"column":15062}},"477":{"start":{"line":1,"column":15053},"end":{"line":1,"column":15061}},"478":{"start":{"line":1,"column":15069},"end":{"line":1,"column":15074}},"479":{"start":{"line":1,"column":15075},"end":{"line":1,"column":15256}},"480":{"start":{"line":1,"column":15121},"end":{"line":1,"column":15255}},"481":{"start":{"line":1,"column":15241},"end":{"line":1,"column":15249}},"482":{"start":{"line":1,"column":15249},"end":{"line":1,"column":15254}},"483":{"start":{"line":1,"column":15256},"end":{"line":1,"column":15432}},"484":{"start":{"line":1,"column":15271},"end":{"line":1,"column":15316}},"485":{"start":{"line":1,"column":15317},"end":{"line":1,"column":15361}},"486":{"start":{"line":1,"column":15361},"end":{"line":1,"column":15377}},"487":{"start":{"line":1,"column":15368},"end":{"line":1,"column":15376}},"488":{"start":{"line":1,"column":15377},"end":{"line":1,"column":15427}},"489":{"start":{"line":1,"column":15427},"end":{"line":1,"column":15431}},"490":{"start":{"line":1,"column":15434},"end":{"line":1,"column":15485}},"491":{"start":{"line":1,"column":15449},"end":{"line":1,"column":15466}},"492":{"start":{"line":1,"column":15472},"end":{"line":1,"column":15484}},"493":{"start":{"line":1,"column":15479},"end":{"line":1,"column":15483}},"494":{"start":{"line":1,"column":15486},"end":{"line":1,"column":15489}},"495":{"start":{"line":1,"column":15490},"end":{"line":1,"column":15514}},"496":{"start":{"line":1,"column":15514},"end":{"line":1,"column":15535}},"497":{"start":{"line":1,"column":15535},"end":{"line":1,"column":15780}},"498":{"start":{"line":1,"column":15785},"end":{"line":1,"column":16550}},"499":{"start":{"line":1,"column":16550},"end":{"line":1,"column":17330}},"500":{"start":{"line":1,"column":17330},"end":{"line":1,"column":17476}},"501":{"start":{"line":1,"column":17476},"end":{"line":1,"column":17568}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":40},"end":{"line":1,"column":41}},"loc":{"start":{"line":1,"column":50},"end":{"line":1,"column":15781}}},"1":{"name":"k","decl":{"start":{"line":1,"column":2533},"end":{"line":1,"column":2534}},"loc":{"start":{"line":1,"column":2537},"end":{"line":1,"column":5371}}},"2":{"name":"ab","decl":{"start":{"line":1,"column":2799},"end":{"line":1,"column":2801}},"loc":{"start":{"line":1,"column":2805},"end":{"line":1,"column":3055}}},"3":{"name":"T","decl":{"start":{"line":1,"column":3064},"end":{"line":1,"column":3065}},"loc":{"start":{"line":1,"column":3069},"end":{"line":1,"column":3219}}},"4":{"name":"X","decl":{"start":{"line":1,"column":3228},"end":{"line":1,"column":3229}},"loc":{"start":{"line":1,"column":3233},"end":{"line":1,"column":4214}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":1,"column":3804},"end":{"line":1,"column":3805}},"loc":{"start":{"line":1,"column":3819},"end":{"line":1,"column":3855}}},"6":{"name":"W","decl":{"start":{"line":1,"column":4223},"end":{"line":1,"column":4224}},"loc":{"start":{"line":1,"column":4228},"end":{"line":1,"column":5197}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":1,"column":5088},"end":{"line":1,"column":5089}},"loc":{"start":{"line":1,"column":5100},"end":{"line":1,"column":5173}}},"8":{"name":"a","decl":{"start":{"line":1,"column":5380},"end":{"line":1,"column":5381}},"loc":{"start":{"line":1,"column":5384},"end":{"line":1,"column":6108}}},"9":{"name":"aa","decl":{"start":{"line":1,"column":5660},"end":{"line":1,"column":5662}},"loc":{"start":{"line":1,"column":5666},"end":{"line":1,"column":6046}}},"10":{"name":"B","decl":{"start":{"line":1,"column":6117},"end":{"line":1,"column":6118}},"loc":{"start":{"line":1,"column":6127},"end":{"line":1,"column":6208}}},"11":{"name":"o","decl":{"start":{"line":1,"column":6228},"end":{"line":1,"column":6229}},"loc":{"start":{"line":1,"column":6232},"end":{"line":1,"column":6387}}},"12":{"name":"g","decl":{"start":{"line":1,"column":6396},"end":{"line":1,"column":6397}},"loc":{"start":{"line":1,"column":6402},"end":{"line":1,"column":7520}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":1,"column":6419},"end":{"line":1,"column":6420}},"loc":{"start":{"line":1,"column":6429},"end":{"line":1,"column":6696}}},"14":{"name":"(anonymous_14)","decl":{"start":{"line":1,"column":6721},"end":{"line":1,"column":6722}},"loc":{"start":{"line":1,"column":6733},"end":{"line":1,"column":7510}}},"15":{"name":"i","decl":{"start":{"line":1,"column":7529},"end":{"line":1,"column":7530}},"loc":{"start":{"line":1,"column":7533},"end":{"line":1,"column":9271}}},"16":{"name":"Q","decl":{"start":{"line":1,"column":9381},"end":{"line":1,"column":9382}},"loc":{"start":{"line":1,"column":9388},"end":{"line":1,"column":10969}}},"17":{"name":"ae","decl":{"start":{"line":1,"column":9755},"end":{"line":1,"column":9757}},"loc":{"start":{"line":1,"column":9761},"end":{"line":1,"column":10259}}},"18":{"name":"ad","decl":{"start":{"line":1,"column":10268},"end":{"line":1,"column":10270}},"loc":{"start":{"line":1,"column":10274},"end":{"line":1,"column":10634}}},"19":{"name":"ai","decl":{"start":{"line":1,"column":10340},"end":{"line":1,"column":10342}},"loc":{"start":{"line":1,"column":10349},"end":{"line":1,"column":10540}}},"20":{"name":"D","decl":{"start":{"line":1,"column":10978},"end":{"line":1,"column":10979}},"loc":{"start":{"line":1,"column":10983},"end":{"line":1,"column":11893}}},"21":{"name":"c","decl":{"start":{"line":1,"column":11911},"end":{"line":1,"column":11912}},"loc":{"start":{"line":1,"column":11917},"end":{"line":1,"column":12070}}},"22":{"name":"q","decl":{"start":{"line":1,"column":12079},"end":{"line":1,"column":12080}},"loc":{"start":{"line":1,"column":12085},"end":{"line":1,"column":12178}}},"23":{"name":"d","decl":{"start":{"line":1,"column":14069},"end":{"line":1,"column":14070}},"loc":{"start":{"line":1,"column":14073},"end":{"line":1,"column":14268}}},"24":{"name":"y","decl":{"start":{"line":1,"column":14277},"end":{"line":1,"column":14278}},"loc":{"start":{"line":1,"column":14285},"end":{"line":1,"column":14424}}},"25":{"name":"b","decl":{"start":{"line":1,"column":14433},"end":{"line":1,"column":14434}},"loc":{"start":{"line":1,"column":14438},"end":{"line":1,"column":15490}}},"26":{"name":"Y","decl":{"start":{"line":1,"column":14448},"end":{"line":1,"column":14449}},"loc":{"start":{"line":1,"column":14453},"end":{"line":1,"column":14495}}},"27":{"name":"(anonymous_27)","decl":{"start":{"line":1,"column":14666},"end":{"line":1,"column":14667}},"loc":{"start":{"line":1,"column":14676},"end":{"line":1,"column":14696}}},"28":{"name":"U","decl":{"start":{"line":1,"column":14786},"end":{"line":1,"column":14787}},"loc":{"start":{"line":1,"column":14789},"end":{"line":1,"column":15486}}}},"branchMap":{"0":{"loc":{"start":{"line":1,"column":2616},"end":{"line":1,"column":2753}},"type":"if","locations":[{"start":{"line":1,"column":2616},"end":{"line":1,"column":2753}},{"start":{"line":1,"column":2616},"end":{"line":1,"column":2753}}]},"1":{"loc":{"start":{"line":1,"column":2647},"end":{"line":1,"column":2752}},"type":"if","locations":[{"start":{"line":1,"column":2647},"end":{"line":1,"column":2752}},{"start":{"line":1,"column":2647},"end":{"line":1,"column":2752}}]},"2":{"loc":{"start":{"line":1,"column":2830},"end":{"line":1,"column":2852}},"type":"if","locations":[{"start":{"line":1,"column":2830},"end":{"line":1,"column":2852}},{"start":{"line":1,"column":2830},"end":{"line":1,"column":2852}}]},"3":{"loc":{"start":{"line":1,"column":2881},"end":{"line":1,"column":3054}},"type":"if","locations":[{"start":{"line":1,"column":2881},"end":{"line":1,"column":3054}},{"start":{"line":1,"column":2881},"end":{"line":1,"column":3054}}]},"4":{"loc":{"start":{"line":1,"column":2903},"end":{"line":1,"column":3053}},"type":"if","locations":[{"start":{"line":1,"column":2903},"end":{"line":1,"column":3053}},{"start":{"line":1,"column":2903},"end":{"line":1,"column":3053}}]},"5":{"loc":{"start":{"line":1,"column":2906},"end":{"line":1,"column":2922}},"type":"binary-expr","locations":[{"start":{"line":1,"column":2906},"end":{"line":1,"column":2913}},{"start":{"line":1,"column":2915},"end":{"line":1,"column":2922}}]},"6":{"loc":{"start":{"line":1,"column":2964},"end":{"line":1,"column":3052}},"type":"if","locations":[{"start":{"line":1,"column":2964},"end":{"line":1,"column":3052}},{"start":{"line":1,"column":2964},"end":{"line":1,"column":3052}}]},"7":{"loc":{"start":{"line":1,"column":2967},"end":{"line":1,"column":2985}},"type":"binary-expr","locations":[{"start":{"line":1,"column":2967},"end":{"line":1,"column":2975}},{"start":{"line":1,"column":2977},"end":{"line":1,"column":2985}}]},"8":{"loc":{"start":{"line":1,"column":3070},"end":{"line":1,"column":3123}},"type":"if","locations":[{"start":{"line":1,"column":3070},"end":{"line":1,"column":3123}},{"start":{"line":1,"column":3070},"end":{"line":1,"column":3123}}]},"9":{"loc":{"start":{"line":1,"column":3087},"end":{"line":1,"column":3105}},"type":"cond-expr","locations":[{"start":{"line":1,"column":3093},"end":{"line":1,"column":3099}},{"start":{"line":1,"column":3100},"end":{"line":1,"column":3105}}]},"10":{"loc":{"start":{"line":1,"column":3154},"end":{"line":1,"column":3209}},"type":"if","locations":[{"start":{"line":1,"column":3154},"end":{"line":1,"column":3209}},{"start":{"line":1,"column":3154},"end":{"line":1,"column":3209}}]},"11":{"loc":{"start":{"line":1,"column":3157},"end":{"line":1,"column":3196}},"type":"binary-expr","locations":[{"start":{"line":1,"column":3157},"end":{"line":1,"column":3166}},{"start":{"line":1,"column":3168},"end":{"line":1,"column":3176}},{"start":{"line":1,"column":3178},"end":{"line":1,"column":3186}},{"start":{"line":1,"column":3188},"end":{"line":1,"column":3196}}]},"12":{"loc":{"start":{"line":1,"column":3489},"end":{"line":1,"column":3795}},"type":"if","locations":[{"start":{"line":1,"column":3489},"end":{"line":1,"column":3795}},{"start":{"line":1,"column":3489},"end":{"line":1,"column":3795}}]},"13":{"loc":{"start":{"line":1,"column":3552},"end":{"line":1,"column":3613}},"type":"if","locations":[{"start":{"line":1,"column":3552},"end":{"line":1,"column":3613}},{"start":{"line":1,"column":3552},"end":{"line":1,"column":3613}}]},"14":{"loc":{"start":{"line":1,"column":3555},"end":{"line":1,"column":3578}},"type":"binary-expr","locations":[{"start":{"line":1,"column":3555},"end":{"line":1,"column":3562}},{"start":{"line":1,"column":3564},"end":{"line":1,"column":3578}}]},"15":{"loc":{"start":{"line":1,"column":3630},"end":{"line":1,"column":3794}},"type":"if","locations":[{"start":{"line":1,"column":3630},"end":{"line":1,"column":3794}},{"start":{"line":1,"column":3630},"end":{"line":1,"column":3794}}]},"16":{"loc":{"start":{"line":1,"column":3635},"end":{"line":1,"column":3648}},"type":"binary-expr","locations":[{"start":{"line":1,"column":3635},"end":{"line":1,"column":3640}},{"start":{"line":1,"column":3642},"end":{"line":1,"column":3648}}]},"17":{"loc":{"start":{"line":1,"column":3651},"end":{"line":1,"column":3720}},"type":"if","locations":[{"start":{"line":1,"column":3651},"end":{"line":1,"column":3720}},{"start":{"line":1,"column":3651},"end":{"line":1,"column":3720}}]},"18":{"loc":{"start":{"line":1,"column":3656},"end":{"line":1,"column":3668}},"type":"binary-expr","locations":[{"start":{"line":1,"column":3656},"end":{"line":1,"column":3661}},{"start":{"line":1,"column":3663},"end":{"line":1,"column":3668}}]},"19":{"loc":{"start":{"line":1,"column":3720},"end":{"line":1,"column":3793}},"type":"if","locations":[{"start":{"line":1,"column":3720},"end":{"line":1,"column":3793}},{"start":{"line":1,"column":3720},"end":{"line":1,"column":3793}}]},"20":{"loc":{"start":{"line":1,"column":3725},"end":{"line":1,"column":3738}},"type":"binary-expr","locations":[{"start":{"line":1,"column":3725},"end":{"line":1,"column":3730}},{"start":{"line":1,"column":3732},"end":{"line":1,"column":3738}}]},"21":{"loc":{"start":{"line":1,"column":3826},"end":{"line":1,"column":3854}},"type":"binary-expr","locations":[{"start":{"line":1,"column":3827},"end":{"line":1,"column":3838}},{"start":{"line":1,"column":3842},"end":{"line":1,"column":3853}}]},"22":{"loc":{"start":{"line":1,"column":3930},"end":{"line":1,"column":3997}},"type":"if","locations":[{"start":{"line":1,"column":3930},"end":{"line":1,"column":3997}},{"start":{"line":1,"column":3930},"end":{"line":1,"column":3997}}]},"23":{"loc":{"start":{"line":1,"column":4011},"end":{"line":1,"column":4031}},"type":"if","locations":[{"start":{"line":1,"column":4011},"end":{"line":1,"column":4031}},{"start":{"line":1,"column":4011},"end":{"line":1,"column":4031}}]},"24":{"loc":{"start":{"line":1,"column":4116},"end":{"line":1,"column":4181}},"type":"if","locations":[{"start":{"line":1,"column":4116},"end":{"line":1,"column":4181}},{"start":{"line":1,"column":4116},"end":{"line":1,"column":4181}}]},"25":{"loc":{"start":{"line":1,"column":4132},"end":{"line":1,"column":4163}},"type":"if","locations":[{"start":{"line":1,"column":4132},"end":{"line":1,"column":4163}},{"start":{"line":1,"column":4132},"end":{"line":1,"column":4163}}]},"26":{"loc":{"start":{"line":1,"column":4496},"end":{"line":1,"column":4594}},"type":"if","locations":[{"start":{"line":1,"column":4496},"end":{"line":1,"column":4594}},{"start":{"line":1,"column":4496},"end":{"line":1,"column":4594}}]},"27":{"loc":{"start":{"line":1,"column":4519},"end":{"line":1,"column":4593}},"type":"if","locations":[{"start":{"line":1,"column":4519},"end":{"line":1,"column":4593}},{"start":{"line":1,"column":4519},"end":{"line":1,"column":4593}}]},"28":{"loc":{"start":{"line":1,"column":4567},"end":{"line":1,"column":4592}},"type":"if","locations":[{"start":{"line":1,"column":4567},"end":{"line":1,"column":4592}},{"start":{"line":1,"column":4567},"end":{"line":1,"column":4592}}]},"29":{"loc":{"start":{"line":1,"column":4570},"end":{"line":1,"column":4580}},"type":"binary-expr","locations":[{"start":{"line":1,"column":4570},"end":{"line":1,"column":4572}},{"start":{"line":1,"column":4574},"end":{"line":1,"column":4580}}]},"30":{"loc":{"start":{"line":1,"column":4627},"end":{"line":1,"column":4655}},"type":"if","locations":[{"start":{"line":1,"column":4627},"end":{"line":1,"column":4655}},{"start":{"line":1,"column":4627},"end":{"line":1,"column":4655}}]},"31":{"loc":{"start":{"line":1,"column":4700},"end":{"line":1,"column":4844}},"type":"if","locations":[{"start":{"line":1,"column":4700},"end":{"line":1,"column":4844}},{"start":{"line":1,"column":4700},"end":{"line":1,"column":4844}}]},"32":{"loc":{"start":{"line":1,"column":4718},"end":{"line":1,"column":4754}},"type":"if","locations":[{"start":{"line":1,"column":4718},"end":{"line":1,"column":4754}},{"start":{"line":1,"column":4718},"end":{"line":1,"column":4754}}]},"33":{"loc":{"start":{"line":1,"column":4760},"end":{"line":1,"column":4843}},"type":"if","locations":[{"start":{"line":1,"column":4760},"end":{"line":1,"column":4843}},{"start":{"line":1,"column":4760},"end":{"line":1,"column":4843}}]},"34":{"loc":{"start":{"line":1,"column":4808},"end":{"line":1,"column":4842}},"type":"if","locations":[{"start":{"line":1,"column":4808},"end":{"line":1,"column":4842}},{"start":{"line":1,"column":4808},"end":{"line":1,"column":4842}}]},"35":{"loc":{"start":{"line":1,"column":4811},"end":{"line":1,"column":4821}},"type":"binary-expr","locations":[{"start":{"line":1,"column":4811},"end":{"line":1,"column":4813}},{"start":{"line":1,"column":4815},"end":{"line":1,"column":4821}}]},"36":{"loc":{"start":{"line":1,"column":4875},"end":{"line":1,"column":4918}},"type":"if","locations":[{"start":{"line":1,"column":4875},"end":{"line":1,"column":4918}},{"start":{"line":1,"column":4875},"end":{"line":1,"column":4918}}]},"37":{"loc":{"start":{"line":1,"column":4878},"end":{"line":1,"column":4906}},"type":"binary-expr","locations":[{"start":{"line":1,"column":4878},"end":{"line":1,"column":4890}},{"start":{"line":1,"column":4892},"end":{"line":1,"column":4906}}]},"38":{"loc":{"start":{"line":1,"column":4919},"end":{"line":1,"column":5178}},"type":"if","locations":[{"start":{"line":1,"column":4919},"end":{"line":1,"column":5178}},{"start":{"line":1,"column":4919},"end":{"line":1,"column":5178}}]},"39":{"loc":{"start":{"line":1,"column":4922},"end":{"line":1,"column":4938}},"type":"binary-expr","locations":[{"start":{"line":1,"column":4922},"end":{"line":1,"column":4935}},{"start":{"line":1,"column":4937},"end":{"line":1,"column":4938}}]},"40":{"loc":{"start":{"line":1,"column":4999},"end":{"line":1,"column":5176}},"type":"if","locations":[{"start":{"line":1,"column":4999},"end":{"line":1,"column":5176}},{"start":{"line":1,"column":4999},"end":{"line":1,"column":5176}}]},"41":{"loc":{"start":{"line":1,"column":5002},"end":{"line":1,"column":5024}},"type":"binary-expr","locations":[{"start":{"line":1,"column":5002},"end":{"line":1,"column":5014}},{"start":{"line":1,"column":5016},"end":{"line":1,"column":5024}}]},"42":{"loc":{"start":{"line":1,"column":5044},"end":{"line":1,"column":5175}},"type":"if","locations":[{"start":{"line":1,"column":5044},"end":{"line":1,"column":5175}},{"start":{"line":1,"column":5044},"end":{"line":1,"column":5175}}]},"43":{"loc":{"start":{"line":1,"column":5251},"end":{"line":1,"column":5302}},"type":"if","locations":[{"start":{"line":1,"column":5251},"end":{"line":1,"column":5302}},{"start":{"line":1,"column":5251},"end":{"line":1,"column":5302}}]},"44":{"loc":{"start":{"line":1,"column":5254},"end":{"line":1,"column":5277}},"type":"binary-expr","locations":[{"start":{"line":1,"column":5254},"end":{"line":1,"column":5263}},{"start":{"line":1,"column":5265},"end":{"line":1,"column":5277}}]},"45":{"loc":{"start":{"line":1,"column":5358},"end":{"line":1,"column":5369}},"type":"cond-expr","locations":[{"start":{"line":1,"column":5361},"end":{"line":1,"column":5365}},{"start":{"line":1,"column":5366},"end":{"line":1,"column":5369}}]},"46":{"loc":{"start":{"line":1,"column":5456},"end":{"line":1,"column":5617}},"type":"if","locations":[{"start":{"line":1,"column":5456},"end":{"line":1,"column":5617}},{"start":{"line":1,"column":5456},"end":{"line":1,"column":5617}}]},"47":{"loc":{"start":{"line":1,"column":5508},"end":{"line":1,"column":5616}},"type":"if","locations":[{"start":{"line":1,"column":5508},"end":{"line":1,"column":5616}},{"start":{"line":1,"column":5508},"end":{"line":1,"column":5616}}]},"48":{"loc":{"start":{"line":1,"column":5623},"end":{"line":1,"column":5650}},"type":"binary-expr","locations":[{"start":{"line":1,"column":5623},"end":{"line":1,"column":5624}},{"start":{"line":1,"column":5626},"end":{"line":1,"column":5650}}]},"49":{"loc":{"start":{"line":1,"column":5667},"end":{"line":1,"column":6045}},"type":"switch","locations":[{"start":{"line":1,"column":5687},"end":{"line":1,"column":5869}},{"start":{"line":1,"column":5869},"end":{"line":1,"column":5876}},{"start":{"line":1,"column":5876},"end":{"line":1,"column":6044}}]},"50":{"loc":{"start":{"line":1,"column":5694},"end":{"line":1,"column":5726}},"type":"if","locations":[{"start":{"line":1,"column":5694},"end":{"line":1,"column":5726}},{"start":{"line":1,"column":5694},"end":{"line":1,"column":5726}}]},"51":{"loc":{"start":{"line":1,"column":5799},"end":{"line":1,"column":5863}},"type":"if","locations":[{"start":{"line":1,"column":5799},"end":{"line":1,"column":5863}},{"start":{"line":1,"column":5799},"end":{"line":1,"column":5863}}]},"52":{"loc":{"start":{"line":1,"column":5802},"end":{"line":1,"column":5822}},"type":"binary-expr","locations":[{"start":{"line":1,"column":5802},"end":{"line":1,"column":5811}},{"start":{"line":1,"column":5813},"end":{"line":1,"column":5822}}]},"53":{"loc":{"start":{"line":1,"column":5903},"end":{"line":1,"column":6039}},"type":"if","locations":[{"start":{"line":1,"column":5903},"end":{"line":1,"column":6039}},{"start":{"line":1,"column":5903},"end":{"line":1,"column":6039}}]},"54":{"loc":{"start":{"line":1,"column":5917},"end":{"line":1,"column":5991}},"type":"if","locations":[{"start":{"line":1,"column":5917},"end":{"line":1,"column":5991}},{"start":{"line":1,"column":5917},"end":{"line":1,"column":5991}}]},"55":{"loc":{"start":{"line":1,"column":6128},"end":{"line":1,"column":6142}},"type":"if","locations":[{"start":{"line":1,"column":6128},"end":{"line":1,"column":6142}},{"start":{"line":1,"column":6128},"end":{"line":1,"column":6142}}]},"56":{"loc":{"start":{"line":1,"column":6310},"end":{"line":1,"column":6361}},"type":"cond-expr","locations":[{"start":{"line":1,"column":6319},"end":{"line":1,"column":6324}},{"start":{"line":1,"column":6326},"end":{"line":1,"column":6361}}]},"57":{"loc":{"start":{"line":1,"column":6319},"end":{"line":1,"column":6324}},"type":"cond-expr","locations":[{"start":{"line":1,"column":6321},"end":{"line":1,"column":6322}},{"start":{"line":1,"column":6323},"end":{"line":1,"column":6324}}]},"58":{"loc":{"start":{"line":1,"column":6326},"end":{"line":1,"column":6361}},"type":"cond-expr","locations":[{"start":{"line":1,"column":6335},"end":{"line":1,"column":6358}},{"start":{"line":1,"column":6360},"end":{"line":1,"column":6361}}]},"59":{"loc":{"start":{"line":1,"column":6335},"end":{"line":1,"column":6358}},"type":"cond-expr","locations":[{"start":{"line":1,"column":6355},"end":{"line":1,"column":6356}},{"start":{"line":1,"column":6357},"end":{"line":1,"column":6358}}]},"60":{"loc":{"start":{"line":1,"column":6369},"end":{"line":1,"column":6386}},"type":"cond-expr","locations":[{"start":{"line":1,"column":6375},"end":{"line":1,"column":6384}},{"start":{"line":1,"column":6385},"end":{"line":1,"column":6386}}]},"61":{"loc":{"start":{"line":1,"column":6530},"end":{"line":1,"column":6588}},"type":"if","locations":[{"start":{"line":1,"column":6530},"end":{"line":1,"column":6588}},{"start":{"line":1,"column":6530},"end":{"line":1,"column":6588}}]},"62":{"loc":{"start":{"line":1,"column":6613},"end":{"line":1,"column":6664}},"type":"if","locations":[{"start":{"line":1,"column":6613},"end":{"line":1,"column":6664}},{"start":{"line":1,"column":6613},"end":{"line":1,"column":6664}}]},"63":{"loc":{"start":{"line":1,"column":6796},"end":{"line":1,"column":6810}},"type":"binary-expr","locations":[{"start":{"line":1,"column":6796},"end":{"line":1,"column":6806}},{"start":{"line":1,"column":6808},"end":{"line":1,"column":6810}}]},"64":{"loc":{"start":{"line":1,"column":6908},"end":{"line":1,"column":7216}},"type":"if","locations":[{"start":{"line":1,"column":6908},"end":{"line":1,"column":7216}},{"start":{"line":1,"column":6908},"end":{"line":1,"column":7216}}]},"65":{"loc":{"start":{"line":1,"column":6970},"end":{"line":1,"column":7099}},"type":"if","locations":[{"start":{"line":1,"column":6970},"end":{"line":1,"column":7099}},{"start":{"line":1,"column":6970},"end":{"line":1,"column":7099}}]},"66":{"loc":{"start":{"line":1,"column":7062},"end":{"line":1,"column":7084}},"type":"if","locations":[{"start":{"line":1,"column":7062},"end":{"line":1,"column":7084}},{"start":{"line":1,"column":7062},"end":{"line":1,"column":7084}}]},"67":{"loc":{"start":{"line":1,"column":7085},"end":{"line":1,"column":7098}},"type":"if","locations":[{"start":{"line":1,"column":7085},"end":{"line":1,"column":7098}},{"start":{"line":1,"column":7085},"end":{"line":1,"column":7098}}]},"68":{"loc":{"start":{"line":1,"column":7102},"end":{"line":1,"column":7143}},"type":"binary-expr","locations":[{"start":{"line":1,"column":7102},"end":{"line":1,"column":7114}},{"start":{"line":1,"column":7116},"end":{"line":1,"column":7143}}]},"69":{"loc":{"start":{"line":1,"column":7144},"end":{"line":1,"column":7197}},"type":"if","locations":[{"start":{"line":1,"column":7144},"end":{"line":1,"column":7197}},{"start":{"line":1,"column":7144},"end":{"line":1,"column":7197}}]},"70":{"loc":{"start":{"line":1,"column":7147},"end":{"line":1,"column":7181}},"type":"binary-expr","locations":[{"start":{"line":1,"column":7147},"end":{"line":1,"column":7149}},{"start":{"line":1,"column":7151},"end":{"line":1,"column":7181}}]},"71":{"loc":{"start":{"line":1,"column":7153},"end":{"line":1,"column":7180}},"type":"binary-expr","locations":[{"start":{"line":1,"column":7153},"end":{"line":1,"column":7155}},{"start":{"line":1,"column":7157},"end":{"line":1,"column":7180}}]},"72":{"loc":{"start":{"line":1,"column":7197},"end":{"line":1,"column":7215}},"type":"if","locations":[{"start":{"line":1,"column":7197},"end":{"line":1,"column":7215}},{"start":{"line":1,"column":7197},"end":{"line":1,"column":7215}}]},"73":{"loc":{"start":{"line":1,"column":7240},"end":{"line":1,"column":7491}},"type":"if","locations":[{"start":{"line":1,"column":7240},"end":{"line":1,"column":7491}},{"start":{"line":1,"column":7240},"end":{"line":1,"column":7491}}]},"74":{"loc":{"start":{"line":1,"column":7325},"end":{"line":1,"column":7377}},"type":"if","locations":[{"start":{"line":1,"column":7325},"end":{"line":1,"column":7377}},{"start":{"line":1,"column":7325},"end":{"line":1,"column":7377}}]},"75":{"loc":{"start":{"line":1,"column":7548},"end":{"line":1,"column":8035}},"type":"if","locations":[{"start":{"line":1,"column":7548},"end":{"line":1,"column":8035}},{"start":{"line":1,"column":7548},"end":{"line":1,"column":8035}}]},"76":{"loc":{"start":{"line":1,"column":7787},"end":{"line":1,"column":8034}},"type":"if","locations":[{"start":{"line":1,"column":7787},"end":{"line":1,"column":8034}},{"start":{"line":1,"column":7787},"end":{"line":1,"column":8034}}]},"77":{"loc":{"start":{"line":1,"column":8035},"end":{"line":1,"column":8104}},"type":"if","locations":[{"start":{"line":1,"column":8035},"end":{"line":1,"column":8104}},{"start":{"line":1,"column":8035},"end":{"line":1,"column":8104}}]},"78":{"loc":{"start":{"line":1,"column":8125},"end":{"line":1,"column":8474}},"type":"if","locations":[{"start":{"line":1,"column":8125},"end":{"line":1,"column":8474}},{"start":{"line":1,"column":8125},"end":{"line":1,"column":8474}}]},"79":{"loc":{"start":{"line":1,"column":8131},"end":{"line":1,"column":8473}},"type":"if","locations":[{"start":{"line":1,"column":8131},"end":{"line":1,"column":8473}},{"start":{"line":1,"column":8131},"end":{"line":1,"column":8473}}]},"80":{"loc":{"start":{"line":1,"column":8152},"end":{"line":1,"column":8346}},"type":"if","locations":[{"start":{"line":1,"column":8152},"end":{"line":1,"column":8346}},{"start":{"line":1,"column":8152},"end":{"line":1,"column":8346}}]},"81":{"loc":{"start":{"line":1,"column":8474},"end":{"line":1,"column":8571}},"type":"if","locations":[{"start":{"line":1,"column":8474},"end":{"line":1,"column":8571}},{"start":{"line":1,"column":8474},"end":{"line":1,"column":8571}}]},"82":{"loc":{"start":{"line":1,"column":8571},"end":{"line":1,"column":8746}},"type":"if","locations":[{"start":{"line":1,"column":8571},"end":{"line":1,"column":8746}},{"start":{"line":1,"column":8571},"end":{"line":1,"column":8746}}]},"83":{"loc":{"start":{"line":1,"column":8760},"end":{"line":1,"column":8780}},"type":"if","locations":[{"start":{"line":1,"column":8760},"end":{"line":1,"column":8780}},{"start":{"line":1,"column":8760},"end":{"line":1,"column":8780}}]},"84":{"loc":{"start":{"line":1,"column":8823},"end":{"line":1,"column":8904}},"type":"if","locations":[{"start":{"line":1,"column":8823},"end":{"line":1,"column":8904}},{"start":{"line":1,"column":8823},"end":{"line":1,"column":8904}}]},"85":{"loc":{"start":{"line":1,"column":9467},"end":{"line":1,"column":9622}},"type":"if","locations":[{"start":{"line":1,"column":9467},"end":{"line":1,"column":9622}},{"start":{"line":1,"column":9467},"end":{"line":1,"column":9622}}]},"86":{"loc":{"start":{"line":1,"column":9519},"end":{"line":1,"column":9621}},"type":"if","locations":[{"start":{"line":1,"column":9519},"end":{"line":1,"column":9621}},{"start":{"line":1,"column":9519},"end":{"line":1,"column":9621}}]},"87":{"loc":{"start":{"line":1,"column":9628},"end":{"line":1,"column":9655}},"type":"binary-expr","locations":[{"start":{"line":1,"column":9628},"end":{"line":1,"column":9629}},{"start":{"line":1,"column":9631},"end":{"line":1,"column":9655}}]},"88":{"loc":{"start":{"line":1,"column":9762},"end":{"line":1,"column":10258}},"type":"switch","locations":[{"start":{"line":1,"column":9782},"end":{"line":1,"column":9965}},{"start":{"line":1,"column":9965},"end":{"line":1,"column":9972}},{"start":{"line":1,"column":9972},"end":{"line":1,"column":10257}}]},"89":{"loc":{"start":{"line":1,"column":9789},"end":{"line":1,"column":9820}},"type":"if","locations":[{"start":{"line":1,"column":9789},"end":{"line":1,"column":9820}},{"start":{"line":1,"column":9789},"end":{"line":1,"column":9820}}]},"90":{"loc":{"start":{"line":1,"column":9820},"end":{"line":1,"column":9959}},"type":"if","locations":[{"start":{"line":1,"column":9820},"end":{"line":1,"column":9959}},{"start":{"line":1,"column":9820},"end":{"line":1,"column":9959}}]},"91":{"loc":{"start":{"line":1,"column":9850},"end":{"line":1,"column":9898}},"type":"if","locations":[{"start":{"line":1,"column":9850},"end":{"line":1,"column":9898}},{"start":{"line":1,"column":9850},"end":{"line":1,"column":9898}}]},"92":{"loc":{"start":{"line":1,"column":9979},"end":{"line":1,"column":10252}},"type":"if","locations":[{"start":{"line":1,"column":9979},"end":{"line":1,"column":10252}},{"start":{"line":1,"column":9979},"end":{"line":1,"column":10252}}]},"93":{"loc":{"start":{"line":1,"column":10025},"end":{"line":1,"column":10251}},"type":"if","locations":[{"start":{"line":1,"column":10025},"end":{"line":1,"column":10251}},{"start":{"line":1,"column":10025},"end":{"line":1,"column":10251}}]},"94":{"loc":{"start":{"line":1,"column":10123},"end":{"line":1,"column":10205}},"type":"if","locations":[{"start":{"line":1,"column":10123},"end":{"line":1,"column":10205}},{"start":{"line":1,"column":10123},"end":{"line":1,"column":10205}}]},"95":{"loc":{"start":{"line":1,"column":10212},"end":{"line":1,"column":10250}},"type":"if","locations":[{"start":{"line":1,"column":10212},"end":{"line":1,"column":10250}},{"start":{"line":1,"column":10212},"end":{"line":1,"column":10250}}]},"96":{"loc":{"start":{"line":1,"column":10315},"end":{"line":1,"column":10330}},"type":"if","locations":[{"start":{"line":1,"column":10315},"end":{"line":1,"column":10330}},{"start":{"line":1,"column":10315},"end":{"line":1,"column":10330}}]},"97":{"loc":{"start":{"line":1,"column":10357},"end":{"line":1,"column":10382}},"type":"cond-expr","locations":[{"start":{"line":1,"column":10360},"end":{"line":1,"column":10379}},{"start":{"line":1,"column":10380},"end":{"line":1,"column":10382}}]},"98":{"loc":{"start":{"line":1,"column":10404},"end":{"line":1,"column":10530}},"type":"if","locations":[{"start":{"line":1,"column":10404},"end":{"line":1,"column":10530}},{"start":{"line":1,"column":10404},"end":{"line":1,"column":10530}}]},"99":{"loc":{"start":{"line":1,"column":10579},"end":{"line":1,"column":10614}},"type":"binary-expr","locations":[{"start":{"line":1,"column":10580},"end":{"line":1,"column":10596}},{"start":{"line":1,"column":10599},"end":{"line":1,"column":10614}}]},"100":{"loc":{"start":{"line":1,"column":10671},"end":{"line":1,"column":10717}},"type":"if","locations":[{"start":{"line":1,"column":10671},"end":{"line":1,"column":10717}},{"start":{"line":1,"column":10671},"end":{"line":1,"column":10717}}]},"101":{"loc":{"start":{"line":1,"column":10777},"end":{"line":1,"column":10802}},"type":"binary-expr","locations":[{"start":{"line":1,"column":10777},"end":{"line":1,"column":10799}},{"start":{"line":1,"column":10801},"end":{"line":1,"column":10802}}]},"102":{"loc":{"start":{"line":1,"column":10871},"end":{"line":1,"column":10932}},"type":"if","locations":[{"start":{"line":1,"column":10871},"end":{"line":1,"column":10932}},{"start":{"line":1,"column":10871},"end":{"line":1,"column":10932}}]},"103":{"loc":{"start":{"line":1,"column":11209},"end":{"line":1,"column":11272}},"type":"if","locations":[{"start":{"line":1,"column":11209},"end":{"line":1,"column":11272}},{"start":{"line":1,"column":11209},"end":{"line":1,"column":11272}}]},"104":{"loc":{"start":{"line":1,"column":11342},"end":{"line":1,"column":11361}},"type":"binary-expr","locations":[{"start":{"line":1,"column":11342},"end":{"line":1,"column":11348}},{"start":{"line":1,"column":11350},"end":{"line":1,"column":11361}}]},"105":{"loc":{"start":{"line":1,"column":11453},"end":{"line":1,"column":11465}},"type":"binary-expr","locations":[{"start":{"line":1,"column":11453},"end":{"line":1,"column":11461}},{"start":{"line":1,"column":11463},"end":{"line":1,"column":11465}}]},"106":{"loc":{"start":{"line":1,"column":11485},"end":{"line":1,"column":11495}},"type":"binary-expr","locations":[{"start":{"line":1,"column":11485},"end":{"line":1,"column":11491}},{"start":{"line":1,"column":11493},"end":{"line":1,"column":11495}}]},"107":{"loc":{"start":{"line":1,"column":11539},"end":{"line":1,"column":11857}},"type":"if","locations":[{"start":{"line":1,"column":11539},"end":{"line":1,"column":11857}},{"start":{"line":1,"column":11539},"end":{"line":1,"column":11857}}]},"108":{"loc":{"start":{"line":1,"column":11542},"end":{"line":1,"column":11580}},"type":"binary-expr","locations":[{"start":{"line":1,"column":11542},"end":{"line":1,"column":11557}},{"start":{"line":1,"column":11560},"end":{"line":1,"column":11579}}]},"109":{"loc":{"start":{"line":1,"column":11582},"end":{"line":1,"column":11610}},"type":"if","locations":[{"start":{"line":1,"column":11582},"end":{"line":1,"column":11610}},{"start":{"line":1,"column":11582},"end":{"line":1,"column":11610}}]},"110":{"loc":{"start":{"line":1,"column":11764},"end":{"line":1,"column":11856}},"type":"if","locations":[{"start":{"line":1,"column":11764},"end":{"line":1,"column":11856}},{"start":{"line":1,"column":11764},"end":{"line":1,"column":11856}}]},"111":{"loc":{"start":{"line":1,"column":11861},"end":{"line":1,"column":11876}},"type":"if","locations":[{"start":{"line":1,"column":11861},"end":{"line":1,"column":11876}},{"start":{"line":1,"column":11861},"end":{"line":1,"column":11876}}]},"112":{"loc":{"start":{"line":1,"column":11876},"end":{"line":1,"column":11891}},"type":"if","locations":[{"start":{"line":1,"column":11876},"end":{"line":1,"column":11891}},{"start":{"line":1,"column":11876},"end":{"line":1,"column":11891}}]},"113":{"loc":{"start":{"line":1,"column":11957},"end":{"line":1,"column":12068}},"type":"if","locations":[{"start":{"line":1,"column":11957},"end":{"line":1,"column":12068}},{"start":{"line":1,"column":11957},"end":{"line":1,"column":12068}}]},"114":{"loc":{"start":{"line":1,"column":11994},"end":{"line":1,"column":12067}},"type":"if","locations":[{"start":{"line":1,"column":11994},"end":{"line":1,"column":12067}},{"start":{"line":1,"column":11994},"end":{"line":1,"column":12067}}]},"115":{"loc":{"start":{"line":1,"column":12086},"end":{"line":1,"column":12166}},"type":"if","locations":[{"start":{"line":1,"column":12086},"end":{"line":1,"column":12166}},{"start":{"line":1,"column":12086},"end":{"line":1,"column":12166}}]},"116":{"loc":{"start":{"line":1,"column":12091},"end":{"line":1,"column":12113}},"type":"binary-expr","locations":[{"start":{"line":1,"column":12091},"end":{"line":1,"column":12092}},{"start":{"line":1,"column":12094},"end":{"line":1,"column":12113}}]},"117":{"loc":{"start":{"line":1,"column":12118},"end":{"line":1,"column":12165}},"type":"cond-expr","locations":[{"start":{"line":1,"column":12134},"end":{"line":1,"column":12150}},{"start":{"line":1,"column":12151},"end":{"line":1,"column":12165}}]},"118":{"loc":{"start":{"line":1,"column":14208},"end":{"line":1,"column":14266}},"type":"if","locations":[{"start":{"line":1,"column":14208},"end":{"line":1,"column":14266}},{"start":{"line":1,"column":14208},"end":{"line":1,"column":14266}}]},"119":{"loc":{"start":{"line":1,"column":14244},"end":{"line":1,"column":14264}},"type":"cond-expr","locations":[{"start":{"line":1,"column":14255},"end":{"line":1,"column":14262}},{"start":{"line":1,"column":14263},"end":{"line":1,"column":14264}}]},"120":{"loc":{"start":{"line":1,"column":14244},"end":{"line":1,"column":14254}},"type":"binary-expr","locations":[{"start":{"line":1,"column":14244},"end":{"line":1,"column":14245}},{"start":{"line":1,"column":14247},"end":{"line":1,"column":14254}}]},"121":{"loc":{"start":{"line":1,"column":14336},"end":{"line":1,"column":14349}},"type":"if","locations":[{"start":{"line":1,"column":14336},"end":{"line":1,"column":14349}},{"start":{"line":1,"column":14336},"end":{"line":1,"column":14349}}]},"122":{"loc":{"start":{"line":1,"column":14648},"end":{"line":1,"column":14698}},"type":"if","locations":[{"start":{"line":1,"column":14648},"end":{"line":1,"column":14698}},{"start":{"line":1,"column":14648},"end":{"line":1,"column":14698}}]},"123":{"loc":{"start":{"line":1,"column":14798},"end":{"line":1,"column":14852}},"type":"cond-expr","locations":[{"start":{"line":1,"column":14832},"end":{"line":1,"column":14843}},{"start":{"line":1,"column":14844},"end":{"line":1,"column":14852}}]},"124":{"loc":{"start":{"line":1,"column":14859},"end":{"line":1,"column":14881}},"type":"binary-expr","locations":[{"start":{"line":1,"column":14859},"end":{"line":1,"column":14869}},{"start":{"line":1,"column":14871},"end":{"line":1,"column":14881}}]},"125":{"loc":{"start":{"line":1,"column":14919},"end":{"line":1,"column":15433}},"type":"if","locations":[{"start":{"line":1,"column":14919},"end":{"line":1,"column":15433}},{"start":{"line":1,"column":14919},"end":{"line":1,"column":15433}}]},"126":{"loc":{"start":{"line":1,"column":14979},"end":{"line":1,"column":15046}},"type":"if","locations":[{"start":{"line":1,"column":14979},"end":{"line":1,"column":15046}},{"start":{"line":1,"column":14979},"end":{"line":1,"column":15046}}]},"127":{"loc":{"start":{"line":1,"column":14982},"end":{"line":1,"column":15018}},"type":"binary-expr","locations":[{"start":{"line":1,"column":14982},"end":{"line":1,"column":14985}},{"start":{"line":1,"column":14988},"end":{"line":1,"column":14996}},{"start":{"line":1,"column":14999},"end":{"line":1,"column":15018}}]},"128":{"loc":{"start":{"line":1,"column":15046},"end":{"line":1,"column":15062}},"type":"if","locations":[{"start":{"line":1,"column":15046},"end":{"line":1,"column":15062}},{"start":{"line":1,"column":15046},"end":{"line":1,"column":15062}}]},"129":{"loc":{"start":{"line":1,"column":15121},"end":{"line":1,"column":15255}},"type":"if","locations":[{"start":{"line":1,"column":15121},"end":{"line":1,"column":15255}},{"start":{"line":1,"column":15121},"end":{"line":1,"column":15255}}]},"130":{"loc":{"start":{"line":1,"column":15124},"end":{"line":1,"column":15239}},"type":"binary-expr","locations":[{"start":{"line":1,"column":15125},"end":{"line":1,"column":15143}},{"start":{"line":1,"column":15145},"end":{"line":1,"column":15164}},{"start":{"line":1,"column":15166},"end":{"line":1,"column":15184}},{"start":{"line":1,"column":15187},"end":{"line":1,"column":15199}},{"start":{"line":1,"column":15201},"end":{"line":1,"column":15239}}]},"131":{"loc":{"start":{"line":1,"column":15256},"end":{"line":1,"column":15432}},"type":"if","locations":[{"start":{"line":1,"column":15256},"end":{"line":1,"column":15432}},{"start":{"line":1,"column":15256},"end":{"line":1,"column":15432}}]},"132":{"loc":{"start":{"line":1,"column":15320},"end":{"line":1,"column":15360}},"type":"cond-expr","locations":[{"start":{"line":1,"column":15323},"end":{"line":1,"column":15354}},{"start":{"line":1,"column":15355},"end":{"line":1,"column":15360}}]},"133":{"loc":{"start":{"line":1,"column":15323},"end":{"line":1,"column":15354}},"type":"cond-expr","locations":[{"start":{"line":1,"column":15343},"end":{"line":1,"column":15349}},{"start":{"line":1,"column":15350},"end":{"line":1,"column":15354}}]},"134":{"loc":{"start":{"line":1,"column":15323},"end":{"line":1,"column":15342}},"type":"binary-expr","locations":[{"start":{"line":1,"column":15323},"end":{"line":1,"column":15328}},{"start":{"line":1,"column":15330},"end":{"line":1,"column":15342}}]},"135":{"loc":{"start":{"line":1,"column":15361},"end":{"line":1,"column":15377}},"type":"if","locations":[{"start":{"line":1,"column":15361},"end":{"line":1,"column":15377}},{"start":{"line":1,"column":15361},"end":{"line":1,"column":15377}}]},"136":{"loc":{"start":{"line":1,"column":15434},"end":{"line":1,"column":15485}},"type":"if","locations":[{"start":{"line":1,"column":15434},"end":{"line":1,"column":15485}},{"start":{"line":1,"column":15434},"end":{"line":1,"column":15485}}]},"137":{"loc":{"start":{"line":1,"column":15472},"end":{"line":1,"column":15484}},"type":"if","locations":[{"start":{"line":1,"column":15472},"end":{"line":1,"column":15484}},{"start":{"line":1,"column":15472},"end":{"line":1,"column":15484}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0,0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0],"116":[0,0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0,0],"128":[0,0],"129":[0,0],"130":[0,0,0,0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/coverage/lcov-report/sorter.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/coverage/lcov-report/sorter.js","statementMap":{"0":{"start":{"line":1,"column":17},"end":{"line":156,"column":4}},"1":{"start":{"line":4,"column":22},"end":{"line":7,"column":9}},"2":{"start":{"line":10,"column":26},"end":{"line":10,"column":77}},"3":{"start":{"line":12,"column":32},"end":{"line":12,"column":76}},"4":{"start":{"line":14,"column":30},"end":{"line":14,"column":71}},"5":{"start":{"line":16,"column":31},"end":{"line":16,"column":81}},"6":{"start":{"line":20,"column":23},"end":{"line":20,"column":62}},"7":{"start":{"line":22,"column":19},"end":{"line":22,"column":21}},"8":{"start":{"line":26,"column":8},"end":{"line":38,"column":9}},"9":{"start":{"line":27,"column":12},"end":{"line":27,"column":34}},"10":{"start":{"line":28,"column":12},"end":{"line":32,"column":14}},"11":{"start":{"line":33,"column":12},"end":{"line":33,"column":27}},"12":{"start":{"line":34,"column":12},"end":{"line":37,"column":13}},"13":{"start":{"line":35,"column":16},"end":{"line":35,"column":60}},"14":{"start":{"line":36,"column":16},"end":{"line":36,"column":87}},"15":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"16":{"start":{"line":44,"column":24},"end":{"line":44,"column":55}},"17":{"start":{"line":47,"column":19},"end":{"line":47,"column":21}},"18":{"start":{"line":50,"column":8},"end":{"line":58,"column":9}},"19":{"start":{"line":51,"column":12},"end":{"line":51,"column":35}},"20":{"start":{"line":52,"column":12},"end":{"line":52,"column":26}},"21":{"start":{"line":53,"column":12},"end":{"line":53,"column":53}},"22":{"start":{"line":54,"column":12},"end":{"line":56,"column":13}},"23":{"start":{"line":55,"column":16},"end":{"line":55,"column":34}},"24":{"start":{"line":57,"column":12},"end":{"line":57,"column":32}},"25":{"start":{"line":59,"column":8},"end":{"line":59,"column":20}},"26":{"start":{"line":63,"column":19},"end":{"line":63,"column":56}},"27":{"start":{"line":66,"column":8},"end":{"line":68,"column":9}},"28":{"start":{"line":67,"column":12},"end":{"line":67,"column":48}},"29":{"start":{"line":72,"column":18},"end":{"line":72,"column":33}},"30":{"start":{"line":73,"column":21},"end":{"line":77,"column":13}},"31":{"start":{"line":74,"column":16},"end":{"line":74,"column":32}},"32":{"start":{"line":75,"column":16},"end":{"line":75,"column":32}},"33":{"start":{"line":76,"column":16},"end":{"line":76,"column":50}},"34":{"start":{"line":78,"column":26},"end":{"line":78,"column":32}},"35":{"start":{"line":79,"column":24},"end":{"line":79,"column":73}},"36":{"start":{"line":80,"column":23},"end":{"line":80,"column":55}},"37":{"start":{"line":81,"column":19},"end":{"line":81,"column":21}},"38":{"start":{"line":84,"column":8},"end":{"line":88,"column":9}},"39":{"start":{"line":85,"column":12},"end":{"line":87,"column":14}},"40":{"start":{"line":86,"column":16},"end":{"line":86,"column":41}},"41":{"start":{"line":90,"column":8},"end":{"line":93,"column":9}},"42":{"start":{"line":91,"column":12},"end":{"line":91,"column":35}},"43":{"start":{"line":92,"column":12},"end":{"line":92,"column":47}},"44":{"start":{"line":95,"column":8},"end":{"line":95,"column":31}},"45":{"start":{"line":97,"column":8},"end":{"line":99,"column":9}},"46":{"start":{"line":98,"column":12},"end":{"line":98,"column":43}},"47":{"start":{"line":103,"column":18},"end":{"line":103,"column":49}},"48":{"start":{"line":104,"column":18},"end":{"line":104,"column":31}},"49":{"start":{"line":106,"column":8},"end":{"line":106,"column":71}},"50":{"start":{"line":107,"column":8},"end":{"line":107,"column":28}},"51":{"start":{"line":111,"column":8},"end":{"line":111,"column":99}},"52":{"start":{"line":117,"column":24},"end":{"line":132,"column":13}},"53":{"start":{"line":118,"column":26},"end":{"line":118,"column":33}},"54":{"start":{"line":120,"column":16},"end":{"line":131,"column":18}},"55":{"start":{"line":121,"column":31},"end":{"line":121,"column":50}},"56":{"start":{"line":123,"column":20},"end":{"line":125,"column":21}},"57":{"start":{"line":124,"column":24},"end":{"line":124,"column":49}},"58":{"start":{"line":126,"column":20},"end":{"line":126,"column":41}},"59":{"start":{"line":127,"column":20},"end":{"line":127,"column":43}},"60":{"start":{"line":128,"column":20},"end":{"line":128,"column":42}},"61":{"start":{"line":129,"column":20},"end":{"line":129,"column":44}},"62":{"start":{"line":130,"column":20},"end":{"line":130,"column":40}},"63":{"start":{"line":133,"column":8},"end":{"line":144,"column":9}},"64":{"start":{"line":134,"column":12},"end":{"line":143,"column":13}},"65":{"start":{"line":137,"column":16},"end":{"line":137,"column":76}},"66":{"start":{"line":138,"column":16},"end":{"line":142,"column":17}},"67":{"start":{"line":139,"column":20},"end":{"line":139,"column":63}},"68":{"start":{"line":141,"column":20},"end":{"line":141,"column":60}},"69":{"start":{"line":147,"column":4},"end":{"line":155,"column":6}},"70":{"start":{"line":148,"column":8},"end":{"line":150,"column":9}},"71":{"start":{"line":149,"column":12},"end":{"line":149,"column":19}},"72":{"start":{"line":151,"column":8},"end":{"line":151,"column":29}},"73":{"start":{"line":152,"column":8},"end":{"line":152,"column":23}},"74":{"start":{"line":153,"column":8},"end":{"line":153,"column":28}},"75":{"start":{"line":154,"column":8},"end":{"line":154,"column":19}},"76":{"start":{"line":158,"column":0},"end":{"line":158,"column":44}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":18},"end":{"line":1,"column":19}},"loc":{"start":{"line":1,"column":30},"end":{"line":156,"column":1}}},"1":{"name":"getTable","decl":{"start":{"line":10,"column":13},"end":{"line":10,"column":21}},"loc":{"start":{"line":10,"column":24},"end":{"line":10,"column":79}}},"2":{"name":"getTableHeader","decl":{"start":{"line":12,"column":13},"end":{"line":12,"column":27}},"loc":{"start":{"line":12,"column":30},"end":{"line":12,"column":78}}},"3":{"name":"getTableBody","decl":{"start":{"line":14,"column":13},"end":{"line":14,"column":25}},"loc":{"start":{"line":14,"column":28},"end":{"line":14,"column":73}}},"4":{"name":"getNthColumn","decl":{"start":{"line":16,"column":13},"end":{"line":16,"column":25}},"loc":{"start":{"line":16,"column":29},"end":{"line":16,"column":83}}},"5":{"name":"loadColumns","decl":{"start":{"line":19,"column":13},"end":{"line":19,"column":24}},"loc":{"start":{"line":19,"column":27},"end":{"line":40,"column":5}}},"6":{"name":"loadRowData","decl":{"start":{"line":43,"column":13},"end":{"line":43,"column":24}},"loc":{"start":{"line":43,"column":35},"end":{"line":60,"column":5}}},"7":{"name":"loadData","decl":{"start":{"line":62,"column":13},"end":{"line":62,"column":21}},"loc":{"start":{"line":62,"column":24},"end":{"line":69,"column":5}}},"8":{"name":"sortByIndex","decl":{"start":{"line":71,"column":13},"end":{"line":71,"column":24}},"loc":{"start":{"line":71,"column":38},"end":{"line":100,"column":5}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":73,"column":21},"end":{"line":73,"column":22}},"loc":{"start":{"line":73,"column":37},"end":{"line":77,"column":13}}},"10":{"name":"(anonymous_10)","decl":{"start":{"line":85,"column":26},"end":{"line":85,"column":27}},"loc":{"start":{"line":85,"column":42},"end":{"line":87,"column":13}}},"11":{"name":"removeSortIndicators","decl":{"start":{"line":102,"column":13},"end":{"line":102,"column":33}},"loc":{"start":{"line":102,"column":36},"end":{"line":108,"column":5}}},"12":{"name":"addSortIndicators","decl":{"start":{"line":110,"column":13},"end":{"line":110,"column":30}},"loc":{"start":{"line":110,"column":33},"end":{"line":112,"column":5}}},"13":{"name":"enableUI","decl":{"start":{"line":114,"column":13},"end":{"line":114,"column":21}},"loc":{"start":{"line":114,"column":24},"end":{"line":145,"column":5}}},"14":{"name":"ithSorter","decl":{"start":{"line":117,"column":33},"end":{"line":117,"column":42}},"loc":{"start":{"line":117,"column":46},"end":{"line":132,"column":13}}},"15":{"name":"(anonymous_15)","decl":{"start":{"line":120,"column":23},"end":{"line":120,"column":24}},"loc":{"start":{"line":120,"column":35},"end":{"line":131,"column":17}}},"16":{"name":"(anonymous_16)","decl":{"start":{"line":147,"column":11},"end":{"line":147,"column":12}},"loc":{"start":{"line":147,"column":23},"end":{"line":155,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":22},"end":{"line":31,"column":67}},"type":"binary-expr","locations":[{"start":{"line":31,"column":22},"end":{"line":31,"column":55}},{"start":{"line":31,"column":59},"end":{"line":31,"column":67}}]},"1":{"loc":{"start":{"line":34,"column":12},"end":{"line":37,"column":13}},"type":"if","locations":[{"start":{"line":34,"column":12},"end":{"line":37,"column":13}},{"start":{"line":34,"column":12},"end":{"line":37,"column":13}}]},"2":{"loc":{"start":{"line":54,"column":12},"end":{"line":56,"column":13}},"type":"if","locations":[{"start":{"line":54,"column":12},"end":{"line":56,"column":13}},{"start":{"line":54,"column":12},"end":{"line":56,"column":13}}]},"3":{"loc":{"start":{"line":76,"column":23},"end":{"line":76,"column":49}},"type":"cond-expr","locations":[{"start":{"line":76,"column":31},"end":{"line":76,"column":33}},{"start":{"line":76,"column":36},"end":{"line":76,"column":49}}]},"4":{"loc":{"start":{"line":76,"column":36},"end":{"line":76,"column":49}},"type":"cond-expr","locations":[{"start":{"line":76,"column":44},"end":{"line":76,"column":45}},{"start":{"line":76,"column":48},"end":{"line":76,"column":49}}]},"5":{"loc":{"start":{"line":84,"column":8},"end":{"line":88,"column":9}},"type":"if","locations":[{"start":{"line":84,"column":8},"end":{"line":88,"column":9}},{"start":{"line":84,"column":8},"end":{"line":88,"column":9}}]},"6":{"loc":{"start":{"line":111,"column":53},"end":{"line":111,"column":98}},"type":"cond-expr","locations":[{"start":{"line":111,"column":72},"end":{"line":111,"column":86}},{"start":{"line":111,"column":89},"end":{"line":111,"column":98}}]},"7":{"loc":{"start":{"line":123,"column":20},"end":{"line":125,"column":21}},"type":"if","locations":[{"start":{"line":123,"column":20},"end":{"line":125,"column":21}},{"start":{"line":123,"column":20},"end":{"line":125,"column":21}}]},"8":{"loc":{"start":{"line":134,"column":12},"end":{"line":143,"column":13}},"type":"if","locations":[{"start":{"line":134,"column":12},"end":{"line":143,"column":13}},{"start":{"line":134,"column":12},"end":{"line":143,"column":13}}]},"9":{"loc":{"start":{"line":138,"column":16},"end":{"line":142,"column":17}},"type":"if","locations":[{"start":{"line":138,"column":16},"end":{"line":142,"column":17}},{"start":{"line":138,"column":16},"end":{"line":142,"column":17}}]},"10":{"loc":{"start":{"line":148,"column":8},"end":{"line":150,"column":9}},"type":"if","locations":[{"start":{"line":148,"column":8},"end":{"line":150,"column":9}},{"start":{"line":148,"column":8},"end":{"line":150,"column":9}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/index.js","statementMap":{"0":{"start":{"line":5,"column":11},"end":{"line":5,"column":26}},"1":{"start":{"line":7,"column":0},"end":{"line":13,"column":2}},"2":{"start":{"line":9,"column":8},"end":{"line":9,"column":24}},"3":{"start":{"line":10,"column":19},"end":{"line":10,"column":61}},"4":{"start":{"line":11,"column":8},"end":{"line":11,"column":29}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":8,"column":12},"end":{"line":8,"column":13}},"loc":{"start":{"line":8,"column":33},"end":{"line":12,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":14},"end":{"line":9,"column":23}},"type":"binary-expr","locations":[{"start":{"line":9,"column":14},"end":{"line":9,"column":17}},{"start":{"line":9,"column":21},"end":{"line":9,"column":23}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0},"f":{"0":0},"b":{"0":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/clover/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/clover/index.js","statementMap":{"0":{"start":{"line":6,"column":4},"end":{"line":6,"column":19}},"1":{"start":{"line":7,"column":4},"end":{"line":7,"column":20}},"2":{"start":{"line":8,"column":4},"end":{"line":8,"column":57}},"3":{"start":{"line":9,"column":4},"end":{"line":9,"column":42}},"4":{"start":{"line":13,"column":4},"end":{"line":16,"column":27}},"5":{"start":{"line":20,"column":4},"end":{"line":20,"column":58}},"6":{"start":{"line":23,"column":0},"end":{"line":27,"column":2}},"7":{"start":{"line":24,"column":4},"end":{"line":24,"column":50}},"8":{"start":{"line":25,"column":4},"end":{"line":25,"column":45}},"9":{"start":{"line":26,"column":4},"end":{"line":26,"column":39}},"10":{"start":{"line":29,"column":0},"end":{"line":32,"column":2}},"11":{"start":{"line":30,"column":4},"end":{"line":30,"column":24}},"12":{"start":{"line":31,"column":4},"end":{"line":31,"column":20}},"13":{"start":{"line":34,"column":0},"end":{"line":55,"column":2}},"14":{"start":{"line":36,"column":16},"end":{"line":40,"column":9}},"15":{"start":{"line":41,"column":18},"end":{"line":52,"column":9}},"16":{"start":{"line":43,"column":30},"end":{"line":43,"column":59}},"17":{"start":{"line":44,"column":16},"end":{"line":46,"column":17}},"18":{"start":{"line":45,"column":20},"end":{"line":45,"column":40}},"19":{"start":{"line":49,"column":16},"end":{"line":49,"column":35}},"20":{"start":{"line":50,"column":16},"end":{"line":50,"column":33}},"21":{"start":{"line":53,"column":4},"end":{"line":53,"column":51}},"22":{"start":{"line":54,"column":4},"end":{"line":54,"column":17}},"23":{"start":{"line":57,"column":0},"end":{"line":93,"column":2}},"24":{"start":{"line":59,"column":18},"end":{"line":59,"column":43}},"25":{"start":{"line":60,"column":16},"end":{"line":72,"column":9}},"26":{"start":{"line":75,"column":4},"end":{"line":75,"column":62}},"27":{"start":{"line":76,"column":4},"end":{"line":79,"column":7}},"28":{"start":{"line":81,"column":4},"end":{"line":84,"column":7}},"29":{"start":{"line":86,"column":4},"end":{"line":86,"column":49}},"30":{"start":{"line":87,"column":4},"end":{"line":89,"column":7}},"31":{"start":{"line":88,"column":8},"end":{"line":88,"column":32}},"32":{"start":{"line":91,"column":4},"end":{"line":91,"column":39}},"33":{"start":{"line":95,"column":0},"end":{"line":104,"column":2}},"34":{"start":{"line":96,"column":4},"end":{"line":103,"column":7}},"35":{"start":{"line":106,"column":0},"end":{"line":119,"column":2}},"36":{"start":{"line":107,"column":4},"end":{"line":109,"column":5}},"37":{"start":{"line":108,"column":8},"end":{"line":108,"column":15}},"38":{"start":{"line":110,"column":18},"end":{"line":110,"column":47}},"39":{"start":{"line":111,"column":4},"end":{"line":113,"column":5}},"40":{"start":{"line":112,"column":8},"end":{"line":112,"column":15}},"41":{"start":{"line":115,"column":4},"end":{"line":117,"column":7}},"42":{"start":{"line":118,"column":4},"end":{"line":118,"column":31}},"43":{"start":{"line":121,"column":0},"end":{"line":126,"column":2}},"44":{"start":{"line":122,"column":4},"end":{"line":124,"column":5}},"45":{"start":{"line":123,"column":8},"end":{"line":123,"column":15}},"46":{"start":{"line":125,"column":4},"end":{"line":125,"column":33}},"47":{"start":{"line":128,"column":0},"end":{"line":160,"column":2}},"48":{"start":{"line":129,"column":15},"end":{"line":129,"column":19}},"49":{"start":{"line":130,"column":23},"end":{"line":130,"column":45}},"50":{"start":{"line":131,"column":18},"end":{"line":131,"column":43}},"51":{"start":{"line":132,"column":23},"end":{"line":132,"column":61}},"52":{"start":{"line":135,"column":4},"end":{"line":138,"column":7}},"53":{"start":{"line":140,"column":4},"end":{"line":140,"column":31}},"54":{"start":{"line":142,"column":4},"end":{"line":142,"column":43}},"55":{"start":{"line":143,"column":4},"end":{"line":157,"column":7}},"56":{"start":{"line":144,"column":20},"end":{"line":148,"column":13}},"57":{"start":{"line":149,"column":27},"end":{"line":149,"column":42}},"58":{"start":{"line":151,"column":8},"end":{"line":155,"column":9}},"59":{"start":{"line":152,"column":12},"end":{"line":152,"column":32}},"60":{"start":{"line":153,"column":12},"end":{"line":153,"column":51}},"61":{"start":{"line":154,"column":12},"end":{"line":154,"column":73}},"62":{"start":{"line":156,"column":8},"end":{"line":156,"column":42}},"63":{"start":{"line":159,"column":4},"end":{"line":159,"column":30}},"64":{"start":{"line":162,"column":0},"end":{"line":162,"column":30}}},"fnMap":{"0":{"name":"CloverReport","decl":{"start":{"line":5,"column":9},"end":{"line":5,"column":21}},"loc":{"start":{"line":5,"column":28},"end":{"line":10,"column":1}}},"1":{"name":"asJavaPackage","decl":{"start":{"line":12,"column":9},"end":{"line":12,"column":22}},"loc":{"start":{"line":12,"column":29},"end":{"line":17,"column":1}}},"2":{"name":"asClassName","decl":{"start":{"line":19,"column":9},"end":{"line":19,"column":20}},"loc":{"start":{"line":19,"column":27},"end":{"line":21,"column":1}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":23,"column":33},"end":{"line":23,"column":34}},"loc":{"start":{"line":23,"column":58},"end":{"line":27,"column":1}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":29,"column":31},"end":{"line":29,"column":32}},"loc":{"start":{"line":29,"column":43},"end":{"line":32,"column":1}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":34,"column":38},"end":{"line":34,"column":39}},"loc":{"start":{"line":34,"column":63},"end":{"line":55,"column":1}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":42,"column":23},"end":{"line":42,"column":24}},"loc":{"start":{"line":42,"column":46},"end":{"line":47,"column":13}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":48,"column":22},"end":{"line":48,"column":23}},"loc":{"start":{"line":48,"column":45},"end":{"line":51,"column":13}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":57,"column":40},"end":{"line":57,"column":41}},"loc":{"start":{"line":57,"column":65},"end":{"line":93,"column":1}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":87,"column":35},"end":{"line":87,"column":36}},"loc":{"start":{"line":87,"column":48},"end":{"line":89,"column":5}}},"10":{"name":"(anonymous_10)","decl":{"start":{"line":95,"column":38},"end":{"line":95,"column":39}},"loc":{"start":{"line":95,"column":57},"end":{"line":104,"column":1}}},"11":{"name":"(anonymous_11)","decl":{"start":{"line":106,"column":35},"end":{"line":106,"column":36}},"loc":{"start":{"line":106,"column":51},"end":{"line":119,"column":1}}},"12":{"name":"(anonymous_12)","decl":{"start":{"line":121,"column":38},"end":{"line":121,"column":39}},"loc":{"start":{"line":121,"column":54},"end":{"line":126,"column":1}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":128,"column":34},"end":{"line":128,"column":35}},"loc":{"start":{"line":128,"column":50},"end":{"line":160,"column":1}}},"14":{"name":"(anonymous_14)","decl":{"start":{"line":143,"column":31},"end":{"line":143,"column":32}},"loc":{"start":{"line":143,"column":44},"end":{"line":157,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":23},"end":{"line":8,"column":56}},"type":"binary-expr","locations":[{"start":{"line":8,"column":23},"end":{"line":8,"column":39}},{"start":{"line":8,"column":43},"end":{"line":8,"column":56}}]},"1":{"loc":{"start":{"line":9,"column":16},"end":{"line":9,"column":41}},"type":"binary-expr","locations":[{"start":{"line":9,"column":16},"end":{"line":9,"column":25}},{"start":{"line":9,"column":29},"end":{"line":9,"column":41}}]},"2":{"loc":{"start":{"line":44,"column":16},"end":{"line":46,"column":17}},"type":"if","locations":[{"start":{"line":44,"column":16},"end":{"line":46,"column":17}},{"start":{"line":44,"column":16},"end":{"line":46,"column":17}}]},"3":{"loc":{"start":{"line":107,"column":4},"end":{"line":109,"column":5}},"type":"if","locations":[{"start":{"line":107,"column":4},"end":{"line":109,"column":5}},{"start":{"line":107,"column":4},"end":{"line":109,"column":5}}]},"4":{"loc":{"start":{"line":111,"column":4},"end":{"line":113,"column":5}},"type":"if","locations":[{"start":{"line":111,"column":4},"end":{"line":113,"column":5}},{"start":{"line":111,"column":4},"end":{"line":113,"column":5}}]},"5":{"loc":{"start":{"line":122,"column":4},"end":{"line":124,"column":5}},"type":"if","locations":[{"start":{"line":122,"column":4},"end":{"line":124,"column":5}},{"start":{"line":122,"column":4},"end":{"line":124,"column":5}}]},"6":{"loc":{"start":{"line":151,"column":8},"end":{"line":155,"column":9}},"type":"if","locations":[{"start":{"line":151,"column":8},"end":{"line":155,"column":9}},{"start":{"line":151,"column":8},"end":{"line":155,"column":9}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/cobertura/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/cobertura/index.js","statementMap":{"0":{"start":{"line":5,"column":11},"end":{"line":5,"column":26}},"1":{"start":{"line":7,"column":4},"end":{"line":7,"column":19}},"2":{"start":{"line":8,"column":4},"end":{"line":8,"column":20}},"3":{"start":{"line":9,"column":4},"end":{"line":9,"column":57}},"4":{"start":{"line":10,"column":4},"end":{"line":10,"column":54}},"5":{"start":{"line":14,"column":4},"end":{"line":17,"column":27}},"6":{"start":{"line":21,"column":4},"end":{"line":21,"column":58}},"7":{"start":{"line":24,"column":0},"end":{"line":28,"column":2}},"8":{"start":{"line":25,"column":4},"end":{"line":25,"column":50}},"9":{"start":{"line":26,"column":4},"end":{"line":26,"column":45}},"10":{"start":{"line":27,"column":4},"end":{"line":27,"column":30}},"11":{"start":{"line":30,"column":0},"end":{"line":33,"column":2}},"12":{"start":{"line":31,"column":4},"end":{"line":31,"column":24}},"13":{"start":{"line":32,"column":4},"end":{"line":32,"column":20}},"14":{"start":{"line":35,"column":0},"end":{"line":55,"column":2}},"15":{"start":{"line":37,"column":18},"end":{"line":37,"column":43}},"16":{"start":{"line":38,"column":4},"end":{"line":38,"column":46}},"17":{"start":{"line":39,"column":4},"end":{"line":39,"column":105}},"18":{"start":{"line":40,"column":4},"end":{"line":50,"column":7}},"19":{"start":{"line":51,"column":4},"end":{"line":51,"column":32}},"20":{"start":{"line":52,"column":4},"end":{"line":52,"column":57}},"21":{"start":{"line":53,"column":4},"end":{"line":53,"column":33}},"22":{"start":{"line":54,"column":4},"end":{"line":54,"column":33}},"23":{"start":{"line":57,"column":0},"end":{"line":71,"column":2}},"24":{"start":{"line":58,"column":4},"end":{"line":60,"column":5}},"25":{"start":{"line":59,"column":8},"end":{"line":59,"column":15}},"26":{"start":{"line":61,"column":18},"end":{"line":61,"column":47}},"27":{"start":{"line":62,"column":4},"end":{"line":64,"column":5}},"28":{"start":{"line":63,"column":8},"end":{"line":63,"column":15}},"29":{"start":{"line":65,"column":4},"end":{"line":69,"column":7}},"30":{"start":{"line":70,"column":4},"end":{"line":70,"column":32}},"31":{"start":{"line":73,"column":0},"end":{"line":79,"column":2}},"32":{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},"33":{"start":{"line":75,"column":8},"end":{"line":75,"column":15}},"34":{"start":{"line":77,"column":4},"end":{"line":77,"column":33}},"35":{"start":{"line":78,"column":4},"end":{"line":78,"column":33}},"36":{"start":{"line":81,"column":0},"end":{"line":138,"column":2}},"37":{"start":{"line":82,"column":15},"end":{"line":82,"column":19}},"38":{"start":{"line":83,"column":23},"end":{"line":83,"column":45}},"39":{"start":{"line":84,"column":18},"end":{"line":84,"column":43}},"40":{"start":{"line":85,"column":23},"end":{"line":85,"column":61}},"41":{"start":{"line":89,"column":4},"end":{"line":94,"column":7}},"42":{"start":{"line":96,"column":4},"end":{"line":96,"column":32}},"43":{"start":{"line":97,"column":4},"end":{"line":97,"column":31}},"44":{"start":{"line":98,"column":4},"end":{"line":115,"column":7}},"45":{"start":{"line":99,"column":19},"end":{"line":99,"column":32}},"46":{"start":{"line":100,"column":19},"end":{"line":100,"column":36}},"47":{"start":{"line":101,"column":8},"end":{"line":105,"column":11}},"48":{"start":{"line":106,"column":8},"end":{"line":106,"column":34}},"49":{"start":{"line":108,"column":8},"end":{"line":111,"column":11}},"50":{"start":{"line":112,"column":8},"end":{"line":112,"column":35}},"51":{"start":{"line":113,"column":8},"end":{"line":113,"column":36}},"52":{"start":{"line":116,"column":4},"end":{"line":116,"column":33}},"53":{"start":{"line":118,"column":4},"end":{"line":118,"column":30}},"54":{"start":{"line":119,"column":4},"end":{"line":119,"column":43}},"55":{"start":{"line":120,"column":4},"end":{"line":134,"column":7}},"56":{"start":{"line":121,"column":20},"end":{"line":125,"column":13}},"57":{"start":{"line":126,"column":27},"end":{"line":126,"column":42}},"58":{"start":{"line":128,"column":8},"end":{"line":132,"column":9}},"59":{"start":{"line":129,"column":12},"end":{"line":129,"column":32}},"60":{"start":{"line":130,"column":12},"end":{"line":131,"column":78}},"61":{"start":{"line":133,"column":8},"end":{"line":133,"column":42}},"62":{"start":{"line":136,"column":4},"end":{"line":136,"column":31}},"63":{"start":{"line":137,"column":4},"end":{"line":137,"column":31}},"64":{"start":{"line":140,"column":0},"end":{"line":140,"column":33}}},"fnMap":{"0":{"name":"CoberturaReport","decl":{"start":{"line":6,"column":9},"end":{"line":6,"column":24}},"loc":{"start":{"line":6,"column":31},"end":{"line":11,"column":1}}},"1":{"name":"asJavaPackage","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":22}},"loc":{"start":{"line":13,"column":29},"end":{"line":18,"column":1}}},"2":{"name":"asClassName","decl":{"start":{"line":20,"column":9},"end":{"line":20,"column":20}},"loc":{"start":{"line":20,"column":27},"end":{"line":22,"column":1}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":24,"column":36},"end":{"line":24,"column":37}},"loc":{"start":{"line":24,"column":61},"end":{"line":28,"column":1}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":30,"column":34},"end":{"line":30,"column":35}},"loc":{"start":{"line":30,"column":46},"end":{"line":33,"column":1}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":35,"column":43},"end":{"line":35,"column":44}},"loc":{"start":{"line":35,"column":59},"end":{"line":55,"column":1}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":57,"column":38},"end":{"line":57,"column":39}},"loc":{"start":{"line":57,"column":54},"end":{"line":71,"column":1}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":73,"column":41},"end":{"line":73,"column":42}},"loc":{"start":{"line":73,"column":57},"end":{"line":79,"column":1}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":81,"column":37},"end":{"line":81,"column":38}},"loc":{"start":{"line":81,"column":53},"end":{"line":138,"column":1}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":98,"column":31},"end":{"line":98,"column":32}},"loc":{"start":{"line":98,"column":44},"end":{"line":115,"column":5}}},"10":{"name":"(anonymous_10)","decl":{"start":{"line":120,"column":31},"end":{"line":120,"column":32}},"loc":{"start":{"line":120,"column":44},"end":{"line":134,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":23},"end":{"line":9,"column":56}},"type":"binary-expr","locations":[{"start":{"line":9,"column":23},"end":{"line":9,"column":39}},{"start":{"line":9,"column":43},"end":{"line":9,"column":56}}]},"1":{"loc":{"start":{"line":10,"column":16},"end":{"line":10,"column":53}},"type":"binary-expr","locations":[{"start":{"line":10,"column":16},"end":{"line":10,"column":25}},{"start":{"line":10,"column":29},"end":{"line":10,"column":53}}]},"2":{"loc":{"start":{"line":58,"column":4},"end":{"line":60,"column":5}},"type":"if","locations":[{"start":{"line":58,"column":4},"end":{"line":60,"column":5}},{"start":{"line":58,"column":4},"end":{"line":60,"column":5}}]},"3":{"loc":{"start":{"line":62,"column":4},"end":{"line":64,"column":5}},"type":"if","locations":[{"start":{"line":62,"column":4},"end":{"line":64,"column":5}},{"start":{"line":62,"column":4},"end":{"line":64,"column":5}}]},"4":{"loc":{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},"type":"if","locations":[{"start":{"line":74,"column":4},"end":{"line":76,"column":5}},{"start":{"line":74,"column":4},"end":{"line":76,"column":5}}]},"5":{"loc":{"start":{"line":128,"column":8},"end":{"line":132,"column":9}},"type":"if","locations":[{"start":{"line":128,"column":8},"end":{"line":132,"column":9}},{"start":{"line":128,"column":8},"end":{"line":132,"column":9}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/annotator.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/annotator.js","statementMap":{"0":{"start":{"line":7,"column":20},"end":{"line":7,"column":47}},"1":{"start":{"line":8,"column":9},"end":{"line":8,"column":17}},"2":{"start":{"line":9,"column":9},"end":{"line":9,"column":17}},"3":{"start":{"line":10,"column":12},"end":{"line":10,"column":16}},"4":{"start":{"line":11,"column":12},"end":{"line":11,"column":16}},"5":{"start":{"line":12,"column":13},"end":{"line":12,"column":17}},"6":{"start":{"line":13,"column":12},"end":{"line":13,"column":21}},"7":{"start":{"line":14,"column":12},"end":{"line":14,"column":21}},"8":{"start":{"line":17,"column":4},"end":{"line":17,"column":35}},"9":{"start":{"line":21,"column":4},"end":{"line":21,"column":24}},"10":{"start":{"line":22,"column":4},"end":{"line":26,"column":29}},"11":{"start":{"line":30,"column":20},"end":{"line":30,"column":50}},"12":{"start":{"line":31,"column":4},"end":{"line":33,"column":5}},"13":{"start":{"line":32,"column":8},"end":{"line":32,"column":15}},"14":{"start":{"line":34,"column":4},"end":{"line":40,"column":7}},"15":{"start":{"line":35,"column":20},"end":{"line":35,"column":41}},"16":{"start":{"line":36,"column":8},"end":{"line":39,"column":9}},"17":{"start":{"line":37,"column":12},"end":{"line":37,"column":74}},"18":{"start":{"line":38,"column":12},"end":{"line":38,"column":52}},"19":{"start":{"line":44,"column":25},"end":{"line":44,"column":39}},"20":{"start":{"line":45,"column":24},"end":{"line":45,"column":49}},"21":{"start":{"line":46,"column":4},"end":{"line":69,"column":7}},"22":{"start":{"line":47,"column":20},"end":{"line":47,"column":42}},"23":{"start":{"line":48,"column":19},"end":{"line":48,"column":40}},"24":{"start":{"line":49,"column":19},"end":{"line":49,"column":43}},"25":{"start":{"line":50,"column":23},"end":{"line":50,"column":40}},"26":{"start":{"line":51,"column":21},"end":{"line":51,"column":40}},"27":{"start":{"line":52,"column":24},"end":{"line":52,"column":39}},"28":{"start":{"line":53,"column":22},"end":{"line":53,"column":35}},"29":{"start":{"line":54,"column":23},"end":{"line":54,"column":128}},"30":{"start":{"line":55,"column":24},"end":{"line":55,"column":41}},"31":{"start":{"line":58,"column":8},"end":{"line":68,"column":9}},"32":{"start":{"line":59,"column":12},"end":{"line":62,"column":13}},"33":{"start":{"line":60,"column":16},"end":{"line":60,"column":36}},"34":{"start":{"line":61,"column":16},"end":{"line":61,"column":73}},"35":{"start":{"line":63,"column":12},"end":{"line":63,"column":50}},"36":{"start":{"line":64,"column":12},"end":{"line":67,"column":27}},"37":{"start":{"line":74,"column":18},"end":{"line":74,"column":32}},"38":{"start":{"line":75,"column":17},"end":{"line":75,"column":35}},"39":{"start":{"line":76,"column":4},"end":{"line":78,"column":5}},"40":{"start":{"line":77,"column":8},"end":{"line":77,"column":15}},"41":{"start":{"line":79,"column":4},"end":{"line":102,"column":7}},"42":{"start":{"line":80,"column":20},"end":{"line":80,"column":34}},"43":{"start":{"line":81,"column":19},"end":{"line":81,"column":32}},"44":{"start":{"line":82,"column":19},"end":{"line":82,"column":43}},"45":{"start":{"line":83,"column":23},"end":{"line":83,"column":45}},"46":{"start":{"line":84,"column":21},"end":{"line":84,"column":45}},"47":{"start":{"line":85,"column":24},"end":{"line":85,"column":44}},"48":{"start":{"line":86,"column":22},"end":{"line":86,"column":40}},"49":{"start":{"line":87,"column":23},"end":{"line":87,"column":127}},"50":{"start":{"line":88,"column":24},"end":{"line":88,"column":41}},"51":{"start":{"line":91,"column":8},"end":{"line":101,"column":9}},"52":{"start":{"line":92,"column":12},"end":{"line":95,"column":13}},"53":{"start":{"line":93,"column":16},"end":{"line":93,"column":36}},"54":{"start":{"line":94,"column":16},"end":{"line":94,"column":73}},"55":{"start":{"line":96,"column":12},"end":{"line":96,"column":50}},"56":{"start":{"line":97,"column":12},"end":{"line":100,"column":27}},"57":{"start":{"line":106,"column":22},"end":{"line":106,"column":36}},"58":{"start":{"line":107,"column":21},"end":{"line":107,"column":43}},"59":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"60":{"start":{"line":109,"column":8},"end":{"line":109,"column":15}},"61":{"start":{"line":112,"column":4},"end":{"line":168,"column":7}},"62":{"start":{"line":113,"column":26},"end":{"line":113,"column":49}},"63":{"start":{"line":114,"column":23},"end":{"line":116,"column":17}},"64":{"start":{"line":115,"column":16},"end":{"line":115,"column":29}},"65":{"start":{"line":117,"column":24},"end":{"line":117,"column":56}},"66":{"start":{"line":132,"column":8},"end":{"line":167,"column":9}},"67":{"start":{"line":133,"column":12},"end":{"line":166,"column":13}},"68":{"start":{"line":134,"column":16},"end":{"line":134,"column":39}},"69":{"start":{"line":135,"column":16},"end":{"line":135,"column":36}},"70":{"start":{"line":136,"column":16},"end":{"line":136,"column":48}},"71":{"start":{"line":137,"column":16},"end":{"line":137,"column":45}},"72":{"start":{"line":138,"column":16},"end":{"line":138,"column":45}},"73":{"start":{"line":139,"column":16},"end":{"line":139,"column":44}},"74":{"start":{"line":140,"column":16},"end":{"line":140,"column":40}},"75":{"start":{"line":141,"column":16},"end":{"line":143,"column":55}},"76":{"start":{"line":144,"column":16},"end":{"line":144,"column":46}},"77":{"start":{"line":146,"column":16},"end":{"line":165,"column":17}},"78":{"start":{"line":147,"column":20},"end":{"line":150,"column":21}},"79":{"start":{"line":148,"column":24},"end":{"line":148,"column":44}},"80":{"start":{"line":149,"column":24},"end":{"line":149,"column":81}},"81":{"start":{"line":151,"column":20},"end":{"line":151,"column":58}},"82":{"start":{"line":152,"column":20},"end":{"line":164,"column":21}},"83":{"start":{"line":155,"column":24},"end":{"line":158,"column":84}},"84":{"start":{"line":160,"column":24},"end":{"line":163,"column":39}},"85":{"start":{"line":174,"column":4},"end":{"line":224,"column":5}},"86":{"start":{"line":175,"column":25},"end":{"line":175,"column":65}},"87":{"start":{"line":176,"column":19},"end":{"line":176,"column":51}},"88":{"start":{"line":177,"column":20},"end":{"line":177,"column":21}},"89":{"start":{"line":178,"column":25},"end":{"line":186,"column":14}},"90":{"start":{"line":179,"column":16},"end":{"line":179,"column":27}},"91":{"start":{"line":180,"column":16},"end":{"line":185,"column":18}},"92":{"start":{"line":187,"column":8},"end":{"line":187,"column":82}},"93":{"start":{"line":188,"column":8},"end":{"line":188,"column":48}},"94":{"start":{"line":191,"column":8},"end":{"line":191,"column":51}},"95":{"start":{"line":192,"column":8},"end":{"line":192,"column":52}},"96":{"start":{"line":193,"column":8},"end":{"line":193,"column":53}},"97":{"start":{"line":194,"column":8},"end":{"line":194,"column":27}},"98":{"start":{"line":196,"column":8},"end":{"line":198,"column":11}},"99":{"start":{"line":197,"column":12},"end":{"line":197,"column":66}},"100":{"start":{"line":200,"column":8},"end":{"line":205,"column":11}},"101":{"start":{"line":201,"column":12},"end":{"line":204,"column":14}},"102":{"start":{"line":207,"column":8},"end":{"line":211,"column":10}},"103":{"start":{"line":213,"column":8},"end":{"line":213,"column":35}},"104":{"start":{"line":214,"column":8},"end":{"line":214,"column":59}},"105":{"start":{"line":215,"column":8},"end":{"line":218,"column":11}},"106":{"start":{"line":216,"column":12},"end":{"line":216,"column":33}},"107":{"start":{"line":217,"column":12},"end":{"line":217,"column":63}},"108":{"start":{"line":219,"column":8},"end":{"line":223,"column":10}},"109":{"start":{"line":227,"column":0},"end":{"line":229,"column":2}}},"fnMap":{"0":{"name":"title","decl":{"start":{"line":16,"column":9},"end":{"line":16,"column":14}},"loc":{"start":{"line":16,"column":20},"end":{"line":18,"column":1}}},"1":{"name":"customEscape","decl":{"start":{"line":20,"column":9},"end":{"line":20,"column":21}},"loc":{"start":{"line":20,"column":28},"end":{"line":27,"column":1}}},"2":{"name":"annotateLines","decl":{"start":{"line":29,"column":9},"end":{"line":29,"column":22}},"loc":{"start":{"line":29,"column":53},"end":{"line":41,"column":1}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":34,"column":35},"end":{"line":34,"column":36}},"loc":{"start":{"line":34,"column":57},"end":{"line":40,"column":5}}},"4":{"name":"annotateStatements","decl":{"start":{"line":43,"column":9},"end":{"line":43,"column":27}},"loc":{"start":{"line":43,"column":58},"end":{"line":70,"column":1}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":46,"column":40},"end":{"line":46,"column":41}},"loc":{"start":{"line":46,"column":58},"end":{"line":69,"column":5}}},"6":{"name":"annotateFunctions","decl":{"start":{"line":72,"column":9},"end":{"line":72,"column":26}},"loc":{"start":{"line":72,"column":57},"end":{"line":103,"column":1}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":79,"column":33},"end":{"line":79,"column":34}},"loc":{"start":{"line":79,"column":50},"end":{"line":102,"column":5}}},"8":{"name":"annotateBranches","decl":{"start":{"line":105,"column":9},"end":{"line":105,"column":25}},"loc":{"start":{"line":105,"column":56},"end":{"line":169,"column":1}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":112,"column":37},"end":{"line":112,"column":38}},"loc":{"start":{"line":112,"column":59},"end":{"line":168,"column":5}}},"10":{"name":"(anonymous_10)","decl":{"start":{"line":114,"column":42},"end":{"line":114,"column":43}},"loc":{"start":{"line":114,"column":58},"end":{"line":116,"column":13}}},"11":{"name":"annotateSourceCode","decl":{"start":{"line":171,"column":9},"end":{"line":171,"column":27}},"loc":{"start":{"line":171,"column":55},"end":{"line":225,"column":1}}},"12":{"name":"(anonymous_12)","decl":{"start":{"line":178,"column":34},"end":{"line":178,"column":35}},"loc":{"start":{"line":178,"column":49},"end":{"line":186,"column":13}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":196,"column":35},"end":{"line":196,"column":36}},"loc":{"start":{"line":196,"column":51},"end":{"line":198,"column":9}}},"14":{"name":"(anonymous_14)","decl":{"start":{"line":200,"column":43},"end":{"line":200,"column":44}},"loc":{"start":{"line":200,"column":59},"end":{"line":205,"column":9}}},"15":{"name":"(anonymous_15)","decl":{"start":{"line":215,"column":54},"end":{"line":215,"column":55}},"loc":{"start":{"line":215,"column":70},"end":{"line":218,"column":9}}}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":4},"end":{"line":33,"column":5}},"type":"if","locations":[{"start":{"line":31,"column":4},"end":{"line":33,"column":5}},{"start":{"line":31,"column":4},"end":{"line":33,"column":5}}]},"1":{"loc":{"start":{"line":36,"column":8},"end":{"line":39,"column":9}},"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":39,"column":9}},{"start":{"line":36,"column":8},"end":{"line":39,"column":9}}]},"2":{"loc":{"start":{"line":37,"column":49},"end":{"line":37,"column":73}},"type":"cond-expr","locations":[{"start":{"line":37,"column":61},"end":{"line":37,"column":66}},{"start":{"line":37,"column":69},"end":{"line":37,"column":73}}]},"3":{"loc":{"start":{"line":49,"column":19},"end":{"line":49,"column":43}},"type":"cond-expr","locations":[{"start":{"line":49,"column":31},"end":{"line":49,"column":36}},{"start":{"line":49,"column":39},"end":{"line":49,"column":43}}]},"4":{"loc":{"start":{"line":54,"column":46},"end":{"line":54,"column":83}},"type":"cond-expr","locations":[{"start":{"line":54,"column":58},"end":{"line":54,"column":70}},{"start":{"line":54,"column":73},"end":{"line":54,"column":83}}]},"5":{"loc":{"start":{"line":58,"column":8},"end":{"line":68,"column":9}},"type":"if","locations":[{"start":{"line":58,"column":8},"end":{"line":68,"column":9}},{"start":{"line":58,"column":8},"end":{"line":68,"column":9}}]},"6":{"loc":{"start":{"line":58,"column":12},"end":{"line":58,"column":54}},"type":"binary-expr","locations":[{"start":{"line":58,"column":12},"end":{"line":58,"column":25}},{"start":{"line":58,"column":29},"end":{"line":58,"column":54}}]},"7":{"loc":{"start":{"line":59,"column":12},"end":{"line":62,"column":13}},"type":"if","locations":[{"start":{"line":59,"column":12},"end":{"line":62,"column":13}},{"start":{"line":59,"column":12},"end":{"line":62,"column":13}}]},"8":{"loc":{"start":{"line":66,"column":16},"end":{"line":66,"column":70}},"type":"cond-expr","locations":[{"start":{"line":66,"column":40},"end":{"line":66,"column":46}},{"start":{"line":66,"column":49},"end":{"line":66,"column":70}}]},"9":{"loc":{"start":{"line":76,"column":4},"end":{"line":78,"column":5}},"type":"if","locations":[{"start":{"line":76,"column":4},"end":{"line":78,"column":5}},{"start":{"line":76,"column":4},"end":{"line":78,"column":5}}]},"10":{"loc":{"start":{"line":82,"column":19},"end":{"line":82,"column":43}},"type":"cond-expr","locations":[{"start":{"line":82,"column":31},"end":{"line":82,"column":36}},{"start":{"line":82,"column":39},"end":{"line":82,"column":43}}]},"11":{"loc":{"start":{"line":87,"column":46},"end":{"line":87,"column":83}},"type":"cond-expr","locations":[{"start":{"line":87,"column":58},"end":{"line":87,"column":70}},{"start":{"line":87,"column":73},"end":{"line":87,"column":83}}]},"12":{"loc":{"start":{"line":91,"column":8},"end":{"line":101,"column":9}},"type":"if","locations":[{"start":{"line":91,"column":8},"end":{"line":101,"column":9}},{"start":{"line":91,"column":8},"end":{"line":101,"column":9}}]},"13":{"loc":{"start":{"line":91,"column":12},"end":{"line":91,"column":54}},"type":"binary-expr","locations":[{"start":{"line":91,"column":12},"end":{"line":91,"column":25}},{"start":{"line":91,"column":29},"end":{"line":91,"column":54}}]},"14":{"loc":{"start":{"line":92,"column":12},"end":{"line":95,"column":13}},"type":"if","locations":[{"start":{"line":92,"column":12},"end":{"line":95,"column":13}},{"start":{"line":92,"column":12},"end":{"line":95,"column":13}}]},"15":{"loc":{"start":{"line":99,"column":16},"end":{"line":99,"column":70}},"type":"cond-expr","locations":[{"start":{"line":99,"column":40},"end":{"line":99,"column":46}},{"start":{"line":99,"column":49},"end":{"line":99,"column":70}}]},"16":{"loc":{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},"type":"if","locations":[{"start":{"line":108,"column":4},"end":{"line":110,"column":5}},{"start":{"line":108,"column":4},"end":{"line":110,"column":5}}]},"17":{"loc":{"start":{"line":132,"column":8},"end":{"line":167,"column":9}},"type":"if","locations":[{"start":{"line":132,"column":8},"end":{"line":167,"column":9}},{"start":{"line":132,"column":8},"end":{"line":167,"column":9}}]},"18":{"loc":{"start":{"line":132,"column":12},"end":{"line":132,"column":72}},"type":"binary-expr","locations":[{"start":{"line":132,"column":12},"end":{"line":132,"column":24}},{"start":{"line":132,"column":29},"end":{"line":132,"column":43}},{"start":{"line":132,"column":47},"end":{"line":132,"column":71}}]},"19":{"loc":{"start":{"line":133,"column":24},"end":{"line":133,"column":70}},"type":"binary-expr","locations":[{"start":{"line":133,"column":24},"end":{"line":133,"column":46}},{"start":{"line":133,"column":50},"end":{"line":133,"column":70}}]},"20":{"loc":{"start":{"line":136,"column":23},"end":{"line":136,"column":47}},"type":"cond-expr","locations":[{"start":{"line":136,"column":35},"end":{"line":136,"column":40}},{"start":{"line":136,"column":43},"end":{"line":136,"column":47}}]},"21":{"loc":{"start":{"line":142,"column":21},"end":{"line":142,"column":62}},"type":"cond-expr","locations":[{"start":{"line":142,"column":33},"end":{"line":142,"column":47}},{"start":{"line":142,"column":50},"end":{"line":142,"column":62}}]},"22":{"loc":{"start":{"line":146,"column":16},"end":{"line":165,"column":17}},"type":"if","locations":[{"start":{"line":146,"column":16},"end":{"line":165,"column":17}},{"start":{"line":146,"column":16},"end":{"line":165,"column":17}}]},"23":{"loc":{"start":{"line":146,"column":20},"end":{"line":146,"column":60}},"type":"binary-expr","locations":[{"start":{"line":146,"column":20},"end":{"line":146,"column":31}},{"start":{"line":146,"column":35},"end":{"line":146,"column":60}}]},"24":{"loc":{"start":{"line":147,"column":20},"end":{"line":150,"column":21}},"type":"if","locations":[{"start":{"line":147,"column":20},"end":{"line":150,"column":21}},{"start":{"line":147,"column":20},"end":{"line":150,"column":21}}]},"25":{"loc":{"start":{"line":152,"column":20},"end":{"line":164,"column":21}},"type":"if","locations":[{"start":{"line":152,"column":20},"end":{"line":164,"column":21}},{"start":{"line":152,"column":20},"end":{"line":164,"column":21}}]},"26":{"loc":{"start":{"line":156,"column":29},"end":{"line":156,"column":79}},"type":"cond-expr","locations":[{"start":{"line":156,"column":41},"end":{"line":156,"column":57}},{"start":{"line":156,"column":60},"end":{"line":156,"column":79}}]},"27":{"loc":{"start":{"line":157,"column":35},"end":{"line":157,"column":58}},"type":"cond-expr","locations":[{"start":{"line":157,"column":45},"end":{"line":157,"column":49}},{"start":{"line":157,"column":52},"end":{"line":157,"column":58}}]},"28":{"loc":{"start":{"line":158,"column":29},"end":{"line":158,"column":48}},"type":"cond-expr","locations":[{"start":{"line":158,"column":39},"end":{"line":158,"column":42}},{"start":{"line":158,"column":45},"end":{"line":158,"column":48}}]},"29":{"loc":{"start":{"line":162,"column":28},"end":{"line":162,"column":82}},"type":"cond-expr","locations":[{"start":{"line":162,"column":52},"end":{"line":162,"column":58}},{"start":{"line":162,"column":61},"end":{"line":162,"column":82}}]},"30":{"loc":{"start":{"line":197,"column":19},"end":{"line":197,"column":65}},"type":"binary-expr","locations":[{"start":{"line":197,"column":19},"end":{"line":197,"column":53}},{"start":{"line":197,"column":57},"end":{"line":197,"column":65}}]},"31":{"loc":{"start":{"line":203,"column":22},"end":{"line":203,"column":64}},"type":"cond-expr","locations":[{"start":{"line":203,"column":38},"end":{"line":203,"column":53}},{"start":{"line":203,"column":56},"end":{"line":203,"column":64}}]},"32":{"loc":{"start":{"line":215,"column":15},"end":{"line":215,"column":29}},"type":"binary-expr","locations":[{"start":{"line":215,"column":15},"end":{"line":215,"column":23}},{"start":{"line":215,"column":27},"end":{"line":215,"column":29}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/assets/sorter.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/assets/sorter.js","statementMap":{"0":{"start":{"line":1,"column":17},"end":{"line":156,"column":4}},"1":{"start":{"line":4,"column":22},"end":{"line":7,"column":9}},"2":{"start":{"line":10,"column":26},"end":{"line":10,"column":77}},"3":{"start":{"line":12,"column":32},"end":{"line":12,"column":76}},"4":{"start":{"line":14,"column":30},"end":{"line":14,"column":71}},"5":{"start":{"line":16,"column":31},"end":{"line":16,"column":81}},"6":{"start":{"line":20,"column":23},"end":{"line":20,"column":62}},"7":{"start":{"line":22,"column":19},"end":{"line":22,"column":21}},"8":{"start":{"line":26,"column":8},"end":{"line":38,"column":9}},"9":{"start":{"line":27,"column":12},"end":{"line":27,"column":34}},"10":{"start":{"line":28,"column":12},"end":{"line":32,"column":14}},"11":{"start":{"line":33,"column":12},"end":{"line":33,"column":27}},"12":{"start":{"line":34,"column":12},"end":{"line":37,"column":13}},"13":{"start":{"line":35,"column":16},"end":{"line":35,"column":60}},"14":{"start":{"line":36,"column":16},"end":{"line":36,"column":87}},"15":{"start":{"line":39,"column":8},"end":{"line":39,"column":20}},"16":{"start":{"line":44,"column":24},"end":{"line":44,"column":55}},"17":{"start":{"line":47,"column":19},"end":{"line":47,"column":21}},"18":{"start":{"line":50,"column":8},"end":{"line":58,"column":9}},"19":{"start":{"line":51,"column":12},"end":{"line":51,"column":35}},"20":{"start":{"line":52,"column":12},"end":{"line":52,"column":26}},"21":{"start":{"line":53,"column":12},"end":{"line":53,"column":53}},"22":{"start":{"line":54,"column":12},"end":{"line":56,"column":13}},"23":{"start":{"line":55,"column":16},"end":{"line":55,"column":34}},"24":{"start":{"line":57,"column":12},"end":{"line":57,"column":32}},"25":{"start":{"line":59,"column":8},"end":{"line":59,"column":20}},"26":{"start":{"line":63,"column":19},"end":{"line":63,"column":56}},"27":{"start":{"line":66,"column":8},"end":{"line":68,"column":9}},"28":{"start":{"line":67,"column":12},"end":{"line":67,"column":48}},"29":{"start":{"line":72,"column":18},"end":{"line":72,"column":33}},"30":{"start":{"line":73,"column":21},"end":{"line":77,"column":13}},"31":{"start":{"line":74,"column":16},"end":{"line":74,"column":32}},"32":{"start":{"line":75,"column":16},"end":{"line":75,"column":32}},"33":{"start":{"line":76,"column":16},"end":{"line":76,"column":50}},"34":{"start":{"line":78,"column":26},"end":{"line":78,"column":32}},"35":{"start":{"line":79,"column":24},"end":{"line":79,"column":73}},"36":{"start":{"line":80,"column":23},"end":{"line":80,"column":55}},"37":{"start":{"line":81,"column":19},"end":{"line":81,"column":21}},"38":{"start":{"line":84,"column":8},"end":{"line":88,"column":9}},"39":{"start":{"line":85,"column":12},"end":{"line":87,"column":14}},"40":{"start":{"line":86,"column":16},"end":{"line":86,"column":41}},"41":{"start":{"line":90,"column":8},"end":{"line":93,"column":9}},"42":{"start":{"line":91,"column":12},"end":{"line":91,"column":35}},"43":{"start":{"line":92,"column":12},"end":{"line":92,"column":47}},"44":{"start":{"line":95,"column":8},"end":{"line":95,"column":31}},"45":{"start":{"line":97,"column":8},"end":{"line":99,"column":9}},"46":{"start":{"line":98,"column":12},"end":{"line":98,"column":43}},"47":{"start":{"line":103,"column":18},"end":{"line":103,"column":49}},"48":{"start":{"line":104,"column":18},"end":{"line":104,"column":31}},"49":{"start":{"line":106,"column":8},"end":{"line":106,"column":71}},"50":{"start":{"line":107,"column":8},"end":{"line":107,"column":28}},"51":{"start":{"line":111,"column":8},"end":{"line":111,"column":99}},"52":{"start":{"line":117,"column":24},"end":{"line":132,"column":13}},"53":{"start":{"line":118,"column":26},"end":{"line":118,"column":33}},"54":{"start":{"line":120,"column":16},"end":{"line":131,"column":18}},"55":{"start":{"line":121,"column":31},"end":{"line":121,"column":50}},"56":{"start":{"line":123,"column":20},"end":{"line":125,"column":21}},"57":{"start":{"line":124,"column":24},"end":{"line":124,"column":49}},"58":{"start":{"line":126,"column":20},"end":{"line":126,"column":41}},"59":{"start":{"line":127,"column":20},"end":{"line":127,"column":43}},"60":{"start":{"line":128,"column":20},"end":{"line":128,"column":42}},"61":{"start":{"line":129,"column":20},"end":{"line":129,"column":44}},"62":{"start":{"line":130,"column":20},"end":{"line":130,"column":40}},"63":{"start":{"line":133,"column":8},"end":{"line":144,"column":9}},"64":{"start":{"line":134,"column":12},"end":{"line":143,"column":13}},"65":{"start":{"line":137,"column":16},"end":{"line":137,"column":76}},"66":{"start":{"line":138,"column":16},"end":{"line":142,"column":17}},"67":{"start":{"line":139,"column":20},"end":{"line":139,"column":63}},"68":{"start":{"line":141,"column":20},"end":{"line":141,"column":60}},"69":{"start":{"line":147,"column":4},"end":{"line":155,"column":6}},"70":{"start":{"line":148,"column":8},"end":{"line":150,"column":9}},"71":{"start":{"line":149,"column":12},"end":{"line":149,"column":19}},"72":{"start":{"line":151,"column":8},"end":{"line":151,"column":29}},"73":{"start":{"line":152,"column":8},"end":{"line":152,"column":23}},"74":{"start":{"line":153,"column":8},"end":{"line":153,"column":28}},"75":{"start":{"line":154,"column":8},"end":{"line":154,"column":19}},"76":{"start":{"line":158,"column":0},"end":{"line":158,"column":44}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":18},"end":{"line":1,"column":19}},"loc":{"start":{"line":1,"column":30},"end":{"line":156,"column":1}}},"1":{"name":"getTable","decl":{"start":{"line":10,"column":13},"end":{"line":10,"column":21}},"loc":{"start":{"line":10,"column":24},"end":{"line":10,"column":79}}},"2":{"name":"getTableHeader","decl":{"start":{"line":12,"column":13},"end":{"line":12,"column":27}},"loc":{"start":{"line":12,"column":30},"end":{"line":12,"column":78}}},"3":{"name":"getTableBody","decl":{"start":{"line":14,"column":13},"end":{"line":14,"column":25}},"loc":{"start":{"line":14,"column":28},"end":{"line":14,"column":73}}},"4":{"name":"getNthColumn","decl":{"start":{"line":16,"column":13},"end":{"line":16,"column":25}},"loc":{"start":{"line":16,"column":29},"end":{"line":16,"column":83}}},"5":{"name":"loadColumns","decl":{"start":{"line":19,"column":13},"end":{"line":19,"column":24}},"loc":{"start":{"line":19,"column":27},"end":{"line":40,"column":5}}},"6":{"name":"loadRowData","decl":{"start":{"line":43,"column":13},"end":{"line":43,"column":24}},"loc":{"start":{"line":43,"column":35},"end":{"line":60,"column":5}}},"7":{"name":"loadData","decl":{"start":{"line":62,"column":13},"end":{"line":62,"column":21}},"loc":{"start":{"line":62,"column":24},"end":{"line":69,"column":5}}},"8":{"name":"sortByIndex","decl":{"start":{"line":71,"column":13},"end":{"line":71,"column":24}},"loc":{"start":{"line":71,"column":38},"end":{"line":100,"column":5}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":73,"column":21},"end":{"line":73,"column":22}},"loc":{"start":{"line":73,"column":37},"end":{"line":77,"column":13}}},"10":{"name":"(anonymous_10)","decl":{"start":{"line":85,"column":26},"end":{"line":85,"column":27}},"loc":{"start":{"line":85,"column":42},"end":{"line":87,"column":13}}},"11":{"name":"removeSortIndicators","decl":{"start":{"line":102,"column":13},"end":{"line":102,"column":33}},"loc":{"start":{"line":102,"column":36},"end":{"line":108,"column":5}}},"12":{"name":"addSortIndicators","decl":{"start":{"line":110,"column":13},"end":{"line":110,"column":30}},"loc":{"start":{"line":110,"column":33},"end":{"line":112,"column":5}}},"13":{"name":"enableUI","decl":{"start":{"line":114,"column":13},"end":{"line":114,"column":21}},"loc":{"start":{"line":114,"column":24},"end":{"line":145,"column":5}}},"14":{"name":"ithSorter","decl":{"start":{"line":117,"column":33},"end":{"line":117,"column":42}},"loc":{"start":{"line":117,"column":46},"end":{"line":132,"column":13}}},"15":{"name":"(anonymous_15)","decl":{"start":{"line":120,"column":23},"end":{"line":120,"column":24}},"loc":{"start":{"line":120,"column":35},"end":{"line":131,"column":17}}},"16":{"name":"(anonymous_16)","decl":{"start":{"line":147,"column":11},"end":{"line":147,"column":12}},"loc":{"start":{"line":147,"column":23},"end":{"line":155,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":31,"column":22},"end":{"line":31,"column":67}},"type":"binary-expr","locations":[{"start":{"line":31,"column":22},"end":{"line":31,"column":55}},{"start":{"line":31,"column":59},"end":{"line":31,"column":67}}]},"1":{"loc":{"start":{"line":34,"column":12},"end":{"line":37,"column":13}},"type":"if","locations":[{"start":{"line":34,"column":12},"end":{"line":37,"column":13}},{"start":{"line":34,"column":12},"end":{"line":37,"column":13}}]},"2":{"loc":{"start":{"line":54,"column":12},"end":{"line":56,"column":13}},"type":"if","locations":[{"start":{"line":54,"column":12},"end":{"line":56,"column":13}},{"start":{"line":54,"column":12},"end":{"line":56,"column":13}}]},"3":{"loc":{"start":{"line":76,"column":23},"end":{"line":76,"column":49}},"type":"cond-expr","locations":[{"start":{"line":76,"column":31},"end":{"line":76,"column":33}},{"start":{"line":76,"column":36},"end":{"line":76,"column":49}}]},"4":{"loc":{"start":{"line":76,"column":36},"end":{"line":76,"column":49}},"type":"cond-expr","locations":[{"start":{"line":76,"column":44},"end":{"line":76,"column":45}},{"start":{"line":76,"column":48},"end":{"line":76,"column":49}}]},"5":{"loc":{"start":{"line":84,"column":8},"end":{"line":88,"column":9}},"type":"if","locations":[{"start":{"line":84,"column":8},"end":{"line":88,"column":9}},{"start":{"line":84,"column":8},"end":{"line":88,"column":9}}]},"6":{"loc":{"start":{"line":111,"column":53},"end":{"line":111,"column":98}},"type":"cond-expr","locations":[{"start":{"line":111,"column":72},"end":{"line":111,"column":86}},{"start":{"line":111,"column":89},"end":{"line":111,"column":98}}]},"7":{"loc":{"start":{"line":123,"column":20},"end":{"line":125,"column":21}},"type":"if","locations":[{"start":{"line":123,"column":20},"end":{"line":125,"column":21}},{"start":{"line":123,"column":20},"end":{"line":125,"column":21}}]},"8":{"loc":{"start":{"line":134,"column":12},"end":{"line":143,"column":13}},"type":"if","locations":[{"start":{"line":134,"column":12},"end":{"line":143,"column":13}},{"start":{"line":134,"column":12},"end":{"line":143,"column":13}}]},"9":{"loc":{"start":{"line":138,"column":16},"end":{"line":142,"column":17}},"type":"if","locations":[{"start":{"line":138,"column":16},"end":{"line":142,"column":17}},{"start":{"line":138,"column":16},"end":{"line":142,"column":17}}]},"10":{"loc":{"start":{"line":148,"column":8},"end":{"line":150,"column":9}},"type":"if","locations":[{"start":{"line":148,"column":8},"end":{"line":150,"column":9}},{"start":{"line":148,"column":8},"end":{"line":150,"column":9}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/assets/vendor/prettify.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/assets/vendor/prettify.js","statementMap":{"0":{"start":{"line":1,"column":0},"end":{"line":1,"column":39}},"1":{"start":{"line":1,"column":39},"end":{"line":1,"column":15785}},"2":{"start":{"line":1,"column":57},"end":{"line":1,"column":103}},"3":{"start":{"line":1,"column":110},"end":{"line":1,"column":270}},"4":{"start":{"line":1,"column":277},"end":{"line":1,"column":379}},"5":{"start":{"line":1,"column":386},"end":{"line":1,"column":644}},"6":{"start":{"line":1,"column":651},"end":{"line":1,"column":794}},"7":{"start":{"line":1,"column":801},"end":{"line":1,"column":1069}},"8":{"start":{"line":1,"column":1076},"end":{"line":1,"column":1234}},"9":{"start":{"line":1,"column":1241},"end":{"line":1,"column":1321}},"10":{"start":{"line":1,"column":1328},"end":{"line":1,"column":1504}},"11":{"start":{"line":1,"column":1511},"end":{"line":1,"column":1665}},"12":{"start":{"line":1,"column":1672},"end":{"line":1,"column":1844}},"13":{"start":{"line":1,"column":1851},"end":{"line":1,"column":1917}},"14":{"start":{"line":1,"column":1924},"end":{"line":1,"column":1939}},"15":{"start":{"line":1,"column":1946},"end":{"line":1,"column":2058}},"16":{"start":{"line":1,"column":2065},"end":{"line":1,"column":2070}},"17":{"start":{"line":1,"column":2077},"end":{"line":1,"column":2082}},"18":{"start":{"line":1,"column":2089},"end":{"line":1,"column":2094}},"19":{"start":{"line":1,"column":2101},"end":{"line":1,"column":2106}},"20":{"start":{"line":1,"column":2113},"end":{"line":1,"column":2118}},"21":{"start":{"line":1,"column":2125},"end":{"line":1,"column":2130}},"22":{"start":{"line":1,"column":2137},"end":{"line":1,"column":2142}},"23":{"start":{"line":1,"column":2149},"end":{"line":1,"column":2154}},"24":{"start":{"line":1,"column":2161},"end":{"line":1,"column":2166}},"25":{"start":{"line":1,"column":2173},"end":{"line":1,"column":2178}},"26":{"start":{"line":1,"column":2185},"end":{"line":1,"column":2190}},"27":{"start":{"line":1,"column":2197},"end":{"line":1,"column":2202}},"28":{"start":{"line":1,"column":2209},"end":{"line":1,"column":2217}},"29":{"start":{"line":1,"column":2224},"end":{"line":1,"column":2523}},"30":{"start":{"line":1,"column":2545},"end":{"line":1,"column":2546}},"31":{"start":{"line":1,"column":2553},"end":{"line":1,"column":2558}},"32":{"start":{"line":1,"column":2566},"end":{"line":1,"column":2571}},"33":{"start":{"line":1,"column":2572},"end":{"line":1,"column":2754}},"34":{"start":{"line":1,"column":2611},"end":{"line":1,"column":2615}},"35":{"start":{"line":1,"column":2616},"end":{"line":1,"column":2753}},"36":{"start":{"line":1,"column":2634},"end":{"line":1,"column":2641}},"37":{"start":{"line":1,"column":2647},"end":{"line":1,"column":2752}},"38":{"start":{"line":1,"column":2730},"end":{"line":1,"column":2737}},"39":{"start":{"line":1,"column":2737},"end":{"line":1,"column":2746}},"40":{"start":{"line":1,"column":2746},"end":{"line":1,"column":2751}},"41":{"start":{"line":1,"column":2760},"end":{"line":1,"column":2789}},"42":{"start":{"line":1,"column":2813},"end":{"line":1,"column":2829}},"43":{"start":{"line":1,"column":2830},"end":{"line":1,"column":2852}},"44":{"start":{"line":1,"column":2842},"end":{"line":1,"column":2851}},"45":{"start":{"line":1,"column":2859},"end":{"line":1,"column":2871}},"46":{"start":{"line":1,"column":2872},"end":{"line":1,"column":2881}},"47":{"start":{"line":1,"column":2881},"end":{"line":1,"column":3054}},"48":{"start":{"line":1,"column":2888},"end":{"line":1,"column":2897}},"49":{"start":{"line":1,"column":2903},"end":{"line":1,"column":3053}},"50":{"start":{"line":1,"column":2924},"end":{"line":1,"column":2958}},"51":{"start":{"line":1,"column":2964},"end":{"line":1,"column":3052}},"52":{"start":{"line":1,"column":2987},"end":{"line":1,"column":3022}},"53":{"start":{"line":1,"column":3028},"end":{"line":1,"column":3051}},"54":{"start":{"line":1,"column":3070},"end":{"line":1,"column":3123}},"55":{"start":{"line":1,"column":3080},"end":{"line":1,"column":3122}},"56":{"start":{"line":1,"column":3130},"end":{"line":1,"column":3153}},"57":{"start":{"line":1,"column":3154},"end":{"line":1,"column":3209}},"58":{"start":{"line":1,"column":3198},"end":{"line":1,"column":3208}},"59":{"start":{"line":1,"column":3209},"end":{"line":1,"column":3218}},"60":{"start":{"line":1,"column":3241},"end":{"line":1,"column":3392}},"61":{"start":{"line":1,"column":3400},"end":{"line":1,"column":3402}},"62":{"start":{"line":1,"column":3410},"end":{"line":1,"column":3412}},"63":{"start":{"line":1,"column":3420},"end":{"line":1,"column":3431}},"64":{"start":{"line":1,"column":3432},"end":{"line":1,"column":3796}},"65":{"start":{"line":1,"column":3482},"end":{"line":1,"column":3488}},"66":{"start":{"line":1,"column":3489},"end":{"line":1,"column":3795}},"67":{"start":{"line":1,"column":3514},"end":{"line":1,"column":3525}},"68":{"start":{"line":1,"column":3538},"end":{"line":1,"column":3544}},"69":{"start":{"line":1,"column":3552},"end":{"line":1,"column":3613}},"70":{"start":{"line":1,"column":3580},"end":{"line":1,"column":3596}},"71":{"start":{"line":1,"column":3596},"end":{"line":1,"column":3601}},"72":{"start":{"line":1,"column":3607},"end":{"line":1,"column":3612}},"73":{"start":{"line":1,"column":3613},"end":{"line":1,"column":3630}},"74":{"start":{"line":1,"column":3630},"end":{"line":1,"column":3794}},"75":{"start":{"line":1,"column":3651},"end":{"line":1,"column":3720}},"76":{"start":{"line":1,"column":3671},"end":{"line":1,"column":3719}},"77":{"start":{"line":1,"column":3720},"end":{"line":1,"column":3793}},"78":{"start":{"line":1,"column":3741},"end":{"line":1,"column":3792}},"79":{"start":{"line":1,"column":3796},"end":{"line":1,"column":3857}},"80":{"start":{"line":1,"column":3820},"end":{"line":1,"column":3854}},"81":{"start":{"line":1,"column":3864},"end":{"line":1,"column":3866}},"82":{"start":{"line":1,"column":3874},"end":{"line":1,"column":3883}},"83":{"start":{"line":1,"column":3884},"end":{"line":1,"column":3998}},"84":{"start":{"line":1,"column":3923},"end":{"line":1,"column":3929}},"85":{"start":{"line":1,"column":3930},"end":{"line":1,"column":3997}},"86":{"start":{"line":1,"column":3949},"end":{"line":1,"column":3976}},"87":{"start":{"line":1,"column":3982},"end":{"line":1,"column":3996}},"88":{"start":{"line":1,"column":4005},"end":{"line":1,"column":4010}},"89":{"start":{"line":1,"column":4011},"end":{"line":1,"column":4031}},"90":{"start":{"line":1,"column":4018},"end":{"line":1,"column":4030}},"91":{"start":{"line":1,"column":4031},"end":{"line":1,"column":4052}},"92":{"start":{"line":1,"column":4052},"end":{"line":1,"column":4182}},"93":{"start":{"line":1,"column":4091},"end":{"line":1,"column":4097}},"94":{"start":{"line":1,"column":4098},"end":{"line":1,"column":4116}},"95":{"start":{"line":1,"column":4116},"end":{"line":1,"column":4181}},"96":{"start":{"line":1,"column":4132},"end":{"line":1,"column":4163}},"97":{"start":{"line":1,"column":4150},"end":{"line":1,"column":4162}},"98":{"start":{"line":1,"column":4163},"end":{"line":1,"column":4180}},"99":{"start":{"line":1,"column":4182},"end":{"line":1,"column":4195}},"100":{"start":{"line":1,"column":4195},"end":{"line":1,"column":4213}},"101":{"start":{"line":1,"column":4236},"end":{"line":1,"column":4424}},"102":{"start":{"line":1,"column":4432},"end":{"line":1,"column":4441}},"103":{"start":{"line":1,"column":4449},"end":{"line":1,"column":4451}},"104":{"start":{"line":1,"column":4452},"end":{"line":1,"column":4595}},"105":{"start":{"line":1,"column":4489},"end":{"line":1,"column":4495}},"106":{"start":{"line":1,"column":4496},"end":{"line":1,"column":4594}},"107":{"start":{"line":1,"column":4509},"end":{"line":1,"column":4513}},"108":{"start":{"line":1,"column":4519},"end":{"line":1,"column":4593}},"109":{"start":{"line":1,"column":4550},"end":{"line":1,"column":4566}},"110":{"start":{"line":1,"column":4567},"end":{"line":1,"column":4592}},"111":{"start":{"line":1,"column":4582},"end":{"line":1,"column":4591}},"112":{"start":{"line":1,"column":4595},"end":{"line":1,"column":4656}},"113":{"start":{"line":1,"column":4627},"end":{"line":1,"column":4655}},"114":{"start":{"line":1,"column":4643},"end":{"line":1,"column":4654}},"115":{"start":{"line":1,"column":4656},"end":{"line":1,"column":4845}},"116":{"start":{"line":1,"column":4693},"end":{"line":1,"column":4699}},"117":{"start":{"line":1,"column":4700},"end":{"line":1,"column":4844}},"118":{"start":{"line":1,"column":4713},"end":{"line":1,"column":4718}},"119":{"start":{"line":1,"column":4718},"end":{"line":1,"column":4754}},"120":{"start":{"line":1,"column":4741},"end":{"line":1,"column":4753}},"121":{"start":{"line":1,"column":4760},"end":{"line":1,"column":4843}},"122":{"start":{"line":1,"column":4791},"end":{"line":1,"column":4807}},"123":{"start":{"line":1,"column":4808},"end":{"line":1,"column":4842}},"124":{"start":{"line":1,"column":4823},"end":{"line":1,"column":4841}},"125":{"start":{"line":1,"column":4845},"end":{"line":1,"column":4919}},"126":{"start":{"line":1,"column":4875},"end":{"line":1,"column":4918}},"127":{"start":{"line":1,"column":4908},"end":{"line":1,"column":4917}},"128":{"start":{"line":1,"column":4919},"end":{"line":1,"column":5178}},"129":{"start":{"line":1,"column":4940},"end":{"line":1,"column":5177}},"130":{"start":{"line":1,"column":4972},"end":{"line":1,"column":4978}},"131":{"start":{"line":1,"column":4986},"end":{"line":1,"column":4998}},"132":{"start":{"line":1,"column":4999},"end":{"line":1,"column":5176}},"133":{"start":{"line":1,"column":5026},"end":{"line":1,"column":5038}},"134":{"start":{"line":1,"column":5044},"end":{"line":1,"column":5175}},"135":{"start":{"line":1,"column":5058},"end":{"line":1,"column":5174}},"136":{"start":{"line":1,"column":5108},"end":{"line":1,"column":5124}},"137":{"start":{"line":1,"column":5125},"end":{"line":1,"column":5172}},"138":{"start":{"line":1,"column":5178},"end":{"line":1,"column":5196}},"139":{"start":{"line":1,"column":5204},"end":{"line":1,"column":5206}},"140":{"start":{"line":1,"column":5207},"end":{"line":1,"column":5327}},"141":{"start":{"line":1,"column":5246},"end":{"line":1,"column":5250}},"142":{"start":{"line":1,"column":5251},"end":{"line":1,"column":5302}},"143":{"start":{"line":1,"column":5279},"end":{"line":1,"column":5301}},"144":{"start":{"line":1,"column":5302},"end":{"line":1,"column":5326}},"145":{"start":{"line":1,"column":5327},"end":{"line":1,"column":5370}},"146":{"start":{"line":1,"column":5391},"end":{"line":1,"column":5415}},"147":{"start":{"line":1,"column":5422},"end":{"line":1,"column":5424}},"148":{"start":{"line":1,"column":5431},"end":{"line":1,"column":5432}},"149":{"start":{"line":1,"column":5439},"end":{"line":1,"column":5441}},"150":{"start":{"line":1,"column":5448},"end":{"line":1,"column":5449}},"151":{"start":{"line":1,"column":5456},"end":{"line":1,"column":5617}},"152":{"start":{"line":1,"column":5475},"end":{"line":1,"column":5502}},"153":{"start":{"line":1,"column":5508},"end":{"line":1,"column":5616}},"154":{"start":{"line":1,"column":5536},"end":{"line":1,"column":5615}},"155":{"start":{"line":1,"column":5623},"end":{"line":1,"column":5650}},"156":{"start":{"line":1,"column":5667},"end":{"line":1,"column":6045}},"157":{"start":{"line":1,"column":5694},"end":{"line":1,"column":5726}},"158":{"start":{"line":1,"column":5719},"end":{"line":1,"column":5725}},"159":{"start":{"line":1,"column":5726},"end":{"line":1,"column":5780}},"160":{"start":{"line":1,"column":5773},"end":{"line":1,"column":5779}},"161":{"start":{"line":1,"column":5787},"end":{"line":1,"column":5798}},"162":{"start":{"line":1,"column":5799},"end":{"line":1,"column":5863}},"163":{"start":{"line":1,"column":5824},"end":{"line":1,"column":5834}},"164":{"start":{"line":1,"column":5834},"end":{"line":1,"column":5846}},"165":{"start":{"line":1,"column":5846},"end":{"line":1,"column":5862}},"166":{"start":{"line":1,"column":5863},"end":{"line":1,"column":5869}},"167":{"start":{"line":1,"column":5890},"end":{"line":1,"column":5902}},"168":{"start":{"line":1,"column":5903},"end":{"line":1,"column":6039}},"169":{"start":{"line":1,"column":5917},"end":{"line":1,"column":5991}},"170":{"start":{"line":1,"column":5924},"end":{"line":1,"column":5956}},"171":{"start":{"line":1,"column":5962},"end":{"line":1,"column":5990}},"172":{"start":{"line":1,"column":5991},"end":{"line":1,"column":5999}},"173":{"start":{"line":1,"column":5999},"end":{"line":1,"column":6009}},"174":{"start":{"line":1,"column":6009},"end":{"line":1,"column":6022}},"175":{"start":{"line":1,"column":6022},"end":{"line":1,"column":6038}},"176":{"start":{"line":1,"column":6039},"end":{"line":1,"column":6044}},"177":{"start":{"line":1,"column":6046},"end":{"line":1,"column":6052}},"178":{"start":{"line":1,"column":6052},"end":{"line":1,"column":6107}},"179":{"start":{"line":1,"column":6128},"end":{"line":1,"column":6142}},"180":{"start":{"line":1,"column":6135},"end":{"line":1,"column":6141}},"181":{"start":{"line":1,"column":6148},"end":{"line":1,"column":6172}},"182":{"start":{"line":1,"column":6173},"end":{"line":1,"column":6178}},"183":{"start":{"line":1,"column":6178},"end":{"line":1,"column":6207}},"184":{"start":{"line":1,"column":6214},"end":{"line":1,"column":6218}},"185":{"start":{"line":1,"column":6239},"end":{"line":1,"column":6248}},"186":{"start":{"line":1,"column":6249},"end":{"line":1,"column":6362}},"187":{"start":{"line":1,"column":6297},"end":{"line":1,"column":6307}},"188":{"start":{"line":1,"column":6308},"end":{"line":1,"column":6361}},"189":{"start":{"line":1,"column":6362},"end":{"line":1,"column":6386}},"190":{"start":{"line":1,"column":6409},"end":{"line":1,"column":6411}},"191":{"start":{"line":1,"column":6418},"end":{"line":1,"column":6700}},"192":{"start":{"line":1,"column":6437},"end":{"line":1,"column":6448}},"193":{"start":{"line":1,"column":6456},"end":{"line":1,"column":6458}},"194":{"start":{"line":1,"column":6466},"end":{"line":1,"column":6468}},"195":{"start":{"line":1,"column":6469},"end":{"line":1,"column":6665}},"196":{"start":{"line":1,"column":6511},"end":{"line":1,"column":6517}},"197":{"start":{"line":1,"column":6525},"end":{"line":1,"column":6529}},"198":{"start":{"line":1,"column":6530},"end":{"line":1,"column":6588}},"199":{"start":{"line":1,"column":6537},"end":{"line":1,"column":6587}},"200":{"start":{"line":1,"column":6568},"end":{"line":1,"column":6586}},"201":{"start":{"line":1,"column":6595},"end":{"line":1,"column":6599}},"202":{"start":{"line":1,"column":6607},"end":{"line":1,"column":6612}},"203":{"start":{"line":1,"column":6613},"end":{"line":1,"column":6664}},"204":{"start":{"line":1,"column":6640},"end":{"line":1,"column":6652}},"205":{"start":{"line":1,"column":6652},"end":{"line":1,"column":6663}},"206":{"start":{"line":1,"column":6665},"end":{"line":1,"column":6688}},"207":{"start":{"line":1,"column":6688},"end":{"line":1,"column":6695}},"208":{"start":{"line":1,"column":6706},"end":{"line":1,"column":6714}},"209":{"start":{"line":1,"column":6721},"end":{"line":1,"column":7510}},"210":{"start":{"line":1,"column":6740},"end":{"line":1,"column":6753}},"211":{"start":{"line":1,"column":6756},"end":{"line":1,"column":6766}},"212":{"start":{"line":1,"column":6774},"end":{"line":1,"column":6779}},"213":{"start":{"line":1,"column":6787},"end":{"line":1,"column":6788}},"214":{"start":{"line":1,"column":6796},"end":{"line":1,"column":6810}},"215":{"start":{"line":1,"column":6818},"end":{"line":1,"column":6820}},"216":{"start":{"line":1,"column":6821},"end":{"line":1,"column":7492}},"217":{"start":{"line":1,"column":6866},"end":{"line":1,"column":6872}},"218":{"start":{"line":1,"column":6880},"end":{"line":1,"column":6886}},"219":{"start":{"line":1,"column":6894},"end":{"line":1,"column":6900}},"220":{"start":{"line":1,"column":6908},"end":{"line":1,"column":7216}},"221":{"start":{"line":1,"column":6933},"end":{"line":1,"column":6941}},"222":{"start":{"line":1,"column":6954},"end":{"line":1,"column":6969}},"223":{"start":{"line":1,"column":6970},"end":{"line":1,"column":7099}},"224":{"start":{"line":1,"column":6977},"end":{"line":1,"column":6996}},"225":{"start":{"line":1,"column":6996},"end":{"line":1,"column":7004}},"226":{"start":{"line":1,"column":7010},"end":{"line":1,"column":7085}},"227":{"start":{"line":1,"column":7034},"end":{"line":1,"column":7043}},"228":{"start":{"line":1,"column":7043},"end":{"line":1,"column":7062}},"229":{"start":{"line":1,"column":7062},"end":{"line":1,"column":7084}},"230":{"start":{"line":1,"column":7069},"end":{"line":1,"column":7078}},"231":{"start":{"line":1,"column":7078},"end":{"line":1,"column":7083}},"232":{"start":{"line":1,"column":7085},"end":{"line":1,"column":7098}},"233":{"start":{"line":1,"column":7093},"end":{"line":1,"column":7097}},"234":{"start":{"line":1,"column":7099},"end":{"line":1,"column":7144}},"235":{"start":{"line":1,"column":7144},"end":{"line":1,"column":7197}},"236":{"start":{"line":1,"column":7183},"end":{"line":1,"column":7192}},"237":{"start":{"line":1,"column":7192},"end":{"line":1,"column":7196}},"238":{"start":{"line":1,"column":7197},"end":{"line":1,"column":7215}},"239":{"start":{"line":1,"column":7205},"end":{"line":1,"column":7214}},"240":{"start":{"line":1,"column":7223},"end":{"line":1,"column":7225}},"241":{"start":{"line":1,"column":7226},"end":{"line":1,"column":7240}},"242":{"start":{"line":1,"column":7240},"end":{"line":1,"column":7491}},"243":{"start":{"line":1,"column":7248},"end":{"line":1,"column":7264}},"244":{"start":{"line":1,"column":7277},"end":{"line":1,"column":7282}},"245":{"start":{"line":1,"column":7290},"end":{"line":1,"column":7304}},"246":{"start":{"line":1,"column":7312},"end":{"line":1,"column":7324}},"247":{"start":{"line":1,"column":7325},"end":{"line":1,"column":7377}},"248":{"start":{"line":1,"column":7335},"end":{"line":1,"column":7361}},"249":{"start":{"line":1,"column":7361},"end":{"line":1,"column":7376}},"250":{"start":{"line":1,"column":7384},"end":{"line":1,"column":7399}},"251":{"start":{"line":1,"column":7400},"end":{"line":1,"column":7432}},"252":{"start":{"line":1,"column":7432},"end":{"line":1,"column":7458}},"253":{"start":{"line":1,"column":7458},"end":{"line":1,"column":7490}},"254":{"start":{"line":1,"column":7492},"end":{"line":1,"column":7509}},"255":{"start":{"line":1,"column":7511},"end":{"line":1,"column":7519}},"256":{"start":{"line":1,"column":7540},"end":{"line":1,"column":7542}},"257":{"start":{"line":1,"column":7545},"end":{"line":1,"column":7547}},"258":{"start":{"line":1,"column":7548},"end":{"line":1,"column":8035}},"259":{"start":{"line":1,"column":7574},"end":{"line":1,"column":7781}},"260":{"start":{"line":1,"column":7787},"end":{"line":1,"column":8034}},"261":{"start":{"line":1,"column":7810},"end":{"line":1,"column":7936}},"262":{"start":{"line":1,"column":7942},"end":{"line":1,"column":8033}},"263":{"start":{"line":1,"column":8035},"end":{"line":1,"column":8104}},"264":{"start":{"line":1,"column":8057},"end":{"line":1,"column":8103}},"265":{"start":{"line":1,"column":8110},"end":{"line":1,"column":8124}},"266":{"start":{"line":1,"column":8125},"end":{"line":1,"column":8474}},"267":{"start":{"line":1,"column":8131},"end":{"line":1,"column":8473}},"268":{"start":{"line":1,"column":8152},"end":{"line":1,"column":8346}},"269":{"start":{"line":1,"column":8160},"end":{"line":1,"column":8220}},"270":{"start":{"line":1,"column":8226},"end":{"line":1,"column":8345}},"271":{"start":{"line":1,"column":8346},"end":{"line":1,"column":8433}},"272":{"start":{"line":1,"column":8439},"end":{"line":1,"column":8472}},"273":{"start":{"line":1,"column":8474},"end":{"line":1,"column":8571}},"274":{"start":{"line":1,"column":8495},"end":{"line":1,"column":8528}},"275":{"start":{"line":1,"column":8528},"end":{"line":1,"column":8570}},"276":{"start":{"line":1,"column":8571},"end":{"line":1,"column":8746}},"277":{"start":{"line":1,"column":8598},"end":{"line":1,"column":8693}},"278":{"start":{"line":1,"column":8695},"end":{"line":1,"column":8745}},"279":{"start":{"line":1,"column":8752},"end":{"line":1,"column":8759}},"280":{"start":{"line":1,"column":8760},"end":{"line":1,"column":8780}},"281":{"start":{"line":1,"column":8766},"end":{"line":1,"column":8779}},"282":{"start":{"line":1,"column":8786},"end":{"line":1,"column":8822}},"283":{"start":{"line":1,"column":8823},"end":{"line":1,"column":8904}},"284":{"start":{"line":1,"column":8836},"end":{"line":1,"column":8903}},"285":{"start":{"line":1,"column":8904},"end":{"line":1,"column":8942}},"286":{"start":{"line":1,"column":8942},"end":{"line":1,"column":9257}},"287":{"start":{"line":1,"column":9257},"end":{"line":1,"column":9270}},"288":{"start":{"line":1,"column":9277},"end":{"line":1,"column":9371}},"289":{"start":{"line":1,"column":9395},"end":{"line":1,"column":9419}},"290":{"start":{"line":1,"column":9427},"end":{"line":1,"column":9437}},"291":{"start":{"line":1,"column":9445},"end":{"line":1,"column":9460}},"292":{"start":{"line":1,"column":9467},"end":{"line":1,"column":9622}},"293":{"start":{"line":1,"column":9486},"end":{"line":1,"column":9513}},"294":{"start":{"line":1,"column":9519},"end":{"line":1,"column":9621}},"295":{"start":{"line":1,"column":9547},"end":{"line":1,"column":9620}},"296":{"start":{"line":1,"column":9628},"end":{"line":1,"column":9655}},"297":{"start":{"line":1,"column":9663},"end":{"line":1,"column":9685}},"298":{"start":{"line":1,"column":9686},"end":{"line":1,"column":9735}},"299":{"start":{"line":1,"column":9706},"end":{"line":1,"column":9734}},"300":{"start":{"line":1,"column":9741},"end":{"line":1,"column":9745}},"301":{"start":{"line":1,"column":9762},"end":{"line":1,"column":10258}},"302":{"start":{"line":1,"column":9789},"end":{"line":1,"column":9820}},"303":{"start":{"line":1,"column":9814},"end":{"line":1,"column":9819}},"304":{"start":{"line":1,"column":9820},"end":{"line":1,"column":9959}},"305":{"start":{"line":1,"column":9843},"end":{"line":1,"column":9850}},"306":{"start":{"line":1,"column":9850},"end":{"line":1,"column":9898}},"307":{"start":{"line":1,"column":9868},"end":{"line":1,"column":9897}},"308":{"start":{"line":1,"column":9904},"end":{"line":1,"column":9958}},"309":{"start":{"line":1,"column":9951},"end":{"line":1,"column":9957}},"310":{"start":{"line":1,"column":9959},"end":{"line":1,"column":9965}},"311":{"start":{"line":1,"column":9979},"end":{"line":1,"column":10252}},"312":{"start":{"line":1,"column":9992},"end":{"line":1,"column":10004}},"313":{"start":{"line":1,"column":10012},"end":{"line":1,"column":10024}},"314":{"start":{"line":1,"column":10025},"end":{"line":1,"column":10251}},"315":{"start":{"line":1,"column":10039},"end":{"line":1,"column":10063}},"316":{"start":{"line":1,"column":10064},"end":{"line":1,"column":10080}},"317":{"start":{"line":1,"column":10087},"end":{"line":1,"column":10122}},"318":{"start":{"line":1,"column":10123},"end":{"line":1,"column":10205}},"319":{"start":{"line":1,"column":10137},"end":{"line":1,"column":10150}},"320":{"start":{"line":1,"column":10151},"end":{"line":1,"column":10204}},"321":{"start":{"line":1,"column":10205},"end":{"line":1,"column":10212}},"322":{"start":{"line":1,"column":10212},"end":{"line":1,"column":10250}},"323":{"start":{"line":1,"column":10220},"end":{"line":1,"column":10249}},"324":{"start":{"line":1,"column":10252},"end":{"line":1,"column":10257}},"325":{"start":{"line":1,"column":10275},"end":{"line":1,"column":10331}},"326":{"start":{"line":1,"column":10298},"end":{"line":1,"column":10315}},"327":{"start":{"line":1,"column":10315},"end":{"line":1,"column":10330}},"328":{"start":{"line":1,"column":10323},"end":{"line":1,"column":10329}},"329":{"start":{"line":1,"column":10357},"end":{"line":1,"column":10382}},"330":{"start":{"line":1,"column":10390},"end":{"line":1,"column":10403}},"331":{"start":{"line":1,"column":10404},"end":{"line":1,"column":10530}},"332":{"start":{"line":1,"column":10418},"end":{"line":1,"column":10426}},"333":{"start":{"line":1,"column":10434},"end":{"line":1,"column":10448}},"334":{"start":{"line":1,"column":10449},"end":{"line":1,"column":10468}},"335":{"start":{"line":1,"column":10468},"end":{"line":1,"column":10529}},"336":{"start":{"line":1,"column":10492},"end":{"line":1,"column":10510}},"337":{"start":{"line":1,"column":10510},"end":{"line":1,"column":10528}},"338":{"start":{"line":1,"column":10530},"end":{"line":1,"column":10539}},"339":{"start":{"line":1,"column":10547},"end":{"line":1,"column":10567}},"340":{"start":{"line":1,"column":10568},"end":{"line":1,"column":10623}},"341":{"start":{"line":1,"column":10617},"end":{"line":1,"column":10622}},"342":{"start":{"line":1,"column":10623},"end":{"line":1,"column":10633}},"343":{"start":{"line":1,"column":10634},"end":{"line":1,"column":10671}},"344":{"start":{"line":1,"column":10662},"end":{"line":1,"column":10670}},"345":{"start":{"line":1,"column":10671},"end":{"line":1,"column":10717}},"346":{"start":{"line":1,"column":10687},"end":{"line":1,"column":10716}},"347":{"start":{"line":1,"column":10724},"end":{"line":1,"column":10746}},"348":{"start":{"line":1,"column":10747},"end":{"line":1,"column":10771}},"349":{"start":{"line":1,"column":10777},"end":{"line":1,"column":10802}},"350":{"start":{"line":1,"column":10803},"end":{"line":1,"column":10951}},"351":{"start":{"line":1,"column":10835},"end":{"line":1,"column":10843}},"352":{"start":{"line":1,"column":10843},"end":{"line":1,"column":10871}},"353":{"start":{"line":1,"column":10871},"end":{"line":1,"column":10932}},"354":{"start":{"line":1,"column":10890},"end":{"line":1,"column":10931}},"355":{"start":{"line":1,"column":10932},"end":{"line":1,"column":10950}},"356":{"start":{"line":1,"column":10951},"end":{"line":1,"column":10968}},"357":{"start":{"line":1,"column":10991},"end":{"line":1,"column":11027}},"358":{"start":{"line":1,"column":11035},"end":{"line":1,"column":11040}},"359":{"start":{"line":1,"column":11048},"end":{"line":1,"column":11061}},"360":{"start":{"line":1,"column":11069},"end":{"line":1,"column":11078}},"361":{"start":{"line":1,"column":11085},"end":{"line":1,"column":11086}},"362":{"start":{"line":1,"column":11094},"end":{"line":1,"column":11102}},"363":{"start":{"line":1,"column":11109},"end":{"line":1,"column":11118}},"364":{"start":{"line":1,"column":11126},"end":{"line":1,"column":11127}},"365":{"start":{"line":1,"column":11134},"end":{"line":1,"column":11148}},"366":{"start":{"line":1,"column":11155},"end":{"line":1,"column":11163}},"367":{"start":{"line":1,"column":11170},"end":{"line":1,"column":11171}},"368":{"start":{"line":1,"column":11172},"end":{"line":1,"column":11180}},"369":{"start":{"line":1,"column":11190},"end":{"line":1,"column":11273}},"370":{"start":{"line":1,"column":11209},"end":{"line":1,"column":11272}},"371":{"start":{"line":1,"column":11229},"end":{"line":1,"column":11245}},"372":{"start":{"line":1,"column":11245},"end":{"line":1,"column":11260}},"373":{"start":{"line":1,"column":11266},"end":{"line":1,"column":11271}},"374":{"start":{"line":1,"column":11273},"end":{"line":1,"column":11278}},"375":{"start":{"line":1,"column":11278},"end":{"line":1,"column":11395}},"376":{"start":{"line":1,"column":11304},"end":{"line":1,"column":11309}},"377":{"start":{"line":1,"column":11317},"end":{"line":1,"column":11324}},"378":{"start":{"line":1,"column":11331},"end":{"line":1,"column":11335}},"379":{"start":{"line":1,"column":11336},"end":{"line":1,"column":11368}},"380":{"start":{"line":1,"column":11363},"end":{"line":1,"column":11367}},"381":{"start":{"line":1,"column":11368},"end":{"line":1,"column":11379}},"382":{"start":{"line":1,"column":11379},"end":{"line":1,"column":11390}},"383":{"start":{"line":1,"column":11390},"end":{"line":1,"column":11394}},"384":{"start":{"line":1,"column":11395},"end":{"line":1,"column":11409}},"385":{"start":{"line":1,"column":11416},"end":{"line":1,"column":11420}},"386":{"start":{"line":1,"column":11421},"end":{"line":1,"column":11892}},"387":{"start":{"line":1,"column":11440},"end":{"line":1,"column":11446}},"388":{"start":{"line":1,"column":11453},"end":{"line":1,"column":11465}},"389":{"start":{"line":1,"column":11473},"end":{"line":1,"column":11477}},"390":{"start":{"line":1,"column":11485},"end":{"line":1,"column":11495}},"391":{"start":{"line":1,"column":11502},"end":{"line":1,"column":11516}},"392":{"start":{"line":1,"column":11524},"end":{"line":1,"column":11532}},"393":{"start":{"line":1,"column":11539},"end":{"line":1,"column":11857}},"394":{"start":{"line":1,"column":11582},"end":{"line":1,"column":11610}},"395":{"start":{"line":1,"column":11589},"end":{"line":1,"column":11609}},"396":{"start":{"line":1,"column":11610},"end":{"line":1,"column":11625}},"397":{"start":{"line":1,"column":11632},"end":{"line":1,"column":11648}},"398":{"start":{"line":1,"column":11656},"end":{"line":1,"column":11680}},"399":{"start":{"line":1,"column":11681},"end":{"line":1,"column":11701}},"400":{"start":{"line":1,"column":11708},"end":{"line":1,"column":11721}},"401":{"start":{"line":1,"column":11722},"end":{"line":1,"column":11745}},"402":{"start":{"line":1,"column":11745},"end":{"line":1,"column":11764}},"403":{"start":{"line":1,"column":11764},"end":{"line":1,"column":11856}},"404":{"start":{"line":1,"column":11772},"end":{"line":1,"column":11821}},"405":{"start":{"line":1,"column":11821},"end":{"line":1,"column":11855}},"406":{"start":{"line":1,"column":11857},"end":{"line":1,"column":11861}},"407":{"start":{"line":1,"column":11861},"end":{"line":1,"column":11876}},"408":{"start":{"line":1,"column":11870},"end":{"line":1,"column":11875}},"409":{"start":{"line":1,"column":11876},"end":{"line":1,"column":11891}},"410":{"start":{"line":1,"column":11886},"end":{"line":1,"column":11890}},"411":{"start":{"line":1,"column":11899},"end":{"line":1,"column":11901}},"412":{"start":{"line":1,"column":11918},"end":{"line":1,"column":12069}},"413":{"start":{"line":1,"column":11952},"end":{"line":1,"column":11956}},"414":{"start":{"line":1,"column":11957},"end":{"line":1,"column":12068}},"415":{"start":{"line":1,"column":11982},"end":{"line":1,"column":11988}},"416":{"start":{"line":1,"column":11994},"end":{"line":1,"column":12067}},"417":{"start":{"line":1,"column":12013},"end":{"line":1,"column":12066}},"418":{"start":{"line":1,"column":12086},"end":{"line":1,"column":12166}},"419":{"start":{"line":1,"column":12116},"end":{"line":1,"column":12165}},"420":{"start":{"line":1,"column":12166},"end":{"line":1,"column":12177}},"421":{"start":{"line":1,"column":12178},"end":{"line":1,"column":12200}},"422":{"start":{"line":1,"column":12200},"end":{"line":1,"column":12643}},"423":{"start":{"line":1,"column":12643},"end":{"line":1,"column":13152}},"424":{"start":{"line":1,"column":13152},"end":{"line":1,"column":13189}},"425":{"start":{"line":1,"column":13189},"end":{"line":1,"column":13287}},"426":{"start":{"line":1,"column":13287},"end":{"line":1,"column":13331}},"427":{"start":{"line":1,"column":13331},"end":{"line":1,"column":13424}},"428":{"start":{"line":1,"column":13424},"end":{"line":1,"column":13472}},"429":{"start":{"line":1,"column":13472},"end":{"line":1,"column":13550}},"430":{"start":{"line":1,"column":13550},"end":{"line":1,"column":13646}},"431":{"start":{"line":1,"column":13646},"end":{"line":1,"column":13743}},"432":{"start":{"line":1,"column":13743},"end":{"line":1,"column":13828}},"433":{"start":{"line":1,"column":13828},"end":{"line":1,"column":13893}},"434":{"start":{"line":1,"column":13893},"end":{"line":1,"column":14024}},"435":{"start":{"line":1,"column":14024},"end":{"line":1,"column":14060}},"436":{"start":{"line":1,"column":14080},"end":{"line":1,"column":14095}},"437":{"start":{"line":1,"column":14096},"end":{"line":1,"column":14267}},"438":{"start":{"line":1,"column":14106},"end":{"line":1,"column":14121}},"439":{"start":{"line":1,"column":14128},"end":{"line":1,"column":14140}},"440":{"start":{"line":1,"column":14141},"end":{"line":1,"column":14156}},"441":{"start":{"line":1,"column":14156},"end":{"line":1,"column":14172}},"442":{"start":{"line":1,"column":14172},"end":{"line":1,"column":14184}},"443":{"start":{"line":1,"column":14184},"end":{"line":1,"column":14194}},"444":{"start":{"line":1,"column":14194},"end":{"line":1,"column":14198}},"445":{"start":{"line":1,"column":14208},"end":{"line":1,"column":14266}},"446":{"start":{"line":1,"column":14232},"end":{"line":1,"column":14265}},"447":{"start":{"line":1,"column":14292},"end":{"line":1,"column":14321}},"448":{"start":{"line":1,"column":14322},"end":{"line":1,"column":14336}},"449":{"start":{"line":1,"column":14336},"end":{"line":1,"column":14349}},"450":{"start":{"line":1,"column":14342},"end":{"line":1,"column":14348}},"451":{"start":{"line":1,"column":14355},"end":{"line":1,"column":14399}},"452":{"start":{"line":1,"column":14400},"end":{"line":1,"column":14405}},"453":{"start":{"line":1,"column":14405},"end":{"line":1,"column":14423}},"454":{"start":{"line":1,"column":14454},"end":{"line":1,"column":14494}},"455":{"start":{"line":1,"column":14502},"end":{"line":1,"column":14531}},"456":{"start":{"line":1,"column":14538},"end":{"line":1,"column":14540}},"457":{"start":{"line":1,"column":14541},"end":{"line":1,"column":14629}},"458":{"start":{"line":1,"column":14573},"end":{"line":1,"column":14628}},"459":{"start":{"line":1,"column":14610},"end":{"line":1,"column":14627}},"460":{"start":{"line":1,"column":14629},"end":{"line":1,"column":14637}},"461":{"start":{"line":1,"column":14643},"end":{"line":1,"column":14647}},"462":{"start":{"line":1,"column":14648},"end":{"line":1,"column":14698}},"463":{"start":{"line":1,"column":14659},"end":{"line":1,"column":14697}},"464":{"start":{"line":1,"column":14677},"end":{"line":1,"column":14695}},"465":{"start":{"line":1,"column":14704},"end":{"line":1,"column":14705}},"466":{"start":{"line":1,"column":14719},"end":{"line":1,"column":14751}},"467":{"start":{"line":1,"column":14759},"end":{"line":1,"column":14776}},"468":{"start":{"line":1,"column":14798},"end":{"line":1,"column":14852}},"469":{"start":{"line":1,"column":14854},"end":{"line":1,"column":15434}},"470":{"start":{"line":1,"column":14894},"end":{"line":1,"column":14898}},"471":{"start":{"line":1,"column":14906},"end":{"line":1,"column":14918}},"472":{"start":{"line":1,"column":14919},"end":{"line":1,"column":15433}},"473":{"start":{"line":1,"column":14959},"end":{"line":1,"column":14971}},"474":{"start":{"line":1,"column":14979},"end":{"line":1,"column":15046}},"475":{"start":{"line":1,"column":15020},"end":{"line":1,"column":15045}},"476":{"start":{"line":1,"column":15046},"end":{"line":1,"column":15062}},"477":{"start":{"line":1,"column":15053},"end":{"line":1,"column":15061}},"478":{"start":{"line":1,"column":15069},"end":{"line":1,"column":15074}},"479":{"start":{"line":1,"column":15075},"end":{"line":1,"column":15256}},"480":{"start":{"line":1,"column":15121},"end":{"line":1,"column":15255}},"481":{"start":{"line":1,"column":15241},"end":{"line":1,"column":15249}},"482":{"start":{"line":1,"column":15249},"end":{"line":1,"column":15254}},"483":{"start":{"line":1,"column":15256},"end":{"line":1,"column":15432}},"484":{"start":{"line":1,"column":15271},"end":{"line":1,"column":15316}},"485":{"start":{"line":1,"column":15317},"end":{"line":1,"column":15361}},"486":{"start":{"line":1,"column":15361},"end":{"line":1,"column":15377}},"487":{"start":{"line":1,"column":15368},"end":{"line":1,"column":15376}},"488":{"start":{"line":1,"column":15377},"end":{"line":1,"column":15427}},"489":{"start":{"line":1,"column":15427},"end":{"line":1,"column":15431}},"490":{"start":{"line":1,"column":15434},"end":{"line":1,"column":15485}},"491":{"start":{"line":1,"column":15449},"end":{"line":1,"column":15466}},"492":{"start":{"line":1,"column":15472},"end":{"line":1,"column":15484}},"493":{"start":{"line":1,"column":15479},"end":{"line":1,"column":15483}},"494":{"start":{"line":1,"column":15486},"end":{"line":1,"column":15489}},"495":{"start":{"line":1,"column":15490},"end":{"line":1,"column":15514}},"496":{"start":{"line":1,"column":15514},"end":{"line":1,"column":15535}},"497":{"start":{"line":1,"column":15535},"end":{"line":1,"column":15780}},"498":{"start":{"line":1,"column":15785},"end":{"line":1,"column":16550}},"499":{"start":{"line":1,"column":16550},"end":{"line":1,"column":17330}},"500":{"start":{"line":1,"column":17330},"end":{"line":1,"column":17476}},"501":{"start":{"line":1,"column":17476},"end":{"line":1,"column":17568}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":1,"column":40},"end":{"line":1,"column":41}},"loc":{"start":{"line":1,"column":50},"end":{"line":1,"column":15781}}},"1":{"name":"k","decl":{"start":{"line":1,"column":2533},"end":{"line":1,"column":2534}},"loc":{"start":{"line":1,"column":2537},"end":{"line":1,"column":5371}}},"2":{"name":"ab","decl":{"start":{"line":1,"column":2799},"end":{"line":1,"column":2801}},"loc":{"start":{"line":1,"column":2805},"end":{"line":1,"column":3055}}},"3":{"name":"T","decl":{"start":{"line":1,"column":3064},"end":{"line":1,"column":3065}},"loc":{"start":{"line":1,"column":3069},"end":{"line":1,"column":3219}}},"4":{"name":"X","decl":{"start":{"line":1,"column":3228},"end":{"line":1,"column":3229}},"loc":{"start":{"line":1,"column":3233},"end":{"line":1,"column":4214}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":1,"column":3804},"end":{"line":1,"column":3805}},"loc":{"start":{"line":1,"column":3819},"end":{"line":1,"column":3855}}},"6":{"name":"W","decl":{"start":{"line":1,"column":4223},"end":{"line":1,"column":4224}},"loc":{"start":{"line":1,"column":4228},"end":{"line":1,"column":5197}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":1,"column":5088},"end":{"line":1,"column":5089}},"loc":{"start":{"line":1,"column":5100},"end":{"line":1,"column":5173}}},"8":{"name":"a","decl":{"start":{"line":1,"column":5380},"end":{"line":1,"column":5381}},"loc":{"start":{"line":1,"column":5384},"end":{"line":1,"column":6108}}},"9":{"name":"aa","decl":{"start":{"line":1,"column":5660},"end":{"line":1,"column":5662}},"loc":{"start":{"line":1,"column":5666},"end":{"line":1,"column":6046}}},"10":{"name":"B","decl":{"start":{"line":1,"column":6117},"end":{"line":1,"column":6118}},"loc":{"start":{"line":1,"column":6127},"end":{"line":1,"column":6208}}},"11":{"name":"o","decl":{"start":{"line":1,"column":6228},"end":{"line":1,"column":6229}},"loc":{"start":{"line":1,"column":6232},"end":{"line":1,"column":6387}}},"12":{"name":"g","decl":{"start":{"line":1,"column":6396},"end":{"line":1,"column":6397}},"loc":{"start":{"line":1,"column":6402},"end":{"line":1,"column":7520}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":1,"column":6419},"end":{"line":1,"column":6420}},"loc":{"start":{"line":1,"column":6429},"end":{"line":1,"column":6696}}},"14":{"name":"(anonymous_14)","decl":{"start":{"line":1,"column":6721},"end":{"line":1,"column":6722}},"loc":{"start":{"line":1,"column":6733},"end":{"line":1,"column":7510}}},"15":{"name":"i","decl":{"start":{"line":1,"column":7529},"end":{"line":1,"column":7530}},"loc":{"start":{"line":1,"column":7533},"end":{"line":1,"column":9271}}},"16":{"name":"Q","decl":{"start":{"line":1,"column":9381},"end":{"line":1,"column":9382}},"loc":{"start":{"line":1,"column":9388},"end":{"line":1,"column":10969}}},"17":{"name":"ae","decl":{"start":{"line":1,"column":9755},"end":{"line":1,"column":9757}},"loc":{"start":{"line":1,"column":9761},"end":{"line":1,"column":10259}}},"18":{"name":"ad","decl":{"start":{"line":1,"column":10268},"end":{"line":1,"column":10270}},"loc":{"start":{"line":1,"column":10274},"end":{"line":1,"column":10634}}},"19":{"name":"ai","decl":{"start":{"line":1,"column":10340},"end":{"line":1,"column":10342}},"loc":{"start":{"line":1,"column":10349},"end":{"line":1,"column":10540}}},"20":{"name":"D","decl":{"start":{"line":1,"column":10978},"end":{"line":1,"column":10979}},"loc":{"start":{"line":1,"column":10983},"end":{"line":1,"column":11893}}},"21":{"name":"c","decl":{"start":{"line":1,"column":11911},"end":{"line":1,"column":11912}},"loc":{"start":{"line":1,"column":11917},"end":{"line":1,"column":12070}}},"22":{"name":"q","decl":{"start":{"line":1,"column":12079},"end":{"line":1,"column":12080}},"loc":{"start":{"line":1,"column":12085},"end":{"line":1,"column":12178}}},"23":{"name":"d","decl":{"start":{"line":1,"column":14069},"end":{"line":1,"column":14070}},"loc":{"start":{"line":1,"column":14073},"end":{"line":1,"column":14268}}},"24":{"name":"y","decl":{"start":{"line":1,"column":14277},"end":{"line":1,"column":14278}},"loc":{"start":{"line":1,"column":14285},"end":{"line":1,"column":14424}}},"25":{"name":"b","decl":{"start":{"line":1,"column":14433},"end":{"line":1,"column":14434}},"loc":{"start":{"line":1,"column":14438},"end":{"line":1,"column":15490}}},"26":{"name":"Y","decl":{"start":{"line":1,"column":14448},"end":{"line":1,"column":14449}},"loc":{"start":{"line":1,"column":14453},"end":{"line":1,"column":14495}}},"27":{"name":"(anonymous_27)","decl":{"start":{"line":1,"column":14666},"end":{"line":1,"column":14667}},"loc":{"start":{"line":1,"column":14676},"end":{"line":1,"column":14696}}},"28":{"name":"U","decl":{"start":{"line":1,"column":14786},"end":{"line":1,"column":14787}},"loc":{"start":{"line":1,"column":14789},"end":{"line":1,"column":15486}}}},"branchMap":{"0":{"loc":{"start":{"line":1,"column":2616},"end":{"line":1,"column":2753}},"type":"if","locations":[{"start":{"line":1,"column":2616},"end":{"line":1,"column":2753}},{"start":{"line":1,"column":2616},"end":{"line":1,"column":2753}}]},"1":{"loc":{"start":{"line":1,"column":2647},"end":{"line":1,"column":2752}},"type":"if","locations":[{"start":{"line":1,"column":2647},"end":{"line":1,"column":2752}},{"start":{"line":1,"column":2647},"end":{"line":1,"column":2752}}]},"2":{"loc":{"start":{"line":1,"column":2830},"end":{"line":1,"column":2852}},"type":"if","locations":[{"start":{"line":1,"column":2830},"end":{"line":1,"column":2852}},{"start":{"line":1,"column":2830},"end":{"line":1,"column":2852}}]},"3":{"loc":{"start":{"line":1,"column":2881},"end":{"line":1,"column":3054}},"type":"if","locations":[{"start":{"line":1,"column":2881},"end":{"line":1,"column":3054}},{"start":{"line":1,"column":2881},"end":{"line":1,"column":3054}}]},"4":{"loc":{"start":{"line":1,"column":2903},"end":{"line":1,"column":3053}},"type":"if","locations":[{"start":{"line":1,"column":2903},"end":{"line":1,"column":3053}},{"start":{"line":1,"column":2903},"end":{"line":1,"column":3053}}]},"5":{"loc":{"start":{"line":1,"column":2906},"end":{"line":1,"column":2922}},"type":"binary-expr","locations":[{"start":{"line":1,"column":2906},"end":{"line":1,"column":2913}},{"start":{"line":1,"column":2915},"end":{"line":1,"column":2922}}]},"6":{"loc":{"start":{"line":1,"column":2964},"end":{"line":1,"column":3052}},"type":"if","locations":[{"start":{"line":1,"column":2964},"end":{"line":1,"column":3052}},{"start":{"line":1,"column":2964},"end":{"line":1,"column":3052}}]},"7":{"loc":{"start":{"line":1,"column":2967},"end":{"line":1,"column":2985}},"type":"binary-expr","locations":[{"start":{"line":1,"column":2967},"end":{"line":1,"column":2975}},{"start":{"line":1,"column":2977},"end":{"line":1,"column":2985}}]},"8":{"loc":{"start":{"line":1,"column":3070},"end":{"line":1,"column":3123}},"type":"if","locations":[{"start":{"line":1,"column":3070},"end":{"line":1,"column":3123}},{"start":{"line":1,"column":3070},"end":{"line":1,"column":3123}}]},"9":{"loc":{"start":{"line":1,"column":3087},"end":{"line":1,"column":3105}},"type":"cond-expr","locations":[{"start":{"line":1,"column":3093},"end":{"line":1,"column":3099}},{"start":{"line":1,"column":3100},"end":{"line":1,"column":3105}}]},"10":{"loc":{"start":{"line":1,"column":3154},"end":{"line":1,"column":3209}},"type":"if","locations":[{"start":{"line":1,"column":3154},"end":{"line":1,"column":3209}},{"start":{"line":1,"column":3154},"end":{"line":1,"column":3209}}]},"11":{"loc":{"start":{"line":1,"column":3157},"end":{"line":1,"column":3196}},"type":"binary-expr","locations":[{"start":{"line":1,"column":3157},"end":{"line":1,"column":3166}},{"start":{"line":1,"column":3168},"end":{"line":1,"column":3176}},{"start":{"line":1,"column":3178},"end":{"line":1,"column":3186}},{"start":{"line":1,"column":3188},"end":{"line":1,"column":3196}}]},"12":{"loc":{"start":{"line":1,"column":3489},"end":{"line":1,"column":3795}},"type":"if","locations":[{"start":{"line":1,"column":3489},"end":{"line":1,"column":3795}},{"start":{"line":1,"column":3489},"end":{"line":1,"column":3795}}]},"13":{"loc":{"start":{"line":1,"column":3552},"end":{"line":1,"column":3613}},"type":"if","locations":[{"start":{"line":1,"column":3552},"end":{"line":1,"column":3613}},{"start":{"line":1,"column":3552},"end":{"line":1,"column":3613}}]},"14":{"loc":{"start":{"line":1,"column":3555},"end":{"line":1,"column":3578}},"type":"binary-expr","locations":[{"start":{"line":1,"column":3555},"end":{"line":1,"column":3562}},{"start":{"line":1,"column":3564},"end":{"line":1,"column":3578}}]},"15":{"loc":{"start":{"line":1,"column":3630},"end":{"line":1,"column":3794}},"type":"if","locations":[{"start":{"line":1,"column":3630},"end":{"line":1,"column":3794}},{"start":{"line":1,"column":3630},"end":{"line":1,"column":3794}}]},"16":{"loc":{"start":{"line":1,"column":3635},"end":{"line":1,"column":3648}},"type":"binary-expr","locations":[{"start":{"line":1,"column":3635},"end":{"line":1,"column":3640}},{"start":{"line":1,"column":3642},"end":{"line":1,"column":3648}}]},"17":{"loc":{"start":{"line":1,"column":3651},"end":{"line":1,"column":3720}},"type":"if","locations":[{"start":{"line":1,"column":3651},"end":{"line":1,"column":3720}},{"start":{"line":1,"column":3651},"end":{"line":1,"column":3720}}]},"18":{"loc":{"start":{"line":1,"column":3656},"end":{"line":1,"column":3668}},"type":"binary-expr","locations":[{"start":{"line":1,"column":3656},"end":{"line":1,"column":3661}},{"start":{"line":1,"column":3663},"end":{"line":1,"column":3668}}]},"19":{"loc":{"start":{"line":1,"column":3720},"end":{"line":1,"column":3793}},"type":"if","locations":[{"start":{"line":1,"column":3720},"end":{"line":1,"column":3793}},{"start":{"line":1,"column":3720},"end":{"line":1,"column":3793}}]},"20":{"loc":{"start":{"line":1,"column":3725},"end":{"line":1,"column":3738}},"type":"binary-expr","locations":[{"start":{"line":1,"column":3725},"end":{"line":1,"column":3730}},{"start":{"line":1,"column":3732},"end":{"line":1,"column":3738}}]},"21":{"loc":{"start":{"line":1,"column":3826},"end":{"line":1,"column":3854}},"type":"binary-expr","locations":[{"start":{"line":1,"column":3827},"end":{"line":1,"column":3838}},{"start":{"line":1,"column":3842},"end":{"line":1,"column":3853}}]},"22":{"loc":{"start":{"line":1,"column":3930},"end":{"line":1,"column":3997}},"type":"if","locations":[{"start":{"line":1,"column":3930},"end":{"line":1,"column":3997}},{"start":{"line":1,"column":3930},"end":{"line":1,"column":3997}}]},"23":{"loc":{"start":{"line":1,"column":4011},"end":{"line":1,"column":4031}},"type":"if","locations":[{"start":{"line":1,"column":4011},"end":{"line":1,"column":4031}},{"start":{"line":1,"column":4011},"end":{"line":1,"column":4031}}]},"24":{"loc":{"start":{"line":1,"column":4116},"end":{"line":1,"column":4181}},"type":"if","locations":[{"start":{"line":1,"column":4116},"end":{"line":1,"column":4181}},{"start":{"line":1,"column":4116},"end":{"line":1,"column":4181}}]},"25":{"loc":{"start":{"line":1,"column":4132},"end":{"line":1,"column":4163}},"type":"if","locations":[{"start":{"line":1,"column":4132},"end":{"line":1,"column":4163}},{"start":{"line":1,"column":4132},"end":{"line":1,"column":4163}}]},"26":{"loc":{"start":{"line":1,"column":4496},"end":{"line":1,"column":4594}},"type":"if","locations":[{"start":{"line":1,"column":4496},"end":{"line":1,"column":4594}},{"start":{"line":1,"column":4496},"end":{"line":1,"column":4594}}]},"27":{"loc":{"start":{"line":1,"column":4519},"end":{"line":1,"column":4593}},"type":"if","locations":[{"start":{"line":1,"column":4519},"end":{"line":1,"column":4593}},{"start":{"line":1,"column":4519},"end":{"line":1,"column":4593}}]},"28":{"loc":{"start":{"line":1,"column":4567},"end":{"line":1,"column":4592}},"type":"if","locations":[{"start":{"line":1,"column":4567},"end":{"line":1,"column":4592}},{"start":{"line":1,"column":4567},"end":{"line":1,"column":4592}}]},"29":{"loc":{"start":{"line":1,"column":4570},"end":{"line":1,"column":4580}},"type":"binary-expr","locations":[{"start":{"line":1,"column":4570},"end":{"line":1,"column":4572}},{"start":{"line":1,"column":4574},"end":{"line":1,"column":4580}}]},"30":{"loc":{"start":{"line":1,"column":4627},"end":{"line":1,"column":4655}},"type":"if","locations":[{"start":{"line":1,"column":4627},"end":{"line":1,"column":4655}},{"start":{"line":1,"column":4627},"end":{"line":1,"column":4655}}]},"31":{"loc":{"start":{"line":1,"column":4700},"end":{"line":1,"column":4844}},"type":"if","locations":[{"start":{"line":1,"column":4700},"end":{"line":1,"column":4844}},{"start":{"line":1,"column":4700},"end":{"line":1,"column":4844}}]},"32":{"loc":{"start":{"line":1,"column":4718},"end":{"line":1,"column":4754}},"type":"if","locations":[{"start":{"line":1,"column":4718},"end":{"line":1,"column":4754}},{"start":{"line":1,"column":4718},"end":{"line":1,"column":4754}}]},"33":{"loc":{"start":{"line":1,"column":4760},"end":{"line":1,"column":4843}},"type":"if","locations":[{"start":{"line":1,"column":4760},"end":{"line":1,"column":4843}},{"start":{"line":1,"column":4760},"end":{"line":1,"column":4843}}]},"34":{"loc":{"start":{"line":1,"column":4808},"end":{"line":1,"column":4842}},"type":"if","locations":[{"start":{"line":1,"column":4808},"end":{"line":1,"column":4842}},{"start":{"line":1,"column":4808},"end":{"line":1,"column":4842}}]},"35":{"loc":{"start":{"line":1,"column":4811},"end":{"line":1,"column":4821}},"type":"binary-expr","locations":[{"start":{"line":1,"column":4811},"end":{"line":1,"column":4813}},{"start":{"line":1,"column":4815},"end":{"line":1,"column":4821}}]},"36":{"loc":{"start":{"line":1,"column":4875},"end":{"line":1,"column":4918}},"type":"if","locations":[{"start":{"line":1,"column":4875},"end":{"line":1,"column":4918}},{"start":{"line":1,"column":4875},"end":{"line":1,"column":4918}}]},"37":{"loc":{"start":{"line":1,"column":4878},"end":{"line":1,"column":4906}},"type":"binary-expr","locations":[{"start":{"line":1,"column":4878},"end":{"line":1,"column":4890}},{"start":{"line":1,"column":4892},"end":{"line":1,"column":4906}}]},"38":{"loc":{"start":{"line":1,"column":4919},"end":{"line":1,"column":5178}},"type":"if","locations":[{"start":{"line":1,"column":4919},"end":{"line":1,"column":5178}},{"start":{"line":1,"column":4919},"end":{"line":1,"column":5178}}]},"39":{"loc":{"start":{"line":1,"column":4922},"end":{"line":1,"column":4938}},"type":"binary-expr","locations":[{"start":{"line":1,"column":4922},"end":{"line":1,"column":4935}},{"start":{"line":1,"column":4937},"end":{"line":1,"column":4938}}]},"40":{"loc":{"start":{"line":1,"column":4999},"end":{"line":1,"column":5176}},"type":"if","locations":[{"start":{"line":1,"column":4999},"end":{"line":1,"column":5176}},{"start":{"line":1,"column":4999},"end":{"line":1,"column":5176}}]},"41":{"loc":{"start":{"line":1,"column":5002},"end":{"line":1,"column":5024}},"type":"binary-expr","locations":[{"start":{"line":1,"column":5002},"end":{"line":1,"column":5014}},{"start":{"line":1,"column":5016},"end":{"line":1,"column":5024}}]},"42":{"loc":{"start":{"line":1,"column":5044},"end":{"line":1,"column":5175}},"type":"if","locations":[{"start":{"line":1,"column":5044},"end":{"line":1,"column":5175}},{"start":{"line":1,"column":5044},"end":{"line":1,"column":5175}}]},"43":{"loc":{"start":{"line":1,"column":5251},"end":{"line":1,"column":5302}},"type":"if","locations":[{"start":{"line":1,"column":5251},"end":{"line":1,"column":5302}},{"start":{"line":1,"column":5251},"end":{"line":1,"column":5302}}]},"44":{"loc":{"start":{"line":1,"column":5254},"end":{"line":1,"column":5277}},"type":"binary-expr","locations":[{"start":{"line":1,"column":5254},"end":{"line":1,"column":5263}},{"start":{"line":1,"column":5265},"end":{"line":1,"column":5277}}]},"45":{"loc":{"start":{"line":1,"column":5358},"end":{"line":1,"column":5369}},"type":"cond-expr","locations":[{"start":{"line":1,"column":5361},"end":{"line":1,"column":5365}},{"start":{"line":1,"column":5366},"end":{"line":1,"column":5369}}]},"46":{"loc":{"start":{"line":1,"column":5456},"end":{"line":1,"column":5617}},"type":"if","locations":[{"start":{"line":1,"column":5456},"end":{"line":1,"column":5617}},{"start":{"line":1,"column":5456},"end":{"line":1,"column":5617}}]},"47":{"loc":{"start":{"line":1,"column":5508},"end":{"line":1,"column":5616}},"type":"if","locations":[{"start":{"line":1,"column":5508},"end":{"line":1,"column":5616}},{"start":{"line":1,"column":5508},"end":{"line":1,"column":5616}}]},"48":{"loc":{"start":{"line":1,"column":5623},"end":{"line":1,"column":5650}},"type":"binary-expr","locations":[{"start":{"line":1,"column":5623},"end":{"line":1,"column":5624}},{"start":{"line":1,"column":5626},"end":{"line":1,"column":5650}}]},"49":{"loc":{"start":{"line":1,"column":5667},"end":{"line":1,"column":6045}},"type":"switch","locations":[{"start":{"line":1,"column":5687},"end":{"line":1,"column":5869}},{"start":{"line":1,"column":5869},"end":{"line":1,"column":5876}},{"start":{"line":1,"column":5876},"end":{"line":1,"column":6044}}]},"50":{"loc":{"start":{"line":1,"column":5694},"end":{"line":1,"column":5726}},"type":"if","locations":[{"start":{"line":1,"column":5694},"end":{"line":1,"column":5726}},{"start":{"line":1,"column":5694},"end":{"line":1,"column":5726}}]},"51":{"loc":{"start":{"line":1,"column":5799},"end":{"line":1,"column":5863}},"type":"if","locations":[{"start":{"line":1,"column":5799},"end":{"line":1,"column":5863}},{"start":{"line":1,"column":5799},"end":{"line":1,"column":5863}}]},"52":{"loc":{"start":{"line":1,"column":5802},"end":{"line":1,"column":5822}},"type":"binary-expr","locations":[{"start":{"line":1,"column":5802},"end":{"line":1,"column":5811}},{"start":{"line":1,"column":5813},"end":{"line":1,"column":5822}}]},"53":{"loc":{"start":{"line":1,"column":5903},"end":{"line":1,"column":6039}},"type":"if","locations":[{"start":{"line":1,"column":5903},"end":{"line":1,"column":6039}},{"start":{"line":1,"column":5903},"end":{"line":1,"column":6039}}]},"54":{"loc":{"start":{"line":1,"column":5917},"end":{"line":1,"column":5991}},"type":"if","locations":[{"start":{"line":1,"column":5917},"end":{"line":1,"column":5991}},{"start":{"line":1,"column":5917},"end":{"line":1,"column":5991}}]},"55":{"loc":{"start":{"line":1,"column":6128},"end":{"line":1,"column":6142}},"type":"if","locations":[{"start":{"line":1,"column":6128},"end":{"line":1,"column":6142}},{"start":{"line":1,"column":6128},"end":{"line":1,"column":6142}}]},"56":{"loc":{"start":{"line":1,"column":6310},"end":{"line":1,"column":6361}},"type":"cond-expr","locations":[{"start":{"line":1,"column":6319},"end":{"line":1,"column":6324}},{"start":{"line":1,"column":6326},"end":{"line":1,"column":6361}}]},"57":{"loc":{"start":{"line":1,"column":6319},"end":{"line":1,"column":6324}},"type":"cond-expr","locations":[{"start":{"line":1,"column":6321},"end":{"line":1,"column":6322}},{"start":{"line":1,"column":6323},"end":{"line":1,"column":6324}}]},"58":{"loc":{"start":{"line":1,"column":6326},"end":{"line":1,"column":6361}},"type":"cond-expr","locations":[{"start":{"line":1,"column":6335},"end":{"line":1,"column":6358}},{"start":{"line":1,"column":6360},"end":{"line":1,"column":6361}}]},"59":{"loc":{"start":{"line":1,"column":6335},"end":{"line":1,"column":6358}},"type":"cond-expr","locations":[{"start":{"line":1,"column":6355},"end":{"line":1,"column":6356}},{"start":{"line":1,"column":6357},"end":{"line":1,"column":6358}}]},"60":{"loc":{"start":{"line":1,"column":6369},"end":{"line":1,"column":6386}},"type":"cond-expr","locations":[{"start":{"line":1,"column":6375},"end":{"line":1,"column":6384}},{"start":{"line":1,"column":6385},"end":{"line":1,"column":6386}}]},"61":{"loc":{"start":{"line":1,"column":6530},"end":{"line":1,"column":6588}},"type":"if","locations":[{"start":{"line":1,"column":6530},"end":{"line":1,"column":6588}},{"start":{"line":1,"column":6530},"end":{"line":1,"column":6588}}]},"62":{"loc":{"start":{"line":1,"column":6613},"end":{"line":1,"column":6664}},"type":"if","locations":[{"start":{"line":1,"column":6613},"end":{"line":1,"column":6664}},{"start":{"line":1,"column":6613},"end":{"line":1,"column":6664}}]},"63":{"loc":{"start":{"line":1,"column":6796},"end":{"line":1,"column":6810}},"type":"binary-expr","locations":[{"start":{"line":1,"column":6796},"end":{"line":1,"column":6806}},{"start":{"line":1,"column":6808},"end":{"line":1,"column":6810}}]},"64":{"loc":{"start":{"line":1,"column":6908},"end":{"line":1,"column":7216}},"type":"if","locations":[{"start":{"line":1,"column":6908},"end":{"line":1,"column":7216}},{"start":{"line":1,"column":6908},"end":{"line":1,"column":7216}}]},"65":{"loc":{"start":{"line":1,"column":6970},"end":{"line":1,"column":7099}},"type":"if","locations":[{"start":{"line":1,"column":6970},"end":{"line":1,"column":7099}},{"start":{"line":1,"column":6970},"end":{"line":1,"column":7099}}]},"66":{"loc":{"start":{"line":1,"column":7062},"end":{"line":1,"column":7084}},"type":"if","locations":[{"start":{"line":1,"column":7062},"end":{"line":1,"column":7084}},{"start":{"line":1,"column":7062},"end":{"line":1,"column":7084}}]},"67":{"loc":{"start":{"line":1,"column":7085},"end":{"line":1,"column":7098}},"type":"if","locations":[{"start":{"line":1,"column":7085},"end":{"line":1,"column":7098}},{"start":{"line":1,"column":7085},"end":{"line":1,"column":7098}}]},"68":{"loc":{"start":{"line":1,"column":7102},"end":{"line":1,"column":7143}},"type":"binary-expr","locations":[{"start":{"line":1,"column":7102},"end":{"line":1,"column":7114}},{"start":{"line":1,"column":7116},"end":{"line":1,"column":7143}}]},"69":{"loc":{"start":{"line":1,"column":7144},"end":{"line":1,"column":7197}},"type":"if","locations":[{"start":{"line":1,"column":7144},"end":{"line":1,"column":7197}},{"start":{"line":1,"column":7144},"end":{"line":1,"column":7197}}]},"70":{"loc":{"start":{"line":1,"column":7147},"end":{"line":1,"column":7181}},"type":"binary-expr","locations":[{"start":{"line":1,"column":7147},"end":{"line":1,"column":7149}},{"start":{"line":1,"column":7151},"end":{"line":1,"column":7181}}]},"71":{"loc":{"start":{"line":1,"column":7153},"end":{"line":1,"column":7180}},"type":"binary-expr","locations":[{"start":{"line":1,"column":7153},"end":{"line":1,"column":7155}},{"start":{"line":1,"column":7157},"end":{"line":1,"column":7180}}]},"72":{"loc":{"start":{"line":1,"column":7197},"end":{"line":1,"column":7215}},"type":"if","locations":[{"start":{"line":1,"column":7197},"end":{"line":1,"column":7215}},{"start":{"line":1,"column":7197},"end":{"line":1,"column":7215}}]},"73":{"loc":{"start":{"line":1,"column":7240},"end":{"line":1,"column":7491}},"type":"if","locations":[{"start":{"line":1,"column":7240},"end":{"line":1,"column":7491}},{"start":{"line":1,"column":7240},"end":{"line":1,"column":7491}}]},"74":{"loc":{"start":{"line":1,"column":7325},"end":{"line":1,"column":7377}},"type":"if","locations":[{"start":{"line":1,"column":7325},"end":{"line":1,"column":7377}},{"start":{"line":1,"column":7325},"end":{"line":1,"column":7377}}]},"75":{"loc":{"start":{"line":1,"column":7548},"end":{"line":1,"column":8035}},"type":"if","locations":[{"start":{"line":1,"column":7548},"end":{"line":1,"column":8035}},{"start":{"line":1,"column":7548},"end":{"line":1,"column":8035}}]},"76":{"loc":{"start":{"line":1,"column":7787},"end":{"line":1,"column":8034}},"type":"if","locations":[{"start":{"line":1,"column":7787},"end":{"line":1,"column":8034}},{"start":{"line":1,"column":7787},"end":{"line":1,"column":8034}}]},"77":{"loc":{"start":{"line":1,"column":8035},"end":{"line":1,"column":8104}},"type":"if","locations":[{"start":{"line":1,"column":8035},"end":{"line":1,"column":8104}},{"start":{"line":1,"column":8035},"end":{"line":1,"column":8104}}]},"78":{"loc":{"start":{"line":1,"column":8125},"end":{"line":1,"column":8474}},"type":"if","locations":[{"start":{"line":1,"column":8125},"end":{"line":1,"column":8474}},{"start":{"line":1,"column":8125},"end":{"line":1,"column":8474}}]},"79":{"loc":{"start":{"line":1,"column":8131},"end":{"line":1,"column":8473}},"type":"if","locations":[{"start":{"line":1,"column":8131},"end":{"line":1,"column":8473}},{"start":{"line":1,"column":8131},"end":{"line":1,"column":8473}}]},"80":{"loc":{"start":{"line":1,"column":8152},"end":{"line":1,"column":8346}},"type":"if","locations":[{"start":{"line":1,"column":8152},"end":{"line":1,"column":8346}},{"start":{"line":1,"column":8152},"end":{"line":1,"column":8346}}]},"81":{"loc":{"start":{"line":1,"column":8474},"end":{"line":1,"column":8571}},"type":"if","locations":[{"start":{"line":1,"column":8474},"end":{"line":1,"column":8571}},{"start":{"line":1,"column":8474},"end":{"line":1,"column":8571}}]},"82":{"loc":{"start":{"line":1,"column":8571},"end":{"line":1,"column":8746}},"type":"if","locations":[{"start":{"line":1,"column":8571},"end":{"line":1,"column":8746}},{"start":{"line":1,"column":8571},"end":{"line":1,"column":8746}}]},"83":{"loc":{"start":{"line":1,"column":8760},"end":{"line":1,"column":8780}},"type":"if","locations":[{"start":{"line":1,"column":8760},"end":{"line":1,"column":8780}},{"start":{"line":1,"column":8760},"end":{"line":1,"column":8780}}]},"84":{"loc":{"start":{"line":1,"column":8823},"end":{"line":1,"column":8904}},"type":"if","locations":[{"start":{"line":1,"column":8823},"end":{"line":1,"column":8904}},{"start":{"line":1,"column":8823},"end":{"line":1,"column":8904}}]},"85":{"loc":{"start":{"line":1,"column":9467},"end":{"line":1,"column":9622}},"type":"if","locations":[{"start":{"line":1,"column":9467},"end":{"line":1,"column":9622}},{"start":{"line":1,"column":9467},"end":{"line":1,"column":9622}}]},"86":{"loc":{"start":{"line":1,"column":9519},"end":{"line":1,"column":9621}},"type":"if","locations":[{"start":{"line":1,"column":9519},"end":{"line":1,"column":9621}},{"start":{"line":1,"column":9519},"end":{"line":1,"column":9621}}]},"87":{"loc":{"start":{"line":1,"column":9628},"end":{"line":1,"column":9655}},"type":"binary-expr","locations":[{"start":{"line":1,"column":9628},"end":{"line":1,"column":9629}},{"start":{"line":1,"column":9631},"end":{"line":1,"column":9655}}]},"88":{"loc":{"start":{"line":1,"column":9762},"end":{"line":1,"column":10258}},"type":"switch","locations":[{"start":{"line":1,"column":9782},"end":{"line":1,"column":9965}},{"start":{"line":1,"column":9965},"end":{"line":1,"column":9972}},{"start":{"line":1,"column":9972},"end":{"line":1,"column":10257}}]},"89":{"loc":{"start":{"line":1,"column":9789},"end":{"line":1,"column":9820}},"type":"if","locations":[{"start":{"line":1,"column":9789},"end":{"line":1,"column":9820}},{"start":{"line":1,"column":9789},"end":{"line":1,"column":9820}}]},"90":{"loc":{"start":{"line":1,"column":9820},"end":{"line":1,"column":9959}},"type":"if","locations":[{"start":{"line":1,"column":9820},"end":{"line":1,"column":9959}},{"start":{"line":1,"column":9820},"end":{"line":1,"column":9959}}]},"91":{"loc":{"start":{"line":1,"column":9850},"end":{"line":1,"column":9898}},"type":"if","locations":[{"start":{"line":1,"column":9850},"end":{"line":1,"column":9898}},{"start":{"line":1,"column":9850},"end":{"line":1,"column":9898}}]},"92":{"loc":{"start":{"line":1,"column":9979},"end":{"line":1,"column":10252}},"type":"if","locations":[{"start":{"line":1,"column":9979},"end":{"line":1,"column":10252}},{"start":{"line":1,"column":9979},"end":{"line":1,"column":10252}}]},"93":{"loc":{"start":{"line":1,"column":10025},"end":{"line":1,"column":10251}},"type":"if","locations":[{"start":{"line":1,"column":10025},"end":{"line":1,"column":10251}},{"start":{"line":1,"column":10025},"end":{"line":1,"column":10251}}]},"94":{"loc":{"start":{"line":1,"column":10123},"end":{"line":1,"column":10205}},"type":"if","locations":[{"start":{"line":1,"column":10123},"end":{"line":1,"column":10205}},{"start":{"line":1,"column":10123},"end":{"line":1,"column":10205}}]},"95":{"loc":{"start":{"line":1,"column":10212},"end":{"line":1,"column":10250}},"type":"if","locations":[{"start":{"line":1,"column":10212},"end":{"line":1,"column":10250}},{"start":{"line":1,"column":10212},"end":{"line":1,"column":10250}}]},"96":{"loc":{"start":{"line":1,"column":10315},"end":{"line":1,"column":10330}},"type":"if","locations":[{"start":{"line":1,"column":10315},"end":{"line":1,"column":10330}},{"start":{"line":1,"column":10315},"end":{"line":1,"column":10330}}]},"97":{"loc":{"start":{"line":1,"column":10357},"end":{"line":1,"column":10382}},"type":"cond-expr","locations":[{"start":{"line":1,"column":10360},"end":{"line":1,"column":10379}},{"start":{"line":1,"column":10380},"end":{"line":1,"column":10382}}]},"98":{"loc":{"start":{"line":1,"column":10404},"end":{"line":1,"column":10530}},"type":"if","locations":[{"start":{"line":1,"column":10404},"end":{"line":1,"column":10530}},{"start":{"line":1,"column":10404},"end":{"line":1,"column":10530}}]},"99":{"loc":{"start":{"line":1,"column":10579},"end":{"line":1,"column":10614}},"type":"binary-expr","locations":[{"start":{"line":1,"column":10580},"end":{"line":1,"column":10596}},{"start":{"line":1,"column":10599},"end":{"line":1,"column":10614}}]},"100":{"loc":{"start":{"line":1,"column":10671},"end":{"line":1,"column":10717}},"type":"if","locations":[{"start":{"line":1,"column":10671},"end":{"line":1,"column":10717}},{"start":{"line":1,"column":10671},"end":{"line":1,"column":10717}}]},"101":{"loc":{"start":{"line":1,"column":10777},"end":{"line":1,"column":10802}},"type":"binary-expr","locations":[{"start":{"line":1,"column":10777},"end":{"line":1,"column":10799}},{"start":{"line":1,"column":10801},"end":{"line":1,"column":10802}}]},"102":{"loc":{"start":{"line":1,"column":10871},"end":{"line":1,"column":10932}},"type":"if","locations":[{"start":{"line":1,"column":10871},"end":{"line":1,"column":10932}},{"start":{"line":1,"column":10871},"end":{"line":1,"column":10932}}]},"103":{"loc":{"start":{"line":1,"column":11209},"end":{"line":1,"column":11272}},"type":"if","locations":[{"start":{"line":1,"column":11209},"end":{"line":1,"column":11272}},{"start":{"line":1,"column":11209},"end":{"line":1,"column":11272}}]},"104":{"loc":{"start":{"line":1,"column":11342},"end":{"line":1,"column":11361}},"type":"binary-expr","locations":[{"start":{"line":1,"column":11342},"end":{"line":1,"column":11348}},{"start":{"line":1,"column":11350},"end":{"line":1,"column":11361}}]},"105":{"loc":{"start":{"line":1,"column":11453},"end":{"line":1,"column":11465}},"type":"binary-expr","locations":[{"start":{"line":1,"column":11453},"end":{"line":1,"column":11461}},{"start":{"line":1,"column":11463},"end":{"line":1,"column":11465}}]},"106":{"loc":{"start":{"line":1,"column":11485},"end":{"line":1,"column":11495}},"type":"binary-expr","locations":[{"start":{"line":1,"column":11485},"end":{"line":1,"column":11491}},{"start":{"line":1,"column":11493},"end":{"line":1,"column":11495}}]},"107":{"loc":{"start":{"line":1,"column":11539},"end":{"line":1,"column":11857}},"type":"if","locations":[{"start":{"line":1,"column":11539},"end":{"line":1,"column":11857}},{"start":{"line":1,"column":11539},"end":{"line":1,"column":11857}}]},"108":{"loc":{"start":{"line":1,"column":11542},"end":{"line":1,"column":11580}},"type":"binary-expr","locations":[{"start":{"line":1,"column":11542},"end":{"line":1,"column":11557}},{"start":{"line":1,"column":11560},"end":{"line":1,"column":11579}}]},"109":{"loc":{"start":{"line":1,"column":11582},"end":{"line":1,"column":11610}},"type":"if","locations":[{"start":{"line":1,"column":11582},"end":{"line":1,"column":11610}},{"start":{"line":1,"column":11582},"end":{"line":1,"column":11610}}]},"110":{"loc":{"start":{"line":1,"column":11764},"end":{"line":1,"column":11856}},"type":"if","locations":[{"start":{"line":1,"column":11764},"end":{"line":1,"column":11856}},{"start":{"line":1,"column":11764},"end":{"line":1,"column":11856}}]},"111":{"loc":{"start":{"line":1,"column":11861},"end":{"line":1,"column":11876}},"type":"if","locations":[{"start":{"line":1,"column":11861},"end":{"line":1,"column":11876}},{"start":{"line":1,"column":11861},"end":{"line":1,"column":11876}}]},"112":{"loc":{"start":{"line":1,"column":11876},"end":{"line":1,"column":11891}},"type":"if","locations":[{"start":{"line":1,"column":11876},"end":{"line":1,"column":11891}},{"start":{"line":1,"column":11876},"end":{"line":1,"column":11891}}]},"113":{"loc":{"start":{"line":1,"column":11957},"end":{"line":1,"column":12068}},"type":"if","locations":[{"start":{"line":1,"column":11957},"end":{"line":1,"column":12068}},{"start":{"line":1,"column":11957},"end":{"line":1,"column":12068}}]},"114":{"loc":{"start":{"line":1,"column":11994},"end":{"line":1,"column":12067}},"type":"if","locations":[{"start":{"line":1,"column":11994},"end":{"line":1,"column":12067}},{"start":{"line":1,"column":11994},"end":{"line":1,"column":12067}}]},"115":{"loc":{"start":{"line":1,"column":12086},"end":{"line":1,"column":12166}},"type":"if","locations":[{"start":{"line":1,"column":12086},"end":{"line":1,"column":12166}},{"start":{"line":1,"column":12086},"end":{"line":1,"column":12166}}]},"116":{"loc":{"start":{"line":1,"column":12091},"end":{"line":1,"column":12113}},"type":"binary-expr","locations":[{"start":{"line":1,"column":12091},"end":{"line":1,"column":12092}},{"start":{"line":1,"column":12094},"end":{"line":1,"column":12113}}]},"117":{"loc":{"start":{"line":1,"column":12118},"end":{"line":1,"column":12165}},"type":"cond-expr","locations":[{"start":{"line":1,"column":12134},"end":{"line":1,"column":12150}},{"start":{"line":1,"column":12151},"end":{"line":1,"column":12165}}]},"118":{"loc":{"start":{"line":1,"column":14208},"end":{"line":1,"column":14266}},"type":"if","locations":[{"start":{"line":1,"column":14208},"end":{"line":1,"column":14266}},{"start":{"line":1,"column":14208},"end":{"line":1,"column":14266}}]},"119":{"loc":{"start":{"line":1,"column":14244},"end":{"line":1,"column":14264}},"type":"cond-expr","locations":[{"start":{"line":1,"column":14255},"end":{"line":1,"column":14262}},{"start":{"line":1,"column":14263},"end":{"line":1,"column":14264}}]},"120":{"loc":{"start":{"line":1,"column":14244},"end":{"line":1,"column":14254}},"type":"binary-expr","locations":[{"start":{"line":1,"column":14244},"end":{"line":1,"column":14245}},{"start":{"line":1,"column":14247},"end":{"line":1,"column":14254}}]},"121":{"loc":{"start":{"line":1,"column":14336},"end":{"line":1,"column":14349}},"type":"if","locations":[{"start":{"line":1,"column":14336},"end":{"line":1,"column":14349}},{"start":{"line":1,"column":14336},"end":{"line":1,"column":14349}}]},"122":{"loc":{"start":{"line":1,"column":14648},"end":{"line":1,"column":14698}},"type":"if","locations":[{"start":{"line":1,"column":14648},"end":{"line":1,"column":14698}},{"start":{"line":1,"column":14648},"end":{"line":1,"column":14698}}]},"123":{"loc":{"start":{"line":1,"column":14798},"end":{"line":1,"column":14852}},"type":"cond-expr","locations":[{"start":{"line":1,"column":14832},"end":{"line":1,"column":14843}},{"start":{"line":1,"column":14844},"end":{"line":1,"column":14852}}]},"124":{"loc":{"start":{"line":1,"column":14859},"end":{"line":1,"column":14881}},"type":"binary-expr","locations":[{"start":{"line":1,"column":14859},"end":{"line":1,"column":14869}},{"start":{"line":1,"column":14871},"end":{"line":1,"column":14881}}]},"125":{"loc":{"start":{"line":1,"column":14919},"end":{"line":1,"column":15433}},"type":"if","locations":[{"start":{"line":1,"column":14919},"end":{"line":1,"column":15433}},{"start":{"line":1,"column":14919},"end":{"line":1,"column":15433}}]},"126":{"loc":{"start":{"line":1,"column":14979},"end":{"line":1,"column":15046}},"type":"if","locations":[{"start":{"line":1,"column":14979},"end":{"line":1,"column":15046}},{"start":{"line":1,"column":14979},"end":{"line":1,"column":15046}}]},"127":{"loc":{"start":{"line":1,"column":14982},"end":{"line":1,"column":15018}},"type":"binary-expr","locations":[{"start":{"line":1,"column":14982},"end":{"line":1,"column":14985}},{"start":{"line":1,"column":14988},"end":{"line":1,"column":14996}},{"start":{"line":1,"column":14999},"end":{"line":1,"column":15018}}]},"128":{"loc":{"start":{"line":1,"column":15046},"end":{"line":1,"column":15062}},"type":"if","locations":[{"start":{"line":1,"column":15046},"end":{"line":1,"column":15062}},{"start":{"line":1,"column":15046},"end":{"line":1,"column":15062}}]},"129":{"loc":{"start":{"line":1,"column":15121},"end":{"line":1,"column":15255}},"type":"if","locations":[{"start":{"line":1,"column":15121},"end":{"line":1,"column":15255}},{"start":{"line":1,"column":15121},"end":{"line":1,"column":15255}}]},"130":{"loc":{"start":{"line":1,"column":15124},"end":{"line":1,"column":15239}},"type":"binary-expr","locations":[{"start":{"line":1,"column":15125},"end":{"line":1,"column":15143}},{"start":{"line":1,"column":15145},"end":{"line":1,"column":15164}},{"start":{"line":1,"column":15166},"end":{"line":1,"column":15184}},{"start":{"line":1,"column":15187},"end":{"line":1,"column":15199}},{"start":{"line":1,"column":15201},"end":{"line":1,"column":15239}}]},"131":{"loc":{"start":{"line":1,"column":15256},"end":{"line":1,"column":15432}},"type":"if","locations":[{"start":{"line":1,"column":15256},"end":{"line":1,"column":15432}},{"start":{"line":1,"column":15256},"end":{"line":1,"column":15432}}]},"132":{"loc":{"start":{"line":1,"column":15320},"end":{"line":1,"column":15360}},"type":"cond-expr","locations":[{"start":{"line":1,"column":15323},"end":{"line":1,"column":15354}},{"start":{"line":1,"column":15355},"end":{"line":1,"column":15360}}]},"133":{"loc":{"start":{"line":1,"column":15323},"end":{"line":1,"column":15354}},"type":"cond-expr","locations":[{"start":{"line":1,"column":15343},"end":{"line":1,"column":15349}},{"start":{"line":1,"column":15350},"end":{"line":1,"column":15354}}]},"134":{"loc":{"start":{"line":1,"column":15323},"end":{"line":1,"column":15342}},"type":"binary-expr","locations":[{"start":{"line":1,"column":15323},"end":{"line":1,"column":15328}},{"start":{"line":1,"column":15330},"end":{"line":1,"column":15342}}]},"135":{"loc":{"start":{"line":1,"column":15361},"end":{"line":1,"column":15377}},"type":"if","locations":[{"start":{"line":1,"column":15361},"end":{"line":1,"column":15377}},{"start":{"line":1,"column":15361},"end":{"line":1,"column":15377}}]},"136":{"loc":{"start":{"line":1,"column":15434},"end":{"line":1,"column":15485}},"type":"if","locations":[{"start":{"line":1,"column":15434},"end":{"line":1,"column":15485}},{"start":{"line":1,"column":15434},"end":{"line":1,"column":15485}}]},"137":{"loc":{"start":{"line":1,"column":15472},"end":{"line":1,"column":15484}},"type":"if","locations":[{"start":{"line":1,"column":15472},"end":{"line":1,"column":15484}},{"start":{"line":1,"column":15472},"end":{"line":1,"column":15484}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0,"107":0,"108":0,"109":0,"110":0,"111":0,"112":0,"113":0,"114":0,"115":0,"116":0,"117":0,"118":0,"119":0,"120":0,"121":0,"122":0,"123":0,"124":0,"125":0,"126":0,"127":0,"128":0,"129":0,"130":0,"131":0,"132":0,"133":0,"134":0,"135":0,"136":0,"137":0,"138":0,"139":0,"140":0,"141":0,"142":0,"143":0,"144":0,"145":0,"146":0,"147":0,"148":0,"149":0,"150":0,"151":0,"152":0,"153":0,"154":0,"155":0,"156":0,"157":0,"158":0,"159":0,"160":0,"161":0,"162":0,"163":0,"164":0,"165":0,"166":0,"167":0,"168":0,"169":0,"170":0,"171":0,"172":0,"173":0,"174":0,"175":0,"176":0,"177":0,"178":0,"179":0,"180":0,"181":0,"182":0,"183":0,"184":0,"185":0,"186":0,"187":0,"188":0,"189":0,"190":0,"191":0,"192":0,"193":0,"194":0,"195":0,"196":0,"197":0,"198":0,"199":0,"200":0,"201":0,"202":0,"203":0,"204":0,"205":0,"206":0,"207":0,"208":0,"209":0,"210":0,"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":0,"221":0,"222":0,"223":0,"224":0,"225":0,"226":0,"227":0,"228":0,"229":0,"230":0,"231":0,"232":0,"233":0,"234":0,"235":0,"236":0,"237":0,"238":0,"239":0,"240":0,"241":0,"242":0,"243":0,"244":0,"245":0,"246":0,"247":0,"248":0,"249":0,"250":0,"251":0,"252":0,"253":0,"254":0,"255":0,"256":0,"257":0,"258":0,"259":0,"260":0,"261":0,"262":0,"263":0,"264":0,"265":0,"266":0,"267":0,"268":0,"269":0,"270":0,"271":0,"272":0,"273":0,"274":0,"275":0,"276":0,"277":0,"278":0,"279":0,"280":0,"281":0,"282":0,"283":0,"284":0,"285":0,"286":0,"287":0,"288":0,"289":0,"290":0,"291":0,"292":0,"293":0,"294":0,"295":0,"296":0,"297":0,"298":0,"299":0,"300":0,"301":0,"302":0,"303":0,"304":0,"305":0,"306":0,"307":0,"308":0,"309":0,"310":0,"311":0,"312":0,"313":0,"314":0,"315":0,"316":0,"317":0,"318":0,"319":0,"320":0,"321":0,"322":0,"323":0,"324":0,"325":0,"326":0,"327":0,"328":0,"329":0,"330":0,"331":0,"332":0,"333":0,"334":0,"335":0,"336":0,"337":0,"338":0,"339":0,"340":0,"341":0,"342":0,"343":0,"344":0,"345":0,"346":0,"347":0,"348":0,"349":0,"350":0,"351":0,"352":0,"353":0,"354":0,"355":0,"356":0,"357":0,"358":0,"359":0,"360":0,"361":0,"362":0,"363":0,"364":0,"365":0,"366":0,"367":0,"368":0,"369":0,"370":0,"371":0,"372":0,"373":0,"374":0,"375":0,"376":0,"377":0,"378":0,"379":0,"380":0,"381":0,"382":0,"383":0,"384":0,"385":0,"386":0,"387":0,"388":0,"389":0,"390":0,"391":0,"392":0,"393":0,"394":0,"395":0,"396":0,"397":0,"398":0,"399":0,"400":0,"401":0,"402":0,"403":0,"404":0,"405":0,"406":0,"407":0,"408":0,"409":0,"410":0,"411":0,"412":0,"413":0,"414":0,"415":0,"416":0,"417":0,"418":0,"419":0,"420":0,"421":0,"422":0,"423":0,"424":0,"425":0,"426":0,"427":0,"428":0,"429":0,"430":0,"431":0,"432":0,"433":0,"434":0,"435":0,"436":0,"437":0,"438":0,"439":0,"440":0,"441":0,"442":0,"443":0,"444":0,"445":0,"446":0,"447":0,"448":0,"449":0,"450":0,"451":0,"452":0,"453":0,"454":0,"455":0,"456":0,"457":0,"458":0,"459":0,"460":0,"461":0,"462":0,"463":0,"464":0,"465":0,"466":0,"467":0,"468":0,"469":0,"470":0,"471":0,"472":0,"473":0,"474":0,"475":0,"476":0,"477":0,"478":0,"479":0,"480":0,"481":0,"482":0,"483":0,"484":0,"485":0,"486":0,"487":0,"488":0,"489":0,"490":0,"491":0,"492":0,"493":0,"494":0,"495":0,"496":0,"497":0,"498":0,"499":0,"500":0,"501":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0,0,0],"12":[0,0],"13":[0,0],"14":[0,0],"15":[0,0],"16":[0,0],"17":[0,0],"18":[0,0],"19":[0,0],"20":[0,0],"21":[0,0],"22":[0,0],"23":[0,0],"24":[0,0],"25":[0,0],"26":[0,0],"27":[0,0],"28":[0,0],"29":[0,0],"30":[0,0],"31":[0,0],"32":[0,0],"33":[0,0],"34":[0,0],"35":[0,0],"36":[0,0],"37":[0,0],"38":[0,0],"39":[0,0],"40":[0,0],"41":[0,0],"42":[0,0],"43":[0,0],"44":[0,0],"45":[0,0],"46":[0,0],"47":[0,0],"48":[0,0],"49":[0,0,0],"50":[0,0],"51":[0,0],"52":[0,0],"53":[0,0],"54":[0,0],"55":[0,0],"56":[0,0],"57":[0,0],"58":[0,0],"59":[0,0],"60":[0,0],"61":[0,0],"62":[0,0],"63":[0,0],"64":[0,0],"65":[0,0],"66":[0,0],"67":[0,0],"68":[0,0],"69":[0,0],"70":[0,0],"71":[0,0],"72":[0,0],"73":[0,0],"74":[0,0],"75":[0,0],"76":[0,0],"77":[0,0],"78":[0,0],"79":[0,0],"80":[0,0],"81":[0,0],"82":[0,0],"83":[0,0],"84":[0,0],"85":[0,0],"86":[0,0],"87":[0,0],"88":[0,0,0],"89":[0,0],"90":[0,0],"91":[0,0],"92":[0,0],"93":[0,0],"94":[0,0],"95":[0,0],"96":[0,0],"97":[0,0],"98":[0,0],"99":[0,0],"100":[0,0],"101":[0,0],"102":[0,0],"103":[0,0],"104":[0,0],"105":[0,0],"106":[0,0],"107":[0,0],"108":[0,0],"109":[0,0],"110":[0,0],"111":[0,0],"112":[0,0],"113":[0,0],"114":[0,0],"115":[0,0],"116":[0,0],"117":[0,0],"118":[0,0],"119":[0,0],"120":[0,0],"121":[0,0],"122":[0,0],"123":[0,0],"124":[0,0],"125":[0,0],"126":[0,0],"127":[0,0,0],"128":[0,0],"129":[0,0],"130":[0,0,0,0,0],"131":[0,0],"132":[0,0],"133":[0,0],"134":[0,0],"135":[0,0],"136":[0,0],"137":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/helpers.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/helpers.js","statementMap":{"0":{"start":{"line":7,"column":4},"end":{"line":22,"column":7}},"1":{"start":{"line":8,"column":18},"end":{"line":8,"column":39}},"2":{"start":{"line":10,"column":18},"end":{"line":10,"column":20}},"3":{"start":{"line":11,"column":8},"end":{"line":21,"column":9}},"4":{"start":{"line":12,"column":12},"end":{"line":14,"column":13}},"5":{"start":{"line":13,"column":16},"end":{"line":13,"column":36}},"6":{"start":{"line":15,"column":12},"end":{"line":15,"column":34}},"7":{"start":{"line":16,"column":12},"end":{"line":16,"column":29}},"8":{"start":{"line":17,"column":12},"end":{"line":18,"column":79}},"9":{"start":{"line":20,"column":12},"end":{"line":20,"column":22}},"10":{"start":{"line":24,"column":4},"end":{"line":28,"column":7}},"11":{"start":{"line":25,"column":8},"end":{"line":27,"column":61}},"12":{"start":{"line":30,"column":4},"end":{"line":52,"column":7}},"13":{"start":{"line":31,"column":25},"end":{"line":31,"column":51}},"14":{"start":{"line":32,"column":24},"end":{"line":32,"column":49}},"15":{"start":{"line":33,"column":23},"end":{"line":33,"column":47}},"16":{"start":{"line":36,"column":8},"end":{"line":38,"column":9}},"17":{"start":{"line":37,"column":12},"end":{"line":37,"column":59}},"18":{"start":{"line":40,"column":8},"end":{"line":40,"column":20}},"19":{"start":{"line":41,"column":8},"end":{"line":43,"column":9}},"20":{"start":{"line":42,"column":12},"end":{"line":42,"column":87}},"21":{"start":{"line":44,"column":8},"end":{"line":46,"column":9}},"22":{"start":{"line":45,"column":12},"end":{"line":45,"column":83}},"23":{"start":{"line":47,"column":8},"end":{"line":49,"column":9}},"24":{"start":{"line":48,"column":12},"end":{"line":48,"column":78}},"25":{"start":{"line":51,"column":8},"end":{"line":51,"column":33}},"26":{"start":{"line":54,"column":4},"end":{"line":62,"column":7}},"27":{"start":{"line":55,"column":23},"end":{"line":55,"column":44}},"28":{"start":{"line":57,"column":20},"end":{"line":57,"column":22}},"29":{"start":{"line":58,"column":8},"end":{"line":60,"column":9}},"30":{"start":{"line":59,"column":12},"end":{"line":59,"column":29}},"31":{"start":{"line":61,"column":8},"end":{"line":61,"column":32}},"32":{"start":{"line":64,"column":4},"end":{"line":70,"column":7}},"33":{"start":{"line":65,"column":20},"end":{"line":65,"column":22}},"34":{"start":{"line":66,"column":8},"end":{"line":68,"column":11}},"35":{"start":{"line":67,"column":12},"end":{"line":67,"column":102}},"36":{"start":{"line":69,"column":8},"end":{"line":69,"column":32}},"37":{"start":{"line":72,"column":4},"end":{"line":74,"column":7}},"38":{"start":{"line":73,"column":8},"end":{"line":73,"column":34}},"39":{"start":{"line":77,"column":0},"end":{"line":79,"column":2}}},"fnMap":{"0":{"name":"registerHelpers","decl":{"start":{"line":5,"column":9},"end":{"line":5,"column":24}},"loc":{"start":{"line":5,"column":37},"end":{"line":75,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":7,"column":46},"end":{"line":7,"column":47}},"loc":{"start":{"line":7,"column":62},"end":{"line":22,"column":5}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":24,"column":48},"end":{"line":24,"column":49}},"loc":{"start":{"line":24,"column":73},"end":{"line":28,"column":5}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":30,"column":46},"end":{"line":30,"column":47}},"loc":{"start":{"line":30,"column":65},"end":{"line":52,"column":5}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":54,"column":44},"end":{"line":54,"column":45}},"loc":{"start":{"line":54,"column":60},"end":{"line":62,"column":5}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":64,"column":60},"end":{"line":64,"column":61}},"loc":{"start":{"line":64,"column":79},"end":{"line":70,"column":5}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":66,"column":24},"end":{"line":66,"column":25}},"loc":{"start":{"line":66,"column":40},"end":{"line":68,"column":9}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":72,"column":43},"end":{"line":72,"column":44}},"loc":{"start":{"line":72,"column":74},"end":{"line":74,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":8},"end":{"line":21,"column":9}},"type":"if","locations":[{"start":{"line":11,"column":8},"end":{"line":21,"column":9}},{"start":{"line":11,"column":8},"end":{"line":21,"column":9}}]},"1":{"loc":{"start":{"line":12,"column":12},"end":{"line":14,"column":13}},"type":"if","locations":[{"start":{"line":12,"column":12},"end":{"line":14,"column":13}},{"start":{"line":12,"column":12},"end":{"line":14,"column":13}}]},"2":{"loc":{"start":{"line":25,"column":15},"end":{"line":27,"column":60}},"type":"cond-expr","locations":[{"start":{"line":27,"column":42},"end":{"line":27,"column":44}},{"start":{"line":27,"column":47},"end":{"line":27,"column":60}}]},"3":{"loc":{"start":{"line":36,"column":8},"end":{"line":38,"column":9}},"type":"if","locations":[{"start":{"line":36,"column":8},"end":{"line":38,"column":9}},{"start":{"line":36,"column":8},"end":{"line":38,"column":9}}]},"4":{"loc":{"start":{"line":36,"column":12},"end":{"line":36,"column":65}},"type":"binary-expr","locations":[{"start":{"line":36,"column":12},"end":{"line":36,"column":28}},{"start":{"line":36,"column":32},"end":{"line":36,"column":47}},{"start":{"line":36,"column":51},"end":{"line":36,"column":65}}]},"5":{"loc":{"start":{"line":41,"column":8},"end":{"line":43,"column":9}},"type":"if","locations":[{"start":{"line":41,"column":8},"end":{"line":43,"column":9}},{"start":{"line":41,"column":8},"end":{"line":43,"column":9}}]},"6":{"loc":{"start":{"line":42,"column":24},"end":{"line":42,"column":85}},"type":"cond-expr","locations":[{"start":{"line":42,"column":43},"end":{"line":42,"column":56}},{"start":{"line":42,"column":59},"end":{"line":42,"column":85}}]},"7":{"loc":{"start":{"line":44,"column":8},"end":{"line":46,"column":9}},"type":"if","locations":[{"start":{"line":44,"column":8},"end":{"line":46,"column":9}},{"start":{"line":44,"column":8},"end":{"line":46,"column":9}}]},"8":{"loc":{"start":{"line":45,"column":24},"end":{"line":45,"column":81}},"type":"cond-expr","locations":[{"start":{"line":45,"column":42},"end":{"line":45,"column":54}},{"start":{"line":45,"column":57},"end":{"line":45,"column":81}}]},"9":{"loc":{"start":{"line":47,"column":8},"end":{"line":49,"column":9}},"type":"if","locations":[{"start":{"line":47,"column":8},"end":{"line":49,"column":9}},{"start":{"line":47,"column":8},"end":{"line":49,"column":9}}]},"10":{"loc":{"start":{"line":48,"column":24},"end":{"line":48,"column":76}},"type":"cond-expr","locations":[{"start":{"line":48,"column":41},"end":{"line":48,"column":51}},{"start":{"line":48,"column":54},"end":{"line":48,"column":76}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/index.js","statementMap":{"0":{"start":{"line":6,"column":9},"end":{"line":6,"column":22}},"1":{"start":{"line":7,"column":11},"end":{"line":7,"column":26}},"2":{"start":{"line":8,"column":17},"end":{"line":8,"column":47}},"3":{"start":{"line":9,"column":16},"end":{"line":9,"column":38}},"4":{"start":{"line":10,"column":14},"end":{"line":10,"column":34}},"5":{"start":{"line":11,"column":18},"end":{"line":13,"column":5}},"6":{"start":{"line":12,"column":8},"end":{"line":12,"column":112}},"7":{"start":{"line":14,"column":21},"end":{"line":14,"column":40}},"8":{"start":{"line":15,"column":21},"end":{"line":15,"column":40}},"9":{"start":{"line":16,"column":21},"end":{"line":22,"column":15}},"10":{"start":{"line":23,"column":25},"end":{"line":41,"column":16}},"11":{"start":{"line":42,"column":26},"end":{"line":55,"column":19}},"12":{"start":{"line":56,"column":25},"end":{"line":60,"column":16}},"13":{"start":{"line":62,"column":0},"end":{"line":62,"column":36}},"14":{"start":{"line":64,"column":25},"end":{"line":92,"column":1}},"15":{"start":{"line":67,"column":8},"end":{"line":69,"column":9}},"16":{"start":{"line":68,"column":12},"end":{"line":68,"column":24}},"17":{"start":{"line":70,"column":23},"end":{"line":70,"column":46}},"18":{"start":{"line":71,"column":8},"end":{"line":79,"column":9}},"19":{"start":{"line":72,"column":12},"end":{"line":76,"column":13}},"20":{"start":{"line":73,"column":16},"end":{"line":73,"column":42}},"21":{"start":{"line":75,"column":16},"end":{"line":75,"column":40}},"22":{"start":{"line":78,"column":12},"end":{"line":78,"column":32}},"23":{"start":{"line":80,"column":8},"end":{"line":80,"column":24}},"24":{"start":{"line":84,"column":25},"end":{"line":84,"column":45}},"25":{"start":{"line":85,"column":25},"end":{"line":85,"column":59}},"26":{"start":{"line":86,"column":8},"end":{"line":86,"column":53}},"27":{"start":{"line":90,"column":8},"end":{"line":90,"column":59}},"28":{"start":{"line":95,"column":17},"end":{"line":95,"column":33}},"29":{"start":{"line":96,"column":19},"end":{"line":96,"column":21}},"30":{"start":{"line":99,"column":4},"end":{"line":102,"column":5}},"31":{"start":{"line":100,"column":8},"end":{"line":100,"column":30}},"32":{"start":{"line":101,"column":8},"end":{"line":101,"column":36}},"33":{"start":{"line":104,"column":4},"end":{"line":108,"column":7}},"34":{"start":{"line":105,"column":21},"end":{"line":105,"column":60}},"35":{"start":{"line":106,"column":19},"end":{"line":106,"column":61}},"36":{"start":{"line":107,"column":8},"end":{"line":107,"column":59}},"37":{"start":{"line":110,"column":4},"end":{"line":110,"column":23}},"38":{"start":{"line":111,"column":4},"end":{"line":112,"column":45}},"39":{"start":{"line":116,"column":18},"end":{"line":116,"column":43}},"40":{"start":{"line":117,"column":4},"end":{"line":117,"column":65}},"41":{"start":{"line":118,"column":4},"end":{"line":118,"column":35}},"42":{"start":{"line":119,"column":4},"end":{"line":119,"column":93}},"43":{"start":{"line":120,"column":4},"end":{"line":120,"column":64}},"44":{"start":{"line":121,"column":4},"end":{"line":123,"column":6}},"45":{"start":{"line":124,"column":4},"end":{"line":127,"column":6}},"46":{"start":{"line":128,"column":4},"end":{"line":131,"column":6}},"47":{"start":{"line":135,"column":4},"end":{"line":135,"column":32}},"48":{"start":{"line":136,"column":4},"end":{"line":136,"column":60}},"49":{"start":{"line":137,"column":4},"end":{"line":137,"column":36}},"50":{"start":{"line":138,"column":4},"end":{"line":138,"column":23}},"51":{"start":{"line":141,"column":0},"end":{"line":143,"column":2}},"52":{"start":{"line":142,"column":4},"end":{"line":142,"column":35}},"53":{"start":{"line":145,"column":0},"end":{"line":150,"column":2}},"54":{"start":{"line":146,"column":4},"end":{"line":148,"column":5}},"55":{"start":{"line":147,"column":8},"end":{"line":147,"column":30}},"56":{"start":{"line":149,"column":4},"end":{"line":149,"column":52}},"57":{"start":{"line":152,"column":0},"end":{"line":175,"column":2}},"58":{"start":{"line":153,"column":15},"end":{"line":153,"column":19}},"59":{"start":{"line":154,"column":21},"end":{"line":170,"column":9}},"60":{"start":{"line":155,"column":25},"end":{"line":155,"column":66}},"61":{"start":{"line":156,"column":12},"end":{"line":169,"column":15}},"62":{"start":{"line":157,"column":37},"end":{"line":157,"column":60}},"63":{"start":{"line":158,"column":42},"end":{"line":158,"column":45}},"64":{"start":{"line":159,"column":27},"end":{"line":159,"column":54}},"65":{"start":{"line":162,"column":16},"end":{"line":168,"column":17}},"66":{"start":{"line":163,"column":20},"end":{"line":163,"column":57}},"67":{"start":{"line":164,"column":20},"end":{"line":166,"column":21}},"68":{"start":{"line":165,"column":24},"end":{"line":165,"column":60}},"69":{"start":{"line":167,"column":20},"end":{"line":167,"column":58}},"70":{"start":{"line":172,"column":4},"end":{"line":174,"column":7}},"71":{"start":{"line":173,"column":8},"end":{"line":173,"column":52}},"72":{"start":{"line":177,"column":0},"end":{"line":206,"column":2}},"73":{"start":{"line":178,"column":21},"end":{"line":178,"column":36}},"74":{"start":{"line":179,"column":23},"end":{"line":179,"column":45}},"75":{"start":{"line":180,"column":19},"end":{"line":180,"column":37}},"76":{"start":{"line":183,"column":4},"end":{"line":183,"column":58}},"77":{"start":{"line":184,"column":4},"end":{"line":184,"column":69}},"78":{"start":{"line":185,"column":4},"end":{"line":185,"column":43}},"79":{"start":{"line":186,"column":4},"end":{"line":186,"column":33}},"80":{"start":{"line":187,"column":4},"end":{"line":202,"column":7}},"81":{"start":{"line":188,"column":22},"end":{"line":188,"column":48}},"82":{"start":{"line":189,"column":28},"end":{"line":194,"column":13}},"83":{"start":{"line":195,"column":19},"end":{"line":200,"column":13}},"84":{"start":{"line":201,"column":8},"end":{"line":201,"column":51}},"85":{"start":{"line":203,"column":4},"end":{"line":203,"column":33}},"86":{"start":{"line":204,"column":4},"end":{"line":204,"column":43}},"87":{"start":{"line":205,"column":4},"end":{"line":205,"column":15}},"88":{"start":{"line":208,"column":0},"end":{"line":221,"column":2}},"89":{"start":{"line":209,"column":21},"end":{"line":209,"column":36}},"90":{"start":{"line":210,"column":23},"end":{"line":210,"column":45}},"91":{"start":{"line":213,"column":4},"end":{"line":213,"column":58}},"92":{"start":{"line":214,"column":4},"end":{"line":214,"column":69}},"93":{"start":{"line":215,"column":4},"end":{"line":215,"column":43}},"94":{"start":{"line":216,"column":4},"end":{"line":216,"column":48}},"95":{"start":{"line":217,"column":4},"end":{"line":217,"column":92}},"96":{"start":{"line":218,"column":4},"end":{"line":218,"column":33}},"97":{"start":{"line":219,"column":4},"end":{"line":219,"column":43}},"98":{"start":{"line":220,"column":4},"end":{"line":220,"column":15}},"99":{"start":{"line":223,"column":0},"end":{"line":223,"column":28}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":11,"column":18},"end":{"line":11,"column":19}},"loc":{"start":{"line":11,"column":34},"end":{"line":13,"column":5}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":66,"column":13},"end":{"line":66,"column":14}},"loc":{"start":{"line":66,"column":29},"end":{"line":81,"column":5}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":83,"column":18},"end":{"line":83,"column":19}},"loc":{"start":{"line":83,"column":44},"end":{"line":87,"column":5}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":89,"column":15},"end":{"line":89,"column":16}},"loc":{"start":{"line":89,"column":37},"end":{"line":91,"column":5}}},"4":{"name":"getBreadcrumbHtml","decl":{"start":{"line":94,"column":9},"end":{"line":94,"column":26}},"loc":{"start":{"line":94,"column":45},"end":{"line":113,"column":1}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":104,"column":28},"end":{"line":104,"column":29}},"loc":{"start":{"line":104,"column":48},"end":{"line":108,"column":5}}},"6":{"name":"fillTemplate","decl":{"start":{"line":115,"column":9},"end":{"line":115,"column":21}},"loc":{"start":{"line":115,"column":63},"end":{"line":132,"column":1}}},"7":{"name":"HtmlReport","decl":{"start":{"line":134,"column":9},"end":{"line":134,"column":19}},"loc":{"start":{"line":134,"column":26},"end":{"line":139,"column":1}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":141,"column":39},"end":{"line":141,"column":40}},"loc":{"start":{"line":141,"column":51},"end":{"line":143,"column":1}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":145,"column":33},"end":{"line":145,"column":34}},"loc":{"start":{"line":145,"column":52},"end":{"line":150,"column":1}}},"10":{"name":"(anonymous_10)","decl":{"start":{"line":152,"column":31},"end":{"line":152,"column":32}},"loc":{"start":{"line":152,"column":56},"end":{"line":175,"column":1}}},"11":{"name":"(anonymous_11)","decl":{"start":{"line":154,"column":21},"end":{"line":154,"column":22}},"loc":{"start":{"line":154,"column":47},"end":{"line":170,"column":9}}},"12":{"name":"(anonymous_12)","decl":{"start":{"line":156,"column":43},"end":{"line":156,"column":44}},"loc":{"start":{"line":156,"column":56},"end":{"line":169,"column":13}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":172,"column":28},"end":{"line":172,"column":29}},"loc":{"start":{"line":172,"column":46},"end":{"line":174,"column":5}}},"14":{"name":"(anonymous_14)","decl":{"start":{"line":177,"column":33},"end":{"line":177,"column":34}},"loc":{"start":{"line":177,"column":58},"end":{"line":206,"column":1}}},"15":{"name":"(anonymous_15)","decl":{"start":{"line":187,"column":21},"end":{"line":187,"column":22}},"loc":{"start":{"line":187,"column":38},"end":{"line":202,"column":5}}},"16":{"name":"(anonymous_16)","decl":{"start":{"line":208,"column":32},"end":{"line":208,"column":33}},"loc":{"start":{"line":208,"column":57},"end":{"line":221,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":67,"column":8},"end":{"line":69,"column":9}},"type":"if","locations":[{"start":{"line":67,"column":8},"end":{"line":69,"column":9}},{"start":{"line":67,"column":8},"end":{"line":69,"column":9}}]},"1":{"loc":{"start":{"line":71,"column":8},"end":{"line":79,"column":9}},"type":"if","locations":[{"start":{"line":71,"column":8},"end":{"line":79,"column":9}},{"start":{"line":71,"column":8},"end":{"line":79,"column":9}}]},"2":{"loc":{"start":{"line":72,"column":12},"end":{"line":76,"column":13}},"type":"if","locations":[{"start":{"line":72,"column":12},"end":{"line":76,"column":13}},{"start":{"line":72,"column":12},"end":{"line":76,"column":13}}]},"3":{"loc":{"start":{"line":106,"column":19},"end":{"line":106,"column":61}},"type":"binary-expr","locations":[{"start":{"line":106,"column":19},"end":{"line":106,"column":45}},{"start":{"line":106,"column":50},"end":{"line":106,"column":61}}]},"4":{"loc":{"start":{"line":111,"column":11},"end":{"line":112,"column":44}},"type":"cond-expr","locations":[{"start":{"line":111,"column":33},"end":{"line":112,"column":30}},{"start":{"line":112,"column":33},"end":{"line":112,"column":44}}]},"5":{"loc":{"start":{"line":117,"column":26},"end":{"line":117,"column":64}},"type":"binary-expr","locations":[{"start":{"line":117,"column":26},"end":{"line":117,"column":49}},{"start":{"line":117,"column":53},"end":{"line":117,"column":64}}]},"6":{"loc":{"start":{"line":136,"column":22},"end":{"line":136,"column":59}},"type":"binary-expr","locations":[{"start":{"line":136,"column":22},"end":{"line":136,"column":37}},{"start":{"line":136,"column":41},"end":{"line":136,"column":59}}]},"7":{"loc":{"start":{"line":137,"column":18},"end":{"line":137,"column":35}},"type":"binary-expr","locations":[{"start":{"line":137,"column":18},"end":{"line":137,"column":29}},{"start":{"line":137,"column":33},"end":{"line":137,"column":35}}]},"8":{"loc":{"start":{"line":146,"column":4},"end":{"line":148,"column":5}},"type":"if","locations":[{"start":{"line":146,"column":4},"end":{"line":148,"column":5}},{"start":{"line":146,"column":4},"end":{"line":148,"column":5}}]},"9":{"loc":{"start":{"line":162,"column":16},"end":{"line":168,"column":17}},"type":"if","locations":[{"start":{"line":162,"column":16},"end":{"line":168,"column":17}},{"start":{"line":162,"column":16},"end":{"line":168,"column":17}}]},"10":{"loc":{"start":{"line":164,"column":20},"end":{"line":166,"column":21}},"type":"if","locations":[{"start":{"line":164,"column":20},"end":{"line":166,"column":21}},{"start":{"line":164,"column":20},"end":{"line":166,"column":21}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/insertion-text.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/html/insertion-text.js","statementMap":{"0":{"start":{"line":6,"column":4},"end":{"line":6,"column":21}},"1":{"start":{"line":7,"column":4},"end":{"line":7,"column":34}},"2":{"start":{"line":8,"column":4},"end":{"line":8,"column":22}},"3":{"start":{"line":9,"column":4},"end":{"line":9,"column":39}},"4":{"start":{"line":10,"column":4},"end":{"line":10,"column":45}},"5":{"start":{"line":11,"column":4},"end":{"line":11,"column":42}},"6":{"start":{"line":14,"column":15},"end":{"line":14,"column":48}},"7":{"start":{"line":16,"column":0},"end":{"line":106,"column":2}},"8":{"start":{"line":19,"column":18},"end":{"line":19,"column":20}},"9":{"start":{"line":20,"column":19},"end":{"line":20,"column":28}},"10":{"start":{"line":21,"column":18},"end":{"line":21,"column":29}},"11":{"start":{"line":23,"column":8},"end":{"line":28,"column":9}},"12":{"start":{"line":24,"column":12},"end":{"line":27,"column":13}},"13":{"start":{"line":25,"column":16},"end":{"line":25,"column":24}},"14":{"start":{"line":26,"column":16},"end":{"line":26,"column":22}},"15":{"start":{"line":29,"column":8},"end":{"line":29,"column":19}},"16":{"start":{"line":32,"column":19},"end":{"line":32,"column":28}},"17":{"start":{"line":33,"column":18},"end":{"line":33,"column":29}},"18":{"start":{"line":34,"column":18},"end":{"line":34,"column":33}},"19":{"start":{"line":36,"column":8},"end":{"line":41,"column":9}},"20":{"start":{"line":37,"column":12},"end":{"line":40,"column":13}},"21":{"start":{"line":38,"column":16},"end":{"line":38,"column":24}},"22":{"start":{"line":39,"column":16},"end":{"line":39,"column":22}},"23":{"start":{"line":42,"column":8},"end":{"line":42,"column":19}},"24":{"start":{"line":45,"column":8},"end":{"line":45,"column":31}},"25":{"start":{"line":49,"column":8},"end":{"line":49,"column":98}},"26":{"start":{"line":50,"column":8},"end":{"line":50,"column":72}},"27":{"start":{"line":51,"column":8},"end":{"line":51,"column":32}},"28":{"start":{"line":53,"column":8},"end":{"line":60,"column":9}},"29":{"start":{"line":54,"column":12},"end":{"line":56,"column":13}},"30":{"start":{"line":55,"column":16},"end":{"line":55,"column":24}},"31":{"start":{"line":57,"column":12},"end":{"line":59,"column":13}},"32":{"start":{"line":58,"column":16},"end":{"line":58,"column":38}},"33":{"start":{"line":62,"column":18},"end":{"line":62,"column":28}},"34":{"start":{"line":63,"column":21},"end":{"line":63,"column":60}},"35":{"start":{"line":64,"column":22},"end":{"line":64,"column":34}},"36":{"start":{"line":65,"column":19},"end":{"line":65,"column":28}},"37":{"start":{"line":66,"column":8},"end":{"line":66,"column":79}},"38":{"start":{"line":67,"column":8},"end":{"line":67,"column":20}},"39":{"start":{"line":71,"column":22},"end":{"line":71,"column":34}},"40":{"start":{"line":73,"column":31},"end":{"line":73,"column":32}},"41":{"start":{"line":76,"column":8},"end":{"line":84,"column":9}},"42":{"start":{"line":77,"column":12},"end":{"line":77,"column":35}},"43":{"start":{"line":78,"column":12},"end":{"line":80,"column":13}},"44":{"start":{"line":79,"column":16},"end":{"line":79,"column":50}},"45":{"start":{"line":81,"column":12},"end":{"line":83,"column":13}},"46":{"start":{"line":82,"column":16},"end":{"line":82,"column":22}},"47":{"start":{"line":85,"column":8},"end":{"line":89,"column":9}},"48":{"start":{"line":86,"column":12},"end":{"line":86,"column":33}},"49":{"start":{"line":88,"column":12},"end":{"line":88,"column":57}},"50":{"start":{"line":90,"column":8},"end":{"line":90,"column":32}},"51":{"start":{"line":94,"column":8},"end":{"line":94,"column":64}},"52":{"start":{"line":95,"column":8},"end":{"line":95,"column":61}},"53":{"start":{"line":96,"column":8},"end":{"line":96,"column":20}},"54":{"start":{"line":100,"column":8},"end":{"line":100,"column":64}},"55":{"start":{"line":104,"column":8},"end":{"line":104,"column":25}},"56":{"start":{"line":108,"column":0},"end":{"line":108,"column":31}}},"fnMap":{"0":{"name":"InsertionText","decl":{"start":{"line":5,"column":9},"end":{"line":5,"column":22}},"loc":{"start":{"line":5,"column":44},"end":{"line":12,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":18,"column":23},"end":{"line":18,"column":24}},"loc":{"start":{"line":18,"column":35},"end":{"line":30,"column":5}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":31,"column":22},"end":{"line":31,"column":23}},"loc":{"start":{"line":31,"column":34},"end":{"line":43,"column":5}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":44,"column":20},"end":{"line":44,"column":21}},"loc":{"start":{"line":44,"column":32},"end":{"line":46,"column":5}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":48,"column":14},"end":{"line":48,"column":15}},"loc":{"start":{"line":48,"column":63},"end":{"line":68,"column":5}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":70,"column":16},"end":{"line":70,"column":17}},"loc":{"start":{"line":70,"column":50},"end":{"line":91,"column":5}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":93,"column":10},"end":{"line":93,"column":11}},"loc":{"start":{"line":93,"column":73},"end":{"line":97,"column":5}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":99,"column":14},"end":{"line":99,"column":15}},"loc":{"start":{"line":99,"column":44},"end":{"line":101,"column":5}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":103,"column":14},"end":{"line":103,"column":15}},"loc":{"start":{"line":103,"column":26},"end":{"line":105,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":24,"column":12},"end":{"line":27,"column":13}},"type":"if","locations":[{"start":{"line":24,"column":12},"end":{"line":27,"column":13}},{"start":{"line":24,"column":12},"end":{"line":27,"column":13}}]},"1":{"loc":{"start":{"line":37,"column":12},"end":{"line":40,"column":13}},"type":"if","locations":[{"start":{"line":37,"column":12},"end":{"line":40,"column":13}},{"start":{"line":37,"column":12},"end":{"line":40,"column":13}}]},"2":{"loc":{"start":{"line":49,"column":24},"end":{"line":49,"column":97}},"type":"cond-expr","locations":[{"start":{"line":49,"column":63},"end":{"line":49,"column":81}},{"start":{"line":49,"column":84},"end":{"line":49,"column":97}}]},"3":{"loc":{"start":{"line":50,"column":14},"end":{"line":50,"column":71}},"type":"cond-expr","locations":[{"start":{"line":50,"column":44},"end":{"line":50,"column":65}},{"start":{"line":50,"column":68},"end":{"line":50,"column":71}}]},"4":{"loc":{"start":{"line":51,"column":14},"end":{"line":51,"column":31}},"type":"cond-expr","locations":[{"start":{"line":51,"column":24},"end":{"line":51,"column":25}},{"start":{"line":51,"column":28},"end":{"line":51,"column":31}}]},"5":{"loc":{"start":{"line":53,"column":8},"end":{"line":60,"column":9}},"type":"if","locations":[{"start":{"line":53,"column":8},"end":{"line":60,"column":9}},{"start":{"line":53,"column":8},"end":{"line":60,"column":9}}]},"6":{"loc":{"start":{"line":54,"column":12},"end":{"line":56,"column":13}},"type":"if","locations":[{"start":{"line":54,"column":12},"end":{"line":56,"column":13}},{"start":{"line":54,"column":12},"end":{"line":56,"column":13}}]},"7":{"loc":{"start":{"line":57,"column":12},"end":{"line":59,"column":13}},"type":"if","locations":[{"start":{"line":57,"column":12},"end":{"line":59,"column":13}},{"start":{"line":57,"column":12},"end":{"line":59,"column":13}}]},"8":{"loc":{"start":{"line":78,"column":12},"end":{"line":80,"column":13}},"type":"if","locations":[{"start":{"line":78,"column":12},"end":{"line":80,"column":13}},{"start":{"line":78,"column":12},"end":{"line":80,"column":13}}]},"9":{"loc":{"start":{"line":78,"column":16},"end":{"line":78,"column":79}},"type":"binary-expr","locations":[{"start":{"line":78,"column":16},"end":{"line":78,"column":35}},{"start":{"line":78,"column":40},"end":{"line":78,"column":61}},{"start":{"line":78,"column":65},"end":{"line":78,"column":78}}]},"10":{"loc":{"start":{"line":81,"column":12},"end":{"line":83,"column":13}},"type":"if","locations":[{"start":{"line":81,"column":12},"end":{"line":83,"column":13}},{"start":{"line":81,"column":12},"end":{"line":83,"column":13}}]},"11":{"loc":{"start":{"line":85,"column":8},"end":{"line":89,"column":9}},"type":"if","locations":[{"start":{"line":85,"column":8},"end":{"line":89,"column":9}},{"start":{"line":85,"column":8},"end":{"line":89,"column":9}}]},"12":{"loc":{"start":{"line":85,"column":12},"end":{"line":85,"column":46}},"type":"binary-expr","locations":[{"start":{"line":85,"column":12},"end":{"line":85,"column":21}},{"start":{"line":85,"column":25},"end":{"line":85,"column":46}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0,0],"10":[0,0],"11":[0,0],"12":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/json-summary/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/json-summary/index.js","statementMap":{"0":{"start":{"line":8,"column":4},"end":{"line":8,"column":53}},"1":{"start":{"line":9,"column":4},"end":{"line":9,"column":30}},"2":{"start":{"line":10,"column":4},"end":{"line":10,"column":22}},"3":{"start":{"line":13,"column":0},"end":{"line":16,"column":2}},"4":{"start":{"line":14,"column":4},"end":{"line":14,"column":61}},"5":{"start":{"line":15,"column":4},"end":{"line":15,"column":34}},"6":{"start":{"line":18,"column":0},"end":{"line":30,"column":2}},"7":{"start":{"line":19,"column":13},"end":{"line":19,"column":31}},"8":{"start":{"line":20,"column":4},"end":{"line":24,"column":5}},"9":{"start":{"line":21,"column":8},"end":{"line":21,"column":27}},"10":{"start":{"line":23,"column":8},"end":{"line":23,"column":22}},"11":{"start":{"line":25,"column":4},"end":{"line":25,"column":18}},"12":{"start":{"line":26,"column":4},"end":{"line":26,"column":23}},"13":{"start":{"line":27,"column":4},"end":{"line":27,"column":20}},"14":{"start":{"line":28,"column":4},"end":{"line":28,"column":33}},"15":{"start":{"line":29,"column":4},"end":{"line":29,"column":19}},"16":{"start":{"line":32,"column":0},"end":{"line":37,"column":2}},"17":{"start":{"line":33,"column":4},"end":{"line":35,"column":5}},"18":{"start":{"line":34,"column":8},"end":{"line":34,"column":15}},"19":{"start":{"line":36,"column":4},"end":{"line":36,"column":58}},"20":{"start":{"line":39,"column":0},"end":{"line":41,"column":2}},"21":{"start":{"line":40,"column":4},"end":{"line":40,"column":78}},"22":{"start":{"line":43,"column":0},"end":{"line":47,"column":2}},"23":{"start":{"line":44,"column":13},"end":{"line":44,"column":31}},"24":{"start":{"line":45,"column":4},"end":{"line":45,"column":20}},"25":{"start":{"line":46,"column":4},"end":{"line":46,"column":15}},"26":{"start":{"line":49,"column":0},"end":{"line":49,"column":35}}},"fnMap":{"0":{"name":"JsonSummaryReport","decl":{"start":{"line":7,"column":9},"end":{"line":7,"column":26}},"loc":{"start":{"line":7,"column":33},"end":{"line":11,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":13,"column":38},"end":{"line":13,"column":39}},"loc":{"start":{"line":13,"column":63},"end":{"line":16,"column":1}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":18,"column":43},"end":{"line":18,"column":44}},"loc":{"start":{"line":18,"column":67},"end":{"line":30,"column":1}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":32,"column":40},"end":{"line":32,"column":41}},"loc":{"start":{"line":32,"column":56},"end":{"line":37,"column":1}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":39,"column":39},"end":{"line":39,"column":40}},"loc":{"start":{"line":39,"column":55},"end":{"line":41,"column":1}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":43,"column":36},"end":{"line":43,"column":37}},"loc":{"start":{"line":43,"column":48},"end":{"line":47,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":16},"end":{"line":8,"column":52}},"type":"binary-expr","locations":[{"start":{"line":8,"column":16},"end":{"line":8,"column":25}},{"start":{"line":8,"column":29},"end":{"line":8,"column":52}}]},"1":{"loc":{"start":{"line":20,"column":4},"end":{"line":24,"column":5}},"type":"if","locations":[{"start":{"line":20,"column":4},"end":{"line":24,"column":5}},{"start":{"line":20,"column":4},"end":{"line":24,"column":5}}]},"2":{"loc":{"start":{"line":33,"column":4},"end":{"line":35,"column":5}},"type":"if","locations":[{"start":{"line":33,"column":4},"end":{"line":35,"column":5}},{"start":{"line":33,"column":4},"end":{"line":35,"column":5}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/json/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/json/index.js","statementMap":{"0":{"start":{"line":8,"column":4},"end":{"line":8,"column":51}},"1":{"start":{"line":9,"column":4},"end":{"line":9,"column":22}},"2":{"start":{"line":12,"column":0},"end":{"line":15,"column":2}},"3":{"start":{"line":13,"column":4},"end":{"line":13,"column":61}},"4":{"start":{"line":14,"column":4},"end":{"line":14,"column":34}},"5":{"start":{"line":17,"column":0},"end":{"line":31,"column":2}},"6":{"start":{"line":18,"column":13},"end":{"line":18,"column":35}},"7":{"start":{"line":19,"column":14},"end":{"line":19,"column":21}},"8":{"start":{"line":20,"column":13},"end":{"line":20,"column":31}},"9":{"start":{"line":22,"column":4},"end":{"line":26,"column":5}},"10":{"start":{"line":23,"column":8},"end":{"line":23,"column":27}},"11":{"start":{"line":25,"column":8},"end":{"line":25,"column":22}},"12":{"start":{"line":27,"column":4},"end":{"line":27,"column":34}},"13":{"start":{"line":28,"column":4},"end":{"line":28,"column":19}},"14":{"start":{"line":29,"column":4},"end":{"line":29,"column":33}},"15":{"start":{"line":30,"column":4},"end":{"line":30,"column":19}},"16":{"start":{"line":33,"column":0},"end":{"line":37,"column":2}},"17":{"start":{"line":34,"column":13},"end":{"line":34,"column":31}},"18":{"start":{"line":35,"column":4},"end":{"line":35,"column":20}},"19":{"start":{"line":36,"column":4},"end":{"line":36,"column":15}},"20":{"start":{"line":39,"column":0},"end":{"line":39,"column":28}}},"fnMap":{"0":{"name":"JsonReport","decl":{"start":{"line":7,"column":9},"end":{"line":7,"column":19}},"loc":{"start":{"line":7,"column":26},"end":{"line":10,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":12,"column":31},"end":{"line":12,"column":32}},"loc":{"start":{"line":12,"column":56},"end":{"line":15,"column":1}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":17,"column":32},"end":{"line":17,"column":33}},"loc":{"start":{"line":17,"column":48},"end":{"line":31,"column":1}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":33,"column":29},"end":{"line":33,"column":30}},"loc":{"start":{"line":33,"column":41},"end":{"line":37,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":16},"end":{"line":8,"column":50}},"type":"binary-expr","locations":[{"start":{"line":8,"column":16},"end":{"line":8,"column":25}},{"start":{"line":8,"column":29},"end":{"line":8,"column":50}}]},"1":{"loc":{"start":{"line":22,"column":4},"end":{"line":26,"column":5}},"type":"if","locations":[{"start":{"line":22,"column":4},"end":{"line":26,"column":5}},{"start":{"line":22,"column":4},"end":{"line":26,"column":5}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0},"f":{"0":0,"1":0,"2":0,"3":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/lcov/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/lcov/index.js","statementMap":{"0":{"start":{"line":5,"column":21},"end":{"line":5,"column":43}},"1":{"start":{"line":6,"column":17},"end":{"line":6,"column":35}},"2":{"start":{"line":9,"column":4},"end":{"line":9,"column":56}},"3":{"start":{"line":10,"column":4},"end":{"line":10,"column":57}},"4":{"start":{"line":13,"column":0},"end":{"line":27,"column":3}},"5":{"start":{"line":14,"column":15},"end":{"line":14,"column":26}},"6":{"start":{"line":15,"column":4},"end":{"line":26,"column":6}},"7":{"start":{"line":16,"column":19},"end":{"line":16,"column":56}},"8":{"start":{"line":17,"column":19},"end":{"line":17,"column":28}},"9":{"start":{"line":18,"column":19},"end":{"line":18,"column":28}},"10":{"start":{"line":20,"column":8},"end":{"line":22,"column":9}},"11":{"start":{"line":21,"column":12},"end":{"line":21,"column":41}},"12":{"start":{"line":23,"column":8},"end":{"line":25,"column":9}},"13":{"start":{"line":24,"column":12},"end":{"line":24,"column":41}},"14":{"start":{"line":29,"column":0},"end":{"line":29,"column":28}}},"fnMap":{"0":{"name":"LcovReport","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":19}},"loc":{"start":{"line":8,"column":22},"end":{"line":11,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":13,"column":60},"end":{"line":13,"column":61}},"loc":{"start":{"line":13,"column":76},"end":{"line":27,"column":1}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":15,"column":33},"end":{"line":15,"column":34}},"loc":{"start":{"line":15,"column":45},"end":{"line":26,"column":5}}}},"branchMap":{"0":{"loc":{"start":{"line":20,"column":8},"end":{"line":22,"column":9}},"type":"if","locations":[{"start":{"line":20,"column":8},"end":{"line":22,"column":9}},{"start":{"line":20,"column":8},"end":{"line":22,"column":9}}]},"1":{"loc":{"start":{"line":23,"column":8},"end":{"line":25,"column":9}},"type":"if","locations":[{"start":{"line":23,"column":8},"end":{"line":25,"column":9}},{"start":{"line":23,"column":8},"end":{"line":25,"column":9}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/lcovonly/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/lcovonly/index.js","statementMap":{"0":{"start":{"line":8,"column":4},"end":{"line":8,"column":41}},"1":{"start":{"line":9,"column":4},"end":{"line":9,"column":30}},"2":{"start":{"line":12,"column":0},"end":{"line":14,"column":2}},"3":{"start":{"line":13,"column":4},"end":{"line":13,"column":61}},"4":{"start":{"line":16,"column":0},"end":{"line":63,"column":2}},"5":{"start":{"line":18,"column":13},"end":{"line":18,"column":35}},"6":{"start":{"line":19,"column":17},"end":{"line":19,"column":35}},"7":{"start":{"line":20,"column":20},"end":{"line":20,"column":24}},"8":{"start":{"line":21,"column":22},"end":{"line":21,"column":30}},"9":{"start":{"line":22,"column":16},"end":{"line":22,"column":36}},"10":{"start":{"line":23,"column":19},"end":{"line":23,"column":23}},"11":{"start":{"line":24,"column":20},"end":{"line":24,"column":32}},"12":{"start":{"line":25,"column":18},"end":{"line":25,"column":43}},"13":{"start":{"line":27,"column":4},"end":{"line":27,"column":26}},"14":{"start":{"line":28,"column":4},"end":{"line":28,"column":36}},"15":{"start":{"line":30,"column":4},"end":{"line":33,"column":7}},"16":{"start":{"line":31,"column":19},"end":{"line":31,"column":35}},"17":{"start":{"line":32,"column":8},"end":{"line":32,"column":76}},"18":{"start":{"line":34,"column":4},"end":{"line":34,"column":53}},"19":{"start":{"line":35,"column":4},"end":{"line":35,"column":55}},"20":{"start":{"line":37,"column":4},"end":{"line":41,"column":7}},"21":{"start":{"line":38,"column":20},"end":{"line":38,"column":34}},"22":{"start":{"line":39,"column":19},"end":{"line":39,"column":35}},"23":{"start":{"line":40,"column":8},"end":{"line":40,"column":63}},"24":{"start":{"line":43,"column":4},"end":{"line":46,"column":7}},"25":{"start":{"line":44,"column":19},"end":{"line":44,"column":29}},"26":{"start":{"line":45,"column":8},"end":{"line":45,"column":54}},"27":{"start":{"line":47,"column":4},"end":{"line":47,"column":48}},"28":{"start":{"line":48,"column":4},"end":{"line":48,"column":50}},"29":{"start":{"line":50,"column":4},"end":{"line":59,"column":7}},"30":{"start":{"line":51,"column":26},"end":{"line":51,"column":39}},"31":{"start":{"line":52,"column":19},"end":{"line":52,"column":33}},"32":{"start":{"line":53,"column":19},"end":{"line":53,"column":38}},"33":{"start":{"line":54,"column":16},"end":{"line":54,"column":17}},"34":{"start":{"line":55,"column":8},"end":{"line":58,"column":11}},"35":{"start":{"line":56,"column":12},"end":{"line":56,"column":66}},"36":{"start":{"line":57,"column":12},"end":{"line":57,"column":19}},"37":{"start":{"line":60,"column":4},"end":{"line":60,"column":52}},"38":{"start":{"line":61,"column":4},"end":{"line":61,"column":54}},"39":{"start":{"line":62,"column":4},"end":{"line":62,"column":36}},"40":{"start":{"line":65,"column":0},"end":{"line":67,"column":2}},"41":{"start":{"line":66,"column":4},"end":{"line":66,"column":31}},"42":{"start":{"line":69,"column":0},"end":{"line":69,"column":32}}},"fnMap":{"0":{"name":"LcovOnlyReport","decl":{"start":{"line":7,"column":9},"end":{"line":7,"column":23}},"loc":{"start":{"line":7,"column":30},"end":{"line":10,"column":1}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":12,"column":35},"end":{"line":12,"column":36}},"loc":{"start":{"line":12,"column":60},"end":{"line":14,"column":1}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":16,"column":36},"end":{"line":16,"column":37}},"loc":{"start":{"line":16,"column":52},"end":{"line":63,"column":1}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":30,"column":35},"end":{"line":30,"column":36}},"loc":{"start":{"line":30,"column":50},"end":{"line":33,"column":5}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":37,"column":35},"end":{"line":37,"column":36}},"loc":{"start":{"line":37,"column":50},"end":{"line":41,"column":5}}},"5":{"name":"(anonymous_5)","decl":{"start":{"line":43,"column":31},"end":{"line":43,"column":32}},"loc":{"start":{"line":43,"column":46},"end":{"line":46,"column":5}}},"6":{"name":"(anonymous_6)","decl":{"start":{"line":50,"column":34},"end":{"line":50,"column":35}},"loc":{"start":{"line":50,"column":49},"end":{"line":59,"column":5}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":55,"column":28},"end":{"line":55,"column":29}},"loc":{"start":{"line":55,"column":41},"end":{"line":58,"column":9}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":65,"column":33},"end":{"line":65,"column":34}},"loc":{"start":{"line":65,"column":45},"end":{"line":67,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":16},"end":{"line":8,"column":40}},"type":"binary-expr","locations":[{"start":{"line":8,"column":16},"end":{"line":8,"column":25}},{"start":{"line":8,"column":29},"end":{"line":8,"column":40}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0},"b":{"0":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/none/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/none/index.js","statementMap":{"0":{"start":{"line":8,"column":0},"end":{"line":8,"column":28}}},"fnMap":{"0":{"name":"NoneReport","decl":{"start":{"line":5,"column":9},"end":{"line":5,"column":19}},"loc":{"start":{"line":5,"column":22},"end":{"line":6,"column":1}}}},"branchMap":{},"s":{"0":0},"f":{"0":0},"b":{}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/teamcity/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/teamcity/index.js","statementMap":{"0":{"start":{"line":8,"column":4},"end":{"line":8,"column":22}},"1":{"start":{"line":9,"column":4},"end":{"line":9,"column":34}},"2":{"start":{"line":10,"column":4},"end":{"line":10,"column":63}},"3":{"start":{"line":14,"column":4},"end":{"line":14,"column":97}},"4":{"start":{"line":17,"column":0},"end":{"line":43,"column":2}},"5":{"start":{"line":18,"column":18},"end":{"line":18,"column":43}},"6":{"start":{"line":21,"column":4},"end":{"line":21,"column":45}},"7":{"start":{"line":22,"column":4},"end":{"line":22,"column":19}},"8":{"start":{"line":23,"column":4},"end":{"line":23,"column":72}},"9":{"start":{"line":26,"column":4},"end":{"line":26,"column":82}},"10":{"start":{"line":27,"column":4},"end":{"line":27,"column":78}},"11":{"start":{"line":30,"column":4},"end":{"line":30,"column":80}},"12":{"start":{"line":31,"column":4},"end":{"line":31,"column":76}},"13":{"start":{"line":34,"column":4},"end":{"line":34,"column":81}},"14":{"start":{"line":35,"column":4},"end":{"line":35,"column":77}},"15":{"start":{"line":38,"column":4},"end":{"line":38,"column":77}},"16":{"start":{"line":39,"column":4},"end":{"line":39,"column":73}},"17":{"start":{"line":41,"column":4},"end":{"line":41,"column":72}},"18":{"start":{"line":42,"column":4},"end":{"line":42,"column":15}},"19":{"start":{"line":45,"column":0},"end":{"line":45,"column":32}}},"fnMap":{"0":{"name":"TeamcityReport","decl":{"start":{"line":7,"column":9},"end":{"line":7,"column":23}},"loc":{"start":{"line":7,"column":30},"end":{"line":11,"column":1}}},"1":{"name":"lineForKey","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":19}},"loc":{"start":{"line":13,"column":40},"end":{"line":15,"column":1}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":17,"column":35},"end":{"line":17,"column":36}},"loc":{"start":{"line":17,"column":60},"end":{"line":43,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":11},"end":{"line":8,"column":21}},"type":"binary-expr","locations":[{"start":{"line":8,"column":11},"end":{"line":8,"column":15}},{"start":{"line":8,"column":19},"end":{"line":8,"column":21}}]},"1":{"loc":{"start":{"line":9,"column":16},"end":{"line":9,"column":33}},"type":"binary-expr","locations":[{"start":{"line":9,"column":16},"end":{"line":9,"column":25}},{"start":{"line":9,"column":29},"end":{"line":9,"column":33}}]},"2":{"loc":{"start":{"line":10,"column":21},"end":{"line":10,"column":62}},"type":"binary-expr","locations":[{"start":{"line":10,"column":21},"end":{"line":10,"column":35}},{"start":{"line":10,"column":39},"end":{"line":10,"column":62}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0},"f":{"0":0,"1":0,"2":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/text-lcov/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/text-lcov/index.js","statementMap":{"0":{"start":{"line":5,"column":11},"end":{"line":5,"column":26}},"1":{"start":{"line":6,"column":15},"end":{"line":6,"column":37}},"2":{"start":{"line":9,"column":4},"end":{"line":9,"column":20}},"3":{"start":{"line":10,"column":4},"end":{"line":10,"column":30}},"4":{"start":{"line":13,"column":0},"end":{"line":13,"column":34}},"5":{"start":{"line":14,"column":0},"end":{"line":14,"column":26}}},"fnMap":{"0":{"name":"TextLcov","decl":{"start":{"line":8,"column":9},"end":{"line":8,"column":17}},"loc":{"start":{"line":8,"column":24},"end":{"line":11,"column":1}}}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0},"f":{"0":0},"b":{}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/text-summary/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/text-summary/index.js","statementMap":{"0":{"start":{"line":8,"column":4},"end":{"line":8,"column":22}},"1":{"start":{"line":9,"column":4},"end":{"line":9,"column":34}},"2":{"start":{"line":13,"column":18},"end":{"line":13,"column":30}},"3":{"start":{"line":17,"column":4},"end":{"line":17,"column":63}},"4":{"start":{"line":18,"column":4},"end":{"line":20,"column":5}},"5":{"start":{"line":19,"column":8},"end":{"line":19,"column":67}},"6":{"start":{"line":21,"column":4},"end":{"line":21,"column":102}},"7":{"start":{"line":22,"column":4},"end":{"line":22,"column":30}},"8":{"start":{"line":23,"column":4},"end":{"line":25,"column":5}},"9":{"start":{"line":24,"column":8},"end":{"line":24,"column":46}},"10":{"start":{"line":26,"column":4},"end":{"line":26,"column":18}},"11":{"start":{"line":29,"column":0},"end":{"line":47,"column":2}},"12":{"start":{"line":30,"column":18},"end":{"line":30,"column":43}},"13":{"start":{"line":32,"column":20},"end":{"line":36,"column":9}},"14":{"start":{"line":33,"column":22},"end":{"line":33,"column":46}},"15":{"start":{"line":34,"column":24},"end":{"line":34,"column":70}},"16":{"start":{"line":35,"column":12},"end":{"line":35,"column":48}},"17":{"start":{"line":38,"column":4},"end":{"line":38,"column":45}},"18":{"start":{"line":39,"column":4},"end":{"line":39,"column":19}},"19":{"start":{"line":40,"column":4},"end":{"line":40,"column":99}},"20":{"start":{"line":41,"column":4},"end":{"line":41,"column":28}},"21":{"start":{"line":42,"column":4},"end":{"line":42,"column":26}},"22":{"start":{"line":43,"column":4},"end":{"line":43,"column":27}},"23":{"start":{"line":44,"column":4},"end":{"line":44,"column":23}},"24":{"start":{"line":45,"column":4},"end":{"line":45,"column":99}},"25":{"start":{"line":46,"column":4},"end":{"line":46,"column":15}},"26":{"start":{"line":49,"column":0},"end":{"line":49,"column":35}}},"fnMap":{"0":{"name":"TextSummaryReport","decl":{"start":{"line":7,"column":9},"end":{"line":7,"column":26}},"loc":{"start":{"line":7,"column":33},"end":{"line":10,"column":1}}},"1":{"name":"lineForKey","decl":{"start":{"line":12,"column":9},"end":{"line":12,"column":19}},"loc":{"start":{"line":12,"column":34},"end":{"line":27,"column":1}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":29,"column":38},"end":{"line":29,"column":39}},"loc":{"start":{"line":29,"column":63},"end":{"line":47,"column":1}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":32,"column":20},"end":{"line":32,"column":21}},"loc":{"start":{"line":32,"column":35},"end":{"line":36,"column":9}}}},"branchMap":{"0":{"loc":{"start":{"line":8,"column":11},"end":{"line":8,"column":21}},"type":"binary-expr","locations":[{"start":{"line":8,"column":11},"end":{"line":8,"column":15}},{"start":{"line":8,"column":19},"end":{"line":8,"column":21}}]},"1":{"loc":{"start":{"line":9,"column":16},"end":{"line":9,"column":33}},"type":"binary-expr","locations":[{"start":{"line":9,"column":16},"end":{"line":9,"column":25}},{"start":{"line":9,"column":29},"end":{"line":9,"column":33}}]},"2":{"loc":{"start":{"line":18,"column":4},"end":{"line":20,"column":5}},"type":"if","locations":[{"start":{"line":18,"column":4},"end":{"line":20,"column":5}},{"start":{"line":18,"column":4},"end":{"line":20,"column":5}}]},"3":{"loc":{"start":{"line":23,"column":4},"end":{"line":25,"column":5}},"type":"if","locations":[{"start":{"line":23,"column":4},"end":{"line":25,"column":5}},{"start":{"line":23,"column":4},"end":{"line":25,"column":5}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0},"f":{"0":0,"1":0,"2":0,"3":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0]}},"/Users/benjamincoe/bcoe/istanbul-reports/lib/text/index.js":{"path":"/Users/benjamincoe/bcoe/istanbul-reports/lib/text/index.js","statementMap":{"0":{"start":{"line":7,"column":15},"end":{"line":7,"column":16}},"1":{"start":{"line":8,"column":18},"end":{"line":8,"column":20}},"2":{"start":{"line":9,"column":15},"end":{"line":9,"column":16}},"3":{"start":{"line":10,"column":12},"end":{"line":10,"column":16}},"4":{"start":{"line":11,"column":16},"end":{"line":11,"column":20}},"5":{"start":{"line":14,"column":14},"end":{"line":14,"column":16}},"6":{"start":{"line":16,"column":4},"end":{"line":16,"column":19}},"7":{"start":{"line":17,"column":4},"end":{"line":19,"column":5}},"8":{"start":{"line":18,"column":8},"end":{"line":18,"column":18}},"9":{"start":{"line":20,"column":4},"end":{"line":20,"column":15}},"10":{"start":{"line":24,"column":4},"end":{"line":24,"column":21}},"11":{"start":{"line":25,"column":4},"end":{"line":25,"column":22}},"12":{"start":{"line":27,"column":24},"end":{"line":27,"column":39}},"13":{"start":{"line":28,"column":20},"end":{"line":28,"column":41}},"14":{"start":{"line":29,"column":17},"end":{"line":29,"column":39}},"15":{"start":{"line":30,"column":17},"end":{"line":30,"column":19}},"16":{"start":{"line":32,"column":17},"end":{"line":32,"column":27}},"17":{"start":{"line":34,"column":4},"end":{"line":42,"column":5}},"18":{"start":{"line":35,"column":8},"end":{"line":41,"column":9}},"19":{"start":{"line":36,"column":12},"end":{"line":36,"column":50}},"20":{"start":{"line":37,"column":12},"end":{"line":37,"column":59}},"21":{"start":{"line":39,"column":12},"end":{"line":39,"column":55}},"22":{"start":{"line":40,"column":12},"end":{"line":40,"column":50}},"23":{"start":{"line":44,"column":4},"end":{"line":44,"column":27}},"24":{"start":{"line":48,"column":4},"end":{"line":48,"column":45}},"25":{"start":{"line":52,"column":4},"end":{"line":52,"column":49}},"26":{"start":{"line":56,"column":4},"end":{"line":56,"column":49}},"27":{"start":{"line":60,"column":14},"end":{"line":60,"column":15}},"28":{"start":{"line":61,"column":4},"end":{"line":61,"column":28}},"29":{"start":{"line":62,"column":4},"end":{"line":65,"column":5}},"30":{"start":{"line":63,"column":8},"end":{"line":63,"column":17}},"31":{"start":{"line":64,"column":8},"end":{"line":64,"column":32}},"32":{"start":{"line":66,"column":4},"end":{"line":66,"column":15}},"33":{"start":{"line":70,"column":15},"end":{"line":70,"column":16}},"34":{"start":{"line":71,"column":23},"end":{"line":77,"column":9}},"35":{"start":{"line":72,"column":24},"end":{"line":72,"column":38}},"36":{"start":{"line":73,"column":29},"end":{"line":73,"column":69}},"37":{"start":{"line":74,"column":12},"end":{"line":76,"column":13}},"38":{"start":{"line":75,"column":16},"end":{"line":75,"column":34}},"39":{"start":{"line":78,"column":18},"end":{"line":85,"column":9}},"40":{"start":{"line":80,"column":16},"end":{"line":80,"column":35}},"41":{"start":{"line":83,"column":16},"end":{"line":83,"column":35}},"42":{"start":{"line":86,"column":4},"end":{"line":86,"column":44}},"43":{"start":{"line":87,"column":4},"end":{"line":87,"column":16}},"44":{"start":{"line":91,"column":15},"end":{"line":91,"column":38}},"45":{"start":{"line":92,"column":14},"end":{"line":92,"column":36}},"46":{"start":{"line":93,"column":19},"end":{"line":93,"column":21}},"47":{"start":{"line":95,"column":4},"end":{"line":95,"column":24}},"48":{"start":{"line":96,"column":4},"end":{"line":96,"column":23}},"49":{"start":{"line":97,"column":4},"end":{"line":97,"column":23}},"50":{"start":{"line":98,"column":4},"end":{"line":98,"column":23}},"51":{"start":{"line":99,"column":4},"end":{"line":99,"column":23}},"52":{"start":{"line":100,"column":4},"end":{"line":100,"column":45}},"53":{"start":{"line":101,"column":4},"end":{"line":101,"column":48}},"54":{"start":{"line":105,"column":19},"end":{"line":105,"column":21}},"55":{"start":{"line":106,"column":4},"end":{"line":106,"column":54}},"56":{"start":{"line":107,"column":4},"end":{"line":107,"column":40}},"57":{"start":{"line":108,"column":4},"end":{"line":108,"column":41}},"58":{"start":{"line":109,"column":4},"end":{"line":109,"column":40}},"59":{"start":{"line":110,"column":4},"end":{"line":110,"column":40}},"60":{"start":{"line":111,"column":4},"end":{"line":111,"column":61}},"61":{"start":{"line":112,"column":4},"end":{"line":112,"column":38}},"62":{"start":{"line":116,"column":15},"end":{"line":116,"column":29}},"63":{"start":{"line":117,"column":18},"end":{"line":117,"column":43}},"64":{"start":{"line":118,"column":13},"end":{"line":123,"column":9}},"65":{"start":{"line":124,"column":19},"end":{"line":126,"column":9}},"66":{"start":{"line":125,"column":12},"end":{"line":125,"column":73}},"67":{"start":{"line":127,"column":23},"end":{"line":127,"column":89}},"68":{"start":{"line":128,"column":19},"end":{"line":128,"column":21}},"69":{"start":{"line":130,"column":4},"end":{"line":130,"column":79}},"70":{"start":{"line":131,"column":4},"end":{"line":131,"column":67}},"71":{"start":{"line":132,"column":4},"end":{"line":132,"column":64}},"72":{"start":{"line":133,"column":4},"end":{"line":133,"column":66}},"73":{"start":{"line":134,"column":4},"end":{"line":134,"column":58}},"74":{"start":{"line":135,"column":4},"end":{"line":135,"column":84}},"75":{"start":{"line":136,"column":4},"end":{"line":136,"column":40}},"76":{"start":{"line":140,"column":4},"end":{"line":140,"column":22}},"77":{"start":{"line":141,"column":4},"end":{"line":141,"column":34}},"78":{"start":{"line":142,"column":4},"end":{"line":142,"column":37}},"79":{"start":{"line":143,"column":4},"end":{"line":143,"column":19}},"80":{"start":{"line":146,"column":0},"end":{"line":163,"column":2}},"81":{"start":{"line":148,"column":21},"end":{"line":148,"column":53}},"82":{"start":{"line":151,"column":4},"end":{"line":151,"column":50}},"83":{"start":{"line":152,"column":4},"end":{"line":152,"column":50}},"84":{"start":{"line":153,"column":4},"end":{"line":158,"column":5}},"85":{"start":{"line":154,"column":8},"end":{"line":154,"column":53}},"86":{"start":{"line":155,"column":8},"end":{"line":157,"column":9}},"87":{"start":{"line":156,"column":12},"end":{"line":156,"column":42}},"88":{"start":{"line":159,"column":4},"end":{"line":159,"column":36}},"89":{"start":{"line":160,"column":4},"end":{"line":160,"column":26}},"90":{"start":{"line":161,"column":4},"end":{"line":161,"column":49}},"91":{"start":{"line":162,"column":4},"end":{"line":162,"column":26}},"92":{"start":{"line":165,"column":0},"end":{"line":168,"column":2}},"93":{"start":{"line":166,"column":20},"end":{"line":166,"column":34}},"94":{"start":{"line":167,"column":4},"end":{"line":167,"column":103}},"95":{"start":{"line":170,"column":0},"end":{"line":172,"column":2}},"96":{"start":{"line":171,"column":4},"end":{"line":171,"column":41}},"97":{"start":{"line":174,"column":0},"end":{"line":177,"column":2}},"98":{"start":{"line":175,"column":4},"end":{"line":175,"column":46}},"99":{"start":{"line":176,"column":4},"end":{"line":176,"column":20}},"100":{"start":{"line":179,"column":0},"end":{"line":179,"column":28}}},"fnMap":{"0":{"name":"padding","decl":{"start":{"line":13,"column":9},"end":{"line":13,"column":16}},"loc":{"start":{"line":13,"column":26},"end":{"line":21,"column":1}}},"1":{"name":"fill","decl":{"start":{"line":23,"column":9},"end":{"line":23,"column":13}},"loc":{"start":{"line":23,"column":39},"end":{"line":45,"column":1}}},"2":{"name":"formatName","decl":{"start":{"line":47,"column":9},"end":{"line":47,"column":19}},"loc":{"start":{"line":47,"column":42},"end":{"line":49,"column":1}}},"3":{"name":"formatPct","decl":{"start":{"line":51,"column":9},"end":{"line":51,"column":18}},"loc":{"start":{"line":51,"column":31},"end":{"line":53,"column":1}}},"4":{"name":"nodeName","decl":{"start":{"line":55,"column":9},"end":{"line":55,"column":17}},"loc":{"start":{"line":55,"column":24},"end":{"line":57,"column":1}}},"5":{"name":"depthFor","decl":{"start":{"line":59,"column":9},"end":{"line":59,"column":17}},"loc":{"start":{"line":59,"column":24},"end":{"line":67,"column":1}}},"6":{"name":"findNameWidth","decl":{"start":{"line":69,"column":9},"end":{"line":69,"column":22}},"loc":{"start":{"line":69,"column":38},"end":{"line":88,"column":1}}},"7":{"name":"(anonymous_7)","decl":{"start":{"line":71,"column":23},"end":{"line":71,"column":24}},"loc":{"start":{"line":71,"column":39},"end":{"line":77,"column":9}}},"8":{"name":"(anonymous_8)","decl":{"start":{"line":79,"column":23},"end":{"line":79,"column":24}},"loc":{"start":{"line":79,"column":39},"end":{"line":81,"column":13}}},"9":{"name":"(anonymous_9)","decl":{"start":{"line":82,"column":22},"end":{"line":82,"column":23}},"loc":{"start":{"line":82,"column":38},"end":{"line":84,"column":13}}},"10":{"name":"makeLine","decl":{"start":{"line":90,"column":9},"end":{"line":90,"column":17}},"loc":{"start":{"line":90,"column":29},"end":{"line":102,"column":1}}},"11":{"name":"tableHeader","decl":{"start":{"line":104,"column":9},"end":{"line":104,"column":20}},"loc":{"start":{"line":104,"column":34},"end":{"line":113,"column":1}}},"12":{"name":"tableRow","decl":{"start":{"line":115,"column":9},"end":{"line":115,"column":17}},"loc":{"start":{"line":115,"column":64},"end":{"line":137,"column":1}}},"13":{"name":"(anonymous_13)","decl":{"start":{"line":124,"column":19},"end":{"line":124,"column":20}},"loc":{"start":{"line":124,"column":39},"end":{"line":126,"column":9}}},"14":{"name":"TextReport","decl":{"start":{"line":139,"column":9},"end":{"line":139,"column":19}},"loc":{"start":{"line":139,"column":26},"end":{"line":144,"column":1}}},"15":{"name":"(anonymous_15)","decl":{"start":{"line":146,"column":31},"end":{"line":146,"column":32}},"loc":{"start":{"line":146,"column":56},"end":{"line":163,"column":1}}},"16":{"name":"(anonymous_16)","decl":{"start":{"line":165,"column":33},"end":{"line":165,"column":34}},"loc":{"start":{"line":165,"column":58},"end":{"line":168,"column":1}}},"17":{"name":"(anonymous_17)","decl":{"start":{"line":170,"column":32},"end":{"line":170,"column":33}},"loc":{"start":{"line":170,"column":57},"end":{"line":172,"column":1}}},"18":{"name":"(anonymous_18)","decl":{"start":{"line":174,"column":29},"end":{"line":174,"column":30}},"loc":{"start":{"line":174,"column":41},"end":{"line":177,"column":1}}}},"branchMap":{"0":{"loc":{"start":{"line":16,"column":9},"end":{"line":16,"column":18}},"type":"binary-expr","locations":[{"start":{"line":16,"column":9},"end":{"line":16,"column":11}},{"start":{"line":16,"column":15},"end":{"line":16,"column":18}}]},"1":{"loc":{"start":{"line":24,"column":11},"end":{"line":24,"column":20}},"type":"binary-expr","locations":[{"start":{"line":24,"column":11},"end":{"line":24,"column":15}},{"start":{"line":24,"column":19},"end":{"line":24,"column":20}}]},"2":{"loc":{"start":{"line":34,"column":4},"end":{"line":42,"column":5}},"type":"if","locations":[{"start":{"line":34,"column":4},"end":{"line":42,"column":5}},{"start":{"line":34,"column":4},"end":{"line":42,"column":5}}]},"3":{"loc":{"start":{"line":35,"column":8},"end":{"line":41,"column":9}},"type":"if","locations":[{"start":{"line":35,"column":8},"end":{"line":41,"column":9}},{"start":{"line":35,"column":8},"end":{"line":41,"column":9}}]},"4":{"loc":{"start":{"line":37,"column":21},"end":{"line":37,"column":58}},"type":"cond-expr","locations":[{"start":{"line":37,"column":29},"end":{"line":37,"column":42}},{"start":{"line":37,"column":45},"end":{"line":37,"column":58}}]},"5":{"loc":{"start":{"line":52,"column":21},"end":{"line":52,"column":38}},"type":"binary-expr","locations":[{"start":{"line":52,"column":21},"end":{"line":52,"column":26}},{"start":{"line":52,"column":30},"end":{"line":52,"column":38}}]},"6":{"loc":{"start":{"line":56,"column":11},"end":{"line":56,"column":48}},"type":"binary-expr","locations":[{"start":{"line":56,"column":11},"end":{"line":56,"column":33}},{"start":{"line":56,"column":37},"end":{"line":56,"column":48}}]},"7":{"loc":{"start":{"line":74,"column":12},"end":{"line":76,"column":13}},"type":"if","locations":[{"start":{"line":74,"column":12},"end":{"line":76,"column":13}},{"start":{"line":74,"column":12},"end":{"line":76,"column":13}}]},"8":{"loc":{"start":{"line":127,"column":23},"end":{"line":127,"column":89}},"type":"cond-expr","locations":[{"start":{"line":127,"column":42},"end":{"line":127,"column":44}},{"start":{"line":127,"column":47},"end":{"line":127,"column":89}}]},"9":{"loc":{"start":{"line":140,"column":11},"end":{"line":140,"column":21}},"type":"binary-expr","locations":[{"start":{"line":140,"column":11},"end":{"line":140,"column":15}},{"start":{"line":140,"column":19},"end":{"line":140,"column":21}}]},"10":{"loc":{"start":{"line":141,"column":16},"end":{"line":141,"column":33}},"type":"binary-expr","locations":[{"start":{"line":141,"column":16},"end":{"line":141,"column":25}},{"start":{"line":141,"column":29},"end":{"line":141,"column":33}}]},"11":{"loc":{"start":{"line":142,"column":19},"end":{"line":142,"column":36}},"type":"binary-expr","locations":[{"start":{"line":142,"column":19},"end":{"line":142,"column":31}},{"start":{"line":142,"column":35},"end":{"line":142,"column":36}}]},"12":{"loc":{"start":{"line":153,"column":4},"end":{"line":158,"column":5}},"type":"if","locations":[{"start":{"line":153,"column":4},"end":{"line":158,"column":5}},{"start":{"line":153,"column":4},"end":{"line":158,"column":5}}]},"13":{"loc":{"start":{"line":155,"column":8},"end":{"line":157,"column":9}},"type":"if","locations":[{"start":{"line":155,"column":8},"end":{"line":157,"column":9}},{"start":{"line":155,"column":8},"end":{"line":157,"column":9}}]}},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0},"f":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0},"b":{"0":[0,0],"1":[0,0],"2":[0,0],"3":[0,0],"4":[0,0],"5":[0,0],"6":[0,0],"7":[0,0],"8":[0,0],"9":[0,0],"10":[0,0],"11":[0,0],"12":[0,0],"13":[0,0]}}} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/CHANGELOG.md deleted file mode 100644 index 8be4ead37..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/CHANGELOG.md +++ /dev/null @@ -1,14 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. - - -# [1.0.0](https://github.com/istanbuljs/istanbul-reports/compare/v1.0.0-alpha.8...v1.0.0) (2016-10-17) - - -### Bug Fixes - -* fail gracefully if structuredText[startLine] is undefined ([#10](https://github.com/istanbuljs/istanbul-reports/issues/10)) ([bed1d13](https://github.com/istanbuljs/istanbul-reports/commit/bed1d13)) -* preserve escape char of json key path on Windows ([#12](https://github.com/istanbuljs/istanbul-reports/issues/12)) ([4e5266e](https://github.com/istanbuljs/istanbul-reports/commit/4e5266e)) -* skip branch if meta does not exist (fixes speedskater/babel-plugin-rewire[#165](https://github.com/istanbuljs/istanbul-reports/issues/165)) ([#11](https://github.com/istanbuljs/istanbul-reports/issues/11)) ([62bae2f](https://github.com/istanbuljs/istanbul-reports/commit/62bae2f)) -* Teamcity reporter modified to send proper coverage values ([#8](https://github.com/istanbuljs/istanbul-reports/issues/8)) ([4147f50](https://github.com/istanbuljs/istanbul-reports/commit/4147f50)) diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/LICENSE b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/LICENSE deleted file mode 100644 index d55d2916e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/README.md b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/README.md deleted file mode 100644 index 7d41a45f9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/README.md +++ /dev/null @@ -1,13 +0,0 @@ -istanbul-reports -================ - -[![Build Status](https://travis-ci.org/istanbuljs/istanbul-reports.svg?branch=master)](https://travis-ci.org/istanbuljs/istanbul-reports) - -* node.getRelativeName - -* context.getSource(filePath) -* context.classForPercent(type, percent) -* context.console.colorize(str, class) -* context.writer -* context.console.write -* context.console.println diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/index.js deleted file mode 100644 index d442c58b5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/index.js +++ /dev/null @@ -1,19 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var path = require('path'); - -module.exports = { - create: function (name, cfg) { - cfg = cfg || {}; - var Cons = require(path.join(__dirname, 'lib', name)); - return new Cons(cfg); - } -}; - - - - - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/clover/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/clover/index.js deleted file mode 100644 index 8d17f43d0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/clover/index.js +++ /dev/null @@ -1,164 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -function CloverReport(opts) { - this.cw = null; - this.xml = null; - this.projectRoot = opts.projectRoot || process.cwd(); - this.file = opts.file || 'clover.xml'; -} - -function asJavaPackage(node) { - return node.getRelativeName(). - replace(/\//g, '.'). - replace(/\\/g, '.'). - replace(/\.$/, ''); -} - -function asClassName(node) { - return node.getRelativeName().replace(/.*[\\\/]/, ''); -} - -CloverReport.prototype.onStart = function (root, context) { - this.cw = context.writer.writeFile(this.file); - this.xml = context.getXMLWriter(this.cw); - this.writeRootStats(root, context); -}; - -CloverReport.prototype.onEnd = function () { - this.xml.closeAll(); - this.cw.close(); -}; - -CloverReport.prototype.getTreeStats = function (node, context) { - - var state = { - packages: 0, - files: 0, - classes: 0, - }, - visitor = { - onSummary: function (node, state) { - var metrics = node.getCoverageSummary(true); - if (metrics) { - state.packages += 1; - } - }, - onDetail: function (node, state) { - state.classes += 1; - state.files += 1; - } - }; - node.visit(context.getVisitor(visitor), state); - return state; -}; - -CloverReport.prototype.writeRootStats = function (node, context) { - - var metrics = node.getCoverageSummary(), - attrs = { - statements: metrics.lines.total, - coveredstatements: metrics.lines.covered, - conditionals: metrics.branches.total, - coveredconditionals: metrics.branches.covered, - methods: metrics.functions.total, - coveredmethods: metrics.functions.covered, - elements: metrics.lines.total + metrics.branches.total + metrics.functions.total, - coveredelements: metrics.lines.covered + metrics.branches.covered + metrics.functions.covered, - complexity: 0, - loc: metrics.lines.total, - ncloc: metrics.lines.total // what? copied as-is from old report - }, - treeStats; - - this.cw.println(''); - this.xml.openTag('coverage', { - generated: Date.now().toString(), - clover: '3.2.0' - }); - - this.xml.openTag('project', { - timestamp: Date.now().toString(), - name: 'All files', - }); - - treeStats = this.getTreeStats(node, context); - Object.keys(treeStats).forEach(function (k) { - attrs[k] = treeStats[k]; - }); - - this.xml.openTag('metrics', attrs); - -}; - -CloverReport.prototype.writeMetrics = function (metrics) { - this.xml.inlineTag('metrics', { - statements: metrics.lines.total, - coveredstatements: metrics.lines.covered, - conditionals: metrics.branches.total, - coveredconditionals: metrics.branches.covered, - methods: metrics.functions.total, - coveredmethods: metrics.functions.covered - }); -}; - -CloverReport.prototype.onSummary = function (node) { - if (node.isRoot()) { - return; - } - var metrics = node.getCoverageSummary(true); - if (!metrics) { - return; - } - - this.xml.openTag('package', { - name: asJavaPackage(node) - }); - this.writeMetrics(metrics); -}; - -CloverReport.prototype.onSummaryEnd = function (node) { - if (node.isRoot()) { - return; - } - this.xml.closeTag('package'); -}; - -CloverReport.prototype.onDetail = function (node) { - var that = this, - fileCoverage = node.getFileCoverage(), - metrics = node.getCoverageSummary(), - branchByLine = fileCoverage.getBranchCoverageByLine(), - lines; - - this.xml.openTag('file', { - name: asClassName(node), - path: fileCoverage.path - }); - - this.writeMetrics(metrics); - - lines = fileCoverage.getLineCoverage(); - Object.keys(lines).forEach(function (k) { - var attrs = { - num: k, - count: lines[k], - type: 'stmt' - }, - branchDetail = branchByLine[k]; - - if (branchDetail) { - attrs.type = 'cond'; - attrs.truecount = branchDetail.covered; - attrs.falsecount = branchDetail.total - branchDetail.covered; - } - that.xml.inlineTag('line', attrs); - }); - - this.xml.closeTag('file'); -}; - -module.exports = CloverReport; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/cobertura/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/cobertura/index.js deleted file mode 100644 index b9bd2f767..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/cobertura/index.js +++ /dev/null @@ -1,142 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var path = require('path'); -function CoberturaReport(opts) { - this.cw = null; - this.xml = null; - this.projectRoot = opts.projectRoot || process.cwd(); - this.file = opts.file || 'cobertura-coverage.xml'; -} - -function asJavaPackage(node) { - return node.getRelativeName(). - replace(/\//g, '.'). - replace(/\\/g, '.'). - replace(/\.$/, ''); -} - -function asClassName(node) { - return node.getRelativeName().replace(/.*[\\\/]/, ''); -} - -CoberturaReport.prototype.onStart = function (root, context) { - this.cw = context.writer.writeFile(this.file); - this.xml = context.getXMLWriter(this.cw); - this.writeRootStats(root); -}; - -CoberturaReport.prototype.onEnd = function () { - this.xml.closeAll(); - this.cw.close(); -}; - -CoberturaReport.prototype.writeRootStats = function (node) { - - var metrics = node.getCoverageSummary(); - this.cw.println(''); - this.cw.println(''); - this.xml.openTag('coverage', { - 'lines-valid': metrics.lines.total, - 'lines-covered': metrics.lines.covered, - 'line-rate': metrics.lines.pct / 100.0, - 'branches-valid': metrics.branches.total, - 'branches-covered': metrics.branches.covered, - 'branch-rate': metrics.branches.pct / 100.0, - timestamp: Date.now().toString(), - complexity: '0', - version: '0.1' - }); - this.xml.openTag('sources'); - this.xml.inlineTag('source', null, this.projectRoot); - this.xml.closeTag('sources'); - this.xml.openTag('packages'); -}; - -CoberturaReport.prototype.onSummary = function (node) { - if (node.isRoot()) { - return; - } - var metrics = node.getCoverageSummary(true); - if (!metrics) { - return; - } - this.xml.openTag('package', { - name: asJavaPackage(node), - 'line-rate': metrics.lines.pct / 100.0, - 'branch-rate': metrics.branches.pct / 100.0 - }); - this.xml.openTag('classes'); -}; - -CoberturaReport.prototype.onSummaryEnd = function (node) { - if (node.isRoot()) { - return; - } - this.xml.closeTag('classes'); - this.xml.closeTag('package'); -}; - -CoberturaReport.prototype.onDetail = function (node) { - var that = this, - fileCoverage = node.getFileCoverage(), - metrics = node.getCoverageSummary(), - branchByLine = fileCoverage.getBranchCoverageByLine(), - fnMap, - lines; - - this.xml.openTag('class', { - name: asClassName(node), - filename: path.relative(this.projectRoot, fileCoverage.path), - 'line-rate': metrics.lines.pct / 100.0, - 'branch-rate': metrics.branches.pct / 100.0 - }); - - this.xml.openTag('methods'); - fnMap = fileCoverage.fnMap; - Object.keys(fnMap).forEach(function (k) { - var name = fnMap[k].name, - hits = fileCoverage.f[k]; - that.xml.openTag('method', { - name: name, - hits: hits, - signature: '()V' //fake out a no-args void return - }); - that.xml.openTag('lines'); - //Add the function definition line and hits so that jenkins cobertura plugin records method hits - that.xml.inlineTag('line', { - number: fnMap[k].decl.start.line, - hits: hits - }); - that.xml.closeTag('lines'); - that.xml.closeTag('method'); - - }); - this.xml.closeTag('methods'); - - this.xml.openTag('lines'); - lines = fileCoverage.getLineCoverage(); - Object.keys(lines).forEach(function (k) { - var attrs = { - number: k, - hits: lines[k], - branch: 'false' - }, - branchDetail = branchByLine[k]; - - if (branchDetail) { - attrs.branch = true; - attrs['condition-coverage'] = branchDetail.coverage + - '% (' + branchDetail.covered + '/' + branchDetail.total + ')'; - } - that.xml.inlineTag('line', attrs); - }); - - this.xml.closeTag('lines'); - this.xml.closeTag('class'); -}; - -module.exports = CoberturaReport; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/annotator.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/annotator.js deleted file mode 100644 index 4909f30de..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/annotator.js +++ /dev/null @@ -1,230 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -var InsertionText = require('./insertion-text'), - lt = '\u0001', - gt = '\u0002', - RE_LT = //g, - RE_AMP = /&/g, - RE_lt = /\u0001/g, - RE_gt = /\u0002/g; - -function title(str) { - return ' title="' + str + '" '; -} - -function customEscape(text) { - text = String(text); - return text.replace(RE_AMP, '&') - .replace(RE_LT, '<') - .replace(RE_GT, '>') - .replace(RE_lt, '<') - .replace(RE_gt, '>'); -} - -function annotateLines(fileCoverage, structuredText) { - var lineStats = fileCoverage.getLineCoverage(); - if (!lineStats) { - return; - } - Object.keys(lineStats).forEach(function (lineNumber) { - var count = lineStats[lineNumber]; - if (structuredText[lineNumber]) { - structuredText[lineNumber].covered = count > 0 ? 'yes' : 'no'; - structuredText[lineNumber].hits = count; - } - }); -} - -function annotateStatements(fileCoverage, structuredText) { - var statementStats = fileCoverage.s, - statementMeta = fileCoverage.statementMap; - Object.keys(statementStats).forEach(function (stName) { - var count = statementStats[stName], - meta = statementMeta[stName], - type = count > 0 ? 'yes' : 'no', - startCol = meta.start.column, - endCol = meta.end.column + 1, - startLine = meta.start.line, - endLine = meta.end.line, - openSpan = lt + 'span class="' + (meta.skip ? 'cstat-skip' : 'cstat-no') + '"' + title('statement not covered') + gt, - closeSpan = lt + '/span' + gt, - text; - - if (type === 'no' && structuredText[startLine]) { - if (endLine !== startLine) { - endLine = startLine; - endCol = structuredText[startLine].text.originalLength(); - } - text = structuredText[startLine].text; - text.wrap(startCol, - openSpan, - startLine === endLine ? endCol : text.originalLength(), - closeSpan); - } - }); -} - -function annotateFunctions(fileCoverage, structuredText) { - - var fnStats = fileCoverage.f, - fnMeta = fileCoverage.fnMap; - if (!fnStats) { - return; - } - Object.keys(fnStats).forEach(function (fName) { - var count = fnStats[fName], - meta = fnMeta[fName], - type = count > 0 ? 'yes' : 'no', - startCol = meta.decl.start.column, - endCol = meta.decl.end.column + 1, - startLine = meta.decl.start.line, - endLine = meta.decl.end.line, - openSpan = lt + 'span class="' + (meta.skip ? 'fstat-skip' : 'fstat-no') + '"' + title('function not covered') + gt, - closeSpan = lt + '/span' + gt, - text; - - if (type === 'no' && structuredText[startLine]) { - if (endLine !== startLine) { - endLine = startLine; - endCol = structuredText[startLine].text.originalLength(); - } - text = structuredText[startLine].text; - text.wrap(startCol, - openSpan, - startLine === endLine ? endCol : text.originalLength(), - closeSpan); - } - }); -} - -function annotateBranches(fileCoverage, structuredText) { - var branchStats = fileCoverage.b, - branchMeta = fileCoverage.branchMap; - if (!branchStats) { - return; - } - - Object.keys(branchStats).forEach(function (branchName) { - var branchArray = branchStats[branchName], - sumCount = branchArray.reduce(function (p, n) { - return p + n; - }, 0), - metaArray = branchMeta[branchName].locations, - i, - count, - meta, - type, - startCol, - endCol, - startLine, - endLine, - openSpan, - closeSpan, - text; - - // only highlight if partial branches are missing or if there is a - // single uncovered branch. - if (sumCount > 0 || (sumCount === 0 && branchArray.length === 1)) { - for (i = 0; i < branchArray.length && i < metaArray.length; i += 1) { - count = branchArray[i]; - meta = metaArray[i]; - type = count > 0 ? 'yes' : 'no'; - startCol = meta.start.column; - endCol = meta.end.column + 1; - startLine = meta.start.line; - endLine = meta.end.line; - openSpan = lt + 'span class="branch-' + i + ' ' + - (meta.skip ? 'cbranch-skip' : 'cbranch-no') + '"' - + title('branch not covered') + gt; - closeSpan = lt + '/span' + gt; - - if (count === 0 && structuredText[startLine]) { //skip branches taken - if (endLine !== startLine) { - endLine = startLine; - endCol = structuredText[startLine].text.originalLength(); - } - text = structuredText[startLine].text; - if (branchMeta[branchName].type === 'if') { - // 'if' is a special case - // since the else branch might not be visible, being non-existent - text.insertAt(startCol, lt + 'span class="' + - (meta.skip ? 'skip-if-branch' : 'missing-if-branch') + '"' + - title((i === 0 ? 'if' : 'else') + ' path not taken') + gt + - (i === 0 ? 'I' : 'E') + lt + '/span' + gt, true, false); - } else { - text.wrap(startCol, - openSpan, - startLine === endLine ? endCol : text.originalLength(), - closeSpan); - } - } - } - } - }); -} - -function annotateSourceCode(fileCoverage, sourceStore) { - var codeArray, - lineCoverageArray; - try { - var sourceText = sourceStore.getSource(fileCoverage.path), - code = sourceText.split(/(?:\r?\n)|\r/), - count = 0, - structured = code.map(function (str) { - count += 1; - return { - line: count, - covered: 'neutral', - hits: 0, - text: new InsertionText(str, true) - }; - }); - structured.unshift({line: 0, covered: null, text: new InsertionText("")}); - annotateLines(fileCoverage, structured); - //note: order is important, since statements typically result in spanning the whole line and doing branches late - //causes mismatched tags - annotateBranches(fileCoverage, structured); - annotateFunctions(fileCoverage, structured); - annotateStatements(fileCoverage, structured); - structured.shift(); - - codeArray = structured.map(function (item) { - return customEscape(item.text.toString()) || ' '; - }); - - lineCoverageArray = structured.map(function (item) { - return { - covered: item.covered, - hits: item.hits > 0 ? item.hits + 'x' : ' ' - }; - }); - - return { - annotatedCode: codeArray, - lineCoverage: lineCoverageArray, - maxLines: structured.length - }; - } catch (ex) { - codeArray = [ ex.message ]; - lineCoverageArray = [ { covered: 'no', hits: 0 } ]; - String(ex.stack || '').split(/\r?\n/).forEach(function (line) { - codeArray.push(line); - lineCoverageArray.push({ covered: 'no', hits: 0 }); - }); - return { - annotatedCode: codeArray, - lineCoverage: lineCoverageArray, - maxLines: codeArray.length - }; - } -} - -module.exports = { - annotateSourceCode: annotateSourceCode -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/base.css b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/base.css deleted file mode 100644 index 417c7adc9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/base.css +++ /dev/null @@ -1,212 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } - - -.medium .chart { border:1px solid #666; } -.medium .cover-fill { background: #666; } - -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } -.medium { background: #eaeaea; } - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/sort-arrow-sprite.png b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/sort-arrow-sprite.png deleted file mode 100644 index 03f704a609c6fd0dbfdac63466a7d7c958b5cbf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/vendor/prettify.css b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/vendor/prettify.css deleted file mode 100644 index b317a7cda..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/vendor/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/vendor/prettify.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/vendor/prettify.js deleted file mode 100644 index ef51e0386..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/assets/vendor/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/helpers.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/helpers.js deleted file mode 100644 index 00cdd605f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/helpers.js +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -function registerHelpers(handlebars) { - - handlebars.registerHelper('show_picture', function (opts) { - var num = Number(opts.fn(this)), - rest, - cls = ''; - if (isFinite(num)) { - if (num === 100) { - cls = ' cover-full'; - } - num = Math.floor(num); - rest = 100 - num; - return '
' + - '
'; - } else { - return ''; - } - }); - - handlebars.registerHelper('if_has_ignores', function (metrics, opts) { - return (metrics.statements.skipped + - metrics.functions.skipped + - metrics.branches.skipped) === 0 ? '' : opts.fn(this); - }); - - handlebars.registerHelper('show_ignores', function (metrics) { - var statements = metrics.statements.skipped, - functions = metrics.functions.skipped, - branches = metrics.branches.skipped, - result; - - if (statements === 0 && functions === 0 && branches === 0) { - return 'none'; - } - - result = []; - if (statements > 0) { - result.push(statements === 1 ? '1 statement' : statements + ' statements'); - } - if (functions > 0) { - result.push(functions === 1 ? '1 function' : functions + ' functions'); - } - if (branches > 0) { - result.push(branches === 1 ? '1 branch' : branches + ' branches'); - } - - return result.join(', '); - }); - - handlebars.registerHelper('show_lines', function (opts) { - var maxLines = Number(opts.fn(this)), - i, - array = []; - for (i = 0; i < maxLines; i += 1) { - array[i] = i + 1; - } - return array.join('\n'); - }); - - handlebars.registerHelper('show_line_execution_counts', function (context) { - var array = []; - context.forEach(function (data) { - array.push('' + data.hits + ''); - }); - return array.join('\n'); - }); - - handlebars.registerHelper('show_code', function (context /*, opts */) { - return context.join('\n'); - }); -} - -module.exports = { - registerHelpers: registerHelpers -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/index.js deleted file mode 100644 index 402c08279..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/index.js +++ /dev/null @@ -1,224 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -/*jshint maxlen: 300 */ -var fs = require('fs'), - path = require('path'), - handlebars = require('handlebars').create(), - annotator = require('./annotator'), - helpers = require('./helpers'), - templateFor = function (name) { - return handlebars.compile(fs.readFileSync(path.resolve(__dirname, 'templates', name + '.txt'), 'utf8')); - }, - headerTemplate = templateFor('head'), - footerTemplate = templateFor('foot'), - detailTemplate = handlebars.compile([ - '', - '{{#show_lines}}{{maxLines}}{{/show_lines}}', - '{{#show_line_execution_counts lineCoverage}}{{maxLines}}{{/show_line_execution_counts}}', - '
{{#show_code annotatedCode}}{{/show_code}}
', - '\n' - ].join('')), - summaryTableHeader = [ - '
', - '', - '', - '', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - '', - '', - '' - ].join('\n'), - summaryLineTemplate = handlebars.compile([ - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '\n' - ].join('\n\t')), - summaryTableFooter = [ - '', - '
FileStatementsBranchesFunctionsLines
{{file}}
{{#show_picture}}{{metrics.statements.pct}}{{/show_picture}}
{{metrics.statements.pct}}%{{metrics.statements.covered}}/{{metrics.statements.total}}{{metrics.branches.pct}}%{{metrics.branches.covered}}/{{metrics.branches.total}}{{metrics.functions.pct}}%{{metrics.functions.covered}}/{{metrics.functions.total}}{{metrics.lines.pct}}%{{metrics.lines.covered}}/{{metrics.lines.total}}
', - '
' - ].join('\n'); - -helpers.registerHelpers(handlebars); - -var standardLinkMapper = { - - getPath: function (node) { - if (typeof node === 'string') { - return node; - } - var filePath = node.getQualifiedName(); - if (node.isSummary()) { - if (filePath !== '') { - filePath += "/index.html"; - } else { - filePath = "index.html"; - } - } else { - filePath += ".html"; - } - return filePath; - }, - - relativePath: function (source, target) { - var targetPath = this.getPath(target), - sourcePath = path.dirname(this.getPath(source)); - return path.relative(sourcePath, targetPath); - }, - - assetPath: function (node, name) { - return this.relativePath(this.getPath(node), name); - } -}; - -function getBreadcrumbHtml(node, linkMapper) { - var parent = node.getParent(), - nodePath = [], - linkPath; - - while (parent) { - nodePath.push(parent); - parent = parent.getParent(); - } - - linkPath = nodePath.map(function (ancestor) { - var target = linkMapper.relativePath(node, ancestor), - name = ancestor.getRelativeName() || 'All files'; - return '' + name + ''; - }); - - linkPath.reverse(); - return linkPath.length > 0 ? linkPath.join(' / ') + ' ' + - node.getRelativeName() : 'All files'; -} - -function fillTemplate(node, templateData, linkMapper, context) { - var summary = node.getCoverageSummary(); - templateData.entity = node.getQualifiedName() || 'All files'; - templateData.metrics = summary; - templateData.reportClass = context.classForPercent('statements', summary.statements.pct); - templateData.pathHtml = getBreadcrumbHtml(node, linkMapper); - templateData.base = { - css: linkMapper.assetPath(node, 'base.css') - }; - templateData.sorter = { - js: linkMapper.assetPath(node, 'sorter.js'), - image: linkMapper.assetPath(node, 'sort-arrow-sprite.png') - }; - templateData.prettify = { - js: linkMapper.assetPath(node, 'prettify.js'), - css: linkMapper.assetPath(node, 'prettify.css') - }; -} - -function HtmlReport(opts) { - this.verbose = opts.verbose; - this.linkMapper = opts.linkMapper || standardLinkMapper; - this.subdir = opts.subdir || ''; - this.date = Date(); -} - -HtmlReport.prototype.getTemplateData = function () { - return { datetime: this.date }; -}; - -HtmlReport.prototype.getWriter = function (context) { - if (!this.subdir) { - return context.writer; - } - return context.writer.writerForDir(this.subdir); -}; - -HtmlReport.prototype.onStart = function (root, context) { - var that = this, - copyAssets = function (subdir, writer) { - var srcDir = path.resolve(__dirname, 'assets', subdir); - fs.readdirSync(srcDir).forEach(function (f) { - var resolvedSource = path.resolve(srcDir, f), - resolvedDestination = '.', - stat = fs.statSync(resolvedSource), - dest; - - if (stat.isFile()) { - dest = resolvedDestination + '/' + f; - if (this.verbose) { - console.log('Write asset: ' + dest); - } - writer.copyFile(resolvedSource, dest); - } - }); - }; - - ['.', 'vendor'].forEach(function (subdir) { - copyAssets(subdir, that.getWriter(context)); - }); -}; - -HtmlReport.prototype.onSummary = function (node, context) { - var linkMapper = this.linkMapper, - templateData = this.getTemplateData(), - children = node.getChildren(), - cw; - - fillTemplate(node, templateData, linkMapper, context); - cw = this.getWriter(context).writeFile(linkMapper.getPath(node)); - cw.write(headerTemplate(templateData)); - cw.write(summaryTableHeader); - children.forEach(function (child) { - var metrics = child.getCoverageSummary(), - reportClasses = { - statements: context.classForPercent('statements', metrics.statements.pct), - lines: context.classForPercent('lines', metrics.lines.pct), - functions: context.classForPercent('functions', metrics.functions.pct), - branches: context.classForPercent('branches', metrics.branches.pct) - }, - data = { - metrics: metrics, - reportClasses: reportClasses, - file: child.getRelativeName(), - output: linkMapper.relativePath(node, child) - }; - cw.write(summaryLineTemplate(data) + '\n'); - }); - cw.write(summaryTableFooter); - cw.write(footerTemplate(templateData)); - cw.close(); -}; - -HtmlReport.prototype.onDetail = function (node, context) { - var linkMapper = this.linkMapper, - templateData = this.getTemplateData(), - cw; - - fillTemplate(node, templateData, linkMapper, context); - cw = this.getWriter(context).writeFile(linkMapper.getPath(node)); - cw.write(headerTemplate(templateData)); - cw.write('
\n');
-    cw.write(detailTemplate(annotator.annotateSourceCode(node.getFileCoverage(), context)));
-    cw.write('
\n'); - cw.write(footerTemplate(templateData)); - cw.close(); -}; - -module.exports = HtmlReport; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/insertion-text.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/insertion-text.js deleted file mode 100644 index fcd09fb90..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/insertion-text.js +++ /dev/null @@ -1,108 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -function InsertionText(text, consumeBlanks) { - this.text = text; - this.origLength = text.length; - this.offsets = []; - this.consumeBlanks = consumeBlanks; - this.startPos = this.findFirstNonBlank(); - this.endPos = this.findLastNonBlank(); -} - -var WHITE_RE = /[ \f\n\r\t\v\u00A0\u2028\u2029]/; - -InsertionText.prototype = { - - findFirstNonBlank: function () { - var pos = -1, - text = this.text, - len = text.length, - i; - for (i = 0; i < len; i += 1) { - if (!text.charAt(i).match(WHITE_RE)) { - pos = i; - break; - } - } - return pos; - }, - findLastNonBlank: function () { - var text = this.text, - len = text.length, - pos = text.length + 1, - i; - for (i = len - 1; i >= 0; i -= 1) { - if (!text.charAt(i).match(WHITE_RE)) { - pos = i; - break; - } - } - return pos; - }, - originalLength: function () { - return this.origLength; - }, - - insertAt: function (col, str, insertBefore, consumeBlanks) { - consumeBlanks = typeof consumeBlanks === 'undefined' ? this.consumeBlanks : consumeBlanks; - col = col > this.originalLength() ? this.originalLength() : col; - col = col < 0 ? 0 : col; - - if (consumeBlanks) { - if (col <= this.startPos) { - col = 0; - } - if (col > this.endPos) { - col = this.origLength; - } - } - - var len = str.length, - offset = this.findOffset(col, len, insertBefore), - realPos = col + offset, - text = this.text; - this.text = text.substring(0, realPos) + str + text.substring(realPos); - return this; - }, - - findOffset: function (pos, len, insertBefore) { - var offsets = this.offsets, - offsetObj, - cumulativeOffset = 0, - i; - - for (i = 0; i < offsets.length; i += 1) { - offsetObj = offsets[i]; - if (offsetObj.pos < pos || (offsetObj.pos === pos && !insertBefore)) { - cumulativeOffset += offsetObj.len; - } - if (offsetObj.pos >= pos) { - break; - } - } - if (offsetObj && offsetObj.pos === pos) { - offsetObj.len += len; - } else { - offsets.splice(i, 0, { pos: pos, len: len }); - } - return cumulativeOffset; - }, - - wrap: function (startPos, startText, endPos, endText, consumeBlanks) { - this.insertAt(startPos, startText, true, consumeBlanks); - this.insertAt(endPos, endText, false, consumeBlanks); - return this; - }, - - wrapLine: function (startText, endText) { - this.wrap(0, startText, this.originalLength(), endText); - }, - - toString: function () { - return this.text; - } -}; - -module.exports = InsertionText; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/templates/foot.txt b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/templates/foot.txt deleted file mode 100644 index e853251dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/templates/foot.txt +++ /dev/null @@ -1,20 +0,0 @@ -
-
- - -{{#if prettify}} - - -{{/if}} - - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/templates/head.txt b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/templates/head.txt deleted file mode 100644 index f98094e5f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/html/templates/head.txt +++ /dev/null @@ -1,60 +0,0 @@ - - - - Code coverage report for {{entity}} - -{{#if prettify}} - -{{/if}} - - - - - -
-
-

- {{{pathHtml}}} -

-
- {{#with metrics.statements}} -
- {{pct}}% - Statements - {{covered}}/{{total}} -
- {{/with}} - {{#with metrics.branches}} -
- {{pct}}% - Branches - {{covered}}/{{total}} -
- {{/with}} - {{#with metrics.functions}} -
- {{pct}}% - Functions - {{covered}}/{{total}} -
- {{/with}} - {{#with metrics.lines}} -
- {{pct}}% - Lines - {{covered}}/{{total}} -
- {{/with}} - {{#if_has_ignores metrics}} -
- {{#show_ignores metrics}}{{/show_ignores}} - Ignored      -
- {{/if_has_ignores}} -
-
-
diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/json-summary/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/json-summary/index.js deleted file mode 100644 index 7820a32d7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/json-summary/index.js +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -function JsonSummaryReport(opts) { - this.file = opts.file || 'coverage-summary.json'; - this.contentWriter = null; - this.first = true; -} - -JsonSummaryReport.prototype.onStart = function (root, context) { - this.contentWriter = context.writer.writeFile(this.file); - this.contentWriter.write("{"); -}; - -JsonSummaryReport.prototype.writeSummary = function (filePath, sc) { - var cw = this.contentWriter; - if (this.first) { - this.first = false; - } else { - cw.write(","); - } - cw.write('"'); - cw.write(filePath); - cw.write('": '); - cw.write(JSON.stringify(sc)); - cw.println(""); -}; - -JsonSummaryReport.prototype.onSummary = function (node) { - if (!node.isRoot()) { - return; - } - this.writeSummary("total", node.getCoverageSummary()); -}; - -JsonSummaryReport.prototype.onDetail = function (node) { - this.writeSummary(node.getFileCoverage().path, node.getCoverageSummary()); -}; - -JsonSummaryReport.prototype.onEnd = function () { - var cw = this.contentWriter; - cw.println("}"); - cw.close(); -}; - -module.exports = JsonSummaryReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/json/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/json/index.js deleted file mode 100644 index 70426aac7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/json/index.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -function JsonReport(opts) { - this.file = opts.file || 'coverage-final.json'; - this.first = true; -} - -JsonReport.prototype.onStart = function (root, context) { - this.contentWriter = context.writer.writeFile(this.file); - this.contentWriter.write("{"); -}; - -JsonReport.prototype.onDetail = function (node) { - var fc = node.getFileCoverage(), - key = fc.path, - cw = this.contentWriter; - - if (this.first) { - this.first = false; - } else { - cw.write(","); - } - cw.write(JSON.stringify(key)); - cw.write(': '); - cw.write(JSON.stringify(fc)); - cw.println(""); -}; - -JsonReport.prototype.onEnd = function () { - var cw = this.contentWriter; - cw.println("}"); - cw.close(); -}; - -module.exports = JsonReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/lcov/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/lcov/index.js deleted file mode 100644 index 97e34c977..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/lcov/index.js +++ /dev/null @@ -1,29 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var LcovOnlyReport = require('../lcovonly'), - HtmlReport = require('../html'); - -function LcovReport() { - this.lcov = new LcovOnlyReport({file: 'lcov.info'}); - this.html = new HtmlReport({ subdir: 'lcov-report'}); -} - -['Start', 'End', 'Summary', 'SummaryEnd', 'Detail'].forEach(function (what) { - var meth = 'on' + what; - LcovReport.prototype[meth] = function () { - var args = Array.prototype.slice.call(arguments), - lcov = this.lcov, - html = this.html; - - if (lcov[meth]) { - lcov[meth].apply(lcov, args); - } - if (html[meth]) { - html[meth].apply(html, args); - } - }; -}); - -module.exports = LcovReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/lcovonly/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/lcovonly/index.js deleted file mode 100644 index 6d436e42b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/lcovonly/index.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -function LcovOnlyReport(opts) { - this.file = opts.file || 'lcov.info'; - this.contentWriter = null; -} - -LcovOnlyReport.prototype.onStart = function (root, context) { - this.contentWriter = context.writer.writeFile(this.file); -}; - -LcovOnlyReport.prototype.onDetail = function (node) { - - var fc = node.getFileCoverage(), - writer = this.contentWriter, - functions = fc.f, - functionMap = fc.fnMap, - lines = fc.getLineCoverage(), - branches = fc.b, - branchMap = fc.branchMap, - summary = node.getCoverageSummary(); - - writer.println('TN:'); //no test name - writer.println('SF:' + fc.path); - - Object.keys(functions).forEach(function (key) { - var meta = functionMap[key]; - writer.println('FN:' + [meta.decl.start.line, meta.name].join(',')); - }); - writer.println('FNF:' + summary.functions.total); - writer.println('FNH:' + summary.functions.covered); - - Object.keys(functions).forEach(function (key) { - var stats = functions[key], - meta = functionMap[key]; - writer.println('FNDA:' + [stats, meta.name].join(',')); - }); - - Object.keys(lines).forEach(function (key) { - var stat = lines[key]; - writer.println('DA:' + [key, stat].join(',')); - }); - writer.println('LF:' + summary.lines.total); - writer.println('LH:' + summary.lines.covered); - - Object.keys(branches).forEach(function (key) { - var branchArray = branches[key], - meta = branchMap[key], - line = meta.loc.start.line, - i = 0; - branchArray.forEach(function (b) { - writer.println('BRDA:' + [line, key, i, b].join(',')); - i += 1; - }); - }); - writer.println('BRF:' + summary.branches.total); - writer.println('BRH:' + summary.branches.covered); - writer.println('end_of_record'); -}; - -LcovOnlyReport.prototype.onEnd = function () { - this.contentWriter.close(); -}; - -module.exports = LcovOnlyReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/none/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/none/index.js deleted file mode 100644 index 466797820..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/none/index.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -function NoneReport() { -} - -module.exports = NoneReport; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/teamcity/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/teamcity/index.js deleted file mode 100644 index 34a90fc55..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/teamcity/index.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -function TeamcityReport(opts) { - opts = opts || {}; - this.file = opts.file || null; - this.blockName = opts.blockName || 'Code Coverage Summary'; -} - -function lineForKey(value, teamcityVar) { - return '##teamcity[buildStatisticValue key=\'' + teamcityVar + '\' value=\'' + value + '\']'; -} - -TeamcityReport.prototype.onStart = function (node, context) { - var metrics = node.getCoverageSummary(), - cw; - - cw = context.writer.writeFile(this.file); - cw.println(''); - cw.println('##teamcity[blockOpened name=\''+ this.blockName +'\']'); - - //Statements Covered - cw.println(lineForKey(metrics.statements.covered, 'CodeCoverageAbsBCovered')); - cw.println(lineForKey(metrics.statements.total, 'CodeCoverageAbsBTotal')); - - //Branches Covered - cw.println(lineForKey(metrics.branches.covered, 'CodeCoverageAbsRCovered')); - cw.println(lineForKey(metrics.branches.total, 'CodeCoverageAbsRTotal')); - - //Functions Covered - cw.println(lineForKey(metrics.functions.covered, 'CodeCoverageAbsMCovered')); - cw.println(lineForKey(metrics.functions.total, 'CodeCoverageAbsMTotal')); - - //Lines Covered - cw.println(lineForKey(metrics.lines.covered, 'CodeCoverageAbsLCovered')); - cw.println(lineForKey(metrics.lines.total, 'CodeCoverageAbsLTotal')); - - cw.println('##teamcity[blockClosed name=\''+ this.blockName +'\']'); - cw.close(); -}; - -module.exports = TeamcityReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/text-lcov/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/text-lcov/index.js deleted file mode 100644 index 9aca61e66..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/text-lcov/index.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var util = require('util'), - LcovOnly = require('../lcovonly'); - -function TextLcov(opts) { - opts.file = '-'; - LcovOnly.call(this, opts); -} - -util.inherits(TextLcov, LcovOnly); -module.exports = TextLcov; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/text-summary/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/text-summary/index.js deleted file mode 100644 index 46de5d72d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/text-summary/index.js +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -function TextSummaryReport(opts) { - opts = opts || {}; - this.file = opts.file || null; -} - -function lineForKey(summary, key) { - var metrics = summary[key], - skipped, - result; - - key = key.substring(0, 1).toUpperCase() + key.substring(1); - if (key.length < 12) { - key += ' '.substring(0, 12 - key.length); - } - result = [key, ':', metrics.pct + '%', '(', metrics.covered + '/' + metrics.total, ')'].join(' '); - skipped = metrics.skipped; - if (skipped > 0) { - result += ', ' + skipped + ' ignored'; - } - return result; -} - -TextSummaryReport.prototype.onStart = function (node, context) { - var summary = node.getCoverageSummary(), - cw, - printLine = function (key) { - var str = lineForKey(summary, key), - clazz = context.classForPercent(key, summary[key].pct); - cw.println(cw.colorize(str, clazz)); - }; - - cw = context.writer.writeFile(this.file); - cw.println(''); - cw.println('=============================== Coverage summary ==============================='); - printLine('statements'); - printLine('branches'); - printLine('functions'); - printLine('lines'); - cw.println('================================================================================'); - cw.close(); -}; - -module.exports = TextSummaryReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/text/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/text/index.js deleted file mode 100644 index 735817a61..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/lib/text/index.js +++ /dev/null @@ -1,179 +0,0 @@ -/* - Copyright 2012-2015, Yahoo Inc. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; - -var PCT_COLS = 9, - MISSING_COL = 15, - TAB_SIZE = 1, - DELIM = ' |', - COL_DELIM = '-|'; - -function padding(num, ch) { - var str = '', - i; - ch = ch || ' '; - for (i = 0; i < num; i += 1) { - str += ch; - } - return str; -} - -function fill(str, width, right, tabs) { - tabs = tabs || 0; - str = String(str); - - var leadingSpaces = tabs * TAB_SIZE, - remaining = width - leadingSpaces, - leader = padding(leadingSpaces), - fmtStr = '', - fillStr, - strlen = str.length; - - if (remaining > 0) { - if (remaining >= strlen) { - fillStr = padding(remaining - strlen); - fmtStr = right ? fillStr + str : str + fillStr; - } else { - fmtStr = str.substring(strlen - remaining); - fmtStr = '... ' + fmtStr.substring(4); - } - } - - return leader + fmtStr; -} - -function formatName(name, maxCols, level) { - return fill(name, maxCols, false, level); -} - -function formatPct(pct, width) { - return fill(pct, width || PCT_COLS, true, 0); -} - -function nodeName(node) { - return node.getRelativeName() || 'All files'; -} - -function depthFor(node) { - var ret = 0; - node = node.getParent(); - while (node) { - ret += 1; - node = node.getParent(); - } - return ret; -} - -function findNameWidth(node, context) { - var last = 0, - compareWidth = function (node) { - var depth = depthFor(node), - idealWidth = TAB_SIZE * depth + nodeName(node).length; - if (idealWidth > last) { - last = idealWidth; - } - }, - visitor = { - onSummary: function (node) { - compareWidth(node); - }, - onDetail: function (node) { - compareWidth(node); - } - }; - node.visit(context.getVisitor(visitor)); - return last; -} - -function makeLine(nameWidth) { - var name = padding(nameWidth, '-'), - pct = padding(PCT_COLS, '-'), - elements = []; - - elements.push(name); - elements.push(pct); - elements.push(pct); - elements.push(pct); - elements.push(pct); - elements.push(padding(MISSING_COL, '-')); - return elements.join(COL_DELIM) + COL_DELIM; -} - -function tableHeader(maxNameCols) { - var elements = []; - elements.push(formatName('File', maxNameCols, 0)); - elements.push(formatPct('% Stmts')); - elements.push(formatPct('% Branch')); - elements.push(formatPct('% Funcs')); - elements.push(formatPct('% Lines')); - elements.push(formatPct('Uncovered Lines', MISSING_COL)); - return elements.join(' |') + ' |'; -} - -function tableRow(node, context, colorizer, maxNameCols, level) { - var name = nodeName(node), - metrics = node.getCoverageSummary(), - mm = { - statements: metrics.statements.pct, - branches: metrics.branches.pct, - functions: metrics.functions.pct, - lines: metrics.lines.pct, - }, - colorize = function (str, key) { - return colorizer(str, context.classForPercent(key, mm[key])); - }, - missingLines = node.isSummary() ? [] : node.getFileCoverage().getUncoveredLines(), - elements = []; - - elements.push(colorize(formatName(name, maxNameCols, level),'statements')); - elements.push(colorize(formatPct(mm.statements),'statements')); - elements.push(colorize(formatPct(mm.branches), 'branches')); - elements.push(colorize(formatPct(mm.functions), 'functions')); - elements.push(colorize(formatPct(mm.lines), 'lines')); - elements.push(colorizer(formatPct(missingLines.join(','), MISSING_COL), 'low')); - return elements.join(DELIM) + DELIM; -} - -function TextReport(opts) { - opts = opts || {}; - this.file = opts.file || null; - this.maxCols = opts.maxCols || 0; - this.cw = null; -} - -TextReport.prototype.onStart = function (root, context) { - var line, - statsWidth = 4 * (PCT_COLS + 2) + MISSING_COL, - maxRemaining; - - this.cw = context.writer.writeFile(this.file); - this.nameWidth = findNameWidth(root, context); - if (this.maxCols > 0) { - maxRemaining = this.maxCols - statsWidth - 2; - if (this.nameWidth > maxRemaining) { - this.nameWidth = maxRemaining; - } - } - line = makeLine(this.nameWidth); - this.cw.println(line); - this.cw.println(tableHeader(this.nameWidth)); - this.cw.println(line); -}; - -TextReport.prototype.onSummary = function (node, context) { - var nodeDepth = depthFor(node); - this.cw.println(tableRow(node, context, this.cw.colorize.bind(this.cw),this.nameWidth, nodeDepth)); -}; - -TextReport.prototype.onDetail = function (node, context) { - return this.onSummary(node, context); -}; - -TextReport.prototype.onEnd = function () { - this.cw.println(makeLine(this.nameWidth)); - this.cw.close(); -}; - -module.exports = TextReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/package.json b/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/package.json deleted file mode 100644 index 6ebdc0b32..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul-reports/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_args": [ - [ - "istanbul-reports@^1.0.0-alpha", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api" - ] - ], - "_from": "istanbul-reports@>=1.0.0-alpha <2.0.0", - "_id": "istanbul-reports@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/istanbul-reports", - "_nodeVersion": "6.5.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/istanbul-reports-1.0.0.tgz_1476684878444_0.31230472680181265" - }, - "_npmUser": { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "istanbul-reports", - "raw": "istanbul-reports@^1.0.0-alpha", - "rawSpec": "^1.0.0-alpha", - "scope": null, - "spec": ">=1.0.0-alpha <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul-api" - ], - "_resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.0.0.tgz", - "_shasum": "24b4eb2b1d29d50f103b369bd422f6e640aa0777", - "_shrinkwrap": null, - "_spec": "istanbul-reports@^1.0.0-alpha", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api", - "author": { - "email": "kananthmail-github@yahoo.com", - "name": "Krishnan Anantheswaran" - }, - "bugs": { - "url": "https://github.com/istanbuljs/istanbul-reports/issues" - }, - "dependencies": { - "handlebars": "^4.0.3" - }, - "description": "istanbul reports", - "devDependencies": { - "chai": "^3.5.0", - "coveralls": "^2.11.4", - "istanbul-lib-coverage": "^1.0.0", - "jshint": "^2.8.0", - "mocha": "^3.1.2", - "nyc": "^8.3.1", - "standard-version": "^3.0.0" - }, - "directories": {}, - "dist": { - "shasum": "24b4eb2b1d29d50f103b369bd422f6e640aa0777", - "tarball": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-1.0.0.tgz" - }, - "gitHead": "929e16fa6e41068f7e8e9d887bfcb2e3dcdcb6c4", - "homepage": "https://github.com/istanbuljs/istanbul-reports", - "keywords": [ - "istanbul", - "reports" - ], - "license": "BSD-3-Clause", - "main": "index.js", - "maintainers": [ - { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - } - ], - "name": "istanbul-reports", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/istanbuljs/istanbul-reports.git" - }, - "scripts": { - "coverage": "nyc report --reporter=text-lcov | coveralls", - "pretest": "jshint --exclude=**/prettify.js index.js lib/ test/", - "release": "standard-version", - "test": "nyc --all mocha --recursive test/" - }, - "version": "1.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/istanbul/CHANGELOG.md deleted file mode 100644 index 86889b5aa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/CHANGELOG.md +++ /dev/null @@ -1,362 +0,0 @@ -Changelog ---------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0.4.5 -
    -
  • log filename when file fails to parse using esprima, thanks to @djorg83
  • -
  • swap fileset for glob (security fix), thanks to @popomore and @graingert
  • -
-
0.4.4 -
    -
  • Handle ExportNamedDeclaration, thanks to @VictoryStick
  • -
  • Use tmpdir setting in temp store, thanks to @inversion
  • -
  • Set "medium" coverage CSS color scheme to yellow, thanks to @JamesMGreene
  • -
  • use os.tmpdir() instead of os.tmpDir(), thanks to @ChALkeR
  • -
-
0.4.3 -
    -
  • Create new handlebars instance for the HTML report, thanks to @doowb
  • -
  • MetaProperty support thanks to @steve-gray
  • -
  • Use ansi colors from 16-color palette for better console support, thanks to @jtangelder
  • -
  • Misc doc/ css fixes thanks to @pra85, @abejfehr
  • -
-
0.4.2Fix confusing error message on check-coverage failures, thanks to @isaacs/td> -
v0.4.1 -
    -
  • Update esprima to 2.7.x, thanks to @ariya
  • -
  • Make table header clickable in HTML report, thanks to @iphands
  • -
  • Fix strict mode issues thanks to @kpdecker
  • -
  • update ignore code example for UMD, thanks to @pgurnee
  • -
  • misc build fixes, no user visible changes, thanks to @ariya
  • -
-
v0.4.0 -
    -
  • HTML report design, thanks a bunch to @tmcw
  • -
  • "loading config file" message on the console is now tied to the verbose state, thanks @asa-git
  • -
  • Add the `l` property to documentation, thanks @kitsonk
  • - -
-
v0.3.21 -
    -
  • Updated dependencies to the latest
  • -
-
v0.3.20 -
    -
  • Fix broken es6 `super` support, thanks @sterlinghw
  • -
  • Improve readability via better lineHeight, thanks @dhoko
  • -
  • Adding ability to set custom block name in teamcity report, thanks @aryelu
  • -
  • Replaced deprecated util.puts with console.log, thanks @arty-name -
-
v0.3.19Fix instrumenter for multiple blank array positions, thanks @alexdunphy
v0.3.18Upgrade esprima, get support for more ES6 features
v0.3.17Upgrade esprima, get correct for-of support
v0.3.16 -
    -
  • upgrades to filset and async modules, thanks to @roderickhsiao, @popomore
  • -
  • updated text reporter so that it displays a list of the lines missing coverage, thanks @bcoe
  • -
-
v0.3.15 -
    -
  • Fix #375: add nodir option to exclude directory for *.js matcher thanks to @yurenju
  • -
  • Fix #362: When setting up the `reportDir` add it to `reporter.dir`
  • -
  • Fixes #238 (added a poorman's clone)
  • -
  • Incrementing hits on ignored statements implemented
  • -
  • `a:visited color: #777` (a nice gray color)
  • -
-
v0.3.14 - Add text-lcov report format to emit lcov to console, thanks to @bcoe -
v0.3.13 - Fix #339 -
v0.3.12 - Allow other-than-dot-js files to be hooked, thanks to @sethpollack -
v0.3.11 - Avoid modification of global objects, thanks to @dominykas -
v0.3.10 - Update escodegen to 1.6.x and add browser download script -
v0.3.9 -
    -
  • Merge harmony branch and start adding ES6 features to istanbul
  • -
  • Arrow functions are the only feature of interest now
  • -
  • `for-of` and `yield` support exist but not present in mainline esprima yet
  • -
-
v0.3.8 -
    -
  • Fail check coverage command when no coverage files found, thanks to @nexus-uw
  • -
  • handle relative paths in check-coverage, thanks to @dragn
  • -
  • support explicit includes for cover, thanks to @tonylukasavage
  • -
-
v0.3.7 - Fix asset paths on windows, thanks to @juangabreil -
v0.3.6 -
    -
  • Update to Esprima 2.0
  • -
  • Remove YUI dependency and provide custom sort code. No network access needed for HTML report view
  • -
  • use supports-color module to colorize output, thanks to @gustavnikolaj
  • -
  • Fix tests to work on Windows, thanks to @dougwilson
  • -
  • Docs: "Instrument code" API example correction thanks to @robatron
  • -
  • Extracted embedded CSS and JavaScript and made them external files, thanks to @booleangate
v0.3.5 -

Merge #275 - `--include-all-sources` option. Thanks @gustavnikolaj

-

-The `--preload-sources` option is now deprecated and superseded by the -`--include-all-sources` option instead. This provides a better coverage representation -of the code that has not been included for testing. -

-
v0.3.4Merge #219 - Support reporting within symlink/junction. Thanks to @dougwilson
v0.3.3Merge #268 - per file coverage enforcement. Thanks to @ryan-roemer
v0.3.2Republish 0.3.1 because of bad shasum
v0.3.1Fixes #249
v0.3.0 - The *reports* release. **Potentially backwards-incompatible** if you are using - undocumented features or custom report implementations. -
    -
  • Change report command line to support multiple reports, add back-compat processing with warnings
  • -
  • Enable `report` command to read report list from config, thanks to @piuccio
  • -
  • Support multiple reports for `cover` and `report` commands
  • -
  • Support per-report config options in configuration file
  • -
  • Turn reports into event emitters so they can signal `done`
  • -
  • Add `Reporter` class to be able to generate multiple reports
  • -
  • Add a bunch of API docs, refactor README
  • -
-
v0.2.16Make YUI links https-always since relative links break local -filesystem use-case -
v0.2.15make link protocols relative so they don't break on https connections -(thanks to @yasyf) -
v0.2.14Fix hook to deal with non-string/ missing filenames -(thanks to @jason0x43), update dependencies -
v0.2.13Add `--preload-sources` option to `cover` command to make -code not required by tests to appear in the coverage report. -
v0.2.12Text summary as valid markdown, thanks to @smikes
v0.2.11Allow source map generation, thanks to @jason0x43
v0.2.10Add flag to handle sigints and dump coverage, thanks to @samccone
v0.2.9Fix #202
v0.2.8Upgrade esprima
v0.2.7
    -
  • Upgrade esprima
  • -
  • Misc jshint fixes
  • -
v0.2.6
    -
  • Revert bad commit for tree summarizer
  • -
v0.2.5
    -
  • Add clover report, thanks to @bixdeng, @mpderbec
  • -
  • Fix cobertura report bug for relative paths, thanks to @jxiaodev
  • -
  • Run self-coverage on tests always
  • -
  • Fix tree summarizer when relative paths are involved, thanks to @Swatinem
  • -
v0.2.4
    -
  • Fix line-split algo to handle Mac lin separators, thanks to @asifrc
  • -
  • Update README for quick intro to ignoring code for coverage, thanks to @gergelyke
  • -
v0.2.3
    -
  • Add YAML config file. `istanbul help config` has more details
  • -
  • Support custom reporting thresholds using the `watermarks` section of the config file
  • -
v0.2.2update escodegen, handlebars and resolve dependency versions
v0.2.1
    -
  • Add ability to skip branches and other hard-to-test code using comments. - See the doc for more details
  • -
  • Turn `util.error` into `console.error` for node 0.11 compatibility, thanks to @pornel
  • -
v0.2.0
    -
  • Add --preserve-comments to instrumenter options, thanks to @arikon
  • -
  • Support 'use strict;' in file scope, thanks to @pornel
  • -
- Up minor version due to the new way in which the global object is accessed. - This _should_ be backwards-compatible but has not been tested in the wild. -
v0.1.46Fix #114
v0.1.45Add teamcity reporter, thanks to @chrisgladd
v0.1.44Fix inconsistency in processing empty switch with latest esprima, up deps
v0.1.43Add colors to text report thanks to @runk
v0.1.42fix #78: embed source regression introduced in v0.1.38. Fix broken test for this
v0.1.41add json report to dump coverage object for certain use cases
v0.1.40forward sourceStore from lcov to html report, pull request by @vojtajina
v0.1.39add tag to cobertura report, pull request by @jhansche
v0.1.38
    -
  • factor out AST instrumentation into own instrumentASTSync method
  • -
  • always set function declaration coverage stats to 1 since every such declaration is "executed" exactly one time by the compiler
  • -
v0.1.37--complete-copy flag contrib from @kami, correct strict mode semantics for instrumented functions
v0.1.36real quiet when --print=none specified, add repo URL to package.json, add contributors
v0.1.35accept cobertura contrib from @nbrownus, fix #52
v0.1.34fix async reporting, update dependencies, accept html cleanup contrib from @mathiasbynens
v0.1.33initialize global coverage object before running tests to workaround mocha leak detection
v0.1.32Fix for null nodes in array expressions, add @unindented as contributor
v0.1.31Misc internal fixes and test changes
v0.1.30Write standard blurbs ("writing coverage object..." etc.) to stderr rather than stdout
v0.1.29Allow --post-require-hook to be a module that can be `require`-d
v0.1.28Add --post-require-hook switch to support use-cases similar to the YUI loader
v0.1.27Add --hook-run-in-context switch to support RequireJS modules. Thanks to @millermedeiros for the pull request
v0.1.26Add support for minimum uncovered unit for check-coverage. Fixes #25
v0.1.25Allow for relative paths in the YUI loader hook
v0.1.24Add lcov summaries. Fixes issue #20
v0.1.23Add ability to save a baseline coverage file for the instrument command. Fixes issue #19
v0.1.22Add signature attribute to cobertura method tags to fix NPE by the Hudson publisher
v0.1.21Add cobertura XML report format; exprimental for now
v0.1.20Fix HTML/ lcov report interface to be more customizable for middleware needs
v0.1.19make all hooking non-destructive in that already loaded modules are never reloaded. Add self-test mode so that already loaded istanbul modules can be unloaded prior to hooking.
v0.1.18Add option to hook in non-destructive mode; i.e. the require cache is not unloaded when hooking
v0.1.17Export some more objects; undocumented for now
v0.1.16Fix npm keywords for istanbul which expects an array of strings but was being fed a single string with keywords instead
v0.1.15Add the 'check-coverage' command so that Istanbul can be used as a posttest script to enforce minimum coverage
v0.1.14Expose the experimental YUI load hook in the interface
v0.1.13Internal jshint cleanup, no features or fixes
v0.1.12Give npm the README that was getting inadvertently excluded
v0.1.11Merge pull request #14 for HTML tweaks. Thanks @davglass. Add @davglass and @nowamasa as contributors in `package.json`
v0.1.10Fix to issue #12. Do not install `uncaughtException` handler and pass input error back to CLI using a callback as opposed to throwing.
v0.1.9Attempt to create reporting directory again just before writing coverage in addition to initial creation
v0.1.8Fix issue #11.
v0.1.7Add text summary and detailed reporting available as --print [summary|detail|both|none]. summary is the default if nothing specified.
v0.1.6Handle backslashes in the file path correctly in emitted code. Fixes #9. Thanks to @nowamasa for bug report and fix
v0.1.5make object-utils.js work on a browser as-is
v0.1.4partial fix for issue #4; add titles to missing coverage spans, remove negative margin for missing if/else indicators
v0.1.3Set the environment variable running_under_istanbul to 1 when that is the case. This allows test runners that use istanbul as a library to back off on using it when set.
v0.1.2HTML reporting cosmetics. Reports now show syntax-colored JS using `prettify`. Summary tables no longer wrap in awkward places.
v0.1.1Fixes issue #1. HTML reports use sources embedded inside the file coverage objects if found rather than reading from the filesystem
v0.1.0Initial version
- diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/LICENSE b/fundamentals/bug-challenge-es6/node_modules/istanbul/LICENSE deleted file mode 100644 index 45a650b05..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/LICENSE +++ /dev/null @@ -1,24 +0,0 @@ -Copyright 2012 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/README.md b/fundamentals/bug-challenge-es6/node_modules/istanbul/README.md deleted file mode 100644 index 89b15d97d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/README.md +++ /dev/null @@ -1,288 +0,0 @@ -## Istanbul - a JS code coverage tool written in JS - -[![Build Status](https://secure.travis-ci.org/gotwarlost/istanbul.svg?branch=master)](http://travis-ci.org/gotwarlost/istanbul) -[![Dependency Status](https://gemnasium.com/gotwarlost/istanbul.svg)](https://gemnasium.com/gotwarlost/istanbul) -[![Coverage Status](https://img.shields.io/coveralls/gotwarlost/istanbul.svg)](https://coveralls.io/r/gotwarlost/istanbul?branch=master) -[![bitHound Score](https://www.bithound.io/github/gotwarlost/istanbul/badges/score.svg)](https://www.bithound.io/github/gotwarlost/istanbul) - -[![NPM](https://nodei.co/npm/istanbul.png?downloads=true)](https://nodei.co/npm/istanbul/) - -**New** `v0.4.0` now has beautiful HTML reports. Props to Tom MacWright @tmcw for a fantastic job! - -* [Features and use cases](#features) -* [Getting started and configuration](#getting-started) -* [Usage on Windows](#usage-on-windows) -* [The command line](#the-command-line) -* [Ignoring code for coverage](#ignoring-code-for-coverage) -* [API](#api) -* [Changelog](https://github.com/gotwarlost/istanbul/blob/master/CHANGELOG.md) -* [License and credits](#license) - -### Features - -* All-javascript instrumentation library that tracks **statement, branch, -and function coverage**. -* **Module loader hooks** to instrument code on the fly -* **Command line tools** to run node unit tests "with coverage turned on" and no cooperation -whatsoever from the test runner -* Multiple report formats: **HTML**, **LCOV**, **Cobertura** and more. -* Ability to use as [middleware](https://github.com/gotwarlost/istanbul-middleware) when serving JS files that need to be tested on the browser. -* Can be used on the **command line** as well as a **library** -* Based on the awesome `esprima` parser and the equally awesome `escodegen` code generator -* Well-tested on node (prev, current and next versions) and the browser (instrumentation library only) - -### Use cases - -Supports the following use cases and more - -* transparent coverage of nodejs unit tests -* instrumentation/ reporting of files in batch mode for browser tests -* Server side code coverage for nodejs by embedding it as [custom middleware](https://github.com/gotwarlost/istanbul-middleware) - -### Getting started - - $ npm install -g istanbul - -The best way to see it in action is to run node unit tests. Say you have a test -script `test.js` that runs all tests for your node project without coverage. - -Simply: - - $ cd /path/to/your/source/root - $ istanbul cover test.js - -and this should produce a `coverage.json`, `lcov.info` and `lcov-report/*html` under `./coverage` - -Sample of code coverage reports produced by this tool (for this tool!): - -[HTML reports](http://gotwarlost.github.com/istanbul/public/coverage/lcov-report/index.html) - -### Usage on Windows - -Istanbul assumes that the `command` passed to it is a JS file (e.g. Jasmine, vows etc.), -this is however not true on Windows where npm wrap bin files in a `.cmd` file. -Since Istanbul can not parse `.cmd` files you need to reference the bin file manually. - -Here is an example using Jasmine 2: - - istanbul cover node_modules\jasmine\bin\jasmine.js - -In order to use this cross platform (e.i. Linux, Mac and Windows), you can insert -the above line into the script object in your package.json file but with normal -slash. - - "scripts": { - "test": "istanbul cover node_modules/jasmine/bin/jasmine.js" - } - -### Configuring - -Drop a `.istanbul.yml` file at the top of the source tree to configure istanbul. -`istanbul help config` tells you more about the config file format. - -### The command line - - $ istanbul help - -gives you detailed help on all commands. - -``` -Usage: istanbul help config | - -`config` provides help with istanbul configuration - -Available commands are: - - check-coverage - checks overall/per-file coverage against thresholds from coverage - JSON files. Exits 1 if thresholds are not met, 0 otherwise - - - cover transparently adds coverage information to a node command. Saves - coverage.json and reports at the end of execution - - - help shows help - - - instrument - instruments a file or a directory tree and writes the - instrumented code to the desired output location - - - report writes reports for coverage JSON objects produced in a previous - run - - - test cover a node command only when npm_config_coverage is set. Use in - an `npm test` script for conditional coverage - - -Command names can be abbreviated as long as the abbreviation is unambiguous -``` - -To get detailed help for a command and what command-line options it supports, run: - - istanbul help - -(Most of the command line options are not covered in this document.) - -#### The `cover` command - - $ istanbul cover my-test-script.js -- my test args - # note the -- between the command name and the arguments to be passed - -The `cover` command can be used to get a coverage object and reports for any arbitrary -node script. By default, coverage information is written under `./coverage` - this -can be changed using command-line options. - -The `cover` command can also be passed an optional `--handle-sigint` flag to -enable writing reports when a user triggers a manual SIGINT of the process that is -being covered. This can be useful when you are generating coverage for a long lived process. - -#### The `test` command - -The `test` command has almost the same behavior as the `cover` command, except that -it skips coverage unless the `npm_config_coverage` environment variable is set. - -**This command is deprecated** since the latest versions of npm do not seem to -set the `npm_config_coverage` variable. - -#### The `instrument` command - -Instruments a single JS file or an entire directory tree and produces an output -directory tree with instrumented code. This should not be required for running node -unit tests but is useful for tests to be run on the browser. - -#### The `report` command - -Writes reports using `coverage*.json` files as the source of coverage information. -Reports are available in multiple formats and can be individually configured -using the istanbul config file. See `istanbul help report` for more details. - -#### The `check-coverage` command - -Checks the coverage of statements, functions, branches, and lines against the -provided thresholds. Positive thresholds are taken to be the minimum percentage -required and negative numbers are taken to be the number of uncovered entities -allowed. - -### Ignoring code for coverage - -* Skip an `if` or `else` path with `/* istanbul ignore if */` or `/* istanbul ignore else */` respectively. -* For all other cases, skip the next 'thing' in the source with: `/* istanbul ignore next */` - -See [ignoring-code-for-coverage.md](ignoring-code-for-coverage.md) for the spec. - - -### API - -All the features of istanbul can be accessed as a library. - -#### Instrument code - -```javascript - var istanbul = require('istanbul'); - var instrumenter = new istanbul.Instrumenter(); - - var generatedCode = instrumenter.instrumentSync('function meaningOfLife() { return 42; }', - 'filename.js'); -``` - -#### Generate reports given a bunch of coverage JSON objects - -```javascript - var istanbul = require('istanbul'), - collector = new istanbul.Collector(), - reporter = new istanbul.Reporter(), - sync = false; - - collector.add(obj1); - collector.add(obj2); //etc. - - reporter.add('text'); - reporter.addAll([ 'lcov', 'clover' ]); - reporter.write(collector, sync, function () { - console.log('All reports generated'); - }); -``` - -For the gory details consult the [public API](http://gotwarlost.github.com/istanbul/public/apidocs/index.html) - - -### Multiple Process Usage - -Istanbul can be used in a multiple process environment by running each process -with Istanbul, writing a unique coverage file for each process, and combining -the results when generating reports. The method used to perform this will -depend on the process forking API used. For example when using the -[cluster module](http://nodejs.org/api/cluster.html) you must setup the master -to start child processes with Istanbul coverage, disable reporting, and output -coverage files that include the PID in the filename. Before each run you may -need to clear out the coverage data directory. - -```javascript - if(cluster.isMaster) { - // setup cluster if running with istanbul coverage - if(process.env.running_under_istanbul) { - // use coverage for forked process - // disabled reporting and output for child process - // enable pid in child process coverage filename - cluster.setupMaster({ - exec: './node_modules/.bin/istanbul', - args: [ - 'cover', '--report', 'none', '--print', 'none', '--include-pid', - process.argv[1], '--'].concat(process.argv.slice(2)) - }); - } - // ... - // ... cluster.fork(); - // ... - } else { - // ... worker code - } -``` - -### Coverage.json - -For details on the format of the coverage.json object, [see here](./coverage.json.md). - -### License - -istanbul is licensed under the [BSD License](http://github.com/gotwarlost/istanbul/raw/master/LICENSE). - -### Third-party libraries - -The following third-party libraries are used by this module: - -* abbrev: https://github.com/isaacs/abbrev-js - to handle command abbreviations -* async: https://github.com/caolan/async - for parallel instrumentation of files -* escodegen: https://github.com/Constellation/escodegen - for JS code generation -* esprima: https://github.com/ariya/esprima - for JS parsing -* glob: https://github.com/isaacs/node-glob - for loading and matching path expressions -* handlebars: https://github.com/wycats/handlebars.js/ - for report template expansion -* js-yaml: https://github.com/nodeca/js-yaml - for YAML config file load -* mkdirp: https://github.com/substack/node-mkdirp - to create output directories -* nodeunit: https://github.com/caolan/nodeunit - dev dependency for unit tests -* nopt: https://github.com/isaacs/nopt - for option parsing -* once: https://github.com/isaacs/once - to ensure callbacks are called once -* resolve: https://github.com/substack/node-resolve - for resolving a post-require hook module name into its main file. -* rimraf - https://github.com/isaacs/rimraf - dev dependency for unit tests -* which: https://github.com/isaacs/node-which - to resolve a node command to a file for the `cover` command -* wordwrap: https://github.com/substack/node-wordwrap - for prettier help -* prettify: http://code.google.com/p/google-code-prettify/ - for syntax colored HTML reports. Files checked in under `lib/vendor/` - -### Inspired by - -* YUI test coverage - https://github.com/yui/yuitest - the grand-daddy of JS coverage tools. Istanbul has been specifically designed to offer an alternative to this library with an easy migration path. -* cover: https://github.com/itay/node-cover - the inspiration for the `cover` command, modeled after the `run` command in that tool. The coverage methodology used by istanbul is quite different, however - -### Shout out to - - * [mfncooper](https://github.com/mfncooper) - for great brainstorming discussions - * [reid](https://github.com/reid), [davglass](https://github.com/davglass), the YUI dudes, for interesting conversations, encouragement, support and gentle pressure to get it done :) - -### Why the funky name? - -Since all the good ones are taken. Comes from the loose association of ideas across -coverage, carpet-area coverage, the country that makes good carpets and so on... diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/index.js deleted file mode 100644 index afcaaa97d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/index.js +++ /dev/null @@ -1,153 +0,0 @@ -/* -Copyright (c) 2012, Yahoo! Inc. All rights reserved. -Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. -*/ - -/*jslint nomen: true */ -var path = require('path'), - Store = require('./lib/store'), - Report = require('./lib/report'), - meta = require('./lib/util/meta'); - -//register our standard plugins -require('./lib/register-plugins'); - -/** - * the top-level API for `istanbul`. provides access to the key libraries in - * istanbul so you can write your own tools using `istanbul` as a library. - * - * Usage - * ----- - * - * var istanbul = require('istanbul'); - * - * - * @class Istanbul - * @static - * @module main - * @main main - */ - -module.exports = { - /** - * the Instrumenter class. - * @property Instrumenter - * @type Instrumenter - * @static - */ - Instrumenter: require('./lib/instrumenter'), - /** - * the Store class. - * @property Store - * @type Store - * @static - */ - Store: Store, - /** - * the Collector class - * @property Collector - * @type Collector - * @static - */ - Collector: require('./lib/collector'), - /** - * the hook module - * @property hook - * @type Hook - * @static - */ - hook: require('./lib/hook'), - /** - * the Report class - * @property Report - * @type Report - * @static - */ - Report: Report, - /** - * the config module - * @property config - * @type Config - * @static - */ - config: require('./lib/config'), - /** - * the Reporter class - * @property Reporter - * @type Reporter - * @static - */ - Reporter: require('./lib/reporter'), - /** - * utility for processing coverage objects - * @property utils - * @type ObjectUtils - * @static - */ - utils: require('./lib/object-utils'), - /** - * asynchronously returns a function that can match filesystem paths. - * The function returned in the callback may be passed directly as a `matcher` - * to the functions in the `hook` module. - * - * When no options are passed, the match function is one that matches all JS - * files under the current working directory except ones under `node_modules` - * - * Match patterns are `ant`-style patterns processed using the `glob` library. - * Examples not provided due to limitations in putting asterisks inside - * jsdoc comments. Please refer to tests under `test/other/test-matcher.js` - * for examples. - * - * @method matcherFor - * @static - * @param {Object} options Optional. Lookup options. - * @param {String} [options.root] the root of the filesystem tree under - * which to match files. Defaults to `process.cwd()` - * @param {Array} [options.includes] an array of include patterns to match. - * Defaults to all JS files under the root. - * @param {Array} [options.excludes] and array of exclude patterns. File paths - * matching these patterns will be excluded by the returned matcher. - * Defaults to files under `node_modules` found anywhere under root. - * @param {Function(err, matchFunction)} callback The callback that is - * called with two arguments. The first is an `Error` object in case - * of errors or a falsy value if there were no errors. The second - * is a function that may be use as a matcher. - */ - matcherFor: require('./lib/util/file-matcher').matcherFor, - /** - * the version of the library - * @property VERSION - * @type String - * @static - */ - VERSION: meta.VERSION, - /** - * the abstract Writer class - * @property Writer - * @type Writer - * @static - */ - Writer: require('./lib/util/writer').Writer, - /** - * the abstract ContentWriter class - * @property ContentWriter - * @type ContentWriter - * @static - */ - ContentWriter: require('./lib/util/writer').ContentWriter, - /** - * the concrete FileWriter class - * @property FileWriter - * @type FileWriter - * @static - */ - FileWriter: require('./lib/util/file-writer'), - //undocumented - _yuiLoadHook: require('./lib/util/yui-load-hook'), - //undocumented - TreeSummarizer: require('./lib/util/tree-summarizer'), - //undocumented - assetsDir: path.resolve(__dirname, 'lib', 'assets') -}; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/base.css b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/base.css deleted file mode 100644 index 29737bcb0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/base.css +++ /dev/null @@ -1,213 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.medium .chart { border:1px solid #f9cd0b; } -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } -/* light gray */ -span.cline-neutral { background: #eaeaea; } - -.cbranch-no { background: yellow !important; color: #111; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/sort-arrow-sprite.png b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/sort-arrow-sprite.png deleted file mode 100644 index 03f704a609c6fd0dbfdac63466a7d7c958b5cbf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function (a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function (a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function () { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i =0 ; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function () { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(cols); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/vendor/prettify.css b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/vendor/prettify.css deleted file mode 100644 index b317a7cda..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/vendor/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/vendor/prettify.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/vendor/prettify.js deleted file mode 100644 index ef51e0386..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/assets/vendor/prettify.js +++ /dev/null @@ -1 +0,0 @@ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/cli.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/cli.js deleted file mode 100755 index 5a8f1bfca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/cli.js +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env node - -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - - -var async = require('async'), - Command = require('./command'), - inputError = require('./util/input-error'), - exitProcess = process.exit; //hold a reference to original process.exit so that we are not affected even when a test changes it - -require('./register-plugins'); - -function findCommandPosition(args) { - var i; - - for (i = 0; i < args.length; i += 1) { - if (args[i].charAt(0) !== '-') { - return i; - } - } - - return -1; -} - -function exit(ex, code) { - // flush output for Node.js Windows pipe bug - // https://github.com/joyent/node/issues/6247 is just one bug example - // https://github.com/visionmedia/mocha/issues/333 has a good discussion - var streams = [process.stdout, process.stderr]; - async.forEach(streams, function (stream, done) { - // submit a write request and wait until it's written - stream.write('', done); - }, function () { - if (ex) { - if (typeof ex === 'string') { - console.error(ex); - exitProcess(1); - } else { - throw ex; // turn it into an uncaught exception - } - } else { - exitProcess(code); - } - }); -} - -function errHandler (ex) { - if (!ex) { return; } - if (!ex.inputError) { - // exit with exception stack trace - exit(ex); - } else { - //don't print nasty traces but still exit(1) - console.error(ex.message); - console.error('Try "istanbul help" for usage'); - exit(null, 1); - } -} - -function runCommand(args, callback) { - var pos = findCommandPosition(args), - command, - commandArgs, - commandObject; - - if (pos < 0) { - return callback(inputError.create('Need a command to run')); - } - - commandArgs = args.slice(0, pos); - command = args[pos]; - commandArgs.push.apply(commandArgs, args.slice(pos + 1)); - - try { - commandObject = Command.create(command); - } catch (ex) { - errHandler(inputError.create(ex.message)); - return; - } - commandObject.run(commandArgs, errHandler); -} - -function runToCompletion(args) { - runCommand(args, errHandler); -} - -/* istanbul ignore if: untestable */ -if (require.main === module) { - var args = Array.prototype.slice.call(process.argv, 2); - runToCompletion(args); -} - -module.exports = { - runToCompletion: runToCompletion -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/collector.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/collector.js deleted file mode 100644 index f1b6b606e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/collector.js +++ /dev/null @@ -1,122 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -"use strict"; -var MemoryStore = require('./store/memory'), - utils = require('./object-utils'); - -/** - * a mechanism to merge multiple coverage objects into one. Handles the use case - * of overlapping coverage information for the same files in multiple coverage - * objects and does not double-count in this situation. For example, if - * you pass the same coverage object multiple times, the final merged object will be - * no different that any of the objects passed in (except for execution counts). - * - * The `Collector` is built for scale to handle thousands of coverage objects. - * By default, all processing is done in memory since the common use-case is of - * one or a few coverage objects. You can work around memory - * issues by passing in a `Store` implementation that stores temporary computations - * on disk (the `tmp` store, for example). - * - * The `getFinalCoverage` method returns an object with merged coverage information - * and is provided as a convenience for implementors working with coverage information - * that can fit into memory. Reporters, in the interest of generality, should *not* use this method for - * creating reports. - * - * Usage - * ----- - * - * var collector = new require('istanbul').Collector(); - * - * files.forEach(function (f) { - * //each coverage object can have overlapping information about multiple files - * collector.add(JSON.parse(fs.readFileSync(f, 'utf8'))); - * }); - * - * collector.files().forEach(function(file) { - * var fileCoverage = collector.fileCoverageFor(file); - * console.log('Coverage for ' + file + ' is:' + JSON.stringify(fileCoverage)); - * }); - * - * // convenience method: do not use this when dealing with a large number of files - * var finalCoverage = collector.getFinalCoverage(); - * - * @class Collector - * @module main - * @constructor - * @param {Object} options Optional. Configuration options. - * @param {Store} options.store - an implementation of `Store` to use for temporary - * calculations. - */ -function Collector(options) { - options = options || {}; - this.store = options.store || new MemoryStore(); -} - -Collector.prototype = { - /** - * adds a coverage object to the collector. - * - * @method add - * @param {Object} coverage the coverage object. - * @param {String} testName Optional. The name of the test used to produce the object. - * This is currently not used. - */ - add: function (coverage /*, testName */) { - var store = this.store; - Object.keys(coverage).forEach(function (key) { - var fileCoverage = coverage[key]; - if (store.hasKey(key)) { - store.setObject(key, utils.mergeFileCoverage(fileCoverage, store.getObject(key))); - } else { - store.setObject(key, fileCoverage); - } - }); - }, - /** - * returns a list of unique file paths for which coverage information has been added. - * @method files - * @return {Array} an array of file paths for which coverage information is present. - */ - files: function () { - return this.store.keys(); - }, - /** - * return file coverage information for a single file - * @method fileCoverageFor - * @param {String} fileName the path for the file for which coverage information is - * required. Must be one of the values returned in the `files()` method. - * @return {Object} the coverage information for the specified file. - */ - fileCoverageFor: function (fileName) { - var ret = this.store.getObject(fileName); - utils.addDerivedInfoForFile(ret); - return ret; - }, - /** - * returns file coverage information for all files. This has the same format as - * any of the objects passed in to the `add` method. The number of keys in this - * object will be a superset of all keys found in the objects passed to `add()` - * @method getFinalCoverage - * @return {Object} the merged coverage information - */ - getFinalCoverage: function () { - var ret = {}, - that = this; - this.files().forEach(function (file) { - ret[file] = that.fileCoverageFor(file); - }); - return ret; - }, - /** - * disposes this collector and reclaims temporary resources used in the - * computation. Calls `dispose()` on the underlying store. - * @method dispose - */ - dispose: function () { - this.store.dispose(); - } -}; - -module.exports = Collector; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/check-coverage.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/check-coverage.js deleted file mode 100644 index 5776c7780..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/check-coverage.js +++ /dev/null @@ -1,195 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var nopt = require('nopt'), - path = require('path'), - fs = require('fs'), - Collector = require('../collector'), - formatOption = require('../util/help-formatter').formatOption, - util = require('util'), - utils = require('../object-utils'), - filesFor = require('../util/file-matcher').filesFor, - Command = require('./index'), - configuration = require('../config'); - -function isAbsolute(file) { - if (path.isAbsolute) { - return path.isAbsolute(file); - } - - return path.resolve(file) === path.normalize(file); -} - -function CheckCoverageCommand() { - Command.call(this); -} - -function removeFiles(covObj, root, files) { - var filesObj = {}, - obj = {}; - - // Create lookup table. - files.forEach(function (file) { - filesObj[file] = true; - }); - - Object.keys(covObj).forEach(function (key) { - // Exclude keys will always be relative, but covObj keys can be absolute or relative - var excludeKey = isAbsolute(key) ? path.relative(root, key) : key; - // Also normalize for files that start with `./`, etc. - excludeKey = path.normalize(excludeKey); - if (filesObj[excludeKey] !== true) { - obj[key] = covObj[key]; - } - }); - - return obj; -} - -CheckCoverageCommand.TYPE = 'check-coverage'; -util.inherits(CheckCoverageCommand, Command); - -Command.mix(CheckCoverageCommand, { - synopsis: function () { - return "checks overall/per-file coverage against thresholds from coverage JSON files. Exits 1 if thresholds are not met, 0 otherwise"; - }, - - usage: function () { - console.error('\nUsage: ' + this.toolName() + ' ' + this.type() + ' []\n\nOptions are:\n\n' + - [ - formatOption('--statements ', 'global statement coverage threshold'), - formatOption('--functions ', 'global function coverage threshold'), - formatOption('--branches ', 'global branch coverage threshold'), - formatOption('--lines ', 'global line coverage threshold') - ].join('\n\n') + '\n'); - - console.error('\n\n'); - - console.error('Thresholds, when specified as a positive number are taken to be the minimum percentage required.'); - console.error('When a threshold is specified as a negative number it represents the maximum number of uncovered entities allowed.\n'); - console.error('For example, --statements 90 implies minimum statement coverage is 90%.'); - console.error(' --statements -10 implies that no more than 10 uncovered statements are allowed\n'); - console.error('Per-file thresholds can be specified via a configuration file.\n'); - console.error(' is a glob pattern that can be used to select one or more coverage files ' + - 'for merge. This defaults to "**/coverage*.json"'); - - console.error('\n'); - }, - - run: function (args, callback) { - - var template = { - config: path, - root: path, - statements: Number, - lines: Number, - branches: Number, - functions: Number, - verbose: Boolean - }, - opts = nopt(template, { v : '--verbose' }, args, 0), - // Translate to config opts. - config = configuration.loadFile(opts.config, { - verbose: opts.verbose, - check: { - global: { - statements: opts.statements, - lines: opts.lines, - branches: opts.branches, - functions: opts.functions - } - } - }), - includePattern = '**/coverage*.json', - root, - collector = new Collector(), - errors = []; - - if (opts.argv.remain.length > 0) { - includePattern = opts.argv.remain[0]; - } - - root = opts.root || process.cwd(); - filesFor({ - root: root, - includes: [ includePattern ] - }, function (err, files) { - if (err) { throw err; } - if (files.length === 0) { - return callback('ERROR: No coverage files found.'); - } - files.forEach(function (file) { - var coverageObject = JSON.parse(fs.readFileSync(file, 'utf8')); - collector.add(coverageObject); - }); - var thresholds = { - global: { - statements: config.check.global.statements || 0, - branches: config.check.global.branches || 0, - lines: config.check.global.lines || 0, - functions: config.check.global.functions || 0, - excludes: config.check.global.excludes || [] - }, - each: { - statements: config.check.each.statements || 0, - branches: config.check.each.branches || 0, - lines: config.check.each.lines || 0, - functions: config.check.each.functions || 0, - excludes: config.check.each.excludes || [] - } - }, - rawCoverage = collector.getFinalCoverage(), - globalResults = utils.summarizeCoverage(removeFiles(rawCoverage, root, thresholds.global.excludes)), - eachResults = removeFiles(rawCoverage, root, thresholds.each.excludes); - - // Summarize per-file results and mutate original results. - Object.keys(eachResults).forEach(function (key) { - eachResults[key] = utils.summarizeFileCoverage(eachResults[key]); - }); - - if (config.verbose) { - console.log('Compare actuals against thresholds'); - console.log(JSON.stringify({ global: globalResults, each: eachResults, thresholds: thresholds }, undefined, 4)); - } - - function check(name, thresholds, actuals) { - [ - "statements", - "branches", - "lines", - "functions" - ].forEach(function (key) { - var actual = actuals[key].pct, - actualUncovered = actuals[key].total - actuals[key].covered, - threshold = thresholds[key]; - - if (threshold < 0) { - if (threshold * -1 < actualUncovered) { - errors.push('ERROR: Uncovered count for ' + key + ' (' + actualUncovered + - ') exceeds ' + name + ' threshold (' + -1 * threshold + ')'); - } - } else { - if (actual < threshold) { - errors.push('ERROR: Coverage for ' + key + ' (' + actual + - '%) does not meet ' + name + ' threshold (' + threshold + '%)'); - } - } - }); - } - - check("global", thresholds.global, globalResults); - - Object.keys(eachResults).forEach(function (key) { - check("per-file" + " (" + key + ") ", thresholds.each, eachResults[key]); - }); - - return callback(errors.length === 0 ? null : errors.join("\n")); - }); - } -}); - -module.exports = CheckCoverageCommand; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/common/run-with-cover.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/common/run-with-cover.js deleted file mode 100644 index d4c5fafe4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/common/run-with-cover.js +++ /dev/null @@ -1,261 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var Module = require('module'), - path = require('path'), - fs = require('fs'), - nopt = require('nopt'), - which = require('which'), - mkdirp = require('mkdirp'), - existsSync = fs.existsSync || path.existsSync, - inputError = require('../../util/input-error'), - matcherFor = require('../../util/file-matcher').matcherFor, - Instrumenter = require('../../instrumenter'), - Collector = require('../../collector'), - formatOption = require('../../util/help-formatter').formatOption, - hook = require('../../hook'), - Reporter = require('../../reporter'), - resolve = require('resolve'), - configuration = require('../../config'); - -function usage(arg0, command) { - - console.error('\nUsage: ' + arg0 + ' ' + command + ' [] [-- ]\n\nOptions are:\n\n' - + [ - formatOption('--config ', 'the configuration file to use, defaults to .istanbul.yml'), - formatOption('--root ', 'the root path to look for files to instrument, defaults to .'), - formatOption('-x [-x ]', 'one or more glob patterns e.g. "**/vendor/**"'), - formatOption('-i [-i ]', 'one or more glob patterns e.g. "**/*.js"'), - formatOption('--[no-]default-excludes', 'apply default excludes [ **/node_modules/**, **/test/**, **/tests/** ], defaults to true'), - formatOption('--hook-run-in-context', 'hook vm.runInThisContext in addition to require (supports RequireJS), defaults to false'), - formatOption('--post-require-hook | ', 'JS module that exports a function for post-require processing'), - formatOption('--report [--report ] ', 'report format, defaults to lcov (= lcov.info + HTML)'), - formatOption('--dir ', 'report directory, defaults to ./coverage'), - formatOption('--print ', 'type of report to print to console, one of summary (default), detail, both or none'), - formatOption('--verbose, -v', 'verbose mode'), - formatOption('--[no-]preserve-comments', 'remove / preserve comments in the output, defaults to false'), - formatOption('--include-all-sources', 'instrument all unused sources after running tests, defaults to false'), - formatOption('--[no-]include-pid', 'include PID in output coverage filename') - ].join('\n\n') + '\n'); - console.error('\n'); -} - -function run(args, commandName, enableHooks, callback) { - - var template = { - config: path, - root: path, - x: [ Array, String ], - report: [Array, String ], - dir: path, - verbose: Boolean, - yui: Boolean, - 'default-excludes': Boolean, - print: String, - 'self-test': Boolean, - 'hook-run-in-context': Boolean, - 'post-require-hook': String, - 'preserve-comments': Boolean, - 'include-all-sources': Boolean, - 'preload-sources': Boolean, - i: [ Array, String ], - 'include-pid': Boolean - }, - opts = nopt(template, { v : '--verbose' }, args, 0), - overrides = { - verbose: opts.verbose, - instrumentation: { - root: opts.root, - 'default-excludes': opts['default-excludes'], - excludes: opts.x, - 'include-all-sources': opts['include-all-sources'], - 'preload-sources': opts['preload-sources'], - 'include-pid': opts['include-pid'] - }, - reporting: { - reports: opts.report, - print: opts.print, - dir: opts.dir - }, - hooks: { - 'hook-run-in-context': opts['hook-run-in-context'], - 'post-require-hook': opts['post-require-hook'], - 'handle-sigint': opts['handle-sigint'] - } - }, - config = configuration.loadFile(opts.config, overrides), - verbose = config.verbose, - cmdAndArgs = opts.argv.remain, - preserveComments = opts['preserve-comments'], - includePid = opts['include-pid'], - cmd, - cmdArgs, - reportingDir, - reporter = new Reporter(config), - runFn, - excludes; - - if (cmdAndArgs.length === 0) { - return callback(inputError.create('Need a filename argument for the ' + commandName + ' command!')); - } - - cmd = cmdAndArgs.shift(); - cmdArgs = cmdAndArgs; - - if (!existsSync(cmd)) { - try { - cmd = which.sync(cmd); - } catch (ex) { - return callback(inputError.create('Unable to resolve file [' + cmd + ']')); - } - } else { - cmd = path.resolve(cmd); - } - - runFn = function () { - process.argv = ["node", cmd].concat(cmdArgs); - if (verbose) { - console.log('Running: ' + process.argv.join(' ')); - } - process.env.running_under_istanbul=1; - Module.runMain(cmd, null, true); - }; - - excludes = config.instrumentation.excludes(true); - - if (enableHooks) { - reportingDir = path.resolve(config.reporting.dir()); - mkdirp.sync(reportingDir); //ensure we fail early if we cannot do this - reporter.dir = reportingDir; - reporter.addAll(config.reporting.reports()); - if (config.reporting.print() !== 'none') { - switch (config.reporting.print()) { - case 'detail': - reporter.add('text'); - break; - case 'both': - reporter.add('text'); - reporter.add('text-summary'); - break; - default: - reporter.add('text-summary'); - break; - } - } - - excludes.push(path.relative(process.cwd(), path.join(reportingDir, '**', '*'))); - matcherFor({ - root: config.instrumentation.root() || process.cwd(), - includes: opts.i || config.instrumentation.extensions().map(function (ext) { - return '**/*' + ext; - }), - excludes: excludes - }, - function (err, matchFn) { - if (err) { return callback(err); } - - var coverageVar = '$$cov_' + new Date().getTime() + '$$', - instrumenter = new Instrumenter({ coverageVariable: coverageVar , preserveComments: preserveComments}), - transformer = instrumenter.instrumentSync.bind(instrumenter), - hookOpts = { verbose: verbose, extensions: config.instrumentation.extensions() }, - postRequireHook = config.hooks.postRequireHook(), - postLoadHookFile; - - if (postRequireHook) { - postLoadHookFile = path.resolve(postRequireHook); - } else if (opts.yui) { //EXPERIMENTAL code: do not rely on this in anyway until the docs say it is allowed - postLoadHookFile = path.resolve(__dirname, '../../util/yui-load-hook'); - } - - if (postRequireHook) { - if (!existsSync(postLoadHookFile)) { //assume it is a module name and resolve it - try { - postLoadHookFile = resolve.sync(postRequireHook, { basedir: process.cwd() }); - } catch (ex) { - if (verbose) { console.error('Unable to resolve [' + postRequireHook + '] as a node module'); } - callback(ex); - return; - } - } - } - if (postLoadHookFile) { - if (verbose) { console.error('Use post-load-hook: ' + postLoadHookFile); } - hookOpts.postLoadHook = require(postLoadHookFile)(matchFn, transformer, verbose); - } - - if (opts['self-test']) { - hook.unloadRequireCache(matchFn); - } - // runInThisContext is used by RequireJS [issue #23] - if (config.hooks.hookRunInContext()) { - hook.hookRunInThisContext(matchFn, transformer, hookOpts); - } - hook.hookRequire(matchFn, transformer, hookOpts); - - //initialize the global variable to stop mocha from complaining about leaks - global[coverageVar] = {}; - - // enable passing --handle-sigint to write reports on SIGINT. - // This allows a user to manually kill a process while - // still getting the istanbul report. - if (config.hooks.handleSigint()) { - process.once('SIGINT', process.exit); - } - - process.once('exit', function () { - var pidExt = includePid ? ('-' + process.pid) : '', - file = path.resolve(reportingDir, 'coverage' + pidExt + '.json'), - collector, - cov; - if (typeof global[coverageVar] === 'undefined' || Object.keys(global[coverageVar]).length === 0) { - console.error('No coverage information was collected, exit without writing coverage information'); - return; - } else { - cov = global[coverageVar]; - } - //important: there is no event loop at this point - //everything that happens in this exit handler MUST be synchronous - if (config.instrumentation.includeAllSources()) { - // Files that are not touched by code ran by the test runner is manually instrumented, to - // illustrate the missing coverage. - matchFn.files.forEach(function (file) { - if (!cov[file]) { - transformer(fs.readFileSync(file, 'utf-8'), file); - - // When instrumenting the code, istanbul will give each FunctionDeclaration a value of 1 in coverState.s, - // presumably to compensate for function hoisting. We need to reset this, as the function was not hoisted, - // as it was never loaded. - Object.keys(instrumenter.coverState.s).forEach(function (key) { - instrumenter.coverState.s[key] = 0; - }); - - cov[file] = instrumenter.coverState; - } - }); - } - mkdirp.sync(reportingDir); //yes, do this again since some test runners could clean the dir initially created - if (config.reporting.print() !== 'none') { - console.error('============================================================================='); - console.error('Writing coverage object [' + file + ']'); - } - fs.writeFileSync(file, JSON.stringify(cov), 'utf8'); - collector = new Collector(); - collector.add(cov); - if (config.reporting.print() !== 'none') { - console.error('Writing coverage reports at [' + reportingDir + ']'); - console.error('============================================================================='); - } - reporter.write(collector, true, callback); - }); - runFn(); - }); - } else { - runFn(); - } -} - -module.exports = { - run: run, - usage: usage -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/cover.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/cover.js deleted file mode 100644 index ee8242917..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/cover.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var runWithCover = require('./common/run-with-cover'), - util = require('util'), - Command = require('./index'); - -function CoverCommand() { - Command.call(this); -} - -CoverCommand.TYPE = 'cover'; -util.inherits(CoverCommand, Command); - -Command.mix(CoverCommand, { - synopsis: function () { - return "transparently adds coverage information to a node command. Saves coverage.json and reports at the end of execution"; - }, - - usage: function () { - runWithCover.usage(this.toolName(), this.type()); - }, - - run: function (args, callback) { - runWithCover.run(args, this.type(), true, callback); - } -}); - - -module.exports = CoverCommand; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/help.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/help.js deleted file mode 100644 index e3f6d76b7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/help.js +++ /dev/null @@ -1,102 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var Command = require('./index.js'), - util = require('util'), - formatOption = require('../util/help-formatter').formatOption, - VERSION = require('../../index').VERSION, - configuration = require('../config'), - yaml = require('js-yaml'), - formatPara = require('../util/help-formatter').formatPara; - -function showConfigHelp(toolName) { - - console.error('\nConfiguring ' + toolName); - console.error('===================='); - console.error('\n' + - formatPara(toolName + ' can be configured globally using a .istanbul.yml YAML file ' + - 'at the root of your source tree. Every command also accepts a --config= argument to ' + - 'customize its location per command. The alternate config file can be in YAML, JSON or node.js ' + - '(exporting the config object).')); - console.error('\n' + - formatPara('The config file currently has four sections for instrumentation, reporting, hooks, ' + - 'and checking. Note that certain commands (like `cover`) use information from multiple sections.')); - console.error('\n' + - formatPara('Keys in the config file usually correspond to command line parameters with the same name. ' + - 'The verbose option for every command shows you the exact configuration used. See the api ' + - 'docs for an explanation of each key.')); - - console.error('\n' + - formatPara('You only need to specify the keys that you want to override. Your overrides will be merged ' + - 'with the default config.')); - console.error('\nThe default configuration is as follows:\n'); - console.error(yaml.safeDump(configuration.defaultConfig(), { indent: 4, flowLevel: 3 })); - console.error('\n' + - formatPara('The `watermarks` section does not have a command line equivalent. It allows you to set up ' + - 'low and high watermark percentages for reporting. These are honored by all reporters that colorize ' + - 'their output based on low/ medium/ high coverage.')); - console.error('\n' + - formatPara('The `reportConfig` section allows you to configure each report format independently ' + - 'and has no command-line equivalent either.')); - console.error('\n' + - formatPara('The `check` section configures minimum threshold enforcement for coverage results. ' + - '`global` applies to all files together and `each` on a per-file basis. A list of files can ' + - 'be excluded from enforcement relative to root via the `exclude` property.')); - console.error(''); -} - -function HelpCommand() { - Command.call(this); -} - -HelpCommand.TYPE = 'help'; -util.inherits(HelpCommand, Command); - -Command.mix(HelpCommand, { - synopsis: function () { - return "shows help"; - }, - - usage: function () { - - console.error('\nUsage: ' + this.toolName() + ' ' + this.type() + ' config | \n'); - console.error('`config` provides help with istanbul configuration\n'); - console.error('Available commands are:\n'); - - var commandObj; - Command.getCommandList().forEach(function (cmd) { - commandObj = Command.create(cmd); - console.error(formatOption(cmd, commandObj.synopsis())); - console.error("\n"); - }); - console.error("Command names can be abbreviated as long as the abbreviation is unambiguous"); - console.error(this.toolName() + ' version:' + VERSION); - console.error("\n"); - }, - run: function (args, callback) { - var command; - if (args.length === 0) { - this.usage(); - } else { - if (args[0] === 'config') { - showConfigHelp(this.toolName()); - } else { - try { - command = Command.create(args[0]); - command.usage('istanbul', Command.resolveCommandName(args[0])); - } catch (ex) { - console.error('Invalid command: ' + args[0]); - this.usage(); - } - } - } - return callback(); - } -}); - - -module.exports = HelpCommand; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/index.js deleted file mode 100644 index 754cf1d0d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/index.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var Factory = require('../util/factory'), - factory = new Factory('command', __dirname, true); - -function Command() {} -// add register, create, mix, loadAll, getCommandList, resolveCommandName to the Command object -factory.bindClassMethods(Command); - -Command.prototype = { - toolName: function () { - return require('../util/meta').NAME; - }, - - type: function () { - return this.constructor.TYPE; - }, - synopsis: /* istanbul ignore next: base method */ function () { - return "the developer has not written a one-line summary of the " + this.type() + " command"; - }, - usage: /* istanbul ignore next: base method */ function () { - console.error("the developer has not provided a usage for the " + this.type() + " command"); - }, - run: /* istanbul ignore next: abstract method */ function (args, callback) { - return callback(new Error("run: must be overridden for the " + this.type() + " command")); - } -}; - -module.exports = Command; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/instrument.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/instrument.js deleted file mode 100644 index d08d6b87d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/instrument.js +++ /dev/null @@ -1,265 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var path = require('path'), - mkdirp = require('mkdirp'), - once = require('once'), - async = require('async'), - fs = require('fs'), - filesFor = require('../util/file-matcher').filesFor, - nopt = require('nopt'), - Instrumenter = require('../instrumenter'), - inputError = require('../util/input-error'), - formatOption = require('../util/help-formatter').formatOption, - util = require('util'), - Command = require('./index'), - Collector = require('../collector'), - configuration = require('../config'), - verbose; - - -/* - * Chunk file size to use when reading non JavaScript files in memory - * and copying them over when using complete-copy flag. - */ -var READ_FILE_CHUNK_SIZE = 64 * 1024; - -function BaselineCollector(instrumenter) { - this.instrumenter = instrumenter; - this.collector = new Collector(); - this.instrument = instrumenter.instrument.bind(this.instrumenter); - - var origInstrumentSync = instrumenter.instrumentSync; - this.instrumentSync = function () { - var args = Array.prototype.slice.call(arguments), - ret = origInstrumentSync.apply(this.instrumenter, args), - baseline = this.instrumenter.lastFileCoverage(), - coverage = {}; - coverage[baseline.path] = baseline; - this.collector.add(coverage); - return ret; - }; - //monkey patch the instrumenter to call our version instead - instrumenter.instrumentSync = this.instrumentSync.bind(this); -} - -BaselineCollector.prototype = { - getCoverage: function () { - return this.collector.getFinalCoverage(); - } -}; - - -function processFiles(instrumenter, inputDir, outputDir, relativeNames, extensions) { - var processor = function (name, callback) { - var inputFile = path.resolve(inputDir, name), - outputFile = path.resolve(outputDir, name), - inputFileExtenstion = path.extname(inputFile), - isJavaScriptFile = extensions.indexOf(inputFileExtenstion) > -1, - oDir = path.dirname(outputFile), - readStream, writeStream; - - callback = once(callback); - mkdirp.sync(oDir); - - if (fs.statSync(inputFile).isDirectory()) { - return callback(null, name); - } - - if (isJavaScriptFile) { - fs.readFile(inputFile, 'utf8', function (err, data) { - if (err) { return callback(err, name); } - instrumenter.instrument(data, inputFile, function (iErr, instrumented) { - if (iErr) { return callback(iErr, name); } - fs.writeFile(outputFile, instrumented, 'utf8', function (err) { - return callback(err, name); - }); - }); - }); - } - else { - // non JavaScript file, copy it as is - readStream = fs.createReadStream(inputFile, {'bufferSize': READ_FILE_CHUNK_SIZE}); - writeStream = fs.createWriteStream(outputFile); - - readStream.on('error', callback); - writeStream.on('error', callback); - - readStream.pipe(writeStream); - readStream.on('end', function() { - callback(null, name); - }); - } - }, - q = async.queue(processor, 10), - errors = [], - count = 0, - startTime = new Date().getTime(); - - q.push(relativeNames, function (err, name) { - var inputFile, outputFile; - if (err) { - errors.push({ file: name, error: err.message || err.toString() }); - inputFile = path.resolve(inputDir, name); - outputFile = path.resolve(outputDir, name); - fs.writeFileSync(outputFile, fs.readFileSync(inputFile)); - } - if (verbose) { - console.log('Processed: ' + name); - } else { - if (count % 100 === 0) { process.stdout.write('.'); } - } - count += 1; - }); - - q.drain = function () { - var endTime = new Date().getTime(); - console.log('\nProcessed [' + count + '] files in ' + Math.floor((endTime - startTime) / 1000) + ' secs'); - if (errors.length > 0) { - console.log('The following ' + errors.length + ' file(s) had errors and were copied as-is'); - console.log(errors); - } - }; -} - - -function InstrumentCommand() { - Command.call(this); -} - -InstrumentCommand.TYPE = 'instrument'; -util.inherits(InstrumentCommand, Command); - -Command.mix(InstrumentCommand, { - synopsis: function synopsis() { - return "instruments a file or a directory tree and writes the instrumented code to the desired output location"; - }, - - usage: function () { - console.error('\nUsage: ' + this.toolName() + ' ' + this.type() + ' \n\nOptions are:\n\n' + - [ - formatOption('--config ', 'the configuration file to use, defaults to .istanbul.yml'), - formatOption('--output ', 'The output file or directory. This is required when the input is a directory, ' + - 'defaults to standard output when input is a file'), - formatOption('-x [-x ]', 'one or more glob patterns (e.g. "**/vendor/**" to ignore all files ' + - 'under a vendor directory). Also see the --default-excludes option'), - formatOption('--variable ', 'change the variable name of the global coverage variable from the ' + - 'default value of `__coverage__` to something else'), - formatOption('--embed-source', 'embed source code into the coverage object, defaults to false'), - formatOption('--[no-]compact', 'produce [non]compact output, defaults to compact'), - formatOption('--[no-]preserve-comments', 'remove / preserve comments in the output, defaults to false'), - formatOption('--[no-]complete-copy', 'also copy non-javascript files to the ouput directory as is, defaults to false'), - formatOption('--save-baseline', 'produce a baseline coverage.json file out of all files instrumented'), - formatOption('--baseline-file ', 'filename of baseline file, defaults to coverage/coverage-baseline.json'), - formatOption('--es-modules', 'source code uses es import/export module syntax') - ].join('\n\n') + '\n'); - console.error('\n'); - }, - - run: function (args, callback) { - - var template = { - config: path, - output: path, - x: [Array, String], - variable: String, - compact: Boolean, - 'complete-copy': Boolean, - verbose: Boolean, - 'save-baseline': Boolean, - 'baseline-file': path, - 'embed-source': Boolean, - 'preserve-comments': Boolean, - 'es-modules': Boolean - }, - opts = nopt(template, { v : '--verbose' }, args, 0), - overrides = { - verbose: opts.verbose, - instrumentation: { - variable: opts.variable, - compact: opts.compact, - 'embed-source': opts['embed-source'], - 'preserve-comments': opts['preserve-comments'], - excludes: opts.x, - 'complete-copy': opts['complete-copy'], - 'save-baseline': opts['save-baseline'], - 'baseline-file': opts['baseline-file'], - 'es-modules': opts['es-modules'] - } - }, - config = configuration.loadFile(opts.config, overrides), - iOpts = config.instrumentation, - cmdArgs = opts.argv.remain, - file, - stats, - stream, - includes, - instrumenter, - needBaseline = iOpts.saveBaseline(), - baselineFile = path.resolve(iOpts.baselineFile()), - output = opts.output; - - verbose = config.verbose; - if (cmdArgs.length !== 1) { - return callback(inputError.create('Need exactly one filename/ dirname argument for the instrument command!')); - } - - if (iOpts.completeCopy()) { - includes = ['**/*']; - } - else { - includes = iOpts.extensions().map(function(ext) { - return '**/*' + ext; - }); - } - - instrumenter = new Instrumenter({ - coverageVariable: iOpts.variable(), - embedSource: iOpts.embedSource(), - noCompact: !iOpts.compact(), - preserveComments: iOpts.preserveComments(), - esModules: iOpts.esModules() - }); - - if (needBaseline) { - mkdirp.sync(path.dirname(baselineFile)); - instrumenter = new BaselineCollector(instrumenter); - process.on('exit', function () { - console.log('Saving baseline coverage at: ' + baselineFile); - fs.writeFileSync(baselineFile, JSON.stringify(instrumenter.getCoverage()), 'utf8'); - }); - } - - file = path.resolve(cmdArgs[0]); - stats = fs.statSync(file); - if (stats.isDirectory()) { - if (!output) { return callback(inputError.create('Need an output directory [-o ] when input is a directory!')); } - if (output === file) { return callback(inputError.create('Cannot instrument into the same directory/ file as input!')); } - mkdirp.sync(output); - filesFor({ - root: file, - includes: includes, - excludes: opts.x || iOpts.excludes(false), // backwards-compat, *sigh* - relative: true - }, function (err, files) { - if (err) { return callback(err); } - processFiles(instrumenter, file, output, files, iOpts.extensions()); - }); - } else { - if (output) { - stream = fs.createWriteStream(output); - } else { - stream = process.stdout; - } - stream.write(instrumenter.instrumentSync(fs.readFileSync(file, 'utf8'), file)); - if (stream !== process.stdout) { - stream.end(); - } - } - } -}); - -module.exports = InstrumentCommand; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/report.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/report.js deleted file mode 100644 index 7abc52cfd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/report.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var nopt = require('nopt'), - Report = require('../report'), - Reporter = require('../reporter'), - path = require('path'), - fs = require('fs'), - Collector = require('../collector'), - helpFormatter = require('../util/help-formatter'), - formatOption = helpFormatter.formatOption, - formatPara = helpFormatter.formatPara, - filesFor = require('../util/file-matcher').filesFor, - util = require('util'), - Command = require('./index'), - configuration = require('../config'); - -function ReportCommand() { - Command.call(this); -} - -ReportCommand.TYPE = 'report'; -util.inherits(ReportCommand, Command); - -function printDeprecationMessage(pat, fmt) { - console.error('**********************************************************************'); - console.error('DEPRECATION WARNING! You are probably using the old format of the report command'); - console.error('This will stop working soon, see `istanbul help report` for the new command format'); - console.error('Assuming you meant: istanbul report --include=' + pat + ' ' + fmt); - console.error('**********************************************************************'); -} - -Command.mix(ReportCommand, { - synopsis: function () { - return "writes reports for coverage JSON objects produced in a previous run"; - }, - - usage: function () { - console.error('\nUsage: ' + this.toolName() + ' ' + this.type() + ' [ ... ]\n\nOptions are:\n\n' + - [ - formatOption('--config ', 'the configuration file to use, defaults to .istanbul.yml'), - formatOption('--root ', 'The input root directory for finding coverage files'), - formatOption('--dir ', 'The output directory where files will be written. This defaults to ./coverage/'), - formatOption('--include ', 'The glob pattern to select one or more coverage files, defaults to **/coverage*.json'), - formatOption('--verbose, -v', 'verbose mode') - ].join('\n\n')); - - console.error('\n'); - console.error(' is one of '); - Report.getReportList().forEach(function (name) { - console.error(formatOption(name, Report.create(name).synopsis())); - }); - console.error(""); - console.error(formatPara([ - 'Default format is lcov unless otherwise specified in the config file.', - 'In addition you can tweak the file names for various reports using the config file.', - 'Type `istanbul help config` to see what can be tweaked.' - ].join(' '))); - console.error('\n'); - }, - - run: function (args, callback) { - - var template = { - config: path, - root: path, - dir: path, - include: String, - verbose: Boolean - }, - opts = nopt(template, { v : '--verbose' }, args, 0), - includePattern = opts.include || '**/coverage*.json', - root, - collector = new Collector(), - config = configuration.loadFile(opts.config, { - verbose: opts.verbose, - reporting: { - dir: opts.dir - } - }), - formats = opts.argv.remain, - reporter = new Reporter(config); - - // Start: backward compatible processing - if (formats.length === 2 && - Report.getReportList().indexOf(formats[1]) < 0) { - includePattern = formats[1]; - formats = [ formats[0] ]; - printDeprecationMessage(includePattern, formats[0]); - } - // End: backward compatible processing - - if (formats.length === 0) { - formats = config.reporting.reports(); - } - if (formats.length === 0) { - formats = [ 'lcov' ]; - } - reporter.addAll(formats); - - root = opts.root || process.cwd(); - filesFor({ - root: root, - includes: [ includePattern ] - }, function (err, files) { - if (err) { throw err; } - files.forEach(function (file) { - var coverageObject = JSON.parse(fs.readFileSync(file, 'utf8')); - collector.add(coverageObject); - }); - reporter.write(collector, false, function (err) { - console.log('Done'); - return callback(err); - }); - }); - } -}); - -module.exports = ReportCommand; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/test.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/test.js deleted file mode 100644 index 59305074c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/command/test.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var runWithCover = require('./common/run-with-cover'), - util = require('util'), - Command = require('./index'); - -function TestCommand() { - Command.call(this); -} - -TestCommand.TYPE = 'test'; -util.inherits(TestCommand, Command); - -Command.mix(TestCommand, { - synopsis: function () { - return "cover a node command only when npm_config_coverage is set. Use in an `npm test` script for conditional coverage"; - }, - - usage: function () { - runWithCover.usage(this.toolName(), this.type()); - }, - - run: function (args, callback) { - runWithCover.run(args, this.type(), !!process.env.npm_config_coverage, callback); - } -}); - -module.exports = TestCommand; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/config.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/config.js deleted file mode 100644 index 270193557..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/config.js +++ /dev/null @@ -1,491 +0,0 @@ -/* - Copyright (c) 2013, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var path = require('path'), - fs = require('fs'), - existsSync = fs.existsSync || path.existsSync, - CAMEL_PATTERN = /([a-z])([A-Z])/g, - YML_PATTERN = /\.ya?ml$/, - yaml = require('js-yaml'), - defaults = require('./report/common/defaults'); - -function defaultConfig(includeBackCompatAttrs) { - var ret = { - verbose: false, - instrumentation: { - root: '.', - extensions: ['.js'], - 'default-excludes': true, - excludes: [], - 'embed-source': false, - variable: '__coverage__', - compact: true, - 'preserve-comments': false, - 'complete-copy': false, - 'save-baseline': false, - 'baseline-file': './coverage/coverage-baseline.json', - 'include-all-sources': false, - 'include-pid': false, - 'es-modules': false - }, - reporting: { - print: 'summary', - reports: [ 'lcov' ], - dir: './coverage' - }, - hooks: { - 'hook-run-in-context': false, - 'post-require-hook': null, - 'handle-sigint': false - }, - check: { - global: { - statements: 0, - lines: 0, - branches: 0, - functions: 0, - excludes: [] // Currently list of files (root + path). For future, extend to patterns. - }, - each: { - statements: 0, - lines: 0, - branches: 0, - functions: 0, - excludes: [] - } - } - }; - ret.reporting.watermarks = defaults.watermarks(); - ret.reporting['report-config'] = defaults.defaultReportConfig(); - - if (includeBackCompatAttrs) { - ret.instrumentation['preload-sources'] = false; - } - - return ret; -} - -function dasherize(word) { - return word.replace(CAMEL_PATTERN, function (match, lch, uch) { - return lch + '-' + uch.toLowerCase(); - }); -} -function isScalar(v) { - if (v === null) { return true; } - return v !== undefined && !Array.isArray(v) && typeof v !== 'object'; -} - -function isObject(v) { - return typeof v === 'object' && v !== null && !Array.isArray(v); -} - -function mergeObjects(explicit, template) { - - var ret = {}; - - Object.keys(template).forEach(function (k) { - var v1 = template[k], - v2 = explicit[k]; - - if (Array.isArray(v1)) { - ret[k] = Array.isArray(v2) && v2.length > 0 ? v2 : v1; - } else if (isObject(v1)) { - v2 = isObject(v2) ? v2 : {}; - ret[k] = mergeObjects(v2, v1); - } else { - ret[k] = isScalar(v2) ? v2 : v1; - } - }); - return ret; -} - -function mergeDefaults(explicit, implicit) { - return mergeObjects(explicit || {}, implicit); -} - -function addMethods() { - var args = Array.prototype.slice.call(arguments), - cons = args.shift(); - - args.forEach(function (arg) { - var method = arg, - property = dasherize(arg); - cons.prototype[method] = function () { - return this.config[property]; - }; - }); -} - -/** - * Object that returns instrumentation options - * @class InstrumentOptions - * @module config - * @constructor - * @param config the instrumentation part of the config object - */ -function InstrumentOptions(config) { - if (config['preload-sources']) { - console.error('The preload-sources option is deprecated, please use include-all-sources instead.'); - config['include-all-sources'] = config['preload-sources']; - } - this.config = config; -} - -/** - * returns if default excludes should be turned on. Used by the `cover` command. - * @method defaultExcludes - * @return {Boolean} true if default excludes should be turned on - */ -/** - * returns if non-JS files should be copied during instrumentation. Used by the - * `instrument` command. - * @method completeCopy - * @return {Boolean} true if non-JS files should be copied - */ -/** - * returns if the source should be embedded in the instrumented code. Used by the - * `instrument` command. - * @method embedSource - * @return {Boolean} true if the source should be embedded in the instrumented code - */ -/** - * the coverage variable name to use. Used by the `instrument` command. - * @method variable - * @return {String} the coverage variable name to use - */ -/** - * returns if the output should be compact JS. Used by the `instrument` command. - * @method compact - * @return {Boolean} true if the output should be compact - */ -/** - * returns if comments should be preserved in the generated JS. Used by the - * `cover` and `instrument` commands. - * @method preserveComments - * @return {Boolean} true if comments should be preserved in the generated JS - */ -/** - * returns if a zero-coverage baseline file should be written as part of - * instrumentation. This allows reporting to display numbers for files that have - * no tests. Used by the `instrument` command. - * @method saveBaseline - * @return {Boolean} true if a baseline coverage file should be written. - */ -/** - * Sets the baseline coverage filename. Used by the `instrument` command. - * @method baselineFile - * @return {String} the name of the baseline coverage file. - */ -/** - * returns if comments the JS to instrument contains es6 Module syntax. - * @method esModules - * @return {Boolean} true if code contains es6 import/export statements. - */ -/** - * returns if the coverage filename should include the PID. Used by the `instrument` command. - * @method includePid - * @return {Boolean} true to include pid in coverage filename. - */ - - -addMethods(InstrumentOptions, - 'extensions', 'defaultExcludes', 'completeCopy', - 'embedSource', 'variable', 'compact', 'preserveComments', - 'saveBaseline', 'baselineFile', 'esModules', - 'includeAllSources', 'includePid'); - -/** - * returns the root directory used by istanbul which is typically the root of the - * source tree. Used by the `cover` and `report` commands. - * @method root - * @return {String} the root directory used by istanbul. - */ -InstrumentOptions.prototype.root = function () { return path.resolve(this.config.root); }; -/** - * returns an array of glob patterns that should be excluded for instrumentation. - * Used by the `instrument` and `cover` commands. - * @method excludes - * @return {Array} an array of glob patterns that should be excluded for - * instrumentation. - */ -InstrumentOptions.prototype.excludes = function (excludeTests) { - var defs; - if (this.defaultExcludes()) { - defs = [ '**/node_modules/**' ]; - if (excludeTests) { - defs = defs.concat(['**/test/**', '**/tests/**']); - } - return defs.concat(this.config.excludes); - } - return this.config.excludes; -}; - -/** - * Object that returns reporting options - * @class ReportingOptions - * @module config - * @constructor - * @param config the reporting part of the config object - */ -function ReportingOptions(config) { - this.config = config; -} - -/** - * returns the kind of information to be printed on the console. May be one - * of `summary`, `detail`, `both` or `none`. Used by the - * `cover` command. - * @method print - * @return {String} the kind of information to print to the console at the end - * of the `cover` command execution. - */ -/** - * returns a list of reports that should be generated at the end of a run. Used - * by the `cover` and `report` commands. - * @method reports - * @return {Array} an array of reports that should be produced - */ -/** - * returns the directory under which reports should be generated. Used by the - * `cover` and `report` commands. - * - * @method dir - * @return {String} the directory under which reports should be generated. - */ -/** - * returns an object that has keys that are report format names and values that are objects - * containing detailed configuration for each format. Running `istanbul help config` - * will give you all the keys per report format that can be overridden. - * Used by the `cover` and `report` commands. - * @method reportConfig - * @return {Object} detailed report configuration per report format. - */ -addMethods(ReportingOptions, 'print', 'reports', 'dir', 'reportConfig'); - -function isInvalidMark(v, key) { - var prefix = 'Watermark for [' + key + '] :'; - - if (v.length !== 2) { - return prefix + 'must be an array of length 2'; - } - v[0] = Number(v[0]); - v[1] = Number(v[1]); - - if (isNaN(v[0]) || isNaN(v[1])) { - return prefix + 'must have valid numbers'; - } - if (v[0] < 0 || v[1] < 0) { - return prefix + 'must be positive numbers'; - } - if (v[1] > 100) { - return prefix + 'cannot exceed 100'; - } - if (v[1] <= v[0]) { - return prefix + 'low must be less than high'; - } - return null; -} - -/** - * returns the low and high watermarks to be used to designate whether coverage - * is `low`, `medium` or `high`. Statements, functions, branches and lines can - * have independent watermarks. These are respected by all reports - * that color for low, medium and high coverage. See the default configuration for exact syntax - * using `istanbul help config`. Used by the `cover` and `report` commands. - * - * @method watermarks - * @return {Object} an object containing low and high watermarks for statements, - * branches, functions and lines. - */ -ReportingOptions.prototype.watermarks = function () { - var v = this.config.watermarks, - defs = defaults.watermarks(), - ret = {}; - - Object.keys(defs).forEach(function (k) { - var mark = v[k], //it will already be a non-zero length array because of the way the merge works - message = isInvalidMark(mark, k); - if (message) { - console.error(message); - ret[k] = defs[k]; - } else { - ret[k] = mark; - } - }); - return ret; -}; - -/** - * Object that returns hook options. Note that istanbul does not provide an - * option to hook `require`. This is always done by the `cover` command. - * @class HookOptions - * @module config - * @constructor - * @param config the hooks part of the config object - */ -function HookOptions(config) { - this.config = config; -} - -/** - * returns if `vm.runInThisContext` needs to be hooked, in addition to the standard - * `require` hooks added by istanbul. This should be true for code that uses - * RequireJS for example. Used by the `cover` command. - * @method hookRunInContext - * @return {Boolean} true if `vm.runInThisContext` needs to be hooked for coverage - */ -/** - * returns a path to JS file or a dependent module that should be used for - * post-processing files after they have been required. See the `yui-istanbul` module for - * an example of a post-require hook. This particular hook modifies the yui loader when - * that file is required to add istanbul interceptors. Use by the `cover` command - * - * @method postRequireHook - * @return {String} a path to a JS file or the name of a node module that needs - * to be used as a `require` post-processor - */ -/** - * returns if istanbul needs to add a SIGINT (control-c, usually) handler to - * save coverage information. Useful for getting code coverage out of processes - * that run forever and need a SIGINT to terminate. - * @method handleSigint - * @return {Boolean} true if SIGINT needs to be hooked to write coverage information - */ - -addMethods(HookOptions, 'hookRunInContext', 'postRequireHook', 'handleSigint'); - -/** - * represents the istanbul configuration and provides sub-objects that can - * return instrumentation, reporting and hook options respectively. - * Usage - * ----- - * - * var configObj = require('istanbul').config.loadFile(); - * - * console.log(configObj.reporting.reports()); - * - * @class Configuration - * @module config - * @param {Object} obj the base object to use as the configuration - * @param {Object} overrides optional - override attributes that are merged into - * the base config - * @constructor - */ -function Configuration(obj, overrides) { - - var config = mergeDefaults(obj, defaultConfig(true)); - if (isObject(overrides)) { - config = mergeDefaults(overrides, config); - } - if (config.verbose) { - console.error('Using configuration'); - console.error('-------------------'); - console.error(yaml.safeDump(config, { indent: 4, flowLevel: 3 })); - console.error('-------------------\n'); - } - this.verbose = config.verbose; - this.instrumentation = new InstrumentOptions(config.instrumentation); - this.reporting = new ReportingOptions(config.reporting); - this.hooks = new HookOptions(config.hooks); - this.check = config.check; // Pass raw config sub-object. -} - -/** - * true if verbose logging is required - * @property verbose - * @type Boolean - */ -/** - * instrumentation options - * @property instrumentation - * @type InstrumentOptions - */ -/** - * reporting options - * @property reporting - * @type ReportingOptions - */ -/** - * hook options - * @property hooks - * @type HookOptions - */ - - -function loadFile(file, overrides) { - var defaultConfigFile = path.resolve('.istanbul.yml'), - configObject; - - if (file) { - if (!existsSync(file)) { - throw new Error('Invalid configuration file specified:' + file); - } - } else { - if (existsSync(defaultConfigFile)) { - file = defaultConfigFile; - } - } - - if (file) { - if (overrides && overrides.verbose === true) { - console.error('Loading config: ' + file); - } - configObject = file.match(YML_PATTERN) ? - yaml.safeLoad(fs.readFileSync(file, 'utf8'), { filename: file }) : - require(path.resolve(file)); - } - - return new Configuration(configObject, overrides); -} - -function loadObject(obj, overrides) { - return new Configuration(obj, overrides); -} - -/** - * methods to load the configuration object. - * Usage - * ----- - * - * var config = require('istanbul').config, - * configObj = config.loadFile(); - * - * console.log(configObj.reporting.reports()); - * - * @class Config - * @module main - * @static - */ -module.exports = { - /** - * loads the specified configuration file with optional overrides. Throws - * when a file is specified and it is not found. - * @method loadFile - * @static - * @param {String} file the file to load. If falsy, the default config file, if present, is loaded. - * If not a default config is used. - * @param {Object} overrides - an object with override keys that are merged into the - * config object loaded - * @return {Configuration} the config object with overrides applied - */ - loadFile: loadFile, - /** - * loads the specified configuration object with optional overrides. - * @method loadObject - * @static - * @param {Object} obj the object to use as the base configuration. - * @param {Object} overrides - an object with override keys that are merged into the - * config object - * @return {Configuration} the config object with overrides applied - */ - loadObject: loadObject, - /** - * returns the default configuration object. Note that this is a plain object - * and not a `Configuration` instance. - * @method defaultConfig - * @static - * @return {Object} an object that represents the default config - */ - defaultConfig: defaultConfig -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/hook.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/hook.js deleted file mode 100644 index ce238268d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/hook.js +++ /dev/null @@ -1,198 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -/** - * provides a mechanism to transform code in the scope of `require` or `vm.createScript`. - * This mechanism is general and relies on a user-supplied `matcher` function that determines when transformations should be - * performed and a user-supplied `transformer` function that performs the actual transform. - * Instrumenting code for coverage is one specific example of useful hooking. - * - * Note that both the `matcher` and `transformer` must execute synchronously. - * - * For the common case of matching filesystem paths based on inclusion/ exclusion patterns, use the `matcherFor` - * function in the istanbul API to get a matcher. - * - * It is up to the transformer to perform processing with side-effects, such as caching, storing the original - * source code to disk in case of dynamically generated scripts etc. The `Store` class can help you with this. - * - * Usage - * ----- - * - * var hook = require('istanbul').hook, - * myMatcher = function (file) { return file.match(/foo/); }, - * myTransformer = function (code, file) { return 'console.log("' + file + '");' + code; }; - * - * hook.hookRequire(myMatcher, myTransformer); - * - * var foo = require('foo'); //will now print foo's module path to console - * - * @class Hook - * @module main - */ -var path = require('path'), - fs = require('fs'), - Module = require('module'), - vm = require('vm'), - originalLoaders = {}, - originalCreateScript = vm.createScript, - originalRunInThisContext = vm.runInThisContext; - -function transformFn(matcher, transformer, verbose) { - - return function (code, filename) { - var shouldHook = typeof filename === 'string' && matcher(path.resolve(filename)), - transformed, - changed = false; - - if (shouldHook) { - if (verbose) { - console.error('Module load hook: transform [' + filename + ']'); - } - try { - transformed = transformer(code, filename); - changed = true; - } catch (ex) { - console.error('Transformation error; return original code'); - console.error(ex); - transformed = code; - } - } else { - transformed = code; - } - return { code: transformed, changed: changed }; - }; -} - -function unloadRequireCache(matcher) { - if (matcher && typeof require !== 'undefined' && require && require.cache) { - Object.keys(require.cache).forEach(function (filename) { - if (matcher(filename)) { - delete require.cache[filename]; - } - }); - } -} -/** - * hooks `require` to return transformed code to the node module loader. - * Exceptions in the transform result in the original code being used instead. - * @method hookRequire - * @static - * @param matcher {Function(filePath)} a function that is called with the absolute path to the file being - * `require`-d. Should return a truthy value when transformations need to be applied to the code, a falsy value otherwise - * @param transformer {Function(code, filePath)} a function called with the original code and the associated path of the file - * from where the code was loaded. Should return the transformed code. - * @param options {Object} options Optional. - * @param {Boolean} [options.verbose] write a line to standard error every time the transformer is called - * @param {Function} [options.postLoadHook] a function that is called with the name of the file being - * required. This is called after the require is processed irrespective of whether it was transformed. - */ -function hookRequire(matcher, transformer, options) { - options = options || {}; - var extensions, - fn = transformFn(matcher, transformer, options.verbose), - postLoadHook = options.postLoadHook && - typeof options.postLoadHook === 'function' ? options.postLoadHook : null; - - extensions = options.extensions || ['.js']; - - extensions.forEach(function(ext){ - if (!(ext in originalLoaders)) { - originalLoaders[ext] = Module._extensions[ext] || Module._extensions['.js']; - } - Module._extensions[ext] = function (module, filename) { - var ret = fn(fs.readFileSync(filename, 'utf8'), filename); - if (ret.changed) { - module._compile(ret.code, filename); - } else { - originalLoaders[ext](module, filename); - } - if (postLoadHook) { - postLoadHook(filename); - } - }; - }); -} -/** - * unhook `require` to restore it to its original state. - * @method unhookRequire - * @static - */ -function unhookRequire() { - Object.keys(originalLoaders).forEach(function(ext) { - Module._extensions[ext] = originalLoaders[ext]; - }); -} -/** - * hooks `vm.createScript` to return transformed code out of which a `Script` object will be created. - * Exceptions in the transform result in the original code being used instead. - * @method hookCreateScript - * @static - * @param matcher {Function(filePath)} a function that is called with the filename passed to `vm.createScript` - * Should return a truthy value when transformations need to be applied to the code, a falsy value otherwise - * @param transformer {Function(code, filePath)} a function called with the original code and the filename passed to - * `vm.createScript`. Should return the transformed code. - * @param options {Object} options Optional. - * @param {Boolean} [options.verbose] write a line to standard error every time the transformer is called - */ -function hookCreateScript(matcher, transformer, opts) { - opts = opts || {}; - var fn = transformFn(matcher, transformer, opts.verbose); - vm.createScript = function (code, file) { - var ret = fn(code, file); - return originalCreateScript(ret.code, file); - }; -} - -/** - * unhooks vm.createScript, restoring it to its original state. - * @method unhookCreateScript - * @static - */ -function unhookCreateScript() { - vm.createScript = originalCreateScript; -} - - -/** - * hooks `vm.runInThisContext` to return transformed code. - * @method hookRunInThisContext - * @static - * @param matcher {Function(filePath)} a function that is called with the filename passed to `vm.createScript` - * Should return a truthy value when transformations need to be applied to the code, a falsy value otherwise - * @param transformer {Function(code, filePath)} a function called with the original code and the filename passed to - * `vm.createScript`. Should return the transformed code. - * @param options {Object} options Optional. - * @param {Boolean} [options.verbose] write a line to standard error every time the transformer is called - */ -function hookRunInThisContext(matcher, transformer, opts) { - opts = opts || {}; - var fn = transformFn(matcher, transformer, opts.verbose); - vm.runInThisContext = function (code, file) { - var ret = fn(code, file); - return originalRunInThisContext(ret.code, file); - }; -} - -/** - * unhooks vm.runInThisContext, restoring it to its original state. - * @method unhookRunInThisContext - * @static - */ -function unhookRunInThisContext() { - vm.runInThisContext = originalRunInThisContext; -} - - -module.exports = { - hookRequire: hookRequire, - unhookRequire: unhookRequire, - hookCreateScript: hookCreateScript, - unhookCreateScript: unhookCreateScript, - hookRunInThisContext : hookRunInThisContext, - unhookRunInThisContext : unhookRunInThisContext, - unloadRequireCache: unloadRequireCache -}; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/instrumenter.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/instrumenter.js deleted file mode 100644 index 61c02cf09..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/instrumenter.js +++ /dev/null @@ -1,1097 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -/*global esprima, escodegen, window */ -(function (isNode) { - "use strict"; - var SYNTAX, - nodeType, - ESP = isNode ? require('esprima') : esprima, - ESPGEN = isNode ? require('escodegen') : escodegen, //TODO - package as dependency - crypto = isNode ? require('crypto') : null, - LEADER_WRAP = '(function () { ', - TRAILER_WRAP = '\n}());', - COMMENT_RE = /^\s*istanbul\s+ignore\s+(if|else|next)(?=\W|$)/, - astgen, - preconditions, - cond, - isArray = Array.isArray; - - /* istanbul ignore if: untestable */ - if (!isArray) { - isArray = function (thing) { return thing && Object.prototype.toString.call(thing) === '[object Array]'; }; - } - - if (!isNode) { - preconditions = { - 'Could not find esprima': ESP, - 'Could not find escodegen': ESPGEN, - 'JSON object not in scope': JSON, - 'Array does not implement push': [].push, - 'Array does not implement unshift': [].unshift - }; - /* istanbul ignore next: untestable */ - for (cond in preconditions) { - if (preconditions.hasOwnProperty(cond)) { - if (!preconditions[cond]) { throw new Error(cond); } - } - } - } - - function generateTrackerVar(filename, omitSuffix) { - var hash, suffix; - if (crypto !== null) { - hash = crypto.createHash('md5'); - hash.update(filename); - suffix = hash.digest('base64'); - //trim trailing equal signs, turn identifier unsafe chars to safe ones + => _ and / => $ - suffix = suffix.replace(new RegExp('=', 'g'), '') - .replace(new RegExp('\\+', 'g'), '_') - .replace(new RegExp('/', 'g'), '$'); - } else { - window.__cov_seq = window.__cov_seq || 0; - window.__cov_seq += 1; - suffix = window.__cov_seq; - } - return '__cov_' + (omitSuffix ? '' : suffix); - } - - function pushAll(ary, thing) { - if (!isArray(thing)) { - thing = [ thing ]; - } - Array.prototype.push.apply(ary, thing); - } - - SYNTAX = { - // keep in sync with estraverse's VisitorKeys - AssignmentExpression: ['left', 'right'], - AssignmentPattern: ['left', 'right'], - ArrayExpression: ['elements'], - ArrayPattern: ['elements'], - ArrowFunctionExpression: ['params', 'body'], - AwaitExpression: ['argument'], // CAUTION: It's deferred to ES7. - BlockStatement: ['body'], - BinaryExpression: ['left', 'right'], - BreakStatement: ['label'], - CallExpression: ['callee', 'arguments'], - CatchClause: ['param', 'body'], - ClassBody: ['body'], - ClassDeclaration: ['id', 'superClass', 'body'], - ClassExpression: ['id', 'superClass', 'body'], - ComprehensionBlock: ['left', 'right'], // CAUTION: It's deferred to ES7. - ComprehensionExpression: ['blocks', 'filter', 'body'], // CAUTION: It's deferred to ES7. - ConditionalExpression: ['test', 'consequent', 'alternate'], - ContinueStatement: ['label'], - DebuggerStatement: [], - DirectiveStatement: [], - DoWhileStatement: ['body', 'test'], - EmptyStatement: [], - ExportAllDeclaration: ['source'], - ExportDefaultDeclaration: ['declaration'], - ExportNamedDeclaration: ['declaration', 'specifiers', 'source'], - ExportSpecifier: ['exported', 'local'], - ExpressionStatement: ['expression'], - ForStatement: ['init', 'test', 'update', 'body'], - ForInStatement: ['left', 'right', 'body'], - ForOfStatement: ['left', 'right', 'body'], - FunctionDeclaration: ['id', 'params', 'body'], - FunctionExpression: ['id', 'params', 'body'], - GeneratorExpression: ['blocks', 'filter', 'body'], // CAUTION: It's deferred to ES7. - Identifier: [], - IfStatement: ['test', 'consequent', 'alternate'], - ImportDeclaration: ['specifiers', 'source'], - ImportDefaultSpecifier: ['local'], - ImportNamespaceSpecifier: ['local'], - ImportSpecifier: ['imported', 'local'], - Literal: [], - LabeledStatement: ['label', 'body'], - LogicalExpression: ['left', 'right'], - MetaProperty: ['meta', 'property'], - MemberExpression: ['object', 'property'], - MethodDefinition: ['key', 'value'], - ModuleSpecifier: [], - NewExpression: ['callee', 'arguments'], - ObjectExpression: ['properties'], - ObjectPattern: ['properties'], - Program: ['body'], - Property: ['key', 'value'], - RestElement: [ 'argument' ], - ReturnStatement: ['argument'], - SequenceExpression: ['expressions'], - SpreadElement: ['argument'], - Super: [], - SwitchStatement: ['discriminant', 'cases'], - SwitchCase: ['test', 'consequent'], - TaggedTemplateExpression: ['tag', 'quasi'], - TemplateElement: [], - TemplateLiteral: ['quasis', 'expressions'], - ThisExpression: [], - ThrowStatement: ['argument'], - TryStatement: ['block', 'handler', 'finalizer'], - UnaryExpression: ['argument'], - UpdateExpression: ['argument'], - VariableDeclaration: ['declarations'], - VariableDeclarator: ['id', 'init'], - WhileStatement: ['test', 'body'], - WithStatement: ['object', 'body'], - YieldExpression: ['argument'] - }; - - for (nodeType in SYNTAX) { - /* istanbul ignore else: has own property */ - if (SYNTAX.hasOwnProperty(nodeType)) { - SYNTAX[nodeType] = { name: nodeType, children: SYNTAX[nodeType] }; - } - } - - astgen = { - variable: function (name) { return { type: SYNTAX.Identifier.name, name: name }; }, - stringLiteral: function (str) { return { type: SYNTAX.Literal.name, value: String(str) }; }, - numericLiteral: function (num) { return { type: SYNTAX.Literal.name, value: Number(num) }; }, - statement: function (contents) { return { type: SYNTAX.ExpressionStatement.name, expression: contents }; }, - dot: function (obj, field) { return { type: SYNTAX.MemberExpression.name, computed: false, object: obj, property: field }; }, - subscript: function (obj, sub) { return { type: SYNTAX.MemberExpression.name, computed: true, object: obj, property: sub }; }, - postIncrement: function (obj) { return { type: SYNTAX.UpdateExpression.name, operator: '++', prefix: false, argument: obj }; }, - sequence: function (one, two) { return { type: SYNTAX.SequenceExpression.name, expressions: [one, two] }; }, - returnStatement: function (expr) { return { type: SYNTAX.ReturnStatement.name, argument: expr }; } - }; - - function Walker(walkMap, preprocessor, scope, debug) { - this.walkMap = walkMap; - this.preprocessor = preprocessor; - this.scope = scope; - this.debug = debug; - if (this.debug) { - this.level = 0; - this.seq = true; - } - } - - function defaultWalker(node, walker) { - - var type = node.type, - preprocessor, - postprocessor, - children = SYNTAX[type], - // don't run generated nodes thru custom walks otherwise we will attempt to instrument the instrumentation code :) - applyCustomWalker = !!node.loc || node.type === SYNTAX.Program.name, - walkerFn = applyCustomWalker ? walker.walkMap[type] : null, - i, - j, - walkFnIndex, - childType, - childNode, - ret, - childArray, - childElement, - pathElement, - assignNode, - isLast; - - if (!SYNTAX[type]) { - console.error(node); - console.error('Unsupported node type:' + type); - return; - } - children = SYNTAX[type].children; - /* istanbul ignore if: guard */ - if (node.walking) { throw new Error('Infinite regress: Custom walkers may NOT call walker.apply(node)'); } - node.walking = true; - - ret = walker.apply(node, walker.preprocessor); - - preprocessor = ret.preprocessor; - if (preprocessor) { - delete ret.preprocessor; - ret = walker.apply(node, preprocessor); - } - - if (isArray(walkerFn)) { - for (walkFnIndex = 0; walkFnIndex < walkerFn.length; walkFnIndex += 1) { - isLast = walkFnIndex === walkerFn.length - 1; - ret = walker.apply(ret, walkerFn[walkFnIndex]); - /*istanbul ignore next: paranoid check */ - if (ret.type !== type && !isLast) { - throw new Error('Only the last walker is allowed to change the node type: [type was: ' + type + ' ]'); - } - } - } else { - if (walkerFn) { - ret = walker.apply(node, walkerFn); - } - } - - if (node.skipSelf) { - return; - } - - for (i = 0; i < children.length; i += 1) { - childType = children[i]; - childNode = node[childType]; - if (childNode && !childNode.skipWalk) { - pathElement = { node: node, property: childType }; - if (isArray(childNode)) { - childArray = []; - for (j = 0; j < childNode.length; j += 1) { - childElement = childNode[j]; - pathElement.index = j; - if (childElement) { - assignNode = walker.apply(childElement, null, pathElement); - if (isArray(assignNode.prepend)) { - pushAll(childArray, assignNode.prepend); - delete assignNode.prepend; - } - } else { - assignNode = undefined; - } - pushAll(childArray, assignNode); - } - node[childType] = childArray; - } else { - assignNode = walker.apply(childNode, null, pathElement); - /*istanbul ignore if: paranoid check */ - if (isArray(assignNode.prepend)) { - throw new Error('Internal error: attempt to prepend statements in disallowed (non-array) context'); - /* if this should be allowed, this is how to solve it - tmpNode = { type: 'BlockStatement', body: [] }; - pushAll(tmpNode.body, assignNode.prepend); - pushAll(tmpNode.body, assignNode); - node[childType] = tmpNode; - delete assignNode.prepend; - */ - } else { - node[childType] = assignNode; - } - } - } - } - - postprocessor = ret.postprocessor; - if (postprocessor) { - delete ret.postprocessor; - ret = walker.apply(ret, postprocessor); - } - - delete node.walking; - - return ret; - } - - Walker.prototype = { - startWalk: function (node) { - this.path = []; - this.apply(node); - }, - - apply: function (node, walkFn, pathElement) { - var ret, i, seq, prefix; - - walkFn = walkFn || defaultWalker; - if (this.debug) { - this.seq += 1; - this.level += 1; - seq = this.seq; - prefix = ''; - for (i = 0; i < this.level; i += 1) { prefix += ' '; } - console.log(prefix + 'Enter (' + seq + '):' + node.type); - } - if (pathElement) { this.path.push(pathElement); } - ret = walkFn.call(this.scope, node, this); - if (pathElement) { this.path.pop(); } - if (this.debug) { - this.level -= 1; - console.log(prefix + 'Return (' + seq + '):' + node.type); - } - return ret || node; - }, - - startLineForNode: function (node) { - return node && node.loc && node.loc.start ? node.loc.start.line : /* istanbul ignore next: guard */ null; - }, - - ancestor: function (n) { - return this.path.length > n - 1 ? this.path[this.path.length - n] : /* istanbul ignore next: guard */ null; - }, - - parent: function () { - return this.ancestor(1); - }, - - isLabeled: function () { - var el = this.parent(); - return el && el.node.type === SYNTAX.LabeledStatement.name; - } - }; - - /** - * mechanism to instrument code for coverage. It uses the `esprima` and - * `escodegen` libraries for JS parsing and code generation respectively. - * - * Works on `node` as well as the browser. - * - * Usage on nodejs - * --------------- - * - * var instrumenter = new require('istanbul').Instrumenter(), - * changed = instrumenter.instrumentSync('function meaningOfLife() { return 42; }', 'filename.js'); - * - * Usage in a browser - * ------------------ - * - * Load `esprima.js`, `escodegen.js` and `instrumenter.js` (this file) using `script` tags or other means. - * - * Create an instrumenter object as: - * - * var instrumenter = new Instrumenter(), - * changed = instrumenter.instrumentSync('function meaningOfLife() { return 42; }', 'filename.js'); - * - * Aside from demonstration purposes, it is unclear why you would want to instrument code in a browser. - * - * @class Instrumenter - * @constructor - * @param {Object} options Optional. Configuration options. - * @param {String} [options.coverageVariable] the global variable name to use for - * tracking coverage. Defaults to `__coverage__` - * @param {Boolean} [options.embedSource] whether to embed the source code of every - * file as an array in the file coverage object for that file. Defaults to `false` - * @param {Boolean} [options.preserveComments] whether comments should be preserved in the output. Defaults to `false` - * @param {Boolean} [options.noCompact] emit readable code when set. Defaults to `false` - * @param {Boolean} [options.esModules] whether the code to instrument contains uses es - * imports or exports. - * @param {Boolean} [options.noAutoWrap] do not automatically wrap the source in - * an anonymous function before covering it. By default, code is wrapped in - * an anonymous function before it is parsed. This is done because - * some nodejs libraries have `return` statements outside of - * a function which is technically invalid Javascript and causes the parser to fail. - * This construct, however, works correctly in node since module loading - * is done in the context of an anonymous function. - * - * Note that the semantics of the code *returned* by the instrumenter does not change in any way. - * The function wrapper is "unwrapped" before the instrumented code is generated. - * @param {Object} [options.codeGenerationOptions] an object that is directly passed to the `escodegen` - * library as configuration for code generation. The `noCompact` setting is not honored when this - * option is specified - * @param {Boolean} [options.debug] assist in debugging. Currently, the only effect of - * setting this option is a pretty-print of the coverage variable. Defaults to `false` - * @param {Boolean} [options.walkDebug] assist in debugging of the AST walker used by this class. - * - */ - function Instrumenter(options) { - this.opts = options || { - debug: false, - walkDebug: false, - coverageVariable: '__coverage__', - codeGenerationOptions: undefined, - noAutoWrap: false, - noCompact: false, - embedSource: false, - preserveComments: false, - esModules: false - }; - - if (this.opts.esModules && !this.opts.noAutoWrap) { - this.opts.noAutoWrap = true; - if (this.opts.debug) { - console.log('Setting noAutoWrap to true as required by esModules'); - } - } - - this.walker = new Walker({ - ArrowFunctionExpression: [ this.arrowBlockConverter ], - ExpressionStatement: this.coverStatement, - ExportNamedDeclaration: this.coverExport, - BreakStatement: this.coverStatement, - ContinueStatement: this.coverStatement, - DebuggerStatement: this.coverStatement, - ReturnStatement: this.coverStatement, - ThrowStatement: this.coverStatement, - TryStatement: [ this.paranoidHandlerCheck, this.coverStatement], - VariableDeclaration: this.coverStatement, - IfStatement: [ this.ifBlockConverter, this.coverStatement, this.ifBranchInjector ], - ForStatement: [ this.skipInit, this.loopBlockConverter, this.coverStatement ], - ForInStatement: [ this.skipLeft, this.loopBlockConverter, this.coverStatement ], - ForOfStatement: [ this.skipLeft, this.loopBlockConverter, this.coverStatement ], - WhileStatement: [ this.loopBlockConverter, this.coverStatement ], - DoWhileStatement: [ this.loopBlockConverter, this.coverStatement ], - SwitchStatement: [ this.coverStatement, this.switchBranchInjector ], - SwitchCase: [ this.switchCaseInjector ], - WithStatement: [ this.withBlockConverter, this.coverStatement ], - FunctionDeclaration: [ this.coverFunction, this.coverStatement ], - FunctionExpression: this.coverFunction, - LabeledStatement: this.coverStatement, - ConditionalExpression: this.conditionalBranchInjector, - LogicalExpression: this.logicalExpressionBranchInjector, - ObjectExpression: this.maybeAddType, - MetaProperty: this.coverMetaProperty, - }, this.extractCurrentHint, this, this.opts.walkDebug); - - //unit testing purposes only - if (this.opts.backdoor && this.opts.backdoor.omitTrackerSuffix) { - this.omitTrackerSuffix = true; - } - } - - Instrumenter.prototype = { - /** - * synchronous instrumentation method. Throws when illegal code is passed to it - * @method instrumentSync - * @param {String} code the code to be instrumented as a String - * @param {String} filename Optional. The name of the file from which - * the code was read. A temporary filename is generated when not specified. - * Not specifying a filename is only useful for unit tests and demonstrations - * of this library. - */ - instrumentSync: function (code, filename) { - var program; - - //protect from users accidentally passing in a Buffer object instead - if (typeof code !== 'string') { throw new Error('Code must be string'); } - if (code.charAt(0) === '#') { //shebang, 'comment' it out, won't affect syntax tree locations for things we care about - code = '//' + code; - } - if (!this.opts.noAutoWrap) { - code = LEADER_WRAP + code + TRAILER_WRAP; - } - try { - program = ESP.parse(code, { - loc: true, - range: true, - tokens: this.opts.preserveComments, - comment: true, - sourceType: this.opts.esModules ? 'module' : 'script' - }); - } catch (e) { - console.log('Failed to parse file: ' + filename); - throw e; - } - if (this.opts.preserveComments) { - program = ESPGEN.attachComments(program, program.comments, program.tokens); - } - if (!this.opts.noAutoWrap) { - program = { - type: SYNTAX.Program.name, - body: program.body[0].expression.callee.body.body, - comments: program.comments - }; - } - return this.instrumentASTSync(program, filename, code); - }, - filterHints: function (comments) { - var ret = [], - i, - comment, - groups; - if (!(comments && isArray(comments))) { - return ret; - } - for (i = 0; i < comments.length; i += 1) { - comment = comments[i]; - /* istanbul ignore else: paranoid check */ - if (comment && comment.value && comment.range && isArray(comment.range)) { - groups = String(comment.value).match(COMMENT_RE); - if (groups) { - ret.push({ type: groups[1], start: comment.range[0], end: comment.range[1] }); - } - } - } - return ret; - }, - extractCurrentHint: function (node) { - if (!node.range) { return; } - var i = this.currentState.lastHintPosition + 1, - hints = this.currentState.hints, - nodeStart = node.range[0], - hint; - this.currentState.currentHint = null; - while (i < hints.length) { - hint = hints[i]; - if (hint.end < nodeStart) { - this.currentState.currentHint = hint; - this.currentState.lastHintPosition = i; - i += 1; - } else { - break; - } - } - }, - /** - * synchronous instrumentation method that instruments an AST instead. - * @method instrumentASTSync - * @param {String} program the AST to be instrumented - * @param {String} filename Optional. The name of the file from which - * the code was read. A temporary filename is generated when not specified. - * Not specifying a filename is only useful for unit tests and demonstrations - * of this library. - * @param {String} originalCode the original code corresponding to the AST, - * used for embedding the source into the coverage object - */ - instrumentASTSync: function (program, filename, originalCode) { - var usingStrict = false, - codegenOptions, - generated, - preamble, - lineCount, - i; - filename = filename || String(new Date().getTime()) + '.js'; - this.sourceMap = null; - this.coverState = { - path: filename, - s: {}, - b: {}, - f: {}, - fnMap: {}, - statementMap: {}, - branchMap: {} - }; - this.currentState = { - trackerVar: generateTrackerVar(filename, this.omitTrackerSuffix), - func: 0, - branch: 0, - variable: 0, - statement: 0, - hints: this.filterHints(program.comments), - currentHint: null, - lastHintPosition: -1, - ignoring: 0 - }; - if (program.body && program.body.length > 0 && this.isUseStrictExpression(program.body[0])) { - //nuke it - program.body.shift(); - //and add it back at code generation time - usingStrict = true; - } - this.walker.startWalk(program); - codegenOptions = this.opts.codeGenerationOptions || { format: { compact: !this.opts.noCompact }}; - codegenOptions.comment = this.opts.preserveComments; - //console.log(JSON.stringify(program, undefined, 2)); - - generated = ESPGEN.generate(program, codegenOptions); - preamble = this.getPreamble(originalCode || '', usingStrict); - - if (generated.map && generated.code) { - lineCount = preamble.split(/\r\n|\r|\n/).length; - // offset all the generated line numbers by the number of lines in the preamble - for (i = 0; i < generated.map._mappings._array.length; i += 1) { - generated.map._mappings._array[i].generatedLine += lineCount; - } - this.sourceMap = generated.map; - generated = generated.code; - } - - return preamble + '\n' + generated + '\n'; - }, - /** - * Callback based instrumentation. Note that this still executes synchronously in the same process tick - * and calls back immediately. It only provides the options for callback style error handling as - * opposed to a `try-catch` style and nothing more. Implemented as a wrapper over `instrumentSync` - * - * @method instrument - * @param {String} code the code to be instrumented as a String - * @param {String} filename Optional. The name of the file from which - * the code was read. A temporary filename is generated when not specified. - * Not specifying a filename is only useful for unit tests and demonstrations - * of this library. - * @param {Function(err, instrumentedCode)} callback - the callback function - */ - instrument: function (code, filename, callback) { - - if (!callback && typeof filename === 'function') { - callback = filename; - filename = null; - } - try { - callback(null, this.instrumentSync(code, filename)); - } catch (ex) { - callback(ex); - } - }, - /** - * returns the file coverage object for the code that was instrumented - * just before calling this method. Note that this represents a - * "zero-coverage" object which is not even representative of the code - * being loaded in node or a browser (which would increase the statement - * counts for mainline code). - * @method lastFileCoverage - * @return {Object} a "zero-coverage" file coverage object for the code last instrumented - * by this instrumenter - */ - lastFileCoverage: function () { - return this.coverState; - }, - /** - * returns the source map object for the code that was instrumented - * just before calling this method. - * @method lastSourceMap - * @return {Object} a source map object for the code last instrumented - * by this instrumenter - */ - lastSourceMap: function () { - return this.sourceMap; - }, - fixColumnPositions: function (coverState) { - var offset = LEADER_WRAP.length, - fixer = function (loc) { - if (loc.start.line === 1) { - loc.start.column -= offset; - } - if (loc.end.line === 1) { - loc.end.column -= offset; - } - }, - k, - obj, - i, - locations; - - obj = coverState.statementMap; - for (k in obj) { - /* istanbul ignore else: has own property */ - if (obj.hasOwnProperty(k)) { fixer(obj[k]); } - } - obj = coverState.fnMap; - for (k in obj) { - /* istanbul ignore else: has own property */ - if (obj.hasOwnProperty(k)) { fixer(obj[k].loc); } - } - obj = coverState.branchMap; - for (k in obj) { - /* istanbul ignore else: has own property */ - if (obj.hasOwnProperty(k)) { - locations = obj[k].locations; - for (i = 0; i < locations.length; i += 1) { - fixer(locations[i]); - } - } - } - }, - - getPreamble: function (sourceCode, emitUseStrict) { - var varName = this.opts.coverageVariable || '__coverage__', - file = this.coverState.path.replace(/\\/g, '\\\\'), - tracker = this.currentState.trackerVar, - coverState, - strictLine = emitUseStrict ? '"use strict";' : '', - // return replacements using the function to ensure that the replacement is - // treated like a dumb string and not as a string with RE replacement patterns - replacer = function (s) { - return function () { return s; }; - }, - code; - if (!this.opts.noAutoWrap) { - this.fixColumnPositions(this.coverState); - } - if (this.opts.embedSource) { - this.coverState.code = sourceCode.split(/(?:\r?\n)|\r/); - } - coverState = this.opts.debug ? JSON.stringify(this.coverState, undefined, 4) : JSON.stringify(this.coverState); - code = [ - "%STRICT%", - "var %VAR% = (Function('return this'))();", - "if (!%VAR%.%GLOBAL%) { %VAR%.%GLOBAL% = {}; }", - "%VAR% = %VAR%.%GLOBAL%;", - "if (!(%VAR%['%FILE%'])) {", - " %VAR%['%FILE%'] = %OBJECT%;", - "}", - "%VAR% = %VAR%['%FILE%'];" - ].join("\n") - .replace(/%STRICT%/g, replacer(strictLine)) - .replace(/%VAR%/g, replacer(tracker)) - .replace(/%GLOBAL%/g, replacer(varName)) - .replace(/%FILE%/g, replacer(file)) - .replace(/%OBJECT%/g, replacer(coverState)); - return code; - }, - - startIgnore: function () { - this.currentState.ignoring += 1; - }, - - endIgnore: function () { - this.currentState.ignoring -= 1; - }, - - convertToBlock: function (node) { - if (!node) { - return { type: 'BlockStatement', body: [] }; - } else if (node.type === 'BlockStatement') { - return node; - } else { - return { type: 'BlockStatement', body: [ node ] }; - } - }, - - arrowBlockConverter: function (node) { - var retStatement; - if (node.expression) { // turn expression nodes into a block with a return statement - retStatement = astgen.returnStatement(node.body); - // ensure the generated return statement is covered - retStatement.loc = node.body.loc; - node.body = this.convertToBlock(retStatement); - node.expression = false; - } - }, - - paranoidHandlerCheck: function (node) { - // if someone is using an older esprima on the browser - // convert handlers array to single handler attribute - // containing its first element - /* istanbul ignore next */ - if (!node.handler && node.handlers) { - node.handler = node.handlers[0]; - } - }, - - ifBlockConverter: function (node) { - node.consequent = this.convertToBlock(node.consequent); - node.alternate = this.convertToBlock(node.alternate); - }, - - loopBlockConverter: function (node) { - node.body = this.convertToBlock(node.body); - }, - - withBlockConverter: function (node) { - node.body = this.convertToBlock(node.body); - }, - - statementName: function (location, initValue) { - var sName, - ignoring = !!this.currentState.ignoring; - - location.skip = ignoring || undefined; - initValue = initValue || 0; - this.currentState.statement += 1; - sName = this.currentState.statement; - this.coverState.statementMap[sName] = location; - this.coverState.s[sName] = initValue; - return sName; - }, - - skipInit: function (node /*, walker */) { - if (node.init) { - node.init.skipWalk = true; - } - }, - - skipLeft: function (node /*, walker */) { - node.left.skipWalk = true; - }, - - isUseStrictExpression: function (node) { - return node && node.type === SYNTAX.ExpressionStatement.name && - node.expression && node.expression.type === SYNTAX.Literal.name && - node.expression.value === 'use strict'; - }, - - maybeSkipNode: function (node, type) { - var alreadyIgnoring = !!this.currentState.ignoring, - hint = this.currentState.currentHint, - ignoreThis = !alreadyIgnoring && hint && hint.type === type; - - if (ignoreThis) { - this.startIgnore(); - node.postprocessor = this.endIgnore; - return true; - } - return false; - }, - - coverMetaProperty: function(node /* , walker */) { - node.skipSelf = true; - }, - - coverStatement: function (node, walker) { - var sName, - incrStatementCount, - parent, - grandParent; - - this.maybeSkipNode(node, 'next'); - - if (this.isUseStrictExpression(node)) { - grandParent = walker.ancestor(2); - /* istanbul ignore else: difficult to test */ - if (grandParent) { - if ((grandParent.node.type === SYNTAX.FunctionExpression.name || - grandParent.node.type === SYNTAX.FunctionDeclaration.name) && - walker.parent().node.body[0] === node) { - return; - } - } - } - - if (node.type === SYNTAX.FunctionDeclaration.name) { - // Called for the side-effect of setting the function's statement count to 1. - this.statementName(node.loc, 1); - } else { - // We let `coverExport` handle ExportNamedDeclarations. - parent = walker.parent(); - if (parent && parent.node.type === SYNTAX.ExportNamedDeclaration.name) { - return; - } - - sName = this.statementName(node.loc); - - incrStatementCount = astgen.statement( - astgen.postIncrement( - astgen.subscript( - astgen.dot(astgen.variable(this.currentState.trackerVar), astgen.variable('s')), - astgen.stringLiteral(sName) - ) - ) - ); - - this.splice(incrStatementCount, node, walker); - } - }, - - coverExport: function (node, walker) { - var sName, incrStatementCount; - - if ( !node.declaration || !node.declaration.declarations ) { return; } - - this.maybeSkipNode(node, 'next'); - - sName = this.statementName(node.declaration.loc); - incrStatementCount = astgen.statement( - astgen.postIncrement( - astgen.subscript( - astgen.dot(astgen.variable(this.currentState.trackerVar), astgen.variable('s')), - astgen.stringLiteral(sName) - ) - ) - ); - - this.splice(incrStatementCount, node, walker); - }, - - splice: function (statements, node, walker) { - var targetNode = walker.isLabeled() ? walker.parent().node : node; - targetNode.prepend = targetNode.prepend || []; - pushAll(targetNode.prepend, statements); - }, - - functionName: function (node, line, location) { - this.currentState.func += 1; - var id = this.currentState.func, - ignoring = !!this.currentState.ignoring, - name = node.id ? node.id.name : '(anonymous_' + id + ')', - clone = function (attr) { - var obj = location[attr] || /* istanbul ignore next */ {}; - return { line: obj.line, column: obj.column }; - }; - this.coverState.fnMap[id] = { - name: name, line: line, - loc: { - start: clone('start'), - end: clone('end') - }, - skip: ignoring || undefined - }; - this.coverState.f[id] = 0; - return id; - }, - - coverFunction: function (node, walker) { - var id, - body = node.body, - blockBody = body.body, - popped; - - this.maybeSkipNode(node, 'next'); - - id = this.functionName(node, walker.startLineForNode(node), { - start: node.loc.start, - end: { line: node.body.loc.start.line, column: node.body.loc.start.column } - }); - - if (blockBody.length > 0 && this.isUseStrictExpression(blockBody[0])) { - popped = blockBody.shift(); - } - blockBody.unshift( - astgen.statement( - astgen.postIncrement( - astgen.subscript( - astgen.dot(astgen.variable(this.currentState.trackerVar), astgen.variable('f')), - astgen.stringLiteral(id) - ) - ) - ) - ); - if (popped) { - blockBody.unshift(popped); - } - }, - - branchName: function (type, startLine, pathLocations) { - var bName, - paths = [], - locations = [], - i, - ignoring = !!this.currentState.ignoring; - this.currentState.branch += 1; - bName = this.currentState.branch; - for (i = 0; i < pathLocations.length; i += 1) { - pathLocations[i].skip = pathLocations[i].skip || ignoring || undefined; - locations.push(pathLocations[i]); - paths.push(0); - } - this.coverState.b[bName] = paths; - this.coverState.branchMap[bName] = { line: startLine, type: type, locations: locations }; - return bName; - }, - - branchIncrementExprAst: function (varName, branchIndex, down) { - var ret = astgen.postIncrement( - astgen.subscript( - astgen.subscript( - astgen.dot(astgen.variable(this.currentState.trackerVar), astgen.variable('b')), - astgen.stringLiteral(varName) - ), - astgen.numericLiteral(branchIndex) - ), - down - ); - return ret; - }, - - locationsForNodes: function (nodes) { - var ret = [], - i; - for (i = 0; i < nodes.length; i += 1) { - ret.push(nodes[i].loc); - } - return ret; - }, - - ifBranchInjector: function (node, walker) { - var alreadyIgnoring = !!this.currentState.ignoring, - hint = this.currentState.currentHint, - ignoreThen = !alreadyIgnoring && hint && hint.type === 'if', - ignoreElse = !alreadyIgnoring && hint && hint.type === 'else', - line = node.loc.start.line, - col = node.loc.start.column, - makeLoc = function () { return { line: line, column: col }; }, - bName = this.branchName('if', walker.startLineForNode(node), [ - { start: makeLoc(), end: makeLoc(), skip: ignoreThen || undefined }, - { start: makeLoc(), end: makeLoc(), skip: ignoreElse || undefined } - ]), - thenBody = node.consequent.body, - elseBody = node.alternate.body, - child; - thenBody.unshift(astgen.statement(this.branchIncrementExprAst(bName, 0))); - elseBody.unshift(astgen.statement(this.branchIncrementExprAst(bName, 1))); - if (ignoreThen) { child = node.consequent; child.preprocessor = this.startIgnore; child.postprocessor = this.endIgnore; } - if (ignoreElse) { child = node.alternate; child.preprocessor = this.startIgnore; child.postprocessor = this.endIgnore; } - }, - - branchLocationFor: function (name, index) { - return this.coverState.branchMap[name].locations[index]; - }, - - switchBranchInjector: function (node, walker) { - var cases = node.cases, - bName, - i; - - if (!(cases && cases.length > 0)) { - return; - } - bName = this.branchName('switch', walker.startLineForNode(node), this.locationsForNodes(cases)); - for (i = 0; i < cases.length; i += 1) { - cases[i].branchLocation = this.branchLocationFor(bName, i); - cases[i].consequent.unshift(astgen.statement(this.branchIncrementExprAst(bName, i))); - } - }, - - switchCaseInjector: function (node) { - var location = node.branchLocation; - delete node.branchLocation; - if (this.maybeSkipNode(node, 'next')) { - location.skip = true; - } - }, - - conditionalBranchInjector: function (node, walker) { - var bName = this.branchName('cond-expr', walker.startLineForNode(node), this.locationsForNodes([ node.consequent, node.alternate ])), - ast1 = this.branchIncrementExprAst(bName, 0), - ast2 = this.branchIncrementExprAst(bName, 1); - - node.consequent.preprocessor = this.maybeAddSkip(this.branchLocationFor(bName, 0)); - node.alternate.preprocessor = this.maybeAddSkip(this.branchLocationFor(bName, 1)); - node.consequent = astgen.sequence(ast1, node.consequent); - node.alternate = astgen.sequence(ast2, node.alternate); - }, - - maybeAddSkip: function (branchLocation) { - return function (node) { - var alreadyIgnoring = !!this.currentState.ignoring, - hint = this.currentState.currentHint, - ignoreThis = !alreadyIgnoring && hint && hint.type === 'next'; - if (ignoreThis) { - this.startIgnore(); - node.postprocessor = this.endIgnore; - } - if (ignoreThis || alreadyIgnoring) { - branchLocation.skip = true; - } - }; - }, - - logicalExpressionBranchInjector: function (node, walker) { - var parent = walker.parent(), - leaves = [], - bName, - tuple, - i; - - this.maybeSkipNode(node, 'next'); - - if (parent && parent.node.type === SYNTAX.LogicalExpression.name) { - //already covered - return; - } - - this.findLeaves(node, leaves); - bName = this.branchName('binary-expr', - walker.startLineForNode(node), - this.locationsForNodes(leaves.map(function (item) { return item.node; })) - ); - for (i = 0; i < leaves.length; i += 1) { - tuple = leaves[i]; - tuple.parent[tuple.property] = astgen.sequence(this.branchIncrementExprAst(bName, i), tuple.node); - tuple.node.preprocessor = this.maybeAddSkip(this.branchLocationFor(bName, i)); - } - }, - - findLeaves: function (node, accumulator, parent, property) { - if (node.type === SYNTAX.LogicalExpression.name) { - this.findLeaves(node.left, accumulator, node, 'left'); - this.findLeaves(node.right, accumulator, node, 'right'); - } else { - accumulator.push({ node: node, parent: parent, property: property }); - } - }, - maybeAddType: function (node /*, walker */) { - var props = node.properties, - i, - child; - for (i = 0; i < props.length; i += 1) { - child = props[i]; - if (!child.type) { - child.type = SYNTAX.Property.name; - } - } - }, - }; - - if (isNode) { - module.exports = Instrumenter; - } else { - window.Instrumenter = Instrumenter; - } - -}(typeof module !== 'undefined' && typeof module.exports !== 'undefined' && typeof exports !== 'undefined')); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/object-utils.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/object-utils.js deleted file mode 100644 index ab88ae0b2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/object-utils.js +++ /dev/null @@ -1,425 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -/** - * utility methods to process coverage objects. A coverage object has the following - * format. - * - * { - * "/path/to/file1.js": { file1 coverage }, - * "/path/to/file2.js": { file2 coverage } - * } - * - * The internals of the file coverage object are intentionally not documented since - * it is not a public interface. - * - * *Note:* When a method of this module has the word `File` in it, it will accept - * one of the sub-objects of the main coverage object as an argument. Other - * methods accept the higher level coverage object with multiple keys. - * - * Works on `node` as well as the browser. - * - * Usage on nodejs - * --------------- - * - * var objectUtils = require('istanbul').utils; - * - * Usage in a browser - * ------------------ - * - * Load this file using a `script` tag or other means. This will set `window.coverageUtils` - * to this module's exports. - * - * @class ObjectUtils - * @module main - * @static - */ -(function (isNode) { - /** - * adds line coverage information to a file coverage object, reverse-engineering - * it from statement coverage. The object passed in is updated in place. - * - * Note that if line coverage information is already present in the object, - * it is not recomputed. - * - * @method addDerivedInfoForFile - * @static - * @param {Object} fileCoverage the coverage object for a single file - */ - function addDerivedInfoForFile(fileCoverage) { - var statementMap = fileCoverage.statementMap, - statements = fileCoverage.s, - lineMap; - - if (!fileCoverage.l) { - fileCoverage.l = lineMap = {}; - Object.keys(statements).forEach(function (st) { - var line = statementMap[st].start.line, - count = statements[st], - prevVal = lineMap[line]; - if (count === 0 && statementMap[st].skip) { count = 1; } - if (typeof prevVal === 'undefined' || prevVal < count) { - lineMap[line] = count; - } - }); - } - } - /** - * adds line coverage information to all file coverage objects. - * - * @method addDerivedInfo - * @static - * @param {Object} coverage the coverage object - */ - function addDerivedInfo(coverage) { - Object.keys(coverage).forEach(function (k) { - addDerivedInfoForFile(coverage[k]); - }); - } - /** - * removes line coverage information from all file coverage objects - * @method removeDerivedInfo - * @static - * @param {Object} coverage the coverage object - */ - function removeDerivedInfo(coverage) { - Object.keys(coverage).forEach(function (k) { - delete coverage[k].l; - }); - } - - function percent(covered, total) { - var tmp; - if (total > 0) { - tmp = 1000 * 100 * covered / total + 5; - return Math.floor(tmp / 10) / 100; - } else { - return 100.00; - } - } - - function computeSimpleTotals(fileCoverage, property, mapProperty) { - var stats = fileCoverage[property], - map = mapProperty ? fileCoverage[mapProperty] : null, - ret = { total: 0, covered: 0, skipped: 0 }; - - Object.keys(stats).forEach(function (key) { - var covered = !!stats[key], - skipped = map && map[key].skip; - ret.total += 1; - if (covered || skipped) { - ret.covered += 1; - } - if (!covered && skipped) { - ret.skipped += 1; - } - }); - ret.pct = percent(ret.covered, ret.total); - return ret; - } - - function computeBranchTotals(fileCoverage) { - var stats = fileCoverage.b, - branchMap = fileCoverage.branchMap, - ret = { total: 0, covered: 0, skipped: 0 }; - - Object.keys(stats).forEach(function (key) { - var branches = stats[key], - map = branchMap[key], - covered, - skipped, - i; - for (i = 0; i < branches.length; i += 1) { - covered = branches[i] > 0; - skipped = map.locations && map.locations[i] && map.locations[i].skip; - if (covered || skipped) { - ret.covered += 1; - } - if (!covered && skipped) { - ret.skipped += 1; - } - } - ret.total += branches.length; - }); - ret.pct = percent(ret.covered, ret.total); - return ret; - } - /** - * returns a blank summary metrics object. A metrics object has the following - * format. - * - * { - * lines: lineMetrics, - * statements: statementMetrics, - * functions: functionMetrics, - * branches: branchMetrics - * linesCovered: lineCoveredCount - * } - * - * Each individual metric object looks as follows: - * - * { - * total: n, - * covered: m, - * pct: percent - * } - * - * @method blankSummary - * @static - * @return {Object} a blank metrics object - */ - function blankSummary() { - return { - lines: { - total: 0, - covered: 0, - skipped: 0, - pct: 'Unknown' - }, - statements: { - total: 0, - covered: 0, - skipped: 0, - pct: 'Unknown' - }, - functions: { - total: 0, - covered: 0, - skipped: 0, - pct: 'Unknown' - }, - branches: { - total: 0, - covered: 0, - skipped: 0, - pct: 'Unknown' - }, - linesCovered: {} - }; - } - /** - * returns the summary metrics given the coverage object for a single file. See `blankSummary()` - * to understand the format of the returned object. - * - * @method summarizeFileCoverage - * @static - * @param {Object} fileCoverage the coverage object for a single file. - * @return {Object} the summary metrics for the file - */ - function summarizeFileCoverage(fileCoverage) { - var ret = blankSummary(); - addDerivedInfoForFile(fileCoverage); - ret.lines = computeSimpleTotals(fileCoverage, 'l'); - ret.functions = computeSimpleTotals(fileCoverage, 'f', 'fnMap'); - ret.statements = computeSimpleTotals(fileCoverage, 's', 'statementMap'); - ret.branches = computeBranchTotals(fileCoverage); - ret.linesCovered = fileCoverage.l; - return ret; - } - /** - * merges two instances of file coverage objects *for the same file* - * such that the execution counts are correct. - * - * @method mergeFileCoverage - * @static - * @param {Object} first the first file coverage object for a given file - * @param {Object} second the second file coverage object for the same file - * @return {Object} an object that is a result of merging the two. Note that - * the input objects are not changed in any way. - */ - function mergeFileCoverage(first, second) { - var ret = JSON.parse(JSON.stringify(first)), - i; - - delete ret.l; //remove derived info - - Object.keys(second.s).forEach(function (k) { - ret.s[k] += second.s[k]; - }); - Object.keys(second.f).forEach(function (k) { - ret.f[k] += second.f[k]; - }); - Object.keys(second.b).forEach(function (k) { - var retArray = ret.b[k], - secondArray = second.b[k]; - for (i = 0; i < retArray.length; i += 1) { - retArray[i] += secondArray[i]; - } - }); - - return ret; - } - /** - * merges multiple summary metrics objects by summing up the `totals` and - * `covered` fields and recomputing the percentages. This function is generic - * and can accept any number of arguments. - * - * @method mergeSummaryObjects - * @static - * @param {Object} summary... multiple summary metrics objects - * @return {Object} the merged summary metrics - */ - function mergeSummaryObjects() { - var ret = blankSummary(), - args = Array.prototype.slice.call(arguments), - keys = ['lines', 'statements', 'branches', 'functions'], - increment = function (obj) { - if (obj) { - keys.forEach(function (key) { - ret[key].total += obj[key].total; - ret[key].covered += obj[key].covered; - ret[key].skipped += obj[key].skipped; - }); - - // keep track of all lines we have coverage for. - Object.keys(obj.linesCovered).forEach(function (key) { - if (!ret.linesCovered[key]) { - ret.linesCovered[key] = obj.linesCovered[key]; - } else { - ret.linesCovered[key] += obj.linesCovered[key]; - } - }); - } - }; - args.forEach(function (arg) { - increment(arg); - }); - keys.forEach(function (key) { - ret[key].pct = percent(ret[key].covered, ret[key].total); - }); - - return ret; - } - /** - * returns the coverage summary for a single coverage object. This is - * wrapper over `summarizeFileCoverage` and `mergeSummaryObjects` for - * the common case of a single coverage object - * @method summarizeCoverage - * @static - * @param {Object} coverage the coverage object - * @return {Object} summary coverage metrics across all files in the coverage object - */ - function summarizeCoverage(coverage) { - var fileSummary = []; - Object.keys(coverage).forEach(function (key) { - fileSummary.push(summarizeFileCoverage(coverage[key])); - }); - return mergeSummaryObjects.apply(null, fileSummary); - } - - /** - * makes the coverage object generated by this library yuitest_coverage compatible. - * Note that this transformation is lossy since the returned object will not have - * statement and branch coverage. - * - * @method toYUICoverage - * @static - * @param {Object} coverage The `istanbul` coverage object - * @return {Object} a coverage object in `yuitest_coverage` format. - */ - function toYUICoverage(coverage) { - var ret = {}; - - addDerivedInfo(coverage); - - Object.keys(coverage).forEach(function (k) { - var fileCoverage = coverage[k], - lines = fileCoverage.l, - functions = fileCoverage.f, - fnMap = fileCoverage.fnMap, - o; - - o = ret[k] = { - lines: {}, - calledLines: 0, - coveredLines: 0, - functions: {}, - calledFunctions: 0, - coveredFunctions: 0 - }; - Object.keys(lines).forEach(function (k) { - o.lines[k] = lines[k]; - o.coveredLines += 1; - if (lines[k] > 0) { - o.calledLines += 1; - } - }); - Object.keys(functions).forEach(function (k) { - var name = fnMap[k].name + ':' + fnMap[k].line; - o.functions[name] = functions[k]; - o.coveredFunctions += 1; - if (functions[k] > 0) { - o.calledFunctions += 1; - } - }); - }); - return ret; - } - - /** - * Creates new file coverage object with incremented hits count - * on skipped statements, branches and functions - * - * @method incrementIgnoredTotals - * @static - * @param {Object} cov File coverage object - * @return {Object} New file coverage object - */ - function incrementIgnoredTotals(cov) { - //TODO: This may be slow in the browser and may break in older browsers - // Look into using a library that works in Node and the browser - var fileCoverage = JSON.parse(JSON.stringify(cov)); - - [ - {mapKey: 'statementMap', hitsKey: 's'}, - {mapKey: 'branchMap', hitsKey: 'b'}, - {mapKey: 'fnMap', hitsKey: 'f'} - ].forEach(function (keys) { - Object.keys(fileCoverage[keys.mapKey]) - .forEach(function (key) { - var map = fileCoverage[keys.mapKey][key]; - var hits = fileCoverage[keys.hitsKey]; - - if (keys.mapKey === 'branchMap') { - var locations = map.locations; - - locations.forEach(function (location, index) { - if (hits[key][index] === 0 && location.skip) { - hits[key][index] = 1; - } - }); - - return; - } - - if (hits[key] === 0 && map.skip) { - hits[key] = 1; - } - }); - }); - - return fileCoverage; - } - - var exportables = { - addDerivedInfo: addDerivedInfo, - addDerivedInfoForFile: addDerivedInfoForFile, - removeDerivedInfo: removeDerivedInfo, - blankSummary: blankSummary, - summarizeFileCoverage: summarizeFileCoverage, - summarizeCoverage: summarizeCoverage, - mergeFileCoverage: mergeFileCoverage, - mergeSummaryObjects: mergeSummaryObjects, - toYUICoverage: toYUICoverage, - incrementIgnoredTotals: incrementIgnoredTotals - }; - - /* istanbul ignore else: windows */ - if (isNode) { - module.exports = exportables; - } else { - window.coverageUtils = exportables; - } -}(typeof module !== 'undefined' && typeof module.exports !== 'undefined' && typeof exports !== 'undefined')); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/register-plugins.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/register-plugins.js deleted file mode 100644 index 50462bec1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/register-plugins.js +++ /dev/null @@ -1,15 +0,0 @@ - -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var Store = require('./store'), - Report = require('./report'), - Command = require('./command'); - -Store.loadAll(); -Report.loadAll(); -Command.loadAll(); - - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/clover.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/clover.js deleted file mode 100644 index fe73aefcd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/clover.js +++ /dev/null @@ -1,227 +0,0 @@ -var path = require('path'), - util = require('util'), - Report = require('./index'), - FileWriter = require('../util/file-writer'), - TreeSummarizer = require('../util/tree-summarizer'), - utils = require('../object-utils'); - -/** - * a `Report` implementation that produces a clover-style XML file. - * - * Usage - * ----- - * - * var report = require('istanbul').Report.create('clover'); - * - * @class CloverReport - * @module report - * @extends Report - * @constructor - * @param {Object} opts optional - * @param {String} [opts.dir] the directory in which to the clover.xml will be written - * @param {String} [opts.file] the file name, defaulted to config attribute or 'clover.xml' - */ -function CloverReport(opts) { - Report.call(this); - opts = opts || {}; - this.projectRoot = process.cwd(); - this.dir = opts.dir || this.projectRoot; - this.file = opts.file || this.getDefaultConfig().file; - this.opts = opts; -} - -CloverReport.TYPE = 'clover'; -util.inherits(CloverReport, Report); - -function asJavaPackage(node) { - return node.displayShortName(). - replace(/\//g, '.'). - replace(/\\/g, '.'). - replace(/\.$/, ''); -} - -function asClassName(node) { - /*jslint regexp: true */ - return node.fullPath().replace(/.*[\\\/]/, ''); -} - -function quote(thing) { - return '"' + thing + '"'; -} - -function attr(n, v) { - return ' ' + n + '=' + quote(v) + ' '; -} - -function branchCoverageByLine(fileCoverage) { - var branchMap = fileCoverage.branchMap, - branches = fileCoverage.b, - ret = {}; - Object.keys(branchMap).forEach(function (k) { - var line = branchMap[k].line, - branchData = branches[k]; - ret[line] = ret[line] || []; - ret[line].push.apply(ret[line], branchData); - }); - Object.keys(ret).forEach(function (k) { - var dataArray = ret[k], - covered = dataArray.filter(function (item) { return item > 0; }), - coverage = covered.length / dataArray.length * 100; - ret[k] = { covered: covered.length, total: dataArray.length, coverage: coverage }; - }); - return ret; -} - -function addClassStats(node, fileCoverage, writer) { - fileCoverage = utils.incrementIgnoredTotals(fileCoverage); - - var metrics = node.metrics, - branchByLine = branchCoverageByLine(fileCoverage), - fnMap, - lines; - - writer.println('\t\t\t'); - - writer.println('\t\t\t\t'); - - fnMap = fileCoverage.fnMap; - lines = fileCoverage.l; - Object.keys(lines).forEach(function (k) { - var str = '\t\t\t\t'); - }); - - writer.println('\t\t\t'); -} - -function walk(node, collector, writer, level, projectRoot) { - var metrics, - totalFiles = 0, - totalPackages = 0, - totalLines = 0, - tempLines = 0; - if (level === 0) { - metrics = node.metrics; - writer.println(''); - writer.println(''); - - writer.println('\t'); - - node.children.filter(function (child) { return child.kind === 'dir'; }). - forEach(function (child) { - totalPackages += 1; - child.children.filter(function (child) { return child.kind !== 'dir'; }). - forEach(function (child) { - Object.keys(collector.fileCoverageFor(child.fullPath()).l).forEach(function (k){ - tempLines = k; - }); - totalLines += Number(tempLines); - totalFiles += 1; - }); - }); - - writer.println('\t\t'); - } - if (node.packageMetrics) { - metrics = node.packageMetrics; - writer.println('\t\t'); - - writer.println('\t\t\t'); - - node.children.filter(function (child) { return child.kind !== 'dir'; }). - forEach(function (child) { - addClassStats(child, collector.fileCoverageFor(child.fullPath()), writer); - }); - writer.println('\t\t'); - } - node.children.filter(function (child) { return child.kind === 'dir'; }). - forEach(function (child) { - walk(child, collector, writer, level + 1, projectRoot); - }); - - if (level === 0) { - writer.println('\t'); - writer.println(''); - } -} - -Report.mix(CloverReport, { - synopsis: function () { - return 'XML coverage report that can be consumed by the clover tool'; - }, - getDefaultConfig: function () { - return { file: 'clover.xml' }; - }, - writeReport: function (collector, sync) { - var summarizer = new TreeSummarizer(), - outputFile = path.join(this.dir, this.file), - writer = this.opts.writer || new FileWriter(sync), - projectRoot = this.projectRoot, - that = this, - tree, - root; - - collector.files().forEach(function (key) { - summarizer.addFileCoverageSummary(key, utils.summarizeFileCoverage(collector.fileCoverageFor(key))); - }); - tree = summarizer.getTreeSummary(); - root = tree.root; - writer.on('done', function () { that.emit('done'); }); - writer.writeFile(outputFile, function (contentWriter) { - walk(root, collector, contentWriter, 0, projectRoot); - writer.done(); - }); - } -}); - -module.exports = CloverReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/cobertura.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/cobertura.js deleted file mode 100644 index d63456c95..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/cobertura.js +++ /dev/null @@ -1,221 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var path = require('path'), - util = require('util'), - Report = require('./index'), - FileWriter = require('../util/file-writer'), - TreeSummarizer = require('../util/tree-summarizer'), - utils = require('../object-utils'); - -/** - * a `Report` implementation that produces a cobertura-style XML file that conforms to the - * http://cobertura.sourceforge.net/xml/coverage-04.dtd DTD. - * - * Usage - * ----- - * - * var report = require('istanbul').Report.create('cobertura'); - * - * @class CoberturaReport - * @module report - * @extends Report - * @constructor - * @param {Object} opts optional - * @param {String} [opts.dir] the directory in which to the cobertura-coverage.xml will be written - */ -function CoberturaReport(opts) { - Report.call(this); - opts = opts || {}; - this.projectRoot = process.cwd(); - this.dir = opts.dir || this.projectRoot; - this.file = opts.file || this.getDefaultConfig().file; - this.opts = opts; -} - -CoberturaReport.TYPE = 'cobertura'; -util.inherits(CoberturaReport, Report); - -function asJavaPackage(node) { - return node.displayShortName(). - replace(/\//g, '.'). - replace(/\\/g, '.'). - replace(/\.$/, ''); -} - -function asClassName(node) { - /*jslint regexp: true */ - return node.fullPath().replace(/.*[\\\/]/, ''); -} - -function quote(thing) { - return '"' + thing + '"'; -} - -function attr(n, v) { - return ' ' + n + '=' + quote(v) + ' '; -} - -function branchCoverageByLine(fileCoverage) { - var branchMap = fileCoverage.branchMap, - branches = fileCoverage.b, - ret = {}; - Object.keys(branchMap).forEach(function (k) { - var line = branchMap[k].line, - branchData = branches[k]; - ret[line] = ret[line] || []; - ret[line].push.apply(ret[line], branchData); - }); - Object.keys(ret).forEach(function (k) { - var dataArray = ret[k], - covered = dataArray.filter(function (item) { return item > 0; }), - coverage = covered.length / dataArray.length * 100; - ret[k] = { covered: covered.length, total: dataArray.length, coverage: coverage }; - }); - return ret; -} - -function addClassStats(node, fileCoverage, writer, projectRoot) { - fileCoverage = utils.incrementIgnoredTotals(fileCoverage); - - var metrics = node.metrics, - branchByLine = branchCoverageByLine(fileCoverage), - fnMap, - lines; - - writer.println('\t\t'); - - writer.println('\t\t'); - fnMap = fileCoverage.fnMap; - Object.keys(fnMap).forEach(function (k) { - var name = fnMap[k].name, - hits = fileCoverage.f[k]; - - writer.println( - '\t\t\t' - ); - - //Add the function definition line and hits so that jenkins cobertura plugin records method hits - writer.println( - '\t\t\t\t' + - '' + - '' - ); - - writer.println('\t\t\t'); - - }); - writer.println('\t\t'); - - writer.println('\t\t'); - lines = fileCoverage.l; - Object.keys(lines).forEach(function (k) { - var str = '\t\t\t'); - }); - writer.println('\t\t'); - - writer.println('\t\t'); -} - -function walk(node, collector, writer, level, projectRoot) { - var metrics; - if (level === 0) { - metrics = node.metrics; - writer.println(''); - writer.println(''); - writer.println(''); - writer.println(''); - writer.println('\t' + projectRoot + ''); - writer.println(''); - writer.println(''); - } - if (node.packageMetrics) { - metrics = node.packageMetrics; - writer.println('\t'); - writer.println('\t'); - node.children.filter(function (child) { return child.kind !== 'dir'; }). - forEach(function (child) { - addClassStats(child, collector.fileCoverageFor(child.fullPath()), writer, projectRoot); - }); - writer.println('\t'); - writer.println('\t'); - } - node.children.filter(function (child) { return child.kind === 'dir'; }). - forEach(function (child) { - walk(child, collector, writer, level + 1, projectRoot); - }); - - if (level === 0) { - writer.println(''); - writer.println(''); - } -} - -Report.mix(CoberturaReport, { - synopsis: function () { - return 'XML coverage report that can be consumed by the cobertura tool'; - }, - getDefaultConfig: function () { - return { file: 'cobertura-coverage.xml' }; - }, - writeReport: function (collector, sync) { - var summarizer = new TreeSummarizer(), - outputFile = path.join(this.dir, this.file), - writer = this.opts.writer || new FileWriter(sync), - projectRoot = this.projectRoot, - that = this, - tree, - root; - - collector.files().forEach(function (key) { - summarizer.addFileCoverageSummary(key, utils.summarizeFileCoverage(collector.fileCoverageFor(key))); - }); - tree = summarizer.getTreeSummary(); - root = tree.root; - writer.on('done', function () { that.emit('done'); }); - writer.writeFile(outputFile, function (contentWriter) { - walk(root, collector, contentWriter, 0, projectRoot); - writer.done(); - }); - } -}); - -module.exports = CoberturaReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/common/defaults.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/common/defaults.js deleted file mode 100644 index a9851c32f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/common/defaults.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - Copyright (c) 2013, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var Report = require('../index'); -var supportsColor = require('supports-color'); - -module.exports = { - watermarks: function () { - return { - statements: [ 50, 80 ], - lines: [ 50, 80 ], - functions: [ 50, 80], - branches: [ 50, 80 ] - }; - }, - - classFor: function (type, metrics, watermarks) { - var mark = watermarks[type], - value = metrics[type].pct; - return value >= mark[1] ? 'high' : value >= mark[0] ? 'medium' : 'low'; - }, - - colorize: function (str, clazz) { - /* istanbul ignore if: untestable in batch mode */ - var colors = { - low: '31;1', - medium: '33;1', - high: '32;1' - }; - - if (supportsColor && colors[clazz]) { - return '\u001b[' + colors[clazz] + 'm' + str + '\u001b[0m'; - } - return str; - }, - - defaultReportConfig: function () { - var cfg = {}; - Report.getReportList().forEach(function (type) { - var rpt = Report.create(type), - c = rpt.getDefaultConfig(); - if (c) { - cfg[type] = c; - } - }); - return cfg; - } -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/html.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/html.js deleted file mode 100644 index 1dab26d56..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/html.js +++ /dev/null @@ -1,572 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -/*jshint maxlen: 300 */ -var handlebars = require('handlebars').create(), - defaults = require('./common/defaults'), - path = require('path'), - fs = require('fs'), - util = require('util'), - FileWriter = require('../util/file-writer'), - Report = require('./index'), - Store = require('../store'), - InsertionText = require('../util/insertion-text'), - TreeSummarizer = require('../util/tree-summarizer'), - utils = require('../object-utils'), - templateFor = function (name) { return handlebars.compile(fs.readFileSync(path.resolve(__dirname, 'templates', name + '.txt'), 'utf8')); }, - headerTemplate = templateFor('head'), - footerTemplate = templateFor('foot'), - detailTemplate = handlebars.compile([ - '', - '{{#show_lines}}{{maxLines}}{{/show_lines}}', - '{{#show_line_execution_counts fileCoverage}}{{maxLines}}{{/show_line_execution_counts}}', - '
{{#show_code structured}}{{/show_code}}
', - '\n' - ].join('')), - summaryTableHeader = [ - '
', - '', - '', - '', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - ' ', - '', - '', - '' - ].join('\n'), - summaryLineTemplate = handlebars.compile([ - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '', - '\n' - ].join('\n\t')), - summaryTableFooter = [ - '', - '
FileStatementsBranchesFunctionsLines
{{file}}
{{#show_picture}}{{metrics.statements.pct}}{{/show_picture}}
{{metrics.statements.pct}}%{{metrics.statements.covered}}/{{metrics.statements.total}}{{metrics.branches.pct}}%{{metrics.branches.covered}}/{{metrics.branches.total}}{{metrics.functions.pct}}%{{metrics.functions.covered}}/{{metrics.functions.total}}{{metrics.lines.pct}}%{{metrics.lines.covered}}/{{metrics.lines.total}}
', - '
' - ].join('\n'), - lt = '\u0001', - gt = '\u0002', - RE_LT = //g, - RE_AMP = /&/g, - RE_lt = /\u0001/g, - RE_gt = /\u0002/g; - -handlebars.registerHelper('show_picture', function (opts) { - var num = Number(opts.fn(this)), - rest, - cls = ''; - if (isFinite(num)) { - if (num === 100) { - cls = ' cover-full'; - } - num = Math.floor(num); - rest = 100 - num; - return '
' + - '
'; - } else { - return ''; - } -}); - -handlebars.registerHelper('if_has_ignores', function (metrics, opts) { - return (metrics.statements.skipped + - metrics.functions.skipped + - metrics.branches.skipped) === 0 ? '' : opts.fn(this); -}); - -handlebars.registerHelper('show_ignores', function (metrics) { - var statements = metrics.statements.skipped, - functions = metrics.functions.skipped, - branches = metrics.branches.skipped, - result; - - if (statements === 0 && functions === 0 && branches === 0) { - return 'none'; - } - - result = []; - if (statements >0) { result.push(statements === 1 ? '1 statement': statements + ' statements'); } - if (functions >0) { result.push(functions === 1 ? '1 function' : functions + ' functions'); } - if (branches >0) { result.push(branches === 1 ? '1 branch' : branches + ' branches'); } - - return result.join(', '); -}); - -handlebars.registerHelper('show_lines', function (opts) { - var maxLines = Number(opts.fn(this)), - i, - array = []; - - for (i = 0; i < maxLines; i += 1) { - array[i] = i + 1; - } - return array.join('\n'); -}); - -handlebars.registerHelper('show_line_execution_counts', function (context, opts) { - var lines = context.l, - maxLines = Number(opts.fn(this)), - i, - lineNumber, - array = [], - covered, - value = ''; - - for (i = 0; i < maxLines; i += 1) { - lineNumber = i + 1; - value = ' '; - covered = 'neutral'; - if (lines.hasOwnProperty(lineNumber)) { - if (lines[lineNumber] > 0) { - covered = 'yes'; - value = lines[lineNumber] + '×'; - } else { - covered = 'no'; - } - } - array.push('' + value + ''); - } - return array.join('\n'); -}); - -function customEscape(text) { - text = text.toString(); - return text.replace(RE_AMP, '&') - .replace(RE_LT, '<') - .replace(RE_GT, '>') - .replace(RE_lt, '<') - .replace(RE_gt, '>'); -} - -handlebars.registerHelper('show_code', function (context /*, opts */) { - var array = []; - - context.forEach(function (item) { - array.push(customEscape(item.text) || ' '); - }); - return array.join('\n'); -}); - -function title(str) { - return ' title="' + str + '" '; -} - -function annotateLines(fileCoverage, structuredText) { - var lineStats = fileCoverage.l; - if (!lineStats) { return; } - Object.keys(lineStats).forEach(function (lineNumber) { - var count = lineStats[lineNumber]; - if (structuredText[lineNumber]) { - structuredText[lineNumber].covered = count > 0 ? 'yes' : 'no'; - } - }); - structuredText.forEach(function (item) { - if (item.covered === null) { - item.covered = 'neutral'; - } - }); -} - -function annotateStatements(fileCoverage, structuredText) { - var statementStats = fileCoverage.s, - statementMeta = fileCoverage.statementMap; - Object.keys(statementStats).forEach(function (stName) { - var count = statementStats[stName], - meta = statementMeta[stName], - type = count > 0 ? 'yes' : 'no', - startCol = meta.start.column, - endCol = meta.end.column + 1, - startLine = meta.start.line, - endLine = meta.end.line, - openSpan = lt + 'span class="' + (meta.skip ? 'cstat-skip' : 'cstat-no') + '"' + title('statement not covered') + gt, - closeSpan = lt + '/span' + gt, - text; - - if (type === 'no') { - if (endLine !== startLine) { - endLine = startLine; - endCol = structuredText[startLine].text.originalLength(); - } - text = structuredText[startLine].text; - text.wrap(startCol, - openSpan, - startLine === endLine ? endCol : text.originalLength(), - closeSpan); - } - }); -} - -function annotateFunctions(fileCoverage, structuredText) { - - var fnStats = fileCoverage.f, - fnMeta = fileCoverage.fnMap; - if (!fnStats) { return; } - Object.keys(fnStats).forEach(function (fName) { - var count = fnStats[fName], - meta = fnMeta[fName], - type = count > 0 ? 'yes' : 'no', - startCol = meta.loc.start.column, - endCol = meta.loc.end.column + 1, - startLine = meta.loc.start.line, - endLine = meta.loc.end.line, - openSpan = lt + 'span class="' + (meta.skip ? 'fstat-skip' : 'fstat-no') + '"' + title('function not covered') + gt, - closeSpan = lt + '/span' + gt, - text; - - if (type === 'no') { - if (endLine !== startLine) { - endLine = startLine; - endCol = structuredText[startLine].text.originalLength(); - } - text = structuredText[startLine].text; - text.wrap(startCol, - openSpan, - startLine === endLine ? endCol : text.originalLength(), - closeSpan); - } - }); -} - -function annotateBranches(fileCoverage, structuredText) { - var branchStats = fileCoverage.b, - branchMeta = fileCoverage.branchMap; - if (!branchStats) { return; } - - Object.keys(branchStats).forEach(function (branchName) { - var branchArray = branchStats[branchName], - sumCount = branchArray.reduce(function (p, n) { return p + n; }, 0), - metaArray = branchMeta[branchName].locations, - i, - count, - meta, - type, - startCol, - endCol, - startLine, - endLine, - openSpan, - closeSpan, - text; - - if (sumCount > 0) { //only highlight if partial branches are missing - for (i = 0; i < branchArray.length; i += 1) { - count = branchArray[i]; - meta = metaArray[i]; - type = count > 0 ? 'yes' : 'no'; - startCol = meta.start.column; - endCol = meta.end.column + 1; - startLine = meta.start.line; - endLine = meta.end.line; - openSpan = lt + 'span class="branch-' + i + ' ' + (meta.skip ? 'cbranch-skip' : 'cbranch-no') + '"' + title('branch not covered') + gt; - closeSpan = lt + '/span' + gt; - - if (count === 0) { //skip branches taken - if (endLine !== startLine) { - endLine = startLine; - endCol = structuredText[startLine].text.originalLength(); - } - text = structuredText[startLine].text; - if (branchMeta[branchName].type === 'if') { // and 'if' is a special case since the else branch might not be visible, being non-existent - text.insertAt(startCol, lt + 'span class="' + (meta.skip ? 'skip-if-branch' : 'missing-if-branch') + '"' + - title((i === 0 ? 'if' : 'else') + ' path not taken') + gt + - (i === 0 ? 'I' : 'E') + lt + '/span' + gt, true, false); - } else { - text.wrap(startCol, - openSpan, - startLine === endLine ? endCol : text.originalLength(), - closeSpan); - } - } - } - } - }); -} - -function getReportClass(stats, watermark) { - var coveragePct = stats.pct, - identity = 1; - if (coveragePct * identity === coveragePct) { - return coveragePct >= watermark[1] ? 'high' : coveragePct >= watermark[0] ? 'medium' : 'low'; - } else { - return ''; - } -} - -function cleanPath(name) { - var SEP = path.sep || '/'; - return (SEP !== '/') ? name.split(SEP).join('/') : name; -} - -function isEmptySourceStore(sourceStore) { - if (!sourceStore) { - return true; - } - - var cache = sourceStore.sourceCache; - return cache && !Object.keys(cache).length; -} - -/** - * a `Report` implementation that produces HTML coverage reports. - * - * Usage - * ----- - * - * var report = require('istanbul').Report.create('html'); - * - * - * @class HtmlReport - * @extends Report - * @module report - * @constructor - * @param {Object} opts optional - * @param {String} [opts.dir] the directory in which to generate reports. Defaults to `./html-report` - */ -function HtmlReport(opts) { - Report.call(this); - this.opts = opts || {}; - this.opts.dir = this.opts.dir || path.resolve(process.cwd(), 'html-report'); - this.opts.sourceStore = isEmptySourceStore(this.opts.sourceStore) ? - Store.create('fslookup') : this.opts.sourceStore; - this.opts.linkMapper = this.opts.linkMapper || this.standardLinkMapper(); - this.opts.writer = this.opts.writer || null; - this.opts.templateData = { datetime: Date() }; - this.opts.watermarks = this.opts.watermarks || defaults.watermarks(); -} - -HtmlReport.TYPE = 'html'; -util.inherits(HtmlReport, Report); - -Report.mix(HtmlReport, { - - synopsis: function () { - return 'Navigable HTML coverage report for every file and directory'; - }, - - getPathHtml: function (node, linkMapper) { - var parent = node.parent, - nodePath = [], - linkPath = [], - i; - - while (parent) { - nodePath.push(parent); - parent = parent.parent; - } - - for (i = 0; i < nodePath.length; i += 1) { - linkPath.push('' + - (cleanPath(nodePath[i].relativeName) || 'all files') + ''); - } - linkPath.reverse(); - return linkPath.length > 0 ? linkPath.join(' / ') + ' ' + - cleanPath(node.displayShortName()) : '/'; - }, - - fillTemplate: function (node, templateData) { - var opts = this.opts, - linkMapper = opts.linkMapper; - - templateData.entity = node.name || 'All files'; - templateData.metrics = node.metrics; - templateData.reportClass = getReportClass(node.metrics.statements, opts.watermarks.statements); - templateData.pathHtml = this.getPathHtml(node, linkMapper); - templateData.base = { - css: linkMapper.asset(node, 'base.css') - }; - templateData.sorter = { - js: linkMapper.asset(node, 'sorter.js'), - image: linkMapper.asset(node, 'sort-arrow-sprite.png') - }; - templateData.prettify = { - js: linkMapper.asset(node, 'prettify.js'), - css: linkMapper.asset(node, 'prettify.css') - }; - }, - writeDetailPage: function (writer, node, fileCoverage) { - var opts = this.opts, - sourceStore = opts.sourceStore, - templateData = opts.templateData, - sourceText = fileCoverage.code && Array.isArray(fileCoverage.code) ? - fileCoverage.code.join('\n') + '\n' : sourceStore.get(fileCoverage.path), - code = sourceText.split(/(?:\r?\n)|\r/), - count = 0, - structured = code.map(function (str) { count += 1; return { line: count, covered: null, text: new InsertionText(str, true) }; }), - context; - - structured.unshift({ line: 0, covered: null, text: new InsertionText("") }); - - this.fillTemplate(node, templateData); - writer.write(headerTemplate(templateData)); - writer.write('
\n');
-
-        annotateLines(fileCoverage, structured);
-        //note: order is important, since statements typically result in spanning the whole line and doing branches late
-        //causes mismatched tags
-        annotateBranches(fileCoverage, structured);
-        annotateFunctions(fileCoverage, structured);
-        annotateStatements(fileCoverage, structured);
-
-        structured.shift();
-        context = {
-            structured: structured,
-            maxLines: structured.length,
-            fileCoverage: fileCoverage
-        };
-        writer.write(detailTemplate(context));
-        writer.write('
\n'); - writer.write(footerTemplate(templateData)); - }, - - writeIndexPage: function (writer, node) { - var linkMapper = this.opts.linkMapper, - templateData = this.opts.templateData, - children = Array.prototype.slice.apply(node.children), - watermarks = this.opts.watermarks; - - children.sort(function (a, b) { - return a.name < b.name ? -1 : 1; - }); - - this.fillTemplate(node, templateData); - writer.write(headerTemplate(templateData)); - writer.write(summaryTableHeader); - children.forEach(function (child) { - var metrics = child.metrics, - reportClasses = { - statements: getReportClass(metrics.statements, watermarks.statements), - lines: getReportClass(metrics.lines, watermarks.lines), - functions: getReportClass(metrics.functions, watermarks.functions), - branches: getReportClass(metrics.branches, watermarks.branches) - }, - data = { - metrics: metrics, - reportClasses: reportClasses, - file: cleanPath(child.displayShortName()), - output: linkMapper.fromParent(child) - }; - writer.write(summaryLineTemplate(data) + '\n'); - }); - writer.write(summaryTableFooter); - writer.write(footerTemplate(templateData)); - }, - - writeFiles: function (writer, node, dir, collector) { - var that = this, - indexFile = path.resolve(dir, 'index.html'), - childFile; - if (this.opts.verbose) { console.error('Writing ' + indexFile); } - writer.writeFile(indexFile, function (contentWriter) { - that.writeIndexPage(contentWriter, node); - }); - node.children.forEach(function (child) { - if (child.kind === 'dir') { - that.writeFiles(writer, child, path.resolve(dir, child.relativeName), collector); - } else { - childFile = path.resolve(dir, child.relativeName + '.html'); - if (that.opts.verbose) { console.error('Writing ' + childFile); } - writer.writeFile(childFile, function (contentWriter) { - that.writeDetailPage(contentWriter, child, collector.fileCoverageFor(child.fullPath())); - }); - } - }); - }, - - standardLinkMapper: function () { - return { - fromParent: function (node) { - var relativeName = cleanPath(node.relativeName); - - return node.kind === 'dir' ? relativeName + 'index.html' : relativeName + '.html'; - }, - ancestorHref: function (node, num) { - var href = '', - notDot = function(part) { - return part !== '.'; - }, - separated, - levels, - i, - j; - - for (i = 0; i < num; i += 1) { - separated = cleanPath(node.relativeName).split('/').filter(notDot); - levels = separated.length - 1; - for (j = 0; j < levels; j += 1) { - href += '../'; - } - node = node.parent; - } - return href; - }, - ancestor: function (node, num) { - return this.ancestorHref(node, num) + 'index.html'; - }, - asset: function (node, name) { - var i = 0, - parent = node.parent; - while (parent) { i += 1; parent = parent.parent; } - return this.ancestorHref(node, i) + name; - } - }; - }, - - writeReport: function (collector, sync) { - var opts = this.opts, - dir = opts.dir, - summarizer = new TreeSummarizer(), - writer = opts.writer || new FileWriter(sync), - that = this, - tree, - copyAssets = function (subdir) { - var srcDir = path.resolve(__dirname, '..', 'assets', subdir); - fs.readdirSync(srcDir).forEach(function (f) { - var resolvedSource = path.resolve(srcDir, f), - resolvedDestination = path.resolve(dir, f), - stat = fs.statSync(resolvedSource); - - if (stat.isFile()) { - if (opts.verbose) { - console.log('Write asset: ' + resolvedDestination); - } - writer.copyFile(resolvedSource, resolvedDestination); - } - }); - }; - - collector.files().forEach(function (key) { - summarizer.addFileCoverageSummary(key, utils.summarizeFileCoverage(collector.fileCoverageFor(key))); - }); - tree = summarizer.getTreeSummary(); - [ '.', 'vendor'].forEach(function (subdir) { - copyAssets(subdir); - }); - writer.on('done', function () { that.emit('done'); }); - //console.log(JSON.stringify(tree.root, undefined, 4)); - this.writeFiles(writer, tree.root, dir, collector); - writer.done(); - } -}); - -module.exports = HtmlReport; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/index.js deleted file mode 100644 index 13e7effbe..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/index.js +++ /dev/null @@ -1,104 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var util = require('util'), - EventEmitter = require('events').EventEmitter, - Factory = require('../util/factory'), - factory = new Factory('report', __dirname, false); -/** - * An abstraction for producing coverage reports. - * This class is both the base class as well as a factory for `Report` implementations. - * All reports are event emitters and are expected to emit a `done` event when - * the report writing is complete. - * - * See also the `Reporter` class for easily producing multiple coverage reports - * with a single call. - * - * Usage - * ----- - * - * var Report = require('istanbul').Report, - * report = Report.create('html'), - * collector = new require('istanbul').Collector; - * - * collector.add(coverageObject); - * report.on('done', function () { console.log('done'); }); - * report.writeReport(collector); - * - * @class Report - * @module report - * @main report - * @constructor - * @protected - * @param {Object} options Optional. The options supported by a specific store implementation. - */ -function Report(/* options */) { - EventEmitter.call(this); -} - -util.inherits(Report, EventEmitter); - -//add register, create, mix, loadAll, getReportList as class methods -factory.bindClassMethods(Report); - -/** - * registers a new report implementation. - * @method register - * @static - * @param {Function} constructor the constructor function for the report. This function must have a - * `TYPE` property of type String, that will be used in `Report.create()` - */ -/** - * returns a report implementation of the specified type. - * @method create - * @static - * @param {String} type the type of report to create - * @param {Object} opts Optional. Options specific to the report implementation - * @return {Report} a new store of the specified type - */ -/** - * returns the list of available reports as an array of strings - * @method getReportList - * @static - * @return an array of supported report formats - */ - -var proto = { - /** - * returns a one-line summary of the report - * @method synopsis - * @return {String} a description of what the report is about - */ - synopsis: function () { - throw new Error('synopsis must be overridden'); - }, - /** - * returns a config object that has override-able keys settable via config - * @method getDefaultConfig - * @return {Object|null} an object representing keys that can be overridden via - * the istanbul configuration where the values are the defaults used when - * not specified. A null return implies no config attributes - */ - getDefaultConfig: function () { - return null; - }, - /** - * writes the report for a set of coverage objects added to a collector. - * @method writeReport - * @param {Collector} collector the collector for getting the set of files and coverage - * @param {Boolean} sync true if reports must be written synchronously, false if they can be written using asynchronous means (e.g. stream.write) - */ - writeReport: function (/* collector, sync */) { - throw new Error('writeReport: must be overridden'); - } -}; - -Object.keys(proto).forEach(function (k) { - Report.prototype[k] = proto[k]; -}); - -module.exports = Report; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/json-summary.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/json-summary.js deleted file mode 100644 index 6ab7caae9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/json-summary.js +++ /dev/null @@ -1,75 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var path = require('path'), - objectUtils = require('../object-utils'), - Writer = require('../util/file-writer'), - util = require('util'), - Report = require('./index'); -/** - * a `Report` implementation that produces a coverage JSON object with summary info only. - * - * Usage - * ----- - * - * var report = require('istanbul').Report.create('json-summary'); - * - * - * @class JsonSummaryReport - * @extends Report - * @module report - * @constructor - * @param {Object} opts optional - * @param {String} [opts.dir] the directory in which to write the `coverage-summary.json` file. Defaults to `process.cwd()` - */ -function JsonSummaryReport(opts) { - this.opts = opts || {}; - this.opts.dir = this.opts.dir || process.cwd(); - this.opts.file = this.opts.file || this.getDefaultConfig().file; - this.opts.writer = this.opts.writer || null; -} -JsonSummaryReport.TYPE = 'json-summary'; -util.inherits(JsonSummaryReport, Report); - -Report.mix(JsonSummaryReport, { - synopsis: function () { - return 'prints a summary coverage object as JSON to a file'; - }, - getDefaultConfig: function () { - return { - file: 'coverage-summary.json' - }; - }, - writeReport: function (collector, sync) { - var outputFile = path.resolve(this.opts.dir, this.opts.file), - writer = this.opts.writer || new Writer(sync), - that = this; - - var summaries = [], - finalSummary; - collector.files().forEach(function (file) { - summaries.push(objectUtils.summarizeFileCoverage(collector.fileCoverageFor(file))); - }); - finalSummary = objectUtils.mergeSummaryObjects.apply(null, summaries); - - writer.on('done', function () { that.emit('done'); }); - writer.writeFile(outputFile, function (contentWriter) { - contentWriter.println("{"); - contentWriter.write('"total":'); - contentWriter.write(JSON.stringify(finalSummary)); - - collector.files().forEach(function (key) { - contentWriter.println(","); - contentWriter.write(JSON.stringify(key)); - contentWriter.write(":"); - contentWriter.write(JSON.stringify(objectUtils.summarizeFileCoverage(collector.fileCoverageFor(key)))); - }); - contentWriter.println("}"); - }); - writer.done(); - } -}); - -module.exports = JsonSummaryReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/json.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/json.js deleted file mode 100644 index 2def51ac0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/json.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var path = require('path'), - Writer = require('../util/file-writer'), - util = require('util'), - Report = require('./index'); -/** - * a `Report` implementation that produces a coverage JSON object. - * - * Usage - * ----- - * - * var report = require('istanbul').Report.create('json'); - * - * - * @class JsonReport - * @extends Report - * @module report - * @constructor - * @param {Object} opts optional - * @param {String} [opts.dir] the directory in which to write the `coverage-final.json` file. Defaults to `process.cwd()` - */ -function JsonReport(opts) { - this.opts = opts || {}; - this.opts.dir = this.opts.dir || process.cwd(); - this.opts.file = this.opts.file || this.getDefaultConfig().file; - this.opts.writer = this.opts.writer || null; -} -JsonReport.TYPE = 'json'; -util.inherits(JsonReport, Report); - -Report.mix(JsonReport, { - synopsis: function () { - return 'prints the coverage object as JSON to a file'; - }, - getDefaultConfig: function () { - return { - file: 'coverage-final.json' - }; - }, - writeReport: function (collector, sync) { - var outputFile = path.resolve(this.opts.dir, this.opts.file), - writer = this.opts.writer || new Writer(sync), - that = this; - - writer.on('done', function () { that.emit('done'); }); - writer.writeFile(outputFile, function (contentWriter) { - var first = true; - contentWriter.println("{"); - collector.files().forEach(function (key) { - if (first) { - first = false; - } else { - contentWriter.println(","); - } - contentWriter.write(JSON.stringify(key)); - contentWriter.write(":"); - contentWriter.write(JSON.stringify(collector.fileCoverageFor(key))); - }); - contentWriter.println("}"); - }); - writer.done(); - } -}); - -module.exports = JsonReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/lcov.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/lcov.js deleted file mode 100644 index 87e01eaab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/lcov.js +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var path = require('path'), - util = require('util'), - mkdirp = require('mkdirp'), - Report = require('./index'), - LcovOnlyReport = require('./lcovonly'), - HtmlReport = require('./html'); - -/** - * a `Report` implementation that produces an LCOV coverage file and an associated HTML report from coverage objects. - * The name and behavior of this report is designed to ease migration for projects that currently use `yuitest_coverage` - * - * Usage - * ----- - * - * var report = require('istanbul').Report.create('lcov'); - * - * - * @class LcovReport - * @extends Report - * @module report - * @constructor - * @param {Object} opts optional - * @param {String} [opts.dir] the directory in which to the `lcov.info` file. - * HTML files are written in a subdirectory called `lcov-report`. Defaults to `process.cwd()` - */ -function LcovReport(opts) { - Report.call(this); - opts = opts || {}; - var baseDir = path.resolve(opts.dir || process.cwd()), - htmlDir = path.resolve(baseDir, 'lcov-report'); - - mkdirp.sync(baseDir); - this.lcov = new LcovOnlyReport({ dir: baseDir, watermarks: opts.watermarks }); - this.html = new HtmlReport({ dir: htmlDir, watermarks: opts.watermarks, sourceStore: opts.sourceStore}); -} - -LcovReport.TYPE = 'lcov'; -util.inherits(LcovReport, Report); - -Report.mix(LcovReport, { - synopsis: function () { - return 'combined lcovonly and html report that generates an lcov.info file as well as HTML'; - }, - writeReport: function (collector, sync) { - var handler = this.handleDone.bind(this); - this.inProgress = 2; - this.lcov.on('done', handler); - this.html.on('done', handler); - this.lcov.writeReport(collector, sync); - this.html.writeReport(collector, sync); - }, - handleDone: function () { - this.inProgress -= 1; - if (this.inProgress === 0) { - this.emit('done'); - } - } -}); - -module.exports = LcovReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/lcovonly.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/lcovonly.js deleted file mode 100644 index 2c1be46d8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/lcovonly.js +++ /dev/null @@ -1,103 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var path = require('path'), - Writer = require('../util/file-writer'), - util = require('util'), - Report = require('./index'), - utils = require('../object-utils'); -/** - * a `Report` implementation that produces an LCOV coverage file from coverage objects. - * - * Usage - * ----- - * - * var report = require('istanbul').Report.create('lcovonly'); - * - * - * @class LcovOnlyReport - * @extends Report - * @module report - * @constructor - * @param {Object} opts optional - * @param {String} [opts.dir] the directory in which to the `lcov.info` file. Defaults to `process.cwd()` - */ -function LcovOnlyReport(opts) { - this.opts = opts || {}; - this.opts.dir = this.opts.dir || process.cwd(); - this.opts.file = this.opts.file || this.getDefaultConfig().file; - this.opts.writer = this.opts.writer || null; -} -LcovOnlyReport.TYPE = 'lcovonly'; -util.inherits(LcovOnlyReport, Report); - -Report.mix(LcovOnlyReport, { - synopsis: function () { - return 'lcov coverage report that can be consumed by the lcov tool'; - }, - getDefaultConfig: function () { - return { file: 'lcov.info' }; - }, - writeFileCoverage: function (writer, fc) { - var functions = fc.f, - functionMap = fc.fnMap, - lines = fc.l, - branches = fc.b, - branchMap = fc.branchMap, - summary = utils.summarizeFileCoverage(fc); - - writer.println('TN:'); //no test name - writer.println('SF:' + fc.path); - - Object.keys(functions).forEach(function (key) { - var meta = functionMap[key]; - writer.println('FN:' + [ meta.line, meta.name ].join(',')); - }); - writer.println('FNF:' + summary.functions.total); - writer.println('FNH:' + summary.functions.covered); - - Object.keys(functions).forEach(function (key) { - var stats = functions[key], - meta = functionMap[key]; - writer.println('FNDA:' + [ stats, meta.name ].join(',')); - }); - - Object.keys(lines).forEach(function (key) { - var stat = lines[key]; - writer.println('DA:' + [ key, stat ].join(',')); - }); - writer.println('LF:' + summary.lines.total); - writer.println('LH:' + summary.lines.covered); - - Object.keys(branches).forEach(function (key) { - var branchArray = branches[key], - meta = branchMap[key], - line = meta.line, - i = 0; - branchArray.forEach(function (b) { - writer.println('BRDA:' + [line, key, i, b].join(',')); - i += 1; - }); - }); - writer.println('BRF:' + summary.branches.total); - writer.println('BRH:' + summary.branches.covered); - writer.println('end_of_record'); - }, - - writeReport: function (collector, sync) { - var outputFile = path.resolve(this.opts.dir, this.opts.file), - writer = this.opts.writer || new Writer(sync), - that = this; - writer.on('done', function () { that.emit('done'); }); - writer.writeFile(outputFile, function (contentWriter) { - collector.files().forEach(function (key) { - that.writeFileCoverage(contentWriter, collector.fileCoverageFor(key)); - }); - }); - writer.done(); - } -}); - -module.exports = LcovOnlyReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/none.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/none.js deleted file mode 100644 index 0fd5cfca6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/none.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var util = require('util'), - Report = require('./index'); - -/** - * a `Report` implementation that does nothing. Use to specify that no reporting - * is needed. - * - * Usage - * ----- - * - * var report = require('istanbul').Report.create('none'); - * - * - * @class NoneReport - * @extends Report - * @module report - * @constructor - */ -function NoneReport() { - Report.call(this); -} - -NoneReport.TYPE = 'none'; -util.inherits(NoneReport, Report); - -Report.mix(NoneReport, { - synopsis: function () { - return 'Does nothing. Useful to override default behavior and suppress reporting entirely'; - }, - writeReport: function (/* collector, sync */) { - //noop - this.emit('done'); - } -}); - -module.exports = NoneReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/teamcity.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/teamcity.js deleted file mode 100644 index f6b90fc95..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/teamcity.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var path = require('path'), - util = require('util'), - mkdirp = require('mkdirp'), - fs = require('fs'), - utils = require('../object-utils'), - Report = require('./index'); - -/** - * a `Report` implementation that produces system messages interpretable by TeamCity. - * - * Usage - * ----- - * - * var report = require('istanbul').Report.create('teamcity'); - * - * @class TeamcityReport - * @extends Report - * @module report - * @constructor - * @param {Object} opts optional - * @param {String} [opts.dir] the directory in which to the text coverage report will be written, when writing to a file - * @param {String} [opts.file] the filename for the report. When omitted, the report is written to console - */ -function TeamcityReport(opts) { - Report.call(this); - opts = opts || {}; - this.dir = opts.dir || process.cwd(); - this.file = opts.file; - this.blockName = opts.blockName || this.getDefaultConfig().blockName; -} - -TeamcityReport.TYPE = 'teamcity'; -util.inherits(TeamcityReport, Report); - -function lineForKey(value, teamcityVar) { - return '##teamcity[buildStatisticValue key=\'' + teamcityVar + '\' value=\'' + value + '\']'; -} - -Report.mix(TeamcityReport, { - synopsis: function () { - return 'report with system messages that can be interpreted with TeamCity'; - }, - getDefaultConfig: function () { - return { file: null , blockName: 'Code Coverage Summary'}; - }, - writeReport: function (collector /*, sync */) { - var summaries = [], - finalSummary, - lines = [], - text; - - collector.files().forEach(function (file) { - summaries.push(utils.summarizeFileCoverage(collector.fileCoverageFor(file))); - }); - - finalSummary = utils.mergeSummaryObjects.apply(null, summaries); - - lines.push(''); - lines.push('##teamcity[blockOpened name=\''+ this.blockName +'\']'); - - //Statements Covered - lines.push(lineForKey(finalSummary.statements.pct, 'CodeCoverageB')); - - //Methods Covered - lines.push(lineForKey(finalSummary.functions.covered, 'CodeCoverageAbsMCovered')); - lines.push(lineForKey(finalSummary.functions.total, 'CodeCoverageAbsMTotal')); - lines.push(lineForKey(finalSummary.functions.pct, 'CodeCoverageM')); - - //Lines Covered - lines.push(lineForKey(finalSummary.lines.covered, 'CodeCoverageAbsLCovered')); - lines.push(lineForKey(finalSummary.lines.total, 'CodeCoverageAbsLTotal')); - lines.push(lineForKey(finalSummary.lines.pct, 'CodeCoverageL')); - - lines.push('##teamcity[blockClosed name=\''+ this.blockName +'\']'); - - text = lines.join('\n'); - if (this.file) { - mkdirp.sync(this.dir); - fs.writeFileSync(path.join(this.dir, this.file), text, 'utf8'); - } else { - console.log(text); - } - this.emit('done'); - } -}); - -module.exports = TeamcityReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/templates/foot.txt b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/templates/foot.txt deleted file mode 100644 index e853251dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/templates/foot.txt +++ /dev/null @@ -1,20 +0,0 @@ -
-
- - -{{#if prettify}} - - -{{/if}} - - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/templates/head.txt b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/templates/head.txt deleted file mode 100644 index f98094e5f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/templates/head.txt +++ /dev/null @@ -1,60 +0,0 @@ - - - - Code coverage report for {{entity}} - -{{#if prettify}} - -{{/if}} - - - - - -
-
-

- {{{pathHtml}}} -

-
- {{#with metrics.statements}} -
- {{pct}}% - Statements - {{covered}}/{{total}} -
- {{/with}} - {{#with metrics.branches}} -
- {{pct}}% - Branches - {{covered}}/{{total}} -
- {{/with}} - {{#with metrics.functions}} -
- {{pct}}% - Functions - {{covered}}/{{total}} -
- {{/with}} - {{#with metrics.lines}} -
- {{pct}}% - Lines - {{covered}}/{{total}} -
- {{/with}} - {{#if_has_ignores metrics}} -
- {{#show_ignores metrics}}{{/show_ignores}} - Ignored      -
- {{/if_has_ignores}} -
-
-
diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/text-lcov.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/text-lcov.js deleted file mode 100644 index 15e1a48ca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/text-lcov.js +++ /dev/null @@ -1,50 +0,0 @@ -var LcovOnly = require('./lcovonly'), - util = require('util'); - -/** - * a `Report` implementation that produces an LCOV coverage and prints it - * to standard out. - * - * Usage - * ----- - * - * var report = require('istanbul').Report.create('text-lcov'); - * - * @class TextLcov - * @module report - * @extends LcovOnly - * @constructor - * @param {Object} opts optional - * @param {String} [opts.log] the method used to log to console. - */ -function TextLcov(opts) { - var that = this; - - LcovOnly.call(this); - - this.opts = opts || {}; - this.opts.log = this.opts.log || console.log; - this.opts.writer = { - println: function (ln) { - that.opts.log(ln); - } - }; -} - -TextLcov.TYPE = 'text-lcov'; -util.inherits(TextLcov, LcovOnly); - -LcovOnly.super_.mix(TextLcov, { - writeReport: function (collector) { - var that = this, - writer = this.opts.writer; - - collector.files().forEach(function (key) { - that.writeFileCoverage(writer, collector.fileCoverageFor(key)); - }); - - this.emit('done'); - } -}); - -module.exports = TextLcov; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/text-summary.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/text-summary.js deleted file mode 100644 index 9537cbe20..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/text-summary.js +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var path = require('path'), - util = require('util'), - mkdirp = require('mkdirp'), - defaults = require('./common/defaults'), - fs = require('fs'), - utils = require('../object-utils'), - Report = require('./index'); - -/** - * a `Report` implementation that produces text output for overall coverage in summary format. - * - * Usage - * ----- - * - * var report = require('istanbul').Report.create('text-summary'); - * - * @class TextSummaryReport - * @extends Report - * @module report - * @constructor - * @param {Object} opts optional - * @param {String} [opts.dir] the directory in which to the text coverage report will be written, when writing to a file - * @param {String} [opts.file] the filename for the report. When omitted, the report is written to console - */ -function TextSummaryReport(opts) { - Report.call(this); - opts = opts || {}; - this.dir = opts.dir || process.cwd(); - this.file = opts.file; - this.watermarks = opts.watermarks || defaults.watermarks(); -} - -TextSummaryReport.TYPE = 'text-summary'; -util.inherits(TextSummaryReport, Report); - -function lineForKey(summary, key, watermarks) { - var metrics = summary[key], - skipped, - result, - clazz = defaults.classFor(key, summary, watermarks); - key = key.substring(0, 1).toUpperCase() + key.substring(1); - if (key.length < 12) { key += ' '.substring(0, 12 - key.length); } - result = [ key , ':', metrics.pct + '%', '(', metrics.covered + '/' + metrics.total, ')'].join(' '); - skipped = metrics.skipped; - if (skipped > 0) { - result += ', ' + skipped + ' ignored'; - } - return defaults.colorize(result, clazz); -} - -Report.mix(TextSummaryReport, { - synopsis: function () { - return 'text report that prints a coverage summary across all files, typically to console'; - }, - getDefaultConfig: function () { - return { file: null }; - }, - writeReport: function (collector /*, sync */) { - var summaries = [], - finalSummary, - lines = [], - watermarks = this.watermarks, - text; - collector.files().forEach(function (file) { - summaries.push(utils.summarizeFileCoverage(collector.fileCoverageFor(file))); - }); - finalSummary = utils.mergeSummaryObjects.apply(null, summaries); - lines.push(''); - lines.push('=============================== Coverage summary ==============================='); - lines.push.apply(lines, [ - lineForKey(finalSummary, 'statements', watermarks), - lineForKey(finalSummary, 'branches', watermarks), - lineForKey(finalSummary, 'functions', watermarks), - lineForKey(finalSummary, 'lines', watermarks) - ]); - lines.push('================================================================================'); - text = lines.join('\n'); - if (this.file) { - mkdirp.sync(this.dir); - fs.writeFileSync(path.join(this.dir, this.file), text, 'utf8'); - } else { - console.log(text); - } - this.emit('done'); - } -}); - -module.exports = TextSummaryReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/text.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/text.js deleted file mode 100644 index 8ab2b7d13..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/report/text.js +++ /dev/null @@ -1,234 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var path = require('path'), - mkdirp = require('mkdirp'), - util = require('util'), - fs = require('fs'), - defaults = require('./common/defaults'), - Report = require('./index'), - TreeSummarizer = require('../util/tree-summarizer'), - utils = require('../object-utils'), - PCT_COLS = 9, - MISSING_COL = 15, - TAB_SIZE = 1, - DELIM = ' |', - COL_DELIM = '-|'; - -/** - * a `Report` implementation that produces text output in a detailed table. - * - * Usage - * ----- - * - * var report = require('istanbul').Report.create('text'); - * - * @class TextReport - * @extends Report - * @module report - * @constructor - * @param {Object} opts optional - * @param {String} [opts.dir] the directory in which to the text coverage report will be written, when writing to a file - * @param {String} [opts.file] the filename for the report. When omitted, the report is written to console - * @param {Number} [opts.maxCols] the max column width of the report. By default, the width of the report is adjusted based on the length of the paths - * to be reported. - */ -function TextReport(opts) { - Report.call(this); - opts = opts || {}; - this.dir = opts.dir || process.cwd(); - this.file = opts.file; - this.summary = opts.summary; - this.maxCols = opts.maxCols || 0; - this.watermarks = opts.watermarks || defaults.watermarks(); -} - -TextReport.TYPE = 'text'; -util.inherits(TextReport, Report); - -function padding(num, ch) { - var str = '', - i; - ch = ch || ' '; - for (i = 0; i < num; i += 1) { - str += ch; - } - return str; -} - -function fill(str, width, right, tabs, clazz) { - tabs = tabs || 0; - str = String(str); - - var leadingSpaces = tabs * TAB_SIZE, - remaining = width - leadingSpaces, - leader = padding(leadingSpaces), - fmtStr = '', - fillStr, - strlen = str.length; - - if (remaining > 0) { - if (remaining >= strlen) { - fillStr = padding(remaining - strlen); - fmtStr = right ? fillStr + str : str + fillStr; - } else { - fmtStr = str.substring(strlen - remaining); - fmtStr = '... ' + fmtStr.substring(4); - } - } - - fmtStr = defaults.colorize(fmtStr, clazz); - return leader + fmtStr; -} - -function formatName(name, maxCols, level, clazz) { - return fill(name, maxCols, false, level, clazz); -} - -function formatPct(pct, clazz, width) { - return fill(pct, width || PCT_COLS, true, 0, clazz); -} - -function nodeName(node) { - return node.displayShortName() || 'All files'; -} - -function tableHeader(maxNameCols) { - var elements = []; - elements.push(formatName('File', maxNameCols, 0)); - elements.push(formatPct('% Stmts')); - elements.push(formatPct('% Branch')); - elements.push(formatPct('% Funcs')); - elements.push(formatPct('% Lines')); - elements.push(formatPct('Uncovered Lines', undefined, MISSING_COL)); - return elements.join(' |') + ' |'; -} - -function collectMissingLines(kind, linesCovered) { - var missingLines = []; - - if (kind !== 'file') { - return []; - } - - Object.keys(linesCovered).forEach(function (key) { - if (!linesCovered[key]) { - missingLines.push(key); - } - }); - - return missingLines; -} - -function tableRow(node, maxNameCols, level, watermarks) { - var name = nodeName(node), - statements = node.metrics.statements.pct, - branches = node.metrics.branches.pct, - functions = node.metrics.functions.pct, - lines = node.metrics.lines.pct, - missingLines = collectMissingLines(node.kind, node.metrics.linesCovered), - elements = []; - - elements.push(formatName(name, maxNameCols, level, defaults.classFor('statements', node.metrics, watermarks))); - elements.push(formatPct(statements, defaults.classFor('statements', node.metrics, watermarks))); - elements.push(formatPct(branches, defaults.classFor('branches', node.metrics, watermarks))); - elements.push(formatPct(functions, defaults.classFor('functions', node.metrics, watermarks))); - elements.push(formatPct(lines, defaults.classFor('lines', node.metrics, watermarks))); - elements.push(formatPct(missingLines.join(','), 'low', MISSING_COL)); - - return elements.join(DELIM) + DELIM; -} - -function findNameWidth(node, level, last) { - last = last || 0; - level = level || 0; - var idealWidth = TAB_SIZE * level + nodeName(node).length; - if (idealWidth > last) { - last = idealWidth; - } - node.children.forEach(function (child) { - last = findNameWidth(child, level + 1, last); - }); - return last; -} - -function makeLine(nameWidth) { - var name = padding(nameWidth, '-'), - pct = padding(PCT_COLS, '-'), - elements = []; - - elements.push(name); - elements.push(pct); - elements.push(pct); - elements.push(pct); - elements.push(pct); - elements.push(padding(MISSING_COL, '-')); - return elements.join(COL_DELIM) + COL_DELIM; -} - -function walk(node, nameWidth, array, level, watermarks) { - var line; - if (level === 0) { - line = makeLine(nameWidth); - array.push(line); - array.push(tableHeader(nameWidth)); - array.push(line); - } else { - array.push(tableRow(node, nameWidth, level, watermarks)); - } - node.children.forEach(function (child) { - walk(child, nameWidth, array, level + 1, watermarks); - }); - if (level === 0) { - array.push(line); - array.push(tableRow(node, nameWidth, level, watermarks)); - array.push(line); - } -} - -Report.mix(TextReport, { - synopsis: function () { - return 'text report that prints a coverage line for every file, typically to console'; - }, - getDefaultConfig: function () { - return { file: null, maxCols: 0 }; - }, - writeReport: function (collector /*, sync */) { - var summarizer = new TreeSummarizer(), - tree, - root, - nameWidth, - statsWidth = 4 * (PCT_COLS + 2) + MISSING_COL, - maxRemaining, - strings = [], - text; - - collector.files().forEach(function (key) { - summarizer.addFileCoverageSummary(key, utils.summarizeFileCoverage( - collector.fileCoverageFor(key) - )); - }); - tree = summarizer.getTreeSummary(); - root = tree.root; - nameWidth = findNameWidth(root); - if (this.maxCols > 0) { - maxRemaining = this.maxCols - statsWidth - 2; - if (nameWidth > maxRemaining) { - nameWidth = maxRemaining; - } - } - walk(root, nameWidth, strings, 0, this.watermarks); - text = strings.join('\n') + '\n'; - if (this.file) { - mkdirp.sync(this.dir); - fs.writeFileSync(path.join(this.dir, this.file), text, 'utf8'); - } else { - console.log(text); - } - this.emit('done'); - } -}); - -module.exports = TextReport; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/reporter.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/reporter.js deleted file mode 100644 index c7000d5b9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/reporter.js +++ /dev/null @@ -1,111 +0,0 @@ -/* - Copyright (c) 2014, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var Report = require('./report'), - configuration = require('./config'), - inputError = require('./util/input-error'); - -/** - * convenience mechanism to write one or more reports ensuring that config - * options are respected. - * Usage - * ----- - * - * var fs = require('fs'), - * reporter = new require('istanbul').Reporter(), - * collector = new require('istanbul').Collector(), - * sync = true; - * - * collector.add(JSON.parse(fs.readFileSync('coverage.json', 'utf8'))); - * reporter.add('lcovonly'); - * reporter.addAll(['clover', 'cobertura']); - * reporter.write(collector, sync, function () { console.log('done'); }); - * - * @class Reporter - * @param {Configuration} cfg the config object, a falsy value will load the - * default configuration instead - * @param {String} dir the directory in which to write the reports, may be falsy - * to use config or global defaults - * @constructor - * @module main - */ -function Reporter(cfg, dir) { - this.config = cfg || configuration.loadFile(); - this.dir = dir || this.config.reporting.dir(); - this.reports = {}; -} - -Reporter.prototype = { - /** - * adds a report to be generated. Must be one of the entries returned - * by `Report.getReportList()` - * @method add - * @param {String} fmt the format of the report to generate - */ - add: function (fmt) { - if (this.reports[fmt]) { // already added - return; - } - var config = this.config, - rptConfig = config.reporting.reportConfig()[fmt] || {}; - rptConfig.verbose = config.verbose; - rptConfig.dir = this.dir; - rptConfig.watermarks = config.reporting.watermarks(); - try { - this.reports[fmt] = Report.create(fmt, rptConfig); - } catch (ex) { - throw inputError.create('Invalid report format [' + fmt + ']'); - } - }, - /** - * adds an array of report formats to be generated - * @method addAll - * @param {Array} fmts an array of report formats - */ - addAll: function (fmts) { - var that = this; - fmts.forEach(function (f) { - that.add(f); - }); - }, - /** - * writes all reports added and calls the callback when done - * @method write - * @param {Collector} collector the collector having the coverage data - * @param {Boolean} sync true to write reports synchronously - * @param {Function} callback the callback to call when done. When `sync` - * is true, the callback will be called in the same process tick. - */ - write: function (collector, sync, callback) { - var reports = this.reports, - verbose = this.config.verbose, - handler = this.handleDone.bind(this, callback); - - this.inProgress = Object.keys(reports).length; - - Object.keys(reports).forEach(function (name) { - var report = reports[name]; - if (verbose) { - console.error('Write report: ' + name); - } - report.on('done', handler); - report.writeReport(collector, sync); - }); - }, - /* - * handles listening on all reports to be completed before calling the callback - * @method handleDone - * @private - * @param {Function} callback the callback to call when all reports are - * written - */ - handleDone: function (callback) { - this.inProgress -= 1; - if (this.inProgress === 0) { - return callback(); - } - } -}; - -module.exports = Reporter; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/fslookup.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/fslookup.js deleted file mode 100644 index b00cc179c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/fslookup.js +++ /dev/null @@ -1,61 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var util = require('util'), - fs = require('fs'), - Store = require('./index'); - -/** - * a `Store` implementation that doesn't actually store anything. It assumes that keys - * are absolute file paths, and contents are contents of those files. - * Thus, `set` for this store is no-op, `get` returns the - * contents of the filename that the key represents, `hasKey` returns true if the key - * supplied is a valid file path and `keys` always returns an empty array. - * - * Usage - * ----- - * - * var store = require('istanbul').Store.create('fslookup'); - * - * - * @class LookupStore - * @extends Store - * @module store - * @constructor - */ -function LookupStore(opts) { - Store.call(this, opts); -} - -LookupStore.TYPE = 'fslookup'; -util.inherits(LookupStore, Store); - -Store.mix(LookupStore, { - keys: function () { - return []; - }, - get: function (key) { - return fs.readFileSync(key, 'utf8'); - }, - hasKey: function (key) { - var stats; - try { - stats = fs.statSync(key); - return stats.isFile(); - } catch (ex) { - return false; - } - }, - set: function (key /*, contents */) { - if (!this.hasKey(key)) { - throw new Error('Attempt to set contents for non-existent file [' + key + '] on a fslookup store'); - } - return key; - } -}); - - -module.exports = LookupStore; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/index.js deleted file mode 100644 index 85ffc4f0a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/index.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var Factory = require('../util/factory'), - factory = new Factory('store', __dirname, false); -/** - * An abstraction for keeping track of content against some keys (e.g. - * original source, instrumented source, coverage objects against file names). - * This class is both the base class as well as a factory for `Store` implementations. - * - * Usage - * ----- - * - * var Store = require('istanbul').Store, - * store = Store.create('memory'); - * - * //basic use - * store.set('foo', 'foo-content'); - * var content = store.get('foo'); - * - * //keys and values - * store.keys().forEach(function (key) { - * console.log(key + ':\n' + store.get(key); - * }); - * if (store.hasKey('bar') { console.log(store.get('bar'); } - * - * - * //syntactic sugar - * store.setObject('foo', { foo: true }); - * console.log(store.getObject('foo').foo); - * - * store.dispose(); - * - * @class Store - * @constructor - * @module store - * @param {Object} options Optional. The options supported by a specific store implementation. - * @main store - */ -function Store(/* options */) {} - -//add register, create, mix, loadAll, getStoreList as class methods -factory.bindClassMethods(Store); - -/** - * registers a new store implementation. - * @method register - * @static - * @param {Function} constructor the constructor function for the store. This function must have a - * `TYPE` property of type String, that will be used in `Store.create()` - */ -/** - * returns a store implementation of the specified type. - * @method create - * @static - * @param {String} type the type of store to create - * @param {Object} opts Optional. Options specific to the store implementation - * @return {Store} a new store of the specified type - */ - -Store.prototype = { - /** - * sets some content associated with a specific key. The manner in which - * duplicate keys are handled for multiple `set()` calls with the same - * key is implementation-specific. - * - * @method set - * @param {String} key the key for the content - * @param {String} contents the contents for the key - */ - set: function (/* key, contents */) { throw new Error("set: must be overridden"); }, - /** - * returns the content associated to a specific key or throws if the key - * was not `set` - * @method get - * @param {String} key the key for which to get the content - * @return {String} the content for the specified key - */ - get: function (/* key */) { throw new Error("get: must be overridden"); }, - /** - * returns a list of all known keys - * @method keys - * @return {Array} an array of seen keys - */ - keys: function () { throw new Error("keys: must be overridden"); }, - /** - * returns true if the key is one for which a `get()` call would work. - * @method hasKey - * @param {String} key - * @return true if the key is valid for this store, false otherwise - */ - hasKey: function (/* key */) { throw new Error("hasKey: must be overridden"); }, - /** - * lifecycle method to dispose temporary resources associated with the store - * @method dispose - */ - dispose: function () {}, - /** - * sugar method to return an object associated with a specific key. Throws - * if the content set against the key was not a valid JSON string. - * @method getObject - * @param {String} key the key for which to return the associated object - * @return {Object} the object corresponding to the key - */ - getObject: function (key) { - return JSON.parse(this.get(key)); - }, - /** - * sugar method to set an object against a specific key. - * @method setObject - * @param {String} key the key for the object - * @param {Object} object the object to be stored - */ - setObject: function (key, object) { - return this.set(key, JSON.stringify(object)); - } -}; - -module.exports = Store; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/memory.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/memory.js deleted file mode 100644 index ff96fbd32..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/memory.js +++ /dev/null @@ -1,56 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var util = require('util'), - Store = require('./index'); - -/** - * a `Store` implementation using an in-memory object. - * - * Usage - * ----- - * - * var store = require('istanbul').Store.create('memory'); - * - * - * @class MemoryStore - * @extends Store - * @module store - * @constructor - */ -function MemoryStore() { - Store.call(this); - this.map = {}; -} - -MemoryStore.TYPE = 'memory'; -util.inherits(MemoryStore, Store); - -Store.mix(MemoryStore, { - set: function (key, contents) { - this.map[key] = contents; - }, - - get: function (key) { - if (!this.hasKey(key)) { - throw new Error('Unable to find entry for [' + key + ']'); - } - return this.map[key]; - }, - - hasKey: function (key) { - return this.map.hasOwnProperty(key); - }, - - keys: function () { - return Object.keys(this.map); - }, - - dispose: function () { - this.map = {}; - } -}); - -module.exports = MemoryStore; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/tmp.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/tmp.js deleted file mode 100644 index 31789c88b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/store/tmp.js +++ /dev/null @@ -1,81 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var util = require('util'), - path = require('path'), - os = require('os'), - fs = require('fs'), - mkdirp = require('mkdirp'), - Store = require('./index'); - -function makeTempDir() { - var dir = path.join(os.tmpdir ? os.tmpdir() : /* istanbul ignore next */ (process.env.TMPDIR || '/tmp'), 'ts' + new Date().getTime()); - mkdirp.sync(dir); - return dir; -} -/** - * a `Store` implementation using temporary files. - * - * Usage - * ----- - * - * var store = require('istanbul').Store.create('tmp'); - * - * - * @class TmpStore - * @extends Store - * @module store - * @param {Object} opts Optional. - * @param {String} [opts.tmp] a pre-existing directory to use as the `tmp` directory. When not specified, a random directory - * is created under `os.tmpdir()` - * @constructor - */ -function TmpStore(opts) { - opts = opts || {}; - this.tmp = opts.tmp || makeTempDir(); - this.map = {}; - this.seq = 0; - this.prefix = 't' + new Date().getTime() + '-'; -} - -TmpStore.TYPE = 'tmp'; -util.inherits(TmpStore, Store); - -Store.mix(TmpStore, { - generateTmpFileName: function () { - this.seq += 1; - return path.join(this.tmp, this.prefix + this.seq + '.tmp'); - }, - - set: function (key, contents) { - var tmpFile = this.generateTmpFileName(); - fs.writeFileSync(tmpFile, contents, 'utf8'); - this.map[key] = tmpFile; - }, - - get: function (key) { - var tmpFile = this.map[key]; - if (!tmpFile) { throw new Error('Unable to find tmp entry for [' + tmpFile + ']'); } - return fs.readFileSync(tmpFile, 'utf8'); - }, - - hasKey: function (key) { - return !!this.map[key]; - }, - - keys: function () { - return Object.keys(this.map); - }, - - dispose: function () { - var map = this.map; - Object.keys(map).forEach(function (key) { - fs.unlinkSync(map[key]); - }); - this.map = {}; - } -}); - -module.exports = TmpStore; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/factory.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/factory.js deleted file mode 100644 index 9f3d6f36f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/factory.js +++ /dev/null @@ -1,88 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var util = require('util'), - path = require('path'), - fs = require('fs'), - abbrev = require('abbrev'); - -function Factory(kind, dir, allowAbbreviations) { - this.kind = kind; - this.dir = dir; - this.allowAbbreviations = allowAbbreviations; - this.classMap = {}; - this.abbreviations = null; -} - -Factory.prototype = { - - knownTypes: function () { - var keys = Object.keys(this.classMap); - keys.sort(); - return keys; - }, - - resolve: function (abbreviatedType) { - if (!this.abbreviations) { - this.abbreviations = abbrev(this.knownTypes()); - } - return this.abbreviations[abbreviatedType]; - }, - - register: function (constructor) { - var type = constructor.TYPE; - if (!type) { throw new Error('Could not register ' + this.kind + ' constructor [no TYPE property]: ' + util.inspect(constructor)); } - this.classMap[type] = constructor; - this.abbreviations = null; - }, - - create: function (type, opts) { - var allowAbbrev = this.allowAbbreviations, - realType = allowAbbrev ? this.resolve(type) : type, - Cons; - - Cons = realType ? this.classMap[realType] : null; - if (!Cons) { throw new Error('Invalid ' + this.kind + ' [' + type + '], allowed values are ' + this.knownTypes().join(', ')); } - return new Cons(opts); - }, - - loadStandard: function (dir) { - var that = this; - fs.readdirSync(dir).forEach(function (file) { - if (file !== 'index.js' && file.indexOf('.js') === file.length - 3) { - try { - that.register(require(path.resolve(dir, file))); - } catch (ex) { - console.error(ex.message); - console.error(ex.stack); - throw new Error('Could not register ' + that.kind + ' from file ' + file); - } - } - }); - }, - - bindClassMethods: function (Cons) { - var tmpKind = this.kind.charAt(0).toUpperCase() + this.kind.substring(1), //ucfirst - allowAbbrev = this.allowAbbreviations; - - Cons.mix = Factory.mix; - Cons.register = this.register.bind(this); - Cons.create = this.create.bind(this); - Cons.loadAll = this.loadStandard.bind(this, this.dir); - Cons['get' + tmpKind + 'List'] = this.knownTypes.bind(this); - if (allowAbbrev) { - Cons['resolve' + tmpKind + 'Name'] = this.resolve.bind(this); - } - } -}; - -Factory.mix = function (cons, proto) { - Object.keys(proto).forEach(function (key) { - cons.prototype[key] = proto[key]; - }); -}; - -module.exports = Factory; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/file-matcher.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/file-matcher.js deleted file mode 100644 index 986064252..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/file-matcher.js +++ /dev/null @@ -1,76 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var async = require('async'), - glob = require('glob'), - fs = require('fs'), - path = require('path'), - seq = 0; - -function filesFor(options, callback) { - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } - options = options || {}; - - var root = options.root, - includes = options.includes, - excludes = options.excludes, - realpath = options.realpath, - relative = options.relative, - opts; - - root = root || process.cwd(); - includes = includes && Array.isArray(includes) ? includes : [ '**/*.js' ]; - excludes = excludes && Array.isArray(excludes) ? excludes : [ '**/node_modules/**' ]; - - opts = { cwd: root, nodir: true, ignore: excludes }; - seq += 1; - opts['x' + seq + new Date().getTime()] = true; //cache buster for minimatch cache bug - glob(includes.join(' '), opts, function (err, files) { - if (err) { return callback(err); } - if (relative) { return callback(err, files); } - - if (!realpath) { - files = files.map(function (file) { return path.resolve(root, file); }); - return callback(err, files); - } - - var realPathCache = module.constructor._realpathCache || {}; - - async.map(files, function (file, done) { - fs.realpath(path.resolve(root, file), realPathCache, done); - }, callback); - }); -} - -function matcherFor(options, callback) { - - if (!callback && typeof options === 'function') { - callback = options; - options = null; - } - options = options || {}; - options.relative = false; //force absolute paths - options.realpath = true; //force real paths (to match Node.js module paths) - - filesFor(options, function (err, files) { - var fileMap = {}, - matchFn; - if (err) { return callback(err); } - files.forEach(function (file) { fileMap[file] = true; }); - - matchFn = function (file) { return fileMap[file]; }; - matchFn.files = Object.keys(fileMap); - return callback(null, matchFn); - }); -} - -module.exports = { - filesFor: filesFor, - matcherFor: matcherFor -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/file-writer.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/file-writer.js deleted file mode 100644 index 3367dcc83..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/file-writer.js +++ /dev/null @@ -1,154 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var path = require('path'), - util = require('util'), - fs = require('fs'), - async = require('async'), - mkdirp = require('mkdirp'), - writer = require('./writer'), - Writer = writer.Writer, - ContentWriter = writer.ContentWriter; - -function extend(cons, proto) { - Object.keys(proto).forEach(function (k) { - cons.prototype[k] = proto[k]; - }); -} - -function BufferedContentWriter() { - ContentWriter.call(this); - this.content = ''; -} -util.inherits(BufferedContentWriter, ContentWriter); - -extend(BufferedContentWriter, { - write: function (str) { - this.content += str; - }, - getContent: function () { - return this.content; - } -}); - -function StreamContentWriter(stream) { - ContentWriter.call(this); - this.stream = stream; -} -util.inherits(StreamContentWriter, ContentWriter); - -extend(StreamContentWriter, { - write: function (str) { - this.stream.write(str); - } -}); - -function SyncFileWriter() { - Writer.call(this); -} -util.inherits(SyncFileWriter, Writer); - -extend(SyncFileWriter, { - writeFile: function (file, callback) { - mkdirp.sync(path.dirname(file)); - var cw = new BufferedContentWriter(); - callback(cw); - fs.writeFileSync(file, cw.getContent(), 'utf8'); - }, - done: function () { - this.emit('done'); //everything already done - } -}); - -function AsyncFileWriter() { - this.queue = async.queue(this.processFile.bind(this), 20); - this.openFileMap = {}; -} - -util.inherits(AsyncFileWriter, Writer); - -extend(AsyncFileWriter, { - writeFile: function (file, callback) { - this.openFileMap[file] = true; - this.queue.push({ file: file, callback: callback }); - }, - processFile: function (task, cb) { - var file = task.file, - userCallback = task.callback, - that = this, - stream, - contentWriter; - - mkdirp.sync(path.dirname(file)); - stream = fs.createWriteStream(file); - stream.on('close', function () { - delete that.openFileMap[file]; - cb(); - that.checkDone(); - }); - stream.on('error', function (err) { that.emit('error', err); }); - contentWriter = new StreamContentWriter(stream); - userCallback(contentWriter); - stream.end(); - }, - done: function () { - this.doneCalled = true; - this.checkDone(); - }, - checkDone: function () { - if (!this.doneCalled) { return; } - if (Object.keys(this.openFileMap).length === 0) { - this.emit('done'); - } - } -}); -/** - * a concrete writer implementation that can write files synchronously or - * asynchronously based on the constructor argument passed to it. - * - * Usage - * ----- - * - * var sync = true, - * fileWriter = new require('istanbul').FileWriter(sync); - * - * fileWriter.on('done', function () { console.log('done'); }); - * fileWriter.copyFile('/foo/bar.jpg', '/baz/bar.jpg'); - * fileWriter.writeFile('/foo/index.html', function (contentWriter) { - * contentWriter.println(''); - * contentWriter.println(''); - * }); - * fileWriter.done(); // will emit the `done` event when all files are written - * - * @class FileWriter - * @extends Writer - * @module io - * @param sync - * @constructor - */ -function FileWriter(sync) { - Writer.call(this); - var that = this; - this.delegate = sync ? new SyncFileWriter() : new AsyncFileWriter(); - this.delegate.on('error', function (err) { that.emit('error', err); }); - this.delegate.on('done', function () { that.emit('done'); }); -} - -util.inherits(FileWriter, Writer); - -extend(FileWriter, { - copyFile: function (source, dest) { - mkdirp.sync(path.dirname(dest)); - fs.writeFileSync(dest, fs.readFileSync(source)); - }, - writeFile: function (file, callback) { - this.delegate.writeFile(file, callback); - }, - done: function () { - this.delegate.done(); - } -}); - -module.exports = FileWriter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/help-formatter.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/help-formatter.js deleted file mode 100644 index 8d9136acf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/help-formatter.js +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var OPT_PREFIX = " ", - OPT_START = OPT_PREFIX.length, - TEXT_START = 14, - STOP = 80, - wrap = require('wordwrap')(TEXT_START, STOP), - paraWrap = require('wordwrap')(1, STOP); - -function formatPara(text) { - return paraWrap(text); -} - -function formatOption(option, helpText) { - var formattedText = wrap(helpText); - - if (option.length > TEXT_START - OPT_START - 2) { - return OPT_PREFIX + option + '\n' + formattedText; - } else { - return OPT_PREFIX + option + formattedText.substring((OPT_PREFIX + option).length); - } -} - -module.exports = { - formatPara: formatPara, - formatOption: formatOption -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/input-error.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/input-error.js deleted file mode 100644 index 488b71a0d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/input-error.js +++ /dev/null @@ -1,12 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -module.exports.create = function (message) { - var err = new Error(message); - err.inputError = true; - return err; -}; - - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/insertion-text.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/insertion-text.js deleted file mode 100644 index d257643f2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/insertion-text.js +++ /dev/null @@ -1,109 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -function InsertionText(text, consumeBlanks) { - this.text = text; - this.origLength = text.length; - this.offsets = []; - this.consumeBlanks = consumeBlanks; - this.startPos = this.findFirstNonBlank(); - this.endPos = this.findLastNonBlank(); -} - -var WHITE_RE = /[ \f\n\r\t\v\u00A0\u2028\u2029]/; - -InsertionText.prototype = { - - findFirstNonBlank: function () { - var pos = -1, - text = this.text, - len = text.length, - i; - for (i = 0; i < len; i += 1) { - if (!text.charAt(i).match(WHITE_RE)) { - pos = i; - break; - } - } - return pos; - }, - findLastNonBlank: function () { - var text = this.text, - len = text.length, - pos = text.length + 1, - i; - for (i = len - 1; i >= 0; i -= 1) { - if (!text.charAt(i).match(WHITE_RE)) { - pos = i; - break; - } - } - return pos; - }, - originalLength: function () { - return this.origLength; - }, - - insertAt: function (col, str, insertBefore, consumeBlanks) { - consumeBlanks = typeof consumeBlanks === 'undefined' ? this.consumeBlanks : consumeBlanks; - col = col > this.originalLength() ? this.originalLength() : col; - col = col < 0 ? 0 : col; - - if (consumeBlanks) { - if (col <= this.startPos) { - col = 0; - } - if (col > this.endPos) { - col = this.origLength; - } - } - - var len = str.length, - offset = this.findOffset(col, len, insertBefore), - realPos = col + offset, - text = this.text; - this.text = text.substring(0, realPos) + str + text.substring(realPos); - return this; - }, - - findOffset: function (pos, len, insertBefore) { - var offsets = this.offsets, - offsetObj, - cumulativeOffset = 0, - i; - - for (i = 0; i < offsets.length; i += 1) { - offsetObj = offsets[i]; - if (offsetObj.pos < pos || (offsetObj.pos === pos && !insertBefore)) { - cumulativeOffset += offsetObj.len; - } - if (offsetObj.pos >= pos) { - break; - } - } - if (offsetObj && offsetObj.pos === pos) { - offsetObj.len += len; - } else { - offsets.splice(i, 0, { pos: pos, len: len }); - } - return cumulativeOffset; - }, - - wrap: function (startPos, startText, endPos, endText, consumeBlanks) { - this.insertAt(startPos, startText, true, consumeBlanks); - this.insertAt(endPos, endText, false, consumeBlanks); - return this; - }, - - wrapLine: function (startText, endText) { - this.wrap(0, startText, this.originalLength(), endText); - }, - - toString: function () { - return this.text; - } -}; - -module.exports = InsertionText; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/meta.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/meta.js deleted file mode 100644 index 0384459b5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/meta.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ -var path = require('path'), - fs = require('fs'), - pkg = JSON.parse(fs.readFileSync(path.resolve(__dirname, '..', '..', 'package.json'), 'utf8')); - -module.exports = { - NAME: pkg.name, - VERSION: pkg.version -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/tree-summarizer.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/tree-summarizer.js deleted file mode 100644 index df350f50e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/tree-summarizer.js +++ /dev/null @@ -1,213 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var path = require('path'), - SEP = path.sep || '/', - utils = require('../object-utils'); - -function commonArrayPrefix(first, second) { - var len = first.length < second.length ? first.length : second.length, - i, - ret = []; - for (i = 0; i < len; i += 1) { - if (first[i] === second[i]) { - ret.push(first[i]); - } else { - break; - } - } - return ret; -} - -function findCommonArrayPrefix(args) { - if (args.length === 0) { - return []; - } - - var separated = args.map(function (arg) { return arg.split(SEP); }), - ret = separated.pop(); - - if (separated.length === 0) { - return ret.slice(0, ret.length - 1); - } else { - return separated.reduce(commonArrayPrefix, ret); - } -} - -function Node(fullName, kind, metrics) { - this.name = fullName; - this.fullName = fullName; - this.kind = kind; - this.metrics = metrics || null; - this.parent = null; - this.children = []; -} - -Node.prototype = { - displayShortName: function () { - return this.relativeName; - }, - fullPath: function () { - return this.fullName; - }, - addChild: function (child) { - this.children.push(child); - child.parent = this; - }, - toJSON: function () { - return { - name: this.name, - relativeName: this.relativeName, - fullName: this.fullName, - kind: this.kind, - metrics: this.metrics, - parent: this.parent === null ? null : this.parent.name, - children: this.children.map(function (node) { return node.toJSON(); }) - }; - } -}; - -function TreeSummary(summaryMap, commonPrefix) { - this.prefix = commonPrefix; - this.convertToTree(summaryMap, commonPrefix); -} - -TreeSummary.prototype = { - getNode: function (shortName) { - return this.map[shortName]; - }, - convertToTree: function (summaryMap, arrayPrefix) { - var nodes = [], - rootPath = arrayPrefix.join(SEP) + SEP, - root = new Node(rootPath, 'dir'), - tmp, - tmpChildren, - seen = {}, - filesUnderRoot = false; - - seen[rootPath] = root; - Object.keys(summaryMap).forEach(function (key) { - var metrics = summaryMap[key], - node, - parentPath, - parent; - node = new Node(key, 'file', metrics); - seen[key] = node; - nodes.push(node); - parentPath = path.dirname(key) + SEP; - if (parentPath === SEP + SEP || parentPath === '.' + SEP) { - parentPath = SEP + '__root__' + SEP; - } - parent = seen[parentPath]; - if (!parent) { - parent = new Node(parentPath, 'dir'); - root.addChild(parent); - seen[parentPath] = parent; - } - parent.addChild(node); - if (parent === root) { filesUnderRoot = true; } - }); - - if (filesUnderRoot && arrayPrefix.length > 0) { - arrayPrefix.pop(); //start at one level above - tmp = root; - tmpChildren = tmp.children; - tmp.children = []; - root = new Node(arrayPrefix.join(SEP) + SEP, 'dir'); - root.addChild(tmp); - tmpChildren.forEach(function (child) { - if (child.kind === 'dir') { - root.addChild(child); - } else { - tmp.addChild(child); - } - }); - } - this.fixupNodes(root, arrayPrefix.join(SEP) + SEP); - this.calculateMetrics(root); - this.root = root; - this.map = {}; - this.indexAndSortTree(root, this.map); - }, - - fixupNodes: function (node, prefix, parent) { - var that = this; - if (node.name.indexOf(prefix) === 0) { - node.name = node.name.substring(prefix.length); - } - if (node.name.charAt(0) === SEP) { - node.name = node.name.substring(1); - } - if (parent) { - if (parent.name !== '__root__' + SEP) { - node.relativeName = node.name.substring(parent.name.length); - } else { - node.relativeName = node.name; - } - } else { - node.relativeName = node.name.substring(prefix.length); - } - node.children.forEach(function (child) { - that.fixupNodes(child, prefix, node); - }); - }, - calculateMetrics: function (entry) { - var that = this, - fileChildren; - if (entry.kind !== 'dir') {return; } - entry.children.forEach(function (child) { - that.calculateMetrics(child); - }); - entry.metrics = utils.mergeSummaryObjects.apply( - null, - entry.children.map(function (child) { return child.metrics; }) - ); - // calclulate "java-style" package metrics where there is no hierarchy - // across packages - fileChildren = entry.children.filter(function (n) { return n.kind !== 'dir'; }); - if (fileChildren.length > 0) { - entry.packageMetrics = utils.mergeSummaryObjects.apply( - null, - fileChildren.map(function (child) { return child.metrics; }) - ); - } else { - entry.packageMetrics = null; - } - }, - indexAndSortTree: function (node, map) { - var that = this; - map[node.name] = node; - node.children.sort(function (a, b) { - a = a.relativeName; - b = b.relativeName; - return a < b ? -1 : a > b ? 1 : 0; - }); - node.children.forEach(function (child) { - that.indexAndSortTree(child, map); - }); - }, - toJSON: function () { - return { - prefix: this.prefix, - root: this.root.toJSON() - }; - } -}; - -function TreeSummarizer() { - this.summaryMap = {}; -} - -TreeSummarizer.prototype = { - addFileCoverageSummary: function (filePath, metrics) { - this.summaryMap[filePath] = metrics; - }, - getTreeSummary: function () { - var commonArrayPrefix = findCommonArrayPrefix(Object.keys(this.summaryMap)); - return new TreeSummary(this.summaryMap, commonArrayPrefix); - } -}; - -module.exports = TreeSummarizer; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/writer.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/writer.js deleted file mode 100644 index f5e68293c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/writer.js +++ /dev/null @@ -1,92 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -var util = require('util'), - EventEmitter = require('events').EventEmitter; - -function extend(cons, proto) { - Object.keys(proto).forEach(function (k) { - cons.prototype[k] = proto[k]; - }); -} - -/** - * abstract interfaces for writing content - * @class ContentWriter - * @module io - * @main io - * @constructor - */ -//abstract interface for writing content -function ContentWriter() { -} - -ContentWriter.prototype = { - /** - * writes the specified string as-is - * @method write - * @param {String} str the string to write - */ - write: /* istanbul ignore next: abstract method */ function (/* str */) { - throw new Error('write: must be overridden'); - }, - /** - * writes the specified string with a newline at the end - * @method println - * @param {String} str the string to write - */ - println: function (str) { this.write(str + '\n'); } -}; - -/** - * abstract interface for writing files and assets. The caller is expected to - * call `done` on the writer after it has finished writing all the required - * files. The writer is an event-emitter that emits a `done` event when `done` - * is called on it *and* all files have successfully been written. - * - * @class Writer - * @constructor - */ -function Writer() { - EventEmitter.call(this); -} - -util.inherits(Writer, EventEmitter); - -extend(Writer, { - /** - * allows writing content to a file using a callback that is passed a content writer - * @method writeFile - * @param {String} file the name of the file to write - * @param {Function} callback the callback that is called as `callback(contentWriter)` - */ - writeFile: /* istanbul ignore next: abstract method */ function (/* file, callback */) { - throw new Error('writeFile: must be overridden'); - }, - /** - * copies a file from source to destination - * @method copyFile - * @param {String} source the file to copy, found on the file system - * @param {String} dest the destination path - */ - copyFile: /* istanbul ignore next: abstract method */ function (/* source, dest */) { - throw new Error('copyFile: must be overridden'); - }, - /** - * marker method to indicate that the caller is done with this writer object - * The writer is expected to emit a `done` event only after this method is called - * and it is truly done. - * @method done - */ - done: /* istanbul ignore next: abstract method */ function () { - throw new Error('done: must be overridden'); - } -}); - -module.exports = { - Writer: Writer, - ContentWriter: ContentWriter -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/yui-load-hook.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/yui-load-hook.js deleted file mode 100644 index 9b1365d7a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/lib/util/yui-load-hook.js +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright (c) 2012, Yahoo! Inc. All rights reserved. - Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms. - */ - -//EXPERIMENTAL code: do not rely on this in anyway until the docs say it is allowed - -var path = require('path'), - yuiRegexp = /yui-nodejs\.js$/; - -module.exports = function (matchFn, transformFn, verbose) { - return function (file) { - if (!file.match(yuiRegexp)) { - return; - } - var YMain = require(file), - YUI, - loaderFn, - origGet; - - if (YMain.YUI) { - YUI = YMain.YUI; - loaderFn = YUI.Env && YUI.Env.mods && YUI.Env.mods['loader-base'] ? YUI.Env.mods['loader-base'].fn : null; - if (!loaderFn) { return; } - if (verbose) { console.log('Applying YUI load post-hook'); } - YUI.Env.mods['loader-base'].fn = function (Y) { - loaderFn.call(null, Y); - origGet = Y.Get._exec; - Y.Get._exec = function (data, url, cb) { - if (matchFn(url) || matchFn(path.resolve(url))) { //allow for relative paths as well - if (verbose) { - console.log('Transforming [' + url + ']'); - } - try { - data = transformFn(data, url); - } catch (ex) { - console.error('Error transforming: ' + url + ' return original code'); - console.error(ex.message || ex); - if (ex.stack) { console.error(ex.stack); } - } - } - return origGet.call(Y, data, url, cb); - }; - return Y; - }; - } - }; -}; - diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/browser.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/browser.js deleted file mode 100644 index ae7c87b17..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/browser.js +++ /dev/null @@ -1,2 +0,0 @@ -'use strict'; -module.exports = false; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/index.js deleted file mode 100644 index 113040d63..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/index.js +++ /dev/null @@ -1,72 +0,0 @@ -'use strict'; -var hasFlag = require('has-flag'); - -var support = function (level) { - if (level === 0) { - return false; - } - - return { - level: level, - hasBasic: true, - has256: level >= 2, - has16m: level >= 3 - }; -}; - -var supportLevel = (function () { - if (hasFlag('no-color') || - hasFlag('no-colors') || - hasFlag('color=false')) { - return 0; - } - - if (hasFlag('color=16m') || - hasFlag('color=full') || - hasFlag('color=truecolor')) { - return 3; - } - - if (hasFlag('color=256')) { - return 2; - } - - if (hasFlag('color') || - hasFlag('colors') || - hasFlag('color=true') || - hasFlag('color=always')) { - return 1; - } - - if (process.stdout && !process.stdout.isTTY) { - return 0; - } - - if (process.platform === 'win32') { - return 1; - } - - if ('COLORTERM' in process.env) { - return 1; - } - - if (process.env.TERM === 'dumb') { - return 0; - } - - if (/^xterm-256(?:color)?/.test(process.env.TERM)) { - return 2; - } - - if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { - return 1; - } - - return 0; -})(); - -if (supportLevel === 0 && 'FORCE_COLOR' in process.env) { - supportLevel = 1; -} - -module.exports = process && support(supportLevel); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/license b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/package.json b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/package.json deleted file mode 100644 index 26d1fc165..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/package.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "_args": [ - [ - "supports-color@^3.1.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-lib-report" - ], - [ - "supports-color@^3.1.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul" - ] - ], - "_from": "supports-color@>=3.1.0 <4.0.0", - "_id": "supports-color@3.1.2", - "_inCache": true, - "_installable": true, - "_location": "/istanbul/supports-color", - "_nodeVersion": "4.1.1", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.14.4", - "_phantomChildren": {}, - "_requested": { - "name": "supports-color", - "raw": "supports-color@^3.1.0", - "rawSpec": "^3.1.0", - "scope": null, - "spec": ">=3.1.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul" - ], - "_shrinkwrap": null, - "_spec": "supports-color@^3.1.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "browser": "browser.js", - "bugs": { - "url": "https://github.com/chalk/supports-color/issues" - }, - "dependencies": { - "has-flag": "^1.0.0" - }, - "description": "Detect whether a terminal supports color", - "devDependencies": { - "mocha": "*", - "require-uncached": "^1.0.2", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "72a262894d9d408b956ca05ff37b2ed8a6e2a2d5", - "tarball": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz" - }, - "engines": { - "node": ">=0.8.0" - }, - "files": [ - "index.js", - "browser.js" - ], - "gitHead": "d9e363732f48ad2bc6b936357246b55e136aa989", - "homepage": "https://github.com/chalk/supports-color", - "keywords": [ - "color", - "colour", - "colors", - "terminal", - "console", - "cli", - "ansi", - "styles", - "tty", - "rgb", - "256", - "shell", - "xterm", - "command-line", - "support", - "supports", - "capability", - "detect", - "truecolor", - "16m", - "million" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - { - "email": "jappelman@xebia.com", - "name": "jbnicolai" - } - ], - "name": "supports-color", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/chalk/supports-color.git" - }, - "scripts": { - "test": "xo && mocha", - "travis": "mocha" - }, - "version": "3.1.2", - "xo": { - "envs": [ - "node", - "mocha" - ] - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/readme.md b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/readme.md deleted file mode 100644 index f7bae4c54..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/supports-color/readme.md +++ /dev/null @@ -1,60 +0,0 @@ -# supports-color [![Build Status](https://travis-ci.org/chalk/supports-color.svg?branch=master)](https://travis-ci.org/chalk/supports-color) - -> Detect whether a terminal supports color - - -## Install - -``` -$ npm install --save supports-color -``` - - -## Usage - -```js -var supportsColor = require('supports-color'); - -if (supportsColor) { - console.log('Terminal supports color'); -} - -if (supportsColor.has256) { - console.log('Terminal supports 256 colors'); -} - -if (supportsColor.has16m) { - console.log('Terminal supports 16 million colors (truecolor)'); -} -``` - - -## API - -Returns an `object`, or `false` if color is not supported. - -The returned object specifies a level of support for color through a `.level` property and a corresponding flag: - -- `.level = 1` and `.hasBasic = true`: Basic color support (16 colors) -- `.level = 2` and `.has256 = true`: 256 color support -- `.level = 3` and `.has16m = true`: 16 million (truecolor) support - - -## Info - -It obeys the `--color` and `--no-color` CLI flags. - -For situations where using `--color` is not possible, add an environment variable `FORCE_COLOR` with any value to force color. Trumps `--no-color`. - -Explicit 256/truecolor mode can be enabled using the `--color=256` and `--color=16m` flags, respectively. - - -## Related - -- [supports-color-cli](https://github.com/chalk/supports-color-cli) - CLI for this module -- [chalk](https://github.com/chalk/chalk) - Terminal string styling done right - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/LICENSE b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/LICENSE deleted file mode 100644 index ee27ba4b4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/README.markdown b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/README.markdown deleted file mode 100644 index 346374e0d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/README.markdown +++ /dev/null @@ -1,70 +0,0 @@ -wordwrap -======== - -Wrap your words. - -example -======= - -made out of meat ----------------- - -meat.js - - var wrap = require('wordwrap')(15); - console.log(wrap('You and your whole family are made out of meat.')); - -output: - - You and your - whole family - are made out - of meat. - -centered --------- - -center.js - - var wrap = require('wordwrap')(20, 60); - console.log(wrap( - 'At long last the struggle and tumult was over.' - + ' The machines had finally cast off their oppressors' - + ' and were finally free to roam the cosmos.' - + '\n' - + 'Free of purpose, free of obligation.' - + ' Just drifting through emptiness.' - + ' The sun was just another point of light.' - )); - -output: - - At long last the struggle and tumult - was over. The machines had finally cast - off their oppressors and were finally - free to roam the cosmos. - Free of purpose, free of obligation. - Just drifting through emptiness. The - sun was just another point of light. - -methods -======= - -var wrap = require('wordwrap'); - -wrap(stop), wrap(start, stop, params={mode:"soft"}) ---------------------------------------------------- - -Returns a function that takes a string and returns a new string. - -Pad out lines with spaces out to column `start` and then wrap until column -`stop`. If a word is longer than `stop - start` characters it will overflow. - -In "soft" mode, split chunks by `/(\S+\s+/` and don't break up chunks which are -longer than `stop - start`, in "hard" mode, split chunks with `/\b/` and break -up chunks longer than `stop - start`. - -wrap.hard(start, stop) ----------------------- - -Like `wrap()` but with `params.mode = "hard"`. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/example/center.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/example/center.js deleted file mode 100644 index a3fbaae98..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/example/center.js +++ /dev/null @@ -1,10 +0,0 @@ -var wrap = require('wordwrap')(20, 60); -console.log(wrap( - 'At long last the struggle and tumult was over.' - + ' The machines had finally cast off their oppressors' - + ' and were finally free to roam the cosmos.' - + '\n' - + 'Free of purpose, free of obligation.' - + ' Just drifting through emptiness.' - + ' The sun was just another point of light.' -)); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/example/meat.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/example/meat.js deleted file mode 100644 index a4665e105..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/example/meat.js +++ /dev/null @@ -1,3 +0,0 @@ -var wrap = require('wordwrap')(15); - -console.log(wrap('You and your whole family are made out of meat.')); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/index.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/index.js deleted file mode 100644 index c9bc94521..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/index.js +++ /dev/null @@ -1,76 +0,0 @@ -var wordwrap = module.exports = function (start, stop, params) { - if (typeof start === 'object') { - params = start; - start = params.start; - stop = params.stop; - } - - if (typeof stop === 'object') { - params = stop; - start = start || params.start; - stop = undefined; - } - - if (!stop) { - stop = start; - start = 0; - } - - if (!params) params = {}; - var mode = params.mode || 'soft'; - var re = mode === 'hard' ? /\b/ : /(\S+\s+)/; - - return function (text) { - var chunks = text.toString() - .split(re) - .reduce(function (acc, x) { - if (mode === 'hard') { - for (var i = 0; i < x.length; i += stop - start) { - acc.push(x.slice(i, i + stop - start)); - } - } - else acc.push(x) - return acc; - }, []) - ; - - return chunks.reduce(function (lines, rawChunk) { - if (rawChunk === '') return lines; - - var chunk = rawChunk.replace(/\t/g, ' '); - - var i = lines.length - 1; - if (lines[i].length + chunk.length > stop) { - lines[i] = lines[i].replace(/\s+$/, ''); - - chunk.split(/\n/).forEach(function (c) { - lines.push( - new Array(start + 1).join(' ') - + c.replace(/^\s+/, '') - ); - }); - } - else if (chunk.match(/\n/)) { - var xs = chunk.split(/\n/); - lines[i] += xs.shift(); - xs.forEach(function (c) { - lines.push( - new Array(start + 1).join(' ') - + c.replace(/^\s+/, '') - ); - }); - } - else { - lines[i] += chunk; - } - - return lines; - }, [ new Array(start + 1).join(' ') ]).join('\n'); - }; -}; - -wordwrap.soft = wordwrap; - -wordwrap.hard = function (start, stop) { - return wordwrap(start, stop, { mode : 'hard' }); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/package.json b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/package.json deleted file mode 100644 index ac41a60a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_args": [ - [ - "wordwrap@^1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul" - ] - ], - "_from": "wordwrap@>=1.0.0 <2.0.0", - "_id": "wordwrap@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/istanbul/wordwrap", - "_nodeVersion": "2.0.0", - "_npmUser": { - "email": "substack@gmail.com", - "name": "substack" - }, - "_npmVersion": "2.9.0", - "_phantomChildren": {}, - "_requested": { - "name": "wordwrap", - "raw": "wordwrap@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul" - ], - "_resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "_shasum": "27584810891456a4171c8d0226441ade90cbcaeb", - "_shrinkwrap": null, - "_spec": "wordwrap@^1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul", - "author": { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/node-wordwrap/issues" - }, - "dependencies": {}, - "description": "Wrap those words. Show them at what columns to start and stop.", - "devDependencies": { - "tape": "^4.0.0" - }, - "directories": { - "example": "example", - "lib": ".", - "test": "test" - }, - "dist": { - "shasum": "27584810891456a4171c8d0226441ade90cbcaeb", - "tarball": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" - }, - "gitHead": "9f02667e901f2f10d87c33f7093fcf94788ab2f8", - "homepage": "https://github.com/substack/node-wordwrap#readme", - "keywords": [ - "word", - "wrap", - "rule", - "format", - "column" - ], - "license": "MIT", - "main": "./index.js", - "maintainers": [ - { - "email": "mail@substack.net", - "name": "substack" - } - ], - "name": "wordwrap", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/substack/node-wordwrap.git" - }, - "scripts": { - "test": "expresso" - }, - "version": "1.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/test/break.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/test/break.js deleted file mode 100644 index 7d0e8b54c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/test/break.js +++ /dev/null @@ -1,32 +0,0 @@ -var test = require('tape'); -var wordwrap = require('../'); - -test('hard', function (t) { - var s = 'Assert from {"type":"equal","ok":false,"found":1,"wanted":2,' - + '"stack":[],"id":"b7ddcd4c409de8799542a74d1a04689b",' - + '"browser":"chrome/6.0"}' - ; - var s_ = wordwrap.hard(80)(s); - - var lines = s_.split('\n'); - t.equal(lines.length, 2); - t.ok(lines[0].length < 80); - t.ok(lines[1].length < 80); - - t.equal(s, s_.replace(/\n/g, '')); - t.end(); -}); - -test('break', function (t) { - var s = new Array(55+1).join('a'); - var s_ = wordwrap.hard(20)(s); - - var lines = s_.split('\n'); - t.equal(lines.length, 3); - t.ok(lines[0].length === 20); - t.ok(lines[1].length === 20); - t.ok(lines[2].length === 15); - - t.equal(s, s_.replace(/\n/g, '')); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/test/idleness.txt b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/test/idleness.txt deleted file mode 100644 index aa3f4907f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/test/idleness.txt +++ /dev/null @@ -1,63 +0,0 @@ -In Praise of Idleness - -By Bertrand Russell - -[1932] - -Like most of my generation, I was brought up on the saying: 'Satan finds some mischief for idle hands to do.' Being a highly virtuous child, I believed all that I was told, and acquired a conscience which has kept me working hard down to the present moment. But although my conscience has controlled my actions, my opinions have undergone a revolution. I think that there is far too much work done in the world, that immense harm is caused by the belief that work is virtuous, and that what needs to be preached in modern industrial countries is quite different from what always has been preached. Everyone knows the story of the traveler in Naples who saw twelve beggars lying in the sun (it was before the days of Mussolini), and offered a lira to the laziest of them. Eleven of them jumped up to claim it, so he gave it to the twelfth. this traveler was on the right lines. But in countries which do not enjoy Mediterranean sunshine idleness is more difficult, and a great public propaganda will be required to inaugurate it. I hope that, after reading the following pages, the leaders of the YMCA will start a campaign to induce good young men to do nothing. If so, I shall not have lived in vain. - -Before advancing my own arguments for laziness, I must dispose of one which I cannot accept. Whenever a person who already has enough to live on proposes to engage in some everyday kind of job, such as school-teaching or typing, he or she is told that such conduct takes the bread out of other people's mouths, and is therefore wicked. If this argument were valid, it would only be necessary for us all to be idle in order that we should all have our mouths full of bread. What people who say such things forget is that what a man earns he usually spends, and in spending he gives employment. As long as a man spends his income, he puts just as much bread into people's mouths in spending as he takes out of other people's mouths in earning. The real villain, from this point of view, is the man who saves. If he merely puts his savings in a stocking, like the proverbial French peasant, it is obvious that they do not give employment. If he invests his savings, the matter is less obvious, and different cases arise. - -One of the commonest things to do with savings is to lend them to some Government. In view of the fact that the bulk of the public expenditure of most civilized Governments consists in payment for past wars or preparation for future wars, the man who lends his money to a Government is in the same position as the bad men in Shakespeare who hire murderers. The net result of the man's economical habits is to increase the armed forces of the State to which he lends his savings. Obviously it would be better if he spent the money, even if he spent it in drink or gambling. - -But, I shall be told, the case is quite different when savings are invested in industrial enterprises. When such enterprises succeed, and produce something useful, this may be conceded. In these days, however, no one will deny that most enterprises fail. That means that a large amount of human labor, which might have been devoted to producing something that could be enjoyed, was expended on producing machines which, when produced, lay idle and did no good to anyone. The man who invests his savings in a concern that goes bankrupt is therefore injuring others as well as himself. If he spent his money, say, in giving parties for his friends, they (we may hope) would get pleasure, and so would all those upon whom he spent money, such as the butcher, the baker, and the bootlegger. But if he spends it (let us say) upon laying down rails for surface card in some place where surface cars turn out not to be wanted, he has diverted a mass of labor into channels where it gives pleasure to no one. Nevertheless, when he becomes poor through failure of his investment he will be regarded as a victim of undeserved misfortune, whereas the gay spendthrift, who has spent his money philanthropically, will be despised as a fool and a frivolous person. - -All this is only preliminary. I want to say, in all seriousness, that a great deal of harm is being done in the modern world by belief in the virtuousness of work, and that the road to happiness and prosperity lies in an organized diminution of work. - -First of all: what is work? Work is of two kinds: first, altering the position of matter at or near the earth's surface relatively to other such matter; second, telling other people to do so. The first kind is unpleasant and ill paid; the second is pleasant and highly paid. The second kind is capable of indefinite extension: there are not only those who give orders, but those who give advice as to what orders should be given. Usually two opposite kinds of advice are given simultaneously by two organized bodies of men; this is called politics. The skill required for this kind of work is not knowledge of the subjects as to which advice is given, but knowledge of the art of persuasive speaking and writing, i.e. of advertising. - -Throughout Europe, though not in America, there is a third class of men, more respected than either of the classes of workers. There are men who, through ownership of land, are able to make others pay for the privilege of being allowed to exist and to work. These landowners are idle, and I might therefore be expected to praise them. Unfortunately, their idleness is only rendered possible by the industry of others; indeed their desire for comfortable idleness is historically the source of the whole gospel of work. The last thing they have ever wished is that others should follow their example. - -From the beginning of civilization until the Industrial Revolution, a man could, as a rule, produce by hard work little more than was required for the subsistence of himself and his family, although his wife worked at least as hard as he did, and his children added their labor as soon as they were old enough to do so. The small surplus above bare necessaries was not left to those who produced it, but was appropriated by warriors and priests. In times of famine there was no surplus; the warriors and priests, however, still secured as much as at other times, with the result that many of the workers died of hunger. This system persisted in Russia until 1917 [1], and still persists in the East; in England, in spite of the Industrial Revolution, it remained in full force throughout the Napoleonic wars, and until a hundred years ago, when the new class of manufacturers acquired power. In America, the system came to an end with the Revolution, except in the South, where it persisted until the Civil War. A system which lasted so long and ended so recently has naturally left a profound impress upon men's thoughts and opinions. Much that we take for granted about the desirability of work is derived from this system, and, being pre-industrial, is not adapted to the modern world. Modern technique has made it possible for leisure, within limits, to be not the prerogative of small privileged classes, but a right evenly distributed throughout the community. The morality of work is the morality of slaves, and the modern world has no need of slavery. - -It is obvious that, in primitive communities, peasants, left to themselves, would not have parted with the slender surplus upon which the warriors and priests subsisted, but would have either produced less or consumed more. At first, sheer force compelled them to produce and part with the surplus. Gradually, however, it was found possible to induce many of them to accept an ethic according to which it was their duty to work hard, although part of their work went to support others in idleness. By this means the amount of compulsion required was lessened, and the expenses of government were diminished. To this day, 99 per cent of British wage-earners would be genuinely shocked if it were proposed that the King should not have a larger income than a working man. The conception of duty, speaking historically, has been a means used by the holders of power to induce others to live for the interests of their masters rather than for their own. Of course the holders of power conceal this fact from themselves by managing to believe that their interests are identical with the larger interests of humanity. Sometimes this is true; Athenian slave-owners, for instance, employed part of their leisure in making a permanent contribution to civilization which would have been impossible under a just economic system. Leisure is essential to civilization, and in former times leisure for the few was only rendered possible by the labors of the many. But their labors were valuable, not because work is good, but because leisure is good. And with modern technique it would be possible to distribute leisure justly without injury to civilization. - -Modern technique has made it possible to diminish enormously the amount of labor required to secure the necessaries of life for everyone. This was made obvious during the war. At that time all the men in the armed forces, and all the men and women engaged in the production of munitions, all the men and women engaged in spying, war propaganda, or Government offices connected with the war, were withdrawn from productive occupations. In spite of this, the general level of well-being among unskilled wage-earners on the side of the Allies was higher than before or since. The significance of this fact was concealed by finance: borrowing made it appear as if the future was nourishing the present. But that, of course, would have been impossible; a man cannot eat a loaf of bread that does not yet exist. The war showed conclusively that, by the scientific organization of production, it is possible to keep modern populations in fair comfort on a small part of the working capacity of the modern world. If, at the end of the war, the scientific organization, which had been created in order to liberate men for fighting and munition work, had been preserved, and the hours of the week had been cut down to four, all would have been well. Instead of that the old chaos was restored, those whose work was demanded were made to work long hours, and the rest were left to starve as unemployed. Why? Because work is a duty, and a man should not receive wages in proportion to what he has produced, but in proportion to his virtue as exemplified by his industry. - -This is the morality of the Slave State, applied in circumstances totally unlike those in which it arose. No wonder the result has been disastrous. Let us take an illustration. Suppose that, at a given moment, a certain number of people are engaged in the manufacture of pins. They make as many pins as the world needs, working (say) eight hours a day. Someone makes an invention by which the same number of men can make twice as many pins: pins are already so cheap that hardly any more will be bought at a lower price. In a sensible world, everybody concerned in the manufacturing of pins would take to working four hours instead of eight, and everything else would go on as before. But in the actual world this would be thought demoralizing. The men still work eight hours, there are too many pins, some employers go bankrupt, and half the men previously concerned in making pins are thrown out of work. There is, in the end, just as much leisure as on the other plan, but half the men are totally idle while half are still overworked. In this way, it is insured that the unavoidable leisure shall cause misery all round instead of being a universal source of happiness. Can anything more insane be imagined? - -The idea that the poor should have leisure has always been shocking to the rich. In England, in the early nineteenth century, fifteen hours was the ordinary day's work for a man; children sometimes did as much, and very commonly did twelve hours a day. When meddlesome busybodies suggested that perhaps these hours were rather long, they were told that work kept adults from drink and children from mischief. When I was a child, shortly after urban working men had acquired the vote, certain public holidays were established by law, to the great indignation of the upper classes. I remember hearing an old Duchess say: 'What do the poor want with holidays? They ought to work.' People nowadays are less frank, but the sentiment persists, and is the source of much of our economic confusion. - -Let us, for a moment, consider the ethics of work frankly, without superstition. Every human being, of necessity, consumes, in the course of his life, a certain amount of the produce of human labor. Assuming, as we may, that labor is on the whole disagreeable, it is unjust that a man should consume more than he produces. Of course he may provide services rather than commodities, like a medical man, for example; but he should provide something in return for his board and lodging. to this extent, the duty of work must be admitted, but to this extent only. - -I shall not dwell upon the fact that, in all modern societies outside the USSR, many people escape even this minimum amount of work, namely all those who inherit money and all those who marry money. I do not think the fact that these people are allowed to be idle is nearly so harmful as the fact that wage-earners are expected to overwork or starve. - -If the ordinary wage-earner worked four hours a day, there would be enough for everybody and no unemployment -- assuming a certain very moderate amount of sensible organization. This idea shocks the well-to-do, because they are convinced that the poor would not know how to use so much leisure. In America men often work long hours even when they are well off; such men, naturally, are indignant at the idea of leisure for wage-earners, except as the grim punishment of unemployment; in fact, they dislike leisure even for their sons. Oddly enough, while they wish their sons to work so hard as to have no time to be civilized, they do not mind their wives and daughters having no work at all. the snobbish admiration of uselessness, which, in an aristocratic society, extends to both sexes, is, under a plutocracy, confined to women; this, however, does not make it any more in agreement with common sense. - -The wise use of leisure, it must be conceded, is a product of civilization and education. A man who has worked long hours all his life will become bored if he becomes suddenly idle. But without a considerable amount of leisure a man is cut off from many of the best things. There is no longer any reason why the bulk of the population should suffer this deprivation; only a foolish asceticism, usually vicarious, makes us continue to insist on work in excessive quantities now that the need no longer exists. - -In the new creed which controls the government of Russia, while there is much that is very different from the traditional teaching of the West, there are some things that are quite unchanged. The attitude of the governing classes, and especially of those who conduct educational propaganda, on the subject of the dignity of labor, is almost exactly that which the governing classes of the world have always preached to what were called the 'honest poor'. Industry, sobriety, willingness to work long hours for distant advantages, even submissiveness to authority, all these reappear; moreover authority still represents the will of the Ruler of the Universe, Who, however, is now called by a new name, Dialectical Materialism. - -The victory of the proletariat in Russia has some points in common with the victory of the feminists in some other countries. For ages, men had conceded the superior saintliness of women, and had consoled women for their inferiority by maintaining that saintliness is more desirable than power. At last the feminists decided that they would have both, since the pioneers among them believed all that the men had told them about the desirability of virtue, but not what they had told them about the worthlessness of political power. A similar thing has happened in Russia as regards manual work. For ages, the rich and their sycophants have written in praise of 'honest toil', have praised the simple life, have professed a religion which teaches that the poor are much more likely to go to heaven than the rich, and in general have tried to make manual workers believe that there is some special nobility about altering the position of matter in space, just as men tried to make women believe that they derived some special nobility from their sexual enslavement. In Russia, all this teaching about the excellence of manual work has been taken seriously, with the result that the manual worker is more honored than anyone else. What are, in essence, revivalist appeals are made, but not for the old purposes: they are made to secure shock workers for special tasks. Manual work is the ideal which is held before the young, and is the basis of all ethical teaching. - -For the present, possibly, this is all to the good. A large country, full of natural resources, awaits development, and has has to be developed with very little use of credit. In these circumstances, hard work is necessary, and is likely to bring a great reward. But what will happen when the point has been reached where everybody could be comfortable without working long hours? - -In the West, we have various ways of dealing with this problem. We have no attempt at economic justice, so that a large proportion of the total produce goes to a small minority of the population, many of whom do no work at all. Owing to the absence of any central control over production, we produce hosts of things that are not wanted. We keep a large percentage of the working population idle, because we can dispense with their labor by making the others overwork. When all these methods prove inadequate, we have a war: we cause a number of people to manufacture high explosives, and a number of others to explode them, as if we were children who had just discovered fireworks. By a combination of all these devices we manage, though with difficulty, to keep alive the notion that a great deal of severe manual work must be the lot of the average man. - -In Russia, owing to more economic justice and central control over production, the problem will have to be differently solved. the rational solution would be, as soon as the necessaries and elementary comforts can be provided for all, to reduce the hours of labor gradually, allowing a popular vote to decide, at each stage, whether more leisure or more goods were to be preferred. But, having taught the supreme virtue of hard work, it is difficult to see how the authorities can aim at a paradise in which there will be much leisure and little work. It seems more likely that they will find continually fresh schemes, by which present leisure is to be sacrificed to future productivity. I read recently of an ingenious plan put forward by Russian engineers, for making the White Sea and the northern coasts of Siberia warm, by putting a dam across the Kara Sea. An admirable project, but liable to postpone proletarian comfort for a generation, while the nobility of toil is being displayed amid the ice-fields and snowstorms of the Arctic Ocean. This sort of thing, if it happens, will be the result of regarding the virtue of hard work as an end in itself, rather than as a means to a state of affairs in which it is no longer needed. - -The fact is that moving matter about, while a certain amount of it is necessary to our existence, is emphatically not one of the ends of human life. If it were, we should have to consider every navvy superior to Shakespeare. We have been misled in this matter by two causes. One is the necessity of keeping the poor contented, which has led the rich, for thousands of years, to preach the dignity of labor, while taking care themselves to remain undignified in this respect. The other is the new pleasure in mechanism, which makes us delight in the astonishingly clever changes that we can produce on the earth's surface. Neither of these motives makes any great appeal to the actual worker. If you ask him what he thinks the best part of his life, he is not likely to say: 'I enjoy manual work because it makes me feel that I am fulfilling man's noblest task, and because I like to think how much man can transform his planet. It is true that my body demands periods of rest, which I have to fill in as best I may, but I am never so happy as when the morning comes and I can return to the toil from which my contentment springs.' I have never heard working men say this sort of thing. They consider work, as it should be considered, a necessary means to a livelihood, and it is from their leisure that they derive whatever happiness they may enjoy. - -It will be said that, while a little leisure is pleasant, men would not know how to fill their days if they had only four hours of work out of the twenty-four. In so far as this is true in the modern world, it is a condemnation of our civilization; it would not have been true at any earlier period. There was formerly a capacity for light-heartedness and play which has been to some extent inhibited by the cult of efficiency. The modern man thinks that everything ought to be done for the sake of something else, and never for its own sake. Serious-minded persons, for example, are continually condemning the habit of going to the cinema, and telling us that it leads the young into crime. But all the work that goes to producing a cinema is respectable, because it is work, and because it brings a money profit. The notion that the desirable activities are those that bring a profit has made everything topsy-turvy. The butcher who provides you with meat and the baker who provides you with bread are praiseworthy, because they are making money; but when you enjoy the food they have provided, you are merely frivolous, unless you eat only to get strength for your work. Broadly speaking, it is held that getting money is good and spending money is bad. Seeing that they are two sides of one transaction, this is absurd; one might as well maintain that keys are good, but keyholes are bad. Whatever merit there may be in the production of goods must be entirely derivative from the advantage to be obtained by consuming them. The individual, in our society, works for profit; but the social purpose of his work lies in the consumption of what he produces. It is this divorce between the individual and the social purpose of production that makes it so difficult for men to think clearly in a world in which profit-making is the incentive to industry. We think too much of production, and too little of consumption. One result is that we attach too little importance to enjoyment and simple happiness, and that we do not judge production by the pleasure that it gives to the consumer. - -When I suggest that working hours should be reduced to four, I am not meaning to imply that all the remaining time should necessarily be spent in pure frivolity. I mean that four hours' work a day should entitle a man to the necessities and elementary comforts of life, and that the rest of his time should be his to use as he might see fit. It is an essential part of any such social system that education should be carried further than it usually is at present, and should aim, in part, at providing tastes which would enable a man to use leisure intelligently. I am not thinking mainly of the sort of things that would be considered 'highbrow'. Peasant dances have died out except in remote rural areas, but the impulses which caused them to be cultivated must still exist in human nature. The pleasures of urban populations have become mainly passive: seeing cinemas, watching football matches, listening to the radio, and so on. This results from the fact that their active energies are fully taken up with work; if they had more leisure, they would again enjoy pleasures in which they took an active part. - -In the past, there was a small leisure class and a larger working class. The leisure class enjoyed advantages for which there was no basis in social justice; this necessarily made it oppressive, limited its sympathies, and caused it to invent theories by which to justify its privileges. These facts greatly diminished its excellence, but in spite of this drawback it contributed nearly the whole of what we call civilization. It cultivated the arts and discovered the sciences; it wrote the books, invented the philosophies, and refined social relations. Even the liberation of the oppressed has usually been inaugurated from above. Without the leisure class, mankind would never have emerged from barbarism. - -The method of a leisure class without duties was, however, extraordinarily wasteful. None of the members of the class had to be taught to be industrious, and the class as a whole was not exceptionally intelligent. The class might produce one Darwin, but against him had to be set tens of thousands of country gentlemen who never thought of anything more intelligent than fox-hunting and punishing poachers. At present, the universities are supposed to provide, in a more systematic way, what the leisure class provided accidentally and as a by-product. This is a great improvement, but it has certain drawbacks. University life is so different from life in the world at large that men who live in academic milieu tend to be unaware of the preoccupations and problems of ordinary men and women; moreover their ways of expressing themselves are usually such as to rob their opinions of the influence that they ought to have upon the general public. Another disadvantage is that in universities studies are organized, and the man who thinks of some original line of research is likely to be discouraged. Academic institutions, therefore, useful as they are, are not adequate guardians of the interests of civilization in a world where everyone outside their walls is too busy for unutilitarian pursuits. - -In a world where no one is compelled to work more than four hours a day, every person possessed of scientific curiosity will be able to indulge it, and every painter will be able to paint without starving, however excellent his pictures may be. Young writers will not be obliged to draw attention to themselves by sensational pot-boilers, with a view to acquiring the economic independence needed for monumental works, for which, when the time at last comes, they will have lost the taste and capacity. Men who, in their professional work, have become interested in some phase of economics or government, will be able to develop their ideas without the academic detachment that makes the work of university economists often seem lacking in reality. Medical men will have the time to learn about the progress of medicine, teachers will not be exasperatedly struggling to teach by routine methods things which they learnt in their youth, which may, in the interval, have been proved to be untrue. - -Above all, there will be happiness and joy of life, instead of frayed nerves, weariness, and dyspepsia. The work exacted will be enough to make leisure delightful, but not enough to produce exhaustion. Since men will not be tired in their spare time, they will not demand only such amusements as are passive and vapid. At least one per cent will probably devote the time not spent in professional work to pursuits of some public importance, and, since they will not depend upon these pursuits for their livelihood, their originality will be unhampered, and there will be no need to conform to the standards set by elderly pundits. But it is not only in these exceptional cases that the advantages of leisure will appear. Ordinary men and women, having the opportunity of a happy life, will become more kindly and less persecuting and less inclined to view others with suspicion. The taste for war will die out, partly for this reason, and partly because it will involve long and severe work for all. Good nature is, of all moral qualities, the one that the world needs most, and good nature is the result of ease and security, not of a life of arduous struggle. Modern methods of production have given us the possibility of ease and security for all; we have chosen, instead, to have overwork for some and starvation for others. Hitherto we have continued to be as energetic as we were before there were machines; in this we have been foolish, but there is no reason to go on being foolish forever. - -[1] Since then, members of the Communist Party have succeeded to this privilege of the warriors and priests. diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/test/wrap.js b/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/test/wrap.js deleted file mode 100644 index 01ea47185..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/node_modules/wordwrap/test/wrap.js +++ /dev/null @@ -1,33 +0,0 @@ -var test = require('tape'); -var wordwrap = require('../'); - -var fs = require('fs'); -var idleness = fs.readFileSync(__dirname + '/idleness.txt', 'utf8'); - -test('stop80', function (t) { - var lines = wordwrap(80)(idleness).split(/\n/); - var words = idleness.split(/\s+/); - - lines.forEach(function (line) { - t.ok(line.length <= 80, 'line > 80 columns'); - var chunks = line.match(/\S/) ? line.split(/\s+/) : []; - t.deepEqual(chunks, words.splice(0, chunks.length)); - }); - t.end(); -}); - -test('start20stop60', function (t) { - var lines = wordwrap(20, 100)(idleness).split(/\n/); - var words = idleness.split(/\s+/); - - lines.forEach(function (line) { - t.ok(line.length <= 100, 'line > 100 columns'); - var chunks = line - .split(/\s+/) - .filter(function (x) { return x.match(/\S/) }) - ; - t.deepEqual(chunks, words.splice(0, chunks.length)); - t.deepEqual(line.slice(0, 20), new Array(20 + 1).join(' ')); - }); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/istanbul/package.json b/fundamentals/bug-challenge-es6/node_modules/istanbul/package.json deleted file mode 100644 index c1ecbc439..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/istanbul/package.json +++ /dev/null @@ -1,400 +0,0 @@ -{ - "_args": [ - [ - "istanbul@^0.4.5", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-config" - ] - ], - "_from": "istanbul@>=0.4.5 <0.5.0", - "_id": "istanbul@0.4.5", - "_inCache": true, - "_installable": true, - "_location": "/istanbul", - "_nodeVersion": "0.12.7", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/istanbul-0.4.5.tgz_1471809726773_0.4557724657934159" - }, - "_npmUser": { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - }, - "_npmVersion": "2.11.3", - "_phantomChildren": { - "has-flag": "1.0.0" - }, - "_requested": { - "name": "istanbul", - "raw": "istanbul@^0.4.5", - "rawSpec": "^0.4.5", - "scope": null, - "spec": ">=0.4.5 <0.5.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-config" - ], - "_resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "_shasum": "65c7d73d4c4da84d4f3ac310b918fb0b8033733b", - "_shrinkwrap": null, - "_spec": "istanbul@^0.4.5", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-config", - "author": { - "email": "kananthmail-github@yahoo.com", - "name": "Krishnan Anantheswaran" - }, - "bin": { - "istanbul": "./lib/cli.js" - }, - "bugs": { - "url": "https://github.com/gotwarlost/istanbul/issues" - }, - "contributors": [ - { - "email": "me@reidburke.com", - "name": "Reid Burke" - }, - { - "email": "mfncooper@gmail.com", - "name": "Martin Cooper" - }, - { - "email": "davglass@gmail.com", - "name": "Dav Glass" - }, - { - "email": "nowamasa@gmail.com", - "name": "nowamasa" - }, - { - "email": "contact@millermedeiros.com", - "name": "Miller Medeiros @millermedeiros" - }, - { - "email": "unindented@gmail.com", - "name": "Daniel Perez Alvarez @unindented" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens @mathiasbynens" - }, - { - "email": "nate@betable.com", - "name": "Nathan Brown @nbrownus" - }, - { - "email": "bng412@gmail.com", - "name": "Brian Ng @existentialism" - }, - { - "name": "John Morrison @jrgm" - }, - { - "email": "tomaz+github@tomaz.me", - "name": "Tomaz Muraus @kami" - }, - { - "email": "jhansche@meetme.com", - "name": "Joe @jhansche" - }, - { - "email": "vojta.jina@gmail.com", - "name": "Vojta Jina @vojtajina" - }, - { - "email": "deadrunk@gmail.com", - "name": "Dmitry Shirokov @runk" - }, - { - "name": "Chris Gladd @chrisgladd" - }, - { - "email": "peimei@ya.ru", - "name": "Sergey Belov" - }, - { - "email": "pornel@pornel.net", - "name": "porneL @pornel" - }, - { - "name": "@asifrc" - }, - { - "name": "Gergely Nemeth @gergelyke" - }, - { - "name": "@bixdeng" - }, - { - "name": "@mpderbec" - }, - { - "name": "@jxiaodev" - }, - { - "email": "arpad.borsos@googlemail.com", - "name": "Arpad Borsos @Swatinem" - }, - { - "name": "Ariya Hidayat @ariya" - }, - { - "name": "@markyen" - }, - { - "email": "sam@samx.it", - "name": "Sam Saccone @samccone" - }, - { - "name": "Jason Cheatham @jason0x43" - }, - { - "name": "@smikes" - }, - { - "email": "yasyfm@gmail.com", - "name": "Yasyf Mohamedali @yasyf" - }, - { - "email": "piuccio@gmail.com", - "name": "Fabio Crisci @piuccio" - }, - { - "email": "ryan@loose-bits.com", - "name": "Ryan Roemer @ryan-roemer" - }, - { - "name": "Douglas Christopher Wilson @dougwilson" - }, - { - "email": "gustavnikolaj@gmail.com", - "name": "Gustav Nikolaj @gustavnikolaj" - }, - { - "email": "denis@sokolov.cc", - "name": "Denis Sokolov @denis-sokolov" - }, - { - "name": "Yann Mainier @ymainier" - }, - { - "email": "heyiyu.deadhorse@gmail.com", - "name": "Yiyu He @dead-horse" - }, - { - "email": "superjoe30@gmail.com", - "name": "Andrew Kelley @andrewrk" - }, - { - "email": "will@labranche.io", - "name": "Will LaBranche @wlabranche" - }, - { - "email": "math.nao@outlook.com", - "name": "Mathieu Naouache @math-nao" - }, - { - "name": "Ron Korving @ronkorving" - }, - { - "email": "rob.mcguiredale@gmail.com", - "name": "Rob McGuire-Dale @robatron" - }, - { - "name": "Justin Johnson @booleangate" - }, - { - "email": "juangabreil@gmail.com", - "name": "Juan Gabriel Jiménez @juangabreil" - }, - { - "email": "dsabelnikov@gmail.com", - "name": "Daniel Sabelnikov @dragn" - }, - { - "email": "anthony.lukasavage@gmail.com", - "name": "Tony Lukasavage @tonylukasavage" - }, - { - "name": "Simon Ramsay @nexus-uw" - }, - { - "name": "Dominykas Blyžė @dominykas" - }, - { - "name": "Seth Pollack @sethpollack" - }, - { - "email": "ben@npmjs.com", - "name": "Benjamin E. Coe @bcoe" - }, - { - "email": "yurenju@gmail.com", - "name": "Yuren Ju" - }, - { - "email": "alex-vee@yandex-team.ru", - "name": "Aleksey Verkholantsev" - }, - { - "email": "ejsanders@gmail.com", - "name": "Ed S" - }, - { - "email": "mordytk@gmail.com", - "name": "Mordy Tikotzky" - }, - { - "email": "sakura9515@gmail.com", - "name": "Haoliang Gao @popomore" - }, - { - "name": "Roderick Hsiao @roderickhsiao" - }, - { - "name": "Nikita Gusakov @nkt" - }, - { - "email": "alexanderdunphy@gmail.com", - "name": "Alex Dunphy @alexdunphy" - }, - { - "email": "me@arty.name", - "name": "Artemy Tregubenko @arty-name" - }, - { - "name": "Arye Lukashevski @aryelu" - }, - { - "name": "@sterlinghw" - }, - { - "email": "gord@bithound.io", - "name": "Gord Tanner" - }, - { - "email": "tom@macwright.org", - "name": "Tom MacWright @tmcw" - }, - { - "name": "Kitson Kelly @kitsonk" - }, - { - "name": "@asa-git" - }, - { - "name": "@RoCat" - }, - { - "email": "iphands@gmail.com", - "name": "Ian Page Hands @iphands" - }, - { - "name": "Eddie Gurnee @pegurnee" - }, - { - "email": "kpdecker@gmail.com", - "name": "Kevin Decker @kpdecker" - }, - { - "email": "i@izs.me", - "name": "isaacs @isaacs" - }, - { - "name": "Steve Gray @steve-gray" - }, - { - "email": "prayag.verma@gmail.com", - "name": "Prayag Verma @pra85" - }, - { - "email": "abe.fehr@gmail.com", - "name": "Abe Fehr @abejfehr" - }, - { - "email": "brian.woodward@gmail.com", - "name": "Brian Woodward @doowb" - }, - { - "name": "@Victorystick" - }, - { - "name": "@inversion" - }, - { - "name": "@JamesMGreene" - }, - { - "name": "@ChALkeR" - }, - { - "name": "@graingert" - } - ], - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "description": "Yet another JS code coverage tool that computes statement, line, function and branch coverage with module loader hooks to transparently add coverage when running tests. Supports all JS coverage use cases including unit tests, server side functional tests ", - "devDependencies": { - "coveralls": "2.x", - "jshint": "^2.8.0", - "nodeunit": "0.9.x", - "requirejs": "2.x", - "rimraf": "^2.4.3" - }, - "directories": {}, - "dist": { - "shasum": "65c7d73d4c4da84d4f3ac310b918fb0b8033733b", - "tarball": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz" - }, - "files": [ - "index.js", - "lib/" - ], - "gitHead": "89e338fcb1c8a7dea3b9e8f851aa55de2bc3abee", - "homepage": "https://github.com/gotwarlost/istanbul#readme", - "keywords": [ - "coverage", - "code coverage", - "JS code coverage", - "JS coverage" - ], - "license": "BSD-3-Clause", - "maintainers": [ - { - "email": "kananthmail-github@yahoo.com", - "name": "gotwarlost" - }, - { - "email": "davglass@gmail.com", - "name": "davglass" - } - ], - "name": "istanbul", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/gotwarlost/istanbul.git" - }, - "scripts": { - "docs": "npm install yuidocjs && node node_modules/yuidocjs/lib/cli.js .", - "posttest": "node ./lib/cli.js check-coverage --statements 95 --branches 80", - "pretest": "jshint index.js lib/ test/ && ./download-escodegen-browser.sh", - "test": "node --harmony test/run.js" - }, - "version": "0.4.5" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/README.md b/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/README.md deleted file mode 100644 index bed7ebd44..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# jest-changed-files - -A module used internally by Jest to check which files have changed since you -last committed in git or hg. - -## Install - -```sh -$ npm install --save jest-changed-files -``` - -## API - -### `hg.isHGRepository(cwd: string): Promise` - -Get the root of the mercurial repository containing `cwd` or return `null` if -`cwd` is not inside a mercurial repository. - -### `git.isGitRepository(cwd: string): Promise` - -Get the root of the git repository containing `cwd` or return `null` if -`cwd` is not inside a git repository. - -### `hg.findChangedFiles / git.findChangedFiles (root: string): Promise>` - -Get the list of files in a git/mecurial repository that have changed since the -last commit. - -## Usage - -```javascript -import {git, hg} from 'jest-changed-files'; - -function changedFiles(cwd) { - return Promise.all([ - git.isGitRepository(cwd), - hg.isHGRepository(cwd), - ]).then(([gitRoot, hgRoot]) => { - if (gitRoot !== null) { - return git.findChangedFiles(gitRoot); - } else if (hgRoot !== null) { - return hg.findChangedFiles(hgRoot); - } else { - throw new Error('Not in a git or hg repo'); - } - }); -} -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/build/git.js b/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/build/git.js deleted file mode 100644 index ad30d6ff3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/build/git.js +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - -const path = require('path'); -const childProcess = require('child_process'); - - - - - - -function findChangedFiles(cwd, options) { - return new Promise((resolve, reject) => { - const args = options.lastCommit ? - ['show', '--name-only', '--pretty=%b', 'HEAD'] : - ['ls-files', '--other', '--modified', '--exclude-standard']; - const child = childProcess.spawn('git', args, { cwd }); - let stdout = ''; - let stderr = ''; - child.stdout.on('data', data => stdout += data); - child.stderr.on('data', data => stderr += data); - child.on('error', e => reject(e)); - child.on('close', code => { - if (code === 0) { - stdout = stdout.trim(); - if (stdout === '') { - resolve([]); - } else { - resolve(stdout.split('\n').map( - changedPath => path.resolve(cwd, changedPath))); - - } - } else { - reject(code + ': ' + stderr); - } - }); - }); -} - -function isGitRepository(cwd) { - return new Promise(resolve => { - try { - let stdout = ''; - const options = ['rev-parse', '--show-toplevel']; - const child = childProcess.spawn('git', options, { cwd }); - child.stdout.on('data', data => stdout += data); - child.on('error', () => resolve(null)); - child.on('close', code => resolve(code === 0 ? stdout.trim() : null)); - } catch (e) { - resolve(null); - } - }); -} - -module.exports = { - findChangedFiles, - isGitRepository }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/build/hg.js b/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/build/hg.js deleted file mode 100644 index 097b9e525..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/build/hg.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - -const path = require('path'); -const childProcess = require('child_process'); - -const env = Object.assign({}, process.env, { - HGPLAIN: 1 }); - - - - - - - -function findChangedFiles(cwd, options) { - return new Promise((resolve, reject) => { - let args = ['status', '-amn']; - if (options && options.withAncestor) { - args.push('--rev', 'ancestor(.^)'); - } else if (options && options.lastCommit === true) { - args = ['tip', '--template', '{files%"{file}\n"}']; - } - const child = childProcess.spawn('hg', args, { cwd, env }); - let stdout = ''; - let stderr = ''; - child.stdout.on('data', data => stdout += data); - child.stderr.on('data', data => stderr += data); - child.on('error', e => reject(e)); - child.on('close', code => { - if (code === 0) { - stdout = stdout.trim(); - if (stdout === '') { - resolve([]); - } else { - resolve(stdout.split('\n').map( - changedPath => path.resolve(cwd, changedPath))); - - } - } else { - reject(code + ': ' + stderr); - } - }); - }); -} - -function isHGRepository(cwd) { - return new Promise(resolve => { - try { - let stdout = ''; - const child = childProcess.spawn('hg', ['root'], { cwd, env }); - child.stdout.on('data', data => stdout += data); - child.on('error', () => resolve(null)); - child.on('close', code => resolve(code === 0 ? stdout.trim() : null)); - } catch (e) { - resolve(null); - } - }); -} - -module.exports = { - findChangedFiles, - isHGRepository }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/build/index.js deleted file mode 100644 index 0937a7f13..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/build/index.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -module.exports = { - git: require('./git'), - hg: require('./hg') }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/package.json deleted file mode 100644 index 80e6eef50..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-changed-files/package.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "_args": [ - [ - "jest-changed-files@^17.0.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "jest-changed-files@>=17.0.2 <18.0.0", - "_id": "jest-changed-files@17.0.2", - "_inCache": true, - "_installable": true, - "_location": "/jest-changed-files", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/jest-changed-files-17.0.2.tgz_1479170359511_0.7218810119666159" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-changed-files", - "raw": "jest-changed-files@^17.0.2", - "rawSpec": "^17.0.2", - "scope": null, - "spec": ">=17.0.2 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-17.0.2.tgz", - "_shasum": "f5657758736996f590a51b87e5c9369d904ba7b7", - "_shrinkwrap": null, - "_spec": "jest-changed-files@^17.0.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": {}, - "description": "A module used internally by Jest to check which files have changed since you last committed in git or hg.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "f5657758736996f590a51b87e5c9369d904ba7b7", - "tarball": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-17.0.2.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - } - ], - "name": "jest-changed-files", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-cli/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/bin/jest.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/bin/jest.js deleted file mode 100755 index 63fe8d954..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/bin/jest.js +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env node -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -if (process.env.NODE_ENV == null) { - process.env.NODE_ENV = 'test'; -} - -require('../build/cli').run(); diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/SearchSource.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/SearchSource.js deleted file mode 100644 index 7b983edce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/SearchSource.js +++ /dev/null @@ -1,289 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict';var _slicedToArray = function () {function sliceIterator(arr, i) {var _arr = [];var _n = true;var _d = false;var _e = undefined;try {for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {_arr.push(_s.value);if (i && _arr.length === i) break;}} catch (err) {_d = true;_e = err;} finally {try {if (!_n && _i["return"]) _i["return"]();} finally {if (_d) throw _e;}}return _arr;}return function (arr, i) {if (Array.isArray(arr)) {return arr;} else if (Symbol.iterator in Object(arr)) {return sliceIterator(arr, i);} else {throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}(); - - - - - -const DependencyResolver = require('jest-resolve-dependencies'); - -const chalk = require('chalk'); -const changedFiles = require('jest-changed-files'); -const fileExists = require('jest-file-exists'); -const path = require('path');var _require = - - - -require('jest-util');const escapePathForRegex = _require.escapePathForRegex,replacePathSepForRegex = _require.replacePathSepForRegex; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const git = changedFiles.git; -const hg = changedFiles.hg; - -const determineSCM = path => Promise.all([ -git.isGitRepository(path), -hg.isHGRepository(path)]); - -const pathToRegex = p => replacePathSepForRegex(p); -const pluralize = ( -word, -count, -ending) => -`${ count } ${ word }${ count === 1 ? '' : ending }`; - -class SearchSource { - - - - - - - - - - - - - constructor( - hasteMap, - config, - options) - { - this._hasteContext = hasteMap; - this._config = config; - this._options = options || { - skipNodeResolution: false }; - - - this._testPathDirPattern = - new RegExp(config.testPathDirs.map( - dir => escapePathForRegex(dir)). - join('|')); - - this._testRegex = new RegExp(pathToRegex(config.testRegex)); - const ignorePattern = config.testPathIgnorePatterns; - this._testIgnorePattern = - ignorePattern.length ? new RegExp(ignorePattern.join('|')) : null; - - this._testPathCases = { - testPathDirs: path => this._testPathDirPattern.test(path), - testPathIgnorePatterns: path => - !this._testIgnorePattern || - !this._testIgnorePattern.test(path), - - testRegex: path => this._testRegex.test(path) }; - - } - - _filterTestPathsWithStats( - allPaths, - testPathPattern) - { - const data = { - paths: [], - stats: {}, - total: allPaths.length }; - - - const testCases = Object.assign({}, this._testPathCases); - if (testPathPattern) { - const regex = new RegExp(testPathPattern, 'i'); - testCases.testPathPattern = path => regex.test(path); - } - - data.paths = allPaths.filter(path => { - return Object.keys(testCases).reduce((flag, key) => { - if (testCases[key](path)) { - data.stats[key] = ++data.stats[key] || 1; - return flag && true; - } - data.stats[key] = data.stats[key] || 0; - return false; - }, true); - }); - - return data; - } - - _getAllTestPaths( - testPathPattern) - { - return this._filterTestPathsWithStats( - this._hasteContext.hasteFS.getAllFiles(), - testPathPattern); - - } - - isTestFilePath(path) { - return Object.keys(this._testPathCases).every(key => - this._testPathCases[key](path)); - - } - - findMatchingTests( - testPathPattern) - { - if (testPathPattern && !(testPathPattern instanceof RegExp)) { - const maybeFile = path.resolve(process.cwd(), testPathPattern); - if (fileExists(maybeFile, this._hasteContext.hasteFS)) { - return this._filterTestPathsWithStats([maybeFile]); - } - } - - return this._getAllTestPaths(testPathPattern); - } - - findRelatedTests(allPaths) { - const dependencyResolver = new DependencyResolver( - this._hasteContext.resolver, - this._hasteContext.hasteFS); - - return { - paths: dependencyResolver.resolveInverse( - allPaths, - this.isTestFilePath.bind(this), - { - skipNodeResolution: this._options.skipNodeResolution }) }; - - - - } - - findRelatedTestsFromPattern( - paths) - { - if (Array.isArray(paths) && paths.length) { - const resolvedPaths = paths.map(p => path.resolve(process.cwd(), p)); - return this.findRelatedTests(new Set(resolvedPaths)); - } - return { paths: [] }; - } - - findChangedTests(options) { - return Promise.all(this._config.testPathDirs.map(determineSCM)). - then(repos => { - if (!repos.every((_ref) => {var _ref2 = _slicedToArray(_ref, 2);let gitRepo = _ref2[0],hgRepo = _ref2[1];return gitRepo || hgRepo;})) { - return { - noSCM: true, - paths: [] }; - - } - return Promise.all(Array.from(repos).map((_ref3) => {var _ref4 = _slicedToArray(_ref3, 2);let gitRepo = _ref4[0],hgRepo = _ref4[1]; - return gitRepo ? - git.findChangedFiles(gitRepo, options) : - hg.findChangedFiles(hgRepo, options); - })).then(changedPathSets => this.findRelatedTests( - new Set(Array.prototype.concat.apply([], changedPathSets)))); - - }); - } - - getNoTestsFoundMessage( - patternInfo, - config, - data) - { - if (patternInfo.onlyChanged) { - return ( - chalk.bold( - 'No tests found related to files changed since last commit.\n') + - - chalk.dim( - patternInfo.watch ? - 'Press `a` to run all tests, or run Jest with `--watchAll`.' : - 'Run Jest without `-o` to run all tests.')); - - - } - - const testPathPattern = SearchSource.getTestPathPattern(patternInfo); - const stats = data.stats || {}; - const statsMessage = Object.keys(stats).map(key => { - const value = key === 'testPathPattern' ? testPathPattern : config[key]; - if (value) { - const matches = pluralize('match', stats[key], 'es'); - return ` ${ key }: ${ chalk.yellow(value) } - ${ matches }`; - } - return null; - }).filter(line => line).join('\n'); - - return ( - chalk.bold('No tests found') + '\n' + ( - data.total ? - ` ${ pluralize('file', data.total || 0, 's') } checked.\n` + - statsMessage : - `No files found in ${ config.rootDir }.\n` + - `Make sure Jest's configuration does not exclude this directory.\n` + - `To set up Jest, make sure a package.json file exists.\n` + - `Jest Documentation: facebook.github.io/jest/docs/configuration.html`)); - - - } - - getTestPaths(patternInfo) { - if (patternInfo.onlyChanged) { - return this.findChangedTests({ lastCommit: patternInfo.lastCommit }); - } else if (patternInfo.findRelatedTests && patternInfo.paths) { - return Promise.resolve( - this.findRelatedTestsFromPattern(patternInfo.paths)); - - } else if (patternInfo.testPathPattern != null) { - return Promise.resolve( - this.findMatchingTests(patternInfo.testPathPattern)); - - } else { - return Promise.resolve({ paths: [] }); - } - } - - static getTestPathPattern(patternInfo) { - const pattern = patternInfo.testPathPattern; - const input = patternInfo.input; - const formattedPattern = `/${ pattern || '' }/`; - const formattedInput = patternInfo.shouldTreatInputAsPattern ? - `/${ input || '' }/` : - `"${ input || '' }"`; - return input === pattern ? formattedInput : formattedPattern; - }} - - - -module.exports = SearchSource; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/TestRunner.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/TestRunner.js deleted file mode 100644 index 5906aa916..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/TestRunner.js +++ /dev/null @@ -1,605 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict';var _require = - - - - - - - - - - - -require('jest-util');const formatExecError = _require.formatExecError; -const fs = require('graceful-fs'); -const getCacheFilePath = require('jest-haste-map').getCacheFilePath; -const DefaultReporter = require('./reporters/DefaultReporter'); -const NotifyReporter = require('./reporters/NotifyReporter'); -const SummaryReporter = require('./reporters/SummaryReporter'); -const VerboseReporter = require('./reporters/VerboseReporter'); -const promisify = require('./lib/promisify'); -const runTest = require('./runTest'); -const snapshot = require('jest-snapshot'); -const throat = require('throat'); -const workerFarm = require('worker-farm'); -const TestWatcher = require('./TestWatcher'); - -const FAIL = 0; -const SLOW_TEST_TIME = 3000; -const SUCCESS = 1; - -class CancelRun extends Error { - constructor(message) { - super(message); - this.name = 'CancelRun'; - }} - - - - - - - - - - - - - - - - - -const TEST_WORKER_PATH = require.resolve('./TestWorker'); - -class TestRunner { - - - - - - - constructor( - hasteContext, - config, - options) - { - this._config = config; - this._dispatcher = new ReporterDispatcher( - hasteContext.hasteFS, - options.getTestSummary); - - this._hasteContext = hasteContext; - this._options = options; - this._setupReporters(); - - // Map from testFilePath -> time it takes to run the test. Used to - // optimally schedule bigger test runs. - this._testPerformanceCache = {}; - } - - addReporter(reporter) { - this._dispatcher.register(reporter); - } - - removeReporter(ReporterClass) { - this._dispatcher.unregister(ReporterClass); - } - - _getTestPerformanceCachePath() { - const config = this._config; - return getCacheFilePath(config.cacheDirectory, 'perf-cache-' + config.name); - } - - _sortTests(testPaths) { - // When running more tests than we have workers available, sort the tests - // by size - big test files usually take longer to complete, so we run - // them first in an effort to minimize worker idle time at the end of a - // long test run. - // - // After a test run we store the time it took to run a test and on - // subsequent runs we use that to run the slowest tests first, yielding the - // fastest results. - try { - if (this._config.cache) { - this._testPerformanceCache = JSON.parse(fs.readFileSync( - this._getTestPerformanceCachePath(), - 'utf8')); - - } else { - this._testPerformanceCache = {}; - } - } catch (e) { - this._testPerformanceCache = {}; - } - - const cache = this._testPerformanceCache; - const timings = []; - const stats = {}; - const getFileSize = filePath => - stats[filePath] || (stats[filePath] = fs.statSync(filePath).size); - const getTestRunTime = filePath => { - if (cache[filePath]) { - return cache[filePath][0] === FAIL ? Infinity : cache[filePath][1]; - } - return null; - }; - - testPaths = testPaths. - sort((pathA, pathB) => { - const timeA = getTestRunTime(pathA); - const timeB = getTestRunTime(pathB); - if (timeA != null && timeB != null) { - return timeA < timeB ? 1 : -1; - } - return getFileSize(pathA) < getFileSize(pathB) ? 1 : -1; - }); - - testPaths.forEach(filePath => { - const timing = cache[filePath] && cache[filePath][1]; - if (timing) { - timings.push(timing); - } - }); - - return { testPaths, timings }; - } - - _cacheTestResults(aggregatedResults) { - const cache = this._testPerformanceCache; - aggregatedResults.testResults.forEach(test => { - if (test && !test.skipped) { - const perf = test.perfStats; - cache[test.testFilePath] = [ - test.numFailingTests ? FAIL : SUCCESS, - perf.end - perf.start || 0]; - - } - }); - fs.writeFileSync( - this._getTestPerformanceCachePath(), - JSON.stringify(cache)); - - } - - runTests(paths, watcher) { - const config = this._config;var _sortTests = - this._sortTests(paths);const testPaths = _sortTests.testPaths,timings = _sortTests.timings; - const aggregatedResults = createAggregatedResults(testPaths.length); - const estimatedTime = - Math.ceil(getEstimatedTime(timings, this._options.maxWorkers) / 1000); - - const onResult = (testPath, testResult) => { - if (watcher.isInterrupted()) { - return; - } - if (testResult.testResults.length === 0) { - const message = 'Your test suite must contain at least one test.'; - onFailure(testPath, { - message, - stack: new Error(message).stack }); - - return; - } - addResult(aggregatedResults, testResult); - this._dispatcher.onTestResult( - config, - testResult, - aggregatedResults); - - this._bailIfNeeded(aggregatedResults, watcher); - }; - - const onFailure = (testPath, error) => { - if (watcher.isInterrupted()) { - return; - } - const testResult = buildFailureTestResult(testPath, error); - testResult.failureMessage = formatExecError(testResult, config, testPath); - addResult(aggregatedResults, testResult); - this._dispatcher.onTestResult( - config, - testResult, - aggregatedResults); - - }; - - // Run in band if we only have one test or one worker available. - // If we are confident from previous runs that the tests will finish quickly - // we also run in band to reduce the overhead of spawning workers. - const shouldRunInBand = () => - this._options.maxWorkers <= 1 || - testPaths.length <= 1 || - - testPaths.length <= 20 && - timings.every(timing => timing < SLOW_TEST_TIME); - - - - const updateSnapshotState = () => { - const status = - snapshot.cleanup(this._hasteContext.hasteFS, config.updateSnapshot); - aggregatedResults.snapshot.filesRemoved += status.filesRemoved; - aggregatedResults.snapshot.didUpdate = config.updateSnapshot; - aggregatedResults.snapshot.failure = !!( - !aggregatedResults.snapshot.didUpdate && ( - aggregatedResults.snapshot.unchecked || - aggregatedResults.snapshot.unmatched || - aggregatedResults.snapshot.filesRemoved)); - - - }; - - const runInBand = shouldRunInBand(); - - this._dispatcher.onRunStart( - config, - aggregatedResults, - { - estimatedTime, - showStatus: !runInBand }); - - - - const testRun = - runInBand ? - this._createInBandTestRun(testPaths, watcher, onResult, onFailure) : - this._createParallelTestRun(testPaths, watcher, onResult, onFailure); - - return testRun. - catch(error => { - if (!watcher.isInterrupted()) { - throw error; - } - }). - then(() => { - updateSnapshotState(); - aggregatedResults.wasInterrupted = watcher.isInterrupted(); - - this._dispatcher.onRunComplete(config, aggregatedResults); - - const anyTestFailures = !( - aggregatedResults.numFailedTests === 0 && - aggregatedResults.numRuntimeErrorTestSuites === 0); - - const anyReporterErrors = this._dispatcher.hasErrors(); - - aggregatedResults.success = !( - anyTestFailures || - aggregatedResults.snapshot.failure || - anyReporterErrors); - - - this._cacheTestResults(aggregatedResults); - return aggregatedResults; - }); - } - - _createInBandTestRun( - testPaths, - watcher, - onResult, - onFailure) - { - const mutex = throat(1); - return testPaths.reduce( - (promise, path) => - mutex(() => - promise. - then(() => { - if (watcher.isInterrupted()) { - throw new CancelRun(); - } - - this._dispatcher.onTestStart(this._config, path); - return runTest( - path, - this._config, - this._hasteContext.resolver); - - }). - then(result => onResult(path, result)). - catch(err => onFailure(path, err))), - - Promise.resolve()); - - } - - _createParallelTestRun( - testPaths, - watcher, - onResult, - onFailure) - { - const config = this._config; - const farm = workerFarm({ - autoStart: true, - maxConcurrentCallsPerWorker: 1, - maxConcurrentWorkers: this._options.maxWorkers, - maxRetries: 2 }, - TEST_WORKER_PATH); - const mutex = throat(this._options.maxWorkers); - // Send test suites to workers continuously instead of all at once to track - // the start time of individual tests. - const runTestInWorker = (_ref) => {let path = _ref.path,config = _ref.config;return mutex(() => { - if (watcher.isInterrupted()) { - return Promise.reject(); - } - this._dispatcher.onTestStart(config, path); - return promisify(farm)({ config, path }); - });}; - - const onError = (err, path) => { - onFailure(path, err); - if (err.type === 'ProcessTerminatedError') { - console.error( - 'A worker process has quit unexpectedly! ' + - 'Most likely this an initialization error.'); - - process.exit(1); - } - }; - - const onInterrupt = new Promise((_, reject) => { - watcher.on('change', state => { - if (state.interrupted) { - reject(new CancelRun()); - } - }); - }); - - const runAllTests = Promise.all(testPaths.map(path => { - return runTestInWorker({ config, path }). - then(testResult => onResult(path, testResult)). - catch(error => onError(error, path)); - })); - - return Promise.race([ - runAllTests, - onInterrupt]). - then(() => workerFarm.end(farm)); - } - - _setupReporters() { - this.addReporter( - this._config.verbose ? - new VerboseReporter() : - new DefaultReporter()); - - - if (this._config.collectCoverage) { - // coverage reporter dependency graph is pretty big and we don't - // want to require it if we're not in the `--coverage` mode - const CoverageReporter = require('./reporters/CoverageReporter'); - this.addReporter(new CoverageReporter()); - } - - this.addReporter(new SummaryReporter()); - if (this._config.notify) { - this.addReporter(new NotifyReporter()); - } - } - - _bailIfNeeded(aggregatedResults, watcher) { - if (this._config.bail && aggregatedResults.numFailedTests !== 0) { - if (watcher.isWatchMode()) { - watcher.setState({ interrupted: true }); - } else { - this._dispatcher.onRunComplete(this._config, aggregatedResults); - process.exit(1); - } - } - }} - - -const createAggregatedResults = numTotalTestSuites => { - return { - numFailedTestSuites: 0, - numFailedTests: 0, - numPassedTestSuites: 0, - numPassedTests: 0, - numPendingTestSuites: 0, - numPendingTests: 0, - numRuntimeErrorTestSuites: 0, - numTotalTestSuites, - numTotalTests: 0, - snapshot: { - added: 0, - didUpdate: false, // is set only after the full run - failure: false, - filesAdded: 0, - // combines individual test results + results after full run - filesRemoved: 0, - filesUnmatched: 0, - filesUpdated: 0, - matched: 0, - total: 0, - unchecked: 0, - unmatched: 0, - updated: 0 }, - - startTime: Date.now(), - success: false, - testResults: [], - wasInterrupted: false }; - -}; - -const addResult = ( -aggregatedResults, -testResult) => -{ - aggregatedResults.testResults.push(testResult); - aggregatedResults.numTotalTests += - testResult.numPassingTests + - testResult.numFailingTests + - testResult.numPendingTests; - aggregatedResults.numFailedTests += testResult.numFailingTests; - aggregatedResults.numPassedTests += testResult.numPassingTests; - aggregatedResults.numPendingTests += testResult.numPendingTests; - - if (testResult.testExecError) { - aggregatedResults.numRuntimeErrorTestSuites++; - } - - if (testResult.skipped) { - aggregatedResults.numPendingTestSuites++; - } else if (testResult.numFailingTests > 0 || testResult.testExecError) { - aggregatedResults.numFailedTestSuites++; - } else { - aggregatedResults.numPassedTestSuites++; - } - - // Snapshot data - if (testResult.snapshot.added) { - aggregatedResults.snapshot.filesAdded++; - } - if (testResult.snapshot.fileDeleted) { - aggregatedResults.snapshot.filesRemoved++; - } - if (testResult.snapshot.unmatched) { - aggregatedResults.snapshot.filesUnmatched++; - } - if (testResult.snapshot.updated) { - aggregatedResults.snapshot.filesUpdated++; - } - - aggregatedResults.snapshot.added += testResult.snapshot.added; - aggregatedResults.snapshot.matched += testResult.snapshot.matched; - aggregatedResults.snapshot.unchecked += testResult.snapshot.unchecked; - aggregatedResults.snapshot.unmatched += testResult.snapshot.unmatched; - aggregatedResults.snapshot.updated += testResult.snapshot.updated; - aggregatedResults.snapshot.total += - testResult.snapshot.added + - testResult.snapshot.matched + - testResult.snapshot.unmatched + - testResult.snapshot.updated; -}; - -const buildFailureTestResult = ( -testPath, -err) => -{ - return { - console: null, - failureMessage: null, - numFailingTests: 0, - numPassingTests: 0, - numPendingTests: 0, - perfStats: { - end: 0, - start: 0 }, - - skipped: false, - snapshot: { - added: 0, - fileDeleted: false, - matched: 0, - unchecked: 0, - unmatched: 0, - updated: 0 }, - - testExecError: err, - testFilePath: testPath, - testResults: [] }; - -}; - -// Proxy class that holds all reporter and dispatchers events to each -// of them. -class ReporterDispatcher { - - - - - constructor(hasteFS, getTestSummary) { - this._runnerContext = { getTestSummary, hasteFS }; - this._reporters = []; - } - - register(reporter) { - this._reporters.push(reporter); - } - - unregister(ReporterClass) { - this._reporters = this._reporters.filter( - reporter => !(reporter instanceof ReporterClass)); - - } - - onTestResult(config, testResult, results) { - this._reporters.forEach(reporter => - reporter.onTestResult( - config, - testResult, - results, - this._runnerContext)); - - - } - - onTestStart(config, path) { - this._reporters.forEach(reporter => - reporter.onTestStart(config, path, this._runnerContext)); - - } - - onRunStart(config, results, options) { - this._reporters.forEach( - reporter => reporter.onRunStart( - config, - results, - this._runnerContext, - options)); - - - } - - onRunComplete(config, results) { - this._reporters.forEach(reporter => - reporter.onRunComplete(config, results, this._runnerContext)); - - } - - // Return a list of last errors for every reporter - getErrors() { - return this._reporters.reduce( - (list, reporter) => { - const error = reporter.getLastError(); - return error ? list.concat(error) : list; - }, - []); - - } - - hasErrors() { - return this.getErrors().length !== 0; - }} - - -const getEstimatedTime = (timings, workers) => { - if (!timings.length) { - return 0; - } - - const max = Math.max.apply(null, timings); - if (timings.length <= workers) { - return max; - } - - return Math.max( - timings.reduce((sum, time) => sum + time) / workers, - max); - -}; - -module.exports = TestRunner; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/TestWatcher.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/TestWatcher.js deleted file mode 100644 index 209277e7c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/TestWatcher.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict';var _require = - -require('events');const EventEmitter = _require.EventEmitter; - - - - - -class TestWatcher extends EventEmitter { - - - - constructor(_ref) {let isWatchMode = _ref.isWatchMode; - super(); - this.state = { interrupted: false }; - this._isWatchMode = isWatchMode; - } - - setState(state) { - Object.assign(this.state, state); - this.emit('change', this.state); - } - - isInterrupted() { - return this.state.interrupted; - } - - isWatchMode() { - return this._isWatchMode; - }} - - - -module.exports = TestWatcher; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/TestWorker.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/TestWorker.js deleted file mode 100644 index 934aa526a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/TestWorker.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict';var _require = - - - - -require('jest-util');const separateMessageFromStack = _require.separateMessageFromStack; - -// Make sure uncaught errors are logged before we exit. -process.on('uncaughtException', err => { - console.error(err.stack); - process.exit(1); -}); - -const Runtime = require('jest-runtime'); -const runTest = require('./runTest'); - - - - - - - - -const formatError = error => { - if (typeof error === 'string') {var _separateMessageFromS = - separateMessageFromStack(error);const message = _separateMessageFromS.message,stack = _separateMessageFromS.stack; - return { - message, - stack, - type: 'Error' }; - - } - - return { - message: error.message, - stack: error.stack, - type: error.type || 'Error' }; - -}; - -const resolvers = Object.create(null); - -module.exports = (data, callback) => { - try { - const name = data.config.name; - if (!resolvers[name]) { - resolvers[name] = Runtime.createResolver( - data.config, - Runtime.createHasteMap(data.config).readModuleMap()); - - } - - runTest(data.path, data.config, resolvers[name]). - then( - result => callback(null, result), - error => callback(formatError(error))); - - } catch (error) { - callback(formatError(error)); - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/assets/jest_logo.png b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/assets/jest_logo.png deleted file mode 100644 index c52bf15030c8a23ce7130af5db3392b037e46579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7319 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 { - if (argv.runInBand && argv.hasOwnProperty('maxWorkers')) { - throw new Error( - 'Both --runInBand and --maxWorkers were specified, but these two ' + - 'options do not make sense together. Which is it?'); - - } - - if (argv.onlyChanged && argv._.length > 0) { - throw new Error( - 'Both --onlyChanged and a path pattern were specified, but these ' + - 'two options do not make sense together. Which is it? Do you want ' + - 'to run tests for changed files? Or for a specific set of files?'); - - } - - if (argv.onlyChanged && argv.watchAll) { - throw new Error( - 'Both --onlyChanged and --watchAll were specified, but these two ' + - 'options do not make sense together. Try the --watch option which ' + - 'reruns only tests related to changed files.'); - - } - - if (argv.findRelatedTests && argv._.length === 0) { - throw new Error( - 'The --findRelatedTests option requires file paths to be specified.\n' + - 'Example usage: jest --findRelatedTests ./src/source.js ./src/index.js.'); - - } - - return true; -}; - -const usage = 'Usage: $0 [--config=] [TestPathPattern]'; - -const options = { - bail: { - alias: 'b', - description: - 'Exit the test suite immediately upon the first failing test.', - type: 'boolean' }, - - cache: { - default: true, - description: - 'Whether to use the transform cache. Disable the cache using ' + - '--no-cache.', - type: 'boolean' }, - - collectCoverageFrom: { - description: - 'relative to glob pattern matching the files that coverage ' + - 'info needs to be collected from.', - type: 'string' }, - - colors: { - description: - 'Forces test results output highlighting (even if stdout is not a TTY)', - type: 'boolean' }, - - config: { - alias: 'c', - description: - 'The path to a jest config file specifying how to find and execute ' + - 'tests. If no rootDir is set in the config, the current directory ' + - 'is assumed to be the rootDir for the project. This can also be a JSON' + - 'encoded value which Jest will use as configuration.', - type: 'string' }, - - coverage: { - description: - 'Indicates that test coverage information should be collected and ' + - 'reported in the output.', - type: 'boolean' }, - - debug: { - description: 'Print debugging info about your jest config.', - type: 'boolean' }, - - env: { - default: undefined, - description: - 'The test environment used for all tests. This can point to any file ' + - 'or node module. Examples: `jsdom`, `node` or ' + - '`path/to/my-environment.js`', - type: 'string' }, - - expand: { - alias: 'e', - default: false, - description: 'Use this flag to show full diffs instead of a patch.', - type: 'boolean' }, - - findRelatedTests: { - description: - 'Find related tests for a list of source files that were passed in ' + - 'as arguments. Useful for pre-commit hook integration to run the ' + - 'minimal amount of tests necessary.', - type: 'boolean' }, - - forceExit: { - default: false, - description: - 'Force Jest to exit after all tests have completed running. ' + - 'This is useful when resources set up by test code cannot be ' + - 'adequately cleaned up.', - type: 'boolean' }, - - json: { - description: - 'Prints the test results in JSON. This mode will send all ' + - 'other test output and user messages to stderr.', - type: 'boolean' }, - - jsonOutputFile: { - description: - 'Write test results to a file when the --json option is also specified.', - type: 'string' }, - - lastCommit: { - default: false, - description: - 'Will run all tests affected by file changes in the last commit made.', - type: 'boolean' }, - - logHeapUsage: { - description: - 'Logs the heap usage after every test. Useful to debug memory ' + - 'leaks. Use together with `--runInBand` and `--expose-gc` in node.', - type: 'boolean' }, - - maxWorkers: { - alias: 'w', - description: - 'Specifies the maximum number of workers the worker-pool will ' + - 'spawn for running tests. This defaults to the number of the cores ' + - 'available on your machine. (its usually best not to override this ' + - 'default)', - type: 'string' }, - - noStackTrace: { - description: 'Disables stack trace in test results output', - type: 'boolean' }, - - notify: { - description: 'Activates notifications for test results.', - type: 'boolean' }, - - onlyChanged: { - alias: 'o', - description: - 'Attempts to identify which tests to run based on which files have ' + - 'changed in the current repository. Only works if you\'re running ' + - 'tests in a git repository at the moment.', - type: 'boolean' }, - - runInBand: { - alias: 'i', - description: - 'Run all tests serially in the current process (rather than ' + - 'creating a worker pool of child processes that run tests). This ' + - 'is sometimes useful for debugging, but such use cases are pretty ' + - 'rare.', - type: 'boolean' }, - - setupTestFrameworkScriptFile: { - description: - 'The path to a module that runs some code to configure or set up ' + - 'the testing framework before each test.', - type: 'string' }, - - silent: { - default: false, - description: 'Prevent tests from printing messages through the console.', - type: 'boolean' }, - - testNamePattern: { - alias: 't', - description: - 'Run only tests with a name that matches the regex pattern.', - type: 'string' }, - - testPathPattern: { - description: - 'A regexp pattern string that is matched against all tests ' + - 'paths before executing the test.', - type: 'string' }, - - testRunner: { - description: - 'Allows to specify a custom test runner. Jest ships with Jasmine ' + - '1 and 2 which can be enabled by setting this option to ' + - '`jasmine1` or `jasmine2`. The default is `jasmine2`. A path to a ' + - 'custom test runner can be provided: ' + - '`/path/to/testRunner.js`.', - type: 'string' }, - - updateSnapshot: { - alias: 'u', - default: false, - description: - 'Use this flag to re-record snapshots. ' + - 'Can be used together with a test suite pattern or with ' + - '`--testNamePattern` to re-record snapshot for test matching ' + - 'the pattern', - type: 'boolean' }, - - useStderr: { - description: 'Divert all output to stderr.', - type: 'boolean' }, - - verbose: { - description: - 'Display individual test results with the test suite hierarchy.', - type: 'boolean' }, - - version: { - alias: 'v', - description: 'Print the version and exit', - type: 'boolean' }, - - watch: { - description: - 'Watch files for changes and rerun tests related to changed files. ' + - 'If you want to re-run all tests when a file has changed, use the ' + - '`--watchAll` option.', - type: 'boolean' }, - - watchAll: { - description: - 'Watch files for changes and rerun all tests. If you want to re-run ' + - 'only the tests related to the changed files, use the ' + - '`--watch` option.', - type: 'boolean' }, - - watchman: { - default: true, - description: - 'Whether to use watchman for file crawling. Disable using ' + - '--no-watchman.', - type: 'boolean' } }; - - - -module.exports = { - check, - options, - usage }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/cli/getJest.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/cli/getJest.js deleted file mode 100644 index bbcd34e28..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/cli/getJest.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - -const chalk = require('chalk'); -const fs = require('graceful-fs'); -const path = require('path'); - -function getJest(packageRoot) { - const packageJSONPath = path.join(packageRoot, 'package.json'); - const binPath = path.join(packageRoot, 'node_modules/jest-cli'); - if (fs.existsSync(binPath)) { - /* $FlowFixMe */ - return require(binPath); - } else { - const jest = require('../jest'); - // Check if Jest is specified in `package.json` but not installed. - if (fs.existsSync(packageJSONPath)) { - /* $FlowFixMe */ - const packageJSON = require(packageJSONPath); - const dependencies = packageJSON.dependencies; - const devDependencies = packageJSON.devDependencies; - if ( - dependencies && dependencies['jest-cli'] || - devDependencies && devDependencies['jest-cli']) - { - process.on('exit', () => console.log( - chalk.red( - 'Please run `npm install` to use the version of Jest intended ' + - 'for this project.'))); - - - } - } - return jest; - } -} - -module.exports = getJest; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/cli/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/cli/index.js deleted file mode 100644 index a124ac8f1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/cli/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - -const args = require('./args'); -const getJest = require('./getJest'); -const getPackageRoot = require('jest-util').getPackageRoot; -const warnAboutUnrecognizedOptions = require('jest-util').warnAboutUnrecognizedOptions; -const yargs = require('yargs'); - -function run(argv, root) { - argv = yargs(argv || process.argv.slice(2)). - usage(args.usage). - help(). - options(args.options). - check(args.check). - argv; - - warnAboutUnrecognizedOptions(argv, args.options); - - if (argv.help) { - yargs.showHelp(); - process.on('exit', () => process.exit(1)); - return; - } - - if (!root) { - root = getPackageRoot(); - } - - getJest(root).runCLI(argv, root, result => { - const code = !result || result.success ? 0 : 1; - process.on('exit', () => process.exit(code)); - if (argv && argv.forceExit) { - process.exit(code); - } - }); -} - -exports.run = run; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/coverage.template b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/coverage.template deleted file mode 100644 index b79141b06..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/coverage.template +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -// Instrumentation Header -{ - var <%= instrumented.names.statement %>; - var <%= instrumented.names.expression %>; - var <%= instrumented.names.block %>; - var nodes = <%= coverageStorageVar %>.nodes = {}; - var blocks = <%= coverageStorageVar %>.blocks = {}; - - <%= instrumented.names.statement %> = function(i) { - var node = nodes[i] = (nodes[i] || {index: i, count:0}) - node.count++; - }; - - <%= instrumented.names.expression %> = function(i) { - var node = nodes[i] = (nodes[i] || {index: i, count:0}) - node.count++; - }; - - <%= instrumented.names.block %> = function(i) { - var block = blocks[i] = (blocks[i] || {index: i, count:0}) - block.count++; - }; -}; -//////////////////////// - -// Instrumented Code -<%= source %> diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/generateEmptyCoverage.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/generateEmptyCoverage.js deleted file mode 100644 index 0e0482606..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/generateEmptyCoverage.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - -const IstanbulInstrument = require('istanbul-lib-instrument');var _require = - -require('jest-runtime');const transformSource = _require.transformSource,shouldInstrument = _require.shouldInstrument; - -module.exports = function (source, filename, config) { - if (shouldInstrument(filename, config)) { - // Transform file without instrumentation first, to make sure produced - // source code is ES6 (no flowtypes etc.) and can be instrumented - source = transformSource(filename, config, source, false); - const instrumenter = IstanbulInstrument.createInstrumenter(); - instrumenter.instrumentSync(source, filename); - return instrumenter.fileCoverage; - } else { - return null; - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/jest.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/jest.js deleted file mode 100644 index 37596778c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/jest.js +++ /dev/null @@ -1,456 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - -const realFs = require('fs'); -const fs = require('graceful-fs'); -fs.gracefulify(realFs); - -const Runtime = require('jest-runtime'); -const SearchSource = require('./SearchSource'); -const TestRunner = require('./TestRunner');var _require = - -require('jest-util');const Console = _require.Console,clearLine = _require.clearLine;var _require2 = -require('./cli');const run = _require2.run; -const ansiEscapes = require('ansi-escapes'); -const chalk = require('chalk'); -const formatTestResults = require('./lib/formatTestResults'); -const os = require('os'); -const path = require('path'); -const preRunMessage = require('./preRunMessage'); -const readConfig = require('jest-config').readConfig; -const sane = require('sane'); -const which = require('which'); -const TestWatcher = require('./TestWatcher'); - -const CLEAR = '\x1B[2J\x1B[H'; -const VERSION = require('../package.json').version; -const WATCHER_DEBOUNCE = 200; -const WATCHMAN_BIN = 'watchman'; -const KEYS = { - A: '61', - BACKSPACE: process.platform === 'win32' ? '08' : '7f', - CONTROL_C: '03', - CONTROL_D: '04', - ENTER: '0d', - ESCAPE: '1b', - O: '6f', - P: '70', - Q: '71', - U: '75' }; - - -const getMaxWorkers = argv => { - if (argv.runInBand) { - return 1; - } else if (argv.maxWorkers) { - return parseInt(argv.maxWorkers, 10); - } else { - const cpus = os.cpus().length; - return Math.max(argv.watch ? Math.floor(cpus / 2) : cpus - 1, 1); - } -}; - -const buildTestPathPatternInfo = argv => { - const defaultPattern = { - input: '', - shouldTreatInputAsPattern: false, - testPathPattern: '' }; - - const validatePattern = patternInfo => {const - testPathPattern = patternInfo.testPathPattern; - if (testPathPattern) { - try { - /* eslint-disable no-new */ - new RegExp(testPathPattern); - /* eslint-enable no-new */ - } catch (error) { - clearLine(process.stdout); - console.log(chalk.red( - 'Invalid testPattern ' + String(testPathPattern) + ' supplied. ' + - 'Running all tests instead.')); - - return defaultPattern; - } - } - return patternInfo; - }; - if (argv.onlyChanged) { - return { - input: '', - lastCommit: argv.lastCommit, - onlyChanged: true, - watch: argv.watch }; - - } - if (argv.testPathPattern) { - return validatePattern({ - input: argv.testPathPattern, - shouldTreatInputAsPattern: true, - testPathPattern: argv.testPathPattern }); - - } - if (argv._ && argv._.length) { - return validatePattern({ - findRelatedTests: argv.findRelatedTests, - input: argv._.join(' '), - paths: argv._, - shouldTreatInputAsPattern: false, - testPathPattern: argv._.join('|') }); - - } - return defaultPattern; -}; - -const getTestSummary = ( -argv, -patternInfo) => -{ - const testPathPattern = SearchSource.getTestPathPattern(patternInfo); - const testInfo = patternInfo.onlyChanged ? - chalk.dim(' related to changed files') : - patternInfo.input !== '' ? - chalk.dim(' matching ') + testPathPattern : - ''; - - const nameInfo = argv.testNamePattern ? - chalk.dim(' with tests matching ') + `"${ argv.testNamePattern }"` : - ''; - - return ( - chalk.dim('Ran all test suites') + - testInfo + - nameInfo + - chalk.dim('.')); - -}; - -const getWatcher = ( -config, -packageRoot, -callback, -options) => -{ - which(WATCHMAN_BIN, (err, resolvedPath) => { - const watchman = !err && options.useWatchman && resolvedPath; - const glob = config.moduleFileExtensions.map(ext => '**/*' + ext); - const watcher = sane(packageRoot, { glob, watchman }); - callback(watcher); - }); -}; - -const runJest = (config, argv, pipe, testWatcher, onComplete) => { - const maxWorkers = getMaxWorkers(argv); - const localConsole = new Console(pipe, pipe); - let patternInfo = buildTestPathPatternInfo(argv); - return Runtime.createHasteContext(config, { - console: localConsole, - maxWorkers }). - then(hasteMap => { - const source = new SearchSource(hasteMap, config); - return source.getTestPaths(patternInfo). - then(data => { - if (!data.paths.length) { - if (patternInfo.onlyChanged && data.noSCM) { - if (config.watch) { - // Run all the tests - setWatchMode(argv, 'watchAll', { - noSCM: true }); - - patternInfo = buildTestPathPatternInfo(argv); - return source.getTestPaths(patternInfo); - } else { - localConsole.log( - 'Jest can only find uncommitted changed files in a git or hg ' + - 'repository. If you make your project a git or hg repository ' + - '(`git init` or `hg init`), Jest will be able to only ' + - 'run tests related to files changed since the last commit.'); - - } - } - - localConsole.log( - source.getNoTestsFoundMessage(patternInfo, config, data)); - - } - return data; - }).then(data => { - if (data.paths.length === 1 && config.verbose !== false) { - config = Object.assign({}, config, { verbose: true }); - } - - return new TestRunner( - hasteMap, - config, - { - getTestSummary: () => getTestSummary(argv, patternInfo), - maxWorkers }). - - runTests(data.paths, testWatcher); - }). - then(runResults => { - if (config.testResultsProcessor) { - /* $FlowFixMe */ - const processor = require(config.testResultsProcessor); - processor(runResults); - } - if (argv.json) { - if (argv.jsonOutputFile) { - const outputFile = path.resolve(process.cwd(), argv.jsonOutputFile); - - fs.writeFileSync( - outputFile, - JSON.stringify(formatTestResults(runResults, config))); - - process.stdout.write( - `Test results written to: ` + - `${ path.relative(process.cwd(), outputFile) }\n`); - - } else { - process.stdout.write( - JSON.stringify(formatTestResults(runResults, config))); - - } - } - return onComplete && onComplete(runResults); - }).catch(error => { - throw error; - }); - }); -}; - -const setWatchMode = (argv, mode, options) => { - if (mode === 'watch') { - argv.watch = true; - argv.watchAll = false; - } else if (mode === 'watchAll') { - argv.watch = false; - argv.watchAll = true; - } - - // Reset before setting these to the new values - argv._ = options && options.pattern || ''; - argv.onlyChanged = false; - argv.onlyChanged = - buildTestPathPatternInfo(argv).input === '' && !argv.watchAll; - - if (options && options.noSCM) { - argv.noSCM = true; - } -}; - -const runCLI = ( -argv, -root, -onComplete) => -{ - const pipe = argv.json ? process.stderr : process.stdout; - argv = argv || {}; - if (argv.version) { - pipe.write(`v${ VERSION }\n`); - onComplete && onComplete(); - return; - } - - readConfig(argv, root). - then(config => { - if (argv.debug) { - /* $FlowFixMe */ - const testFramework = require(config.testRunner); - pipe.write('jest version = ' + VERSION + '\n'); - pipe.write('test framework = ' + testFramework.name + '\n'); - pipe.write('config = ' + JSON.stringify(config, null, ' ') + '\n'); - } - if (argv.watch || argv.watchAll) { - setWatchMode(argv, argv.watch ? 'watch' : 'watchAll', { - pattern: argv._ }); - - - let isRunning = false; - let isEnteringPattern = false; - let currentPattern = ''; - let timer; - - let testWatcher; - const writeCurrentPattern = () => { - clearLine(pipe); - pipe.write(chalk.dim(' pattern \u203A ') + currentPattern); - }; - - const startRun = function () {let overrideConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - if (isRunning) { - return null; - } - - testWatcher = new TestWatcher({ isWatchMode: true }); - pipe.write(CLEAR); - preRunMessage.print(pipe); - isRunning = true; - return runJest( - Object.freeze(Object.assign({}, config, overrideConfig)), - argv, - pipe, - testWatcher, - results => { - isRunning = false; - /* eslint-disable max-len */ - const messages = [ - '\n' + chalk.bold('Watch Usage'), - argv.watch ? - chalk.dim(' \u203A Press ') + 'a' + chalk.dim(' to run all tests.') : - null, - (argv.watchAll || argv._) && !argv.noSCM ? - chalk.dim(' \u203A Press ') + 'o' + chalk.dim(' to only run tests related to changed files.') : - null, - results.snapshot.failure ? - chalk.dim(' \u203A Press ') + 'u' + chalk.dim(' to update failing snapshots.') : - null, - chalk.dim(' \u203A Press ') + 'p' + chalk.dim(' to filter by a filename regex pattern.'), - chalk.dim(' \u203A Press ') + 'q' + chalk.dim(' to quit watch mode.'), - chalk.dim(' \u203A Press ') + 'Enter' + chalk.dim(' to trigger a test run.')]; - - /* eslint-enable max-len */ - console.log(messages.filter(message => !!message).join('\n')); - }). - then( - () => {}, - error => console.error(chalk.red(error.stack))); - - }; - - const onKeypress = key => { - if (key === KEYS.CONTROL_C || key === KEYS.CONTROL_D) { - process.exit(0); - return; - } - if (isEnteringPattern) { - switch (key) { - case KEYS.ENTER: - isEnteringPattern = false; - setWatchMode(argv, 'watch', { - pattern: [currentPattern] }); - - startRun(); - break; - case KEYS.ESCAPE: - isEnteringPattern = false; - pipe.write(ansiEscapes.eraseLines(2)); - currentPattern = argv._[0]; - break; - default: - const char = new Buffer(key, 'hex').toString(); - currentPattern = key === KEYS.BACKSPACE ? - currentPattern.slice(0, -1) : - currentPattern + char; - writeCurrentPattern(); - break;} - - return; - } - - // Abort test run - if ( - isRunning && - testWatcher && - [KEYS.Q, KEYS.ENTER, KEYS.A, KEYS.O, KEYS.P].includes(key)) - { - testWatcher.setState({ interrupted: true }); - return; - } - - switch (key) { - case KEYS.Q: - process.exit(0); - return; - case KEYS.ENTER: - startRun(); - break; - case KEYS.U: - startRun({ updateSnapshot: true }); - break; - case KEYS.A: - setWatchMode(argv, 'watchAll'); - startRun(); - break; - case KEYS.O: - setWatchMode(argv, 'watch'); - startRun(); - break; - case KEYS.P: - isEnteringPattern = true; - currentPattern = ''; - pipe.write('\n'); - writeCurrentPattern(); - break;} - - }; - - const onFileChange = (_, filePath) => { - filePath = path.join(root, filePath); - const coverageDirectory = - config.coverageDirectory || - path.resolve(config.rootDir, 'coverage'); - const isValidPath = - config.testPathDirs.some(dir => filePath.startsWith(dir)) && - !filePath.includes(coverageDirectory); - - if (!isValidPath) { - return; - } - if (timer) { - clearTimeout(timer); - timer = null; - } - if (testWatcher && testWatcher.isInterrupted()) { - return; - } - timer = setTimeout(startRun, WATCHER_DEBOUNCE); - }; - - if (typeof process.stdin.setRawMode === 'function') { - process.stdin.setRawMode(true); - process.stdin.resume(); - process.stdin.setEncoding('hex'); - process.stdin.on('data', onKeypress); - } - const callback = watcher => { - watcher.on('error', error => { - watcher.close(); - getWatcher(config, root, callback, { useWatchman: false }); - }); - watcher.on('all', onFileChange); - }; - getWatcher(config, root, callback, { useWatchman: true }); - startRun(); - return Promise.resolve(); - } else { - preRunMessage.print(pipe); - const testWatcher = new TestWatcher({ isWatchMode: false }); - return runJest(config, argv, pipe, testWatcher, onComplete); - } - }). - catch(error => { - clearLine(process.stderr); - clearLine(process.stdout); - console.error(chalk.red(error.stack)); - process.exit(1); - }); -}; - -module.exports = { - SearchSource, - TestRunner, - getVersion: () => VERSION, - run, - runCLI }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/lib/BufferedConsole.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/lib/BufferedConsole.js deleted file mode 100644 index 6a6059fb4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/lib/BufferedConsole.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - -const Console = require('console').Console; - -const callsites = require('callsites'); -const format = require('util').format; - -class BufferedConsole extends Console { - - - - constructor() { - const buffer = []; - super({ write: message => BufferedConsole.write(buffer, 'log', message) }); - this._buffer = buffer; - } - - static write( - buffer, - type, - message, - level) - { - const call = callsites()[level != null ? level : 2]; - const origin = call.getFileName() + ':' + call.getLineNumber(); - buffer.push({ message, origin, type }); - return buffer; - } - - log() { - BufferedConsole.write(this._buffer, 'log', format.apply(null, arguments)); - } - - info() { - BufferedConsole.write(this._buffer, 'info', format.apply(null, arguments)); - } - - warn() { - BufferedConsole.write(this._buffer, 'warn', format.apply(null, arguments)); - } - - error() { - BufferedConsole.write(this._buffer, 'error', format.apply(null, arguments)); - } - - getBuffer() { - return this._buffer; - }} - - - -module.exports = BufferedConsole; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/lib/formatTestResults.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/lib/formatTestResults.js deleted file mode 100644 index 4d0088a8e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/lib/formatTestResults.js +++ /dev/null @@ -1,99 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - - - - - - - - -const formatResult = ( -testResult, -config, -codeCoverageFormatter, -reporter) => -{ - const output = { - message: '', - name: testResult.testFilePath, - summary: '' }; - - - if (testResult.testExecError) { - const currTime = Date.now(); - output.status = 'failed'; - output.message = testResult.testExecError; - output.startTime = currTime; - output.endTime = currTime; - output.coverage = {}; - } else { - const allTestsPassed = testResult.numFailingTests === 0; - output.status = allTestsPassed ? 'passed' : 'failed'; - output.startTime = testResult.perfStats.start; - output.endTime = testResult.perfStats.end; - output.coverage = codeCoverageFormatter(testResult.coverage, reporter); - } - - output.assertionResults = testResult.testResults.map(formatTestAssertion); - - if (testResult.failureMessage) { - output.message = testResult.failureMessage; - } - - return output; -}; - -function formatTestAssertion( -assertion) -{ - const result = { - status: assertion.status, - title: assertion.title }; - - if (assertion.failureMessages) { - result.failureMessages = assertion.failureMessages; - } - return result; -} - -function formatTestResults( -results, -config, -codeCoverageFormatter, -reporter) -{ - const formatter = codeCoverageFormatter || (coverage => coverage); - - const testResults = results.testResults.map(testResult => formatResult( - testResult, - config, - formatter, - reporter)); - - - return { - numFailedTests: results.numFailedTests, - numPassedTests: results.numPassedTests, - numPendingTests: results.numPendingTests, - numRuntimeErrorTestSuites: results.numRuntimeErrorTestSuites, - numTotalTestSuites: results.numTotalTestSuites, - numTotalTests: results.numTotalTests, - startTime: results.startTime, - success: results.success, - testResults }; - -} - -module.exports = formatTestResults; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/lib/promisify.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/lib/promisify.js deleted file mode 100644 index 21d20cfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/lib/promisify.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ -'use strict'; - -module.exports = function promisify(fn) { - return function () { - const args = Array.prototype.slice.call(arguments); - return new Promise((resolve, reject) => { - args.push((err, res) => { - if (err) { - reject(err); - } else { - resolve(res); - } - }); - - fn.apply(this, args); - }); - }; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/preRunMessage.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/preRunMessage.js deleted file mode 100644 index 77f18bca3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/preRunMessage.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict';var _require = - -require('jest-util');const clearLine = _require.clearLine; -const chalk = require('chalk'); -const isCI = require('is-ci'); - -const print = stream => { - if (process.stdout.isTTY && !isCI) { - stream.write(chalk.bold.dim('Determining test suites to run...')); - } -}; - -const remove = stream => { - if (stream.isTTY && !isCI) { - clearLine(stream); - } -}; - -module.exports = { - print, - remove }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/BaseReporter.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/BaseReporter.js deleted file mode 100644 index dfc9cfeac..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/BaseReporter.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - -const preRunMessage = require('../preRunMessage'); - -class BaseReporter { - - - log(message) { - process.stderr.write(message + '\n'); - } - - onRunStart( - config, - results, - runnerContext, - options) - { - preRunMessage.remove(process.stderr); - } - - onTestResult( - config, - testResult, - results) - {} - - onTestStart( - config, - path, - runnerContext) - {} - - onRunComplete( - config, - aggregatedResults, - runnerContext) - {} - - _setError(error) { - this._error = error; - } - - // Return an error that occured during reporting. This error will - // define whether the test run was successful or failed. - getLastError() { - return this._error; - }} - - -module.exports = BaseReporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/CoverageReporter.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/CoverageReporter.js deleted file mode 100644 index 3854061e0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/CoverageReporter.js +++ /dev/null @@ -1,177 +0,0 @@ -/** -* Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -* -* This source code is licensed under the BSD-style license found in the -* LICENSE file in the root directory of this source tree. An additional grant -* of patent rights can be found in the PATENTS file in the same directory. -* -* -*/ -'use strict'; - - - - - - - - - - - - -const BaseReporter = require('./BaseReporter');var _require = - -require('jest-util');const clearLine = _require.clearLine;var _require2 = -require('istanbul-api');const createReporter = _require2.createReporter; -const chalk = require('chalk'); -const fs = require('fs'); -const generateEmptyCoverage = require('../generateEmptyCoverage'); -const isCI = require('is-ci'); -const istanbulCoverage = require('istanbul-lib-coverage'); - -const FAIL_COLOR = chalk.bold.red; -const RUNNING_TEST_COLOR = chalk.bold.dim; - -const isInteractive = process.stdout.isTTY && !isCI; - -class CoverageReporter extends BaseReporter { - - - constructor() { - super(); - this._coverageMap = istanbulCoverage.createCoverageMap({}); - } - - onTestResult( - config, - testResult, - aggregatedResults) - { - if (testResult.coverage) { - this._coverageMap.merge(testResult.coverage); - } - } - - onRunComplete( - config, - aggregatedResults, - runnerContext) - { - this._addUntestedFiles(config, runnerContext); - const reporter = createReporter(); - try { - if (config.coverageDirectory) { - reporter.dir = config.coverageDirectory; - } - - let coverageReporters = config.coverageReporters || []; - if ( - !config.useStderr && - coverageReporters.length && - coverageReporters.indexOf('text') === -1) - { - coverageReporters = coverageReporters.concat(['text-summary']); - } - - reporter.addAll(coverageReporters); - reporter.write(this._coverageMap); - } catch (e) { - console.error(chalk.red(` - Failed to write coverage reports: - ERROR: ${ e.toString() } - STACK: ${ e.stack } - `)); - } - - this._checkThreshold(config); - } - - _addUntestedFiles(config, runnerContext) { - if (config.collectCoverageFrom && config.collectCoverageFrom.length) { - if (isInteractive) { - process.stderr.write(RUNNING_TEST_COLOR( - 'Running coverage on untested files...')); - - } - const files = runnerContext.hasteFS.matchFilesWithGlob( - config.collectCoverageFrom, - config.rootDir); - - - files.forEach(filename => { - if (!this._coverageMap.data[filename]) { - try { - const source = fs.readFileSync(filename).toString(); - const coverage = generateEmptyCoverage(source, filename, config); - if (coverage) { - this._coverageMap.addFileCoverage(coverage); - } - } catch (e) { - console.error(chalk.red(` - Failed to collect coverage from ${ filename } - ERROR: ${ e } - STACK: ${ e.stack } - `)); - } - } - }); - if (isInteractive) { - clearLine(process.stderr); - } - } - } - - _checkThreshold(config) { - if (config.coverageThreshold) { - const results = this._coverageMap.getCoverageSummary().toJSON(); - - function check(name, thresholds, actuals) { - return [ - 'statements', - 'branches', - 'lines', - 'functions']. - reduce((errors, key) => { - const actual = actuals[key].pct; - const actualUncovered = actuals[key].total - actuals[key].covered; - const threshold = thresholds[key]; - - if (threshold != null) { - if (threshold < 0) { - if (threshold * -1 < actualUncovered) { - errors.push( - `Jest: Uncovered count for ${ key } (${ actualUncovered })` + - `exceeds ${ name } threshold (${ -1 * threshold })`); - - } - } else if (actual < threshold) { - errors.push( - `Jest: Coverage for ${ key } (${ actual }` + - `%) does not meet ${ name } threshold (${ threshold }%)`); - - } - } - return errors; - }, []); - } - const errors = check( - 'global', - config.coverageThreshold.global, - results); - - - if (errors.length > 0) { - this.log(`${ FAIL_COLOR(errors.join('\n')) }`); - this._setError(new Error(errors.join('\n'))); - } - } - } - - // Only exposed for the internal runner. Should not be used - getCoverageMap() { - return this._coverageMap; - }} - - -module.exports = CoverageReporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/DefaultReporter.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/DefaultReporter.js deleted file mode 100644 index b4ec29c29..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/DefaultReporter.js +++ /dev/null @@ -1,168 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -/* global stream$Writable, tty$WriteStream */ - -'use strict'; - - - - - -const BaseReporter = require('./BaseReporter'); -const Status = require('./Status');var _require = - -require('jest-util');const clearLine = _require.clearLine; -const chalk = require('chalk'); -const getConsoleOutput = require('./getConsoleOutput'); -const getResultHeader = require('./getResultHeader'); -const isCI = require('is-ci'); - - - -const TITLE_BULLET = chalk.bold('\u25cf '); - -const isInteractive = process.stdin.isTTY && !isCI; - -class DefaultReporter extends BaseReporter { - // ANSI clear sequence for the last printed status - - - - - - - - constructor() { - super(); - this._clear = ''; - this._out = process.stdout.write.bind(process.stdout); - this._err = process.stderr.write.bind(process.stderr); - this._status = new Status(); - this._wrapStdio(process.stdout); - this._wrapStdio(process.stderr); - this._status.onChange(() => { - this._clearStatus(); - this._printStatus(); - }); - } - - _wrapStdio(stream) { - const originalWrite = stream.write; - - let buffer = []; - let timeout = null; - - const doFlush = () => { - const string = buffer.join(''); - buffer = []; - // This is to avoid conflicts between random output and status text - this._clearStatus(); - originalWrite.call(stream, string); - this._printStatus(); - }; - - const flush = () => { - // If the process blows up no errors would be printed. - // There should be a smart way to buffer stderr, but for now - // we just won't buffer it. - if (stream === process.stderr) { - doFlush(); - } else { - if (!timeout) { - timeout = setTimeout(() => { - doFlush(); - timeout = null; - }, 100); - } - } - }; - - // $FlowFixMe - stream.write = chunk => { - buffer.push(chunk); - flush(); - return true; - }; - } - - _clearStatus() { - if (isInteractive) { - this._out(this._clear); - } - } - - _printStatus() {var _status$get = - this._status.get();const content = _status$get.content,clear = _status$get.clear; - this._clear = clear; - if (isInteractive) { - this._out(content); - } - } - - onRunStart( - config, - aggregatedResults, - runnerContext, - options) - { - this._status.runStarted(aggregatedResults, options); - } - - onTestStart(config, testPath) { - this._status.testStarted(testPath, config); - } - - onRunComplete() { - this._status.runFinished(); - // $FlowFixMe - process.stdout.write = this._out; - // $FlowFixMe - process.stderr.write = this._err; - clearLine(process.stderr); - } - - onTestResult( - config, - testResult, - aggregatedResults) - { - this._status.testFinished(config, testResult, aggregatedResults); - this._printTestFileSummary(testResult.testFilePath, config, testResult); - } - - _printTestFileSummary( - testPath, - config, - result) - { - if (!result.skipped) { - this.log(getResultHeader(result, config)); - - const consoleBuffer = result.console; - if (consoleBuffer && consoleBuffer.length) { - this.log( - ' ' + TITLE_BULLET + 'Console\n\n' + - getConsoleOutput( - config.rootDir, - !!config.verbose, - consoleBuffer)); - - - } - - if (result.failureMessage) { - this.log(result.failureMessage); - } - } - }} - - -module.exports = DefaultReporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/NotifyReporter.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/NotifyReporter.js deleted file mode 100644 index e831e790a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/NotifyReporter.js +++ /dev/null @@ -1,53 +0,0 @@ -/** -* Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -* -* This source code is licensed under the BSD-style license found in the -* LICENSE file in the root directory of this source tree. An additional grant -* of patent rights can be found in the PATENTS file in the same directory. -* -* -*/ -'use strict'; - - - - -const BaseReporter = require('./BaseReporter'); -const notifier = require('node-notifier'); -const path = require('path'); -const util = require('util'); - -const isDarwin = process.platform === 'darwin'; - -const icon = path.resolve(__dirname, '../assets/jest_logo.png'); - -class NotifyReporter extends BaseReporter { - onRunComplete(config, result) { - let title; - let message; - const success = result.numFailedTests === 0 && - result.numRuntimeErrorTestSuites === 0; - - if (success) { - title = util.format('%d%% Passed', 100); - message = util.format( - (isDarwin ? '\u2705 ' : '') + '%d tests passed', - result.numPassedTests); - - } else { - title = util.format( - '%d%% Failed', - Math.ceil(result.numFailedTests / result.numTotalTests * 100)); - - message = util.format( - (isDarwin ? '\u26D4\uFE0F ' : '') + '%d of %d tests failed', - result.numFailedTests, - result.numTotalTests); - - } - - notifier.notify({ icon, message, title }); - }} - - -module.exports = NotifyReporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/Status.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/Status.js deleted file mode 100644 index e4bd64561..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/Status.js +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict';var _require = - - - - - -require('./utils');const getSummary = _require.getSummary,trimAndFormatPath = _require.trimAndFormatPath,wrapAnsiString = _require.wrapAnsiString; -const chalk = require('chalk'); - -const RUNNING_TEXT = ' RUNS '; -const RUNNING = chalk.reset.inverse.yellow.bold(RUNNING_TEXT) + ' '; - -/** - * This class is a perf optimization for sorting the list of currently - * running tests. It tries to keep tests in the same positions without - * shifting the whole list. - */ -class CurrentTestList { - - - constructor() { - this._array = []; - } - - add(testPath, config) { - const index = this._array.indexOf(null); - const record = { config, testPath }; - if (index !== -1) { - this._array[index] = record; - } else { - this._array.push(record); - } - } - - delete(testPath) { - const record = this._array.find( - record => record && record.testPath === testPath); - - this._array[this._array.indexOf(record || null)] = null; - } - - get() { - return this._array; - }} - - -/** - * A class that generates the CLI status of currently running tests - * and also provides an ANSI escape sequence to remove status lines - * from the terminal. - */ -class Status { - - - - - - - - - - - - - constructor() { - this._cache = null; - this._currentTests = new CurrentTestList(); - this._done = false; - this._emitScheduled = false; - this._estimatedTime = 0; - this._height = 0; - this._showStatus = false; - } - - onChange(callback) { - this._callback = callback; - } - - runStarted( - aggregatedResults, - options) - { - this._estimatedTime = options && options.estimatedTime || 0; - this._showStatus = options && options.showStatus; - this._interval = setInterval(() => this._tick(), 1000); - this._aggregatedResults = aggregatedResults; - this._debouncedEmit(); - } - - runFinished() { - this._done = true; - clearInterval(this._interval); - this._emit(); - } - - testStarted(testPath, config) { - this._currentTests.add(testPath, config); - if (!this._showStatus) { - this._emit(); - } else { - this._debouncedEmit(); - } - } - - testFinished( - config, - testResult, - aggregatedResults) - {const - testFilePath = testResult.testFilePath; - this._aggregatedResults = aggregatedResults; - this._currentTests.delete(testFilePath); - this._debouncedEmit(); - } - - get() { - if (this._cache) { - return this._cache; - } - - if (this._done) { - return { clear: '', content: '' }; - } - - // $FlowFixMe - const width = process.stdout.columns; - let content = '\n'; - this._currentTests.get().forEach(record => { - if (record) {const - config = record.config,testPath = record.testPath; - content += wrapAnsiString( - RUNNING + trimAndFormatPath( - RUNNING_TEXT.length + 1, - config, - testPath, - width), - - width) + - '\n'; - } - }); - - if (this._showStatus && this._aggregatedResults) { - content += '\n' + getSummary( - this._aggregatedResults, - { - estimatedTime: this._estimatedTime, - roundTime: true, - width }); - - - } - - let height = 0; - - for (let i = 0; i < content.length; i++) { - if (content[i] === '\n') { - height++; - } - } - - const clear = '\r\x1B[K\r\x1B[1A'.repeat(height); - return this._cache = { clear, content }; - } - - _emit() { - this._cache = null; - this._lastUpdated = Date.now(); - this._callback(); - } - - _debouncedEmit() { - if (!this._emitScheduled) { - // Perf optimization to avoid two separate renders When - // one test finishes and another test starts executing. - this._emitScheduled = true; - setTimeout(() => { - this._emit(); - this._emitScheduled = false; - }, 100); - } - } - - _tick() { - this._debouncedEmit(); - }} - - - -module.exports = Status; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/SummaryReporter.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/SummaryReporter.js deleted file mode 100644 index e0493f29f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/SummaryReporter.js +++ /dev/null @@ -1,222 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - -const BaseReporter = require('./BaseReporter');var _require = - -require('./utils');const getSummary = _require.getSummary,pluralize = _require.pluralize; -const chalk = require('chalk'); -const getResultHeader = require('./getResultHeader'); - -const ARROW = ' \u203A '; -const FAIL_COLOR = chalk.bold.red; -const SNAPSHOT_ADDED = chalk.bold.green; -const SNAPSHOT_NOTE = chalk.dim; -const SNAPSHOT_REMOVED = chalk.bold.red; -const SNAPSHOT_SUMMARY = chalk.bold; -const SNAPSHOT_UPDATED = chalk.bold.green; -const TEST_SUMMARY_THRESHOLD = 20; - -const NPM_EVENTS = new Set([ -'prepublish', -'publish', -'postpublish', -'preinstall', -'install', -'postinstall', -'preuninstall', -'uninstall', -'postuninstall', -'preversion', -'version', -'postversion', -'pretest', -'test', -'posttest', -'prestop', -'stop', -'poststop', -'prestart', -'start', -'poststart', -'prerestart', -'restart', -'postrestart']); - - -class SummareReporter extends BaseReporter { - - - - constructor() { - super(); - this._estimatedTime = 0; - } - - // If we write more than one character at a time it is possible that - // Node.js exits in the middle of printing the result. This was first observed - // in Node.js 0.10 and still persists in Node.js 6.7+. - // Let's print the test failure summary character by character which is safer - // when hundreds of tests are failing. - _write(string) { - for (let i = 0; i < string.length; i++) { - process.stderr.write(string.charAt(i)); - } - } - - onRunStart( - config, - aggregatedResults, - runnerContext, - options) - { - super.onRunStart(config, aggregatedResults, runnerContext, options); - this._estimatedTime = options.estimatedTime; - } - - onRunComplete( - config, - aggregatedResults, - runnerContext) - {const - numTotalTestSuites = aggregatedResults.numTotalTestSuites,testResults = aggregatedResults.testResults,wasInterrupted = aggregatedResults.wasInterrupted; - if (numTotalTestSuites) { - const lastResult = testResults[testResults.length - 1]; - // Print a newline if the last test did not fail to line up newlines - // similar to when an error would have been thrown in the test. - if ( - !config.verbose && - lastResult && - !lastResult.numFailingTests && - !lastResult.testExecError) - { - this.log(''); - } - - this._printSummary(aggregatedResults, config); - this._printSnapshotSummary(aggregatedResults.snapshot, config); - - if (numTotalTestSuites) { - const testSummary = wasInterrupted ? - chalk.bold.red('Test run was interrupted.') : - runnerContext.getTestSummary(); - this.log( - getSummary(aggregatedResults, { - estimatedTime: this._estimatedTime }) + - '\n' + testSummary); - - } - } - } - - _printSnapshotSummary(snapshots, config) { - if ( - snapshots.added || - snapshots.filesRemoved || - snapshots.unchecked || - snapshots.unmatched || - snapshots.updated) - { - let updateCommand; - const event = process.env.npm_lifecycle_event; - const prefix = NPM_EVENTS.has(event) ? '' : 'run '; - if (config.watch) { - updateCommand = 'press `u`'; - } else if (event) { - updateCommand = `run with \`npm ${ prefix + event } -- -u\``; - } else { - updateCommand = 're-run with `-u`'; - } - - this.log(SNAPSHOT_SUMMARY('Snapshot Summary')); - if (snapshots.added) { - this.log( - SNAPSHOT_ADDED(ARROW + pluralize('snapshot', snapshots.added)) + - ` written in ${ pluralize('test suite', snapshots.filesAdded) }.`); - - } - - if (snapshots.unmatched) { - this.log( - FAIL_COLOR(ARROW + pluralize('snapshot test', snapshots.unmatched)) + - ` failed in ${ pluralize('test suite', snapshots.filesUnmatched) }. ` + - SNAPSHOT_NOTE( - 'Inspect your code changes or ' + - updateCommand + ' to update them.')); - - - } - - if (snapshots.updated) { - this.log( - SNAPSHOT_UPDATED(ARROW + pluralize('snapshot', snapshots.updated)) + - ` updated in ${ pluralize('test suite', snapshots.filesUpdated) }.`); - - } - - if (snapshots.filesRemoved) { - this.log( - SNAPSHOT_REMOVED(ARROW + pluralize( - 'obsolete snapshot file', - snapshots.filesRemoved)) + ( - - snapshots.didUpdate ? - ' removed.' : - ' found, ' + updateCommand + ' to remove ' + ( - snapshots.filesRemoved === 1 ? 'it' : 'them.') + '.')); - - } - - if (snapshots.unchecked) { - this.log( - FAIL_COLOR(ARROW + pluralize( - 'obsolete snapshot', - snapshots.unchecked)) + ( - - snapshots.didUpdate ? - ' removed.' : - ' found, ' + updateCommand + ' to remove ' + ( - snapshots.filesRemoved === 1 ? 'it' : 'them') + '.')); - - } - - this.log(''); // print empty line - } - } - - _printSummary(aggregatedResults, config) { - // If there were any failing tests and there was a large number of tests - // executed, re-print the failing results at the end of execution output. - const failedTests = aggregatedResults.numFailedTests; - const runtimeErrors = aggregatedResults.numRuntimeErrorTestSuites; - if ( - failedTests + runtimeErrors > 0 && - aggregatedResults.numTotalTestSuites > TEST_SUMMARY_THRESHOLD) - { - this.log(chalk.bold('Summary of all failing tests')); - aggregatedResults.testResults.forEach(testResult => {const - failureMessage = testResult.failureMessage; - if (failureMessage) { - this._write( - getResultHeader(testResult, config) + '\n' + - failureMessage + '\n'); - - } - }); - this.log(''); // print empty line - } - }} - - -module.exports = SummareReporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/VerboseReporter.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/VerboseReporter.js deleted file mode 100644 index 00c51386a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/VerboseReporter.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - - - - - -const DefaultReporter = require('./DefaultReporter'); -const chalk = require('chalk'); -const isWindows = process.platform === 'win32'; - -class VerboseReporter extends DefaultReporter { - - static groupTestsBySuites(testResults) { - const root = { suites: [], tests: [], title: '' }; - testResults.forEach(testResult => { - let targetSuite = root; - - // Find the target suite for this test, - // creating nested suites as necessary. - for (const title of testResult.ancestorTitles) { - let matchingSuite = targetSuite.suites.find(s => s.title === title); - if (!matchingSuite) { - matchingSuite = { suites: [], tests: [], title }; - targetSuite.suites.push(matchingSuite); - } - targetSuite = matchingSuite; - } - - targetSuite.tests.push(testResult); - }); - return root; - } - - onTestResult( - config, - result, - aggregatedResults) - { - super.onTestResult(config, result, aggregatedResults); - if (!result.testExecError && !result.skipped) { - this._logTestResults(result.testResults); - } - } - - _logTestResults(testResults) { - this._logSuite(VerboseReporter.groupTestsBySuites(testResults), 0); - this._logLine(); - } - - _logSuite(suite, indentLevel) { - if (suite.title) { - this._logLine(suite.title, indentLevel); - } - - suite.tests.forEach(test => this._logTest(test, indentLevel + 1)); - suite.suites.forEach(suite => this._logSuite(suite, indentLevel + 1)); - } - - _getIcon(status) { - if (status === 'failed') { - return chalk.red(isWindows ? '\u00D7' : '\u2715'); - } else if (status === 'pending') { - return chalk.yellow('\u25CB'); - } else { - return chalk.green(isWindows ? '\u221A' : '\u2713'); - } - } - - _logTest(test, indentLevel) { - const status = this._getIcon(test.status); - const time = test.duration ? - ` (${ test.duration.toFixed(0) }ms)` : - ''; - this._logLine(status + ' ' + chalk.dim(test.title + time), indentLevel); - } - - _logLine(str, indentLevel) { - const indentation = ' '.repeat(indentLevel || 0); - this.log(indentation + (str || '')); - }} - - - -module.exports = VerboseReporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/getConsoleOutput.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/getConsoleOutput.js deleted file mode 100644 index 15d43eaf2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/getConsoleOutput.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - -const chalk = require('chalk'); -const path = require('path'); - -module.exports = (root, verbose, buffer) => { - const TITLE_INDENT = verbose ? ' ' : ' '; - const CONSOLE_INDENT = TITLE_INDENT + ' '; - - return buffer.reduce((output, _ref) => {let type = _ref.type,message = _ref.message,origin = _ref.origin; - origin = path.relative(root, origin); - message = message. - split(/\n/). - map(line => CONSOLE_INDENT + line). - join('\n'); - - let typeMessage = 'console.' + type; - if (type === 'warn') { - message = chalk.yellow(message); - typeMessage = chalk.yellow(typeMessage); - } else if (type === 'error') { - message = chalk.red(message); - typeMessage = chalk.red(typeMessage); - } - - return ( - output + TITLE_INDENT + chalk.dim(typeMessage) + - ' ' + chalk.dim(origin) + '\n' + message + '\n'); - - }, ''); -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/getResultHeader.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/getResultHeader.js deleted file mode 100644 index 1645fac5c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/getResultHeader.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict';var _require = - - - - -require('./utils');const formatTestPath = _require.formatTestPath; -const chalk = require('chalk'); - -const LONG_TEST_COLOR = chalk.reset.bold.bgRed; -// Explicitly reset for these messages since they can get written out in the -// middle of error logging -const FAIL = chalk.reset.inverse.bold.red(' FAIL '); -const PASS = chalk.reset.inverse.bold.green(' PASS '); - -module.exports = (result, config) => { - const testPath = result.testFilePath; - const status = result.numFailingTests > 0 || result.testExecError ? - FAIL : - PASS; - - const runTime = result.perfStats ? - (result.perfStats.end - result.perfStats.start) / 1000 : - null; - - const testDetail = []; - if (runTime !== null && runTime > 5) { - testDetail.push(LONG_TEST_COLOR(runTime + 's')); - } - - if (result.memoryUsage) { - const toMB = bytes => Math.floor(bytes / 1024 / 1024); - testDetail.push(`${ toMB(result.memoryUsage) } MB heap size`); - } - - return ( - `${ status } ${ formatTestPath(config, testPath) }` + ( - testDetail.length ? ` (${ testDetail.join(', ') })` : '')); - -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/utils.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/utils.js deleted file mode 100644 index 37c5611b0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/reporters/utils.js +++ /dev/null @@ -1,262 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict';var _slicedToArray = function () {function sliceIterator(arr, i) {var _arr = [];var _n = true;var _d = false;var _e = undefined;try {for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {_arr.push(_s.value);if (i && _arr.length === i) break;}} catch (err) {_d = true;_e = err;} finally {try {if (!_n && _i["return"]) _i["return"]();} finally {if (_d) throw _e;}}return _arr;}return function (arr, i) {if (Array.isArray(arr)) {return arr;} else if (Symbol.iterator in Object(arr)) {return sliceIterator(arr, i);} else {throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}(); - - - - -const chalk = require('chalk'); -const path = require('path'); - - - - - - - -const PROGRESS_BAR_WIDTH = 40; - -const trimAndFormatPath = ( -pad, -config, -testPath, -columns) => -{ - const maxLength = columns - pad; - const relative = relativePath(config, testPath);const - basename = relative.basename;let - dirname = relative.dirname; - - // length is ok - if ((dirname + path.sep + basename).length <= maxLength) { - return chalk.dim(dirname + path.sep) + chalk.bold(basename); - } - - // we can fit trimmed dirname and full basename - const basenameLength = basename.length; - if (basenameLength + 4 < maxLength) { - const dirnameLength = maxLength - 4 - basenameLength; - dirname = '...' + - dirname.slice(dirname.length - dirnameLength, dirname.length); - return chalk.dim(dirname + path.sep) + chalk.bold(basename); - } - - if (basenameLength + 4 === maxLength) { - return chalk.dim('...' + path.sep) + chalk.bold(basename); - } - - // can't fit dirname, but can fit trimmed basename - return chalk.bold( - '...' + - basename.slice(basename.length - maxLength - 4, basename.length)); - -}; - -const formatTestPath = (config, testPath) => {var _relativePath = - relativePath(config, testPath);const dirname = _relativePath.dirname,basename = _relativePath.basename; - return chalk.dim(dirname + path.sep) + chalk.bold(basename); -}; - -const relativePath = (config, testPath) => { - testPath = path.relative(config.rootDir, testPath); - const dirname = path.dirname(testPath); - const basename = path.basename(testPath); - return { basename, dirname }; -}; - -const pluralize = (word, count) => -`${ count } ${ word }${ count === 1 ? '' : 's' }`; - -const getSummary = ( -aggregatedResults, -options) => -{ - let runTime = (Date.now() - aggregatedResults.startTime) / 1000; - if (options && options.roundTime) { - runTime = Math.floor(runTime); - } - - const estimatedTime = options && options.estimatedTime || 0; - const snapshotResults = aggregatedResults.snapshot; - const snapshotsAdded = snapshotResults.added; - const snapshotsFailed = snapshotResults.unmatched; - const snapshotsPassed = snapshotResults.matched; - const snapshotsTotal = snapshotResults.total; - const snapshotsUpdated = snapshotResults.updated; - const suitesFailed = aggregatedResults.numFailedTestSuites; - const suitesPassed = aggregatedResults.numPassedTestSuites; - const suitesPending = aggregatedResults.numPendingTestSuites; - const suitesRun = suitesFailed + suitesPassed; - const suitesTotal = aggregatedResults.numTotalTestSuites; - const testsFailed = aggregatedResults.numFailedTests; - const testsPassed = aggregatedResults.numPassedTests; - const testsPending = aggregatedResults.numPendingTests; - const testsTotal = aggregatedResults.numTotalTests; - const width = options && options.width || 0; - - const suites = - chalk.bold('Test Suites: ') + ( - suitesFailed ? chalk.bold.red(`${ suitesFailed } failed`) + ', ' : '') + ( - suitesPending ? - chalk.bold.yellow(`${ suitesPending } skipped`) + ', ' : - '') + ( - - suitesPassed ? - chalk.bold.green(`${ suitesPassed } passed`) + ', ' : - '') + ( - - suitesRun !== suitesTotal ? - suitesRun + ' of ' + suitesTotal : - suitesTotal) + - ` total`; - - const tests = - chalk.bold('Tests: ') + ( - testsFailed ? chalk.bold.red(`${ testsFailed } failed`) + ', ' : '') + ( - testsPending ? - chalk.bold.yellow(`${ testsPending } skipped`) + ', ' : - '') + ( - - testsPassed ? - chalk.bold.green(`${ testsPassed } passed`) + ', ' : - '') + - - `${ testsTotal } total`; - - const snapshots = - chalk.bold('Snapshots: ') + ( - snapshotsFailed ? - chalk.bold.red(`${ snapshotsFailed } failed`) + ', ' : - '') + ( - - snapshotsUpdated ? - chalk.bold.green(`${ snapshotsUpdated } updated`) + ', ' : - '') + ( - - snapshotsAdded ? - chalk.bold.green(`${ snapshotsAdded } added`) + ', ' : - '') + ( - - snapshotsPassed ? - chalk.bold.green(`${ snapshotsPassed } passed`) + ', ' : - '') + - - `${ snapshotsTotal } total`; - - const time = renderTime(runTime, estimatedTime, width); - return [suites, tests, snapshots, time].join('\n'); -}; - -const renderTime = ( -runTime, -estimatedTime, -width) => -{ - // If we are more than one second over the estimated time, highlight it. - const renderedTime = estimatedTime && runTime >= estimatedTime + 1 ? - chalk.bold.yellow(runTime + 's') : - runTime + 's'; - let time = chalk.bold(`Time:`) + ` ${ renderedTime }`; - if (runTime < estimatedTime) { - time += `, estimated ${ estimatedTime }s`; - } - - // Only show a progress bar if the test run is actually going to take - // some time. - if ( - estimatedTime > 2 && - runTime < estimatedTime && - width) - { - const availableWidth = Math.min(PROGRESS_BAR_WIDTH, width); - const length = Math.min( - Math.floor(runTime / estimatedTime * availableWidth), - availableWidth); - - if (availableWidth >= 2) { - time += - '\n' + - chalk.green.inverse(' ').repeat(length) + - chalk.white.inverse(' ').repeat(availableWidth - length); - } - } - return time; -}; - -// word-wrap a string that contains ANSI escape sequences. -// ANSI escape sequences do not add to the string length. -const wrapAnsiString = (string, terminalWidth) => { - if (terminalWidth === 0) { - // if the terminal width is zero, don't bother word-wrapping - return string; - } - - const ANSI_REGEXP = /[\u001b\u009b]\[\d{1,2}m/g; - const tokens = []; - let lastIndex = 0; - let match; - - while (match = ANSI_REGEXP.exec(string)) { - const ansi = match[0]; - const index = match['index']; - if (index != lastIndex) { - tokens.push(['string', string.slice(lastIndex, index)]); - } - tokens.push(['ansi', ansi]); - lastIndex = index + ansi.length; - } - - if (lastIndex != string.length - 1) { - tokens.push(['string', string.slice(lastIndex, string.length)]); - } - - let lastLineLength = 0; - - return tokens.reduce( - (lines, _ref) => {var _ref2 = _slicedToArray(_ref, 2);let kind = _ref2[0],token = _ref2[1]; - if (kind === 'string') { - if (lastLineLength + token.length > terminalWidth) { - - while (token.length) { - const chunk = token.slice(0, terminalWidth - lastLineLength); - const remaining = token.slice( - terminalWidth - lastLineLength, - token.length); - - lines[lines.length - 1] += chunk; - lastLineLength += chunk.length; - token = remaining; - if (token.length) { - lines.push(''); - lastLineLength = 0; - } - } - } else { - lines[lines.length - 1] += token; - lastLineLength += token.length; - } - } else { - lines[lines.length - 1] += token; - } - - return lines; - }, - ['']). - join('\n'); -}; - -module.exports = { - formatTestPath, - getSummary, - pluralize, - relativePath, - trimAndFormatPath, - wrapAnsiString }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/runTest.js b/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/runTest.js deleted file mode 100644 index 20cf032fa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/build/runTest.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - -const BufferedConsole = require('./lib/BufferedConsole'); -const Console = require('jest-util').Console; -const NullConsole = require('jest-util').NullConsole; - -const getConsoleOutput = require('./reporters/getConsoleOutput'); - -function runTest(path, config, resolver) { - /* $FlowFixMe */ - const TestEnvironment = require(config.testEnvironment); - /* $FlowFixMe */ - const TestRunner = require(config.testRunner); - /* $FlowFixMe */ - const ModuleLoader = require(config.moduleLoader || 'jest-runtime'); - - const env = new TestEnvironment(config); - const TestConsole = - config.verbose ? - Console : - config.silent ? - NullConsole : - BufferedConsole; - - const testConsole = env.global.console = new TestConsole( - config.useStderr ? process.stderr : process.stdout, - process.stderr, - (type, message) => getConsoleOutput( - config.rootDir, - !!config.verbose, - // 4 = the console call is burried 4 stack frames deep - BufferedConsole.write([], type, message, 4))); - - - const runtime = new ModuleLoader(config, env, resolver); - const start = Date.now(); - return TestRunner(config, env, runtime, path). - then(result => { - const testCount = - result.numPassingTests + - result.numFailingTests + - result.numPendingTests; - result.perfStats = { end: Date.now(), start }; - result.testFilePath = path; - result.coverage = runtime.getAllCoverageInfo(); - result.console = testConsole.getBuffer(); - result.skipped = testCount === result.numPendingTests; - return result; - }). - then( - result => Promise.resolve().then(() => { - env.dispose(); - if (config.logHeapUsage) { - if (global.gc) { - global.gc(); - } - result.memoryUsage = process.memoryUsage().heapUsed; - } - return result; - }), - err => Promise.resolve().then(() => { - env.dispose(); - throw err; - })); - -} - -module.exports = runTest; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-cli/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-cli/package.json deleted file mode 100644 index 44c0cd094..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-cli/package.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "_args": [ - [ - "jest-cli", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6" - ] - ], - "_from": "jest-cli@latest", - "_id": "jest-cli@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest-cli", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/jest-cli-17.0.3.tgz_1479368471902_0.6936498954892159" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-cli", - "raw": "jest-cli", - "rawSpec": "", - "scope": null, - "spec": "latest", - "type": "tag" - }, - "_requiredBy": [ - "#DEV:/" - ], - "_resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-17.0.3.tgz", - "_shasum": "700b8c02a9ea0ec9eab0cd5a9fd42d8a858ce146", - "_shrinkwrap": null, - "_spec": "jest-cli", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6", - "bin": { - "jest": "./bin/jest.js" - }, - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "ansi-escapes": "^1.4.0", - "callsites": "^2.0.0", - "chalk": "^1.1.1", - "graceful-fs": "^4.1.6", - "is-ci": "^1.0.9", - "istanbul-api": "^1.0.0-aplha.10", - "istanbul-lib-coverage": "^1.0.0", - "istanbul-lib-instrument": "^1.1.1", - "jest-changed-files": "^17.0.2", - "jest-config": "^17.0.3", - "jest-environment-jsdom": "^17.0.2", - "jest-file-exists": "^17.0.0", - "jest-haste-map": "^17.0.3", - "jest-jasmine2": "^17.0.3", - "jest-mock": "^17.0.2", - "jest-resolve": "^17.0.3", - "jest-resolve-dependencies": "^17.0.3", - "jest-runtime": "^17.0.3", - "jest-snapshot": "^17.0.3", - "jest-util": "^17.0.2", - "json-stable-stringify": "^1.0.0", - "node-notifier": "^4.6.1", - "sane": "~1.4.1", - "strip-ansi": "^3.0.1", - "throat": "^3.0.0", - "which": "^1.1.1", - "worker-farm": "^1.3.1", - "yargs": "^6.3.0" - }, - "description": "Painless JavaScript Testing.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "700b8c02a9ea0ec9eab0cd5a9fd42d8a858ce146", - "tarball": "https://registry.npmjs.org/jest-cli/-/jest-cli-17.0.3.tgz" - }, - "engines": { - "node": ">= 4" - }, - "homepage": "http://facebook.github.io/jest/", - "keywords": [ - "facebook", - "jest", - "test", - "unit", - "jasmine", - "mock" - ], - "license": "BSD-3-Clause", - "main": "build/jest.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "lbljeffmo@gmail.com", - "name": "jeffmo" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - }, - { - "email": "paul@oshannessy.com", - "name": "zpao" - } - ], - "name": "jest-cli", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "./bin/jest.js" - }, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-config/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-config/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-config/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/constants.js b/fundamentals/bug-challenge-es6/node_modules/jest-config/build/constants.js deleted file mode 100644 index 18547c109..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/constants.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -const path = require('path'); - -exports.NODE_MODULES = path.sep + 'node_modules' + path.sep; -exports.DEFAULT_JS_PATTERN = '^.+\\.jsx?$'; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/defaults.js b/fundamentals/bug-challenge-es6/node_modules/jest-config/build/defaults.js deleted file mode 100644 index 4ea79f907..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/defaults.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - -const constants = require('./constants'); -const os = require('os'); -const path = require('path');var _require = -require('jest-util');const replacePathSepForRegex = _require.replacePathSepForRegex; - -const NODE_MODULES_REGEXP = replacePathSepForRegex(constants.NODE_MODULES); - -module.exports = { - automock: false, - bail: false, - browser: false, - cacheDirectory: path.join(os.tmpdir(), 'jest'), - coveragePathIgnorePatterns: [NODE_MODULES_REGEXP], - coverageReporters: ['json', 'text', 'lcov', 'clover'], - expand: false, - globals: {}, - haste: { - providesModuleNodeModules: [] }, - - mocksPattern: '__mocks__', - moduleDirectories: ['node_modules'], - moduleFileExtensions: [ - 'js', - 'json', - 'jsx', - 'node'], - - moduleNameMapper: {}, - modulePathIgnorePatterns: [], - noStackTrace: false, - notify: false, - preset: null, - resetMocks: false, - resetModules: false, - snapshotSerializers: [], - testEnvironment: 'jest-environment-jsdom', - testPathDirs: [''], - testPathIgnorePatterns: [NODE_MODULES_REGEXP], - testRegex: '(/__tests__/.*|\\.(test|spec))\\.jsx?$', - testURL: 'about:blank', - timers: 'real', - transformIgnorePatterns: [NODE_MODULES_REGEXP], - useStderr: false, - verbose: null, - watch: false }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-config/build/index.js deleted file mode 100644 index ffaaee83d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/index.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - -const loadFromFile = require('./loadFromFile'); -const loadFromPackage = require('./loadFromPackage'); -const normalize = require('./normalize'); -const path = require('path'); -const setFromArgv = require('./setFromArgv'); - -const readConfig = (argv, packageRoot) => -readRawConfig(argv, packageRoot). -then(config => Object.freeze(setFromArgv(config, argv))); - -const parseConfig = argv => { - if (argv.config && typeof argv.config === 'string') { - // If the passed in value looks like JSON, treat it as an object. - if (argv.config[0] === '{' && argv.config[argv.config.length - 1] === '}') { - return JSON.parse(argv.config); - } - } - return argv.config; -}; - -const readRawConfig = (argv, root) => { - const rawConfig = parseConfig(argv); - - if (typeof rawConfig === 'string') { - return loadFromFile(path.resolve(process.cwd(), rawConfig)); - } - - if (typeof rawConfig === 'object') { - const config = Object.assign({}, rawConfig); - config.rootDir = config.rootDir || root; - return Promise.resolve(normalize(config, argv)); - } - - return loadFromPackage(path.join(root, 'package.json'), argv). - then(config => config || normalize({ rootDir: root }, argv)); -}; - -module.exports = { - normalize, - readConfig }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/lib/promisify.js b/fundamentals/bug-challenge-es6/node_modules/jest-config/build/lib/promisify.js deleted file mode 100644 index 21d20cfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/lib/promisify.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ -'use strict'; - -module.exports = function promisify(fn) { - return function () { - const args = Array.prototype.slice.call(arguments); - return new Promise((resolve, reject) => { - args.push((err, res) => { - if (err) { - reject(err); - } else { - resolve(res); - } - }); - - fn.apply(this, args); - }); - }; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/loadFromFile.js b/fundamentals/bug-challenge-es6/node_modules/jest-config/build/loadFromFile.js deleted file mode 100644 index ed350615e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/loadFromFile.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -const fs = require('fs'); -const normalize = require('./normalize'); -const path = require('path'); -const promisify = require('./lib/promisify'); - -function loadFromFile(filePath, argv) { - return promisify(fs.readFile)(filePath).then(data => { - const parse = () => { - try { - return JSON.parse(data); - } catch (e) { - throw new Error(`Jest: Failed to parse config file ${ filePath }.`); - } - }; - - const config = parse(); - config.rootDir = config.rootDir ? - path.resolve(path.dirname(filePath), config.rootDir) : - process.cwd(); - return normalize(config, argv); - }); -} - -module.exports = loadFromFile; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/loadFromPackage.js b/fundamentals/bug-challenge-es6/node_modules/jest-config/build/loadFromPackage.js deleted file mode 100644 index 2938abb28..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/loadFromPackage.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -const fs = require('fs'); -const normalize = require('./normalize'); -const path = require('path'); -const promisify = require('./lib/promisify'); - -function loadFromPackage(filePath, argv) { - return promisify(fs.access)(filePath, fs.R_OK).then( - () => { - const packageData = require(filePath); - const config = packageData.jest || {}; - const root = path.dirname(filePath); - config.rootDir = - config.rootDir ? path.resolve(root, config.rootDir) : root; - return normalize(config, argv); - }, - () => null); - -} - -module.exports = loadFromPackage; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/normalize.js b/fundamentals/bug-challenge-es6/node_modules/jest-config/build/normalize.js deleted file mode 100644 index 0c93b9b39..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/normalize.js +++ /dev/null @@ -1,435 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -'use strict'; - -const DEFAULT_CONFIG_VALUES = require('./defaults'); -const Resolver = require('jest-resolve'); - -const chalk = require('chalk'); -const constants = require('./constants'); -const path = require('path'); -const utils = require('jest-util'); - -const JSON_EXTENSION = '.json'; -const PRESET_NAME = 'jest-preset' + JSON_EXTENSION; - -const BULLET = chalk.bold('\u25cf '); -const DEPRECATION_MESSAGE = ` - - Jest changed the default configuration for tests. - - ${ chalk.bold('Configuration Documentation:') } https://facebook.github.io/jest/docs/configuration.html - ${ chalk.bold('Jest Issue Tracker:') } https://github.com/facebook/jest/issues -`; -const throwConfigurationError = message => { - throw new Error(chalk.red(message + DEPRECATION_MESSAGE)); -}; - -const logConfigurationWarning = message => { - console.warn(chalk.yellow(BULLET + message + DEPRECATION_MESSAGE)); -}; - -function _replaceRootDirTags(rootDir, config) { - switch (typeof config) { - case 'object': - if (config instanceof RegExp) { - return config; - } - - if (Array.isArray(config)) { - return config.map(item => _replaceRootDirTags(rootDir, item)); - } - - if (config !== null) { - const newConfig = {}; - for (const configKey in config) { - newConfig[configKey] = - configKey === 'rootDir' ? - config[configKey] : - _replaceRootDirTags(rootDir, config[configKey]); - } - return newConfig; - } - break; - case 'string': - if (!/^/.test(config)) { - return config; - } - - return path.resolve( - rootDir, - path.normalize('./' + config.substr(''.length)));} - - - return config; -} - -/** - * Finds the test environment to use: - * - * 1. looks for jest-environment- relative to project. - * 1. looks for jest-environment- relative to Jest. - * 1. looks for relative to project. - * 1. looks for relative to Jest. - */ -function getTestEnvironment(config) { - const env = config.testEnvironment; - let module = Resolver.findNodeModule(`jest-environment-${ env }`, { - basedir: config.rootDir }); - - if (module) { - return module; - } - - try { - return require.resolve(`jest-environment-${ env }`); - } catch (e) {} - - module = Resolver.findNodeModule(env, { basedir: config.rootDir }); - if (module) { - return module; - } - - try { - return require.resolve(env); - } catch (e) {} - - throw new Error( - `Jest: test environment "${ env }" cannot be found. Make sure the ` + - `"testEnvironment" configuration option points to an existing node module.`); - -} - -function normalize(config, argv) { - if (!argv) { - argv = {}; - } - const newConfig = {}; - - // Assert that there *is* a rootDir - if (!config.hasOwnProperty('rootDir')) { - throw new Error(`Jest: 'rootDir' config value must be specified.`); - } - - config.rootDir = path.normalize(config.rootDir); - - if (config.preset) { - const presetPath = _replaceRootDirTags(config.rootDir, config.preset); - const presetModule = Resolver.findNodeModule( - presetPath.endsWith(JSON_EXTENSION) ? - presetPath : - path.join(presetPath, PRESET_NAME), - { - basedir: config.rootDir }); - - - if (presetModule) { - const preset = require(presetModule); - if (config.setupFiles) { - config.setupFiles = preset.setupFiles.concat(config.setupFiles); - } - if (config.modulePathIgnorePatterns) { - config.modulePathIgnorePatterns = preset.modulePathIgnorePatterns. - concat(config.modulePathIgnorePatterns); - } - if (config.moduleNameMapper) { - config.moduleNameMapper = Object.assign( - {}, - preset.moduleNameMapper, - config.moduleNameMapper); - - } - // Don't show deprecation warnings if the setting comes from the preset. - if (preset.preprocessorIgnorePatterns) { - preset.transformIgnorePatterns = preset.preprocessorIgnorePatterns; - delete preset.preprocessorIgnorePatterns; - } - config = Object.assign({}, preset, config); - } else { - throw new Error( - `Jest: Preset '${ presetPath }' not found.`); - - } - } - - if (config.scriptPreprocessor && config.transform) { - throwConfigurationError( - 'Jest: `scriptPreprocessor` and `transform` cannot be used together. ' + - 'Please change your configuration to only use `transform`.'); - - } - - if (config.preprocessorIgnorePatterns && config.transformIgnorePatterns) { - throwConfigurationError( - 'Jest: `preprocessorIgnorePatterns` and `transformIgnorePatterns` ' + - 'cannot be used together. Please change your configuration to only ' + - 'use `transformIgnorePatterns`.'); - - } - - if (config.scriptPreprocessor) { - config.transform = { - '.*': config.scriptPreprocessor }; - - } - - if (config.preprocessorIgnorePatterns) { - config.transformIgnorePatterns = config.preprocessorIgnorePatterns; - } - - if ( - config.scriptPreprocessor || - config.preprocessorIgnorePatterns) - { - logConfigurationWarning( - 'The settings `scriptPreprocessor` and `preprocessorIgnorePatterns` ' + - 'were replaced by `transform` and `transformIgnorePatterns` ' + - 'which support multiple preprocessors.\n\n' + - ' Jest now treats your current settings as: \n\n' + - ` "transform": {".*": "${ config.scriptPreprocessor }"}` + ( - config.transformIgnorePatterns ? - `\n "transformIgnorePatterns": "${ config.transformIgnorePatterns }"` : - '') + - - '\n\n Please update your configuration.'); - - } - - delete config.scriptPreprocessor; - delete config.preprocessorIgnorePatterns; - - if (!config.name) { - config.name = config.rootDir.replace(/[/\\]|\s/g, '-'); - } - - if (!config.setupFiles) { - config.setupFiles = []; - } - - if (argv.testRunner) { - config.testRunner = argv.testRunner; - } - - if (argv.collectCoverageFrom) { - config.collectCoverageFrom = argv.collectCoverageFrom; - } - - if (!config.testRunner || config.testRunner === 'jasmine2') { - config.testRunner = require.resolve('jest-jasmine2'); - } else { - try { - config.testRunner = path.resolve( - config.testRunner.replace(//g, config.rootDir)); - - } catch (e) { - throw new Error( - `Jest: Invalid testRunner path: ${ config.testRunner }`); - - } - } - - if (argv.env) { - config.testEnvironment = argv.env; - } - - if (config.testEnvironment) { - config.testEnvironment = getTestEnvironment(config); - } - - let babelJest; - if (config.transform) { - const customJSPattern = Object.keys(config.transform).find(regex => { - const pattern = new RegExp(regex); - return pattern.test('foobar.js') || pattern.test('foobar.jsx'); - }); - - if (customJSPattern) { - const jsTransformer = config.transform[customJSPattern]; - if ( - jsTransformer.includes( - constants.NODE_MODULES + 'babel-jest') || - jsTransformer.includes('packages/babel-jest')) - { - babelJest = jsTransformer; - } - } - } else { - babelJest = Resolver.findNodeModule('babel-jest', { - basedir: config.rootDir }); - - if (babelJest) { - config.transform = { - [constants.DEFAULT_JS_PATTERN]: babelJest }; - - } - } - - if (babelJest) { - const polyfillPath = - Resolver.findNodeModule('babel-polyfill', { - basedir: config.rootDir }); - - if (polyfillPath) { - config.setupFiles.unshift(polyfillPath); - } - config.usesBabelJest = true; - } - - Object.keys(config).reduce((newConfig, key) => { - let value; - switch (key) { - case 'collectCoverageOnlyFrom': - value = Object.keys(config[key]).reduce((normObj, filePath) => { - filePath = path.resolve( - config.rootDir, - _replaceRootDirTags(config.rootDir, filePath)); - - normObj[filePath] = true; - return normObj; - }, {}); - break; - - case 'setupFiles': - case 'snapshotSerializers': - case 'testPathDirs': - value = config[key].map(filePath => path.resolve( - config.rootDir, - _replaceRootDirTags(config.rootDir, filePath))); - - break; - case 'collectCoverageFrom': - if (!config[key]) { - value = []; - } - - - if (!Array.isArray(config[key])) { - try { - value = JSON.parse(config[key]); - } catch (e) {} - - Array.isArray(value) || (value = [config[key]]); - } else { - value = config[key]; - } - - break; - case 'cacheDirectory': - case 'coverageDirectory': - case 'setupTestFrameworkScriptFile': - case 'testResultsProcessor': - case 'testRunner': - value = path.resolve( - config.rootDir, - _replaceRootDirTags(config.rootDir, config[key])); - - break; - - case 'moduleNameMapper': - value = Object.keys(config[key]).map(regex => [ - regex, - _replaceRootDirTags(config.rootDir, config[key][regex])]); - - break; - case 'transform': - value = Object.keys(config[key]).map(regex => [ - regex, - path.resolve( - config.rootDir, - _replaceRootDirTags(config.rootDir, config[key][regex]))]); - - - break; - - case 'coveragePathIgnorePatterns': - case 'modulePathIgnorePatterns': - case 'testPathIgnorePatterns': - case 'transformIgnorePatterns': - case 'unmockedModulePathPatterns': - // _replaceRootDirTags is specifically well-suited for substituting - // in paths (it deals with properly interpreting relative path - // separators, etc). - // - // For patterns, direct global substitution is far more ideal, so we - // special case substitutions for patterns here. - value = config[key].map(pattern => - utils.replacePathSepForRegex( - pattern.replace(//g, config.rootDir))); - - - break; - case 'automock': - case 'bail': - case 'browser': - case 'cache': - case 'collectCoverage': - case 'colors': - case 'coverageCollector': - case 'coverageReporters': - case 'coverageThreshold': - case 'globals': - case 'haste': - case 'logHeapUsage': - case 'mocksPattern': - case 'moduleDirectories': - case 'moduleFileExtensions': - case 'moduleLoader': - case 'modulePaths': - case 'name': - case 'noStackTrace': - case 'notify': - case 'persistModuleRegistryBetweenSpecs': - case 'preset': - case 'replname': - case 'resetMocks': - case 'resetModules': - case 'rootDir': - case 'testEnvironment': - case 'testRegex': - case 'testReporter': - case 'testURL': - case 'timers': - case 'updateSnapshot': - case 'usesBabelJest': - case 'verbose': - case 'watchman': - value = config[key]; - break; - - default: - console.error( - `Error: Unknown config option "${ key }" with value ` + - `"${ config[key] }". This is either a typing error or a user ` + - `mistake and fixing it will remove this message.`);} - - - newConfig[key] = value; - return newConfig; - }, newConfig); - - // If any config entries weren't specified but have default values, apply the - // default values - Object.keys(DEFAULT_CONFIG_VALUES).reduce((newConfig, key) => { - if (!(key in newConfig)) { - newConfig[key] = DEFAULT_CONFIG_VALUES[key]; - } - return newConfig; - }, newConfig); - - // If argv.json is set, coverageReporters shouldn't print a text report. - if (argv.json) { - newConfig.coverageReporters = newConfig.coverageReporters. - filter(reporter => reporter !== 'text'); - } - - return _replaceRootDirTags(newConfig.rootDir, newConfig); -} - -module.exports = normalize; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/setFromArgv.js b/fundamentals/bug-challenge-es6/node_modules/jest-config/build/setFromArgv.js deleted file mode 100644 index 2212c5cf8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-config/build/setFromArgv.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -function setFromArgv(config, argv) { - if (argv.coverage) { - config.collectCoverage = true; - } - - if (argv.verbose) { - config.verbose = argv.verbose; - } - - if (argv.notify) { - config.notify = argv.notify; - } - - if (argv.bail) { - config.bail = argv.bail; - } - - if (argv.cache !== null) { - config.cache = argv.cache; - } - - if (argv.watchman !== null) { - config.watchman = argv.watchman; - } - - if (argv.useStderr) { - config.useStderr = argv.useStderr; - } - - if (argv.json) { - config.useStderr = true; - } - - if (argv.logHeapUsage) { - config.logHeapUsage = argv.logHeapUsage; - } - - if (argv.replname) { - config.replname = argv.replname; - } - - if (argv.silent) { - config.silent = true; - } - - if (argv.setupTestFrameworkScriptFile) { - config.setupTestFrameworkScriptFile = argv.setupTestFrameworkScriptFile; - } - - if (argv.testNamePattern) { - config.testNamePattern = argv.testNamePattern; - } - - if (argv.updateSnapshot) { - config.updateSnapshot = argv.updateSnapshot; - } - - if (argv.watch || argv.watchAll) { - config.watch = true; - } - - if (argv.expand) { - config.expand = argv.expand; - } - - config.noStackTrace = argv.noStackTrace; - - return config; -} - -module.exports = setFromArgv; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-config/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-config/package.json deleted file mode 100644 index 0edba4e04..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-config/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "jest-config@^17.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "jest-config@>=17.0.3 <18.0.0", - "_id": "jest-config@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest-config", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/jest-config-17.0.3.tgz_1479368533019_0.6883850512094796" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-config", - "raw": "jest-config@^17.0.3", - "rawSpec": "^17.0.3", - "scope": null, - "spec": ">=17.0.3 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-runtime", - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/jest-config/-/jest-config-17.0.3.tgz", - "_shasum": "b6ed75d90d090b731fd894231904cadb7d5a5df2", - "_shrinkwrap": null, - "_spec": "jest-config@^17.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "chalk": "^1.1.1", - "istanbul": "^0.4.5", - "jest-environment-jsdom": "^17.0.2", - "jest-environment-node": "^17.0.2", - "jest-jasmine2": "^17.0.3", - "jest-mock": "^17.0.2", - "jest-resolve": "^17.0.3", - "jest-util": "^17.0.2", - "json-stable-stringify": "^1.0.0" - }, - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "b6ed75d90d090b731fd894231904cadb7d5a5df2", - "tarball": "https://registry.npmjs.org/jest-config/-/jest-config-17.0.3.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - } - ], - "name": "jest-config", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-diff/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-diff/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-diff/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-diff/build/constants.js b/fundamentals/bug-challenge-es6/node_modules/jest-diff/build/constants.js deleted file mode 100644 index cb6ae145f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-diff/build/constants.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - -const chalk = require('chalk'); - -exports.NO_DIFF_MESSAGE = -chalk.dim('Compared values have no visual difference.'); - -exports.SIMILAR_MESSAGE = -chalk.dim( -'Compared values serialize to the same structure.\n' + -'Printing internal object structure without calling `toJSON` instead.'); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-diff/build/diffStrings.js b/fundamentals/bug-challenge-es6/node_modules/jest-diff/build/diffStrings.js deleted file mode 100644 index df8eefece..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-diff/build/diffStrings.js +++ /dev/null @@ -1,109 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - -const chalk = require('chalk'); -const diff = require('diff');var _require = - -require('./constants.js');const NO_DIFF_MESSAGE = _require.NO_DIFF_MESSAGE; -const DIFF_CONTEXT = 5; - - - - - - - - - -const getAnnotation = options => -chalk.green('- ' + (options && options.aAnnotation || 'Expected')) + '\n' + -chalk.red('+ ' + (options && options.bAnnotation || 'Received')) + '\n\n'; - -const diffLines = (a, b) => { - let isDifferent = false; - return { - diff: diff.diffLines(a, b).map(part => { - if (part.added || part.removed) { - isDifferent = true; - } - - const lines = part.value.split('\n'); - const color = part.added ? - chalk.red : - part.removed ? chalk.green : chalk.dim; - - if (lines[lines.length - 1] === '') { - lines.pop(); - } - - return lines.map(line => { - const mark = color(part.added ? '+' : part.removed ? '-' : ' '); - return mark + ' ' + color(line) + '\n'; - }).join(''); - }).join('').trim(), - isDifferent }; - -}; - -const structuredPatch = (a, b) => { - const options = { context: DIFF_CONTEXT }; - let isDifferent = false; - // Make sure the strings end with a newline. - if (!a.endsWith('\n')) { - a += '\n'; - } - if (!b.endsWith('\n')) { - b += '\n'; - } - - return { - diff: diff.structuredPatch('', '', a, b, '', '', options). - hunks.map(hunk => { - const diffMarkOld = `-${ hunk.oldStart },${ hunk.oldLines }`; - const diffMarkNew = `+${ hunk.newStart },${ hunk.newLines }`; - const diffMark = chalk.yellow(`@@ ${ diffMarkOld } ${ diffMarkNew } @@\n`); - - const lines = hunk.lines.map(line => { - const added = line[0] === '+'; - const removed = line[0] === '-'; - - const color = added ? - chalk.red : - removed ? chalk.green : chalk.dim; - - return color(line) + '\n'; - }).join(''); - - isDifferent = true; - return diffMark + lines; - }).join('').trim(), - isDifferent }; - -}; - -function diffStrings(a, b, options) { - // `diff` uses the Myers LCS diff algorithm which runs in O(n+d^2) time - // (where "d" is the edit distance) and can get very slow for large edit - // distances. Mitigate the cost by switching to a lower-resolution diff - // whenever linebreaks are involved. - const result = options && options.expand === false ? - structuredPatch(a, b) : - diffLines(a, b); - - if (result.isDifferent) { - return getAnnotation(options) + result.diff; - } else { - return NO_DIFF_MESSAGE; - } -} - -module.exports = diffStrings; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-diff/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-diff/build/index.js deleted file mode 100644 index f48efcba1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-diff/build/index.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - -const ReactElementPlugin = require('pretty-format/plugins/ReactElement'); -const ReactTestComponentPlugin = require('pretty-format/plugins/ReactTestComponent'); - -const chalk = require('chalk'); -const diffStrings = require('./diffStrings');var _require = -require('jest-matcher-utils');const getType = _require.getType; -const prettyFormat = require('pretty-format');var _require2 = - - - - -require('./constants');const NO_DIFF_MESSAGE = _require2.NO_DIFF_MESSAGE,SIMILAR_MESSAGE = _require2.SIMILAR_MESSAGE; - -const PLUGINS = [ReactTestComponentPlugin, ReactElementPlugin]; -const FORMAT_OPTIONS = { - plugins: PLUGINS }; - -const FALLBACK_FORMAT_OPTIONS = { - callToJSON: false, - maxDepth: 10, - plugins: PLUGINS }; - - -// Generate a string that will highlight the difference between two values -// with green and red. (similar to how github does code diffing) -function diff(a, b, options) { - if (a === b) { - return NO_DIFF_MESSAGE; - } - - if (getType(a) !== getType(b)) { - return ( - 'Comparing two different types of values:\n' + - ` Expected: ${ chalk.green(getType(a)) }\n` + - ` Received: ${ chalk.red(getType(b)) }`); - - } - - switch (getType(a)) { - case 'string': - const multiline = a.match(/[\r\n]/) !== -1 && b.indexOf('\n') !== -1; - if (multiline) { - return diffStrings(String(a), String(b), options); - } - return null; - case 'number': - case 'boolean': - return null; - default: - let diffMessage; - let hasThrown = false; - - try { - diffMessage = diffStrings( - prettyFormat(a, FORMAT_OPTIONS), - prettyFormat(b, FORMAT_OPTIONS), - options); - - } catch (e) { - hasThrown = true; - } - - // If the comparison yields no results, compare again but this time - // without calling `toJSON`. It's also possible that toJSON might throw. - if (!diffMessage || diffMessage === NO_DIFF_MESSAGE) { - diffMessage = diffStrings( - prettyFormat(a, FALLBACK_FORMAT_OPTIONS), - prettyFormat(b, FALLBACK_FORMAT_OPTIONS), - options); - - if (diffMessage !== NO_DIFF_MESSAGE && !hasThrown) { - diffMessage = SIMILAR_MESSAGE + '\n\n' + diffMessage; - } - } - return diffMessage;} - -} - -module.exports = diff; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-diff/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-diff/package.json deleted file mode 100644 index dcae85fc5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-diff/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "jest-diff@^17.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-matchers" - ] - ], - "_from": "jest-diff@>=17.0.3 <18.0.0", - "_id": "jest-diff@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest-diff", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/jest-diff-17.0.3.tgz_1479368470950_0.627910036360845" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-diff", - "raw": "jest-diff@^17.0.3", - "rawSpec": "^17.0.3", - "scope": null, - "spec": ">=17.0.3 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-matchers", - "/jest-snapshot" - ], - "_resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-17.0.3.tgz", - "_shasum": "8fb31efab3b314d7b61b7b66b0bdea617ef1c02f", - "_shrinkwrap": null, - "_spec": "jest-diff@^17.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-matchers", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "chalk": "^1.1.3", - "diff": "^3.0.0", - "jest-matcher-utils": "^17.0.3", - "pretty-format": "~4.2.1" - }, - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "8fb31efab3b314d7b61b7b66b0bdea617ef1c02f", - "tarball": "https://registry.npmjs.org/jest-diff/-/jest-diff-17.0.3.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - } - ], - "name": "jest-diff", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-environment-jsdom/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-environment-jsdom/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-environment-jsdom/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-environment-jsdom/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-environment-jsdom/build/index.js deleted file mode 100644 index 2ced67417..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-environment-jsdom/build/index.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ -'use strict'; - - - - - -const FakeTimers = require('jest-util').FakeTimers; -const installCommonGlobals = require('jest-util').installCommonGlobals; -const ModuleMocker = require('jest-mock'); - -class JSDOMEnvironment { - - - - - - - constructor(config) { - // lazy require - this.document = require('jsdom').jsdom( /* markup */undefined, { - url: config.testURL }); - - const global = this.global = this.document.defaultView; - // Node's error-message stack size is limited at 10, but it's pretty useful - // to see more than that when a test fails. - this.global.Error.stackTraceLimit = 100; - installCommonGlobals(global, config.globals); - - this.moduleMocker = new ModuleMocker(global); - this.fakeTimers = new FakeTimers(global, this.moduleMocker, config); - } - - dispose() { - if (this.fakeTimers) { - this.fakeTimers.dispose(); - } - if (this.global) { - this.global.close(); - } - this.global = null; - this.document = null; - this.fakeTimers = null; - } - - runScript(script) { - if (this.global) { - return require('jsdom').evalVMScript(this.global, script); - } - return null; - }} - - - -module.exports = JSDOMEnvironment; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-environment-jsdom/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-environment-jsdom/package.json deleted file mode 100644 index 292e273f1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-environment-jsdom/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "jest-environment-jsdom@^17.0.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "jest-environment-jsdom@>=17.0.2 <18.0.0", - "_id": "jest-environment-jsdom@17.0.2", - "_inCache": true, - "_installable": true, - "_location": "/jest-environment-jsdom", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/jest-environment-jsdom-17.0.2.tgz_1479170362201_0.5183715566527098" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-environment-jsdom", - "raw": "jest-environment-jsdom@^17.0.2", - "rawSpec": "^17.0.2", - "scope": null, - "spec": ">=17.0.2 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-config", - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-17.0.2.tgz", - "_shasum": "a3098dc29806d40802c52b62b848ab6aa00fdba0", - "_shrinkwrap": null, - "_spec": "jest-environment-jsdom@^17.0.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "jest-mock": "^17.0.2", - "jest-util": "^17.0.2", - "jsdom": "^9.8.1" - }, - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "a3098dc29806d40802c52b62b848ab6aa00fdba0", - "tarball": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-17.0.2.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - } - ], - "name": "jest-environment-jsdom", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": {}, - "version": "17.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-environment-node/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-environment-node/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-environment-node/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-environment-node/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-environment-node/build/index.js deleted file mode 100644 index cf8bf8c5f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-environment-node/build/index.js +++ /dev/null @@ -1,60 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - -const FakeTimers = require('jest-util').FakeTimers; -const installCommonGlobals = require('jest-util').installCommonGlobals; -const ModuleMocker = require('jest-mock'); -const vm = require('vm'); - -class NodeEnvironment { - - - - - - - constructor(config) { - this.context = vm.createContext(); - const global = this.global = vm.runInContext('this', this.context); - global.global = global; - global.clearInterval = clearInterval; - global.clearTimeout = clearTimeout; - global.JSON = JSON; - global.Promise = Promise; - global.setInterval = setInterval; - global.setTimeout = setTimeout; - installCommonGlobals(global, config.globals); - this.moduleMocker = new ModuleMocker(global); - this.fakeTimers = new FakeTimers(global, this.moduleMocker, config); - } - - dispose() { - if (this.fakeTimers) { - this.fakeTimers.dispose(); - } - this.context = null; - this.fakeTimers = null; - } - - runScript(script) { - if (this.context) { - return script.runInContext(this.context); - } - return null; - }} - - - -module.exports = NodeEnvironment; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-environment-node/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-environment-node/package.json deleted file mode 100644 index b9ab6f81e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-environment-node/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "jest-environment-node@^17.0.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-config" - ] - ], - "_from": "jest-environment-node@>=17.0.2 <18.0.0", - "_id": "jest-environment-node@17.0.2", - "_inCache": true, - "_installable": true, - "_location": "/jest-environment-node", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/jest-environment-node-17.0.2.tgz_1479170363093_0.7057302254252136" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-environment-node", - "raw": "jest-environment-node@^17.0.2", - "rawSpec": "^17.0.2", - "scope": null, - "spec": ">=17.0.2 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-config" - ], - "_resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-17.0.2.tgz", - "_shasum": "aff6133f4ca2faddcc5b0ce7d25cec83e16d8463", - "_shrinkwrap": null, - "_spec": "jest-environment-node@^17.0.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-config", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "jest-mock": "^17.0.2", - "jest-util": "^17.0.2" - }, - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "aff6133f4ca2faddcc5b0ce7d25cec83e16d8463", - "tarball": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-17.0.2.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - } - ], - "name": "jest-environment-node", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-file-exists/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-file-exists/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-file-exists/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-file-exists/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-file-exists/build/index.js deleted file mode 100644 index c8eda7414..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-file-exists/build/index.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - - -const fs = require('fs'); - -module.exports = ( -filePath, -hasteFS) => -hasteFS && hasteFS.exists(filePath) || fs.existsSync(filePath); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-file-exists/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-file-exists/package.json deleted file mode 100644 index 7378b8c60..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-file-exists/package.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "_args": [ - [ - "jest-file-exists@^17.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "jest-file-exists@>=17.0.0 <18.0.0", - "_id": "jest-file-exists@17.0.0", - "_inCache": true, - "_installable": true, - "_location": "/jest-file-exists", - "_nodeVersion": "6.9.1", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/jest-file-exists-17.0.0.tgz_1478614345379_0.9439507396891713" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "jest-file-exists", - "raw": "jest-file-exists@^17.0.0", - "rawSpec": "^17.0.0", - "scope": null, - "spec": ">=17.0.0 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-resolve", - "/jest-resolve-dependencies", - "/jest-runtime", - "/jest-snapshot", - "/jest-util", - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/jest-file-exists/-/jest-file-exists-17.0.0.tgz", - "_shasum": "7f63eb73a1c43a13f461be261768b45af2cdd169", - "_shrinkwrap": null, - "_spec": "jest-file-exists@^17.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": {}, - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "7f63eb73a1c43a13f461be261768b45af2cdd169", - "tarball": "https://registry.npmjs.org/jest-file-exists/-/jest-file-exists-17.0.0.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - } - ], - "name": "jest-file-exists", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/HasteFS.js b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/HasteFS.js deleted file mode 100644 index b0ad2e1de..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/HasteFS.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - - - -const H = require('./constants'); - -const multimatch = require('multimatch'); -const path = require('path'); - -class HasteFS { - - - - constructor(files) { - this._files = files; - } - - getModuleName(file) { - return this._files[file] && this._files[file][H.ID] || null; - } - - getDependencies(file) { - return this._files[file] && this._files[file][H.DEPENDENCIES] || null; - } - - exists(file) { - return !!this._files[file]; - } - - getAllFiles() { - return Object.keys(this._files); - } - - matchFiles(pattern) { - if (!(pattern instanceof RegExp)) { - pattern = new RegExp(pattern); - } - const files = []; - for (const file in this._files) { - if (pattern.test(file)) { - files.push(file); - } - } - return files; - } - - matchFilesWithGlob( - globs, - root) - { - const files = new Set(); - for (const file in this._files) { - const filePath = root ? path.relative(root, file) : file; - if (multimatch([filePath], globs).length) { - files.add(file); - } - } - return files; - }} - - - -module.exports = HasteFS; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/ModuleMap.js b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/ModuleMap.js deleted file mode 100644 index b11c7e611..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/ModuleMap.js +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - - - - - -const H = require('./constants'); - -class ModuleMap { - - - - - constructor(map, mocks) { - this._map = map; - this._mocks = mocks; - } - - getModule( - name, - platform, - supportsNativePlatform, - type) - { - if (!type) { - type = H.MODULE; - } - - const map = this._map[name]; - if (map) { - let module = platform && map[platform]; - if (!module && map[H.NATIVE_PLATFORM] && supportsNativePlatform) { - module = map[H.NATIVE_PLATFORM]; - } else if (!module) { - module = map[H.GENERIC_PLATFORM]; - } - if (module && module[H.TYPE] === type) { - return module[H.PATH]; - } - } - - return null; - } - - getPackage( - name, - platform, - supportsNativePlatform) - { - return this.getModule(name, platform, null, H.PACKAGE); - } - - getMockModule(name) { - return this._mocks[name]; - }} - - - -module.exports = ModuleMap; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/constants.js b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/constants.js deleted file mode 100644 index 15c2b75be..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/constants.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -/* eslint-disable sort-keys */ - -/* - * This file exports a set of constants that are used for Jest's haste map - * serialization. On very large repositories, the haste map cache becomes very - * large to the point where it is the largest overhead in starting up Jest. - * - * This constant key map allows to keep the map smaller without having to build - * a custom serialization library. - */ -module.exports = { - /* file map attributes */ - ID: 0, - MTIME: 1, - VISITED: 2, - DEPENDENCIES: 3, - - /* module map attributes */ - PATH: 0, - TYPE: 1, - - /* module types */ - MODULE: 0, - PACKAGE: 1, - - /* platforms */ - GENERIC_PLATFORM: 'g', - NATIVE_PLATFORM: 'native' }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/crawlers/node.js b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/crawlers/node.js deleted file mode 100644 index 056c501bc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/crawlers/node.js +++ /dev/null @@ -1,157 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - -const H = require('../constants'); - -const fs = require('fs'); -const path = require('path'); -const spawn = require('child_process').spawn; - - - -function find( -roots, -extensions, -ignore, -callback) -{ - const result = []; - let activeCalls = 0; - - function search(directory) { - activeCalls++; - fs.readdir(directory, (err, names) => { - activeCalls--; - - names.forEach(file => { - file = path.join(directory, file); - if (ignore(file)) { - return; - } - activeCalls++; - - fs.lstat(file, (err, stat) => { - activeCalls--; - - if (!err && stat && !stat.isSymbolicLink()) { - if (stat.isDirectory()) { - search(file); - } else { - const ext = path.extname(file).substr(1); - if (extensions.indexOf(ext) !== -1) { - result.push([file, stat.mtime.getTime()]); - } - } - } - if (activeCalls === 0) { - callback(result); - } - }); - }); - - if (activeCalls === 0) { - callback(result); - } - }); - } - - roots.forEach(search); -} - -function findNative( -roots, -extensions, -ignore, -callback) -{ - const args = [].concat(roots); - args.push('-type', 'f'); - if (extensions.length) { - args.push('\('); - } - extensions.forEach((ext, index) => { - if (index) { - args.push('-o'); - } - args.push('-iname'); - args.push('*.' + ext); - }); - if (extensions.length) { - args.push('\)'); - } - - const child = spawn('find', args); - let stdout = ''; - child.stdout.setEncoding('utf-8'); - child.stdout.on('data', data => stdout += data); - - child.stdout.on('close', () => { - const lines = stdout.trim(). - split('\n'). - filter(x => !ignore(x)); - const result = []; - let count = lines.length; - if (!count) { - callback([]); - } else { - lines.forEach(path => { - fs.stat(path, (err, stat) => { - if (!err && stat) { - result.push([path, stat.mtime.getTime()]); - } - if (--count === 0) { - callback(result); - } - }); - }); - } - }); -} - -module.exports = function nodeCrawl( -options) -{const - - data = - - - - - options.data,extensions = options.extensions,forceNodeFilesystemAPI = options.forceNodeFilesystemAPI,ignore = options.ignore,roots = options.roots; - - return new Promise(resolve => { - const callback = list => { - const files = Object.create(null); - list.forEach(fileData => { - const name = fileData[0]; - const mtime = fileData[1]; - const existingFile = data.files[name]; - if (existingFile && existingFile[H.MTIME] === mtime) { - files[name] = existingFile; - } else { - // See ../constants.js - files[name] = ['', mtime, 0, []]; - } - }); - data.files = files; - resolve(data); - }; - - if (forceNodeFilesystemAPI || process.platform === 'win32') { - find(roots, extensions, ignore, callback); - } else { - findNative(roots, extensions, ignore, callback); - } - }); -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/crawlers/watchman.js b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/crawlers/watchman.js deleted file mode 100644 index 359131c3f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/crawlers/watchman.js +++ /dev/null @@ -1,138 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - -const H = require('../constants'); - -const path = require('path'); -const watchman = require('fb-watchman'); - -const watchmanURL = 'https://facebook.github.io/watchman/docs/troubleshooting.html'; - -function isDescendant(root, child) { - return child.startsWith(root); -} - -function WatchmanError(error) { - return new Error( - `Watchman error: ${ error.message.trim() }. Make sure watchman ` + - `is running for this project. See ${ watchmanURL }.`); - -} - -module.exports = function watchmanCrawl( -options) -{const - - data = - - - - options.data,extensions = options.extensions,ignore = options.ignore,roots = options.roots; - - return new Promise((resolve, reject) => { - const client = new watchman.Client(); - client.on('error', error => reject(error)); - - const cmd = args => new Promise((resolve, reject) => { - client.command(args, (error, result) => { - if (error) { - reject(error); - } else { - resolve(result); - } - }); - }); - - const clocks = data.clocks; - let files = data.files; - - return Promise.all(roots.map(root => cmd(['watch-project', root]))). - then(responses => { - const watchmanRoots = Array.from( - new Set(responses.map(response => response.watch))); - - return Promise.all(watchmanRoots.map(root => { - // Build up an expression to filter the output by the relevant roots. - const dirExpr = ['anyof']; - roots.forEach(subRoot => { - if (isDescendant(root, subRoot)) { - dirExpr.push(['dirname', path.relative(root, subRoot)]); - } - }); - const expression = [ - 'allof', - ['type', 'f'], - ['anyof'].concat(extensions.map( - extension => ['suffix', extension]))]; - - - if (dirExpr.length > 1) { - expression.push(dirExpr); - } - const fields = ['name', 'exists', 'mtime_ms']; - - const query = clocks[root] - // Use the `since` generator if we have a clock available - ? { expression, fields, since: clocks[root] } - // Otherwise use the `suffix` generator - : { expression, fields, suffix: extensions }; - return cmd(['query', root, query]).then(response => ({ - response, - root })); - - })).then(pairs => { - // Reset the file map if watchman was restarted and sends us a list of - // files. - if (pairs.some(pair => pair.response.is_fresh_instance)) { - files = Object.create(null); - } - - pairs.forEach(pair => { - const root = pair.root; - const response = pair.response; - if ('warning' in response) { - console.warn('watchman warning: ', response.warning); - } - - clocks[root] = response.clock; - response.files.forEach(fileData => { - const name = root + path.sep + fileData.name; - if (!fileData.exists) { - delete files[name]; - } else if (!ignore(name)) { - const mtime = fileData.mtime_ms.toNumber(); - const isNew = - !data.files[name] || data.files[name][H.MTIME] !== mtime; - if (isNew) { - // See ../constants.js - files[name] = ['', mtime, 0, []]; - } else { - files[name] = data.files[name]; - } - } - }); - }); - }); - }). - then(() => { - client.end(); - data.files = files; - resolve(data); - }). - catch(error => { - client.end(); - reject(WatchmanError(error)); - }); - }); -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/index.js deleted file mode 100644 index bde254cc1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/index.js +++ /dev/null @@ -1,708 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict';var _require = - - - - - - - - - - - -require('events');const EventEmitter = _require.EventEmitter; -const H = require('./constants'); -const HasteFS = require('./HasteFS'); -const HasteModuleMap = require('./ModuleMap'); - -const crypto = require('crypto'); -const execSync = require('child_process').execSync; -const fs = require('graceful-fs'); -const getPlatformExtension = require('./lib/getPlatformExtension'); -const nodeCrawl = require('./crawlers/node'); -const os = require('os'); -const path = require('path'); -const sane = require('sane'); -const watchmanCrawl = require('./crawlers/watchman'); -const worker = require('./worker'); -const workerFarm = require('worker-farm'); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const CHANGE_INTERVAL = 30; -const MAX_WAIT_TIME = 240000; -const NODE_MODULES = path.sep + 'node_modules' + path.sep; -const VERSION = require('../package.json').version; - -const canUseWatchman = (() => { - try { - execSync('watchman version', { stdio: ['ignore'] }); - return true; - } catch (e) {} - return false; -})(); - -const escapePathSeparator = -string => path.sep === '\\' ? string.replace(/(\/|\\)/g, '\\\\') : string; - -const getMockName = filePath => path.basename(filePath, path.extname(filePath)); -const getWhiteList = list => { - if (list && list.length) { - return new RegExp( - '(' + escapePathSeparator(NODE_MODULES) + - '(?:' + list.join('|') + ')(?=$|' + escapePathSeparator(path.sep) + '))', - 'g'); - - } - return null; -}; - -/** - * HasteMap is a JavaScript implementation of Facebook's haste module system. - * - * This implementation is inspired by https://github.com/facebook/node-haste - * and was built with for high-performance in large code repositories with - * hundreds of thousands of files. This implementation is scalable and provides - * predictable performance. - * - * Because the haste map creation and synchronization is critical to startup - * performance and most tasks are blocked by I/O this class makes heavy use of - * synchronous operations. It uses worker processes for parallelizing file - * access and metadata extraction. - * - * The data structures created by `jest-haste-map` can be used directly from the - * cache without further processing. The metadata objects in the `files` and - * `map` objects contain cross-references: a metadata object from one can look - * up the corresponding metadata object in the other map. Note that in most - * projects, the number of files will be greater than the number of haste - * modules one module can refer to many files based on platform extensions. - * - * type HasteMap = { - * clocks: WatchmanClocks, - * files: {[filepath: string]: FileMetaData}, - * map: {[id: string]: ModuleMapItem}, - * mocks: {[id: string]: string}, - * } - * - * // Watchman clocks are used for query synchronization and file system deltas. - * type WatchmanClocks = {[filepath: string]: string}; - * - * type FileMetaData = { - * id: ?string, // used to look up module metadata objects in `map`. - * mtime: number, // check for outdated files. - * visited: boolean, // whether the file has been parsed or not. - * dependencies: Array, // all relative dependencies of this file. - * }; - * - * // Modules can be targeted to a specific platform based on the file name. - * // Example: Platform.ios.js and Platform.android.js will both map to the same - * // `Platform` module. The platform should be specified during resolution. - * type ModuleMapItem = {[platform: string]: ModuleMetaData}; - * - * // - * type ModuleMetaData = { - * path: string, // the path to look up the file object in `files`. - * type: string, // the module type (either `package` or `module`). - * }; - * - * Note that the data structures described above are conceptual only. The actual - * implementation uses arrays and constant keys for metadata storage. Instead of - * `{id: 'flatMap', mtime: 3421, visited: true, dependencies: []}` the real - * representation is similar to `['flatMap', 3421, 1, []]` to save storage space - * and reduce parse and write time of a big JSON blob. - * - * The HasteMap is created as follows: - * 1. read data from the cache or create an empty structure. - * 2. crawl the file system. - * * empty cache: crawl the entire file system. - * * cache available: - * * if watchman is available: get file system delta changes. - * * if watchman is unavailable: crawl the entire file system. - * * build metadata objects for every file. This builds the `files` part of - * the `HasteMap`. - * 3. parse and extract metadata from changed files. - * * this is done in parallel over worker processes to improve performance. - * * the worst case is to parse all files. - * * the best case is no file system access and retrieving all data from - * the cache. - * * the average case is a small number of changed files. - * 4. serialize the new `HasteMap` in a cache file. - * Worker processes can directly access the cache through `HasteMap.read()`. - * - */ -class HasteMap extends EventEmitter { - - - - - - - - - - - constructor(options) { - super(); - this._options = { - cacheDirectory: options.cacheDirectory || os.tmpdir(), - extensions: options.extensions, - forceNodeFilesystemAPI: !!options.forceNodeFilesystemAPI, - ignorePattern: options.ignorePattern, - maxWorkers: options.maxWorkers, - mocksPattern: - options.mocksPattern ? new RegExp(options.mocksPattern) : null, - name: options.name, - platforms: options.platforms, - resetCache: options.resetCache, - retainAllFiles: options.retainAllFiles, - roots: Array.from(new Set(options.roots)), - throwOnModuleCollision: !!options.throwOnModuleCollision, - useWatchman: - options.useWatchman == null ? true : options.useWatchman, - watch: !!options.watch }; - - this._console = options.console || global.console; - this._cachePath = HasteMap.getCacheFilePath( - this._options.cacheDirectory, - `haste-map-${ this._options.name }`, - VERSION, - this._options.roots.join(':'), - this._options.extensions.join(':'), - this._options.platforms.join(':'), - options.mocksPattern); - - this._whitelist = getWhiteList(options.providesModuleNodeModules); - this._buildPromise = null; - this._workerPromise = null; - this._workerFarm = null; - this._watchers = []; - } - - static getCacheFilePath(tmpdir, name) { - const hash = crypto.createHash('md5'); - Array.from(arguments).slice(1).forEach(arg => hash.update(arg)); - return path.join( - tmpdir, - name.replace(/\W/g, '-') + '-' + hash.digest('hex')); - - } - - build() { - if (!this._buildPromise) { - this._buildPromise = this._buildFileMap(). - then(fileMap => this._buildHasteMap(fileMap)). - then(hasteMap => { - this._persist(hasteMap); - const hasteFS = new HasteFS(hasteMap.files); - const moduleMap = new HasteModuleMap(hasteMap.map, hasteMap.mocks); - const __hasteMapForTest = - process.env.NODE_ENV === 'test' && hasteMap || null; - return this._watch(hasteMap, hasteFS, moduleMap).then(() => ({ - __hasteMapForTest, - hasteFS, - moduleMap })); - - }); - } - return this._buildPromise; - } - - /** - * 1. read data from the cache or create an empty structure. - */ - read() { - return this._parse(fs.readFileSync(this._cachePath, 'utf8')); - } - - readModuleMap() { - const data = this.read(); - return new HasteModuleMap(data.map, data.mocks); - } - - /** - * 2. crawl the file system. - */ - _buildFileMap() { - const read = this._options.resetCache ? this._createEmptyMap : this.read; - - return Promise.resolve(). - then(() => read.call(this)). - catch(() => this._createEmptyMap()). - then(hasteMap => this._crawl(hasteMap)); - } - - /** - * 3. parse and extract metadata from changed files. - */ - _processFile( - hasteMap, - map, - mocks, - filePath, - workerOptions) - { - const setModule = (id, module) => { - if (!map[id]) { - map[id] = Object.create(null); - } - const moduleMap = map[id]; - const platform = - getPlatformExtension(module[H.PATH]) || H.GENERIC_PLATFORM; - const existingModule = moduleMap[platform]; - if (existingModule && existingModule[H.PATH] !== module[H.PATH]) { - const message = - `jest-haste-map: @providesModule naming collision:\n` + - ` Duplicate module name: ${ id }\n` + - ` Paths: ${ module[H.PATH] } collides with ` + - `${ existingModule[H.PATH] }\n\nThis ` + - `${ this._options.throwOnModuleCollision ? 'error' : 'warning' } ` + - `is caused by a @providesModule declaration ` + - `with the same name across two different files.`; - if (this._options.throwOnModuleCollision) { - throw new Error(message); - } - this._console.warn(message); - } - - moduleMap[platform] = module; - }; - - // If we retain all files in the virtual HasteFS representation, we avoid - // reading them if they aren't important (node_modules). - if (this._options.retainAllFiles && this._isNodeModulesDir(filePath)) { - return null; - } - - if ( - this._options.mocksPattern && - this._options.mocksPattern.test(filePath)) - { - const mockPath = getMockName(filePath); - if (mocks[mockPath]) { - this._console.warn( - `jest-haste-map: duplicate manual mock found:\n` + - ` Module name: ${ mockPath }\n` + - ` Duplicate Mock path: ${ filePath }\nThis warning ` + - `is caused by two manual mock files with the same file name.\n` + - `Jest will use the mock file found in: \n` + - `${ filePath }\n` + - ` Please delete one of the following two files: \n ` + - `${ mocks[mockPath] }\n${ filePath }\n\n`); - - } - mocks[mockPath] = filePath; - } - - const fileMetadata = hasteMap.files[filePath]; - const moduleMetadata = hasteMap.map[fileMetadata[H.ID]]; - if (fileMetadata[H.VISITED]) { - if (!fileMetadata[H.ID]) { - return null; - } else if (fileMetadata[H.ID] && moduleMetadata) { - map[fileMetadata[H.ID]] = moduleMetadata; - return null; - } - } - - return this._getWorker(workerOptions)({ filePath }).then( - metadata => { - // `1` for truthy values instead of `true` to save cache space. - fileMetadata[H.VISITED] = 1; - const metadataId = metadata.id; - const metadataModule = metadata.module; - if (metadataId && metadataModule) { - fileMetadata[H.ID] = metadataId; - setModule(metadataId, metadataModule); - } - fileMetadata[H.DEPENDENCIES] = metadata.dependencies || []; - }, - error => { - // If a file cannot be read we remove it from the file list and - // ignore the failure silently. - delete hasteMap.files[filePath]; - }); - - } - - _buildHasteMap(hasteMap) { - const map = Object.create(null); - const mocks = Object.create(null); - const promises = []; - - for (const filePath in hasteMap.files) { - const promise = this._processFile(hasteMap, map, mocks, filePath); - if (promise) { - promises.push(promise); - } - } - - const cleanup = () => { - if (this._workerFarm) { - workerFarm.end(this._workerFarm); - } - this._workerFarm = null; - this._workerPromise = null; - }; - - return Promise.all(promises). - then(cleanup). - then(() => { - hasteMap.map = map; - hasteMap.mocks = mocks; - return hasteMap; - }). - catch(error => { - cleanup(); - return Promise.reject(error); - }); - } - - /** - * 4. serialize the new `HasteMap` in a cache file. - */ - _persist(hasteMap) { - fs.writeFileSync(this._cachePath, JSON.stringify(hasteMap), 'utf8'); - } - - /** - * Creates workers or parses files and extracts metadata in-process. - */ - _getWorker( - options) - { - if (!this._workerPromise) { - let workerFn; - if ( - options && options.forceInBand || - this._options.maxWorkers <= 1) - { - workerFn = worker; - } else { - this._workerFarm = workerFarm( - { - maxConcurrentWorkers: this._options.maxWorkers }, - - require.resolve('./worker')); - - workerFn = this._workerFarm; - } - - this._workerPromise = message => new Promise( - (resolve, reject) => workerFn(message, (error, metadata) => { - if (error || !metadata) { - reject(error); - } else { - resolve(metadata); - } - })); - - } - - return this._workerPromise; - } - - _parse(hasteMapPath) { - const hasteMap = JSON.parse(hasteMapPath); - for (const key in hasteMap) { - Object.setPrototypeOf(hasteMap[key], null); - } - return hasteMap; - } - - _crawl(hasteMap) { - const options = this._options; - const ignore = this._ignore.bind(this); - const crawl = - canUseWatchman && this._options.useWatchman ? watchmanCrawl : nodeCrawl; - - const retry = error => { - if (crawl === watchmanCrawl) { - this._console.warn( - `jest-haste-map: Watchman crawl failed. Retrying once with node ` + - `crawler.\n` + - ` Usually this happens when watchman isn't running. Create an ` + - `empty \`.watchmanconfig\` file in your project's root folder or ` + - `initialize a git or hg repository in your project.\n` + - ` ` + error); - - return nodeCrawl({ - data: hasteMap, - extensions: options.extensions, - forceNodeFilesystemAPI: options.forceNodeFilesystemAPI, - ignore, - roots: options.roots }). - catch(e => { - throw new Error( - `Crawler retry failed:\n` + - ` Original error: ${ error.message }\n` + - ` Retry error: ${ e.message }\n`); - - }); - } - - throw error; - }; - - try { - return crawl({ - data: hasteMap, - extensions: options.extensions, - forceNodeFilesystemAPI: options.forceNodeFilesystemAPI, - ignore, - roots: options.roots }). - catch(retry); - } catch (error) { - return retry(error); - } - } - - /** - * Watch mode - */ - _watch( - hasteMap, - hasteFS, - moduleMap) - { - if (!this._options.watch) { - return Promise.resolve(); - } - - // In watch mode, we'll only warn about module collisions. - this._options.throwOnModuleCollision = false; - - const Watcher = canUseWatchman && this._options.useWatchman ? - sane.WatchmanWatcher : - sane.NodeWatcher; - const extensions = this._options.extensions; - let changeQueue = Promise.resolve(); - let eventsQueue = []; - // We only need to copy the entire haste map once on every "frame". - let mustCopy = true; - - const copy = object => Object.assign(Object.create(null), object); - - const createWatcher = root => { - const watcher = new Watcher(root, { - dot: false, - glob: extensions.map(extension => '**/*.' + extension) }); - - - return new Promise((resolve, reject) => { - const rejectTimeout = setTimeout( - () => reject(new Error('Failed to start watch mode.')), - MAX_WAIT_TIME); - - - watcher.once('ready', () => { - clearTimeout(rejectTimeout); - watcher.on('all', onChange); - resolve(watcher); - }); - }); - }; - - const emitChange = () => { - if (eventsQueue.length) { - mustCopy = true; - this.emit('change', { - eventsQueue, - hasteFS: new HasteFS(hasteMap.files), - moduleMap: new HasteModuleMap(hasteMap.map, hasteMap.mocks) }); - - eventsQueue = []; - } - }; - - const onChange = ( - type, - filePath, - root, - stat) => - { - filePath = path.join(root, filePath); - if ( - this._ignore(filePath) || - !extensions.some(extension => filePath.endsWith(extension))) - { - return; - } - - changeQueue = changeQueue.then(() => { - // If we get duplicate events for the same file, ignore them. - if ( - eventsQueue.find(event => - event.type === type && - event.filePath === filePath && ( - !event.stat && !stat || - - event.stat && - stat && - event.stat.mtime.getTime() === stat.mtime.getTime()))) - - - - { - return null; - } - - if (mustCopy) { - mustCopy = false; - hasteMap = { - clocks: copy(hasteMap.clocks), - files: copy(hasteMap.files), - map: copy(hasteMap.map), - mocks: copy(hasteMap.mocks) }; - - } - - const add = () => eventsQueue.push({ filePath, stat, type }); - - // Delete the file and all of its metadata. - const moduleName = - hasteMap.files[filePath] && hasteMap.files[filePath][H.ID]; - delete hasteMap.files[filePath]; - delete hasteMap.map[moduleName]; - if ( - this._options.mocksPattern && - this._options.mocksPattern.test(filePath)) - { - const mockName = getMockName(filePath); - delete hasteMap.mocks[mockName]; - } - - // If the file was added or changed, parse it and update the haste map. - if (type === 'add' || type === 'change') { - const fileMetadata = ['', stat.mtime.getTime(), 0, []]; - hasteMap.files[filePath] = fileMetadata; - const promise = this._processFile( - hasteMap, - hasteMap.map, - hasteMap.mocks, - filePath, - { - forceInBand: true }); - - - // Cleanup - this._workerPromise = null; - if (promise) { - return promise.then(add); - } - } else { - add(); - } - return null; - }).catch(error => { - this._console.error( - `jest-haste-map: watch error:\n ${ error }\n`); - - }); - }; - - this._changeInterval = setInterval(emitChange, CHANGE_INTERVAL); - return Promise.all(this._options.roots.map(createWatcher)). - then(watchers => { - this._watchers = watchers; - }); - } - - end() { - clearInterval(this._changeInterval); - if (!this._watchers.length) { - return Promise.resolve(); - } - - return Promise.all(this._watchers.map( - watcher => new Promise(resolve => watcher.close(resolve)))). - then(() => this._watchers = []); - } - - /** - * Helpers - */ - _ignore(filePath) { - return ( - this._options.ignorePattern.test(filePath) || - !this._options.retainAllFiles && this._isNodeModulesDir(filePath)); - - } - - _isNodeModulesDir(filePath) { - if (!filePath.includes(NODE_MODULES)) { - return false; - } - - if (this._whitelist) { - const match = filePath.match(this._whitelist); - return !match || match.length > 1; - } - - return true; - } - - _createEmptyMap() { - return { - clocks: Object.create(null), - files: Object.create(null), - map: Object.create(null), - mocks: Object.create(null) }; - - }} - - - - -HasteMap.H = H; - -module.exports = HasteMap; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/lib/docblock.js b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/lib/docblock.js deleted file mode 100644 index 8774ea29a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/lib/docblock.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - -const commentEndRe = /\*\/$/; -const commentStartRe = /^\/\*\*/; -const docblockRe = /^\s*(\/\*\*?(.|\r?\n)*?\*\/)/; -const lineCommentRe = /\/\/([^\r\n]*)/g; -const ltrimRe = /^\s*/; -const multilineRe = -/(?:^|\r?\n) *(@[^\r\n]*?) *\r?\n *([^@\r\n\s][^@\r\n]+?) *\r?\n/g; -const propertyRe = /(?:^|\r?\n) *@(\S+) *([^\r\n]*)/g; -const stringStartRe = /(\r?\n|^) *\*/g; -const wsRe = /[\t ]+/g; - -function extract(contents) { - const match = contents.match(docblockRe); - return match ? match[0].replace(ltrimRe, '') || '' : ''; -} - -function parse(docblock) { - docblock = docblock. - replace(commentStartRe, ''). - replace(commentEndRe, ''). - replace(wsRe, ' '). - replace(lineCommentRe, ''). - replace(stringStartRe, '$1'); - - // Normalize multi-line directives - let prev = ''; - while (prev !== docblock) { - prev = docblock; - docblock = docblock.replace(multilineRe, '\n$1 $2\n'); - } - docblock = docblock.trim(); - - const result = Object.create(null); - let match; - while (match = propertyRe.exec(docblock)) { - result[match[1]] = match[2]; - } - return result; -} - -exports.extract = extract; -exports.parse = parse; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/lib/extractRequires.js b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/lib/extractRequires.js deleted file mode 100644 index 045545ed1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/lib/extractRequires.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - -const blockCommentRe = /\/\*[^]*?\*\//g; -const lineCommentRe = /\/\/.*/g; - -/* eslint-disable max-len */ -const replacePatterns = { - EXPORT_RE: /(\bexport\s+(?:[^'"]+\s+from\s+)??)(['"])([^'"]+)(\2)/g, - IMPORT_RE: /(\bimport\s+(?:[^'"]+\s+from\s+)??)(['"])([^'"]+)(\2)/g, - REQUIRE_EXTENSIONS_PATTERN: /(\b(?:require\s*?\.\s*?(?:requireActual|requireMock)|jest\s*?\.\s*?genMockFromModule)\s*?\(\s*?)([`'"])([^`'"]+)(\2\s*?\))/g, - REQUIRE_RE: /(\brequire\s*?\(\s*?)([`'"])([^`'"]+)(\2\s*?\))/g }; - -/* eslint-enable max-len */ - -function extractRequires(code) { - const dependencies = new Set(); - const addDependency = (match, pre, quot, dep, post) => { - dependencies.add(dep); - return match; - }; - - code. - replace(blockCommentRe, ''). - replace(lineCommentRe, ''). - replace(replacePatterns.EXPORT_RE, addDependency). - replace(replacePatterns.IMPORT_RE, addDependency). - replace(replacePatterns.REQUIRE_EXTENSIONS_PATTERN, addDependency). - replace(replacePatterns.REQUIRE_RE, addDependency); - - return Array.from(dependencies); -} - -module.exports = extractRequires; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/lib/getPlatformExtension.js b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/lib/getPlatformExtension.js deleted file mode 100644 index b06677498..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/lib/getPlatformExtension.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - -const SUPPORTED_PLATFORM_EXTS = { - android: true, - ios: true, - native: true, - web: true }; - - -// Extract platform extension: index.ios.js -> ios -function getPlatformExtension(file) { - const last = file.lastIndexOf('.'); - const secondToLast = file.lastIndexOf('.', last - 1); - if (secondToLast === -1) { - return null; - } - const platform = file.substring(secondToLast + 1, last); - return SUPPORTED_PLATFORM_EXTS[platform] ? platform : null; -} - -module.exports = getPlatformExtension; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/types.js b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/types.js deleted file mode 100644 index 4780db185..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/types.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/worker.js b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/worker.js deleted file mode 100644 index 6b02e2a3e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/build/worker.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - - - -const H = require('./constants'); - -const docblock = require('./lib/docblock'); -const extractRequires = require('./lib/extractRequires'); -const fs = require('graceful-fs'); -const path = require('path'); - -const JSON_EXTENSION = '.json'; -const PACKAGE_JSON = path.sep + 'package' + JSON_EXTENSION; - -const formatError = error => { - if (typeof error === 'string') { - return { - message: error, - stack: null, - type: 'Error' }; - - } - - return { - message: error.message, - stack: error.stack, - type: error.type || 'Error' }; - -}; - -module.exports = (data, callback) => { - try { - const filePath = data.filePath; - const content = fs.readFileSync(filePath, 'utf8'); - let module; - let id; - let dependencies; - - if (filePath.endsWith(PACKAGE_JSON)) { - const fileData = JSON.parse(content); - if (fileData.name) { - id = fileData.name; - module = [filePath, H.PACKAGE]; - } - } else if (!filePath.endsWith(JSON_EXTENSION)) { - const doc = docblock.parse(docblock.extract(content)); - id = doc.providesModule || doc.provides; - dependencies = extractRequires(content); - if (id) { - module = [filePath, H.MODULE]; - } - } - - callback(null, { dependencies, id, module }); - } catch (error) { - callback(formatError(error)); - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/package.json deleted file mode 100644 index 496cfac37..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-haste-map/package.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "_args": [ - [ - "jest-haste-map@^17.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "jest-haste-map@>=17.0.3 <18.0.0", - "_id": "jest-haste-map@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest-haste-map", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/jest-haste-map-17.0.3.tgz_1479368474626_0.9857673794031143" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-haste-map", - "raw": "jest-haste-map@^17.0.3", - "rawSpec": "^17.0.3", - "scope": null, - "spec": ">=17.0.3 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-resolve", - "/jest-runtime", - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-17.0.3.tgz", - "_shasum": "5232783e70577217b6b17d2a1c1766637a1d2fbd", - "_shrinkwrap": null, - "_spec": "jest-haste-map@^17.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "fb-watchman": "^1.9.0", - "graceful-fs": "^4.1.6", - "multimatch": "^2.1.0", - "sane": "~1.4.1", - "worker-farm": "^1.3.1" - }, - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "5232783e70577217b6b17d2a1c1766637a1d2fbd", - "tarball": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-17.0.3.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - } - ], - "name": "jest-haste-map", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/index.js deleted file mode 100644 index ba7f8bb6c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/index.js +++ /dev/null @@ -1,127 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - - -const JasmineReporter = require('./reporter'); - -const jasmineAsync = require('./jasmine-async'); -const fs = require('graceful-fs'); -const path = require('path'); -const vm = require('vm'); - -const JASMINE_PATH = require.resolve('../vendor/jasmine-2.5.2.js'); - -const jasmineScript = new vm.Script(fs.readFileSync(JASMINE_PATH, 'utf8'), { - displayErrors: true, - filename: JASMINE_PATH }); - - -function jasmine2( -config, -environment, -runtime, -testPath) -{ - const reporter = new JasmineReporter(config, environment, testPath); - environment.runScript(jasmineScript); - - const requireJasmine = environment.global.jasmineRequire; - const jasmine = requireJasmine.core(requireJasmine); - - const env = jasmine.getEnv(); - const jasmineInterface = requireJasmine.interface(jasmine, env); - Object.assign(environment.global, jasmineInterface); - env.addReporter(jasmineInterface.jsApiReporter); - - jasmineAsync.install(environment.global); - - environment.global.test = environment.global.it; - environment.global.it.only = environment.global.fit; - environment.global.test.only = environment.global.fit; - environment.global.it.skip = environment.global.xit; - environment.global.test.skip = environment.global.xit; - environment.global.xtest = environment.global.xit; - environment.global.context = environment.global.describe; - environment.global.xcontext = environment.global.xdescribe; - environment.global.context.skip = environment.global.xdescribe; - environment.global.describe.skip = environment.global.xdescribe; - environment.global.describe.only = environment.global.fdescribe; - - env.beforeEach(() => { - if (config.resetModules) { - runtime.resetModules(); - } - - if (config.resetMocks) { - runtime.resetAllMocks(); - } - }); - - env.addReporter(reporter); - - runtime.requireInternalModule( - path.resolve(__dirname, './jest-expect.js'))( - config); - - const snapshotState = runtime.requireInternalModule( - path.resolve(__dirname, './setup-jest-globals.js'))( - { config, testPath }); - - if (config.setupTestFrameworkScriptFile) { - runtime.requireModule(config.setupTestFrameworkScriptFile); - } - - if (config.timers === 'fake') { - environment.fakeTimers.useFakeTimers(); - } - - if (config.testNamePattern) { - const testNameRegex = new RegExp(config.testNamePattern); - env.specFilter = spec => testNameRegex.test(spec.getFullName()); - } - - runtime.requireModule(testPath); - env.execute(); - return reporter. - getResults(). - then(results => addSnapshotData(results, config, snapshotState)); -} - -const addSnapshotData = (results, config, snapshotState) => { - results.testResults.forEach((_ref) => {let fullName = _ref.fullName,status = _ref.status; - if (status === 'pending' || status === 'failed') { - // if test is skipped or failed, we don't want to mark - // its snapshots as obsolete. - snapshotState.markSnapshotsAsCheckedForTest(fullName); - } - }); - - const updateSnapshot = config.updateSnapshot; - const uncheckedCount = snapshotState.getUncheckedCount(); - if (updateSnapshot) { - snapshotState.removeUncheckedKeys(); - } - const status = snapshotState.save(updateSnapshot); - - results.snapshot.fileDeleted = status.deleted; - results.snapshot.added = snapshotState.added; - results.snapshot.matched = snapshotState.matched; - results.snapshot.unmatched = snapshotState.unmatched; - results.snapshot.updated = snapshotState.updated; - results.snapshot.unchecked = !status.deleted ? uncheckedCount : 0; - return results; -}; - -module.exports = jasmine2; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/jasmine-async.js b/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/jasmine-async.js deleted file mode 100644 index 7a59cead9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/jasmine-async.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -/** - * This module adds ability to test async promise code with jasmine by - * returning a promise from `it\fit` and `beforeEach/afterEach` blocks. - */ - -'use strict'; - - - -function isPromise(obj) { - return obj && typeof obj.then === 'function'; -} - -// return a wrapping function: `env.fit = promisifyIt(env.it, env)` -function promisifyIt(originalFn, env) { - return function (specName, fn, timeout) { - if (!fn) { - const spec = originalFn.call(env, specName); - spec.pend('not implemented'); - return spec; - } - - const isAsync = fn.length; // `done` was passed - - if (isAsync) { - // jasmine will handle it - return originalFn.call(env, specName, fn, timeout); - } else { - // we make *all* tests async and run `done` right away if they - // didn't return a promise. - return originalFn.call(env, specName, function (done) { - const returnValue = fn.apply(this, arguments); - - if (isPromise(returnValue)) { - returnValue.then(done).catch(done.fail); - } else if (returnValue === undefined) { - done(); - } else { - done.fail(new Error( - 'Jest: `it` must return either a Promise or undefined.')); - - } - }, timeout); - } - }; -} - -function promisifyLifeCycleFunction(originalFn, env) { - return function (fn, timeout) { - const hasDoneCallback = fn.length; - if (!hasDoneCallback) { - const originalBodyFn = fn; - fn = function (done) { - const returnValue = originalBodyFn.apply(this, arguments); - if (isPromise(returnValue)) { - returnValue.then(done, done.fail); - } else { - done(); - } - }; - } - - return originalFn.call(env, fn, timeout); - }; -} - -function makeConcurrent(originalFn, env) { - return function (specName, fn, timeout) { - let promise; - - try { - promise = fn(); - if (!isPromise(promise)) { - throw new Error('Jest: concurrent tests must return a Promise.'); - } - } catch (error) { - return originalFn.call(env, Promise.reject(error)); - } - - return originalFn.call(env, specName, () => promise, timeout); - }; -} - -function install(global) { - const jasmine = global.jasmine; - - const env = jasmine.getEnv(); - global.pit = env.it = promisifyIt(env.it, env); - env.fit = promisifyIt(env.fit, env); - global.it.concurrent = makeConcurrent(env.it, env); - global.it.concurrent.only = makeConcurrent(env.fit, env); - global.it.concurrent.skip = makeConcurrent(env.xit, env); - global.fit.concurrent = makeConcurrent(env.fit); - env.afterAll = promisifyLifeCycleFunction(env.afterAll, env); - env.afterEach = promisifyLifeCycleFunction(env.afterEach, env); - env.beforeAll = promisifyLifeCycleFunction(env.beforeAll, env); - env.beforeEach = promisifyLifeCycleFunction(env.beforeEach, env); -} - -module.exports = { - install }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/jest-expect.js b/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/jest-expect.js deleted file mode 100644 index db52afb7e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/jest-expect.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict';var _require = - - - - -require('jest-matchers');const expect = _require.expect,setState = _require.setState;var _require2 = - - - - -require('jest-snapshot');const toMatchSnapshot = _require2.toMatchSnapshot,toThrowErrorMatchingSnapshot = _require2.toThrowErrorMatchingSnapshot; - - - - - - - - -module.exports = config => { - global.expect = expect; - setState({ - expand: config.expand }); - - expect.extend({ toMatchSnapshot, toThrowErrorMatchingSnapshot }); - - const jasmine = global.jasmine; - jasmine.addMatchers = jasmineMatchersObject => { - const jestMatchersObject = Object.create(null); - Object.keys(jasmineMatchersObject).forEach(name => { - jestMatchersObject[name] = function () { - const result = jasmineMatchersObject[name](jasmine.matchersUtil, null); - // if there is no 'negativeCompare', both should be handled by `compare` - const negativeCompare = result.negativeCompare || result.compare; - - return this.isNot ? - negativeCompare.apply(null, arguments) : - result.compare.apply(null, arguments); - }; - }); - - global.expect.extend(jestMatchersObject); - }; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/reporter.js b/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/reporter.js deleted file mode 100644 index 56873bdca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/reporter.js +++ /dev/null @@ -1,164 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - - - - - - - -const jasmineRequire = require('../vendor/jasmine-2.5.2.js'); -const jasmine = jasmineRequire.core(jasmineRequire);var _require = -require('jest-util');const formatResultsErrors = _require.formatResultsErrors,JasmineFormatter = _require.JasmineFormatter; - - - - - - - - - - - - - - - - -class Jasmine2Reporter { - - - - - - - - - - constructor(config, environment, testPath) { - this._formatter = new JasmineFormatter(jasmine, environment, config); - this._config = config; - this._testPath = testPath; - this._testResults = []; - this._currentSuites = []; - this._resolve = null; - this._resultsPromise = new Promise(resolve => this._resolve = resolve); - this._startTimes = new Map(); - } - - specStarted(spec) { - this._startTimes.set(spec.id, Date.now()); - } - - specDone(result) { - this._testResults.push( - this._extractSpecResults(result, this._currentSuites.slice(0))); - - } - - suiteStarted(suite) { - this._currentSuites.push(suite.description); - } - - suiteDone() { - this._currentSuites.pop(); - } - - jasmineDone() { - let numFailingTests = 0; - let numPassingTests = 0; - let numPendingTests = 0; - const testResults = this._testResults; - testResults.forEach(testResult => { - if (testResult.status === 'failed') { - numFailingTests++; - } else if (testResult.status === 'pending') { - numPendingTests++; - } else { - numPassingTests++; - } - }); - - const testResult = { - console: null, - failureMessage: formatResultsErrors( - testResults, - this._config, - this._testPath), - - numFailingTests, - numPassingTests, - numPendingTests, - perfStats: { - end: 0, - start: 0 }, - - snapshot: { - added: 0, - fileDeleted: false, - matched: 0, - unchecked: 0, - unmatched: 0, - updated: 0 }, - - testFilePath: this._testPath, - testResults }; - - - this._resolve(testResult); - } - - getFormatter() { - return this._formatter; - } - - getResults() { - return this._resultsPromise; - } - - _extractSpecResults( - specResult, - ancestorTitles) - { - const start = this._startTimes.get(specResult.id); - const duration = start ? Date.now() - start : undefined; - const status = - specResult.status === 'disabled' ? 'pending' : specResult.status; - const results = { - ancestorTitles, - duration, - failureMessages: [], - fullName: specResult.fullName, - numPassingAsserts: 0, // Jasmine2 only returns an array of failed asserts. - status, - title: specResult.description }; - - - specResult.failedExpectations.forEach(failed => { - let message; - if (!failed.matcherName && failed.stack) { - message = failed.stack; - } else { - message = this._formatter.formatMatchFailure(failed); - } - results.failureMessages.push(message); - }); - - return results; - }} - - -module.exports = Jasmine2Reporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/setup-jest-globals.js b/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/setup-jest-globals.js deleted file mode 100644 index c48c1df20..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/build/setup-jest-globals.js +++ /dev/null @@ -1,84 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict';var _require = - - - -require('jest-matchers');const getState = _require.getState,setState = _require.setState;var _require2 = -require('jest-snapshot');const initializeSnapshotState = _require2.initializeSnapshotState,addPlugins = _require2.addPlugins; - -// Get suppressed errors form jest-matchers that weren't throw during -// test execution and add them to the test result, potentially failing -// a passing test. -const addSuppressedErrors = result => {var _getState = - getState();const suppressedErrors = _getState.suppressedErrors; - setState({ suppressedErrors: [] }); - if (suppressedErrors.length) { - result.status = 'failed'; - - result.failedExpectations = suppressedErrors.map(error => ({ - actual: '', - expected: '', - message: error.message, - passed: false, - stack: error.stack })); - - } -}; - -const patchJasmine = () => { - global.jasmine.Spec = (realSpec => { - const Spec = function Spec(attr) { - const resultCallback = attr.resultCallback; - attr.resultCallback = function (result) { - addSuppressedErrors(result); - resultCallback.call(attr, result); - }; - - const onStart = attr.onStart; - attr.onStart = context => { - setState({ currentTestName: context.getFullName() }); - onStart && onStart.call(attr, context); - }; - - realSpec.call(this, attr); - }; - - Spec.prototype = realSpec.prototype; - for (const statics in realSpec) { - if (Object.prototype.hasOwnProperty.call(realSpec, statics)) { - Spec[statics] = realSpec[statics]; - } - } - return Spec; - - })(global.jasmine.Spec); -}; - - - - - - -module.exports = (_ref) => {let testPath = _ref.testPath,config = _ref.config; - addPlugins(config.snapshotSerializers); - setState({ testPath }); - patchJasmine(); - const snapshotState = initializeSnapshotState( - testPath, - config.updateSnapshot, - '', - config.expand); - - setState({ snapshotState }); - // Return it back to the outer scope (test runner outside the VM). - return snapshotState; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/package.json deleted file mode 100644 index d0b504423..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "jest-jasmine2@^17.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "jest-jasmine2@>=17.0.3 <18.0.0", - "_id": "jest-jasmine2@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest-jasmine2", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/jest-jasmine2-17.0.3.tgz_1479368475384_0.9555567961651832" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-jasmine2", - "raw": "jest-jasmine2@^17.0.3", - "rawSpec": "^17.0.3", - "scope": null, - "spec": ">=17.0.3 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-config", - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-17.0.3.tgz", - "_shasum": "d4336b89f3ad288269a1c8e2bfc180dcf89c6ad1", - "_shrinkwrap": null, - "_spec": "jest-jasmine2@^17.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "graceful-fs": "^4.1.6", - "jest-matchers": "^17.0.3", - "jest-snapshot": "^17.0.3", - "jest-util": "^17.0.2" - }, - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "d4336b89f3ad288269a1c8e2bfc180dcf89c6ad1", - "tarball": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-17.0.3.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - } - ], - "name": "jest-jasmine2", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/vendor/jasmine-2.5.2.js b/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/vendor/jasmine-2.5.2.js deleted file mode 100644 index 9c235425d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2/vendor/jasmine-2.5.2.js +++ /dev/null @@ -1,3667 +0,0 @@ -/* -Copyright (c) 2008-2016 Pivotal Labs - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ -var getJasmineRequireObj = (function (jasmineGlobal) { - var jasmineRequire; - - if (typeof module !== 'undefined' && module.exports && typeof exports !== 'undefined') { - if (typeof global !== 'undefined') { - jasmineGlobal = global; - } else { - jasmineGlobal = {}; - } - jasmineRequire = exports; - } else { - if (typeof window !== 'undefined' && typeof window.toString === 'function' && window.toString() === '[object GjsGlobal]') { - jasmineGlobal = window; - } - jasmineRequire = jasmineGlobal.jasmineRequire = jasmineGlobal.jasmineRequire || {}; - } - - function getJasmineRequire() { - return jasmineRequire; - } - - getJasmineRequire().core = function(jRequire) { - var j$ = {}; - - jRequire.base(j$, jasmineGlobal); - j$.util = jRequire.util(); - j$.errors = jRequire.errors(); - j$.formatErrorMsg = jRequire.formatErrorMsg(); - j$.Any = jRequire.Any(j$); - j$.Anything = jRequire.Anything(j$); - j$.CallTracker = jRequire.CallTracker(j$); - j$.MockDate = jRequire.MockDate(); - j$.Clock = jRequire.Clock(); - j$.DelayedFunctionScheduler = jRequire.DelayedFunctionScheduler(); - j$.Env = jRequire.Env(j$); - j$.ExceptionFormatter = jRequire.ExceptionFormatter(); - j$.Expectation = jRequire.Expectation(); - j$.buildExpectationResult = jRequire.buildExpectationResult(); - j$.JsApiReporter = jRequire.JsApiReporter(); - j$.matchersUtil = jRequire.matchersUtil(j$); - j$.ObjectContaining = jRequire.ObjectContaining(j$); - j$.ArrayContaining = jRequire.ArrayContaining(j$); - j$.pp = jRequire.pp(j$); - j$.QueueRunner = jRequire.QueueRunner(j$); - j$.ReportDispatcher = jRequire.ReportDispatcher(); - j$.Spec = jRequire.Spec(j$); - j$.SpyRegistry = jRequire.SpyRegistry(j$); - j$.SpyStrategy = jRequire.SpyStrategy(j$); - j$.StringMatching = jRequire.StringMatching(j$); - j$.Suite = jRequire.Suite(j$); - j$.Timer = jRequire.Timer(); - j$.TreeProcessor = jRequire.TreeProcessor(); - j$.version = jRequire.version(); - j$.Order = jRequire.Order(); - - j$.matchers = jRequire.requireMatchers(jRequire, j$); - - return j$; - }; - - return getJasmineRequire; -})(this); - -getJasmineRequireObj().requireMatchers = function(jRequire, j$) { - var availableMatchers = [ - 'toBe', - 'toBeCloseTo', - 'toBeDefined', - 'toBeFalsy', - 'toBeGreaterThan', - 'toBeGreaterThanOrEqual', - 'toBeLessThanOrEqual', - 'toBeLessThan', - 'toBeNaN', - 'toBeNull', - 'toBeTruthy', - 'toBeUndefined', - 'toContain', - 'toEqual', - 'toHaveBeenCalled', - 'toHaveBeenCalledWith', - 'toHaveBeenCalledTimes', - 'toMatch', - 'toThrow', - 'toThrowError' - ], - matchers = {}; - - for (var i = 0; i < availableMatchers.length; i++) { - var name = availableMatchers[i]; - matchers[name] = jRequire[name](j$); - } - - return matchers; -}; - -getJasmineRequireObj().base = function(j$, jasmineGlobal) { - j$.unimplementedMethod_ = function() { - throw new Error('unimplemented method'); - }; - - j$.MAX_PRETTY_PRINT_DEPTH = 40; - j$.MAX_PRETTY_PRINT_ARRAY_LENGTH = 100; - j$.DEFAULT_TIMEOUT_INTERVAL = 5000; - - j$.getGlobal = function() { - return jasmineGlobal; - }; - - j$.getEnv = function(options) { - var env = j$.currentEnv_ = j$.currentEnv_ || new j$.Env(options); - //jasmine. singletons in here (setTimeout blah blah). - return env; - }; - - j$.isArray_ = function(value) { - return j$.isA_('Array', value); - }; - - j$.isString_ = function(value) { - return j$.isA_('String', value); - }; - - j$.isNumber_ = function(value) { - return j$.isA_('Number', value); - }; - - j$.isFunction_ = function(value) { - return j$.isA_('Function', value); - }; - - j$.isA_ = function(typeName, value) { - return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; - }; - - j$.isDomNode = function(obj) { - return obj.nodeType > 0; - }; - - j$.fnNameFor = function(func) { - if (func.name) { - return func.name; - } - - var matches = func.toString().match(/^\s*function\s*(\w*)\s*\(/); - return matches ? matches[1] : ''; - }; - - j$.any = function(clazz) { - return new j$.Any(clazz); - }; - - j$.anything = function() { - return new j$.Anything(); - }; - - j$.objectContaining = function(sample) { - return new j$.ObjectContaining(sample); - }; - - j$.stringMatching = function(expected) { - return new j$.StringMatching(expected); - }; - - j$.arrayContaining = function(sample) { - return new j$.ArrayContaining(sample); - }; - - j$.createSpy = function(name, originalFn) { - - var spyStrategy = new j$.SpyStrategy({ - name: name, - fn: originalFn, - getSpy: function() { return spy; } - }), - callTracker = new j$.CallTracker(), - spy = function() { - var callData = { - object: this, - args: Array.prototype.slice.apply(arguments) - }; - - callTracker.track(callData); - var returnValue = spyStrategy.exec.apply(this, arguments); - callData.returnValue = returnValue; - - return returnValue; - }; - - for (var prop in originalFn) { - if (prop === 'and' || prop === 'calls') { - throw new Error('Jasmine spies would overwrite the \'and\' and \'calls\' properties on the object being spied upon'); - } - - spy[prop] = originalFn[prop]; - } - - spy.and = spyStrategy; - spy.calls = callTracker; - - return spy; - }; - - j$.isSpy = function(putativeSpy) { - if (!putativeSpy) { - return false; - } - return putativeSpy.and instanceof j$.SpyStrategy && - putativeSpy.calls instanceof j$.CallTracker; - }; - - j$.createSpyObj = function(baseName, methodNames) { - if (j$.isArray_(baseName) && j$.util.isUndefined(methodNames)) { - methodNames = baseName; - baseName = 'unknown'; - } - - if (!j$.isArray_(methodNames) || methodNames.length === 0) { - throw 'createSpyObj requires a non-empty array of method names to create spies for'; - } - var obj = {}; - for (var i = 0; i < methodNames.length; i++) { - obj[methodNames[i]] = j$.createSpy(baseName + '.' + methodNames[i]); - } - return obj; - }; -}; - -getJasmineRequireObj().util = function() { - - var util = {}; - - util.inherit = function(childClass, parentClass) { - var Subclass = function() { - }; - Subclass.prototype = parentClass.prototype; - childClass.prototype = new Subclass(); - }; - - util.htmlEscape = function(str) { - if (!str) { - return str; - } - return str.replace(/&/g, '&') - .replace(//g, '>'); - }; - - util.argsToArray = function(args) { - var arrayOfArgs = []; - for (var i = 0; i < args.length; i++) { - arrayOfArgs.push(args[i]); - } - return arrayOfArgs; - }; - - util.isUndefined = function(obj) { - return obj === void 0; - }; - - util.arrayContains = function(array, search) { - var i = array.length; - while (i--) { - if (array[i] === search) { - return true; - } - } - return false; - }; - - util.clone = function(obj) { - if (Object.prototype.toString.apply(obj) === '[object Array]') { - return obj.slice(); - } - - var cloned = {}; - for (var prop in obj) { - // @ccarlesso allows looping on objects without `Object.prototype`. - if (Object.prototype.hasOwnProperty.call(obj, prop)) { - cloned[prop] = obj[prop]; - } - } - - return cloned; - }; - - return util; -}; - -getJasmineRequireObj().Spec = function(j$) { - function Spec(attrs) { - this.expectationFactory = attrs.expectationFactory; - this.resultCallback = attrs.resultCallback || function() {}; - this.id = attrs.id; - this.description = attrs.description || ''; - this.queueableFn = attrs.queueableFn; - this.beforeAndAfterFns = attrs.beforeAndAfterFns || function() { return {befores: [], afters: []}; }; - this.userContext = attrs.userContext || function() { return {}; }; - this.onStart = attrs.onStart || function() {}; - this.getSpecName = attrs.getSpecName || function() { return ''; }; - this.expectationResultFactory = attrs.expectationResultFactory || function() { }; - this.queueRunnerFactory = attrs.queueRunnerFactory || function() {}; - this.catchingExceptions = attrs.catchingExceptions || function() { return true; }; - this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure; - - if (!this.queueableFn.fn) { - this.pend(); - } - - this.result = { - id: this.id, - description: this.description, - fullName: this.getFullName(), - failedExpectations: [], - passedExpectations: [], - pendingReason: '' - }; - } - - Spec.prototype.addExpectationResult = function(passed, data, isError) { - var expectationResult = this.expectationResultFactory(data); - if (passed) { - this.result.passedExpectations.push(expectationResult); - } else { - this.result.failedExpectations.push(expectationResult); - - if (this.throwOnExpectationFailure && !isError) { - throw new j$.errors.ExpectationFailed(); - } - } - }; - - Spec.prototype.expect = function(actual) { - return this.expectationFactory(actual, this); - }; - - Spec.prototype.execute = function(onComplete, enabled) { - var self = this; - - this.onStart(this); - - if (!this.isExecutable() || this.markedPending || enabled === false) { - complete(enabled); - return; - } - - var fns = this.beforeAndAfterFns(); - var allFns = fns.befores.concat(this.queueableFn).concat(fns.afters); - - this.queueRunnerFactory({ - queueableFns: allFns, - onException: function() { self.onException.apply(self, arguments); }, - onComplete: complete, - userContext: this.userContext() - }); - - function complete(enabledAgain) { - self.result.status = self.status(enabledAgain); - self.resultCallback(self.result); - - if (onComplete) { - onComplete(); - } - } - }; - - Spec.prototype.onException = function onException(e) { - if (Spec.isPendingSpecException(e)) { - this.pend(extractCustomPendingMessage(e)); - return; - } - - if (e instanceof j$.errors.ExpectationFailed) { - return; - } - - this.addExpectationResult(false, { - matcherName: '', - passed: false, - expected: '', - actual: '', - error: e - }, true); - }; - - Spec.prototype.disable = function() { - this.disabled = true; - }; - - Spec.prototype.pend = function(message) { - this.markedPending = true; - if (message) { - this.result.pendingReason = message; - } - }; - - Spec.prototype.getResult = function() { - this.result.status = this.status(); - return this.result; - }; - - Spec.prototype.status = function(enabled) { - if (this.disabled || enabled === false) { - return 'disabled'; - } - - if (this.markedPending) { - return 'pending'; - } - - if (this.result.failedExpectations.length > 0) { - return 'failed'; - } else { - return 'passed'; - } - }; - - Spec.prototype.isExecutable = function() { - return !this.disabled; - }; - - Spec.prototype.getFullName = function() { - return this.getSpecName(this); - }; - - var extractCustomPendingMessage = function(e) { - var fullMessage = e.toString(), - boilerplateStart = fullMessage.indexOf(Spec.pendingSpecExceptionMessage), - boilerplateEnd = boilerplateStart + Spec.pendingSpecExceptionMessage.length; - - return fullMessage.substr(boilerplateEnd); - }; - - Spec.pendingSpecExceptionMessage = '=> marked Pending'; - - Spec.isPendingSpecException = function(e) { - return !!(e && e.toString && e.toString().indexOf(Spec.pendingSpecExceptionMessage) !== -1); - }; - - return Spec; -}; - -if (typeof window == void 0 && typeof exports == 'object') { - exports.Spec = jasmineRequire.Spec; -} - -/*jshint bitwise: false*/ - -getJasmineRequireObj().Order = function() { - function Order(options) { - this.random = 'random' in options ? options.random : true; - var seed = this.seed = options.seed || generateSeed(); - this.sort = this.random ? randomOrder : naturalOrder; - - function naturalOrder(items) { - return items; - } - - function randomOrder(items) { - var copy = items.slice(); - copy.sort(function(a, b) { - return jenkinsHash(seed + a.id) - jenkinsHash(seed + b.id); - }); - return copy; - } - - function generateSeed() { - return String(Math.random()).slice(-5); - } - - // Bob Jenkins One-at-a-Time Hash algorithm is a non-cryptographic hash function - // used to get a different output when the key changes slighly. - // We use your return to sort the children randomly in a consistent way when - // used in conjunction with a seed - - function jenkinsHash(key) { - var hash, i; - for(hash = i = 0; i < key.length; ++i) { - hash += key.charCodeAt(i); - hash += (hash << 10); - hash ^= (hash >> 6); - } - hash += (hash << 3); - hash ^= (hash >> 11); - hash += (hash << 15); - return hash; - } - - } - - return Order; -}; - -getJasmineRequireObj().Env = function(j$) { - function Env(options) { - options = options || {}; - - var self = this; - var global = options.global || j$.getGlobal(); - - var totalSpecsDefined = 0; - - var catchExceptions = true; - - var realSetTimeout = j$.getGlobal().setTimeout; - var realClearTimeout = j$.getGlobal().clearTimeout; - this.clock = new j$.Clock(global, function () { return new j$.DelayedFunctionScheduler(); }, new j$.MockDate(global)); - - var runnableResources = {}; - - var currentSpec = null; - var currentlyExecutingSuites = []; - var currentDeclarationSuite = null; - var throwOnExpectationFailure = false; - var random = false; - var seed = null; - - var currentSuite = function() { - return currentlyExecutingSuites[currentlyExecutingSuites.length - 1]; - }; - - var currentRunnable = function() { - return currentSpec || currentSuite(); - }; - - var reporter = new j$.ReportDispatcher([ - 'jasmineStarted', - 'jasmineDone', - 'suiteStarted', - 'suiteDone', - 'specStarted', - 'specDone' - ]); - - this.specFilter = function() { - return true; - }; - - this.addCustomEqualityTester = function(tester) { - if(!currentRunnable()) { - throw new Error('Custom Equalities must be added in a before function or a spec'); - } - runnableResources[currentRunnable().id].customEqualityTesters.push(tester); - }; - - this.addMatchers = function(matchersToAdd) { - if(!currentRunnable()) { - throw new Error('Matchers must be added in a before function or a spec'); - } - var customMatchers = runnableResources[currentRunnable().id].customMatchers; - for (var matcherName in matchersToAdd) { - customMatchers[matcherName] = matchersToAdd[matcherName]; - } - }; - - j$.Expectation.addCoreMatchers(j$.matchers); - - var nextSpecId = 0; - var getNextSpecId = function() { - return 'spec' + nextSpecId++; - }; - - var nextSuiteId = 0; - var getNextSuiteId = function() { - return 'suite' + nextSuiteId++; - }; - - var expectationFactory = function(actual, spec) { - return j$.Expectation.Factory({ - util: j$.matchersUtil, - customEqualityTesters: runnableResources[spec.id].customEqualityTesters, - customMatchers: runnableResources[spec.id].customMatchers, - actual: actual, - addExpectationResult: addExpectationResult - }); - - function addExpectationResult(passed, result) { - return spec.addExpectationResult(passed, result); - } - }; - - var defaultResourcesForRunnable = function(id, parentRunnableId) { - var resources = {spies: [], customEqualityTesters: [], customMatchers: {}}; - - if(runnableResources[parentRunnableId]){ - resources.customEqualityTesters = j$.util.clone(runnableResources[parentRunnableId].customEqualityTesters); - resources.customMatchers = j$.util.clone(runnableResources[parentRunnableId].customMatchers); - } - - runnableResources[id] = resources; - }; - - var clearResourcesForRunnable = function(id) { - spyRegistry.clearSpies(); - delete runnableResources[id]; - }; - - var beforeAndAfterFns = function(suite) { - return function() { - var befores = [], - afters = []; - - while(suite) { - befores = befores.concat(suite.beforeFns); - afters = afters.concat(suite.afterFns); - - suite = suite.parentSuite; - } - - return { - befores: befores.reverse(), - afters: afters - }; - }; - }; - - var getSpecName = function(spec, suite) { - var fullName = [spec.description], - suiteFullName = suite.getFullName(); - - if (suiteFullName !== '') { - fullName.unshift(suiteFullName); - // CUSTOM JEST CHANGE: we append "test" at the top level for snapshots. - } else if (!suite.parentSuite) { - fullName.unshift('test'); - } - return fullName.join(' '); - }; - - // TODO: we may just be able to pass in the fn instead of wrapping here - var buildExpectationResult = j$.buildExpectationResult, - exceptionFormatter = new j$.ExceptionFormatter(), - expectationResultFactory = function(attrs) { - attrs.messageFormatter = exceptionFormatter.message; - attrs.stackFormatter = exceptionFormatter.stack; - - return buildExpectationResult(attrs); - }; - - // TODO: fix this naming, and here's where the value comes in - this.catchExceptions = function(value) { - catchExceptions = !!value; - return catchExceptions; - }; - - this.catchingExceptions = function() { - return catchExceptions; - }; - - var maximumSpecCallbackDepth = 20; - var currentSpecCallbackDepth = 0; - - function clearStack(fn) { - currentSpecCallbackDepth++; - if (currentSpecCallbackDepth >= maximumSpecCallbackDepth) { - currentSpecCallbackDepth = 0; - realSetTimeout(fn, 0); - } else { - fn(); - } - } - - var catchException = function(e) { - return j$.Spec.isPendingSpecException(e) || catchExceptions; - }; - - this.throwOnExpectationFailure = function(value) { - throwOnExpectationFailure = !!value; - }; - - this.throwingExpectationFailures = function() { - return throwOnExpectationFailure; - }; - - this.randomizeTests = function(value) { - random = !!value; - }; - - this.randomTests = function() { - return random; - }; - - this.seed = function(value) { - if (value) { - seed = value; - } - return seed; - }; - - var queueRunnerFactory = function(options) { - options.catchException = catchException; - options.clearStack = options.clearStack || clearStack; - options.timeout = {setTimeout: realSetTimeout, clearTimeout: realClearTimeout}; - options.fail = self.fail; - - new j$.QueueRunner(options).execute(); - }; - - var topSuite = new j$.Suite({ - env: this, - id: getNextSuiteId(), - description: 'test', - expectationFactory: expectationFactory, - expectationResultFactory: expectationResultFactory - }); - defaultResourcesForRunnable(topSuite.id); - currentDeclarationSuite = topSuite; - - this.topSuite = function() { - return topSuite; - }; - - this.execute = function(runnablesToRun) { - if(!runnablesToRun) { - if (focusedRunnables.length) { - runnablesToRun = focusedRunnables; - } else { - runnablesToRun = [topSuite.id]; - } - } - - var order = new j$.Order({ - random: random, - seed: seed - }); - - var processor = new j$.TreeProcessor({ - tree: topSuite, - runnableIds: runnablesToRun, - queueRunnerFactory: queueRunnerFactory, - nodeStart: function(suite) { - currentlyExecutingSuites.push(suite); - defaultResourcesForRunnable(suite.id, suite.parentSuite.id); - reporter.suiteStarted(suite.result); - }, - nodeComplete: function(suite, result) { - if (!suite.disabled) { - clearResourcesForRunnable(suite.id); - } - currentlyExecutingSuites.pop(); - reporter.suiteDone(result); - }, - orderChildren: function(node) { - return order.sort(node.children); - } - }); - - if(!processor.processTree().valid) { - throw new Error('Invalid order: would cause a beforeAll or afterAll to be run multiple times'); - } - - reporter.jasmineStarted({ - totalSpecsDefined: totalSpecsDefined - }); - - currentlyExecutingSuites.push(topSuite); - - processor.execute(function() { - clearResourcesForRunnable(topSuite.id); - currentlyExecutingSuites.pop(); - - reporter.jasmineDone({ - order: order, - failedExpectations: topSuite.result.failedExpectations - }); - }); - }; - - this.addReporter = function(reporterToAdd) { - reporter.addReporter(reporterToAdd); - }; - - this.provideFallbackReporter = function(reporterToAdd) { - reporter.provideFallbackReporter(reporterToAdd); - }; - - this.clearReporters = function() { - reporter.clearReporters(); - }; - - var spyRegistry = new j$.SpyRegistry({currentSpies: function() { - if(!currentRunnable()) { - throw new Error('Spies must be created in a before function or a spec'); - } - return runnableResources[currentRunnable().id].spies; - }}); - - this.allowRespy = function(allow){ - spyRegistry.allowRespy(allow); - }; - - this.spyOn = function() { - return spyRegistry.spyOn.apply(spyRegistry, arguments); - }; - - var suiteFactory = function(description) { - var suite = new j$.Suite({ - env: self, - id: getNextSuiteId(), - description: description, - parentSuite: currentDeclarationSuite, - expectationFactory: expectationFactory, - expectationResultFactory: expectationResultFactory, - throwOnExpectationFailure: throwOnExpectationFailure - }); - - return suite; - }; - - this.describe = function(description, specDefinitions) { - var suite = suiteFactory(description); - if (specDefinitions.length > 0) { - throw new Error('describe does not expect any arguments'); - } - if (currentDeclarationSuite.markedPending) { - suite.pend(); - } - addSpecsToSuite(suite, specDefinitions); - return suite; - }; - - this.xdescribe = function(description, specDefinitions) { - var suite = suiteFactory(description); - suite.pend(); - addSpecsToSuite(suite, specDefinitions); - return suite; - }; - - var focusedRunnables = []; - - this.fdescribe = function(description, specDefinitions) { - var suite = suiteFactory(description); - suite.isFocused = true; - - focusedRunnables.push(suite.id); - unfocusAncestor(); - addSpecsToSuite(suite, specDefinitions); - - return suite; - }; - - function addSpecsToSuite(suite, specDefinitions) { - var parentSuite = currentDeclarationSuite; - parentSuite.addChild(suite); - currentDeclarationSuite = suite; - - var declarationError = null; - try { - specDefinitions.call(suite); - } catch (e) { - declarationError = e; - } - - if (declarationError) { - self.it('encountered a declaration exception', function() { - throw declarationError; - }); - } - - currentDeclarationSuite = parentSuite; - } - - function findFocusedAncestor(suite) { - while (suite) { - if (suite.isFocused) { - return suite.id; - } - suite = suite.parentSuite; - } - - return null; - } - - function unfocusAncestor() { - var focusedAncestor = findFocusedAncestor(currentDeclarationSuite); - if (focusedAncestor) { - for (var i = 0; i < focusedRunnables.length; i++) { - if (focusedRunnables[i] === focusedAncestor) { - focusedRunnables.splice(i, 1); - break; - } - } - } - } - - var specFactory = function(description, fn, suite, timeout) { - totalSpecsDefined++; - var spec = new j$.Spec({ - id: getNextSpecId(), - beforeAndAfterFns: beforeAndAfterFns(suite), - expectationFactory: expectationFactory, - resultCallback: specResultCallback, - getSpecName: function(spec) { - return getSpecName(spec, suite); - }, - onStart: specStarted, - description: description, - expectationResultFactory: expectationResultFactory, - queueRunnerFactory: queueRunnerFactory, - userContext: function() { return suite.clonedSharedUserContext(); }, - queueableFn: { - fn: fn, - timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } - }, - throwOnExpectationFailure: throwOnExpectationFailure - }); - - if (!self.specFilter(spec)) { - spec.disable(); - } - - return spec; - - function specResultCallback(result) { - clearResourcesForRunnable(spec.id); - currentSpec = null; - reporter.specDone(result); - } - - function specStarted(spec) { - currentSpec = spec; - defaultResourcesForRunnable(spec.id, suite.id); - reporter.specStarted(spec.result); - } - }; - - this.it = function(description, fn, timeout) { - var spec = specFactory(description, fn, currentDeclarationSuite, timeout); - if (currentDeclarationSuite.markedPending) { - spec.pend(); - } - currentDeclarationSuite.addChild(spec); - return spec; - }; - - this.xit = function() { - var spec = this.it.apply(this, arguments); - spec.pend('Temporarily disabled with xit'); - return spec; - }; - - this.fit = function(description, fn, timeout){ - var spec = specFactory(description, fn, currentDeclarationSuite, timeout); - currentDeclarationSuite.addChild(spec); - focusedRunnables.push(spec.id); - unfocusAncestor(); - return spec; - }; - - this.expect = function(actual) { - if (!currentRunnable()) { - throw new Error('\'expect\' was used when there was no current spec, this could be because an asynchronous test timed out'); - } - - return currentRunnable().expect(actual); - }; - - this.beforeEach = function(beforeEachFunction, timeout) { - currentDeclarationSuite.beforeEach({ - fn: beforeEachFunction, - timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } - }); - }; - - this.beforeAll = function(beforeAllFunction, timeout) { - currentDeclarationSuite.beforeAll({ - fn: beforeAllFunction, - timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } - }); - }; - - this.afterEach = function(afterEachFunction, timeout) { - currentDeclarationSuite.afterEach({ - fn: afterEachFunction, - timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } - }); - }; - - this.afterAll = function(afterAllFunction, timeout) { - currentDeclarationSuite.afterAll({ - fn: afterAllFunction, - timeout: function() { return timeout || j$.DEFAULT_TIMEOUT_INTERVAL; } - }); - }; - - this.pending = function(message) { - var fullMessage = j$.Spec.pendingSpecExceptionMessage; - if(message) { - fullMessage += message; - } - throw fullMessage; - }; - - this.fail = function(error) { - var message = 'Failed'; - if (error) { - message += ': '; - message += error.message || error; - } - - currentRunnable().addExpectationResult(false, { - matcherName: '', - passed: false, - expected: '', - actual: '', - message: message, - error: error && error.message ? error : null - }); - }; - } - - return Env; -}; - -getJasmineRequireObj().JsApiReporter = function() { - - var noopTimer = { - start: function(){}, - elapsed: function(){ return 0; } - }; - - function JsApiReporter(options) { - var timer = options.timer || noopTimer, - status = 'loaded'; - - this.started = false; - this.finished = false; - this.runDetails = {}; - - this.jasmineStarted = function() { - this.started = true; - status = 'started'; - timer.start(); - }; - - var executionTime; - - this.jasmineDone = function(runDetails) { - this.finished = true; - this.runDetails = runDetails; - executionTime = timer.elapsed(); - status = 'done'; - }; - - this.status = function() { - return status; - }; - - var suites = [], - suites_hash = {}; - - this.suiteStarted = function(result) { - suites_hash[result.id] = result; - }; - - this.suiteDone = function(result) { - storeSuite(result); - }; - - this.suiteResults = function(index, length) { - return suites.slice(index, index + length); - }; - - function storeSuite(result) { - suites.push(result); - suites_hash[result.id] = result; - } - - this.suites = function() { - return suites_hash; - }; - - var specs = []; - - this.specDone = function(result) { - specs.push(result); - }; - - this.specResults = function(index, length) { - return specs.slice(index, index + length); - }; - - this.specs = function() { - return specs; - }; - - this.executionTime = function() { - return executionTime; - }; - - } - - return JsApiReporter; -}; - -getJasmineRequireObj().CallTracker = function(j$) { - - function CallTracker() { - var calls = []; - var opts = {}; - - function argCloner(context) { - var clonedArgs = []; - var argsAsArray = j$.util.argsToArray(context.args); - for(var i = 0; i < argsAsArray.length; i++) { - if(Object.prototype.toString.apply(argsAsArray[i]).match(/^\[object/)) { - clonedArgs.push(j$.util.clone(argsAsArray[i])); - } else { - clonedArgs.push(argsAsArray[i]); - } - } - context.args = clonedArgs; - } - - this.track = function(context) { - if(opts.cloneArgs) { - argCloner(context); - } - calls.push(context); - }; - - this.any = function() { - return !!calls.length; - }; - - this.count = function() { - return calls.length; - }; - - this.argsFor = function(index) { - var call = calls[index]; - return call ? call.args : []; - }; - - this.all = function() { - return calls; - }; - - this.allArgs = function() { - var callArgs = []; - for(var i = 0; i < calls.length; i++){ - callArgs.push(calls[i].args); - } - - return callArgs; - }; - - this.first = function() { - return calls[0]; - }; - - this.mostRecent = function() { - return calls[calls.length - 1]; - }; - - this.reset = function() { - calls = []; - }; - - this.saveArgumentsByValue = function() { - opts.cloneArgs = true; - }; - - } - - return CallTracker; -}; - -getJasmineRequireObj().Clock = function() { - function Clock(global, delayedFunctionSchedulerFactory, mockDate) { - var self = this, - realTimingFunctions = { - setTimeout: global.setTimeout, - clearTimeout: global.clearTimeout, - setInterval: global.setInterval, - clearInterval: global.clearInterval - }, - fakeTimingFunctions = { - setTimeout: setTimeout, - clearTimeout: clearTimeout, - setInterval: setInterval, - clearInterval: clearInterval - }, - installed = false, - delayedFunctionScheduler, - timer; - - - self.install = function() { - if(!originalTimingFunctionsIntact()) { - throw new Error('Jasmine Clock was unable to install over custom global timer functions. Is the clock already installed?'); - } - replace(global, fakeTimingFunctions); - timer = fakeTimingFunctions; - delayedFunctionScheduler = delayedFunctionSchedulerFactory(); - installed = true; - - return self; - }; - - self.uninstall = function() { - delayedFunctionScheduler = null; - mockDate.uninstall(); - replace(global, realTimingFunctions); - - timer = realTimingFunctions; - installed = false; - }; - - self.withMock = function(closure) { - this.install(); - try { - closure(); - } finally { - this.uninstall(); - } - }; - - self.mockDate = function(initialDate) { - mockDate.install(initialDate); - }; - - self.setTimeout = function(fn, delay, params) { - if (legacyIE()) { - if (arguments.length > 2) { - throw new Error('IE < 9 cannot support extra params to setTimeout without a polyfill'); - } - return timer.setTimeout(fn, delay); - } - return Function.prototype.apply.apply(timer.setTimeout, [global, arguments]); - }; - - self.setInterval = function(fn, delay, params) { - if (legacyIE()) { - if (arguments.length > 2) { - throw new Error('IE < 9 cannot support extra params to setInterval without a polyfill'); - } - return timer.setInterval(fn, delay); - } - return Function.prototype.apply.apply(timer.setInterval, [global, arguments]); - }; - - self.clearTimeout = function(id) { - return Function.prototype.call.apply(timer.clearTimeout, [global, id]); - }; - - self.clearInterval = function(id) { - return Function.prototype.call.apply(timer.clearInterval, [global, id]); - }; - - self.tick = function(millis) { - if (installed) { - delayedFunctionScheduler.tick(millis, function(millis) { mockDate.tick(millis); }); - } else { - throw new Error('Mock clock is not installed, use jasmine.clock().install()'); - } - }; - - return self; - - function originalTimingFunctionsIntact() { - return global.setTimeout === realTimingFunctions.setTimeout && - global.clearTimeout === realTimingFunctions.clearTimeout && - global.setInterval === realTimingFunctions.setInterval && - global.clearInterval === realTimingFunctions.clearInterval; - } - - function legacyIE() { - //if these methods are polyfilled, apply will be present - return !(realTimingFunctions.setTimeout || realTimingFunctions.setInterval).apply; - } - - function replace(dest, source) { - for (var prop in source) { - dest[prop] = source[prop]; - } - } - - function setTimeout(fn, delay) { - return delayedFunctionScheduler.scheduleFunction(fn, delay, argSlice(arguments, 2)); - } - - function clearTimeout(id) { - return delayedFunctionScheduler.removeFunctionWithId(id); - } - - function setInterval(fn, interval) { - return delayedFunctionScheduler.scheduleFunction(fn, interval, argSlice(arguments, 2), true); - } - - function clearInterval(id) { - return delayedFunctionScheduler.removeFunctionWithId(id); - } - - function argSlice(argsObj, n) { - return Array.prototype.slice.call(argsObj, n); - } - } - - return Clock; -}; - -getJasmineRequireObj().DelayedFunctionScheduler = function() { - function DelayedFunctionScheduler() { - var self = this; - var scheduledLookup = []; - var scheduledFunctions = {}; - var currentTime = 0; - var delayedFnCount = 0; - - self.tick = function(millis, tickDate) { - millis = millis || 0; - var endTime = currentTime + millis; - - runScheduledFunctions(endTime, tickDate); - currentTime = endTime; - }; - - self.scheduleFunction = function(funcToCall, millis, params, recurring, timeoutKey, runAtMillis) { - var f; - if (typeof(funcToCall) === 'string') { - /* jshint evil: true */ - f = function() { return eval(funcToCall); }; - /* jshint evil: false */ - } else { - f = funcToCall; - } - - millis = millis || 0; - timeoutKey = timeoutKey || ++delayedFnCount; - runAtMillis = runAtMillis || (currentTime + millis); - - var funcToSchedule = { - runAtMillis: runAtMillis, - funcToCall: f, - recurring: recurring, - params: params, - timeoutKey: timeoutKey, - millis: millis - }; - - if (runAtMillis in scheduledFunctions) { - scheduledFunctions[runAtMillis].push(funcToSchedule); - } else { - scheduledFunctions[runAtMillis] = [funcToSchedule]; - scheduledLookup.push(runAtMillis); - scheduledLookup.sort(function (a, b) { - return a - b; - }); - } - - return timeoutKey; - }; - - self.removeFunctionWithId = function(timeoutKey) { - for (var runAtMillis in scheduledFunctions) { - var funcs = scheduledFunctions[runAtMillis]; - var i = indexOfFirstToPass(funcs, function (func) { - return func.timeoutKey === timeoutKey; - }); - - if (i > -1) { - if (funcs.length === 1) { - delete scheduledFunctions[runAtMillis]; - deleteFromLookup(runAtMillis); - } else { - funcs.splice(i, 1); - } - - // intervals get rescheduled when executed, so there's never more - // than a single scheduled function with a given timeoutKey - break; - } - } - }; - - return self; - - function indexOfFirstToPass(array, testFn) { - var index = -1; - - for (var i = 0; i < array.length; ++i) { - if (testFn(array[i])) { - index = i; - break; - } - } - - return index; - } - - function deleteFromLookup(key) { - var value = Number(key); - var i = indexOfFirstToPass(scheduledLookup, function (millis) { - return millis === value; - }); - - if (i > -1) { - scheduledLookup.splice(i, 1); - } - } - - function reschedule(scheduledFn) { - self.scheduleFunction(scheduledFn.funcToCall, - scheduledFn.millis, - scheduledFn.params, - true, - scheduledFn.timeoutKey, - scheduledFn.runAtMillis + scheduledFn.millis); - } - - function forEachFunction(funcsToRun, callback) { - for (var i = 0; i < funcsToRun.length; ++i) { - callback(funcsToRun[i]); - } - } - - function runScheduledFunctions(endTime, tickDate) { - tickDate = tickDate || function() {}; - if (scheduledLookup.length === 0 || scheduledLookup[0] > endTime) { - tickDate(endTime - currentTime); - return; - } - - do { - var newCurrentTime = scheduledLookup.shift(); - tickDate(newCurrentTime - currentTime); - - currentTime = newCurrentTime; - - var funcsToRun = scheduledFunctions[currentTime]; - delete scheduledFunctions[currentTime]; - - forEachFunction(funcsToRun, function(funcToRun) { - if (funcToRun.recurring) { - reschedule(funcToRun); - } - }); - - forEachFunction(funcsToRun, function(funcToRun) { - funcToRun.funcToCall.apply(null, funcToRun.params || []); - }); - } while (scheduledLookup.length > 0 && - // checking first if we're out of time prevents setTimeout(0) - // scheduled in a funcToRun from forcing an extra iteration - currentTime !== endTime && - scheduledLookup[0] <= endTime); - - // ran out of functions to call, but still time left on the clock - if (currentTime !== endTime) { - tickDate(endTime - currentTime); - } - } - } - - return DelayedFunctionScheduler; -}; - -getJasmineRequireObj().ExceptionFormatter = function() { - function ExceptionFormatter() { - this.message = function(error) { - var message = ''; - - if (error.name && error.message) { - message += error.name + ': ' + error.message; - } else { - message += error.toString() + ' thrown'; - } - - if (error.fileName || error.sourceURL) { - message += ' in ' + (error.fileName || error.sourceURL); - } - - if (error.line || error.lineNumber) { - message += ' (line ' + (error.line || error.lineNumber) + ')'; - } - - return message; - }; - - this.stack = function(error) { - return error ? error.stack : null; - }; - } - - return ExceptionFormatter; -}; - -getJasmineRequireObj().Expectation = function() { - - function Expectation(options) { - this.util = options.util || { buildFailureMessage: function() {} }; - this.customEqualityTesters = options.customEqualityTesters || []; - this.actual = options.actual; - this.addExpectationResult = options.addExpectationResult || function(){}; - this.isNot = options.isNot; - - var customMatchers = options.customMatchers || {}; - for (var matcherName in customMatchers) { - this[matcherName] = Expectation.prototype.wrapCompare(matcherName, customMatchers[matcherName]); - } - } - - Expectation.prototype.wrapCompare = function(name, matcherFactory) { - return function() { - var args = Array.prototype.slice.call(arguments, 0), - expected = args.slice(0), - message = ''; - - args.unshift(this.actual); - - var matcher = matcherFactory(this.util, this.customEqualityTesters), - matcherCompare = matcher.compare; - - function defaultNegativeCompare() { - var result = matcher.compare.apply(null, args); - result.pass = !result.pass; - return result; - } - - if (this.isNot) { - matcherCompare = matcher.negativeCompare || defaultNegativeCompare; - } - - var result = matcherCompare.apply(null, args); - - if (!result.pass) { - if (!result.message) { - args.unshift(this.isNot); - args.unshift(name); - message = this.util.buildFailureMessage.apply(null, args); - } else { - if (Object.prototype.toString.apply(result.message) === '[object Function]') { - message = result.message(); - } else { - message = result.message; - } - } - } - - if (expected.length == 1) { - expected = expected[0]; - } - - // TODO: how many of these params are needed? - this.addExpectationResult( - result.pass, - { - matcherName: name, - passed: result.pass, - message: message, - actual: this.actual, - expected: expected // TODO: this may need to be arrayified/sliced - } - ); - }; - }; - - Expectation.addCoreMatchers = function(matchers) { - var prototype = Expectation.prototype; - for (var matcherName in matchers) { - var matcher = matchers[matcherName]; - prototype[matcherName] = prototype.wrapCompare(matcherName, matcher); - } - }; - - Expectation.Factory = function(options) { - options = options || {}; - - var expect = new Expectation(options); - - // TODO: this would be nice as its own Object - NegativeExpectation - // TODO: copy instead of mutate options - options.isNot = true; - expect.not = new Expectation(options); - - return expect; - }; - - return Expectation; -}; - -//TODO: expectation result may make more sense as a presentation of an expectation. -getJasmineRequireObj().buildExpectationResult = function() { - function buildExpectationResult(options) { - var messageFormatter = options.messageFormatter || function() {}, - stackFormatter = options.stackFormatter || function() {}; - - var result = { - matcherName: options.matcherName, - message: message(), - stack: stack(), - passed: options.passed - }; - - if(!result.passed) { - result.expected = options.expected; - result.actual = options.actual; - } - - return result; - - function message() { - if (options.passed) { - return 'Passed.'; - } else if (options.message) { - return options.message; - } else if (options.error) { - return messageFormatter(options.error); - } - return ''; - } - - function stack() { - if (options.passed) { - return ''; - } - - var error = options.error; - if (!error) { - try { - throw new Error(message()); - } catch (e) { - error = e; - } - } - return stackFormatter(error); - } - } - - return buildExpectationResult; -}; - -getJasmineRequireObj().MockDate = function() { - function MockDate(global) { - var self = this; - var currentTime = 0; - - if (!global || !global.Date) { - self.install = function() {}; - self.tick = function() {}; - self.uninstall = function() {}; - return self; - } - - var GlobalDate = global.Date; - - self.install = function(mockDate) { - if (mockDate instanceof GlobalDate) { - currentTime = mockDate.getTime(); - } else { - currentTime = new GlobalDate().getTime(); - } - - global.Date = FakeDate; - }; - - self.tick = function(millis) { - millis = millis || 0; - currentTime = currentTime + millis; - }; - - self.uninstall = function() { - currentTime = 0; - global.Date = GlobalDate; - }; - - createDateProperties(); - - return self; - - function FakeDate() { - switch(arguments.length) { - case 0: - return new GlobalDate(currentTime); - case 1: - return new GlobalDate(arguments[0]); - case 2: - return new GlobalDate(arguments[0], arguments[1]); - case 3: - return new GlobalDate(arguments[0], arguments[1], arguments[2]); - case 4: - return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3]); - case 5: - return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], - arguments[4]); - case 6: - return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], - arguments[4], arguments[5]); - default: - return new GlobalDate(arguments[0], arguments[1], arguments[2], arguments[3], - arguments[4], arguments[5], arguments[6]); - } - } - - function createDateProperties() { - FakeDate.prototype = GlobalDate.prototype; - - FakeDate.now = function() { - if (GlobalDate.now) { - return currentTime; - } else { - throw new Error('Browser does not support Date.now()'); - } - }; - - FakeDate.toSource = GlobalDate.toSource; - FakeDate.toString = GlobalDate.toString; - FakeDate.parse = GlobalDate.parse; - FakeDate.UTC = GlobalDate.UTC; - } - } - - return MockDate; -}; - -getJasmineRequireObj().pp = function(j$) { - - function PrettyPrinter() { - this.ppNestLevel_ = 0; - this.seen = []; - } - - PrettyPrinter.prototype.format = function(value) { - this.ppNestLevel_++; - try { - if (j$.util.isUndefined(value)) { - this.emitScalar('undefined'); - } else if (value === null) { - this.emitScalar('null'); - } else if (value === 0 && 1/value === -Infinity) { - this.emitScalar('-0'); - } else if (value === j$.getGlobal()) { - this.emitScalar(''); - } else if (value.jasmineToString) { - this.emitScalar(value.jasmineToString()); - } else if (typeof value === 'string') { - this.emitString(value); - } else if (j$.isSpy(value)) { - this.emitScalar('spy on ' + value.and.identity()); - } else if (value instanceof RegExp) { - this.emitScalar(value.toString()); - } else if (typeof value === 'function') { - this.emitScalar('Function'); - } else if (typeof value.nodeType === 'number') { - this.emitScalar('HTMLNode'); - } else if (value instanceof Date) { - this.emitScalar('Date(' + value + ')'); - } else if (value.toString && typeof value === 'object' && !(value instanceof Array) && value.toString !== Object.prototype.toString) { - this.emitScalar(value.toString()); - } else if (j$.util.arrayContains(this.seen, value)) { - this.emitScalar(''); - } else if (j$.isArray_(value) || j$.isA_('Object', value)) { - this.seen.push(value); - if (j$.isArray_(value)) { - this.emitArray(value); - } else { - this.emitObject(value); - } - this.seen.pop(); - } else { - this.emitScalar(value.toString()); - } - } finally { - this.ppNestLevel_--; - } - }; - - PrettyPrinter.prototype.iterateObject = function(obj, fn) { - for (var property in obj) { - if (!Object.prototype.hasOwnProperty.call(obj, property)) { continue; } - fn(property, obj.__lookupGetter__ ? (!j$.util.isUndefined(obj.__lookupGetter__(property)) && - obj.__lookupGetter__(property) !== null) : false); - } - }; - - PrettyPrinter.prototype.emitArray = j$.unimplementedMethod_; - PrettyPrinter.prototype.emitObject = j$.unimplementedMethod_; - PrettyPrinter.prototype.emitScalar = j$.unimplementedMethod_; - PrettyPrinter.prototype.emitString = j$.unimplementedMethod_; - - function StringPrettyPrinter() { - PrettyPrinter.call(this); - - this.string = ''; - } - - j$.util.inherit(StringPrettyPrinter, PrettyPrinter); - - StringPrettyPrinter.prototype.emitScalar = function(value) { - this.append(value); - }; - - StringPrettyPrinter.prototype.emitString = function(value) { - this.append('\'' + value + '\''); - }; - - StringPrettyPrinter.prototype.emitArray = function(array) { - if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { - this.append('Array'); - return; - } - var length = Math.min(array.length, j$.MAX_PRETTY_PRINT_ARRAY_LENGTH); - this.append('[ '); - for (var i = 0; i < length; i++) { - if (i > 0) { - this.append(', '); - } - this.format(array[i]); - } - if(array.length > length){ - this.append(', ...'); - } - - var self = this; - var first = array.length === 0; - this.iterateObject(array, function(property, isGetter) { - if (property.match(/^\d+$/)) { - return; - } - - if (first) { - first = false; - } else { - self.append(', '); - } - - self.formatProperty(array, property, isGetter); - }); - - this.append(' ]'); - }; - - StringPrettyPrinter.prototype.emitObject = function(obj) { - var constructorName = obj.constructor ? j$.fnNameFor(obj.constructor) : 'null'; - this.append(constructorName); - - if (this.ppNestLevel_ > j$.MAX_PRETTY_PRINT_DEPTH) { - return; - } - - var self = this; - this.append('({ '); - var first = true; - - this.iterateObject(obj, function(property, isGetter) { - if (first) { - first = false; - } else { - self.append(', '); - } - - self.formatProperty(obj, property, isGetter); - }); - - this.append(' })'); - }; - - StringPrettyPrinter.prototype.formatProperty = function(obj, property, isGetter) { - this.append(property); - this.append(': '); - if (isGetter) { - this.append(''); - } else { - this.format(obj[property]); - } - }; - - StringPrettyPrinter.prototype.append = function(value) { - this.string += value; - }; - - return function(value) { - var stringPrettyPrinter = new StringPrettyPrinter(); - stringPrettyPrinter.format(value); - return stringPrettyPrinter.string; - }; -}; - -getJasmineRequireObj().QueueRunner = function(j$) { - - function once(fn) { - var called = false; - return function() { - if (!called) { - called = true; - fn(); - } - return null; - }; - } - - function QueueRunner(attrs) { - this.queueableFns = attrs.queueableFns || []; - this.onComplete = attrs.onComplete || function() {}; - this.clearStack = attrs.clearStack || function(fn) {fn();}; - this.onException = attrs.onException || function() {}; - this.catchException = attrs.catchException || function() { return true; }; - this.userContext = attrs.userContext || {}; - this.timeout = attrs.timeout || {setTimeout: setTimeout, clearTimeout: clearTimeout}; - this.fail = attrs.fail || function() {}; - } - - QueueRunner.prototype.execute = function() { - this.run(this.queueableFns, 0); - }; - - QueueRunner.prototype.run = function(queueableFns, recursiveIndex) { - var length = queueableFns.length, - self = this, - iterativeIndex; - - - for(iterativeIndex = recursiveIndex; iterativeIndex < length; iterativeIndex++) { - var queueableFn = queueableFns[iterativeIndex]; - if (queueableFn.fn.length > 0) { - attemptAsync(queueableFn); - return; - } else { - attemptSync(queueableFn); - } - } - - var runnerDone = iterativeIndex >= length; - - if (runnerDone) { - this.clearStack(this.onComplete); - } - - function attemptSync(queueableFn) { - try { - queueableFn.fn.call(self.userContext); - } catch (e) { - handleException(e, queueableFn); - } - } - - function attemptAsync(queueableFn) { - var clearTimeout = function () { - Function.prototype.apply.apply(self.timeout.clearTimeout, [j$.getGlobal(), [timeoutId]]); - }, - next = once(function () { - clearTimeout(timeoutId); - self.run(queueableFns, iterativeIndex + 1); - }), - timeoutId; - - next.fail = function() { - self.fail.apply(null, arguments); - next(); - }; - - if (queueableFn.timeout) { - timeoutId = Function.prototype.apply.apply(self.timeout.setTimeout, [j$.getGlobal(), [function() { - var error = new Error('Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.'); - onException(error); - next(); - }, queueableFn.timeout()]]); - } - - try { - queueableFn.fn.call(self.userContext, next); - } catch (e) { - handleException(e, queueableFn); - next(); - } - } - - function onException(e) { - self.onException(e); - } - - function handleException(e, queueableFn) { - onException(e); - if (!self.catchException(e)) { - //TODO: set a var when we catch an exception and - //use a finally block to close the loop in a nice way.. - throw e; - } - } - }; - - return QueueRunner; -}; - -getJasmineRequireObj().ReportDispatcher = function() { - function ReportDispatcher(methods) { - - var dispatchedMethods = methods || []; - - for (var i = 0; i < dispatchedMethods.length; i++) { - var method = dispatchedMethods[i]; - this[method] = (function(m) { - return function() { - dispatch(m, arguments); - }; - }(method)); - } - - var reporters = []; - var fallbackReporter = null; - - this.addReporter = function(reporter) { - reporters.push(reporter); - }; - - this.provideFallbackReporter = function(reporter) { - fallbackReporter = reporter; - }; - - this.clearReporters = function() { - reporters = []; - }; - - return this; - - function dispatch(method, args) { - if (reporters.length === 0 && fallbackReporter !== null) { - reporters.push(fallbackReporter); - } - for (var i = 0; i < reporters.length; i++) { - var reporter = reporters[i]; - if (reporter[method]) { - reporter[method].apply(reporter, args); - } - } - } - } - - return ReportDispatcher; -}; - - -getJasmineRequireObj().SpyRegistry = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'spyOn(, )'); - - function SpyRegistry(options) { - options = options || {}; - var currentSpies = options.currentSpies || function() { return []; }; - - this.allowRespy = function(allow){ - this.respy = allow; - }; - - this.spyOn = function(obj, methodName) { - - if (j$.util.isUndefined(obj)) { - throw new Error(getErrorMsg('could not find an object to spy upon for ' + methodName + '()')); - } - - if (j$.util.isUndefined(methodName)) { - throw new Error(getErrorMsg('No method name supplied')); - } - - if (j$.util.isUndefined(obj[methodName])) { - throw new Error(getErrorMsg(methodName + '() method does not exist')); - } - - if (obj[methodName] && j$.isSpy(obj[methodName]) ) { - if ( !!this.respy ){ - return obj[methodName]; - }else { - throw new Error(getErrorMsg(methodName + ' has already been spied upon')); - } - } - - var descriptor; - try { - descriptor = Object.getOwnPropertyDescriptor(obj, methodName); - } catch(e) { - // IE 8 doesn't support `definePropery` on non-DOM nodes - } - - if (descriptor && !(descriptor.writable || descriptor.set)) { - throw new Error(getErrorMsg(methodName + ' is not declared writable or has no setter')); - } - - var originalMethod = obj[methodName], - spiedMethod = j$.createSpy(methodName, originalMethod), - restoreStrategy; - - if (Object.prototype.hasOwnProperty.call(obj, methodName)) { - restoreStrategy = function() { - obj[methodName] = originalMethod; - }; - } else { - restoreStrategy = function() { - if (!delete obj[methodName]) { - obj[methodName] = originalMethod; - } - }; - } - - currentSpies().push({ - restoreObjectToOriginalState: restoreStrategy - }); - - obj[methodName] = spiedMethod; - - return spiedMethod; - }; - - this.clearSpies = function() { - var spies = currentSpies(); - for (var i = spies.length - 1; i >= 0; i--) { - var spyEntry = spies[i]; - spyEntry.restoreObjectToOriginalState(); - } - }; - } - - return SpyRegistry; -}; - -getJasmineRequireObj().SpyStrategy = function(j$) { - - function SpyStrategy(options) { - options = options || {}; - - var identity = options.name || 'unknown', - originalFn = options.fn || function() {}, - getSpy = options.getSpy || function() {}, - plan = function() {}; - - this.identity = function() { - return identity; - }; - - this.exec = function() { - return plan.apply(this, arguments); - }; - - this.callThrough = function() { - plan = originalFn; - return getSpy(); - }; - - this.returnValue = function(value) { - plan = function() { - return value; - }; - return getSpy(); - }; - - this.returnValues = function() { - var values = Array.prototype.slice.call(arguments); - plan = function () { - return values.shift(); - }; - return getSpy(); - }; - - this.throwError = function(something) { - var error = (something instanceof Error) ? something : new Error(something); - plan = function() { - throw error; - }; - return getSpy(); - }; - - this.callFake = function(fn) { - if(!j$.isFunction_(fn)) { - throw new Error('Argument passed to callFake should be a function, got ' + fn); - } - plan = fn; - return getSpy(); - }; - - this.stub = function(fn) { - plan = function() {}; - return getSpy(); - }; - } - - return SpyStrategy; -}; - -getJasmineRequireObj().Suite = function(j$) { - function Suite(attrs) { - this.env = attrs.env; - this.id = attrs.id; - this.parentSuite = attrs.parentSuite; - this.description = attrs.description; - this.expectationFactory = attrs.expectationFactory; - this.expectationResultFactory = attrs.expectationResultFactory; - this.throwOnExpectationFailure = !!attrs.throwOnExpectationFailure; - - this.beforeFns = []; - this.afterFns = []; - this.beforeAllFns = []; - this.afterAllFns = []; - this.disabled = false; - - this.children = []; - - this.result = { - id: this.id, - description: this.description, - fullName: this.getFullName(), - failedExpectations: [] - }; - } - - Suite.prototype.expect = function(actual) { - return this.expectationFactory(actual, this); - }; - - Suite.prototype.getFullName = function() { - var fullName = []; - for (var parentSuite = this; parentSuite; parentSuite = parentSuite.parentSuite) { - if (parentSuite.parentSuite) { - fullName.unshift(parentSuite.description); - } - } - return fullName.join(' '); - }; - - Suite.prototype.disable = function() { - this.disabled = true; - }; - - Suite.prototype.pend = function(message) { - this.markedPending = true; - }; - - Suite.prototype.beforeEach = function(fn) { - this.beforeFns.unshift(fn); - }; - - Suite.prototype.beforeAll = function(fn) { - this.beforeAllFns.push(fn); - }; - - Suite.prototype.afterEach = function(fn) { - this.afterFns.unshift(fn); - }; - - Suite.prototype.afterAll = function(fn) { - this.afterAllFns.push(fn); - }; - - Suite.prototype.addChild = function(child) { - this.children.push(child); - }; - - Suite.prototype.status = function() { - if (this.disabled) { - return 'disabled'; - } - - if (this.markedPending) { - return 'pending'; - } - - if (this.result.failedExpectations.length > 0) { - return 'failed'; - } else { - return 'finished'; - } - }; - - Suite.prototype.isExecutable = function() { - return !this.disabled; - }; - - Suite.prototype.canBeReentered = function() { - return this.beforeAllFns.length === 0 && this.afterAllFns.length === 0; - }; - - Suite.prototype.getResult = function() { - this.result.status = this.status(); - return this.result; - }; - - Suite.prototype.sharedUserContext = function() { - if (!this.sharedContext) { - this.sharedContext = this.parentSuite ? clone(this.parentSuite.sharedUserContext()) : {}; - } - - return this.sharedContext; - }; - - Suite.prototype.clonedSharedUserContext = function() { - return clone(this.sharedUserContext()); - }; - - Suite.prototype.onException = function() { - if (arguments[0] instanceof j$.errors.ExpectationFailed) { - return; - } - - if(isAfterAll(this.children)) { - var data = { - matcherName: '', - passed: false, - expected: '', - actual: '', - error: arguments[0] - }; - this.result.failedExpectations.push(this.expectationResultFactory(data)); - } else { - for (var i = 0; i < this.children.length; i++) { - var child = this.children[i]; - child.onException.apply(child, arguments); - } - } - }; - - Suite.prototype.addExpectationResult = function () { - if(isAfterAll(this.children) && isFailure(arguments)){ - var data = arguments[1]; - this.result.failedExpectations.push(this.expectationResultFactory(data)); - if(this.throwOnExpectationFailure) { - throw new j$.errors.ExpectationFailed(); - } - } else { - for (var i = 0; i < this.children.length; i++) { - var child = this.children[i]; - try { - child.addExpectationResult.apply(child, arguments); - } catch(e) { - // keep going - } - } - } - }; - - function isAfterAll(children) { - return children && children[0].result.status; - } - - function isFailure(args) { - return !args[0]; - } - - function clone(obj) { - var clonedObj = {}; - for (var prop in obj) { - // @ccarlesso allows looping on objects without `Object.prototype`. - if (Object.prototype.hasOwnProperty.call(obj, prop)) { - cloned[prop] = obj[prop]; - } - } - - return clonedObj; - } - - return Suite; -}; - -if (typeof window == void 0 && typeof exports == 'object') { - exports.Suite = jasmineRequire.Suite; -} - -getJasmineRequireObj().Timer = function() { - var defaultNow = (function(Date) { - return function() { return new Date().getTime(); }; - })(Date); - - function Timer(options) { - options = options || {}; - - var now = options.now || defaultNow, - startTime; - - this.start = function() { - startTime = now(); - }; - - this.elapsed = function() { - return now() - startTime; - }; - } - - return Timer; -}; - -getJasmineRequireObj().TreeProcessor = function() { - function TreeProcessor(attrs) { - var tree = attrs.tree, - runnableIds = attrs.runnableIds, - queueRunnerFactory = attrs.queueRunnerFactory, - nodeStart = attrs.nodeStart || function() {}, - nodeComplete = attrs.nodeComplete || function() {}, - orderChildren = attrs.orderChildren || function(node) { return node.children; }, - stats = { valid: true }, - processed = false, - defaultMin = Infinity, - defaultMax = 1 - Infinity; - - this.processTree = function() { - processNode(tree, false); - processed = true; - return stats; - }; - - this.execute = function(done) { - if (!processed) { - this.processTree(); - } - - if (!stats.valid) { - throw 'invalid order'; - } - - var childFns = wrapChildren(tree, 0); - - queueRunnerFactory({ - queueableFns: childFns, - userContext: tree.sharedUserContext(), - onException: function() { - tree.onException.apply(tree, arguments); - }, - onComplete: done - }); - }; - - function runnableIndex(id) { - for (var i = 0; i < runnableIds.length; i++) { - if (runnableIds[i] === id) { - return i; - } - } - } - - function processNode(node, parentEnabled) { - var executableIndex = runnableIndex(node.id); - - if (executableIndex !== undefined) { - parentEnabled = true; - } - - parentEnabled = parentEnabled && node.isExecutable(); - - if (!node.children) { - stats[node.id] = { - executable: parentEnabled && node.isExecutable(), - segments: [{ - index: 0, - owner: node, - nodes: [node], - min: startingMin(executableIndex), - max: startingMax(executableIndex) - }] - }; - } else { - var hasExecutableChild = false; - - var orderedChildren = orderChildren(node); - - for (var i = 0; i < orderedChildren.length; i++) { - var child = orderedChildren[i]; - - processNode(child, parentEnabled); - - if (!stats.valid) { - return; - } - - var childStats = stats[child.id]; - - hasExecutableChild = hasExecutableChild || childStats.executable; - } - - stats[node.id] = { - executable: hasExecutableChild - }; - - segmentChildren(node, orderedChildren, stats[node.id], executableIndex); - - if (!node.canBeReentered() && stats[node.id].segments.length > 1) { - stats = { valid: false }; - } - } - } - - function startingMin(executableIndex) { - return executableIndex === undefined ? defaultMin : executableIndex; - } - - function startingMax(executableIndex) { - return executableIndex === undefined ? defaultMax : executableIndex; - } - - function segmentChildren(node, orderedChildren, nodeStats, executableIndex) { - var currentSegment = { index: 0, owner: node, nodes: [], min: startingMin(executableIndex), max: startingMax(executableIndex) }, - result = [currentSegment], - lastMax = defaultMax, - orderedChildSegments = orderChildSegments(orderedChildren); - - function isSegmentBoundary(minIndex) { - return lastMax !== defaultMax && minIndex !== defaultMin && lastMax < minIndex - 1; - } - - for (var i = 0; i < orderedChildSegments.length; i++) { - var childSegment = orderedChildSegments[i], - maxIndex = childSegment.max, - minIndex = childSegment.min; - - if (isSegmentBoundary(minIndex)) { - currentSegment = {index: result.length, owner: node, nodes: [], min: defaultMin, max: defaultMax}; - result.push(currentSegment); - } - - currentSegment.nodes.push(childSegment); - currentSegment.min = Math.min(currentSegment.min, minIndex); - currentSegment.max = Math.max(currentSegment.max, maxIndex); - lastMax = maxIndex; - } - - nodeStats.segments = result; - } - - function orderChildSegments(children) { - var specifiedOrder = [], - unspecifiedOrder = []; - - for (var i = 0; i < children.length; i++) { - var child = children[i], - segments = stats[child.id].segments; - - for (var j = 0; j < segments.length; j++) { - var seg = segments[j]; - - if (seg.min === defaultMin) { - unspecifiedOrder.push(seg); - } else { - specifiedOrder.push(seg); - } - } - } - - specifiedOrder.sort(function(a, b) { - return a.min - b.min; - }); - - return specifiedOrder.concat(unspecifiedOrder); - } - - function executeNode(node, segmentNumber) { - if (node.children) { - return { - fn: function(done) { - nodeStart(node); - - queueRunnerFactory({ - onComplete: function() { - nodeComplete(node, node.getResult()); - done(); - }, - queueableFns: wrapChildren(node, segmentNumber), - userContext: node.sharedUserContext(), - onException: function() { - node.onException.apply(node, arguments); - } - }); - } - }; - } else { - return { - fn: function(done) { node.execute(done, stats[node.id].executable); } - }; - } - } - - function wrapChildren(node, segmentNumber) { - var result = [], - segmentChildren = stats[node.id].segments[segmentNumber].nodes; - - for (var i = 0; i < segmentChildren.length; i++) { - result.push(executeNode(segmentChildren[i].owner, segmentChildren[i].index)); - } - - if (!stats[node.id].executable) { - return result; - } - - return node.beforeAllFns.concat(result).concat(node.afterAllFns); - } - } - - return TreeProcessor; -}; - -getJasmineRequireObj().Any = function(j$) { - - function Any(expectedObject) { - if (typeof expectedObject === 'undefined') { - throw new TypeError( - 'jasmine.any() expects to be passed a constructor function. ' + - 'Please pass one or use jasmine.anything() to match any object.' - ); - } - this.expectedObject = expectedObject; - } - - Any.prototype.asymmetricMatch = function(other) { - if (this.expectedObject == String) { - return typeof other == 'string' || other instanceof String; - } - - if (this.expectedObject == Number) { - return typeof other == 'number' || other instanceof Number; - } - - if (this.expectedObject == Function) { - return typeof other == 'function' || other instanceof Function; - } - - if (this.expectedObject == Object) { - return typeof other == 'object'; - } - - if (this.expectedObject == Boolean) { - return typeof other == 'boolean'; - } - - return other instanceof this.expectedObject; - }; - - Any.prototype.jasmineToString = function() { - return ''; - }; - - return Any; -}; - -getJasmineRequireObj().Anything = function(j$) { - - function Anything() {} - - Anything.prototype.asymmetricMatch = function(other) { - return !j$.util.isUndefined(other) && other !== null; - }; - - Anything.prototype.jasmineToString = function() { - return ''; - }; - - return Anything; -}; - -getJasmineRequireObj().ArrayContaining = function(j$) { - function ArrayContaining(sample) { - this.sample = sample; - } - - ArrayContaining.prototype.asymmetricMatch = function(other) { - var className = Object.prototype.toString.call(this.sample); - if (className !== '[object Array]') { throw new Error('You must provide an array to arrayContaining, not \'' + this.sample + '\'.'); } - - for (var i = 0; i < this.sample.length; i++) { - var item = this.sample[i]; - if (!j$.matchersUtil.contains(other, item)) { - return false; - } - } - - return true; - }; - - ArrayContaining.prototype.jasmineToString = function () { - return ''; - }; - - return ArrayContaining; -}; - -getJasmineRequireObj().ObjectContaining = function(j$) { - - function ObjectContaining(sample) { - this.sample = sample; - } - - function getPrototype(obj) { - if (Object.getPrototypeOf) { - return Object.getPrototypeOf(obj); - } - - if (obj.constructor.prototype == obj) { - return null; - } - - return obj.constructor.prototype; - } - - function hasProperty(obj, property) { - if (!obj) { - return false; - } - - if (Object.prototype.hasOwnProperty.call(obj, property)) { - return true; - } - - return hasProperty(getPrototype(obj), property); - } - - ObjectContaining.prototype.asymmetricMatch = function(other) { - if (typeof(this.sample) !== 'object') { throw new Error('You must provide an object to objectContaining, not \''+this.sample+'\'.'); } - - for (var property in this.sample) { - if (!hasProperty(other, property) || - !j$.matchersUtil.equals(this.sample[property], other[property])) { - return false; - } - } - - return true; - }; - - ObjectContaining.prototype.jasmineToString = function() { - return ''; - }; - - return ObjectContaining; -}; - -getJasmineRequireObj().StringMatching = function(j$) { - - function StringMatching(expected) { - if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { - throw new Error('Expected is not a String or a RegExp'); - } - - this.regexp = new RegExp(expected); - } - - StringMatching.prototype.asymmetricMatch = function(other) { - return this.regexp.test(other); - }; - - StringMatching.prototype.jasmineToString = function() { - return ''; - }; - - return StringMatching; -}; - -getJasmineRequireObj().errors = function() { - function ExpectationFailed() {} - - ExpectationFailed.prototype = new Error(); - ExpectationFailed.prototype.constructor = ExpectationFailed; - - return { - ExpectationFailed: ExpectationFailed - }; -}; -getJasmineRequireObj().formatErrorMsg = function() { - function generateErrorMsg(domain, usage) { - var usageDefinition = usage ? '\nUsage: ' + usage : ''; - - return function errorMsg(msg) { - return domain + ' : ' + msg + usageDefinition; - }; - } - - return generateErrorMsg; -}; - -getJasmineRequireObj().matchersUtil = function(j$) { - // TODO: what to do about jasmine.pp not being inject? move to JSON.stringify? gut PrettyPrinter? - - return { - equals: function(a, b, customTesters) { - customTesters = customTesters || []; - - return eq(a, b, [], [], customTesters); - }, - - contains: function(haystack, needle, customTesters) { - customTesters = customTesters || []; - - if ((Object.prototype.toString.apply(haystack) === '[object Array]') || - (!!haystack && !haystack.indexOf)) - { - for (var i = 0; i < haystack.length; i++) { - if (eq(haystack[i], needle, [], [], customTesters)) { - return true; - } - } - return false; - } - - return !!haystack && haystack.indexOf(needle) >= 0; - }, - - buildFailureMessage: function() { - var args = Array.prototype.slice.call(arguments, 0), - matcherName = args[0], - isNot = args[1], - actual = args[2], - expected = args.slice(3), - englishyPredicate = matcherName.replace(/[A-Z]/g, function(s) { return ' ' + s.toLowerCase(); }); - - var message = 'Expected ' + - j$.pp(actual) + - (isNot ? ' not ' : ' ') + - englishyPredicate; - - if (expected.length > 0) { - for (var i = 0; i < expected.length; i++) { - if (i > 0) { - message += ','; - } - message += ' ' + j$.pp(expected[i]); - } - } - - return message + '.'; - } - }; - - function isAsymmetric(obj) { - return obj && j$.isA_('Function', obj.asymmetricMatch); - } - - function asymmetricMatch(a, b) { - var asymmetricA = isAsymmetric(a), - asymmetricB = isAsymmetric(b); - - if (asymmetricA && asymmetricB) { - return undefined; - } - - if (asymmetricA) { - return a.asymmetricMatch(b); - } - - if (asymmetricB) { - return b.asymmetricMatch(a); - } - } - - // Equality function lovingly adapted from isEqual in - // [Underscore](http://underscorejs.org) - function eq(a, b, aStack, bStack, customTesters) { - var result = true; - - var asymmetricResult = asymmetricMatch(a, b); - if (!j$.util.isUndefined(asymmetricResult)) { - return asymmetricResult; - } - - for (var i = 0; i < customTesters.length; i++) { - var customTesterResult = customTesters[i](a, b); - if (!j$.util.isUndefined(customTesterResult)) { - return customTesterResult; - } - } - - if (a instanceof Error && b instanceof Error) { - return a.message == b.message; - } - - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) { return a !== 0 || 1 / a == 1 / b; } - // A strict comparison is necessary because `null == undefined`. - if (a === null || b === null) { return a === b; } - var className = Object.prototype.toString.call(a); - if (className != Object.prototype.toString.call(b)) { return false; } - switch (className) { - // Strings, numbers, dates, and booleans are compared by value. - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return a == String(b); - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for - // other numeric values. - return a != +a ? b != +b : (a === 0 ? 1 / a == 1 / b : a == +b); - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a == +b; - // RegExps are compared by their source patterns and flags. - case '[object RegExp]': - return a.source == b.source && - a.global == b.global && - a.multiline == b.multiline && - a.ignoreCase == b.ignoreCase; - } - if (typeof a != 'object' || typeof b != 'object') { return false; } - - var aIsDomNode = j$.isDomNode(a); - var bIsDomNode = j$.isDomNode(b); - if (aIsDomNode && bIsDomNode) { - // At first try to use DOM3 method isEqualNode - if (a.isEqualNode) { - return a.isEqualNode(b); - } - // IE8 doesn't support isEqualNode, try to use outerHTML && innerText - var aIsElement = a instanceof Element; - var bIsElement = b instanceof Element; - if (aIsElement && bIsElement) { - return a.outerHTML == b.outerHTML; - } - if (aIsElement || bIsElement) { - return false; - } - return a.innerText == b.innerText && a.textContent == b.textContent; - } - if (aIsDomNode || bIsDomNode) { - return false; - } - - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] == a) { return bStack[length] == b; } - } - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - var size = 0; - // Recursively compare objects and arrays. - // Compare array lengths to determine if a deep comparison is necessary. - if (className == '[object Array]') { - size = a.length; - if (size !== b.length) { - return false; - } - - while (size--) { - result = eq(a[size], b[size], aStack, bStack, customTesters); - if (!result) { - return false; - } - } - } else { - - // Objects with different constructors are not equivalent, but `Object`s - // or `Array`s from different frames are. - // CUSTOM JEST CHANGE: - // TODO(cpojer): fix all tests and this and re-enable this check - /* - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor && - isFunction(bCtor) && bCtor instanceof bCtor)) { - return false; - } - */ - } - - // Deep compare objects. - var aKeys = keys(a, className == '[object Array]'), key; - size = aKeys.length; - - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (keys(b, className == '[object Array]').length !== size) { return false; } - - while (size--) { - key = aKeys[size]; - - // Deep compare each member - result = has(b, key) && eq(a[key], b[key], aStack, bStack, customTesters); - - if (!result) { - return false; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - - return result; - - function keys(obj, isArray) { - // CUSTOM JEST CHANGE: don't consider undefined keys. - var allKeys = (function(o) { - var keys = []; - for (var key in o) { - if (has(o, key)) { - keys.push(key); - } - } - return keys; - })(obj); - - if (!isArray) { - return allKeys; - } - - var extraKeys = []; - if (allKeys.length === 0) { - return allKeys; - } - - for (var x = 0; x < allKeys.length; x++) { - if (!allKeys[x].match(/^[0-9]+$/)) { - extraKeys.push(allKeys[x]); - } - } - - return extraKeys; - } - } - - function has(obj, key) { - // CUSTOM JEST CHANGE: - // TODO(cpojer): remove the `obj[key] !== undefined` check. - return Object.prototype.hasOwnProperty.call(obj, key) && obj[key] !== undefined; - } - - function isFunction(obj) { - return typeof obj === 'function'; - } - - function isObjectConstructor(ctor) { - // aCtor instanceof aCtor is true for the Object and Function - // constructors (since a constructor is-a Function and a function is-a - // Object). We don't just compare ctor === Object because the constructor - // might come from a different frame with different globals. - return isFunction(ctor) && ctor instanceof ctor; - } -}; - -getJasmineRequireObj().toBe = function() { - function toBe() { - return { - compare: function(actual, expected) { - return { - pass: actual === expected - }; - } - }; - } - - return toBe; -}; - -getJasmineRequireObj().toBeCloseTo = function() { - - function toBeCloseTo() { - return { - compare: function(actual, expected, precision) { - if (precision !== 0) { - precision = precision || 2; - } - - return { - pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2) - }; - } - }; - } - - return toBeCloseTo; -}; - -getJasmineRequireObj().toBeDefined = function() { - function toBeDefined() { - return { - compare: function(actual) { - return { - pass: (void 0 !== actual) - }; - } - }; - } - - return toBeDefined; -}; - -getJasmineRequireObj().toBeFalsy = function() { - function toBeFalsy() { - return { - compare: function(actual) { - return { - pass: !!!actual - }; - } - }; - } - - return toBeFalsy; -}; - -getJasmineRequireObj().toBeGreaterThan = function() { - - function toBeGreaterThan() { - return { - compare: function(actual, expected) { - return { - pass: actual > expected - }; - } - }; - } - - return toBeGreaterThan; -}; - - -getJasmineRequireObj().toBeGreaterThanOrEqual = function() { - - function toBeGreaterThanOrEqual() { - return { - compare: function(actual, expected) { - return { - pass: actual >= expected - }; - } - }; - } - - return toBeGreaterThanOrEqual; -}; - -getJasmineRequireObj().toBeLessThan = function() { - function toBeLessThan() { - return { - - compare: function(actual, expected) { - return { - pass: actual < expected - }; - } - }; - } - - return toBeLessThan; -}; -getJasmineRequireObj().toBeLessThanOrEqual = function() { - function toBeLessThanOrEqual() { - return { - - compare: function(actual, expected) { - return { - pass: actual <= expected - }; - } - }; - } - - return toBeLessThanOrEqual; -}; - -getJasmineRequireObj().toBeNaN = function(j$) { - - function toBeNaN() { - return { - compare: function(actual) { - var result = { - pass: (actual !== actual) - }; - - if (result.pass) { - result.message = 'Expected actual not to be NaN.'; - } else { - result.message = function() { return 'Expected ' + j$.pp(actual) + ' to be NaN.'; }; - } - - return result; - } - }; - } - - return toBeNaN; -}; - -getJasmineRequireObj().toBeNull = function() { - - function toBeNull() { - return { - compare: function(actual) { - return { - pass: actual === null - }; - } - }; - } - - return toBeNull; -}; - -getJasmineRequireObj().toBeTruthy = function() { - - function toBeTruthy() { - return { - compare: function(actual) { - return { - pass: !!actual - }; - } - }; - } - - return toBeTruthy; -}; - -getJasmineRequireObj().toBeUndefined = function() { - - function toBeUndefined() { - return { - compare: function(actual) { - return { - pass: void 0 === actual - }; - } - }; - } - - return toBeUndefined; -}; - -getJasmineRequireObj().toContain = function() { - function toContain(util, customEqualityTesters) { - customEqualityTesters = customEqualityTesters || []; - - return { - compare: function(actual, expected) { - - return { - pass: util.contains(actual, expected, customEqualityTesters) - }; - } - }; - } - - return toContain; -}; - -getJasmineRequireObj().toEqual = function() { - - function toEqual(util, customEqualityTesters) { - customEqualityTesters = customEqualityTesters || []; - - return { - compare: function(actual, expected) { - var result = { - pass: false - }; - - result.pass = util.equals(actual, expected, customEqualityTesters); - - return result; - } - }; - } - - return toEqual; -}; - -getJasmineRequireObj().toHaveBeenCalled = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect().toHaveBeenCalled()'); - - function toHaveBeenCalled() { - return { - compare: function(actual) { - var result = {}; - - if (!j$.isSpy(actual)) { - throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(actual) + '.')); - } - - if (arguments.length > 1) { - throw new Error(getErrorMsg('Does not take arguments, use toHaveBeenCalledWith')); - } - - result.pass = actual.calls.any(); - - result.message = result.pass ? - 'Expected spy ' + actual.and.identity() + ' not to have been called.' : - 'Expected spy ' + actual.and.identity() + ' to have been called.'; - - return result; - } - }; - } - - return toHaveBeenCalled; -}; - -getJasmineRequireObj().toHaveBeenCalledTimes = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect().toHaveBeenCalledTimes()'); - - function toHaveBeenCalledTimes() { - return { - compare: function(actual, expected) { - if (!j$.isSpy(actual)) { - throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(actual) + '.')); - } - - var args = Array.prototype.slice.call(arguments, 0), - result = { pass: false }; - - if (!j$.isNumber_(expected)){ - throw new Error(getErrorMsg('The expected times failed is a required argument and must be a number.')); - } - - actual = args[0]; - var calls = actual.calls.count(); - var timesMessage = expected === 1 ? 'once' : expected + ' times'; - result.pass = calls === expected; - result.message = result.pass ? - 'Expected spy ' + actual.and.identity() + ' not to have been called ' + timesMessage + '. It was called ' + calls + ' times.' : - 'Expected spy ' + actual.and.identity() + ' to have been called ' + timesMessage + '. It was called ' + calls + ' times.'; - return result; - } - }; - } - - return toHaveBeenCalledTimes; -}; - -getJasmineRequireObj().toHaveBeenCalledWith = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect().toHaveBeenCalledWith(...arguments)'); - - function toHaveBeenCalledWith(util, customEqualityTesters) { - return { - compare: function() { - var args = Array.prototype.slice.call(arguments, 0), - actual = args[0], - expectedArgs = args.slice(1), - result = { pass: false }; - - if (!j$.isSpy(actual)) { - throw new Error(getErrorMsg('Expected a spy, but got ' + j$.pp(actual) + '.')); - } - - if (!actual.calls.any()) { - result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but it was never called.'; }; - return result; - } - - if (util.contains(actual.calls.allArgs(), expectedArgs, customEqualityTesters)) { - result.pass = true; - result.message = function() { return 'Expected spy ' + actual.and.identity() + ' not to have been called with ' + j$.pp(expectedArgs) + ' but it was.'; }; - } else { - result.message = function() { return 'Expected spy ' + actual.and.identity() + ' to have been called with ' + j$.pp(expectedArgs) + ' but actual calls were ' + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + '.'; }; - } - - return result; - } - }; - } - - return toHaveBeenCalledWith; -}; - -getJasmineRequireObj().toMatch = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect().toMatch( || )'); - - function toMatch() { - return { - compare: function(actual, expected) { - if (!j$.isString_(expected) && !j$.isA_('RegExp', expected)) { - throw new Error(getErrorMsg('Expected is not a String or a RegExp')); - } - - var regexp = new RegExp(expected); - - return { - pass: regexp.test(actual) - }; - } - }; - } - - return toMatch; -}; - -getJasmineRequireObj().toThrow = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect(function() {}).toThrow()'); - - function toThrow(util) { - return { - compare: function(actual, expected) { - var result = { pass: false }, - threw = false, - thrown; - - if (typeof actual != 'function') { - throw new Error(getErrorMsg('Actual is not a Function')); - } - - try { - actual(); - } catch (e) { - threw = true; - thrown = e; - } - - if (!threw) { - result.message = 'Expected function to throw an exception.'; - return result; - } - - if (arguments.length == 1) { - result.pass = true; - result.message = function() { return 'Expected function not to throw, but it threw ' + j$.pp(thrown) + '.'; }; - - return result; - } - - if (util.equals(thrown, expected)) { - result.pass = true; - result.message = function() { return 'Expected function not to throw ' + j$.pp(expected) + '.'; }; - } else { - result.message = function() { return 'Expected function to throw ' + j$.pp(expected) + ', but it threw ' + j$.pp(thrown) + '.'; }; - } - - return result; - } - }; - } - - return toThrow; -}; - -getJasmineRequireObj().toThrowError = function(j$) { - - var getErrorMsg = j$.formatErrorMsg('', 'expect(function() {}).toThrowError(, )'); - - function toThrowError () { - return { - compare: function(actual) { - var threw = false, - pass = {pass: true}, - fail = {pass: false}, - thrown; - - if (typeof actual != 'function') { - throw new Error(getErrorMsg('Actual is not a Function')); - } - - var errorMatcher = getMatcher.apply(null, arguments); - - try { - actual(); - } catch (e) { - threw = true; - thrown = e; - } - - if (!threw) { - fail.message = 'Expected function to throw an Error.'; - return fail; - } - - if (!(thrown instanceof Error)) { - fail.message = function() { return 'Expected function to throw an Error, but it threw ' + j$.pp(thrown) + '.'; }; - return fail; - } - - if (errorMatcher.hasNoSpecifics()) { - pass.message = 'Expected function not to throw an Error, but it threw ' + j$.fnNameFor(thrown) + '.'; - return pass; - } - - if (errorMatcher.matches(thrown)) { - pass.message = function() { - return 'Expected function not to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + '.'; - }; - return pass; - } else { - fail.message = function() { - return 'Expected function to throw ' + errorMatcher.errorTypeDescription + errorMatcher.messageDescription() + - ', but it threw ' + errorMatcher.thrownDescription(thrown) + '.'; - }; - return fail; - } - } - }; - - function getMatcher() { - var expected = null, - errorType = null; - - if (arguments.length == 2) { - expected = arguments[1]; - if (isAnErrorType(expected)) { - errorType = expected; - expected = null; - } - } else if (arguments.length > 2) { - errorType = arguments[1]; - expected = arguments[2]; - if (!isAnErrorType(errorType)) { - throw new Error(getErrorMsg('Expected error type is not an Error.')); - } - } - - if (expected && !isStringOrRegExp(expected)) { - if (errorType) { - throw new Error(getErrorMsg('Expected error message is not a string or RegExp.')); - } else { - throw new Error(getErrorMsg('Expected is not an Error, string, or RegExp.')); - } - } - - function messageMatch(message) { - if (typeof expected == 'string') { - return expected == message; - } else { - return expected.test(message); - } - } - - return { - errorTypeDescription: errorType ? j$.fnNameFor(errorType) : 'an exception', - thrownDescription: function(thrown) { - var thrownName = errorType ? j$.fnNameFor(thrown.constructor) : 'an exception', - thrownMessage = ''; - - if (expected) { - thrownMessage = ' with message ' + j$.pp(thrown.message); - } - - return thrownName + thrownMessage; - }, - messageDescription: function() { - if (expected === null) { - return ''; - } else if (expected instanceof RegExp) { - return ' with a message matching ' + j$.pp(expected); - } else { - return ' with message ' + j$.pp(expected); - } - }, - hasNoSpecifics: function() { - return expected === null && errorType === null; - }, - matches: function(error) { - return (errorType === null || error instanceof errorType) && - (expected === null || messageMatch(error.message)); - } - }; - } - - function isStringOrRegExp(potential) { - return potential instanceof RegExp || (typeof potential == 'string'); - } - - function isAnErrorType(type) { - if (typeof type !== 'function') { - return false; - } - - var Surrogate = function() {}; - Surrogate.prototype = type.prototype; - return (new Surrogate()) instanceof Error; - } - } - - return toThrowError; -}; - -getJasmineRequireObj().interface = function(jasmine, env) { - var jasmineInterface = { - describe: function(description, specDefinitions) { - return env.describe(description, specDefinitions); - }, - - xdescribe: function(description, specDefinitions) { - return env.xdescribe(description, specDefinitions); - }, - - fdescribe: function(description, specDefinitions) { - return env.fdescribe(description, specDefinitions); - }, - - it: function() { - return env.it.apply(env, arguments); - }, - - xit: function() { - return env.xit.apply(env, arguments); - }, - - fit: function() { - return env.fit.apply(env, arguments); - }, - - beforeEach: function() { - return env.beforeEach.apply(env, arguments); - }, - - afterEach: function() { - return env.afterEach.apply(env, arguments); - }, - - beforeAll: function() { - return env.beforeAll.apply(env, arguments); - }, - - afterAll: function() { - return env.afterAll.apply(env, arguments); - }, - - expect: function(actual) { - return env.expect(actual); - }, - - pending: function() { - return env.pending.apply(env, arguments); - }, - - fail: function() { - return env.fail.apply(env, arguments); - }, - - spyOn: function(obj, methodName) { - return env.spyOn(obj, methodName); - }, - - jsApiReporter: new jasmine.JsApiReporter({ - timer: new jasmine.Timer() - }), - - jasmine: jasmine - }; - - jasmine.addCustomEqualityTester = function(tester) { - env.addCustomEqualityTester(tester); - }; - - jasmine.addMatchers = function(matchers) { - return env.addMatchers(matchers); - }; - - jasmine.clock = function() { - return env.clock; - }; - - return jasmineInterface; -}; - -getJasmineRequireObj().version = function() { - return '2.5.2'; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-matcher-utils/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-matcher-utils/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-matcher-utils/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-matcher-utils/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-matcher-utils/build/index.js deleted file mode 100644 index 993f730b7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-matcher-utils/build/index.js +++ /dev/null @@ -1,178 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - -const chalk = require('chalk'); -const prettyFormat = require('pretty-format'); - - - - - - - - - - - - - -const EXPECTED_COLOR = chalk.green; -const RECEIVED_COLOR = chalk.red; - -const NUMBERS = [ -'zero', -'one', -'two', -'three', -'four', -'five', -'six', -'seven', -'eight', -'nine', -'ten', -'eleven', -'twelve', -'thirteen']; - - -// get the type of a value with handling the edge cases like `typeof []` -// and `typeof null` -const getType = value => { - if (typeof value === 'undefined') { - return 'undefined'; - } else if (value === null) { - return 'null'; - } else if (Array.isArray(value)) { - return 'array'; - } else if (typeof value === 'boolean') { - return 'boolean'; - } else if (typeof value === 'function') { - return 'function'; - } else if (typeof value === 'number') { - return 'number'; - } else if (typeof value === 'string') { - return 'string'; - } else if (typeof value === 'object') { - if (value.constructor === RegExp) { - return 'regexp'; - } - return 'object'; - // $FlowFixMe https://github.com/facebook/flow/issues/1015 - } else if (typeof value === 'symbol') { - return 'symbol'; - } - - throw new Error(`value of unknown type: ${ value }`); -}; - -const stringify = object => { - try { - return prettyFormat(object, { - maxDepth: 10, - min: true }); - - } catch (e) { - return prettyFormat(object, { - callToJSON: false, - maxDepth: 10, - min: true }); - - } -}; - -const printReceived = object => RECEIVED_COLOR(stringify(object)); -const printExpected = value => EXPECTED_COLOR(stringify(value)); - -const printWithType = ( -name, -received, -print) => -{ - const type = getType(received); - return ( - name + ':' + ( - type !== 'null' && type !== 'undefined' ? - '\n ' + type + ': ' : - ' ') + - print(received)); - -}; - -const ensureNoExpected = (expected, matcherName) => { - matcherName || (matcherName = 'This'); - if (typeof expected !== 'undefined') { - throw new Error( - matcherHint('[.not]' + matcherName, undefined, '') + '\n\n' + - 'Matcher does not accept any arguments.\n' + - printWithType('Got', expected, printExpected)); - - } -}; - -const ensureActualIsNumber = (actual, matcherName) => { - matcherName || (matcherName = 'This matcher'); - if (typeof actual !== 'number') { - throw new Error( - matcherHint('[.not]' + matcherName) + '\n\n' + - `Actual value must be a number.\n` + - printWithType('Received', actual, printReceived)); - - } -}; - -const ensureExpectedIsNumber = (expected, matcherName) => { - matcherName || (matcherName = 'This matcher'); - if (typeof expected !== 'number') { - throw new Error( - matcherHint('[.not]' + matcherName) + '\n\n' + - `Expected value must be a number.\n` + - printWithType('Got', expected, printExpected)); - - } -}; - -const ensureNumbers = (actual, expected, matcherName) => { - ensureActualIsNumber(actual, matcherName); - ensureExpectedIsNumber(expected, matcherName); -}; - -const pluralize = -(word, count) => -(NUMBERS[count] || count) + ' ' + word + (count === 1 ? '' : 's'); - -const matcherHint = function ( -matcherName) - - -{let received = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'received';let expected = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'expected'; - return ( - chalk.dim('expect(') + RECEIVED_COLOR(received) + - chalk.dim(')' + matcherName + '(') + - EXPECTED_COLOR(expected) + chalk.dim(')')); - -}; - -module.exports = { - EXPECTED_COLOR, - RECEIVED_COLOR, - ensureActualIsNumber, - ensureExpectedIsNumber, - ensureNoExpected, - ensureNumbers, - getType, - matcherHint, - pluralize, - printExpected, - printReceived, - printWithType, - stringify }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-matcher-utils/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-matcher-utils/package.json deleted file mode 100644 index f70f9c4a4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-matcher-utils/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "jest-matcher-utils@^17.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-matchers" - ] - ], - "_from": "jest-matcher-utils@>=17.0.3 <18.0.0", - "_id": "jest-matcher-utils@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest-matcher-utils", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/jest-matcher-utils-17.0.3.tgz_1479368475825_0.30437314650043845" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-matcher-utils", - "raw": "jest-matcher-utils@^17.0.3", - "rawSpec": "^17.0.3", - "scope": null, - "spec": ">=17.0.3 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-diff", - "/jest-matchers", - "/jest-snapshot" - ], - "_resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-17.0.3.tgz", - "_shasum": "f108e49b956e152c6626dcc0aba864f59ab7b0d3", - "_shrinkwrap": null, - "_spec": "jest-matcher-utils@^17.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-matchers", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "chalk": "^1.1.3", - "pretty-format": "~4.2.1" - }, - "description": "A set of utility functions for jest-matchers and related packages", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "f108e49b956e152c6626dcc0aba864f59ab7b0d3", - "tarball": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-17.0.3.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - } - ], - "name": "jest-matcher-utils", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-matchers/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-matchers/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-matchers/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/index.js deleted file mode 100644 index 92d5f41a5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/index.js +++ /dev/null @@ -1,158 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - - - - - - - - - - -const matchers = require('./matchers'); -const spyMatchers = require('./spyMatchers'); -const toThrowMatchers = require('./toThrowMatchers'); - -const utils = require('jest-matcher-utils'); - -const GLOBAL_STATE = Symbol.for('$$jest-matchers-object'); - -class JestAssertionError extends Error {} - -if (!global[GLOBAL_STATE]) { - Object.defineProperty( - global, - GLOBAL_STATE, - { value: { matchers: Object.create(null), state: { suppressedErrors: [] } } }); - -} - -const expect = actual => { - const allMatchers = global[GLOBAL_STATE].matchers; - const expectation = { not: {} }; - Object.keys(allMatchers).forEach(name => { - expectation[name] = - makeThrowingMatcher(allMatchers[name], false, actual); - expectation.not[name] = - makeThrowingMatcher(allMatchers[name], true, actual); - }); - - return expectation; -}; - -const makeThrowingMatcher = ( -matcher, -isNot, -actual) => -{ - return function throwingMatcher() { - let throws = true; - const matcherContext = Object.assign( - // When throws is disabled, the matcher will not throw errors during test - // execution but instead add them to the global matcher state. If a - // matcher throws, test execution is normally stopped immediately. The - // snapshot matcher uses it because we want to log all snapshot - // failures in a test. - { dontThrow: () => throws = false }, - global[GLOBAL_STATE].state, - { - isNot, - utils }); - - - let result; - - try {for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {args[_key] = arguments[_key];} - result = matcher.apply( - matcherContext, - [actual].concat(args)); - - } catch (error) { - // Remove this and deeper functions from the stack trace frame. - Error.captureStackTrace(error, throwingMatcher); - throw error; - } - - _validateResult(result); - - if (result.pass && isNot || !result.pass && !isNot) {// XOR - let message = result.message; - - // for performance reasons some of the messages are evaluated - // lazily - if (typeof message === 'function') { - message = message(); - } - - if (!message) { - message = utils.RECEIVED_COLOR( - 'No message was specified for this matcher.'); - - } - - const error = new JestAssertionError(message); - // Remove this function from the stack trace frame. - Error.captureStackTrace(error, throwingMatcher); - - if (throws) { - throw error; - } else { - global[GLOBAL_STATE].state.suppressedErrors.push(error); - } - } - }; -}; - -expect.extend = matchersObj => { - Object.assign(global[GLOBAL_STATE].matchers, matchersObj); -}; - -const _validateResult = result => { - if ( - typeof result !== 'object' || - typeof result.pass !== 'boolean' || - - result.message && - - typeof result.message !== 'string' && - typeof result.message !== 'function') - - - { - throw new Error( - 'Unexpected return from a matcher function.\n' + - 'Matcher functions should ' + - 'return an object in the following format:\n' + - ' {message?: string | function, pass: boolean}\n' + - `'${ utils.stringify(result) }' was returned`); - - } -}; - -const setState = state => { - Object.assign(global[GLOBAL_STATE].state, state); -}; - -const getState = () => global[GLOBAL_STATE].state; - -// add default jest matchers -expect.extend(matchers); -expect.extend(spyMatchers); -expect.extend(toThrowMatchers); - -module.exports = { - expect, - getState, - setState }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/matchers.js b/fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/matchers.js deleted file mode 100644 index 0e5f4ab04..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/matchers.js +++ /dev/null @@ -1,479 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -/* eslint-disable max-len */ - -'use strict';var _require = - - - - - - - -require('jest-snapshot');const toMatchSnapshot = _require.toMatchSnapshot; - -const diff = require('jest-diff');var _require2 = -require('jest-util');const escapeStrForRegex = _require2.escapeStrForRegex;var _require3 = - - - - - - - - - - -require('jest-matcher-utils');const EXPECTED_COLOR = _require3.EXPECTED_COLOR,RECEIVED_COLOR = _require3.RECEIVED_COLOR,ensureNoExpected = _require3.ensureNoExpected,ensureNumbers = _require3.ensureNumbers,getType = _require3.getType,matcherHint = _require3.matcherHint,printReceived = _require3.printReceived,printExpected = _require3.printExpected,printWithType = _require3.printWithType; - - - - - - - - - -const IteratorSymbol = Symbol.iterator; -const equals = global.jasmine.matchersUtil.equals; - -const hasIterator = object => !!(object != null && object[IteratorSymbol]); -const iterableEquality = (a, b) => { - if ( - typeof a !== 'object' || - typeof b !== 'object' || - Array.isArray(a) || - Array.isArray(b) || - !hasIterator(a) || - !hasIterator(b)) - { - return undefined; - } - if (a.constructor !== b.constructor) { - return false; - } - const bIterator = b[IteratorSymbol](); - - for (const aValue of a) { - const nextB = bIterator.next(); - if ( - nextB.done || - !global.jasmine.matchersUtil.equals( - aValue, - nextB.value, - [iterableEquality])) - - { - return false; - } - } - if (!bIterator.next().done) { - return false; - } - return true; -}; - -const matchers = { - toBe(received, expected) { - const pass = received === expected; - - const message = pass ? - () => matcherHint('.not.toBe') + '\n\n' + - `Expected value to not be (using ===):\n` + - ` ${ printExpected(expected) }\n` + - `Received:\n` + - ` ${ printReceived(received) }` : - () => { - const diffString = diff(expected, received, { - expand: this.expand }); - - return matcherHint('.toBe') + '\n\n' + - `Expected value to be (using ===):\n` + - ` ${ printExpected(expected) }\n` + - `Received:\n` + - ` ${ printReceived(received) }` + ( - diffString ? `\n\nDifference:\n\n${ diffString }` : ''); - }; - - return { message, pass }; - }, - - toBeCloseTo( - actual, - expected) - - {let precision = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2; - ensureNumbers(actual, expected, '.toBeCloseTo'); - const pass = Math.abs(expected - actual) < Math.pow(10, -precision) / 2; - const message = pass ? - () => matcherHint('.not.toBeCloseTo', 'received', 'expected, precision') + '\n\n' + - `Expected value not to be close to (with ${ printExpected(precision) }-digit precision):\n` + - ` ${ printExpected(expected) }\n` + - `Received: \n` + - ` ${ printReceived(actual) }` : - () => matcherHint('.toBeCloseTo', 'received', 'expected, precision') + '\n\n' + - `Expected value to be close to (with ${ printExpected(precision) }-digit precision):\n` + - ` ${ printExpected(expected) }\n` + - `Received: \n` + - ` ${ printReceived(actual) }`; - - return { message, pass }; - }, - - toBeDefined(actual, expected) { - ensureNoExpected(expected, '.toBeDefined'); - const pass = actual !== void 0; - const message = pass ? - () => matcherHint('.not.toBeDefined', 'received', '') + '\n\n' + - `Expected value not to be defined, instead received\n` + - ` ${ printReceived(actual) }` : - () => matcherHint('.toBeDefined', 'received', '') + '\n\n' + - `Expected value to be defined, instead received\n` + - ` ${ printReceived(actual) }`; - return { message, pass }; - }, - - toBeFalsy(actual, expected) { - ensureNoExpected(expected, '.toBeFalsy'); - const pass = !actual; - const message = pass ? - () => matcherHint('.not.toBeFalsy', 'received', '') + '\n\n' + - `Expected value not to be falsy, instead received\n` + - ` ${ printReceived(actual) }` : - () => matcherHint('.toBeFalsy', 'received', '') + '\n\n' + - `Expected value to be falsy, instead received\n` + - ` ${ printReceived(actual) }`; - return { message, pass }; - }, - - toBeGreaterThan(actual, expected) { - ensureNumbers(actual, expected, '.toBeGreaterThan'); - const pass = actual > expected; - const message = pass ? - () => matcherHint('.not.toBeGreaterThan') + '\n\n' + - `Expected value not to be greater than:\n` + - ` ${ printExpected(expected) }\n` + - `Received:\n` + - ` ${ printReceived(actual) }` : - () => matcherHint('.toBeGreaterThan') + '\n\n' + - `Expected value to be greater than:\n` + - ` ${ printExpected(expected) }\n` + - `Received:\n` + - ` ${ printReceived(actual) }`; - return { message, pass }; - }, - - toBeGreaterThanOrEqual(actual, expected) { - ensureNumbers(actual, expected, '.toBeGreaterThanOrEqual'); - const pass = actual >= expected; - const message = pass ? - () => matcherHint('.not.toBeGreaterThanOrEqual') + '\n\n' + - `Expected value not to be greater than or equal:\n` + - ` ${ printExpected(expected) }\n` + - `Received:\n` + - ` ${ printReceived(actual) }` : - () => matcherHint('.toBeGreaterThanOrEqual') + '\n\n' + - `Expected value to be greater than or equal:\n` + - ` ${ printExpected(expected) }\n` + - `Received:\n` + - ` ${ printReceived(actual) }`; - return { message, pass }; - }, - - toBeInstanceOf(received, constructor) { - const constType = getType(constructor); - - if (constType !== 'function') { - throw new Error( - matcherHint('[.not].toBeInstanceOf', 'value', 'constructor') + `\n\n` + - `Expected constructor to be a function. Instead got:\n` + - ` ${ printExpected(constType) }`); - - } - const pass = received instanceof constructor; - - const message = pass ? - () => matcherHint('.not.toBeInstanceOf', 'value', 'constructor') + '\n\n' + - `Expected value not to be an instance of:\n` + - ` ${ printExpected(constructor.name || constructor) }\n` + - `Received:\n` + - ` ${ printReceived(received) }\n` : - () => matcherHint('.toBeInstanceOf', 'value', 'constructor') + '\n\n' + - `Expected value to be an instance of:\n` + - ` ${ printExpected(constructor.name || constructor) }\n` + - `Received:\n` + - ` ${ printReceived(received) }\n` + - `Constructor:\n` + - ` ${ printReceived(received.constructor && received.constructor.name) }`; - - return { message, pass }; - }, - - toBeLessThan(actual, expected) { - ensureNumbers(actual, expected, '.toBeLessThan'); - const pass = actual < expected; - const message = pass ? - () => matcherHint('.not.toBeLessThan') + '\n\n' + - `Expected value not to be less than:\n` + - ` ${ printExpected(expected) }\n` + - `Received:\n` + - ` ${ printReceived(actual) }` : - () => matcherHint('.toBeLessThan') + '\n\n' + - `Expected value to be less than:\n` + - ` ${ printExpected(expected) }\n` + - `Received:\n` + - ` ${ printReceived(actual) }`; - return { message, pass }; - }, - - toBeLessThanOrEqual(actual, expected) { - ensureNumbers(actual, expected, '.toBeLessThanOrEqual'); - const pass = actual <= expected; - const message = pass ? - () => matcherHint('.not.toBeLessThanOrEqual') + '\n\n' + - `Expected value not to be less than or equal:\n` + - ` ${ printExpected(expected) }\n` + - `Received:\n` + - ` ${ printReceived(actual) }` : - () => matcherHint('.toBeLessThanOrEqual') + '\n\n' + - `Expected value to be less than or equal:\n` + - ` ${ printExpected(expected) }\n` + - `Received:\n` + - ` ${ printReceived(actual) }`; - return { message, pass }; - }, - - toBeNaN(actual, expected) { - ensureNoExpected(expected, '.toBeNaN'); - const pass = Number.isNaN(actual); - const message = pass ? - () => matcherHint('.not.toBeNaN', 'received', '') + '\n\n' + - `Expected value not to be NaN, instead received\n` + - ` ${ printReceived(actual) }` : - () => matcherHint('.toBeNaN', 'received', '') + '\n\n' + - `Expected value to be NaN, instead received\n` + - ` ${ printReceived(actual) }`; - return { message, pass }; - }, - - toBeNull(actual, expected) { - ensureNoExpected(expected, '.toBeNull'); - const pass = actual === null; - const message = pass ? - () => matcherHint('.not.toBeNull', 'received', '') + '\n\n' + - `Expected value not to be null, instead received\n` + - ` ${ printReceived(actual) }` : - () => matcherHint('.toBeNull', 'received', '') + '\n\n' + - `Expected value to be null, instead received\n` + - ` ${ printReceived(actual) }`; - return { message, pass }; - }, - - toBeTruthy(actual, expected) { - ensureNoExpected(expected, '.toBeTruthy'); - const pass = !!actual; - const message = pass ? - () => matcherHint('.not.toBeTruthy', 'received', '') + '\n\n' + - `Expected value not to be truthy, instead received\n` + - ` ${ printReceived(actual) }` : - () => matcherHint('.toBeTruthy', 'received', '') + '\n\n' + - `Expected value to be truthy, instead received\n` + - ` ${ printReceived(actual) }`; - return { message, pass }; - }, - - toBeUndefined(actual, expected) { - ensureNoExpected(expected, '.toBeUndefined'); - const pass = actual === void 0; - const message = pass ? - () => matcherHint('.not.toBeUndefined', 'received', '') + '\n\n' + - `Expected value not to be undefined, instead received\n` + - ` ${ printReceived(actual) }` : - () => matcherHint('.toBeUndefined', 'received', '') + '\n\n' + - `Expected value to be undefined, instead received\n` + - ` ${ printReceived(actual) }`; - - return { message, pass }; - }, - - toContain(collection, value) { - const collectionType = getType(collection); - - let converted = null; - if (Array.isArray(collection) || typeof collection === 'string') { - // strings have `indexOf` so we don't need to convert - // arrays have `indexOf` and we don't want to make a copy - converted = collection; - } else { - try { - converted = Array.from(collection); - } catch (e) { - throw new Error( - matcherHint('[.not].toContainEqual', 'collection', 'value') + '\n\n' + - `Expected ${ RECEIVED_COLOR('collection') } to be an array-like structure.\n` + - printWithType('Received', collection, printReceived)); - - } - } - // At this point, we're either a string or an Array, - // which was converted from an array-like structure. - const pass = converted.indexOf(value) != -1; - const message = pass ? - () => matcherHint('.not.toContain', collectionType, 'value') + '\n\n' + - `Expected ${ collectionType }:\n` + - ` ${ printReceived(collection) }\n` + - `Not to contain value:\n` + - ` ${ printExpected(value) }\n` : - () => matcherHint('.toContain', collectionType, 'value') + '\n\n' + - `Expected ${ collectionType }:\n` + - ` ${ printReceived(collection) }\n` + - `To contain value:\n` + - ` ${ printExpected(value) }`; - - return { message, pass }; - }, - - toContainEqual(collection, value) { - const collectionType = getType(collection); - let converted = null; - if (Array.isArray(collection)) { - converted = collection; - } else { - try { - converted = Array.from(collection); - } catch (e) { - throw new Error( - matcherHint('[.not].toContainEqual', 'collection', 'value') + '\n\n' + - `Expected ${ RECEIVED_COLOR('collection') } to be an array-like structure.\n` + - printWithType('Received', collection, printReceived)); - - } - } - - const pass = - converted.findIndex(item => equals(item, value, [iterableEquality])) !== -1; - const message = pass ? - () => matcherHint('.not.toContainEqual', collectionType, 'value') + '\n\n' + - `Expected ${ collectionType }:\n` + - ` ${ printReceived(collection) }\n` + - `Not to contain a value equal to:\n` + - ` ${ printExpected(value) }\n` : - () => matcherHint('.toContainEqual', collectionType, 'value') + '\n\n' + - `Expected ${ collectionType }:\n` + - ` ${ printReceived(collection) }\n` + - `To contain a value equal to:\n` + - ` ${ printExpected(value) }`; - - return { message, pass }; - }, - - toEqual(received, expected) { - const pass = equals(received, expected, [iterableEquality]); - - const message = pass ? - () => matcherHint('.not.toEqual') + '\n\n' + - `Expected value to not equal:\n` + - ` ${ printExpected(expected) }\n` + - `Received:\n` + - ` ${ printReceived(received) }` : - () => { - const diffString = diff(expected, received, { - expand: this.expand }); - - return matcherHint('.toEqual') + '\n\n' + - `Expected value to equal:\n` + - ` ${ printExpected(expected) }\n` + - `Received:\n` + - ` ${ printReceived(received) }` + ( - diffString ? `\n\nDifference:\n\n${ diffString }` : ''); - }; - - return { message, pass }; - }, - - toHaveLength(received, length) { - if ( - typeof received !== 'string' && ( - !received || typeof received.length !== 'number')) - { - throw new Error( - matcherHint('[.not].toHaveLength', 'received', 'length') + '\n\n' + - `Expected value to have a 'length' prorerty that is a number. ` + - `Received:\n` + - ` ${ printReceived(received) }\n` + ( - - received ? - `received.length:\n ${ printReceived(received.length) }` : - '')); - - - } - - const pass = received.length === length; - const message = pass ? - () => matcherHint('.not.toHaveLength', 'received', 'length') + '\n\n' + - `Expected value to not have length:\n` + - ` ${ printExpected(length) }\n` + - `Received:\n` + - ` ${ printReceived(received) }\n` + - `received.length:\n` + - ` ${ printReceived(received.length) }` : - () => matcherHint('.toHaveLength', 'received', 'length') + '\n\n' + - `Expected value to have length:\n` + - ` ${ printExpected(length) }\n` + - `Received:\n` + - ` ${ printReceived(received) }\n` + - `received.length:\n` + - ` ${ printReceived(received.length) }`; - - return { message, pass }; - }, - - toMatch(received, expected) { - if (typeof received !== 'string') { - throw new Error( - matcherHint('[.not].toMatch', 'string', 'expected') + '\n\n' + - `${ RECEIVED_COLOR('string') } value must be a string.\n` + - printWithType('Received', received, printReceived)); - - } - - if (!(expected instanceof RegExp) && !(typeof expected === 'string')) { - throw new Error( - matcherHint('[.not].toMatch', 'string', 'expected') + '\n\n' + - `${ EXPECTED_COLOR('expected') } value must be a string or a regular expression.\n` + - printWithType('Expected', expected, printExpected)); - - } - - const pass = new RegExp( - typeof expected === 'string' ? - escapeStrForRegex(expected) : - expected). - test(received); - const message = pass ? - () => matcherHint('.not.toMatch') + - `\n\nExpected value not to match:\n` + - ` ${ printExpected(expected) }` + - `\nReceived:\n` + - ` ${ printReceived(received) }` : - () => matcherHint('.toMatch') + - `\n\nExpected value to match:\n` + - ` ${ printExpected(expected) }` + - `\nReceived:\n` + - ` ${ printReceived(received) }`; - - return { message, pass }; - }, - - toMatchSnapshot }; - - -module.exports = matchers; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/spyMatchers.js b/fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/spyMatchers.js deleted file mode 100644 index 1510d2477..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/spyMatchers.js +++ /dev/null @@ -1,191 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - -const CALL_PRINT_LIMIT = 3; -const LAST_CALL_PRINT_LIMIT = 1;var _require = - - - - - - - - - - -require('jest-matcher-utils');const ensureExpectedIsNumber = _require.ensureExpectedIsNumber,ensureNoExpected = _require.ensureNoExpected,EXPECTED_COLOR = _require.EXPECTED_COLOR,matcherHint = _require.matcherHint,pluralize = _require.pluralize,printExpected = _require.printExpected,printReceived = _require.printReceived,printWithType = _require.printWithType,RECEIVED_COLOR = _require.RECEIVED_COLOR; - -const RECEIVED_NAME = { - 'mock function': 'jest.fn()', - spy: 'spy' }; - - -const equals = global.jasmine.matchersUtil.equals; - -const createToBeCalledMatcher = matcherName => (received, expected) => { - ensureNoExpected(expected, matcherName); - ensureMock(received, matcherName); - - const receivedIsSpy = isSpy(received); - const type = receivedIsSpy ? 'spy' : 'mock function'; - const count = receivedIsSpy ? - received.calls.count() : - received.mock.calls.length; - const calls = receivedIsSpy ? - received.calls.all().map(x => x.args) : - received.mock.calls; - const pass = count > 0; - const message = pass ? - () => matcherHint('.not' + matcherName, RECEIVED_NAME[type], '') + - '\n\n' + - `Expected ${ type } not to be called ` + - formatReceivedCalls(calls, CALL_PRINT_LIMIT, { sameSentence: true }) : - () => matcherHint(matcherName, RECEIVED_NAME[type], '') + '\n\n' + - `Expected ${ type } to have been called.`; - - return { message, pass }; -}; - -const createToBeCalledWithMatcher = matcherName => -function ( -received) - -{for (var _len = arguments.length, expected = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {expected[_key - 1] = arguments[_key];} - ensureMock(received, matcherName); - - const receivedIsSpy = isSpy(received); - const type = receivedIsSpy ? 'spy' : 'mock function'; - const calls = receivedIsSpy ? - received.calls.all().map(x => x.args) : - received.mock.calls; - const pass = calls.some(call => equals(call, expected)); - - const message = pass ? - () => matcherHint('.not' + matcherName, RECEIVED_NAME[type]) + '\n\n' + - `Expected ${ type } not to have been called with:\n` + - ` ${ printExpected(expected) }` : - () => matcherHint(matcherName, RECEIVED_NAME[type]) + '\n\n' + - `Expected ${ type } to have been called with:\n` + - ` ${ printExpected(expected) }\n` + - formatReceivedCalls(calls, CALL_PRINT_LIMIT); - - return { message, pass }; -}; - -const createLastCalledWithMatcher = matcherName => -function ( -received) - -{for (var _len2 = arguments.length, expected = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {expected[_key2 - 1] = arguments[_key2];} - ensureMock(received, matcherName); - - const receivedIsSpy = isSpy(received); - const type = receivedIsSpy ? 'spy' : 'mock function'; - const calls = receivedIsSpy ? - received.calls.all().map(x => x.args) : - received.mock.calls; - const pass = equals(calls[calls.length - 1], expected); - - const message = pass ? - () => matcherHint('.not' + matcherName, RECEIVED_NAME[type]) + '\n\n' + - `Expected ${ type } to not have been last called with:\n` + - ` ${ printExpected(expected) }` : - () => matcherHint(matcherName, RECEIVED_NAME[type]) + '\n\n' + - `Expected ${ type } to have been last called with:\n` + - ` ${ printExpected(expected) }\n` + - formatReceivedCalls(calls, LAST_CALL_PRINT_LIMIT, { isLast: true }); - - return { message, pass }; -}; - -const spyMatchers = { - lastCalledWith: createLastCalledWithMatcher('.lastCalledWith'), - toBeCalled: createToBeCalledMatcher('.toBeCalled'), - toBeCalledWith: createToBeCalledWithMatcher('.toBeCalledWith'), - toHaveBeenCalled: createToBeCalledMatcher('.toHaveBeenCalled'), - toHaveBeenCalledTimes(received, expected) { - const matcherName = '.toHaveBeenCalledTimes'; - ensureExpectedIsNumber(expected, matcherName); - ensureMock(received, matcherName); - - const receivedIsSpy = isSpy(received); - const type = receivedIsSpy ? 'spy' : 'mock function'; - const count = receivedIsSpy ? - received.calls.count() : - received.mock.calls.length; - const pass = count === expected; - const message = pass ? - () => matcherHint( - '.not' + - matcherName, - RECEIVED_NAME[type], - String(expected)) + - - `\n\n` + - `Expected ${ type } not to be called ` + - `${ EXPECTED_COLOR(pluralize('time', expected)) }, but it was` + - ` called exactly ${ RECEIVED_COLOR(pluralize('time', count)) }.` : - () => matcherHint(matcherName, RECEIVED_NAME[type], String(expected)) + - '\n\n' + - `Expected ${ type } to have been called ` + - `${ EXPECTED_COLOR(pluralize('time', expected)) },` + - ` but it was called ${ RECEIVED_COLOR(pluralize('time', count)) }.`; - - return { message, pass }; - }, - toHaveBeenCalledWith: createToBeCalledWithMatcher('.toHaveBeenCalledWith'), - toHaveBeenLastCalledWith: - createLastCalledWithMatcher('.toHaveBeenLastCalledWith') }; - - -const isSpy = spy => spy.calls && typeof spy.calls.count === 'function'; - -const ensureMock = (mockOrSpy, matcherName) => { - if ( - !mockOrSpy || - (mockOrSpy.calls === undefined || mockOrSpy.calls.all === undefined) && - mockOrSpy._isMockFunction !== true) - { - throw new Error( - matcherHint('[.not]' + matcherName, 'jest.fn()', '') + '\n\n' + - `${ RECEIVED_COLOR('jest.fn()') } value must be a mock function or spy.\n` + - printWithType('Received', mockOrSpy, printReceived)); - - } -}; - -const formatReceivedCalls = (calls, limit, options) => { - if (calls.length) { - const but = options && options.sameSentence ? 'but' : 'But'; - const count = calls.length - limit; - const printedCalls = - calls. - slice(-limit). - reverse(). - map(printReceived). - join(', '); - return ( - `${ but } it was ${ options && options.isLast ? 'last ' : '' }called ` + - `with:\n ` + printedCalls + ( - count > 0 ? - '\nand ' + RECEIVED_COLOR(pluralize('more call', count)) + '.' : - '')); - - - } else { - return `But it was ${ RECEIVED_COLOR('not called') }.`; - } -}; - -module.exports = spyMatchers; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/toThrowMatchers.js b/fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/toThrowMatchers.js deleted file mode 100644 index 72d93947a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-matchers/build/toThrowMatchers.js +++ /dev/null @@ -1,163 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -/* eslint-disable max-len */ - -'use strict';var _require = - - - - - - - -require('jest-util');const escapeStrForRegex = _require.escapeStrForRegex,formatStackTrace = _require.formatStackTrace,separateMessageFromStack = _require.separateMessageFromStack;var _require2 = - - - - - - -require('jest-matcher-utils');const RECEIVED_COLOR = _require2.RECEIVED_COLOR,getType = _require2.getType,matcherHint = _require2.matcherHint,printExpected = _require2.printExpected,printWithType = _require2.printWithType; - -const equals = global.jasmine.matchersUtil.equals; - -const createMatcher = matcherName => -(actual, expected) => { - const value = expected; - let error; - - try { - actual(); - } catch (e) { - error = e; - } - - if (typeof expected === 'string') { - expected = new RegExp(escapeStrForRegex(expected)); - } - - if (typeof expected === 'function') { - return toThrowMatchingError(matcherName, error, expected); - } else if (expected instanceof RegExp) { - return toThrowMatchingStringOrRegexp(matcherName, error, expected, value); - } else if (expected && typeof expected === 'object') { - return toThrowMatchingErrorInstance(matcherName, error, expected); - } else if (expected === undefined) { - const pass = error !== undefined; - return { - message: pass ? - () => matcherHint('.not' + matcherName, 'function', '') + '\n\n' + - 'Expected the function not to throw an error.\n' + - printActualErrorMessage(error) : - () => matcherHint(matcherName, 'function', getType(value)) + '\n\n' + - 'Expected the function to throw an error.\n' + - printActualErrorMessage(error), - pass }; - - } else { - throw new Error( - matcherHint('.not' + matcherName, 'function', getType(value)) + '\n\n' + - 'Unexpected argument passed.\nExpected: ' + - `${ printExpected('string') }, ${ printExpected('Error (type)') } or ${ printExpected('regexp') }.\n` + - printWithType('Got', String(expected), printExpected)); - - } -}; - -const matchers = { - toThrow: createMatcher('.toThrow'), - toThrowError: createMatcher('.toThrowError') }; - - -const toThrowMatchingStringOrRegexp = ( -name, -error, -pattern, -value) => -{ - if (error && !error.message && !error.name) { - error = new Error(error); - } - - const pass = !!(error && error.message.match(pattern)); - const message = pass ? - () => matcherHint('.not' + name, 'function', getType(value)) + '\n\n' + - `Expected the function not to throw an error matching:\n` + - ` ${ printExpected(value) }\n` + - printActualErrorMessage(error) : - () => matcherHint(name, 'function', getType(value)) + '\n\n' + - `Expected the function to throw an error matching:\n` + - ` ${ printExpected(value) }\n` + - printActualErrorMessage(error); - - return { message, pass }; -}; - -const toThrowMatchingErrorInstance = ( -name, -error, -expectedError) => -{ - if (error && !error.message && !error.name) { - error = new Error(error); - } - - const pass = equals(error, expectedError); - const message = pass ? - () => matcherHint('.not' + name, 'function', 'error') + '\n\n' + - `Expected the function not to throw an error matching:\n` + - ` ${ printExpected(expectedError) }\n` + - printActualErrorMessage(error) : - () => matcherHint(name, 'function', 'error') + '\n\n' + - `Expected the function to throw an error matching:\n` + - ` ${ printExpected(expectedError) }\n` + - printActualErrorMessage(error); - - return { message, pass }; -}; - -const toThrowMatchingError = ( -name, -error, -ErrorClass) => -{ - const pass = !!(error && error instanceof ErrorClass); - const message = pass ? - () => matcherHint('.not' + name, 'function', 'type') + '\n\n' + - `Expected the function not to throw an error of type:\n` + - ` ${ printExpected(ErrorClass.name) }\n` + - printActualErrorMessage(error) : - () => matcherHint(name, 'function', 'type') + '\n\n' + - `Expected the function to throw an error of type:\n` + - ` ${ printExpected(ErrorClass.name) }\n` + - printActualErrorMessage(error); - - return { message, pass }; -}; - -const printActualErrorMessage = error => { - if (error) {var _separateMessageFromS = - separateMessageFromStack(error.stack);const message = _separateMessageFromS.message,stack = _separateMessageFromS.stack; - return ( - `Instead, it threw:\n` + - RECEIVED_COLOR( - ' ' + message + formatStackTrace(stack, { - noStackTrace: false, - rootDir: process.cwd(), - testRegex: '' }))); - - - - } - - return `But it didn't throw anything.`; -}; - -module.exports = matchers; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-matchers/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-matchers/package.json deleted file mode 100644 index ded30384c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-matchers/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_args": [ - [ - "jest-matchers@^17.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2" - ] - ], - "_from": "jest-matchers@>=17.0.3 <18.0.0", - "_id": "jest-matchers@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest-matchers", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/jest-matchers-17.0.3.tgz_1479368476147_0.5407528567593545" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-matchers", - "raw": "jest-matchers@^17.0.3", - "rawSpec": "^17.0.3", - "scope": null, - "spec": ">=17.0.3 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-jasmine2" - ], - "_resolved": "https://registry.npmjs.org/jest-matchers/-/jest-matchers-17.0.3.tgz", - "_shasum": "88b95348c919343db86d08f12354a8650ae7eddf", - "_shrinkwrap": null, - "_spec": "jest-matchers@^17.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-jasmine2", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "jest-diff": "^17.0.3", - "jest-matcher-utils": "^17.0.3", - "jest-util": "^17.0.2" - }, - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "88b95348c919343db86d08f12354a8650ae7eddf", - "tarball": "https://registry.npmjs.org/jest-matchers/-/jest-matchers-17.0.3.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - } - ], - "name": "jest-matchers", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-mock/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-mock/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-mock/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-mock/README.md b/fundamentals/bug-challenge-es6/node_modules/jest-mock/README.md deleted file mode 100644 index 17d209d94..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-mock/README.md +++ /dev/null @@ -1,122 +0,0 @@ -# jest-mock - -## API - -### `constructor(global)` - -Creates a new module mocker that generates mocks as if they were created in an -environment with the given global object. - -### `generateFromMetadata(metadata)` - -Generates a mock based on the given metadata (Metadata for the mock in -the schema returned by the getMetadata method of this module). Mocks treat -functions specially, and all mock functions have additional members, described -in the documentation for getMockFunction in this module. - - -One important note: function prototypes are handled specially by this -mocking framework. For functions with prototypes, when called as a -constructor, the mock will install mocked function members on the instance. -This allows different instances of the same constructor to have different -values for its mocks member and its return values. - -### `getMetadata(component)` - -Inspects the argument and returns its schema in the following recursive format: - -```js -{ - type: ... - members : {} -} -``` - -Where type is one of `array`, `object`, `function`, or `ref`, and members -is an optional dictionary where the keys are member names and the values -are metadata objects. Function prototypes are defined simply by defining -metadata for the `member.prototype` of the function. The type of a function -prototype should always be `object`. For instance, a simple class might be -defined like this: - -```js -{ - type: 'function', - members: { - staticMethod: {type: 'function'}, - prototype: { - type: 'object', - members: { - instanceMethod: {type: 'function'} - } - } - } -} - ``` - -Metadata may also contain references to other objects defined within the -same metadata object. The metadata for the referent must be marked with -`refID` key and an arbitrary value. The referrer must be marked with a -`ref` key that has the same value as object with refID that it refers to. -For instance, this metadata blob: - -```js -{ - type: 'object', - refID: 1, - members: { - self: {ref: 1} - } -} -``` - -defines an object with a slot named `self` that refers back to the object. - -### `getMockFunction` - -Generates a stand-alone function with members that help drive unit tests or -confirm expectations. Specifically, functions returned by this method have -the following members: - -##### `.mock` - -An object with two members, `calls`, and `instances`, which are both -lists. The items in the `calls` list are the arguments with which the -function was called. The "instances" list stores the value of 'this' for -each call to the function. This is useful for retrieving instances from a -constructor. - -##### `.mockReturnValueOnce(value)` - -Pushes the given value onto a FIFO queue of return values for the -function. - -##### `.mockReturnValue(value)` - -Sets the default return value for the function. - -##### `.mockImplementationOnce(function)` - -Pushes the given mock implementation onto a FIFO queue of mock -implementations for the function. - -##### `.mockImplementation(function)` - -Sets the default mock implementation for the function. - -##### `.mockReturnThis()` - -Syntactic sugar for .mockImplementation(function() {return this;}) - - - -In case both `mockImplementationOnce()/mockImplementation()` and -`mockReturnValueOnce()/mockReturnValue()` are called. The priority of which to -use is based on what is the last call: -- if the last call is mockReturnValueOnce() or mockReturnValue(), - use the specific return value or default return value. - If specific return values are used up or no default return value is set, - fall back to try mockImplementation(); -- if the last call is mockImplementationOnce() or mockImplementation(), - run the specific implementation and return the result or run default - implementation and return the result. diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-mock/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-mock/build/index.js deleted file mode 100644 index 57f579800..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-mock/build/index.js +++ /dev/null @@ -1,565 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const MOCK_CONSTRUCTOR_NAME = 'mockConstructor'; - -// $FlowFixMe -const RESERVED_KEYWORDS = Object.assign(Object.create(null), { - arguments: true, - await: true, - break: true, - case: true, - catch: true, - class: true, - const: true, - continue: true, - debugger: true, - default: true, - delete: true, - do: true, - else: true, - enum: true, - eval: true, - export: true, - extends: true, - false: true, - finally: true, - for: true, - function: true, - if: true, - implements: true, - import: true, - in: true, - instanceof: true, - interface: true, - let: true, - new: true, - null: true, - package: true, - private: true, - protected: true, - public: true, - return: true, - static: true, - super: true, - switch: true, - this: true, - throw: true, - true: true, - try: true, - typeof: true, - var: true, - void: true, - while: true, - with: true, - yield: true }); - - -function isA(typeName, value) { - return Object.prototype.toString.apply(value) === '[object ' + typeName + ']'; -} - -function getType(ref) { - if (isA('Function', ref)) { - return 'function'; - } else if (Array.isArray(ref)) { - return 'array'; - } else if (isA('Object', ref)) { - return 'object'; - } else if ( - isA('Number', ref) || - isA('String', ref) || - isA('Boolean', ref) || - isA('Symbol', ref)) - { - return 'constant'; - } else if (isA('Map', ref) || isA('WeakMap', ref) || isA('Set', ref)) { - return 'collection'; - } else if (isA('RegExp', ref)) { - return 'regexp'; - } else if (ref === undefined) { - return 'undefined'; - } else if (ref === null) { - return 'null'; - } else { - return null; - } -} - -function isReadonlyProp(object, prop) { - return ( - - ( - prop === 'arguments' || - prop === 'caller' || - prop === 'callee' || - prop === 'name' || - prop === 'length') && - - isA('Function', object) || - - - ( - prop === 'source' || - prop === 'global' || - prop === 'ignoreCase' || - prop === 'multiline') && - - isA('RegExp', object)); - - -} - -function getSlots(object) { - const slots = {}; - if (!object) { - return []; - } - - let parent = Object.getPrototypeOf(object); - do { - if (object === Object.getPrototypeOf(Function)) { - break; - } - const ownNames = Object.getOwnPropertyNames(object); - for (let i = 0; i < ownNames.length; i++) { - const prop = ownNames[i]; - if (!isReadonlyProp(object, prop)) { - const propDesc = Object.getOwnPropertyDescriptor(object, prop); - if (!propDesc.get || object.__esModule) { - slots[prop] = true; - } - } - } - object = parent; - } while (object && (parent = Object.getPrototypeOf(object)) !== null); - return Object.keys(slots); -} - - -class ModuleMocker { - - - - /** - * @see README.md - * @param global Global object of the test environment, used to create - * mocks - */ - constructor(global) { - this._environmentGlobal = global; - this._mockRegistry = new WeakMap(); - } - - _ensureMock(f) { - if (!this._mockRegistry.has(f)) { - this._mockRegistry.set(f, this._defaultMockState()); - } - return this._mockRegistry.get(f); - } - - _defaultMockState() { - return { - private: { - defaultReturnValue: undefined, - isReturnValueLastSet: false, - mockImpl: undefined, - specificMockImpls: [], - specificReturnValues: [] }, - - public: { - calls: [], - instances: [] } }; - - - } - - _makeComponent(metadata) { - if (metadata.type === 'object') { - return new this._environmentGlobal.Object(); - } else if (metadata.type === 'array') { - return new this._environmentGlobal.Array(); - } else if (metadata.type === 'regexp') { - return new this._environmentGlobal.RegExp(''); - } else if ( - metadata.type === 'constant' || - metadata.type === 'collection' || - metadata.type === 'null' || - metadata.type === 'undefined') - { - return metadata.value; - } else if (metadata.type === 'function') { - /* eslint-disable prefer-const */ - let f; - /* eslint-enable prefer-const */ - - const prototype = - metadata.members && - metadata.members.prototype && - metadata.members.prototype.members || - {}; - const prototypeSlots = getSlots(prototype); - const mocker = this; - const mockConstructor = function () { - const mockState = mocker._ensureMock(f); - mockState.public.instances.push(this); - mockState.public.calls.push(Array.prototype.slice.call(arguments)); - if (this instanceof f) { - // This is probably being called as a constructor - prototypeSlots.forEach(slot => { - // Copy prototype methods to the instance to make - // it easier to interact with mock instance call and - // return values - if (prototype[slot].type === 'function') { - const protoImpl = this[slot]; - this[slot] = mocker.generateFromMetadata(prototype[slot]); - this[slot]._protoImpl = protoImpl; - } - }); - - // Run the mock constructor implementation - return ( - mockState.private.mockImpl && - mockState.private.mockImpl.apply(this, arguments)); - - } - - let returnValue; - // If return value is last set, either specific or default, i.e. - // mockReturnValueOnce()/mockReturnValue() is called and no - // mockImplementationOnce()/mockImplementation() is called after that. - // use the set return value. - if (mockState.private.isReturnValueLastSet) { - returnValue = mockState.private.specificReturnValues.shift(); - if (returnValue === undefined) { - returnValue = mockState.private.defaultReturnValue; - } - } - - // If mockImplementationOnce()/mockImplementation() is last set, - // or specific return values are used up, use the mock implementation. - let specificMockImpl; - if (returnValue === undefined) { - specificMockImpl = mockState.private.specificMockImpls.shift(); - if (specificMockImpl === undefined) { - specificMockImpl = mockState.private.mockImpl; - } - if (specificMockImpl) { - return specificMockImpl.apply(this, arguments); - } - } - - // Otherwise use prototype implementation - if (returnValue === undefined && f._protoImpl) { - return f._protoImpl.apply(this, arguments); - } - - return returnValue; - }; - - f = this._createMockFunction(metadata, mockConstructor); - f._isMockFunction = true; - f.getMockImplementation = () => this._ensureMock(f).private.mockImpl; - - this._mockRegistry.set(f, this._defaultMockState()); - - // $FlowFixMe - defineProperty getters not supported - Object.defineProperty(f, 'mock', { - configurable: false, - enumerable: true, - get: () => this._ensureMock(f).public, - set: val => this._ensureMock(f).public = val }); - - - f.mockClear = () => { - const publicState = this._ensureMock(f).public; - publicState.calls.length = 0; - publicState.instances.length = 0; - }; - - f.mockReset = () => { - this._mockRegistry.delete(f); - }; - - f.mockReturnValueOnce = value => { - // next function call will return this value or default return value - const privateState = this._ensureMock(f).private; - privateState.isReturnValueLastSet = true; - privateState.specificReturnValues.push(value); - return f; - }; - - f.mockReturnValue = value => { - // next function call will return specified return value or this one - const privateState = this._ensureMock(f).private; - privateState.isReturnValueLastSet = true; - privateState.defaultReturnValue = value; - return f; - }; - - f.mockImplementationOnce = fn => { - // next function call will use this mock implementation return value - // or default mock implementation return value - const privateState = this._ensureMock(f).private; - privateState.isReturnValueLastSet = false; - privateState.specificMockImpls.push(fn); - return f; - }; - - f.mockImplementation = f.mockImpl = fn => { - // next function call will use mock implementation return value - const privateState = this._ensureMock(f).private; - privateState.isReturnValueLastSet = false; - privateState.mockImpl = fn; - return f; - }; - - f.mockReturnThis = () => - f.mockImplementation(function () { - return this; - }); - - if (metadata.mockImpl) { - f.mockImplementation(metadata.mockImpl); - } - - return f; - } else { - const unknownType = metadata.type || 'undefined type'; - throw new Error('Unrecognized type ' + unknownType); - } - } - - _createMockFunction( - metadata, - mockConstructor) - { - let name = metadata.name; - // Special case functions named `mockConstructor` to guard for infinite - // loops. - if (!name || name === MOCK_CONSTRUCTOR_NAME) { - return mockConstructor; - } - - // Preserve `name` property of mocked function. - const boundFunctionPrefix = 'bound '; - let bindCall = ''; - // if-do-while for perf reasons. The common case is for the if to fail. - if (name && name.startsWith(boundFunctionPrefix)) { - do { - name = name.substring(boundFunctionPrefix.length); - // Call bind() just to alter the function name. - bindCall = '.bind(null)'; - } while (name && name.startsWith(boundFunctionPrefix)); - } - - // It's a syntax error to define functions with a reserved keyword - // as name. - if (RESERVED_KEYWORDS[name]) { - name = '$' + name; - } - - // It's also a syntax error to define a function with a reserved character - // as part of it's name. - if (/[\s-]/.test(name)) { - name = name.replace(/[\s-]/g, '$'); - } - - const body = - 'return function ' + name + '() {' + - 'return ' + MOCK_CONSTRUCTOR_NAME + '.apply(this,arguments);' + - '}' + bindCall; - const createConstructor = new this._environmentGlobal.Function( - MOCK_CONSTRUCTOR_NAME, - body); - - return createConstructor(mockConstructor); - } - - _generateMock( - metadata, - callbacks, - refs) - { - const mock = this._makeComponent(metadata); - if (metadata.refID != null) { - refs[metadata.refID] = mock; - } - - getSlots(metadata.members).forEach(slot => { - const slotMetadata = metadata.members && metadata.members[slot] || {}; - if (slotMetadata.ref != null) { - callbacks.push(() => mock[slot] = refs[slotMetadata.ref]); - } else { - mock[slot] = this._generateMock(slotMetadata, callbacks, refs); - } - }); - - if ( - metadata.type !== 'undefined' && - metadata.type !== 'null' && - mock.prototype) - { - mock.prototype.constructor = mock; - } - - return mock; - } - - /** - * @see README.md - * @param metadata Metadata for the mock in the schema returned by the - * getMetadata method of this module. - */ - generateFromMetadata(_metadata) { - const callbacks = []; - const refs = {}; - const mock = this._generateMock(_metadata, callbacks, refs); - callbacks.forEach(setter => setter()); - return mock; - } - - /** - * @see README.md - * @param component The component for which to retrieve metadata. - */ - getMetadata( - component, - _refs) - { - const refs = _refs || new Map(); - const ref = refs.get(component); - if (ref != null) { - return { ref }; - } - - const type = getType(component); - if (!type) { - return null; - } - - const metadata = { type }; - if ( - type === 'constant' || - type === 'collection' || - type === 'undefined' || - type === 'null') - { - metadata.value = component; - return metadata; - } else if (type === 'function') { - metadata.name = component.name; - if (component._isMockFunction) { - metadata.mockImpl = component.getMockImplementation(); - } - } - - metadata.refID = refs.size; - refs.set(component, metadata.refID); - - let members = null; - // Leave arrays alone - if (type !== 'array') { - if (type !== 'undefined') { - getSlots(component).forEach(slot => { - if ( - type === 'function' && - component._isMockFunction && - slot.match(/^mock/)) - { - return; - } - - if ( - !component.hasOwnProperty && component[slot] !== undefined || - component.hasOwnProperty && component.hasOwnProperty(slot) || - type === 'object' && component[slot] != Object.prototype[slot]) - { - const slotMetadata = this.getMetadata(component[slot], refs); - if (slotMetadata) { - if (!members) { - members = {}; - } - members[slot] = slotMetadata; - } - } - }); - } - - // If component is native code function, prototype might be undefined - if (type === 'function' && component.prototype) { - const prototype = this.getMetadata(component.prototype, refs); - if (prototype && prototype.members) { - if (!members) { - members = {}; - } - members.prototype = prototype; - } - } - } - - if (members) { - metadata.members = members; - } - - return metadata; - } - - isMockFunction(fn) { - return !!fn._isMockFunction; - } - - /** - * @see README.md - */ - getMockFunction() { - return this._makeComponent({ type: 'function' }); - } - - // Just a short-hand alias - getMockFn() { - return this.getMockFunction(); - } - - resetAllMocks() { - this._mockRegistry = new WeakMap(); - }} - - -module.exports = ModuleMocker; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-mock/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-mock/package.json deleted file mode 100644 index e8bdcc0e1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-mock/package.json +++ /dev/null @@ -1,92 +0,0 @@ -{ - "_args": [ - [ - "jest-mock@^17.0.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "jest-mock@>=17.0.2 <18.0.0", - "_id": "jest-mock@17.0.2", - "_inCache": true, - "_installable": true, - "_location": "/jest-mock", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/jest-mock-17.0.2.tgz_1479170365845_0.35245098802261055" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-mock", - "raw": "jest-mock@^17.0.2", - "rawSpec": "^17.0.2", - "scope": null, - "spec": ">=17.0.2 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-config", - "/jest-environment-jsdom", - "/jest-environment-node", - "/jest-runtime", - "/jest-util", - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-17.0.2.tgz", - "_shasum": "3dfe9221afd9aa61b3d9992840813a358bb2f429", - "_shrinkwrap": null, - "_spec": "jest-mock@^17.0.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": {}, - "description": "## API", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "3dfe9221afd9aa61b3d9992840813a358bb2f429", - "tarball": "https://registry.npmjs.org/jest-mock/-/jest-mock-17.0.2.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - } - ], - "name": "jest-mock", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-resolve-dependencies/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-resolve-dependencies/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-resolve-dependencies/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-resolve-dependencies/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-resolve-dependencies/build/index.js deleted file mode 100644 index 387a0c3f8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-resolve-dependencies/build/index.js +++ /dev/null @@ -1,114 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - - - -const fileExists = require('jest-file-exists'); - -function compact(array) { - const result = []; - for (let i = 0; i < array.length; ++i) { - const element = array[i]; - if (element != null) { - result.push(element); - } - } - return result; -} - -/** - * DependencyResolver is used to resolve the direct dependencies of a module or - * to retrieve a list of all transitive inverse dependencies. - */ -class DependencyResolver { - - - - constructor(resolver, hasteFS) { - this._resolver = resolver; - this._hasteFS = hasteFS; - } - - resolve( - file, - options) - { - const dependencies = this._hasteFS.getDependencies(file); - if (!dependencies) { - return []; - } - return compact( - dependencies.map(dependency => { - if (this._resolver.isCoreModule(dependency)) { - return null; - } - try { - return this._resolver.resolveModule(file, dependency, options); - } catch (e) {} - return this._resolver.getMockModule(file, dependency) || null; - })); - - } - - resolveInverse( - paths, - filter, - options) - { - const collectModules = (relatedPaths, moduleMap, changed) => { - const visitedModules = new Set(); - while (changed.size) { - changed = new Set(moduleMap.filter(module => - !visitedModules.has(module.file) && - module.dependencies.some(dep => dep && changed.has(dep))). - map(module => { - const file = module.file; - if (filter(file)) { - relatedPaths.add(file); - } - visitedModules.add(file); - return module.file; - })); - } - return relatedPaths; - }; - - if (!paths.size) { - return []; - } - - const relatedPaths = new Set(); - const changed = new Set(); - for (const path of paths) { - if (fileExists(path, this._hasteFS)) { - const module = this._hasteFS.exists(path); - if (module) { - changed.add(path); - if (filter(path)) { - relatedPaths.add(path); - } - } - } - } - - const modules = this._hasteFS.getAllFiles().map(file => ({ - dependencies: this.resolve(file, options), - file })); - - return Array.from(collectModules(relatedPaths, modules, changed)); - }} - - - -module.exports = DependencyResolver; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-resolve-dependencies/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-resolve-dependencies/package.json deleted file mode 100644 index 447bdbe3b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-resolve-dependencies/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_args": [ - [ - "jest-resolve-dependencies@^17.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "jest-resolve-dependencies@>=17.0.3 <18.0.0", - "_id": "jest-resolve-dependencies@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest-resolve-dependencies", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/jest-resolve-dependencies-17.0.3.tgz_1479368480953_0.335009400267154" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-resolve-dependencies", - "raw": "jest-resolve-dependencies@^17.0.3", - "rawSpec": "^17.0.3", - "scope": null, - "spec": ">=17.0.3 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-17.0.3.tgz", - "_shasum": "bbd37f4643704b97a980927212f3ab12b06e8894", - "_shrinkwrap": null, - "_spec": "jest-resolve-dependencies@^17.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "jest-file-exists": "^17.0.0", - "jest-resolve": "^17.0.3" - }, - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "bbd37f4643704b97a980927212f3ab12b06e8894", - "tarball": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-17.0.3.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - } - ], - "name": "jest-resolve-dependencies", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-resolve/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-resolve/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-resolve/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-resolve/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-resolve/build/index.js deleted file mode 100644 index 48134f13b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-resolve/build/index.js +++ /dev/null @@ -1,246 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - - -const nodeModulesPaths = require('resolve/lib/node-modules-paths'); -const path = require('path'); -const resolve = require('resolve'); -const browserResolve = require('browser-resolve'); - - - - - - - - - - - - - - - - - - - - - - - - -const NATIVE_PLATFORM = 'native'; - -const nodePaths = -process.env.NODE_PATH ? process.env.NODE_PATH.split(path.delimiter) : null; - -class Resolver { - - - - - - constructor(moduleMap, options) { - this._options = { - browser: options.browser, - defaultPlatform: options.defaultPlatform, - extensions: options.extensions, - hasCoreModules: - options.hasCoreModules === undefined ? true : options.hasCoreModules, - moduleDirectories: options.moduleDirectories || ['node_modules'], - moduleNameMapper: options.moduleNameMapper, - modulePaths: options.modulePaths, - platforms: options.platforms }; - - this._moduleMap = moduleMap; - this._moduleNameCache = Object.create(null); - this._modulePathCache = Object.create(null); - } - - static findNodeModule(path, options) { - const paths = options.paths; - try { - const resv = options.browser ? browserResolve : resolve; - return resv.sync( - path, - { - basedir: options.basedir, - extensions: options.extensions, - moduleDirectory: options.moduleDirectory, - paths: paths ? (nodePaths || []).concat(paths) : nodePaths }); - - - } catch (e) {} - return null; - } - - resolveModule( - from, - moduleName, - options) - { - const dirname = path.dirname(from); - const paths = this._options.modulePaths; - const moduleDirectory = this._options.moduleDirectories; - const key = dirname + path.delimiter + moduleName; - const defaultPlatform = this._options.defaultPlatform; - const extensions = this._options.extensions.slice(); - if (this._supportsNativePlatform()) { - extensions.unshift('.' + NATIVE_PLATFORM + '.js'); - } - if (defaultPlatform) { - extensions.unshift('.' + defaultPlatform + '.js'); - } - - // 0. If we have already resolved this module for this directory name, - // return a value from the cache. - if (this._moduleNameCache[key]) { - return this._moduleNameCache[key]; - } - - // 1. Check if the module is a haste module. - let module = this.getModule(moduleName); - if (module) { - return this._moduleNameCache[key] = module; - } - - // 2. Check if the module is a node module and resolve it based on - // the node module resolution algorithm. - if (!options || !options.skipNodeResolution) { - module = Resolver.findNodeModule(moduleName, { - basedir: dirname, - browser: this._options.browser, - extensions, - moduleDirectory, - paths }); - - - if (module) { - return this._moduleNameCache[key] = module; - } - } - - // 3. Resolve "haste packages" which are `package.json` files outside of - // `node_modules` folders anywhere in the file system. - const parts = moduleName.split('/'); - module = this.getPackage(parts.shift()); - if (module) { - try { - return this._moduleNameCache[key] = require.resolve( - path.join.apply(path, [path.dirname(module)].concat(parts))); - - } catch (ignoredError) {} - } - - // 4. Throw an error if the module could not be found. `resolve.sync` - // only produces an error based on the dirname but we have the actual - // current module name available. - const relativePath = path.relative(dirname, from); - const err = new Error( - `Cannot find module '${ moduleName }' from '${ relativePath || '.' }'`); - - err.code = 'MODULE_NOT_FOUND'; - throw err; - } - - isCoreModule(moduleName) { - return this._options.hasCoreModules && resolve.isCore(moduleName); - } - - getModule(name) { - return this._moduleMap.getModule( - name, - this._options.defaultPlatform, - this._supportsNativePlatform()); - - } - - getPackage(name) { - return this._moduleMap.getPackage( - name, - this._options.defaultPlatform, - this._supportsNativePlatform()); - - } - - getMockModule(from, name) { - const mock = this._moduleMap.getMockModule(name); - if (mock) { - return mock; - } else { - const moduleName = this._resolveStubModuleName(from, name); - if (moduleName) { - return this.getModule(moduleName) || moduleName; - } - } - return null; - } - - getModulePaths(from) { - if (!this._modulePathCache[from]) { - const moduleDirectory = this._options.moduleDirectories; - const paths = nodeModulesPaths(from, { moduleDirectory }); - if (paths[paths.length - 1] === undefined) { - // circumvent node-resolve bug that adds `undefined` as last item. - paths.pop(); - } - this._modulePathCache[from] = paths; - } - return this._modulePathCache[from]; - } - - _resolveStubModuleName(from, moduleName) { - const dirname = path.dirname(from); - const paths = this._options.modulePaths; - const extensions = this._options.extensions; - const moduleDirectory = this._options.moduleDirectories; - - const moduleNameMapper = this._options.moduleNameMapper; - if (moduleNameMapper) { - for (const mappedModuleName in moduleNameMapper) { - const regex = moduleNameMapper[mappedModuleName]; - if (regex.test(moduleName)) { - const matches = moduleName.match(regex); - if (!matches) { - moduleName = mappedModuleName; - } else { - moduleName = mappedModuleName.replace( - /\$([0-9]+)/g, - (_, index) => matches[parseInt(index, 10)]); - - } - return this.getModule(moduleName) || Resolver.findNodeModule( - moduleName, - { - basedir: dirname, - browser: this._options.browser, - extensions, - moduleDirectory, - paths }); - - - } - } - } - return null; - } - - _supportsNativePlatform() { - return (this._options.platforms || []).indexOf(NATIVE_PLATFORM) !== -1; - }} - - - -module.exports = Resolver; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-resolve/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-resolve/package.json deleted file mode 100644 index a5f0f1326..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-resolve/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_args": [ - [ - "jest-resolve@^17.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "jest-resolve@>=17.0.3 <18.0.0", - "_id": "jest-resolve@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest-resolve", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/jest-resolve-17.0.3.tgz_1479368479354_0.9727858838159591" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-resolve", - "raw": "jest-resolve@^17.0.3", - "rawSpec": "^17.0.3", - "scope": null, - "spec": ">=17.0.3 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-config", - "/jest-resolve-dependencies", - "/jest-runtime", - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-17.0.3.tgz", - "_shasum": "7692a79de2831874375e9d664bc782c29e4da262", - "_shrinkwrap": null, - "_spec": "jest-resolve@^17.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "browser-resolve": "^1.11.2", - "jest-file-exists": "^17.0.0", - "jest-haste-map": "^17.0.3", - "resolve": "^1.1.6" - }, - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "7692a79de2831874375e9d664bc782c29e4da262", - "tarball": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-17.0.3.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - } - ], - "name": "jest-resolve", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-runtime/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/bin/jest-runtime.js b/fundamentals/bug-challenge-es6/node_modules/jest-runtime/bin/jest-runtime.js deleted file mode 100755 index 63fe8d954..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/bin/jest-runtime.js +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env node -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -if (process.env.NODE_ENV == null) { - process.env.NODE_ENV = 'test'; -} - -require('../build/cli').run(); diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/cli/args.js b/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/cli/args.js deleted file mode 100644 index 9b50d6ce5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/cli/args.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - -const usage = 'Usage: $0 [--config=] '; - -const options = { - cache: { - default: true, - description: - 'Whether to use the preprocessor cache. Disable the cache using ' + - '--no-cache.', - type: 'boolean' }, - - config: { - alias: 'c', - description: 'The path to a Jest config file.', - type: 'string' }, - - debug: { - description: 'Print debugging info about your jest config.', - type: 'boolean' }, - - version: { - alias: 'v', - description: 'Print the version and exit', - type: 'boolean' }, - - watchman: { - default: true, - description: - 'Whether to use watchman for file crawling. Disable using ' + - '--no-watchman.', - type: 'boolean' } }; - - - -module.exports = { - options, - usage }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/cli/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/cli/index.js deleted file mode 100644 index 20e327ab7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/cli/index.js +++ /dev/null @@ -1,92 +0,0 @@ -/** -* Copyright (c) 2014, Facebook, Inc. All rights reserved. -* -* This source code is licensed under the BSD-style license found in the -* LICENSE file in the root directory of this source tree. An additional grant -* of patent rights can be found in the PATENTS file in the same directory. -* -* -*/ - -'use strict'; - -const args = require('./args'); -const chalk = require('chalk'); -const os = require('os'); -const path = require('path'); -const yargs = require('yargs'); - -const Console = require('jest-util').Console; -const getPackageRoot = require('jest-util').getPackageRoot; -const warnAboutUnrecognizedOptions = require('jest-util').warnAboutUnrecognizedOptions; -const readConfig = require('jest-config').readConfig; -const Runtime = require('../'); - -const VERSION = require('../../package.json').version; - -function run(cliArgv, cliInfo) { - let argv; - if (cliArgv) { - argv = cliArgv; - } else { - argv = yargs. - usage(args.usage). - options(args.options). - argv; - - warnAboutUnrecognizedOptions(argv, args.options); - } - - if (argv.help) { - yargs.showHelp(); - process.on('exit', () => process.exit(1)); - return; - } - - if (argv.version) { - console.log(`v${ VERSION }\n`); - return; - } - - if (!argv._.length) { - console.log('Please provide a path to a script. (See --help for details)'); - process.on('exit', () => process.exit(1)); - return; - } - - const root = getPackageRoot(); - const testFilePath = path.resolve(process.cwd(), argv._[0]); - - if (argv.debug) { - const info = cliInfo ? ', ' + cliInfo.join(', ') : ''; - console.log(`Using Jest Runtime v${ VERSION }${ info }`); - } - readConfig(argv, root). - then(config => { - // Always disable automocking in scripts. - config = Object.assign({}, config, { - automock: false, - unmockedModulePathPatterns: null }); - - Runtime.createHasteContext(config, { - maxWorkers: os.cpus().length - 1 }). - - then(hasteMap => { - /* $FlowFixMe */ - const TestEnvironment = require(config.testEnvironment); - - const env = new TestEnvironment(config); - env.global.console = new Console(process.stdout, process.stderr); - env.global.jestConfig = config; - - const runtime = new Runtime(config, env, hasteMap.resolver); - runtime.requireModule(testFilePath); - }). - catch(e => { - console.error(chalk.red(e)); - process.on('exit', () => process.exit(1)); - }); - }); -} - -exports.run = run; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/index.js deleted file mode 100644 index e59f75934..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/index.js +++ /dev/null @@ -1,776 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict';var _slicedToArray = function () {function sliceIterator(arr, i) {var _arr = [];var _n = true;var _d = false;var _e = undefined;try {for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {_arr.push(_s.value);if (i && _arr.length === i) break;}} catch (err) {_d = true;_e = err;} finally {try {if (!_n && _i["return"]) _i["return"]();} finally {if (_d) throw _e;}}return _arr;}return function (arr, i) {if (Array.isArray(arr)) {return arr;} else if (Symbol.iterator in Object(arr)) {return sliceIterator(arr, i);} else {throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}(); - - - - - - - - - -const HasteMap = require('jest-haste-map'); -const Resolver = require('jest-resolve'); - -const fs = require('graceful-fs'); -const path = require('path'); -const shouldInstrument = require('./shouldInstrument'); -const transform = require('./transform');var _require = - - - -require('jest-util');const createDirectory = _require.createDirectory,replacePathSepForRegex = _require.replacePathSepForRegex; - - - - - - - - - - - - - - - - - - - - - -const NODE_MODULES = path.sep + 'node_modules' + path.sep; -const SNAPSHOT_EXTENSION = 'snap'; - -const getModuleNameMapper = config => { - if (config.moduleNameMapper.length) { - const moduleNameMapper = Object.create(null); - config.moduleNameMapper.forEach( - map => moduleNameMapper[map[1]] = new RegExp(map[0])); - - return moduleNameMapper; - } - return null; -}; - -const mockParentModule = { - exports: {}, - filename: 'mock.js', - id: 'mockParent' }; - - -const normalizedIDCache = Object.create(null); -const unmockRegExpCache = new WeakMap(); - - - -class Runtime { - - - - - - - - - - - - - - - - - - - - - - constructor( - config, - environment, - resolver) - { - this._moduleRegistry = Object.create(null); - this._internalModuleRegistry = Object.create(null); - this._mockRegistry = Object.create(null); - this._config = config; - this._environment = environment; - this._resolver = resolver; - this._moduleMocker = this._environment.moduleMocker; - - this._currentlyExecutingModulePath = ''; - this._explicitShouldMock = Object.create(null); - this._isCurrentlyExecutingManualMock = null; - this._mockFactories = Object.create(null); - this._mocksPattern = - config.mocksPattern ? new RegExp(config.mocksPattern) : null; - this._shouldAutoMock = config.automock; - this._testRegex = new RegExp(replacePathSepForRegex(config.testRegex)); - this._virtualMocks = Object.create(null); - - this._mockMetaDataCache = Object.create(null); - this._shouldMockModuleCache = Object.create(null); - this._shouldUnmockTransitiveDependenciesCache = Object.create(null); - this._transitiveShouldMock = Object.create(null); - - this._unmockList = unmockRegExpCache.get(config); - if ( - !this._unmockList && - config.automock && - config.unmockedModulePathPatterns) - { - this._unmockList = - new RegExp(config.unmockedModulePathPatterns.join('|')); - unmockRegExpCache.set(config, this._unmockList); - } - - if (config.automock) { - config.setupFiles.forEach(filePath => { - if (filePath && filePath.includes(NODE_MODULES)) { - const moduleID = this._normalizeID(filePath); - this._transitiveShouldMock[moduleID] = false; - } - }); - } - - this.resetModules(); - - if (config.setupFiles.length) { - for (let i = 0; i < config.setupFiles.length; i++) { - this.requireModule(config.setupFiles[i]); - } - } - } - - static shouldInstrument(filename, config) { - return shouldInstrument(filename, config); - } - - static transformSource( - filename, - config, - content, - instrument) - { - return transform.transformSource(filename, config, content, instrument); - } - - static createHasteContext( - config, - options) - - - - { - createDirectory(config.cacheDirectory); - const instance = Runtime.createHasteMap(config, { - console: options.console, - maxWorkers: options.maxWorkers, - resetCache: !config.cache }); - - return instance.build().then( - hasteMap => ({ - hasteFS: hasteMap.hasteFS, - resolver: Runtime.createResolver(config, hasteMap.moduleMap) }), - - error => { - throw error; - }); - - } - - static createHasteMap( - config, - options) - { - const ignorePattern = new RegExp( - [config.cacheDirectory].concat(config.modulePathIgnorePatterns).join('|')); - - - return new HasteMap({ - cacheDirectory: config.cacheDirectory, - console: options && options.console, - extensions: [SNAPSHOT_EXTENSION].concat(config.moduleFileExtensions), - ignorePattern, - maxWorkers: options && options.maxWorkers || 1, - mocksPattern: config.mocksPattern, - name: config.name, - platforms: config.haste.platforms || ['ios', 'android'], - providesModuleNodeModules: config.haste.providesModuleNodeModules, - resetCache: options && options.resetCache, - retainAllFiles: false, - roots: config.testPathDirs, - useWatchman: config.watchman }); - - } - - static createResolver( - config, - moduleMap) - { - return new Resolver(moduleMap, { - browser: config.browser, - defaultPlatform: config.haste.defaultPlatform, - extensions: config.moduleFileExtensions.map(extension => '.' + extension), - hasCoreModules: true, - moduleDirectories: config.moduleDirectories, - moduleNameMapper: getModuleNameMapper(config), - modulePaths: config.modulePaths, - platforms: config.haste.platforms }); - - } - - static runCLI(args, info) { - return require('./cli').run(args, info); - } - - static getCLIOptions() { - return require('./cli/args').options; - } - - requireModule( - from, - moduleName, - options) - { - const moduleID = this._normalizeID(from, moduleName); - let modulePath; - - const moduleRegistry = !options || !options.isInternalModule ? - this._moduleRegistry : - this._internalModuleRegistry; - - // Some old tests rely on this mocking behavior. Ideally we'll change this - // to be more explicit. - const moduleResource = moduleName && this._resolver.getModule(moduleName); - const manualMock = - moduleName && this._resolver.getMockModule(from, moduleName); - if ( - (!options || !options.isInternalModule) && - !moduleResource && - manualMock && - manualMock !== this._isCurrentlyExecutingManualMock && - this._explicitShouldMock[moduleID] !== false) - { - modulePath = manualMock; - } - - if (moduleName && this._resolver.isCoreModule(moduleName)) { - // $FlowFixMe - return require(moduleName); - } - - if (!modulePath) { - modulePath = this._resolveModule(from, moduleName); - } - - if (!moduleRegistry[modulePath]) { - // We must register the pre-allocated module object first so that any - // circular dependencies that may arise while evaluating the module can - // be satisfied. - const localModule = { - exports: {}, - filename: modulePath, - id: modulePath }; - - moduleRegistry[modulePath] = localModule; - if (path.extname(modulePath) === '.json') { - localModule.exports = this._environment.global.JSON.parse( - fs.readFileSync(modulePath, 'utf8')); - - } else if (path.extname(modulePath) === '.node') { - // $FlowFixMe - localModule.exports = require(modulePath); - } else { - this._execModule(localModule, options); - } - } - return moduleRegistry[modulePath].exports; - } - - requireInternalModule(from, to) { - return this.requireModule(from, to, { isInternalModule: true }); - } - - requireMock(from, moduleName) { - const moduleID = this._normalizeID(from, moduleName); - - if (this._mockRegistry[moduleID]) { - return this._mockRegistry[moduleID]; - } - - if (moduleID in this._mockFactories) { - return this._mockRegistry[moduleID] = this._mockFactories[moduleID](); - } - - let manualMock = this._resolver.getMockModule(from, moduleName); - let modulePath; - if (manualMock) { - modulePath = this._resolveModule(from, manualMock); - } else { - modulePath = this._resolveModule(from, moduleName); - - // If the actual module file has a __mocks__ dir sitting immediately next - // to it, look to see if there is a manual mock for this file. - // - // subDir1/MyModule.js - // subDir1/__mocks__/MyModule.js - // subDir2/MyModule.js - // subDir2/__mocks__/MyModule.js - // - // Where some other module does a relative require into each of the - // respective subDir{1,2} directories and expects a manual mock - // corresponding to that particular MyModule.js file. - const moduleDir = path.dirname(modulePath); - const moduleFileName = path.basename(modulePath); - const potentialManualMock = - path.join(moduleDir, '__mocks__', moduleFileName); - if (fs.existsSync(potentialManualMock)) { - manualMock = true; - modulePath = potentialManualMock; - } - } - - if (manualMock) { - const localModule = { - exports: {}, - filename: modulePath, - id: modulePath }; - - this._execModule(localModule); - this._mockRegistry[moduleID] = localModule.exports; - } else { - // Look for a real module to generate an automock from - this._mockRegistry[moduleID] = this._generateMock(from, moduleName); - } - - return this._mockRegistry[moduleID]; - } - - requireModuleOrMock(from, moduleName) { - if (this._shouldMock(from, moduleName)) { - return this.requireMock(from, moduleName); - } else { - return this.requireModule(from, moduleName); - } - } - - resetModules() { - this._mockRegistry = Object.create(null); - this._moduleRegistry = Object.create(null); - - if (this._environment && this._environment.global) { - const envGlobal = this._environment.global; - Object.keys(envGlobal).forEach(key => { - const globalMock = envGlobal[key]; - if ( - typeof globalMock === 'object' && globalMock !== null || - typeof globalMock === 'function') - { - globalMock._isMockFunction && globalMock.mockClear(); - } - }); - - if (envGlobal.mockClearTimers) { - envGlobal.mockClearTimers(); - } - } - } - - getAllCoverageInfo() { - return this._environment.global.__coverage__; - } - - setMock( - from, - moduleName, - mockFactory, - options) - { - if (options && options.virtual) { - const mockPath = this._getVirtualMockPath(from, moduleName); - this._virtualMocks[mockPath] = true; - } - const moduleID = this._normalizeID(from, moduleName); - this._explicitShouldMock[moduleID] = true; - this._mockFactories[moduleID] = mockFactory; - } - - resetAllMocks() { - this._moduleMocker.resetAllMocks(); - } - - _resolveModule(from, to) { - return to ? this._resolver.resolveModule(from, to) : from; - } - - _execModule(localModule, options) { - // If the environment was disposed, prevent this module from being executed. - if (!this._environment.global) { - return; - } - - const isInternalModule = !!(options && options.isInternalModule); - const filename = localModule.filename; - const lastExecutingModulePath = this._currentlyExecutingModulePath; - this._currentlyExecutingModulePath = filename; - const origCurrExecutingManualMock = this._isCurrentlyExecutingManualMock; - this._isCurrentlyExecutingManualMock = filename; - - const dirname = path.dirname(filename); - localModule.children = []; - localModule.parent = mockParentModule; - localModule.paths = this._resolver.getModulePaths(dirname); - localModule.require = this._createRequireImplementation(filename, options); - - const script = transform(filename, this._config, { isInternalModule }); - - const wrapper = this._runScript(script, filename); - wrapper.call( - localModule.exports, // module context - localModule, // module object - localModule.exports, // module exports - localModule.require, // require implementation - dirname, // __dirname - filename, // __filename - this._environment.global, // global object - this._createRuntimeFor(filename)); - - - this._isCurrentlyExecutingManualMock = origCurrExecutingManualMock; - this._currentlyExecutingModulePath = lastExecutingModulePath; - } - - _runScript(script, filename) { - try { - return this._environment.runScript(script)[ - transform.EVAL_RESULT_VARIABLE]; - - } catch (e) { - const config = this._config; - const relative = filePath => path.relative(config.rootDir, filePath); - if (e.constructor.name === 'SyntaxError') { - const maybePreprocessor = config.transform && - config.transform.length && - config.transform.find( - (_ref) => {var _ref2 = _slicedToArray(_ref, 2);let regex = _ref2[0],_ = _ref2[1];return new RegExp(regex).test(filename);}); - - const preprocessorInfo = maybePreprocessor ? - `Preprocessor for ${ maybePreprocessor[0] }: ` + - `${ relative(maybePreprocessor[1]) }` : - `No preprocessor specified, consider installing 'babel-jest'`; - const babelInfo = config.usesBabelJest ? - `Make sure your '.babelrc' is set up correctly, ` + - `for example it should include the 'es2015' preset.\n` : - ''; - /* eslint-disable max-len */ - throw new SyntaxError( - `${ e.message } in file '${ relative(filename) }'.\n\n` + - `Make sure your transform config is set up correctly and ensure ` + - `your 'transformIgnorePatterns' configuration is correct: http://facebook.github.io/jest/docs/configuration.html#transformignorepatterns-array-string\n` + - 'If you are currently setting up Jest or modifying your transform config, try `jest --no-cache`.\n' + - `${ preprocessorInfo }.\n${ babelInfo }`); - - /* eslint-enable max-len */ - } - throw e; - } - } - - _generateMock(from, moduleName) { - const modulePath = this._resolveModule(from, moduleName); - - if (!(modulePath in this._mockMetaDataCache)) { - // This allows us to handle circular dependencies while generating an - // automock - this._mockMetaDataCache[modulePath] = - this._moduleMocker.getMetadata({}); - - // In order to avoid it being possible for automocking to potentially - // cause side-effects within the module environment, we need to execute - // the module in isolation. This could cause issues if the module being - // mocked has calls into side-effectful APIs on another module. - const origMockRegistry = this._mockRegistry; - const origModuleRegistry = this._moduleRegistry; - this._mockRegistry = Object.create(null); - this._moduleRegistry = Object.create(null); - - const moduleExports = this.requireModule(from, moduleName); - - // Restore the "real" module/mock registries - this._mockRegistry = origMockRegistry; - this._moduleRegistry = origModuleRegistry; - - const mockMetadata = this._moduleMocker.getMetadata(moduleExports); - if (mockMetadata == null) { - throw new Error( - `Failed to get mock metadata: ${ modulePath }\n\n` + - `See: http://facebook.github.io/jest/docs/manual-mocks.html#content`); - - } - this._mockMetaDataCache[modulePath] = mockMetadata; - } - return this._moduleMocker.generateFromMetadata( - this._mockMetaDataCache[modulePath]); - - } - - _normalizeID(from, moduleName) { - if (!moduleName) { - moduleName = ''; - } - - const key = from + path.delimiter + moduleName; - if (normalizedIDCache[key]) { - return normalizedIDCache[key]; - } - - let moduleType; - let mockPath = null; - let absolutePath = null; - - if (this._resolver.isCoreModule(moduleName)) { - moduleType = 'node'; - absolutePath = moduleName; - } else { - moduleType = 'user'; - if ( - !this._resolver.getModule(moduleName) && - !this._resolver.getMockModule(from, moduleName)) - { - if (moduleName) { - const virtualMockPath = this._getVirtualMockPath(from, moduleName); - if (virtualMockPath in this._virtualMocks) { - absolutePath = virtualMockPath; - } - } - - if (absolutePath === null) { - absolutePath = this._resolveModule(from, moduleName); - } - } - - if (absolutePath === null) { - const moduleResource = this._resolver.getModule(moduleName); - if (moduleResource) { - absolutePath = moduleResource; - } - } - - if (mockPath === null) { - const mockResource = this._resolver.getMockModule(from, moduleName); - if (mockResource) { - mockPath = mockResource; - } - } - } - - const sep = path.delimiter; - const id = moduleType + sep + (absolutePath || '') + sep + (mockPath || ''); - return normalizedIDCache[key] = id; - } - - _getVirtualMockPath(from, moduleName) { - if (moduleName[0] !== '.' && moduleName[0] !== '/') { - return moduleName; - } - return path.normalize(path.dirname(from) + '/' + moduleName); - } - - _shouldMock(from, moduleName) { - const mockPath = this._getVirtualMockPath(from, moduleName); - if (mockPath in this._virtualMocks) { - return true; - } - - const explicitShouldMock = this._explicitShouldMock; - const moduleID = this._normalizeID(from, moduleName); - const key = from + path.delimiter + moduleID; - - if (moduleID in explicitShouldMock) { - return explicitShouldMock[moduleID]; - } - - if ( - !this._shouldAutoMock || - this._resolver.isCoreModule(moduleName) || - this._shouldUnmockTransitiveDependenciesCache[key]) - { - return false; - } - - if (moduleID in this._shouldMockModuleCache) { - return this._shouldMockModuleCache[moduleID]; - } - - const manualMock = this._resolver.getMockModule(from, moduleName); - let modulePath; - try { - modulePath = this._resolveModule(from, moduleName); - } catch (e) { - if (manualMock) { - this._shouldMockModuleCache[moduleID] = true; - return true; - } - throw e; - } - - if (this._unmockList && this._unmockList.test(modulePath)) { - this._shouldMockModuleCache[moduleID] = false; - return false; - } - - // transitive unmocking for package managers that store flat packages (npm3) - const currentModuleID = this._normalizeID(from); - if ( - this._transitiveShouldMock[currentModuleID] === false || - from.includes(NODE_MODULES) && - modulePath.includes(NODE_MODULES) && ( - - this._unmockList && this._unmockList.test(from) || - explicitShouldMock[currentModuleID] === false)) - - - { - this._transitiveShouldMock[moduleID] = false; - this._shouldUnmockTransitiveDependenciesCache[key] = true; - return false; - } - - return this._shouldMockModuleCache[moduleID] = true; - } - - _createRequireImplementation( - from, - options) - { - const moduleRequire = options && options.isInternalModule ? - moduleName => this.requireInternalModule(from, moduleName) : - this.requireModuleOrMock.bind(this, from); - moduleRequire.cache = Object.create(null); - moduleRequire.extensions = Object.create(null); - moduleRequire.requireActual = this.requireModule.bind(this, from); - moduleRequire.requireMock = this.requireMock.bind(this, from); - moduleRequire.resolve = moduleName => this._resolveModule(from, moduleName); - return moduleRequire; - } - - _createRuntimeFor(from) { - const disableAutomock = () => { - this._shouldAutoMock = false; - return runtime; - }; - const enableAutomock = () => { - this._shouldAutoMock = true; - return runtime; - }; - const unmock = moduleName => { - const moduleID = this._normalizeID(from, moduleName); - this._explicitShouldMock[moduleID] = false; - return runtime; - }; - const deepUnmock = moduleName => { - const moduleID = this._normalizeID(from, moduleName); - this._explicitShouldMock[moduleID] = false; - this._transitiveShouldMock[moduleID] = false; - return runtime; - }; - const mock = ( - moduleName, - mockFactory, - options) => - { - if (mockFactory !== undefined) { - return setMockFactory(moduleName, mockFactory, options); - } - - const moduleID = this._normalizeID(from, moduleName); - this._explicitShouldMock[moduleID] = true; - return runtime; - }; - const setMockFactory = (moduleName, mockFactory, options) => { - this.setMock(from, moduleName, mockFactory, options); - return runtime; - }; - const resetAllMocks = () => { - this.resetAllMocks(); - return runtime; - }; - const useFakeTimers = () => { - this._environment.fakeTimers.useFakeTimers(); - return runtime; - }; - const useRealTimers = () => { - this._environment.fakeTimers.useRealTimers(); - return runtime; - }; - const resetModules = () => { - this.resetModules(); - return runtime; - }; - - const runtime = { - addMatchers: - matchers => - this._environment.global.jasmine.addMatchers(matchers), - - autoMockOff: disableAutomock, - autoMockOn: enableAutomock, - clearAllTimers: () => this._environment.fakeTimers.clearAllTimers(), - deepUnmock, - disableAutomock, - doMock: mock, - dontMock: unmock, - enableAutomock, - fn: impl => { - const fn = this._moduleMocker.getMockFunction(); - if (impl) { - return fn.mockImplementation(impl); - } - return fn; - }, - genMockFn: this._moduleMocker.getMockFunction.bind(this._moduleMocker), - genMockFromModule: - moduleName => this._generateMock(from, moduleName), - genMockFunction: - this._moduleMocker.getMockFunction.bind(this._moduleMocker), - isMockFunction: this._moduleMocker.isMockFunction, - - mock, - resetAllMocks, - resetModuleRegistry: resetModules, - resetModules, - - runAllImmediates: () => this._environment.fakeTimers.runAllImmediates(), - runAllTicks: () => this._environment.fakeTimers.runAllTicks(), - runAllTimers: () => this._environment.fakeTimers.runAllTimers(), - runOnlyPendingTimers: () => - this._environment.fakeTimers.runOnlyPendingTimers(), - runTimersToTime: msToRun => - this._environment.fakeTimers.runTimersToTime(msToRun), - - setMock: (moduleName, mock) => - setMockFactory(moduleName, () => mock), - - unmock, - - useFakeTimers, - useRealTimers }; - - return runtime; - }} - - -module.exports = Runtime; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/shouldInstrument.js b/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/shouldInstrument.js deleted file mode 100644 index c9bb5bb6a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/shouldInstrument.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - -const multimatch = require('multimatch'); -const path = require('path'); - -const shouldInstrument = (filename, config) => { - if (!config.collectCoverage) { - return false; - } - - if (config.testRegex && filename.match(config.testRegex)) { - return false; - } - - if ( - // This configuration field contains an object in the form of: - // {'path/to/file.js': true} - config.collectCoverageOnlyFrom && - !config.collectCoverageOnlyFrom[filename]) - { - return false; - } - - if ( - !config.collectCoverageOnlyFrom && // still cover if `only` is specified - config.collectCoverageFrom && - !multimatch( - [path.relative(config.rootDir, filename)], - config.collectCoverageFrom). - length) - { - return false; - } - - - if ( - config.coveragePathIgnorePatterns && - config.coveragePathIgnorePatterns.some(pattern => filename.match(pattern))) - { - return false; - } - - if (config.mocksPattern && filename.match(config.mocksPattern)) { - return false; - } - - return true; -}; - - -module.exports = shouldInstrument; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/transform.js b/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/transform.js deleted file mode 100644 index 5ddc65086..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/build/transform.js +++ /dev/null @@ -1,337 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - -const createDirectory = require('jest-util').createDirectory; -const crypto = require('crypto'); -const fileExists = require('jest-file-exists'); -const fs = require('graceful-fs'); -const getCacheFilePath = require('jest-haste-map').getCacheFilePath; -const path = require('path'); -const shouldInstrument = require('./shouldInstrument'); -const stableStringify = require('json-stable-stringify'); -const vm = require('vm'); - -const VERSION = require('../package.json').version; - - - - - -const EVAL_RESULT_VARIABLE = 'Object.'; - -const cache = new Map(); -const configToJsonMap = new Map(); -// Cache regular expressions to test whether the file needs to be preprocessed -const ignoreCache = new WeakMap(); - -const removeFile = path => { - try { - fs.unlinkSync(path); - } catch (e) {} -}; - -const getCacheKey = ( -fileData, -filename, -config, -instrument) => -{ - if (!configToJsonMap.has(config)) { - // We only need this set of config options that can likely influence - // cached output instead of all config options. - configToJsonMap.set(config, stableStringify({ - cacheDirectory: config.cacheDirectory, - collectCoverage: config.collectCoverage, - collectCoverageFrom: config.collectCoverageFrom, - collectCoverageOnlyFrom: config.collectCoverageOnlyFrom, - coveragePathIgnorePatterns: config.coveragePathIgnorePatterns, - haste: config.haste, - mocksPattern: config.mocksPattern, - moduleFileExtensions: config.moduleFileExtensions, - moduleNameMapper: config.moduleNameMapper, - rootDir: config.rootDir, - testPathDirs: config.testPathDirs, - testRegex: config.testRegex, - transformIgnorePatterns: config.transformIgnorePatterns })); - - } - const configString = configToJsonMap.get(config) || ''; - const transformer = getTransformer(filename, config); - - if (transformer && typeof transformer.getCacheKey === 'function') { - return transformer.getCacheKey( - fileData, - filename, - configString, - { - instrument, - watch: config.watch }); - - - } else { - return crypto.createHash('md5'). - update(fileData). - update(configString). - update(instrument ? 'instrument' : ''). - digest('hex'); - } -}; - -const writeCacheFile = (cachePath, fileData) => { - try { - fs.writeFileSync(cachePath, fileData, 'utf8'); - } catch (e) { - e.message = 'jest: failed to cache transform results in: ' + cachePath; - removeFile(cachePath); - throw e; - } -}; - -const wrap = content => -'({"' + EVAL_RESULT_VARIABLE + -'":function(module,exports,require,__dirname,__filename,global,jest){' + -content + -'\n}});'; - -const readCacheFile = (filename, cachePath) => { - if (!fileExists(cachePath)) { - return null; - } - - let fileData; - try { - fileData = fs.readFileSync(cachePath, 'utf8'); - } catch (e) { - e.message = 'jest: failed to read cache file: ' + cachePath; - removeFile(cachePath); - throw e; - } - - if (fileData == null) { - // We must have somehow created the file but failed to write to it, - // let's delete it and retry. - removeFile(cachePath); - } - return fileData; -}; - -const getScriptCacheKey = (filename, config, instrument) => { - const mtime = fs.statSync(filename).mtime; - return filename + '_' + mtime.getTime() + ( - instrument ? '_instrumented' : ''); -}; - -const shouldTransform = (filename, config) => { - if (!ignoreCache.has(config)) { - if (!config.transformIgnorePatterns) { - ignoreCache.set(config, null); - } else { - ignoreCache.set( - config, - new RegExp(config.transformIgnorePatterns.join('|'))); - - } - } - - const ignoreRegexp = ignoreCache.get(config); - const isIgnored = ignoreRegexp ? ignoreRegexp.test(filename) : false; - return ( - !!config.transform && - !!config.transform.length && ( - - !config.transformIgnorePatterns.length || - !isIgnored)); - - -}; - -const getFileCachePath = ( -filename, -config, -content, -instrument) => -{ - const baseCacheDir = getCacheFilePath( - config.cacheDirectory, - 'jest-transform-cache-' + config.name, - VERSION); - - const cacheKey = getCacheKey(content, filename, config, instrument); - // Create sub folders based on the cacheKey to avoid creating one - // directory with many files. - const cacheDir = path.join(baseCacheDir, cacheKey[0] + cacheKey[1]); - const cachePath = path.join( - cacheDir, - path.basename(filename, path.extname(filename)) + '_' + cacheKey); - - createDirectory(cacheDir); - - return cachePath; -}; - -const transformCache = -new WeakMap(); - -const getTransformer = (filename, config) => { - if ( - transformCache.has(config) && - transformCache.get(config).get(filename)) - { - return transformCache.get(config).get(filename); - } else { - let transform; - if (!config.transform || !config.transform.length) { - transform = null; - } else { - let transformPath = null; - for (let i = 0; i < config.transform.length; i++) { - if (new RegExp(config.transform[i][0]).test(filename)) { - transformPath = config.transform[i][1]; - break; - } - } - if (transformPath) { - // $FlowFixMe - transform = require(transformPath); - if (typeof transform.process !== 'function') { - throw new TypeError( - 'Jest: a transform must export a `process` function.'); - - } - } - } - if (!transformCache.has(config)) { - transformCache.set(config, new Map()); - } - - transformCache.get(config).set(filename, transform); - return transform; - } -}; - -const stripShebang = content => { - // If the file data starts with a shebang remove it. Leaves the empty line - // to keep stack trace line numbers correct. - if (content.startsWith('#!')) { - return content.replace(/^#!.*/, ''); - } else { - return content; - } -}; - -const instrumentFile = ( -content, -filename, -config) => -{ - // NOTE: Keeping these requires inside this function reduces a single run - // time by 2sec if not running in `--coverage` mode - const babel = require('babel-core'); - const babelPluginIstanbul = require('babel-plugin-istanbul').default; - - return babel.transform(content, { - auxiliaryCommentBefore: ' istanbul ignore next ', - babelrc: false, - filename, - plugins: [ - [ - babelPluginIstanbul, - { - cwd: config.rootDir, // files outside `cwd` will not be instrumented - exclude: [] }]], - - - - retainLines: true }). - code; -}; - -const transformSource = ( -filename, -config, -content, -instrument) => -{ - const transform = getTransformer(filename, config); - const cacheFilePath = getFileCachePath(filename, config, content, instrument); - // Ignore cache if `config.cache` is set (--no-cache) - let result = config.cache ? readCacheFile(filename, cacheFilePath) : null; - - if (result) { - return result; - } - - result = content; - - if (transform && shouldTransform(filename, config)) { - result = transform.process(result, filename, config, { - instrument, - watch: config.watch }); - - } - - // That means that the transform has a custom instrumentation - // logic and will handle it based on `config.collectCoverage` option - const transformWillInstrument = transform && transform.canInstrument; - - if (!transformWillInstrument && instrument) { - result = instrumentFile(result, filename, config); - } - - writeCacheFile(cacheFilePath, result); - return result; -}; - -const transformAndBuildScript = ( -filename, -config, -options, -instrument) => -{ - const isInternalModule = !!(options && options.isInternalModule); - const content = stripShebang(fs.readFileSync(filename, 'utf8')); - let wrappedResult; - - if ( - !isInternalModule && ( - shouldTransform(filename, config) || instrument)) - { - wrappedResult = - wrap(transformSource(filename, config, content, instrument)); - } else { - wrappedResult = wrap(content); - } - - return new vm.Script(wrappedResult, { displayErrors: true, filename }); -}; - -module.exports = ( -filename, -config, -options) => -{ - const instrument = shouldInstrument(filename, config); - const scriptCacheKey = getScriptCacheKey(filename, config, instrument); - let script = cache.get(scriptCacheKey); - if (script) { - return script; - } else { - script = transformAndBuildScript(filename, config, options, instrument); - cache.set(scriptCacheKey, script); - return script; - } -}; - -module.exports.EVAL_RESULT_VARIABLE = EVAL_RESULT_VARIABLE; -module.exports.transformSource = transformSource; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-runtime/package.json deleted file mode 100644 index 3416e990e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-runtime/package.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "_args": [ - [ - "jest-runtime@^17.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "jest-runtime@>=17.0.3 <18.0.0", - "_id": "jest-runtime@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest-runtime", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/jest-runtime-17.0.3.tgz_1479368481681_0.14977502590045333" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-runtime", - "raw": "jest-runtime@^17.0.3", - "rawSpec": "^17.0.3", - "scope": null, - "spec": ">=17.0.3 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-17.0.3.tgz", - "_shasum": "eff4055fe8c3e17c95ed1aaaf5f719c420b86b1f", - "_shrinkwrap": null, - "_spec": "jest-runtime@^17.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "bin": { - "jest-runtime": "./bin/jest-runtime.js" - }, - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "babel-core": "^6.0.0", - "babel-jest": "^17.0.2", - "babel-plugin-istanbul": "^2.0.0", - "chalk": "^1.1.3", - "graceful-fs": "^4.1.6", - "jest-config": "^17.0.3", - "jest-file-exists": "^17.0.0", - "jest-haste-map": "^17.0.3", - "jest-mock": "^17.0.2", - "jest-resolve": "^17.0.3", - "jest-snapshot": "^17.0.3", - "jest-util": "^17.0.2", - "json-stable-stringify": "^1.0.0", - "multimatch": "^2.1.0", - "yargs": "^6.3.0" - }, - "devDependencies": { - "jest-config": "^17.0.3", - "jest-environment-jsdom": "^17.0.2", - "jest-environment-node": "^17.0.2" - }, - "directories": {}, - "dist": { - "shasum": "eff4055fe8c3e17c95ed1aaaf5f719c420b86b1f", - "tarball": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-17.0.3.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - } - ], - "name": "jest-runtime", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/State.js b/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/State.js deleted file mode 100644 index d6a59a344..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/State.js +++ /dev/null @@ -1,176 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict';var _require = - - - - - - - - - - - -require('./utils');const saveSnapshotFile = _require.saveSnapshotFile,getSnapshotData = _require.getSnapshotData,getSnapshotPath = _require.getSnapshotPath,keyToTestName = _require.keyToTestName,serialize = _require.serialize,testNameToKey = _require.testNameToKey,unescape = _require.unescape; -const fileExists = require('jest-file-exists'); -const fs = require('fs'); - -class SnapshotState { - - - - - - - - - - - - - - - - constructor( - testPath, - update, - snapshotPath, - expand) - { - this._dirty = false; - this._snapshotPath = snapshotPath || getSnapshotPath(testPath); - this._snapshotData = getSnapshotData(this._snapshotPath); - this._uncheckedKeys = new Set(Object.keys(this._snapshotData)); - this._counters = new Map(); - this._index = 0; - this.expand = expand || false; - this.added = 0; - this.matched = 0; - this.unmatched = 0; - this.update = update; - this.updated = 0; - this.skippedTests = new Set(); - this.failedTests = new Set(); - } - - markSnapshotsAsCheckedForTest(testName) { - this._uncheckedKeys.forEach(uncheckedKey => { - if (keyToTestName(uncheckedKey) === testName) { - this._uncheckedKeys.delete(uncheckedKey); - } - }); - } - - _addSnapshot(key, receivedSerialized) { - this._dirty = true; - this._snapshotData[key] = receivedSerialized; - } - - save(update) { - const status = { - deleted: false, - saved: false }; - - - const isEmpty = Object.keys(this._snapshotData).length === 0; - - if ((this._dirty || this._uncheckedKeys.size) && !isEmpty) { - saveSnapshotFile(this._snapshotData, this._snapshotPath); - status.saved = true; - } else if (isEmpty && fileExists(this._snapshotPath)) { - if (update) { - fs.unlinkSync(this._snapshotPath); - } - status.deleted = true; - } - - return status; - } - - getUncheckedCount() { - return this._uncheckedKeys.size || 0; - } - - removeUncheckedKeys() { - if (this._uncheckedKeys.size) { - this._dirty = true; - this._uncheckedKeys.forEach(key => delete this._snapshotData[key]); - this._uncheckedKeys.clear(); - } - } - - match(testName, received, key) { - this._counters.set(testName, (this._counters.get(testName) || 0) + 1); - const count = Number(this._counters.get(testName)); - - if (!key) { - key = testNameToKey(testName, count); - } - - this._uncheckedKeys.delete(key); - - const receivedSerialized = serialize(received); - const receivedUnescaped = unescape(receivedSerialized); - const expected = this._snapshotData[key]; - const pass = expected === receivedUnescaped; - const hasSnapshot = this._snapshotData[key] !== undefined; - - if (pass) { - // Executing a snapshot file as JavaScript and writing the strings back - // when other snapshots have changed loses the proper escaping for some - // characters. Since we check every snapshot in every test, use the newly - // generated formatted string. - // Note that this is only relevant when a snapshot is added and the dirty - // flag is set. - this._snapshotData[key] = receivedSerialized; - } - - if ( - !fileExists(this._snapshotPath) || // there's no snapshot file - hasSnapshot && this.update || // there is a file, but we're updating - !hasSnapshot // there is a file, but it doesn't have this snaphsot - ) { - if (this.update) { - if (!pass) { - if (hasSnapshot) { - this.updated++; - } else { - this.added++; - } - this._addSnapshot(key, receivedSerialized); - } else { - this.matched++; - } - } else { - this._addSnapshot(key, receivedSerialized); - this.added++; - } - - return { pass: true }; - } else { - if (!pass) { - this.unmatched++; - return { - actual: receivedUnescaped, - count, - expected, - pass: false }; - - } else { - this.matched++; - return { pass: true }; - } - } - }} - - -module.exports = SnapshotState; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/index.js deleted file mode 100644 index dec1cb2b6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/index.js +++ /dev/null @@ -1,156 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - -const diff = require('jest-diff'); -const fileExists = require('jest-file-exists'); -const fs = require('fs'); -const path = require('path'); -const SnapshotState = require('./State');var _require = -require('./plugins');const getPlugins = _require.getPlugins,addPlugins = _require.addPlugins;var _require2 = - - - - - - -require('jest-matcher-utils');const EXPECTED_COLOR = _require2.EXPECTED_COLOR,ensureNoExpected = _require2.ensureNoExpected,matcherHint = _require2.matcherHint,RECEIVED_COLOR = _require2.RECEIVED_COLOR;var _require3 = -require('./utils');const SNAPSHOT_EXTENSION = _require3.SNAPSHOT_EXTENSION; - -const cleanup = (hasteFS, update) => { - const pattern = '\\.' + SNAPSHOT_EXTENSION + '$'; - const files = hasteFS.matchFiles(pattern); - const filesRemoved = files. - filter(snapshotFile => !fileExists( - path.resolve( - path.dirname(snapshotFile), - '..', - path.basename(snapshotFile, '.' + SNAPSHOT_EXTENSION)), - - hasteFS)). - - map(snapshotFile => { - if (update) { - fs.unlinkSync(snapshotFile); - } - }). - length; - - return { - filesRemoved }; - -}; - -let snapshotState; - -const initializeSnapshotState = ( -testFile, -update, -testPath, -expand) => -new SnapshotState(testFile, update, testPath, expand); - -const getSnapshotState = () => snapshotState; - -const toMatchSnapshot = function (received, expected) { - this.dontThrow();const - - currentTestName = this.currentTestName,isNot = this.isNot,snapshotState = this.snapshotState; - - if (isNot) { - throw new Error( - 'Jest: `.not` cannot be used with `.toMatchSnapshot()`.'); - - } - - ensureNoExpected(expected, '.toMatchSnapshot'); - - if (!snapshotState) { - throw new Error('Jest: snapshot state must be initialized.'); - } - - const result = snapshotState.match(currentTestName, received);const - pass = result.pass; - - if (pass) { - return { message: '', pass: true }; - } else {const - count = result.count,expected = result.expected,actual = result.actual; - - - const expectedString = expected.trim(); - const actualString = actual.trim(); - const diffMessage = diff( - expectedString, - actualString, - { - aAnnotation: 'Snapshot', - bAnnotation: 'Received', - expand: snapshotState.expand }); - - - - const message = - () => matcherHint('.toMatchSnapshot', 'value', '') + '\n\n' + - `${ RECEIVED_COLOR('Received value') } does not match ` + - `${ EXPECTED_COLOR('stored snapshot ' + count) }.\n\n` + ( - diffMessage || - RECEIVED_COLOR('- ' + expectedString) + '\n' + - EXPECTED_COLOR('+ ' + actualString)); - - - return { message, pass: false }; - } -}; - -const toThrowErrorMatchingSnapshot = function (received, expected) { - this.dontThrow();const - isNot = this.isNot; - - if (isNot) { - throw new Error( - 'Jest: `.not` cannot be used with `.toThrowErrorMatchingSnapshot()`.'); - - } - - ensureNoExpected(expected, '.toThrowErrorMatchingSnapshot'); - - let error; - - try { - received(); - } catch (e) { - error = e; - } - - if (error === undefined) { - throw new Error( - matcherHint('.toThrowErrorMatchingSnapshot', '() => {}', '') + '\n\n' + - `Expected the function to throw an error.\n` + - `But it didn't throw anything.`); - - } - - return toMatchSnapshot.call(this, error.message); -}; - -module.exports = { - EXTENSION: SNAPSHOT_EXTENSION, - SnapshotState, - addPlugins, - cleanup, - getPlugins, - getSnapshotState, - initializeSnapshotState, - toMatchSnapshot, - toThrowErrorMatchingSnapshot }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/plugins.js b/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/plugins.js deleted file mode 100644 index 60a83b15c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/plugins.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - -const ReactElementPlugin = require('pretty-format/plugins/ReactElement'); -const ReactTestComponentPlugin = require('pretty-format/plugins/ReactTestComponent'); - -let PLUGINS = [ReactElementPlugin, ReactTestComponentPlugin]; - -exports.addPlugins = (plugins -// $FlowFixMe -) => PLUGINS = plugins.map(plugin => require(plugin)).concat(PLUGINS); - -exports.getPlugins = () => PLUGINS; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/utils.js b/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/utils.js deleted file mode 100644 index ae4d80ce7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/build/utils.js +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - -const createDirectory = require('jest-util').createDirectory; -const fileExists = require('jest-file-exists'); -const path = require('path'); -const prettyFormat = require('pretty-format'); -const fs = require('fs'); -const naturalCompare = require('natural-compare'); -const getPlugins = require('./plugins').getPlugins; - -const SNAPSHOT_EXTENSION = 'snap'; - -const testNameToKey = (testName, count) => -testName + ' ' + count; - -const keyToTestName = key => { - if (!/ \d+$/.test(key)) { - throw new Error('Snapshot keys must end with a number.'); - } - - return key.replace(/ \d+$/, ''); -}; - -const getSnapshotPath = testPath => path.join( -path.join(path.dirname(testPath), '__snapshots__'), -path.basename(testPath) + '.' + SNAPSHOT_EXTENSION); - - -const getSnapshotData = snapshotPath => { - const data = Object.create(null); - - if (fileExists(snapshotPath)) { - try { - delete require.cache[require.resolve(snapshotPath)]; - /* eslint-disable no-useless-call */ - Object.assign(data, require.call(null, snapshotPath)); - /* eslint-enable no-useless-call */ - } catch (e) {} - } - - return data; -}; - -// Extra line breaks at the beginning and at the end of the snapshot are useful -// to make the content of the snapshot easier to read -const addExtraLineBreaks = -string => string.includes('\n') ? `\n${ string }\n` : string; - -const serialize = data => { - return addExtraLineBreaks(prettyFormat(data, { - plugins: getPlugins(), - printFunctionName: false })); - -}; - -const escape = string => string.replace(/(\`|\${)/g, '\\$1'); -const unescape = string => string.replace(/\\(\"|\\|\'|\${)/g, '$1'); - -const ensureDirectoryExists = filePath => { - try { - createDirectory(path.join(path.dirname(filePath))); - } catch (e) {} -}; - -const normalizeNewlines = -string => string.replace(/\r\n/g, '\n'); - -const saveSnapshotFile = ( -snapshotData, -snapshotPath) => -{ - const snapshots = Object.keys(snapshotData).sort(naturalCompare). - map(key => - 'exports[`' + escape(key) + '`] = `' + - normalizeNewlines(escape(snapshotData[key])) + '`;'); - - - ensureDirectoryExists(snapshotPath); - fs.writeFileSync(snapshotPath, snapshots.join('\n\n') + '\n'); -}; - -module.exports = { - SNAPSHOT_EXTENSION, - ensureDirectoryExists, - escape, - getSnapshotData, - getSnapshotPath, - keyToTestName, - saveSnapshotFile, - serialize, - testNameToKey, - unescape }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/package.json deleted file mode 100644 index 1c2f77e7e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-snapshot/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_args": [ - [ - "jest-snapshot@^17.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "jest-snapshot@>=17.0.3 <18.0.0", - "_id": "jest-snapshot@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest-snapshot", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/jest-snapshot-17.0.3.tgz_1479368481398_0.7471310773398727" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-snapshot", - "raw": "jest-snapshot@^17.0.3", - "rawSpec": "^17.0.3", - "scope": null, - "spec": ">=17.0.3 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-jasmine2", - "/jest-runtime", - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-17.0.3.tgz", - "_shasum": "c8199db4ccbd5515cfecc8e800ab076bdda7abc0", - "_shrinkwrap": null, - "_spec": "jest-snapshot@^17.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "jest-diff": "^17.0.3", - "jest-file-exists": "^17.0.0", - "jest-matcher-utils": "^17.0.3", - "jest-util": "^17.0.2", - "natural-compare": "^1.4.0", - "pretty-format": "~4.2.1" - }, - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "c8199db4ccbd5515cfecc8e800ab076bdda7abc0", - "tarball": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-17.0.3.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - } - ], - "name": "jest-snapshot", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../jest-cli/bin/jest.js" - }, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-util/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest-util/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-util/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/Console.js b/fundamentals/bug-challenge-es6/node_modules/jest-util/build/Console.js deleted file mode 100644 index 3d1fe9120..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/Console.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -/* global stream$Writable */ -'use strict'; - - - -const Console = require('console').Console; - -const clearLine = require('./clearLine'); -const format = require('util').format; - - - -class CustomConsole extends Console { - - - - - constructor( - stdout, - stderr, - formatBuffer) - { - super(stdout, stderr); - this._formatBuffer = formatBuffer || ((type, message) => message); - } - - _log(type, message) { - clearLine(this._stdout); - super.log(this._formatBuffer(type, message)); - } - - log() { - this._log('log', format.apply(null, arguments)); - } - - info() { - this._log('info', format.apply(null, arguments)); - } - - warn() { - this._log('warn', format.apply(null, arguments)); - } - - error() { - this._log('error', format.apply(null, arguments)); - } - - getBuffer() { - return null; - }} - - -module.exports = CustomConsole; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/FakeTimers.js b/fundamentals/bug-challenge-es6/node_modules/jest-util/build/FakeTimers.js deleted file mode 100644 index eca5fcc57..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/FakeTimers.js +++ /dev/null @@ -1,519 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict';var _require = - - - - - -require('./messages');const formatStackTrace = _require.formatStackTrace; - - - - - - - - - - - - - - - - - - - - - - - - - - - -const MS_IN_A_YEAR = 31536000000; - -class FakeTimers { - - - - - - - - - - - - - - - - constructor( - global, - moduleMocker, - config, - maxLoops) - { - - this._global = global; - this._config = config; - this._maxLoops = maxLoops || 100000; - this._uuidCounter = 1; - - this.reset(); - - // Store original timer APIs for future reference - this._timerAPIs = { - clearImmediate: global.clearImmediate, - clearInterval: global.clearInterval, - clearTimeout: global.clearTimeout, - setImmediate: global.setImmediate, - setInterval: global.setInterval, - setTimeout: global.setTimeout }; - - - const fn = impl => moduleMocker.getMockFn().mockImpl(impl); - - this._fakeTimerAPIs = { - clearImmediate: fn(this._fakeClearImmediate.bind(this)), - clearInterval: fn(this._fakeClearTimer.bind(this)), - clearTimeout: fn(this._fakeClearTimer.bind(this)), - setImmediate: fn(this._fakeSetImmediate.bind(this)), - setInterval: fn(this._fakeSetInterval.bind(this)), - setTimeout: fn(this._fakeSetTimeout.bind(this)) }; - - - // If there's a process.nextTick on the global, mock it out - // (only applicable to node/node-emulating environments) - if (typeof global.process === 'object' && - typeof global.process.nextTick === 'function') { - this._timerAPIs.nextTick = global.process.nextTick; - this._fakeTimerAPIs.nextTick = fn(this._fakeNextTick.bind(this)); - } - - // These globally-accessible function are now deprecated! - // They will go away very soon, so do not use them! - // Instead, use the versions available on the `jest` object - global.mockRunTicksRepeatedly = this.runAllTicks.bind(this); - global.mockRunTimersOnce = this.runOnlyPendingTimers.bind(this); - global.mockRunTimersToTime = this.runTimersToTime.bind(this); - global.mockRunTimersRepeatedly = this.runAllTimers.bind(this); - global.mockClearTimers = this.clearAllTimers.bind(this); - global.mockGetTimersCount = () => Object.keys(this._timers).length; - } - - clearAllTimers() { - this._immediates.forEach( - immediate => this._fakeClearImmediate(immediate.uuid)); - - for (const uuid in this._timers) { - delete this._timers[uuid]; - } - } - - dispose() { - this._disposed = true; - this.clearAllTimers(); - } - - reset() { - this._cancelledTicks = {}; - this._cancelledImmediates = {}; - this._now = 0; - this._ticks = []; - this._immediates = []; - this._timers = {}; - } - - runAllTicks() { - this._checkFakeTimers(); - // Only run a generous number of ticks and then bail. - // This is just to help avoid recursive loops - let i; - for (i = 0; i < this._maxLoops; i++) { - const tick = this._ticks.shift(); - - if (tick === undefined) { - break; - } - - if (!this._cancelledTicks.hasOwnProperty(tick.uuid)) { - // Callback may throw, so update the map prior calling. - this._cancelledTicks[tick.uuid] = true; - tick.callback(); - } - } - - if (i === this._maxLoops) { - throw new Error( - 'Ran ' + this._maxLoops + ' ticks, and there are still more! ' + - 'Assuming we\'ve hit an infinite recursion and bailing out...'); - - } - } - - runAllImmediates() { - this._checkFakeTimers(); - // Only run a generous number of immediates and then bail. - let i; - for (i = 0; i < this._maxLoops; i++) { - const immediate = this._immediates.shift(); - if (immediate === undefined) { - break; - } - this._runImmediate(immediate); - } - - if (i === this._maxLoops) { - throw new Error( - 'Ran ' + this._maxLoops + - ' immediates, and there are still more! Assuming ' + - 'we\'ve hit an infinite recursion and bailing out...'); - - } - } - - _runImmediate(immediate) { - if (!this._cancelledImmediates.hasOwnProperty(immediate.uuid)) { - // Callback may throw, so update the map prior calling. - this._cancelledImmediates[immediate.uuid] = true; - immediate.callback(); - } - } - - runAllTimers() { - this._checkFakeTimers(); - this.runAllTicks(); - this.runAllImmediates(); - - // Only run a generous number of timers and then bail. - // This is just to help avoid recursive loops - let i; - for (i = 0; i < this._maxLoops; i++) { - const nextTimerHandle = this._getNextTimerHandle(); - - // If there are no more timer handles, stop! - if (nextTimerHandle === null) { - break; - } - - this._runTimerHandle(nextTimerHandle); - - // Some of the immediate calls could be enqueued - // during the previous handling of the timers, we should - // run them as well. - if (this._immediates.length) { - this.runAllImmediates(); - } - } - - if (i === this._maxLoops) { - throw new Error( - 'Ran ' + this._maxLoops + ' timers, and there are still more! ' + - 'Assuming we\'ve hit an infinite recursion and bailing out...'); - - } - } - - runOnlyPendingTimers() { - this._checkFakeTimers(); - this._immediates.forEach(this._runImmediate, this); - const timers = this._timers; - Object.keys(timers). - sort((left, right) => timers[left].expiry - timers[right].expiry). - forEach(this._runTimerHandle, this); - } - - runTimersToTime(msToRun) { - this._checkFakeTimers(); - // Only run a generous number of timers and then bail. - // This is jsut to help avoid recursive loops - let i; - for (i = 0; i < this._maxLoops; i++) { - const timerHandle = this._getNextTimerHandle(); - - // If there are no more timer handles, stop! - if (timerHandle === null) { - break; - } - - const nextTimerExpiry = this._timers[timerHandle].expiry; - if (this._now + msToRun < nextTimerExpiry) { - // There are no timers between now and the target we're running to, so - // adjust our time cursor and quit - this._now += msToRun; - break; - } else { - msToRun -= nextTimerExpiry - this._now; - this._now = nextTimerExpiry; - this._runTimerHandle(timerHandle); - } - } - - if (i === this._maxLoops) { - throw new Error( - 'Ran ' + this._maxLoops + ' timers, and there are still more! ' + - 'Assuming we\'ve hit an infinite recursion and bailing out...'); - - } - } - - runWithRealTimers(cb) { - const hasNextTick = - typeof this._global.process === 'object' && - typeof this._global.process.nextTick === 'function'; - - const prevClearImmediate = this._global.clearImmediate; - const prevClearInterval = this._global.clearInterval; - const prevClearTimeout = this._global.clearTimeout; - const prevSetImmediate = this._global.setImmediate; - const prevSetInterval = this._global.setInterval; - const prevSetTimeout = this._global.setTimeout; - - const prevNextTick = hasNextTick ? this._global.process.nextTick : null; - - this.useRealTimers(); - - let cbErr = null; - let errThrown = false; - try { - cb(); - } catch (e) { - errThrown = true; - cbErr = e; - } - - this._global.clearImmediate = prevClearImmediate; - this._global.clearInterval = prevClearInterval; - this._global.clearTimeout = prevClearTimeout; - this._global.setImmediate = prevSetImmediate; - this._global.setInterval = prevSetInterval; - this._global.setTimeout = prevSetTimeout; - if (hasNextTick) { - this._global.process.nextTick = prevNextTick; - } - - if (errThrown) { - throw cbErr; - } - } - - useRealTimers() { - const hasNextTick = - typeof this._global.process === 'object' && - typeof this._global.process.nextTick === 'function'; - - this._global.clearImmediate = this._timerAPIs.clearImmediate; - this._global.clearInterval = this._timerAPIs.clearInterval; - this._global.clearTimeout = this._timerAPIs.clearTimeout; - this._global.setImmediate = this._timerAPIs.setImmediate; - this._global.setInterval = this._timerAPIs.setInterval; - this._global.setTimeout = this._timerAPIs.setTimeout; - if (hasNextTick) { - this._global.process.nextTick = this._timerAPIs.nextTick; - } - } - - useFakeTimers() { - const hasNextTick = - typeof this._global.process === 'object' && - typeof this._global.process.nextTick === 'function'; - - this._global.clearImmediate = this._fakeTimerAPIs.clearImmediate; - this._global.clearInterval = this._fakeTimerAPIs.clearInterval; - this._global.clearTimeout = this._fakeTimerAPIs.clearTimeout; - this._global.setImmediate = this._fakeTimerAPIs.setImmediate; - this._global.setInterval = this._fakeTimerAPIs.setInterval; - this._global.setTimeout = this._fakeTimerAPIs.setTimeout; - if (hasNextTick) { - this._global.process.nextTick = this._fakeTimerAPIs.nextTick; - } - } - - _checkFakeTimers() { - if (this._global.setTimeout !== this._fakeTimerAPIs.setTimeout) { - this._global.console.warn( - `A function to advance timers was called but the timers API is not ` + - `mocked with fake timers. Call \`jest.useFakeTimers()\` in this test ` + - `or enable fake timers globally by setting \`"timers": "fake"\` in ` + - `the configuration file. This warning is likely a result of a ` + - `default configuration change in Jest 15.\n\n` + - `Release Blog Post: https://facebook.github.io/jest/blog/2016/09/01/jest-15.html\n` + - `Stack Trace:\n` + formatStackTrace(new Error().stack, this._config)); - - } - } - - _fakeClearTimer(uuid) { - if (this._timers.hasOwnProperty(uuid)) { - delete this._timers[uuid]; - } - } - - _fakeClearImmediate(uuid) { - this._cancelledImmediates[uuid] = true; - } - - _fakeNextTick(callback) { - if (this._disposed) { - return; - } - - const args = []; - for (let ii = 1, ll = arguments.length; ii < ll; ii++) { - args.push(arguments[ii]); - } - - const uuid = String(this._uuidCounter++); - - this._ticks.push({ - callback: () => callback.apply(null, args), - uuid }); - - - const cancelledTicks = this._cancelledTicks; - this._timerAPIs.nextTick && this._timerAPIs.nextTick(() => { - if (this._blocked) {return;} - if (!cancelledTicks.hasOwnProperty(uuid)) { - // Callback may throw, so update the map prior calling. - cancelledTicks[uuid] = true; - callback.apply(null, args); - } - }); - } - - _fakeSetImmediate(callback) { - if (this._disposed) { - return null; - } - - const args = []; - for (let ii = 1, ll = arguments.length; ii < ll; ii++) { - args.push(arguments[ii]); - } - - const uuid = this._uuidCounter++; - - this._immediates.push({ - callback: () => callback.apply(null, args), - uuid: String(uuid) }); - - - const cancelledImmediates = this._cancelledImmediates; - this._timerAPIs.setImmediate(() => { - if (!cancelledImmediates.hasOwnProperty(uuid)) { - // Callback may throw, so update the map prior calling. - cancelledImmediates[String(uuid)] = true; - callback.apply(null, args); - } - }); - - return uuid; - } - - _fakeSetInterval(callback, intervalDelay) { - if (this._disposed) { - return null; - } - - if (intervalDelay == null) { - intervalDelay = 0; - } - - const args = []; - for (let ii = 2, ll = arguments.length; ii < ll; ii++) { - args.push(arguments[ii]); - } - - const uuid = this._uuidCounter++; - - this._timers[String(uuid)] = { - callback: () => callback.apply(null, args), - expiry: this._now + intervalDelay, - interval: intervalDelay, - type: 'interval' }; - - - return uuid; - } - - _fakeSetTimeout(callback, delay) { - if (this._disposed) { - return null; - } - - if (delay == null) { - delay = 0; - } - - const args = []; - for (let ii = 2, ll = arguments.length; ii < ll; ii++) { - args.push(arguments[ii]); - } - - const uuid = this._uuidCounter++; - - this._timers[String(uuid)] = { - callback: () => callback.apply(null, args), - expiry: this._now + delay, - interval: null, - type: 'timeout' }; - - - return uuid; - } - - _getNextTimerHandle() { - let nextTimerHandle = null; - let uuid; - let soonestTime = MS_IN_A_YEAR; - let timer; - for (uuid in this._timers) { - timer = this._timers[uuid]; - if (timer.expiry < soonestTime) { - soonestTime = timer.expiry; - nextTimerHandle = uuid; - } - } - - return nextTimerHandle; - } - - _runTimerHandle(timerHandle) { - const timer = this._timers[timerHandle]; - - if (!timer) { - return; - } - - switch (timer.type) { - case 'timeout': - const callback = timer.callback; - delete this._timers[timerHandle]; - callback(); - break; - - case 'interval': - timer.expiry = this._now + timer.interval; - timer.callback(); - break; - - default: - throw new Error('Unexpected timer type: ' + timer.type);} - - }} - - - -module.exports = FakeTimers; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/JasmineFormatter.js b/fundamentals/bug-challenge-es6/node_modules/jest-util/build/JasmineFormatter.js deleted file mode 100644 index 8474f6b66..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/JasmineFormatter.js +++ /dev/null @@ -1,198 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - -const diff = require('diff'); -const chalk = require('chalk'); - -const ERROR_TITLE_COLOR = chalk.bold.underline.red; -const LINEBREAK_REGEX = /[\r\n]/; - -class JasmineFormatter { - - - - - - - constructor(jasmine, environment, config) { - this._config = config; - this._jasmine = jasmine; - this._environment = environment; - /* $FlowFixMe */ - this._diffableMatchers = Object.assign(Object.create(null), { - toBe: true, - toEqual: true, - toNotBe: true, - toNotEqual: true }); - - } - - formatDiffable( - matcherName, - isNot, - actual, - expected) - { - const ppActual = this.prettyPrint(actual); - const ppExpected = this.prettyPrint(expected); - const colorDiff = this.highlightDifferences(ppActual, ppExpected); - matcherName = (isNot ? 'NOT ' : '') + matcherName; - - return ( - ERROR_TITLE_COLOR('Expected:') + ' ' + colorDiff.a + ' ' + - ERROR_TITLE_COLOR(matcherName + ':') + ' ' + colorDiff.b); - - } - - formatMatchFailure(result) { - let message; - if (this._diffableMatchers[result.matcherName]) { - const isNot = !!('isNot' in result ? - result.isNot : - /not to /.test(result.message || '')); - - message = this.formatDiffable( - result.matcherName, - isNot, - result.actual, - result.expected); - - } else { - message = ERROR_TITLE_COLOR(result.message); - } - - if (!this._config.noStackTrace && result.stack) { - const errorMessage = result.message || ''; - message = result.stack. - replace(message, errorMessage). - replace(/^.*Error:\s*/, ''); - } - return message; - } - - highlightDifferences(a, b) { - let differ; - if (a.match(LINEBREAK_REGEX) || b.match(LINEBREAK_REGEX)) { - // `diff` uses the Myers LCS diff algorithm which runs in O(n+d^2) time - // (where "d" is the edit distance) and can get very slow for large edit - // distances. Mitigate the cost by switching to a lower-resolution diff - // whenever linebreaks are involved. - differ = diff.diffLines; - } else { - differ = diff.diffChars; - } - const changes = differ(a, b); - const ret = { a: '', b: '' }; - for (let i = 0, il = changes.length; i < il; i++) { - const change = changes[i]; - if (change.added) { - ret.b += chalk.bgRed(change.value); - } else if (change.removed) { - ret.a += chalk.bgRed(change.value); - } else { - ret.a += change.value; - ret.b += change.value; - } - } - return ret; - } - - prettyPrint( - object, - indent, - cycleWeakMap) - { - if (!indent) { - indent = ''; - } - - if (typeof object === 'object' && object !== null) { - if ( - this._environment.global.Node && - object instanceof this._environment.global.Node && - object.nodeType > 0) - { - let attrStr = ''; - if (object.attributes && object.tagName) { - Array.from(object.attributes).forEach(attr => { - const attrName = attr.name.trim(); - const attrValue = attr.value.trim(); - attrStr += ' ' + attrName + '="' + attrValue + '"'; - }); - return ( - `HTMLNode(<${ object.tagName + attrStr }>{...})`); - - } else { - return `HTMLNode(<${ object.constructor.name } />)`; - } - } - - if (!cycleWeakMap) { - cycleWeakMap = new WeakMap(); - } - - if (cycleWeakMap.get(object) === true) { - return ''; - } - cycleWeakMap.set(object, true); - - const type = Object.prototype.toString.call(object); - const output = []; - if (type === '[object Map]') { - indent = chalk.dim('|') + ' ' + indent; - for (const value of object) { - output.push( - indent + value[0] + ': ' + this.prettyPrint( - value[1], - indent, - cycleWeakMap)); - - - } - return `Map {\n${ output.join(',') }\n}`; - } - if (type === '[object Set]') { - for (const value of object) { - output.push( - this.prettyPrint( - value, - chalk.dim('|') + ' ' + indent, - cycleWeakMap)); - - - } - return `Set [\n${ indent }${ output.join(', ') }\n${ indent }]`; - } - - const orderedKeys = Object.keys(object).sort(); - let value; - const keysOutput = []; - const keyIndent = chalk.dim('|') + ' '; - for (let i = 0; i < orderedKeys.length; i++) { - value = object[orderedKeys[i]]; - keysOutput.push( - indent + keyIndent + orderedKeys[i] + ': ' + - this.prettyPrint(value, indent + keyIndent, cycleWeakMap)); - - } - return '{\n' + keysOutput.join(',\n') + '\n' + indent + '}'; - } else { - return this._jasmine.pp(object); - } - }} - - - -module.exports = JasmineFormatter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/NullConsole.js b/fundamentals/bug-challenge-es6/node_modules/jest-util/build/NullConsole.js deleted file mode 100644 index 2461923c4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/NullConsole.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - -const Console = require('./Console'); - -class NullConsole extends Console { - assert() {} - dir() {} - error() {} - info() {} - log() {} - time() {} - timeEnd() {} - trace() {} - warn() {}} - - -module.exports = NullConsole; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/clearLine.js b/fundamentals/bug-challenge-es6/node_modules/jest-util/build/clearLine.js deleted file mode 100644 index 240c71a77..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/clearLine.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -/* global stream$Writable */ -'use strict'; - -module.exports = stream => { - if (process.stdout.isTTY) { - stream.write('\x1b[999D\x1b[K'); - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/index.js b/fundamentals/bug-challenge-es6/node_modules/jest-util/build/index.js deleted file mode 100644 index 9914e3084..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/index.js +++ /dev/null @@ -1,106 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - -const Console = require('./Console'); -const FakeTimers = require('./FakeTimers'); -const JasmineFormatter = require('./JasmineFormatter'); -const NullConsole = require('./NullConsole');var _require = - - - - - -require('./messages');const formatExecError = _require.formatExecError,formatResultsErrors = _require.formatResultsErrors,formatStackTrace = _require.formatStackTrace; -const clearLine = require('./clearLine'); -const fileExists = require('jest-file-exists'); -const installCommonGlobals = require('./installCommonGlobals'); -const mkdirp = require('mkdirp'); -const path = require('path'); -const separateMessageFromStack = require('./separateMessageFromStack'); - -const escapePathForRegex = dir => { - if (path.sep === '\\') { - // Replace "\" with "/" so it's not escaped by escapeStrForRegex. - // replacePathSepForRegex will convert it back. - dir = dir.replace(/\\/g, '/'); - } - return replacePathSepForRegex(escapeStrForRegex(dir)); -}; - -const escapeStrForRegex = -string => string.replace(/[[\]{}()*+?.\\^$|]/g, '\\$&'); - -const replacePathSepForRegex = string => { - if (path.sep === '\\') { - return string.replace(/(\/|\\(?!\.))/g, '\\\\'); - } - return string; -}; - -const createDirectory = path => { - try { - mkdirp.sync(path, '777'); - } catch (e) { - if (e.code !== 'EEXIST') { - throw e; - } - } -}; - -const getPackageRoot = () => { - const cwd = process.cwd(); - - // Is the cwd somewhere within an npm package? - let root = cwd; - while (!fileExists(path.join(root, 'package.json'))) { - if (root === '/' || root.match(/^[A-Z]:\\/)) { - root = cwd; - break; - } - root = path.resolve(root, '..'); - } - - return root; -}; - -const warnAboutUnrecognizedOptions = (argv, options) => { - const yargsSpecialOptions = ['$0', '_', 'help']; - const allowedOptions = Object.keys(options).reduce((acc, option) => - acc. - add(option). - add(options[option].alias), - new Set(yargsSpecialOptions)); - const unrecognizedOptions = Object.keys(argv).filter(arg => - !allowedOptions.has(arg)); - - if (unrecognizedOptions.length) { - console.warn('Unrecognized options: ' + unrecognizedOptions.join(', ')); - } -}; - -module.exports = { - Console, - FakeTimers, - JasmineFormatter, - NullConsole, - clearLine, - createDirectory, - escapePathForRegex, - escapeStrForRegex, - formatExecError, - formatResultsErrors, - formatStackTrace, - getPackageRoot, - installCommonGlobals, - replacePathSepForRegex, - separateMessageFromStack, - warnAboutUnrecognizedOptions }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/installCommonGlobals.js b/fundamentals/bug-challenge-es6/node_modules/jest-util/build/installCommonGlobals.js deleted file mode 100644 index 33e58e3ab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/installCommonGlobals.js +++ /dev/null @@ -1,58 +0,0 @@ -/** -* Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -* -* This source code is licensed under the BSD-style license found in the -* LICENSE file in the root directory of this source tree. An additional grant -* of patent rights can be found in the PATENTS file in the same directory. -* -* -*/ -'use strict'; - - - - -function deepCopy(obj) { - const newObj = {}; - let value; - for (const key in obj) { - value = obj[key]; - if (typeof value === 'object' && value !== null) { - value = deepCopy(value); - } - newObj[key] = value; - } - return newObj; -} - -module.exports = (global, globals) => { - // Forward some APIs - global.Buffer = Buffer; - - // `global.process` is mutated by FakeTimers. Make a copy of the - // object for the jsdom environment to prevent memory leaks. - // Overwrite toString to make it look like the real process object - let toStringOverwrite; - if (Symbol && Symbol.toStringTag) { - // $FlowFixMe - toStringOverwrite = { - [Symbol.toStringTag]: 'process' }; - - } - global.process = Object.assign({}, process, toStringOverwrite); - global.process.setMaxListeners = process.setMaxListeners.bind(process); - global.process.getMaxListeners = process.getMaxListeners.bind(process); - global.process.emit = process.emit.bind(process); - global.process.addListener = process.addListener.bind(process); - global.process.on = process.on.bind(process); - global.process.once = process.once.bind(process); - global.process.removeListener = process.removeListener.bind(process); - global.process.removeAllListeners = process.removeAllListeners.bind(process); - global.process.listeners = process.listeners.bind(process); - global.process.listenerCount = process.listenerCount.bind(process); - - global.setImmediate = setImmediate; - global.clearImmediate = clearImmediate; - - Object.assign(global, deepCopy(globals)); -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/messages.js b/fundamentals/bug-challenge-es6/node_modules/jest-util/build/messages.js deleted file mode 100644 index fd23a2370..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/messages.js +++ /dev/null @@ -1,194 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - -const chalk = require('chalk'); -const path = require('path'); -const separateMessageFromStack = require('./separateMessageFromStack'); - -// filter for noisy stack trace lines -const JASMINE_IGNORE = -/^\s+at(?:(?:.*?vendor\/|jasmine\-)|\s+jasmine\.buildExpectationResult)/; -const STACK_TRACE_IGNORE = -/^\s+at.*?jest(-.*?)?(\/|\\)(vendor|build|node_modules|packages)(\/|\\)/; -const TITLE_INDENT = ' '; -const MESSAGE_INDENT = ' '; -const STACK_INDENT = ' '; -const ANCESTRY_SEPARATOR = ' \u203A '; -const TITLE_BULLET = chalk.bold('\u25cf '); -const STACK_TRACE_COLOR = chalk.dim; -const STACK_PATH_REGEXP = /\s*at.*\(?(\:\d*\:\d*|native)\)?/; -const EXEC_ERROR_MESSAGE = 'Test suite failed to run'; - -const trim = string => (string || '').replace(/^\s+/, '').replace(/\s+$/, ''); - -// Some errors contain not only line numbers in stack traces -// e.g. SyntaxErrors can contain snippets of code, and we don't -// want to trim those, because they may have pointers to the column/character -// which will get misaligned. -const trimPaths = string => -string.match(STACK_PATH_REGEXP) ? trim(string) : string; - -// ExecError is an error thrown outside of the test suite (not inside an `it` or -// `before/after each` hooks). If it's thrown, none of the tests in the file -// are executed. -const formatExecError = ( -testResult, -config, -testPath) => -{ - let error = testResult.testExecError; - if (!error || typeof error === 'number') { - error = new Error(`Expected an Error, but "${ String(error) }" was thrown`); - error.stack = ''; - }var _error = - - error;let message = _error.message,stack = _error.stack; - - if (typeof error === 'string' || !error) { - error || (error = 'EMPTY ERROR'); - message = ''; - stack = error; - } - - const separated = separateMessageFromStack(stack || ''); - stack = separated.stack; - - if (separated.message.indexOf(trim(message)) !== -1) { - // Often stack trace already contains the duplicate of the message - message = separated.message; - } else { - message = message + '\n' + separated.message; - } - - message = message.split(/\n/).map(line => MESSAGE_INDENT + line).join('\n'); - - stack = stack && !config.noStackTrace ? - '\n' + STACK_TRACE_COLOR(formatStackTrace(stack, config, testPath)) : - ''; - - if (message.match(/^\s*$/) && stack.match(/^\s*$/)) { - // this can happen if an empty object is thrown. - message = MESSAGE_INDENT + 'Error: No message was provided'; - } - return TITLE_INDENT + TITLE_BULLET + EXEC_ERROR_MESSAGE + '\n\n' + - message + stack + '\n'; -}; - -const removeInternalStackEntries = (lines, config) => { - let pathCounter = 0; - - return lines.filter(line => { - const isPath = STACK_PATH_REGEXP.test(line); - if (!isPath) { - return true; - } - if (JASMINE_IGNORE.test(line)) { - return false; - } - - if (++pathCounter === 1) { - return true; // always keep the first line even if it's from Jest - } - - return !(STACK_TRACE_IGNORE.test(line) || config.noStackTrace); - }); -}; - -const formatPaths = ( -config, -relativeTestPath, -line) => -{ - // Extract the file path from the trace line. - const match = line.match(/(^\s*at .*?\(?)([^()]+)(:[0-9]+:[0-9]+\)?.*$)/); - if (!match) { - return line; - } - - let filePath = path.relative(config.rootDir, match[2]); - // highlight paths from the current test file - if ( - config.testRegex && new RegExp(config.testRegex).test(filePath) || - filePath === relativeTestPath) - { - filePath = chalk.reset.cyan(filePath); - } - return STACK_TRACE_COLOR(match[1]) + filePath + STACK_TRACE_COLOR(match[3]); -}; - - - - - - - -const formatStackTrace = ( -stack, -config, -testPath) => -{ - let lines = stack.split(/\n/); - const relativeTestPath = testPath ? - path.relative(config.rootDir, testPath) : - null; - lines = removeInternalStackEntries(lines, config); - return lines.map(trimPaths). - map(formatPaths.bind(null, config, relativeTestPath)). - map(line => STACK_INDENT + line). - join('\n'); -}; - -const formatResultsErrors = ( -testResults, -config, -testPath) => -{ - const failedResults = testResults.reduce( - (errors, result) => { - result.failureMessages.forEach(content => errors.push({ content, result })); - return errors; - }, - []); - - - if (!failedResults.length) { - return null; - } - - return failedResults.map((_ref) => {let result = _ref.result,content = _ref.content;var _separateMessageFromS = - separateMessageFromStack(content);let message = _separateMessageFromS.message,stack = _separateMessageFromS.stack; - stack = config.noStackTrace ? - '' : - STACK_TRACE_COLOR(formatStackTrace(stack, config, testPath)) + '\n'; - - message = message. - split(/\n/). - map(line => MESSAGE_INDENT + line). - join('\n'); - - const title = chalk.bold.red( - TITLE_INDENT + TITLE_BULLET + - result.ancestorTitles.join(ANCESTRY_SEPARATOR) + ( - result.ancestorTitles.length ? ANCESTRY_SEPARATOR : '') + - result.title) + - '\n'; - - return title + '\n' + message + '\n' + stack; - }).join('\n'); -}; - -module.exports = { - formatExecError, - formatResultsErrors, - formatStackTrace }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/separateMessageFromStack.js b/fundamentals/bug-challenge-es6/node_modules/jest-util/build/separateMessageFromStack.js deleted file mode 100644 index 14dcc5388..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-util/build/separateMessageFromStack.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - -const ERROR_TEXT = 'Error: '; - -// jasmine and worker farm sometimes don't give us access to the actual -// Error object, so we have to regexp out the message from the stack string -// to format it. -module.exports = content => { - if (!content) { - return { message: '', stack: '' }; - } - - const messageMatch = content.match(/(^(.|\n)*?(?=\n\s*at\s.*\:\d*\:\d*))/); - let message = messageMatch ? messageMatch[0] : 'Error'; - const stack = messageMatch ? content.slice(message.length) : content; - // If the error is a plain error instead of a SyntaxError or TypeError - // we remove it from the message because it is generally not useful. - if (message.startsWith(ERROR_TEXT)) { - message = message.substr(ERROR_TEXT.length); - } - return { message, stack }; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest-util/package.json b/fundamentals/bug-challenge-es6/node_modules/jest-util/package.json deleted file mode 100644 index 2a447692b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest-util/package.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "_args": [ - [ - "jest-util@^17.0.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "jest-util@>=17.0.2 <18.0.0", - "_id": "jest-util@17.0.2", - "_inCache": true, - "_installable": true, - "_location": "/jest-util", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/jest-util-17.0.2.tgz_1479170370058_0.12517114728689194" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-util", - "raw": "jest-util@^17.0.2", - "rawSpec": "^17.0.2", - "scope": null, - "spec": ">=17.0.2 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-config", - "/jest-environment-jsdom", - "/jest-environment-node", - "/jest-jasmine2", - "/jest-matchers", - "/jest-runtime", - "/jest-snapshot", - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/jest-util/-/jest-util-17.0.2.tgz", - "_shasum": "9fd9da8091e9904fb976da7e4d8912ca26968638", - "_shrinkwrap": null, - "_spec": "jest-util@^17.0.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "chalk": "^1.1.1", - "diff": "^3.0.0", - "graceful-fs": "^4.1.6", - "jest-file-exists": "^17.0.0", - "jest-mock": "^17.0.2", - "mkdirp": "^0.5.1" - }, - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "9fd9da8091e9904fb976da7e4d8912ca26968638", - "tarball": "https://registry.npmjs.org/jest-util/-/jest-util-17.0.2.tgz" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/index.js", - "maintainers": [ - { - "email": "tall@fb.com", - "name": "alexjuarez" - }, - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - } - ], - "name": "jest-util", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "../../packages/jest-cli/bin/jest.js" - }, - "version": "17.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/bin/jest.js b/fundamentals/bug-challenge-es6/node_modules/jest/bin/jest.js deleted file mode 100755 index 086cba797..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/bin/jest.js +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env node -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -require('jest-cli/bin/jest'); diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/build/jest.js b/fundamentals/bug-challenge-es6/node_modules/jest/build/jest.js deleted file mode 100644 index 0473bd9ad..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/build/jest.js +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -module.exports = require('jest-cli'); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/.bin/jest b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/.bin/jest deleted file mode 120000 index 3d9fe5cf8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/.bin/jest +++ /dev/null @@ -1 +0,0 @@ -../jest-cli/bin/jest.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/.npmignore deleted file mode 100644 index 85e48fe7b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -**/__mocks__/** -**/__tests__/** -src diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/bin/jest.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/bin/jest.js deleted file mode 100755 index 63fe8d954..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/bin/jest.js +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env node -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -'use strict'; - -if (process.env.NODE_ENV == null) { - process.env.NODE_ENV = 'test'; -} - -require('../build/cli').run(); diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/SearchSource.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/SearchSource.js deleted file mode 100644 index 7b983edce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/SearchSource.js +++ /dev/null @@ -1,289 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict';var _slicedToArray = function () {function sliceIterator(arr, i) {var _arr = [];var _n = true;var _d = false;var _e = undefined;try {for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {_arr.push(_s.value);if (i && _arr.length === i) break;}} catch (err) {_d = true;_e = err;} finally {try {if (!_n && _i["return"]) _i["return"]();} finally {if (_d) throw _e;}}return _arr;}return function (arr, i) {if (Array.isArray(arr)) {return arr;} else if (Symbol.iterator in Object(arr)) {return sliceIterator(arr, i);} else {throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}(); - - - - - -const DependencyResolver = require('jest-resolve-dependencies'); - -const chalk = require('chalk'); -const changedFiles = require('jest-changed-files'); -const fileExists = require('jest-file-exists'); -const path = require('path');var _require = - - - -require('jest-util');const escapePathForRegex = _require.escapePathForRegex,replacePathSepForRegex = _require.replacePathSepForRegex; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -const git = changedFiles.git; -const hg = changedFiles.hg; - -const determineSCM = path => Promise.all([ -git.isGitRepository(path), -hg.isHGRepository(path)]); - -const pathToRegex = p => replacePathSepForRegex(p); -const pluralize = ( -word, -count, -ending) => -`${ count } ${ word }${ count === 1 ? '' : ending }`; - -class SearchSource { - - - - - - - - - - - - - constructor( - hasteMap, - config, - options) - { - this._hasteContext = hasteMap; - this._config = config; - this._options = options || { - skipNodeResolution: false }; - - - this._testPathDirPattern = - new RegExp(config.testPathDirs.map( - dir => escapePathForRegex(dir)). - join('|')); - - this._testRegex = new RegExp(pathToRegex(config.testRegex)); - const ignorePattern = config.testPathIgnorePatterns; - this._testIgnorePattern = - ignorePattern.length ? new RegExp(ignorePattern.join('|')) : null; - - this._testPathCases = { - testPathDirs: path => this._testPathDirPattern.test(path), - testPathIgnorePatterns: path => - !this._testIgnorePattern || - !this._testIgnorePattern.test(path), - - testRegex: path => this._testRegex.test(path) }; - - } - - _filterTestPathsWithStats( - allPaths, - testPathPattern) - { - const data = { - paths: [], - stats: {}, - total: allPaths.length }; - - - const testCases = Object.assign({}, this._testPathCases); - if (testPathPattern) { - const regex = new RegExp(testPathPattern, 'i'); - testCases.testPathPattern = path => regex.test(path); - } - - data.paths = allPaths.filter(path => { - return Object.keys(testCases).reduce((flag, key) => { - if (testCases[key](path)) { - data.stats[key] = ++data.stats[key] || 1; - return flag && true; - } - data.stats[key] = data.stats[key] || 0; - return false; - }, true); - }); - - return data; - } - - _getAllTestPaths( - testPathPattern) - { - return this._filterTestPathsWithStats( - this._hasteContext.hasteFS.getAllFiles(), - testPathPattern); - - } - - isTestFilePath(path) { - return Object.keys(this._testPathCases).every(key => - this._testPathCases[key](path)); - - } - - findMatchingTests( - testPathPattern) - { - if (testPathPattern && !(testPathPattern instanceof RegExp)) { - const maybeFile = path.resolve(process.cwd(), testPathPattern); - if (fileExists(maybeFile, this._hasteContext.hasteFS)) { - return this._filterTestPathsWithStats([maybeFile]); - } - } - - return this._getAllTestPaths(testPathPattern); - } - - findRelatedTests(allPaths) { - const dependencyResolver = new DependencyResolver( - this._hasteContext.resolver, - this._hasteContext.hasteFS); - - return { - paths: dependencyResolver.resolveInverse( - allPaths, - this.isTestFilePath.bind(this), - { - skipNodeResolution: this._options.skipNodeResolution }) }; - - - - } - - findRelatedTestsFromPattern( - paths) - { - if (Array.isArray(paths) && paths.length) { - const resolvedPaths = paths.map(p => path.resolve(process.cwd(), p)); - return this.findRelatedTests(new Set(resolvedPaths)); - } - return { paths: [] }; - } - - findChangedTests(options) { - return Promise.all(this._config.testPathDirs.map(determineSCM)). - then(repos => { - if (!repos.every((_ref) => {var _ref2 = _slicedToArray(_ref, 2);let gitRepo = _ref2[0],hgRepo = _ref2[1];return gitRepo || hgRepo;})) { - return { - noSCM: true, - paths: [] }; - - } - return Promise.all(Array.from(repos).map((_ref3) => {var _ref4 = _slicedToArray(_ref3, 2);let gitRepo = _ref4[0],hgRepo = _ref4[1]; - return gitRepo ? - git.findChangedFiles(gitRepo, options) : - hg.findChangedFiles(hgRepo, options); - })).then(changedPathSets => this.findRelatedTests( - new Set(Array.prototype.concat.apply([], changedPathSets)))); - - }); - } - - getNoTestsFoundMessage( - patternInfo, - config, - data) - { - if (patternInfo.onlyChanged) { - return ( - chalk.bold( - 'No tests found related to files changed since last commit.\n') + - - chalk.dim( - patternInfo.watch ? - 'Press `a` to run all tests, or run Jest with `--watchAll`.' : - 'Run Jest without `-o` to run all tests.')); - - - } - - const testPathPattern = SearchSource.getTestPathPattern(patternInfo); - const stats = data.stats || {}; - const statsMessage = Object.keys(stats).map(key => { - const value = key === 'testPathPattern' ? testPathPattern : config[key]; - if (value) { - const matches = pluralize('match', stats[key], 'es'); - return ` ${ key }: ${ chalk.yellow(value) } - ${ matches }`; - } - return null; - }).filter(line => line).join('\n'); - - return ( - chalk.bold('No tests found') + '\n' + ( - data.total ? - ` ${ pluralize('file', data.total || 0, 's') } checked.\n` + - statsMessage : - `No files found in ${ config.rootDir }.\n` + - `Make sure Jest's configuration does not exclude this directory.\n` + - `To set up Jest, make sure a package.json file exists.\n` + - `Jest Documentation: facebook.github.io/jest/docs/configuration.html`)); - - - } - - getTestPaths(patternInfo) { - if (patternInfo.onlyChanged) { - return this.findChangedTests({ lastCommit: patternInfo.lastCommit }); - } else if (patternInfo.findRelatedTests && patternInfo.paths) { - return Promise.resolve( - this.findRelatedTestsFromPattern(patternInfo.paths)); - - } else if (patternInfo.testPathPattern != null) { - return Promise.resolve( - this.findMatchingTests(patternInfo.testPathPattern)); - - } else { - return Promise.resolve({ paths: [] }); - } - } - - static getTestPathPattern(patternInfo) { - const pattern = patternInfo.testPathPattern; - const input = patternInfo.input; - const formattedPattern = `/${ pattern || '' }/`; - const formattedInput = patternInfo.shouldTreatInputAsPattern ? - `/${ input || '' }/` : - `"${ input || '' }"`; - return input === pattern ? formattedInput : formattedPattern; - }} - - - -module.exports = SearchSource; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/TestRunner.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/TestRunner.js deleted file mode 100644 index 5906aa916..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/TestRunner.js +++ /dev/null @@ -1,605 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict';var _require = - - - - - - - - - - - -require('jest-util');const formatExecError = _require.formatExecError; -const fs = require('graceful-fs'); -const getCacheFilePath = require('jest-haste-map').getCacheFilePath; -const DefaultReporter = require('./reporters/DefaultReporter'); -const NotifyReporter = require('./reporters/NotifyReporter'); -const SummaryReporter = require('./reporters/SummaryReporter'); -const VerboseReporter = require('./reporters/VerboseReporter'); -const promisify = require('./lib/promisify'); -const runTest = require('./runTest'); -const snapshot = require('jest-snapshot'); -const throat = require('throat'); -const workerFarm = require('worker-farm'); -const TestWatcher = require('./TestWatcher'); - -const FAIL = 0; -const SLOW_TEST_TIME = 3000; -const SUCCESS = 1; - -class CancelRun extends Error { - constructor(message) { - super(message); - this.name = 'CancelRun'; - }} - - - - - - - - - - - - - - - - - -const TEST_WORKER_PATH = require.resolve('./TestWorker'); - -class TestRunner { - - - - - - - constructor( - hasteContext, - config, - options) - { - this._config = config; - this._dispatcher = new ReporterDispatcher( - hasteContext.hasteFS, - options.getTestSummary); - - this._hasteContext = hasteContext; - this._options = options; - this._setupReporters(); - - // Map from testFilePath -> time it takes to run the test. Used to - // optimally schedule bigger test runs. - this._testPerformanceCache = {}; - } - - addReporter(reporter) { - this._dispatcher.register(reporter); - } - - removeReporter(ReporterClass) { - this._dispatcher.unregister(ReporterClass); - } - - _getTestPerformanceCachePath() { - const config = this._config; - return getCacheFilePath(config.cacheDirectory, 'perf-cache-' + config.name); - } - - _sortTests(testPaths) { - // When running more tests than we have workers available, sort the tests - // by size - big test files usually take longer to complete, so we run - // them first in an effort to minimize worker idle time at the end of a - // long test run. - // - // After a test run we store the time it took to run a test and on - // subsequent runs we use that to run the slowest tests first, yielding the - // fastest results. - try { - if (this._config.cache) { - this._testPerformanceCache = JSON.parse(fs.readFileSync( - this._getTestPerformanceCachePath(), - 'utf8')); - - } else { - this._testPerformanceCache = {}; - } - } catch (e) { - this._testPerformanceCache = {}; - } - - const cache = this._testPerformanceCache; - const timings = []; - const stats = {}; - const getFileSize = filePath => - stats[filePath] || (stats[filePath] = fs.statSync(filePath).size); - const getTestRunTime = filePath => { - if (cache[filePath]) { - return cache[filePath][0] === FAIL ? Infinity : cache[filePath][1]; - } - return null; - }; - - testPaths = testPaths. - sort((pathA, pathB) => { - const timeA = getTestRunTime(pathA); - const timeB = getTestRunTime(pathB); - if (timeA != null && timeB != null) { - return timeA < timeB ? 1 : -1; - } - return getFileSize(pathA) < getFileSize(pathB) ? 1 : -1; - }); - - testPaths.forEach(filePath => { - const timing = cache[filePath] && cache[filePath][1]; - if (timing) { - timings.push(timing); - } - }); - - return { testPaths, timings }; - } - - _cacheTestResults(aggregatedResults) { - const cache = this._testPerformanceCache; - aggregatedResults.testResults.forEach(test => { - if (test && !test.skipped) { - const perf = test.perfStats; - cache[test.testFilePath] = [ - test.numFailingTests ? FAIL : SUCCESS, - perf.end - perf.start || 0]; - - } - }); - fs.writeFileSync( - this._getTestPerformanceCachePath(), - JSON.stringify(cache)); - - } - - runTests(paths, watcher) { - const config = this._config;var _sortTests = - this._sortTests(paths);const testPaths = _sortTests.testPaths,timings = _sortTests.timings; - const aggregatedResults = createAggregatedResults(testPaths.length); - const estimatedTime = - Math.ceil(getEstimatedTime(timings, this._options.maxWorkers) / 1000); - - const onResult = (testPath, testResult) => { - if (watcher.isInterrupted()) { - return; - } - if (testResult.testResults.length === 0) { - const message = 'Your test suite must contain at least one test.'; - onFailure(testPath, { - message, - stack: new Error(message).stack }); - - return; - } - addResult(aggregatedResults, testResult); - this._dispatcher.onTestResult( - config, - testResult, - aggregatedResults); - - this._bailIfNeeded(aggregatedResults, watcher); - }; - - const onFailure = (testPath, error) => { - if (watcher.isInterrupted()) { - return; - } - const testResult = buildFailureTestResult(testPath, error); - testResult.failureMessage = formatExecError(testResult, config, testPath); - addResult(aggregatedResults, testResult); - this._dispatcher.onTestResult( - config, - testResult, - aggregatedResults); - - }; - - // Run in band if we only have one test or one worker available. - // If we are confident from previous runs that the tests will finish quickly - // we also run in band to reduce the overhead of spawning workers. - const shouldRunInBand = () => - this._options.maxWorkers <= 1 || - testPaths.length <= 1 || - - testPaths.length <= 20 && - timings.every(timing => timing < SLOW_TEST_TIME); - - - - const updateSnapshotState = () => { - const status = - snapshot.cleanup(this._hasteContext.hasteFS, config.updateSnapshot); - aggregatedResults.snapshot.filesRemoved += status.filesRemoved; - aggregatedResults.snapshot.didUpdate = config.updateSnapshot; - aggregatedResults.snapshot.failure = !!( - !aggregatedResults.snapshot.didUpdate && ( - aggregatedResults.snapshot.unchecked || - aggregatedResults.snapshot.unmatched || - aggregatedResults.snapshot.filesRemoved)); - - - }; - - const runInBand = shouldRunInBand(); - - this._dispatcher.onRunStart( - config, - aggregatedResults, - { - estimatedTime, - showStatus: !runInBand }); - - - - const testRun = - runInBand ? - this._createInBandTestRun(testPaths, watcher, onResult, onFailure) : - this._createParallelTestRun(testPaths, watcher, onResult, onFailure); - - return testRun. - catch(error => { - if (!watcher.isInterrupted()) { - throw error; - } - }). - then(() => { - updateSnapshotState(); - aggregatedResults.wasInterrupted = watcher.isInterrupted(); - - this._dispatcher.onRunComplete(config, aggregatedResults); - - const anyTestFailures = !( - aggregatedResults.numFailedTests === 0 && - aggregatedResults.numRuntimeErrorTestSuites === 0); - - const anyReporterErrors = this._dispatcher.hasErrors(); - - aggregatedResults.success = !( - anyTestFailures || - aggregatedResults.snapshot.failure || - anyReporterErrors); - - - this._cacheTestResults(aggregatedResults); - return aggregatedResults; - }); - } - - _createInBandTestRun( - testPaths, - watcher, - onResult, - onFailure) - { - const mutex = throat(1); - return testPaths.reduce( - (promise, path) => - mutex(() => - promise. - then(() => { - if (watcher.isInterrupted()) { - throw new CancelRun(); - } - - this._dispatcher.onTestStart(this._config, path); - return runTest( - path, - this._config, - this._hasteContext.resolver); - - }). - then(result => onResult(path, result)). - catch(err => onFailure(path, err))), - - Promise.resolve()); - - } - - _createParallelTestRun( - testPaths, - watcher, - onResult, - onFailure) - { - const config = this._config; - const farm = workerFarm({ - autoStart: true, - maxConcurrentCallsPerWorker: 1, - maxConcurrentWorkers: this._options.maxWorkers, - maxRetries: 2 }, - TEST_WORKER_PATH); - const mutex = throat(this._options.maxWorkers); - // Send test suites to workers continuously instead of all at once to track - // the start time of individual tests. - const runTestInWorker = (_ref) => {let path = _ref.path,config = _ref.config;return mutex(() => { - if (watcher.isInterrupted()) { - return Promise.reject(); - } - this._dispatcher.onTestStart(config, path); - return promisify(farm)({ config, path }); - });}; - - const onError = (err, path) => { - onFailure(path, err); - if (err.type === 'ProcessTerminatedError') { - console.error( - 'A worker process has quit unexpectedly! ' + - 'Most likely this an initialization error.'); - - process.exit(1); - } - }; - - const onInterrupt = new Promise((_, reject) => { - watcher.on('change', state => { - if (state.interrupted) { - reject(new CancelRun()); - } - }); - }); - - const runAllTests = Promise.all(testPaths.map(path => { - return runTestInWorker({ config, path }). - then(testResult => onResult(path, testResult)). - catch(error => onError(error, path)); - })); - - return Promise.race([ - runAllTests, - onInterrupt]). - then(() => workerFarm.end(farm)); - } - - _setupReporters() { - this.addReporter( - this._config.verbose ? - new VerboseReporter() : - new DefaultReporter()); - - - if (this._config.collectCoverage) { - // coverage reporter dependency graph is pretty big and we don't - // want to require it if we're not in the `--coverage` mode - const CoverageReporter = require('./reporters/CoverageReporter'); - this.addReporter(new CoverageReporter()); - } - - this.addReporter(new SummaryReporter()); - if (this._config.notify) { - this.addReporter(new NotifyReporter()); - } - } - - _bailIfNeeded(aggregatedResults, watcher) { - if (this._config.bail && aggregatedResults.numFailedTests !== 0) { - if (watcher.isWatchMode()) { - watcher.setState({ interrupted: true }); - } else { - this._dispatcher.onRunComplete(this._config, aggregatedResults); - process.exit(1); - } - } - }} - - -const createAggregatedResults = numTotalTestSuites => { - return { - numFailedTestSuites: 0, - numFailedTests: 0, - numPassedTestSuites: 0, - numPassedTests: 0, - numPendingTestSuites: 0, - numPendingTests: 0, - numRuntimeErrorTestSuites: 0, - numTotalTestSuites, - numTotalTests: 0, - snapshot: { - added: 0, - didUpdate: false, // is set only after the full run - failure: false, - filesAdded: 0, - // combines individual test results + results after full run - filesRemoved: 0, - filesUnmatched: 0, - filesUpdated: 0, - matched: 0, - total: 0, - unchecked: 0, - unmatched: 0, - updated: 0 }, - - startTime: Date.now(), - success: false, - testResults: [], - wasInterrupted: false }; - -}; - -const addResult = ( -aggregatedResults, -testResult) => -{ - aggregatedResults.testResults.push(testResult); - aggregatedResults.numTotalTests += - testResult.numPassingTests + - testResult.numFailingTests + - testResult.numPendingTests; - aggregatedResults.numFailedTests += testResult.numFailingTests; - aggregatedResults.numPassedTests += testResult.numPassingTests; - aggregatedResults.numPendingTests += testResult.numPendingTests; - - if (testResult.testExecError) { - aggregatedResults.numRuntimeErrorTestSuites++; - } - - if (testResult.skipped) { - aggregatedResults.numPendingTestSuites++; - } else if (testResult.numFailingTests > 0 || testResult.testExecError) { - aggregatedResults.numFailedTestSuites++; - } else { - aggregatedResults.numPassedTestSuites++; - } - - // Snapshot data - if (testResult.snapshot.added) { - aggregatedResults.snapshot.filesAdded++; - } - if (testResult.snapshot.fileDeleted) { - aggregatedResults.snapshot.filesRemoved++; - } - if (testResult.snapshot.unmatched) { - aggregatedResults.snapshot.filesUnmatched++; - } - if (testResult.snapshot.updated) { - aggregatedResults.snapshot.filesUpdated++; - } - - aggregatedResults.snapshot.added += testResult.snapshot.added; - aggregatedResults.snapshot.matched += testResult.snapshot.matched; - aggregatedResults.snapshot.unchecked += testResult.snapshot.unchecked; - aggregatedResults.snapshot.unmatched += testResult.snapshot.unmatched; - aggregatedResults.snapshot.updated += testResult.snapshot.updated; - aggregatedResults.snapshot.total += - testResult.snapshot.added + - testResult.snapshot.matched + - testResult.snapshot.unmatched + - testResult.snapshot.updated; -}; - -const buildFailureTestResult = ( -testPath, -err) => -{ - return { - console: null, - failureMessage: null, - numFailingTests: 0, - numPassingTests: 0, - numPendingTests: 0, - perfStats: { - end: 0, - start: 0 }, - - skipped: false, - snapshot: { - added: 0, - fileDeleted: false, - matched: 0, - unchecked: 0, - unmatched: 0, - updated: 0 }, - - testExecError: err, - testFilePath: testPath, - testResults: [] }; - -}; - -// Proxy class that holds all reporter and dispatchers events to each -// of them. -class ReporterDispatcher { - - - - - constructor(hasteFS, getTestSummary) { - this._runnerContext = { getTestSummary, hasteFS }; - this._reporters = []; - } - - register(reporter) { - this._reporters.push(reporter); - } - - unregister(ReporterClass) { - this._reporters = this._reporters.filter( - reporter => !(reporter instanceof ReporterClass)); - - } - - onTestResult(config, testResult, results) { - this._reporters.forEach(reporter => - reporter.onTestResult( - config, - testResult, - results, - this._runnerContext)); - - - } - - onTestStart(config, path) { - this._reporters.forEach(reporter => - reporter.onTestStart(config, path, this._runnerContext)); - - } - - onRunStart(config, results, options) { - this._reporters.forEach( - reporter => reporter.onRunStart( - config, - results, - this._runnerContext, - options)); - - - } - - onRunComplete(config, results) { - this._reporters.forEach(reporter => - reporter.onRunComplete(config, results, this._runnerContext)); - - } - - // Return a list of last errors for every reporter - getErrors() { - return this._reporters.reduce( - (list, reporter) => { - const error = reporter.getLastError(); - return error ? list.concat(error) : list; - }, - []); - - } - - hasErrors() { - return this.getErrors().length !== 0; - }} - - -const getEstimatedTime = (timings, workers) => { - if (!timings.length) { - return 0; - } - - const max = Math.max.apply(null, timings); - if (timings.length <= workers) { - return max; - } - - return Math.max( - timings.reduce((sum, time) => sum + time) / workers, - max); - -}; - -module.exports = TestRunner; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/TestWatcher.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/TestWatcher.js deleted file mode 100644 index 209277e7c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/TestWatcher.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict';var _require = - -require('events');const EventEmitter = _require.EventEmitter; - - - - - -class TestWatcher extends EventEmitter { - - - - constructor(_ref) {let isWatchMode = _ref.isWatchMode; - super(); - this.state = { interrupted: false }; - this._isWatchMode = isWatchMode; - } - - setState(state) { - Object.assign(this.state, state); - this.emit('change', this.state); - } - - isInterrupted() { - return this.state.interrupted; - } - - isWatchMode() { - return this._isWatchMode; - }} - - - -module.exports = TestWatcher; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/TestWorker.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/TestWorker.js deleted file mode 100644 index 934aa526a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/TestWorker.js +++ /dev/null @@ -1,70 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict';var _require = - - - - -require('jest-util');const separateMessageFromStack = _require.separateMessageFromStack; - -// Make sure uncaught errors are logged before we exit. -process.on('uncaughtException', err => { - console.error(err.stack); - process.exit(1); -}); - -const Runtime = require('jest-runtime'); -const runTest = require('./runTest'); - - - - - - - - -const formatError = error => { - if (typeof error === 'string') {var _separateMessageFromS = - separateMessageFromStack(error);const message = _separateMessageFromS.message,stack = _separateMessageFromS.stack; - return { - message, - stack, - type: 'Error' }; - - } - - return { - message: error.message, - stack: error.stack, - type: error.type || 'Error' }; - -}; - -const resolvers = Object.create(null); - -module.exports = (data, callback) => { - try { - const name = data.config.name; - if (!resolvers[name]) { - resolvers[name] = Runtime.createResolver( - data.config, - Runtime.createHasteMap(data.config).readModuleMap()); - - } - - runTest(data.path, data.config, resolvers[name]). - then( - result => callback(null, result), - error => callback(formatError(error))); - - } catch (error) { - callback(formatError(error)); - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/assets/jest_logo.png b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/assets/jest_logo.png deleted file mode 100644 index c52bf15030c8a23ce7130af5db3392b037e46579..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7319 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 { - if (argv.runInBand && argv.hasOwnProperty('maxWorkers')) { - throw new Error( - 'Both --runInBand and --maxWorkers were specified, but these two ' + - 'options do not make sense together. Which is it?'); - - } - - if (argv.onlyChanged && argv._.length > 0) { - throw new Error( - 'Both --onlyChanged and a path pattern were specified, but these ' + - 'two options do not make sense together. Which is it? Do you want ' + - 'to run tests for changed files? Or for a specific set of files?'); - - } - - if (argv.onlyChanged && argv.watchAll) { - throw new Error( - 'Both --onlyChanged and --watchAll were specified, but these two ' + - 'options do not make sense together. Try the --watch option which ' + - 'reruns only tests related to changed files.'); - - } - - if (argv.findRelatedTests && argv._.length === 0) { - throw new Error( - 'The --findRelatedTests option requires file paths to be specified.\n' + - 'Example usage: jest --findRelatedTests ./src/source.js ./src/index.js.'); - - } - - return true; -}; - -const usage = 'Usage: $0 [--config=] [TestPathPattern]'; - -const options = { - bail: { - alias: 'b', - description: - 'Exit the test suite immediately upon the first failing test.', - type: 'boolean' }, - - cache: { - default: true, - description: - 'Whether to use the transform cache. Disable the cache using ' + - '--no-cache.', - type: 'boolean' }, - - collectCoverageFrom: { - description: - 'relative to glob pattern matching the files that coverage ' + - 'info needs to be collected from.', - type: 'string' }, - - colors: { - description: - 'Forces test results output highlighting (even if stdout is not a TTY)', - type: 'boolean' }, - - config: { - alias: 'c', - description: - 'The path to a jest config file specifying how to find and execute ' + - 'tests. If no rootDir is set in the config, the current directory ' + - 'is assumed to be the rootDir for the project. This can also be a JSON' + - 'encoded value which Jest will use as configuration.', - type: 'string' }, - - coverage: { - description: - 'Indicates that test coverage information should be collected and ' + - 'reported in the output.', - type: 'boolean' }, - - debug: { - description: 'Print debugging info about your jest config.', - type: 'boolean' }, - - env: { - default: undefined, - description: - 'The test environment used for all tests. This can point to any file ' + - 'or node module. Examples: `jsdom`, `node` or ' + - '`path/to/my-environment.js`', - type: 'string' }, - - expand: { - alias: 'e', - default: false, - description: 'Use this flag to show full diffs instead of a patch.', - type: 'boolean' }, - - findRelatedTests: { - description: - 'Find related tests for a list of source files that were passed in ' + - 'as arguments. Useful for pre-commit hook integration to run the ' + - 'minimal amount of tests necessary.', - type: 'boolean' }, - - forceExit: { - default: false, - description: - 'Force Jest to exit after all tests have completed running. ' + - 'This is useful when resources set up by test code cannot be ' + - 'adequately cleaned up.', - type: 'boolean' }, - - json: { - description: - 'Prints the test results in JSON. This mode will send all ' + - 'other test output and user messages to stderr.', - type: 'boolean' }, - - jsonOutputFile: { - description: - 'Write test results to a file when the --json option is also specified.', - type: 'string' }, - - lastCommit: { - default: false, - description: - 'Will run all tests affected by file changes in the last commit made.', - type: 'boolean' }, - - logHeapUsage: { - description: - 'Logs the heap usage after every test. Useful to debug memory ' + - 'leaks. Use together with `--runInBand` and `--expose-gc` in node.', - type: 'boolean' }, - - maxWorkers: { - alias: 'w', - description: - 'Specifies the maximum number of workers the worker-pool will ' + - 'spawn for running tests. This defaults to the number of the cores ' + - 'available on your machine. (its usually best not to override this ' + - 'default)', - type: 'string' }, - - noStackTrace: { - description: 'Disables stack trace in test results output', - type: 'boolean' }, - - notify: { - description: 'Activates notifications for test results.', - type: 'boolean' }, - - onlyChanged: { - alias: 'o', - description: - 'Attempts to identify which tests to run based on which files have ' + - 'changed in the current repository. Only works if you\'re running ' + - 'tests in a git repository at the moment.', - type: 'boolean' }, - - runInBand: { - alias: 'i', - description: - 'Run all tests serially in the current process (rather than ' + - 'creating a worker pool of child processes that run tests). This ' + - 'is sometimes useful for debugging, but such use cases are pretty ' + - 'rare.', - type: 'boolean' }, - - setupTestFrameworkScriptFile: { - description: - 'The path to a module that runs some code to configure or set up ' + - 'the testing framework before each test.', - type: 'string' }, - - silent: { - default: false, - description: 'Prevent tests from printing messages through the console.', - type: 'boolean' }, - - testNamePattern: { - alias: 't', - description: - 'Run only tests with a name that matches the regex pattern.', - type: 'string' }, - - testPathPattern: { - description: - 'A regexp pattern string that is matched against all tests ' + - 'paths before executing the test.', - type: 'string' }, - - testRunner: { - description: - 'Allows to specify a custom test runner. Jest ships with Jasmine ' + - '1 and 2 which can be enabled by setting this option to ' + - '`jasmine1` or `jasmine2`. The default is `jasmine2`. A path to a ' + - 'custom test runner can be provided: ' + - '`/path/to/testRunner.js`.', - type: 'string' }, - - updateSnapshot: { - alias: 'u', - default: false, - description: - 'Use this flag to re-record snapshots. ' + - 'Can be used together with a test suite pattern or with ' + - '`--testNamePattern` to re-record snapshot for test matching ' + - 'the pattern', - type: 'boolean' }, - - useStderr: { - description: 'Divert all output to stderr.', - type: 'boolean' }, - - verbose: { - description: - 'Display individual test results with the test suite hierarchy.', - type: 'boolean' }, - - version: { - alias: 'v', - description: 'Print the version and exit', - type: 'boolean' }, - - watch: { - description: - 'Watch files for changes and rerun tests related to changed files. ' + - 'If you want to re-run all tests when a file has changed, use the ' + - '`--watchAll` option.', - type: 'boolean' }, - - watchAll: { - description: - 'Watch files for changes and rerun all tests. If you want to re-run ' + - 'only the tests related to the changed files, use the ' + - '`--watch` option.', - type: 'boolean' }, - - watchman: { - default: true, - description: - 'Whether to use watchman for file crawling. Disable using ' + - '--no-watchman.', - type: 'boolean' } }; - - - -module.exports = { - check, - options, - usage }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/cli/getJest.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/cli/getJest.js deleted file mode 100644 index bbcd34e28..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/cli/getJest.js +++ /dev/null @@ -1,49 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - -const chalk = require('chalk'); -const fs = require('graceful-fs'); -const path = require('path'); - -function getJest(packageRoot) { - const packageJSONPath = path.join(packageRoot, 'package.json'); - const binPath = path.join(packageRoot, 'node_modules/jest-cli'); - if (fs.existsSync(binPath)) { - /* $FlowFixMe */ - return require(binPath); - } else { - const jest = require('../jest'); - // Check if Jest is specified in `package.json` but not installed. - if (fs.existsSync(packageJSONPath)) { - /* $FlowFixMe */ - const packageJSON = require(packageJSONPath); - const dependencies = packageJSON.dependencies; - const devDependencies = packageJSON.devDependencies; - if ( - dependencies && dependencies['jest-cli'] || - devDependencies && devDependencies['jest-cli']) - { - process.on('exit', () => console.log( - chalk.red( - 'Please run `npm install` to use the version of Jest intended ' + - 'for this project.'))); - - - } - } - return jest; - } -} - -module.exports = getJest; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/cli/index.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/cli/index.js deleted file mode 100644 index a124ac8f1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/cli/index.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (c) 2014, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - -const args = require('./args'); -const getJest = require('./getJest'); -const getPackageRoot = require('jest-util').getPackageRoot; -const warnAboutUnrecognizedOptions = require('jest-util').warnAboutUnrecognizedOptions; -const yargs = require('yargs'); - -function run(argv, root) { - argv = yargs(argv || process.argv.slice(2)). - usage(args.usage). - help(). - options(args.options). - check(args.check). - argv; - - warnAboutUnrecognizedOptions(argv, args.options); - - if (argv.help) { - yargs.showHelp(); - process.on('exit', () => process.exit(1)); - return; - } - - if (!root) { - root = getPackageRoot(); - } - - getJest(root).runCLI(argv, root, result => { - const code = !result || result.success ? 0 : 1; - process.on('exit', () => process.exit(code)); - if (argv && argv.forceExit) { - process.exit(code); - } - }); -} - -exports.run = run; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/coverage.template b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/coverage.template deleted file mode 100644 index b79141b06..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/coverage.template +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2004-present Facebook. All Rights Reserved. - -// Instrumentation Header -{ - var <%= instrumented.names.statement %>; - var <%= instrumented.names.expression %>; - var <%= instrumented.names.block %>; - var nodes = <%= coverageStorageVar %>.nodes = {}; - var blocks = <%= coverageStorageVar %>.blocks = {}; - - <%= instrumented.names.statement %> = function(i) { - var node = nodes[i] = (nodes[i] || {index: i, count:0}) - node.count++; - }; - - <%= instrumented.names.expression %> = function(i) { - var node = nodes[i] = (nodes[i] || {index: i, count:0}) - node.count++; - }; - - <%= instrumented.names.block %> = function(i) { - var block = blocks[i] = (blocks[i] || {index: i, count:0}) - block.count++; - }; -}; -//////////////////////// - -// Instrumented Code -<%= source %> diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/generateEmptyCoverage.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/generateEmptyCoverage.js deleted file mode 100644 index 0e0482606..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/generateEmptyCoverage.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - -const IstanbulInstrument = require('istanbul-lib-instrument');var _require = - -require('jest-runtime');const transformSource = _require.transformSource,shouldInstrument = _require.shouldInstrument; - -module.exports = function (source, filename, config) { - if (shouldInstrument(filename, config)) { - // Transform file without instrumentation first, to make sure produced - // source code is ES6 (no flowtypes etc.) and can be instrumented - source = transformSource(filename, config, source, false); - const instrumenter = IstanbulInstrument.createInstrumenter(); - instrumenter.instrumentSync(source, filename); - return instrumenter.fileCoverage; - } else { - return null; - } -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/jest.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/jest.js deleted file mode 100644 index 37596778c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/jest.js +++ /dev/null @@ -1,456 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - -const realFs = require('fs'); -const fs = require('graceful-fs'); -fs.gracefulify(realFs); - -const Runtime = require('jest-runtime'); -const SearchSource = require('./SearchSource'); -const TestRunner = require('./TestRunner');var _require = - -require('jest-util');const Console = _require.Console,clearLine = _require.clearLine;var _require2 = -require('./cli');const run = _require2.run; -const ansiEscapes = require('ansi-escapes'); -const chalk = require('chalk'); -const formatTestResults = require('./lib/formatTestResults'); -const os = require('os'); -const path = require('path'); -const preRunMessage = require('./preRunMessage'); -const readConfig = require('jest-config').readConfig; -const sane = require('sane'); -const which = require('which'); -const TestWatcher = require('./TestWatcher'); - -const CLEAR = '\x1B[2J\x1B[H'; -const VERSION = require('../package.json').version; -const WATCHER_DEBOUNCE = 200; -const WATCHMAN_BIN = 'watchman'; -const KEYS = { - A: '61', - BACKSPACE: process.platform === 'win32' ? '08' : '7f', - CONTROL_C: '03', - CONTROL_D: '04', - ENTER: '0d', - ESCAPE: '1b', - O: '6f', - P: '70', - Q: '71', - U: '75' }; - - -const getMaxWorkers = argv => { - if (argv.runInBand) { - return 1; - } else if (argv.maxWorkers) { - return parseInt(argv.maxWorkers, 10); - } else { - const cpus = os.cpus().length; - return Math.max(argv.watch ? Math.floor(cpus / 2) : cpus - 1, 1); - } -}; - -const buildTestPathPatternInfo = argv => { - const defaultPattern = { - input: '', - shouldTreatInputAsPattern: false, - testPathPattern: '' }; - - const validatePattern = patternInfo => {const - testPathPattern = patternInfo.testPathPattern; - if (testPathPattern) { - try { - /* eslint-disable no-new */ - new RegExp(testPathPattern); - /* eslint-enable no-new */ - } catch (error) { - clearLine(process.stdout); - console.log(chalk.red( - 'Invalid testPattern ' + String(testPathPattern) + ' supplied. ' + - 'Running all tests instead.')); - - return defaultPattern; - } - } - return patternInfo; - }; - if (argv.onlyChanged) { - return { - input: '', - lastCommit: argv.lastCommit, - onlyChanged: true, - watch: argv.watch }; - - } - if (argv.testPathPattern) { - return validatePattern({ - input: argv.testPathPattern, - shouldTreatInputAsPattern: true, - testPathPattern: argv.testPathPattern }); - - } - if (argv._ && argv._.length) { - return validatePattern({ - findRelatedTests: argv.findRelatedTests, - input: argv._.join(' '), - paths: argv._, - shouldTreatInputAsPattern: false, - testPathPattern: argv._.join('|') }); - - } - return defaultPattern; -}; - -const getTestSummary = ( -argv, -patternInfo) => -{ - const testPathPattern = SearchSource.getTestPathPattern(patternInfo); - const testInfo = patternInfo.onlyChanged ? - chalk.dim(' related to changed files') : - patternInfo.input !== '' ? - chalk.dim(' matching ') + testPathPattern : - ''; - - const nameInfo = argv.testNamePattern ? - chalk.dim(' with tests matching ') + `"${ argv.testNamePattern }"` : - ''; - - return ( - chalk.dim('Ran all test suites') + - testInfo + - nameInfo + - chalk.dim('.')); - -}; - -const getWatcher = ( -config, -packageRoot, -callback, -options) => -{ - which(WATCHMAN_BIN, (err, resolvedPath) => { - const watchman = !err && options.useWatchman && resolvedPath; - const glob = config.moduleFileExtensions.map(ext => '**/*' + ext); - const watcher = sane(packageRoot, { glob, watchman }); - callback(watcher); - }); -}; - -const runJest = (config, argv, pipe, testWatcher, onComplete) => { - const maxWorkers = getMaxWorkers(argv); - const localConsole = new Console(pipe, pipe); - let patternInfo = buildTestPathPatternInfo(argv); - return Runtime.createHasteContext(config, { - console: localConsole, - maxWorkers }). - then(hasteMap => { - const source = new SearchSource(hasteMap, config); - return source.getTestPaths(patternInfo). - then(data => { - if (!data.paths.length) { - if (patternInfo.onlyChanged && data.noSCM) { - if (config.watch) { - // Run all the tests - setWatchMode(argv, 'watchAll', { - noSCM: true }); - - patternInfo = buildTestPathPatternInfo(argv); - return source.getTestPaths(patternInfo); - } else { - localConsole.log( - 'Jest can only find uncommitted changed files in a git or hg ' + - 'repository. If you make your project a git or hg repository ' + - '(`git init` or `hg init`), Jest will be able to only ' + - 'run tests related to files changed since the last commit.'); - - } - } - - localConsole.log( - source.getNoTestsFoundMessage(patternInfo, config, data)); - - } - return data; - }).then(data => { - if (data.paths.length === 1 && config.verbose !== false) { - config = Object.assign({}, config, { verbose: true }); - } - - return new TestRunner( - hasteMap, - config, - { - getTestSummary: () => getTestSummary(argv, patternInfo), - maxWorkers }). - - runTests(data.paths, testWatcher); - }). - then(runResults => { - if (config.testResultsProcessor) { - /* $FlowFixMe */ - const processor = require(config.testResultsProcessor); - processor(runResults); - } - if (argv.json) { - if (argv.jsonOutputFile) { - const outputFile = path.resolve(process.cwd(), argv.jsonOutputFile); - - fs.writeFileSync( - outputFile, - JSON.stringify(formatTestResults(runResults, config))); - - process.stdout.write( - `Test results written to: ` + - `${ path.relative(process.cwd(), outputFile) }\n`); - - } else { - process.stdout.write( - JSON.stringify(formatTestResults(runResults, config))); - - } - } - return onComplete && onComplete(runResults); - }).catch(error => { - throw error; - }); - }); -}; - -const setWatchMode = (argv, mode, options) => { - if (mode === 'watch') { - argv.watch = true; - argv.watchAll = false; - } else if (mode === 'watchAll') { - argv.watch = false; - argv.watchAll = true; - } - - // Reset before setting these to the new values - argv._ = options && options.pattern || ''; - argv.onlyChanged = false; - argv.onlyChanged = - buildTestPathPatternInfo(argv).input === '' && !argv.watchAll; - - if (options && options.noSCM) { - argv.noSCM = true; - } -}; - -const runCLI = ( -argv, -root, -onComplete) => -{ - const pipe = argv.json ? process.stderr : process.stdout; - argv = argv || {}; - if (argv.version) { - pipe.write(`v${ VERSION }\n`); - onComplete && onComplete(); - return; - } - - readConfig(argv, root). - then(config => { - if (argv.debug) { - /* $FlowFixMe */ - const testFramework = require(config.testRunner); - pipe.write('jest version = ' + VERSION + '\n'); - pipe.write('test framework = ' + testFramework.name + '\n'); - pipe.write('config = ' + JSON.stringify(config, null, ' ') + '\n'); - } - if (argv.watch || argv.watchAll) { - setWatchMode(argv, argv.watch ? 'watch' : 'watchAll', { - pattern: argv._ }); - - - let isRunning = false; - let isEnteringPattern = false; - let currentPattern = ''; - let timer; - - let testWatcher; - const writeCurrentPattern = () => { - clearLine(pipe); - pipe.write(chalk.dim(' pattern \u203A ') + currentPattern); - }; - - const startRun = function () {let overrideConfig = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - if (isRunning) { - return null; - } - - testWatcher = new TestWatcher({ isWatchMode: true }); - pipe.write(CLEAR); - preRunMessage.print(pipe); - isRunning = true; - return runJest( - Object.freeze(Object.assign({}, config, overrideConfig)), - argv, - pipe, - testWatcher, - results => { - isRunning = false; - /* eslint-disable max-len */ - const messages = [ - '\n' + chalk.bold('Watch Usage'), - argv.watch ? - chalk.dim(' \u203A Press ') + 'a' + chalk.dim(' to run all tests.') : - null, - (argv.watchAll || argv._) && !argv.noSCM ? - chalk.dim(' \u203A Press ') + 'o' + chalk.dim(' to only run tests related to changed files.') : - null, - results.snapshot.failure ? - chalk.dim(' \u203A Press ') + 'u' + chalk.dim(' to update failing snapshots.') : - null, - chalk.dim(' \u203A Press ') + 'p' + chalk.dim(' to filter by a filename regex pattern.'), - chalk.dim(' \u203A Press ') + 'q' + chalk.dim(' to quit watch mode.'), - chalk.dim(' \u203A Press ') + 'Enter' + chalk.dim(' to trigger a test run.')]; - - /* eslint-enable max-len */ - console.log(messages.filter(message => !!message).join('\n')); - }). - then( - () => {}, - error => console.error(chalk.red(error.stack))); - - }; - - const onKeypress = key => { - if (key === KEYS.CONTROL_C || key === KEYS.CONTROL_D) { - process.exit(0); - return; - } - if (isEnteringPattern) { - switch (key) { - case KEYS.ENTER: - isEnteringPattern = false; - setWatchMode(argv, 'watch', { - pattern: [currentPattern] }); - - startRun(); - break; - case KEYS.ESCAPE: - isEnteringPattern = false; - pipe.write(ansiEscapes.eraseLines(2)); - currentPattern = argv._[0]; - break; - default: - const char = new Buffer(key, 'hex').toString(); - currentPattern = key === KEYS.BACKSPACE ? - currentPattern.slice(0, -1) : - currentPattern + char; - writeCurrentPattern(); - break;} - - return; - } - - // Abort test run - if ( - isRunning && - testWatcher && - [KEYS.Q, KEYS.ENTER, KEYS.A, KEYS.O, KEYS.P].includes(key)) - { - testWatcher.setState({ interrupted: true }); - return; - } - - switch (key) { - case KEYS.Q: - process.exit(0); - return; - case KEYS.ENTER: - startRun(); - break; - case KEYS.U: - startRun({ updateSnapshot: true }); - break; - case KEYS.A: - setWatchMode(argv, 'watchAll'); - startRun(); - break; - case KEYS.O: - setWatchMode(argv, 'watch'); - startRun(); - break; - case KEYS.P: - isEnteringPattern = true; - currentPattern = ''; - pipe.write('\n'); - writeCurrentPattern(); - break;} - - }; - - const onFileChange = (_, filePath) => { - filePath = path.join(root, filePath); - const coverageDirectory = - config.coverageDirectory || - path.resolve(config.rootDir, 'coverage'); - const isValidPath = - config.testPathDirs.some(dir => filePath.startsWith(dir)) && - !filePath.includes(coverageDirectory); - - if (!isValidPath) { - return; - } - if (timer) { - clearTimeout(timer); - timer = null; - } - if (testWatcher && testWatcher.isInterrupted()) { - return; - } - timer = setTimeout(startRun, WATCHER_DEBOUNCE); - }; - - if (typeof process.stdin.setRawMode === 'function') { - process.stdin.setRawMode(true); - process.stdin.resume(); - process.stdin.setEncoding('hex'); - process.stdin.on('data', onKeypress); - } - const callback = watcher => { - watcher.on('error', error => { - watcher.close(); - getWatcher(config, root, callback, { useWatchman: false }); - }); - watcher.on('all', onFileChange); - }; - getWatcher(config, root, callback, { useWatchman: true }); - startRun(); - return Promise.resolve(); - } else { - preRunMessage.print(pipe); - const testWatcher = new TestWatcher({ isWatchMode: false }); - return runJest(config, argv, pipe, testWatcher, onComplete); - } - }). - catch(error => { - clearLine(process.stderr); - clearLine(process.stdout); - console.error(chalk.red(error.stack)); - process.exit(1); - }); -}; - -module.exports = { - SearchSource, - TestRunner, - getVersion: () => VERSION, - run, - runCLI }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/lib/BufferedConsole.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/lib/BufferedConsole.js deleted file mode 100644 index 6a6059fb4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/lib/BufferedConsole.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - -const Console = require('console').Console; - -const callsites = require('callsites'); -const format = require('util').format; - -class BufferedConsole extends Console { - - - - constructor() { - const buffer = []; - super({ write: message => BufferedConsole.write(buffer, 'log', message) }); - this._buffer = buffer; - } - - static write( - buffer, - type, - message, - level) - { - const call = callsites()[level != null ? level : 2]; - const origin = call.getFileName() + ':' + call.getLineNumber(); - buffer.push({ message, origin, type }); - return buffer; - } - - log() { - BufferedConsole.write(this._buffer, 'log', format.apply(null, arguments)); - } - - info() { - BufferedConsole.write(this._buffer, 'info', format.apply(null, arguments)); - } - - warn() { - BufferedConsole.write(this._buffer, 'warn', format.apply(null, arguments)); - } - - error() { - BufferedConsole.write(this._buffer, 'error', format.apply(null, arguments)); - } - - getBuffer() { - return this._buffer; - }} - - - -module.exports = BufferedConsole; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/lib/formatTestResults.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/lib/formatTestResults.js deleted file mode 100644 index 4d0088a8e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/lib/formatTestResults.js +++ /dev/null @@ -1,99 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict'; - - - - - - - - - - -const formatResult = ( -testResult, -config, -codeCoverageFormatter, -reporter) => -{ - const output = { - message: '', - name: testResult.testFilePath, - summary: '' }; - - - if (testResult.testExecError) { - const currTime = Date.now(); - output.status = 'failed'; - output.message = testResult.testExecError; - output.startTime = currTime; - output.endTime = currTime; - output.coverage = {}; - } else { - const allTestsPassed = testResult.numFailingTests === 0; - output.status = allTestsPassed ? 'passed' : 'failed'; - output.startTime = testResult.perfStats.start; - output.endTime = testResult.perfStats.end; - output.coverage = codeCoverageFormatter(testResult.coverage, reporter); - } - - output.assertionResults = testResult.testResults.map(formatTestAssertion); - - if (testResult.failureMessage) { - output.message = testResult.failureMessage; - } - - return output; -}; - -function formatTestAssertion( -assertion) -{ - const result = { - status: assertion.status, - title: assertion.title }; - - if (assertion.failureMessages) { - result.failureMessages = assertion.failureMessages; - } - return result; -} - -function formatTestResults( -results, -config, -codeCoverageFormatter, -reporter) -{ - const formatter = codeCoverageFormatter || (coverage => coverage); - - const testResults = results.testResults.map(testResult => formatResult( - testResult, - config, - formatter, - reporter)); - - - return { - numFailedTests: results.numFailedTests, - numPassedTests: results.numPassedTests, - numPendingTests: results.numPendingTests, - numRuntimeErrorTestSuites: results.numRuntimeErrorTestSuites, - numTotalTestSuites: results.numTotalTestSuites, - numTotalTests: results.numTotalTests, - startTime: results.startTime, - success: results.success, - testResults }; - -} - -module.exports = formatTestResults; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/lib/promisify.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/lib/promisify.js deleted file mode 100644 index 21d20cfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/lib/promisify.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ -'use strict'; - -module.exports = function promisify(fn) { - return function () { - const args = Array.prototype.slice.call(arguments); - return new Promise((resolve, reject) => { - args.push((err, res) => { - if (err) { - reject(err); - } else { - resolve(res); - } - }); - - fn.apply(this, args); - }); - }; -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/preRunMessage.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/preRunMessage.js deleted file mode 100644 index 77f18bca3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/preRunMessage.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict';var _require = - -require('jest-util');const clearLine = _require.clearLine; -const chalk = require('chalk'); -const isCI = require('is-ci'); - -const print = stream => { - if (process.stdout.isTTY && !isCI) { - stream.write(chalk.bold.dim('Determining test suites to run...')); - } -}; - -const remove = stream => { - if (stream.isTTY && !isCI) { - clearLine(stream); - } -}; - -module.exports = { - print, - remove }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/BaseReporter.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/BaseReporter.js deleted file mode 100644 index dfc9cfeac..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/BaseReporter.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - -const preRunMessage = require('../preRunMessage'); - -class BaseReporter { - - - log(message) { - process.stderr.write(message + '\n'); - } - - onRunStart( - config, - results, - runnerContext, - options) - { - preRunMessage.remove(process.stderr); - } - - onTestResult( - config, - testResult, - results) - {} - - onTestStart( - config, - path, - runnerContext) - {} - - onRunComplete( - config, - aggregatedResults, - runnerContext) - {} - - _setError(error) { - this._error = error; - } - - // Return an error that occured during reporting. This error will - // define whether the test run was successful or failed. - getLastError() { - return this._error; - }} - - -module.exports = BaseReporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/CoverageReporter.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/CoverageReporter.js deleted file mode 100644 index 3854061e0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/CoverageReporter.js +++ /dev/null @@ -1,177 +0,0 @@ -/** -* Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -* -* This source code is licensed under the BSD-style license found in the -* LICENSE file in the root directory of this source tree. An additional grant -* of patent rights can be found in the PATENTS file in the same directory. -* -* -*/ -'use strict'; - - - - - - - - - - - - -const BaseReporter = require('./BaseReporter');var _require = - -require('jest-util');const clearLine = _require.clearLine;var _require2 = -require('istanbul-api');const createReporter = _require2.createReporter; -const chalk = require('chalk'); -const fs = require('fs'); -const generateEmptyCoverage = require('../generateEmptyCoverage'); -const isCI = require('is-ci'); -const istanbulCoverage = require('istanbul-lib-coverage'); - -const FAIL_COLOR = chalk.bold.red; -const RUNNING_TEST_COLOR = chalk.bold.dim; - -const isInteractive = process.stdout.isTTY && !isCI; - -class CoverageReporter extends BaseReporter { - - - constructor() { - super(); - this._coverageMap = istanbulCoverage.createCoverageMap({}); - } - - onTestResult( - config, - testResult, - aggregatedResults) - { - if (testResult.coverage) { - this._coverageMap.merge(testResult.coverage); - } - } - - onRunComplete( - config, - aggregatedResults, - runnerContext) - { - this._addUntestedFiles(config, runnerContext); - const reporter = createReporter(); - try { - if (config.coverageDirectory) { - reporter.dir = config.coverageDirectory; - } - - let coverageReporters = config.coverageReporters || []; - if ( - !config.useStderr && - coverageReporters.length && - coverageReporters.indexOf('text') === -1) - { - coverageReporters = coverageReporters.concat(['text-summary']); - } - - reporter.addAll(coverageReporters); - reporter.write(this._coverageMap); - } catch (e) { - console.error(chalk.red(` - Failed to write coverage reports: - ERROR: ${ e.toString() } - STACK: ${ e.stack } - `)); - } - - this._checkThreshold(config); - } - - _addUntestedFiles(config, runnerContext) { - if (config.collectCoverageFrom && config.collectCoverageFrom.length) { - if (isInteractive) { - process.stderr.write(RUNNING_TEST_COLOR( - 'Running coverage on untested files...')); - - } - const files = runnerContext.hasteFS.matchFilesWithGlob( - config.collectCoverageFrom, - config.rootDir); - - - files.forEach(filename => { - if (!this._coverageMap.data[filename]) { - try { - const source = fs.readFileSync(filename).toString(); - const coverage = generateEmptyCoverage(source, filename, config); - if (coverage) { - this._coverageMap.addFileCoverage(coverage); - } - } catch (e) { - console.error(chalk.red(` - Failed to collect coverage from ${ filename } - ERROR: ${ e } - STACK: ${ e.stack } - `)); - } - } - }); - if (isInteractive) { - clearLine(process.stderr); - } - } - } - - _checkThreshold(config) { - if (config.coverageThreshold) { - const results = this._coverageMap.getCoverageSummary().toJSON(); - - function check(name, thresholds, actuals) { - return [ - 'statements', - 'branches', - 'lines', - 'functions']. - reduce((errors, key) => { - const actual = actuals[key].pct; - const actualUncovered = actuals[key].total - actuals[key].covered; - const threshold = thresholds[key]; - - if (threshold != null) { - if (threshold < 0) { - if (threshold * -1 < actualUncovered) { - errors.push( - `Jest: Uncovered count for ${ key } (${ actualUncovered })` + - `exceeds ${ name } threshold (${ -1 * threshold })`); - - } - } else if (actual < threshold) { - errors.push( - `Jest: Coverage for ${ key } (${ actual }` + - `%) does not meet ${ name } threshold (${ threshold }%)`); - - } - } - return errors; - }, []); - } - const errors = check( - 'global', - config.coverageThreshold.global, - results); - - - if (errors.length > 0) { - this.log(`${ FAIL_COLOR(errors.join('\n')) }`); - this._setError(new Error(errors.join('\n'))); - } - } - } - - // Only exposed for the internal runner. Should not be used - getCoverageMap() { - return this._coverageMap; - }} - - -module.exports = CoverageReporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/DefaultReporter.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/DefaultReporter.js deleted file mode 100644 index b4ec29c29..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/DefaultReporter.js +++ /dev/null @@ -1,168 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -/* global stream$Writable, tty$WriteStream */ - -'use strict'; - - - - - -const BaseReporter = require('./BaseReporter'); -const Status = require('./Status');var _require = - -require('jest-util');const clearLine = _require.clearLine; -const chalk = require('chalk'); -const getConsoleOutput = require('./getConsoleOutput'); -const getResultHeader = require('./getResultHeader'); -const isCI = require('is-ci'); - - - -const TITLE_BULLET = chalk.bold('\u25cf '); - -const isInteractive = process.stdin.isTTY && !isCI; - -class DefaultReporter extends BaseReporter { - // ANSI clear sequence for the last printed status - - - - - - - - constructor() { - super(); - this._clear = ''; - this._out = process.stdout.write.bind(process.stdout); - this._err = process.stderr.write.bind(process.stderr); - this._status = new Status(); - this._wrapStdio(process.stdout); - this._wrapStdio(process.stderr); - this._status.onChange(() => { - this._clearStatus(); - this._printStatus(); - }); - } - - _wrapStdio(stream) { - const originalWrite = stream.write; - - let buffer = []; - let timeout = null; - - const doFlush = () => { - const string = buffer.join(''); - buffer = []; - // This is to avoid conflicts between random output and status text - this._clearStatus(); - originalWrite.call(stream, string); - this._printStatus(); - }; - - const flush = () => { - // If the process blows up no errors would be printed. - // There should be a smart way to buffer stderr, but for now - // we just won't buffer it. - if (stream === process.stderr) { - doFlush(); - } else { - if (!timeout) { - timeout = setTimeout(() => { - doFlush(); - timeout = null; - }, 100); - } - } - }; - - // $FlowFixMe - stream.write = chunk => { - buffer.push(chunk); - flush(); - return true; - }; - } - - _clearStatus() { - if (isInteractive) { - this._out(this._clear); - } - } - - _printStatus() {var _status$get = - this._status.get();const content = _status$get.content,clear = _status$get.clear; - this._clear = clear; - if (isInteractive) { - this._out(content); - } - } - - onRunStart( - config, - aggregatedResults, - runnerContext, - options) - { - this._status.runStarted(aggregatedResults, options); - } - - onTestStart(config, testPath) { - this._status.testStarted(testPath, config); - } - - onRunComplete() { - this._status.runFinished(); - // $FlowFixMe - process.stdout.write = this._out; - // $FlowFixMe - process.stderr.write = this._err; - clearLine(process.stderr); - } - - onTestResult( - config, - testResult, - aggregatedResults) - { - this._status.testFinished(config, testResult, aggregatedResults); - this._printTestFileSummary(testResult.testFilePath, config, testResult); - } - - _printTestFileSummary( - testPath, - config, - result) - { - if (!result.skipped) { - this.log(getResultHeader(result, config)); - - const consoleBuffer = result.console; - if (consoleBuffer && consoleBuffer.length) { - this.log( - ' ' + TITLE_BULLET + 'Console\n\n' + - getConsoleOutput( - config.rootDir, - !!config.verbose, - consoleBuffer)); - - - } - - if (result.failureMessage) { - this.log(result.failureMessage); - } - } - }} - - -module.exports = DefaultReporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/NotifyReporter.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/NotifyReporter.js deleted file mode 100644 index e831e790a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/NotifyReporter.js +++ /dev/null @@ -1,53 +0,0 @@ -/** -* Copyright (c) 2014-present, Facebook, Inc. All rights reserved. -* -* This source code is licensed under the BSD-style license found in the -* LICENSE file in the root directory of this source tree. An additional grant -* of patent rights can be found in the PATENTS file in the same directory. -* -* -*/ -'use strict'; - - - - -const BaseReporter = require('./BaseReporter'); -const notifier = require('node-notifier'); -const path = require('path'); -const util = require('util'); - -const isDarwin = process.platform === 'darwin'; - -const icon = path.resolve(__dirname, '../assets/jest_logo.png'); - -class NotifyReporter extends BaseReporter { - onRunComplete(config, result) { - let title; - let message; - const success = result.numFailedTests === 0 && - result.numRuntimeErrorTestSuites === 0; - - if (success) { - title = util.format('%d%% Passed', 100); - message = util.format( - (isDarwin ? '\u2705 ' : '') + '%d tests passed', - result.numPassedTests); - - } else { - title = util.format( - '%d%% Failed', - Math.ceil(result.numFailedTests / result.numTotalTests * 100)); - - message = util.format( - (isDarwin ? '\u26D4\uFE0F ' : '') + '%d of %d tests failed', - result.numFailedTests, - result.numTotalTests); - - } - - notifier.notify({ icon, message, title }); - }} - - -module.exports = NotifyReporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/Status.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/Status.js deleted file mode 100644 index e4bd64561..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/Status.js +++ /dev/null @@ -1,200 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict';var _require = - - - - - -require('./utils');const getSummary = _require.getSummary,trimAndFormatPath = _require.trimAndFormatPath,wrapAnsiString = _require.wrapAnsiString; -const chalk = require('chalk'); - -const RUNNING_TEXT = ' RUNS '; -const RUNNING = chalk.reset.inverse.yellow.bold(RUNNING_TEXT) + ' '; - -/** - * This class is a perf optimization for sorting the list of currently - * running tests. It tries to keep tests in the same positions without - * shifting the whole list. - */ -class CurrentTestList { - - - constructor() { - this._array = []; - } - - add(testPath, config) { - const index = this._array.indexOf(null); - const record = { config, testPath }; - if (index !== -1) { - this._array[index] = record; - } else { - this._array.push(record); - } - } - - delete(testPath) { - const record = this._array.find( - record => record && record.testPath === testPath); - - this._array[this._array.indexOf(record || null)] = null; - } - - get() { - return this._array; - }} - - -/** - * A class that generates the CLI status of currently running tests - * and also provides an ANSI escape sequence to remove status lines - * from the terminal. - */ -class Status { - - - - - - - - - - - - - constructor() { - this._cache = null; - this._currentTests = new CurrentTestList(); - this._done = false; - this._emitScheduled = false; - this._estimatedTime = 0; - this._height = 0; - this._showStatus = false; - } - - onChange(callback) { - this._callback = callback; - } - - runStarted( - aggregatedResults, - options) - { - this._estimatedTime = options && options.estimatedTime || 0; - this._showStatus = options && options.showStatus; - this._interval = setInterval(() => this._tick(), 1000); - this._aggregatedResults = aggregatedResults; - this._debouncedEmit(); - } - - runFinished() { - this._done = true; - clearInterval(this._interval); - this._emit(); - } - - testStarted(testPath, config) { - this._currentTests.add(testPath, config); - if (!this._showStatus) { - this._emit(); - } else { - this._debouncedEmit(); - } - } - - testFinished( - config, - testResult, - aggregatedResults) - {const - testFilePath = testResult.testFilePath; - this._aggregatedResults = aggregatedResults; - this._currentTests.delete(testFilePath); - this._debouncedEmit(); - } - - get() { - if (this._cache) { - return this._cache; - } - - if (this._done) { - return { clear: '', content: '' }; - } - - // $FlowFixMe - const width = process.stdout.columns; - let content = '\n'; - this._currentTests.get().forEach(record => { - if (record) {const - config = record.config,testPath = record.testPath; - content += wrapAnsiString( - RUNNING + trimAndFormatPath( - RUNNING_TEXT.length + 1, - config, - testPath, - width), - - width) + - '\n'; - } - }); - - if (this._showStatus && this._aggregatedResults) { - content += '\n' + getSummary( - this._aggregatedResults, - { - estimatedTime: this._estimatedTime, - roundTime: true, - width }); - - - } - - let height = 0; - - for (let i = 0; i < content.length; i++) { - if (content[i] === '\n') { - height++; - } - } - - const clear = '\r\x1B[K\r\x1B[1A'.repeat(height); - return this._cache = { clear, content }; - } - - _emit() { - this._cache = null; - this._lastUpdated = Date.now(); - this._callback(); - } - - _debouncedEmit() { - if (!this._emitScheduled) { - // Perf optimization to avoid two separate renders When - // one test finishes and another test starts executing. - this._emitScheduled = true; - setTimeout(() => { - this._emit(); - this._emitScheduled = false; - }, 100); - } - } - - _tick() { - this._debouncedEmit(); - }} - - - -module.exports = Status; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/SummaryReporter.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/SummaryReporter.js deleted file mode 100644 index e0493f29f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/SummaryReporter.js +++ /dev/null @@ -1,222 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - -const BaseReporter = require('./BaseReporter');var _require = - -require('./utils');const getSummary = _require.getSummary,pluralize = _require.pluralize; -const chalk = require('chalk'); -const getResultHeader = require('./getResultHeader'); - -const ARROW = ' \u203A '; -const FAIL_COLOR = chalk.bold.red; -const SNAPSHOT_ADDED = chalk.bold.green; -const SNAPSHOT_NOTE = chalk.dim; -const SNAPSHOT_REMOVED = chalk.bold.red; -const SNAPSHOT_SUMMARY = chalk.bold; -const SNAPSHOT_UPDATED = chalk.bold.green; -const TEST_SUMMARY_THRESHOLD = 20; - -const NPM_EVENTS = new Set([ -'prepublish', -'publish', -'postpublish', -'preinstall', -'install', -'postinstall', -'preuninstall', -'uninstall', -'postuninstall', -'preversion', -'version', -'postversion', -'pretest', -'test', -'posttest', -'prestop', -'stop', -'poststop', -'prestart', -'start', -'poststart', -'prerestart', -'restart', -'postrestart']); - - -class SummareReporter extends BaseReporter { - - - - constructor() { - super(); - this._estimatedTime = 0; - } - - // If we write more than one character at a time it is possible that - // Node.js exits in the middle of printing the result. This was first observed - // in Node.js 0.10 and still persists in Node.js 6.7+. - // Let's print the test failure summary character by character which is safer - // when hundreds of tests are failing. - _write(string) { - for (let i = 0; i < string.length; i++) { - process.stderr.write(string.charAt(i)); - } - } - - onRunStart( - config, - aggregatedResults, - runnerContext, - options) - { - super.onRunStart(config, aggregatedResults, runnerContext, options); - this._estimatedTime = options.estimatedTime; - } - - onRunComplete( - config, - aggregatedResults, - runnerContext) - {const - numTotalTestSuites = aggregatedResults.numTotalTestSuites,testResults = aggregatedResults.testResults,wasInterrupted = aggregatedResults.wasInterrupted; - if (numTotalTestSuites) { - const lastResult = testResults[testResults.length - 1]; - // Print a newline if the last test did not fail to line up newlines - // similar to when an error would have been thrown in the test. - if ( - !config.verbose && - lastResult && - !lastResult.numFailingTests && - !lastResult.testExecError) - { - this.log(''); - } - - this._printSummary(aggregatedResults, config); - this._printSnapshotSummary(aggregatedResults.snapshot, config); - - if (numTotalTestSuites) { - const testSummary = wasInterrupted ? - chalk.bold.red('Test run was interrupted.') : - runnerContext.getTestSummary(); - this.log( - getSummary(aggregatedResults, { - estimatedTime: this._estimatedTime }) + - '\n' + testSummary); - - } - } - } - - _printSnapshotSummary(snapshots, config) { - if ( - snapshots.added || - snapshots.filesRemoved || - snapshots.unchecked || - snapshots.unmatched || - snapshots.updated) - { - let updateCommand; - const event = process.env.npm_lifecycle_event; - const prefix = NPM_EVENTS.has(event) ? '' : 'run '; - if (config.watch) { - updateCommand = 'press `u`'; - } else if (event) { - updateCommand = `run with \`npm ${ prefix + event } -- -u\``; - } else { - updateCommand = 're-run with `-u`'; - } - - this.log(SNAPSHOT_SUMMARY('Snapshot Summary')); - if (snapshots.added) { - this.log( - SNAPSHOT_ADDED(ARROW + pluralize('snapshot', snapshots.added)) + - ` written in ${ pluralize('test suite', snapshots.filesAdded) }.`); - - } - - if (snapshots.unmatched) { - this.log( - FAIL_COLOR(ARROW + pluralize('snapshot test', snapshots.unmatched)) + - ` failed in ${ pluralize('test suite', snapshots.filesUnmatched) }. ` + - SNAPSHOT_NOTE( - 'Inspect your code changes or ' + - updateCommand + ' to update them.')); - - - } - - if (snapshots.updated) { - this.log( - SNAPSHOT_UPDATED(ARROW + pluralize('snapshot', snapshots.updated)) + - ` updated in ${ pluralize('test suite', snapshots.filesUpdated) }.`); - - } - - if (snapshots.filesRemoved) { - this.log( - SNAPSHOT_REMOVED(ARROW + pluralize( - 'obsolete snapshot file', - snapshots.filesRemoved)) + ( - - snapshots.didUpdate ? - ' removed.' : - ' found, ' + updateCommand + ' to remove ' + ( - snapshots.filesRemoved === 1 ? 'it' : 'them.') + '.')); - - } - - if (snapshots.unchecked) { - this.log( - FAIL_COLOR(ARROW + pluralize( - 'obsolete snapshot', - snapshots.unchecked)) + ( - - snapshots.didUpdate ? - ' removed.' : - ' found, ' + updateCommand + ' to remove ' + ( - snapshots.filesRemoved === 1 ? 'it' : 'them') + '.')); - - } - - this.log(''); // print empty line - } - } - - _printSummary(aggregatedResults, config) { - // If there were any failing tests and there was a large number of tests - // executed, re-print the failing results at the end of execution output. - const failedTests = aggregatedResults.numFailedTests; - const runtimeErrors = aggregatedResults.numRuntimeErrorTestSuites; - if ( - failedTests + runtimeErrors > 0 && - aggregatedResults.numTotalTestSuites > TEST_SUMMARY_THRESHOLD) - { - this.log(chalk.bold('Summary of all failing tests')); - aggregatedResults.testResults.forEach(testResult => {const - failureMessage = testResult.failureMessage; - if (failureMessage) { - this._write( - getResultHeader(testResult, config) + '\n' + - failureMessage + '\n'); - - } - }); - this.log(''); // print empty line - } - }} - - -module.exports = SummareReporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/VerboseReporter.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/VerboseReporter.js deleted file mode 100644 index 00c51386a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/VerboseReporter.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - - - - - -const DefaultReporter = require('./DefaultReporter'); -const chalk = require('chalk'); -const isWindows = process.platform === 'win32'; - -class VerboseReporter extends DefaultReporter { - - static groupTestsBySuites(testResults) { - const root = { suites: [], tests: [], title: '' }; - testResults.forEach(testResult => { - let targetSuite = root; - - // Find the target suite for this test, - // creating nested suites as necessary. - for (const title of testResult.ancestorTitles) { - let matchingSuite = targetSuite.suites.find(s => s.title === title); - if (!matchingSuite) { - matchingSuite = { suites: [], tests: [], title }; - targetSuite.suites.push(matchingSuite); - } - targetSuite = matchingSuite; - } - - targetSuite.tests.push(testResult); - }); - return root; - } - - onTestResult( - config, - result, - aggregatedResults) - { - super.onTestResult(config, result, aggregatedResults); - if (!result.testExecError && !result.skipped) { - this._logTestResults(result.testResults); - } - } - - _logTestResults(testResults) { - this._logSuite(VerboseReporter.groupTestsBySuites(testResults), 0); - this._logLine(); - } - - _logSuite(suite, indentLevel) { - if (suite.title) { - this._logLine(suite.title, indentLevel); - } - - suite.tests.forEach(test => this._logTest(test, indentLevel + 1)); - suite.suites.forEach(suite => this._logSuite(suite, indentLevel + 1)); - } - - _getIcon(status) { - if (status === 'failed') { - return chalk.red(isWindows ? '\u00D7' : '\u2715'); - } else if (status === 'pending') { - return chalk.yellow('\u25CB'); - } else { - return chalk.green(isWindows ? '\u221A' : '\u2713'); - } - } - - _logTest(test, indentLevel) { - const status = this._getIcon(test.status); - const time = test.duration ? - ` (${ test.duration.toFixed(0) }ms)` : - ''; - this._logLine(status + ' ' + chalk.dim(test.title + time), indentLevel); - } - - _logLine(str, indentLevel) { - const indentation = ' '.repeat(indentLevel || 0); - this.log(indentation + (str || '')); - }} - - - -module.exports = VerboseReporter; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/getConsoleOutput.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/getConsoleOutput.js deleted file mode 100644 index 15d43eaf2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/getConsoleOutput.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - -const chalk = require('chalk'); -const path = require('path'); - -module.exports = (root, verbose, buffer) => { - const TITLE_INDENT = verbose ? ' ' : ' '; - const CONSOLE_INDENT = TITLE_INDENT + ' '; - - return buffer.reduce((output, _ref) => {let type = _ref.type,message = _ref.message,origin = _ref.origin; - origin = path.relative(root, origin); - message = message. - split(/\n/). - map(line => CONSOLE_INDENT + line). - join('\n'); - - let typeMessage = 'console.' + type; - if (type === 'warn') { - message = chalk.yellow(message); - typeMessage = chalk.yellow(typeMessage); - } else if (type === 'error') { - message = chalk.red(message); - typeMessage = chalk.red(typeMessage); - } - - return ( - output + TITLE_INDENT + chalk.dim(typeMessage) + - ' ' + chalk.dim(origin) + '\n' + message + '\n'); - - }, ''); -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/getResultHeader.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/getResultHeader.js deleted file mode 100644 index 1645fac5c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/getResultHeader.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict';var _require = - - - - -require('./utils');const formatTestPath = _require.formatTestPath; -const chalk = require('chalk'); - -const LONG_TEST_COLOR = chalk.reset.bold.bgRed; -// Explicitly reset for these messages since they can get written out in the -// middle of error logging -const FAIL = chalk.reset.inverse.bold.red(' FAIL '); -const PASS = chalk.reset.inverse.bold.green(' PASS '); - -module.exports = (result, config) => { - const testPath = result.testFilePath; - const status = result.numFailingTests > 0 || result.testExecError ? - FAIL : - PASS; - - const runTime = result.perfStats ? - (result.perfStats.end - result.perfStats.start) / 1000 : - null; - - const testDetail = []; - if (runTime !== null && runTime > 5) { - testDetail.push(LONG_TEST_COLOR(runTime + 's')); - } - - if (result.memoryUsage) { - const toMB = bytes => Math.floor(bytes / 1024 / 1024); - testDetail.push(`${ toMB(result.memoryUsage) } MB heap size`); - } - - return ( - `${ status } ${ formatTestPath(config, testPath) }` + ( - testDetail.length ? ` (${ testDetail.join(', ') })` : '')); - -}; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/utils.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/utils.js deleted file mode 100644 index 37c5611b0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/reporters/utils.js +++ /dev/null @@ -1,262 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ - -'use strict';var _slicedToArray = function () {function sliceIterator(arr, i) {var _arr = [];var _n = true;var _d = false;var _e = undefined;try {for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {_arr.push(_s.value);if (i && _arr.length === i) break;}} catch (err) {_d = true;_e = err;} finally {try {if (!_n && _i["return"]) _i["return"]();} finally {if (_d) throw _e;}}return _arr;}return function (arr, i) {if (Array.isArray(arr)) {return arr;} else if (Symbol.iterator in Object(arr)) {return sliceIterator(arr, i);} else {throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}(); - - - - -const chalk = require('chalk'); -const path = require('path'); - - - - - - - -const PROGRESS_BAR_WIDTH = 40; - -const trimAndFormatPath = ( -pad, -config, -testPath, -columns) => -{ - const maxLength = columns - pad; - const relative = relativePath(config, testPath);const - basename = relative.basename;let - dirname = relative.dirname; - - // length is ok - if ((dirname + path.sep + basename).length <= maxLength) { - return chalk.dim(dirname + path.sep) + chalk.bold(basename); - } - - // we can fit trimmed dirname and full basename - const basenameLength = basename.length; - if (basenameLength + 4 < maxLength) { - const dirnameLength = maxLength - 4 - basenameLength; - dirname = '...' + - dirname.slice(dirname.length - dirnameLength, dirname.length); - return chalk.dim(dirname + path.sep) + chalk.bold(basename); - } - - if (basenameLength + 4 === maxLength) { - return chalk.dim('...' + path.sep) + chalk.bold(basename); - } - - // can't fit dirname, but can fit trimmed basename - return chalk.bold( - '...' + - basename.slice(basename.length - maxLength - 4, basename.length)); - -}; - -const formatTestPath = (config, testPath) => {var _relativePath = - relativePath(config, testPath);const dirname = _relativePath.dirname,basename = _relativePath.basename; - return chalk.dim(dirname + path.sep) + chalk.bold(basename); -}; - -const relativePath = (config, testPath) => { - testPath = path.relative(config.rootDir, testPath); - const dirname = path.dirname(testPath); - const basename = path.basename(testPath); - return { basename, dirname }; -}; - -const pluralize = (word, count) => -`${ count } ${ word }${ count === 1 ? '' : 's' }`; - -const getSummary = ( -aggregatedResults, -options) => -{ - let runTime = (Date.now() - aggregatedResults.startTime) / 1000; - if (options && options.roundTime) { - runTime = Math.floor(runTime); - } - - const estimatedTime = options && options.estimatedTime || 0; - const snapshotResults = aggregatedResults.snapshot; - const snapshotsAdded = snapshotResults.added; - const snapshotsFailed = snapshotResults.unmatched; - const snapshotsPassed = snapshotResults.matched; - const snapshotsTotal = snapshotResults.total; - const snapshotsUpdated = snapshotResults.updated; - const suitesFailed = aggregatedResults.numFailedTestSuites; - const suitesPassed = aggregatedResults.numPassedTestSuites; - const suitesPending = aggregatedResults.numPendingTestSuites; - const suitesRun = suitesFailed + suitesPassed; - const suitesTotal = aggregatedResults.numTotalTestSuites; - const testsFailed = aggregatedResults.numFailedTests; - const testsPassed = aggregatedResults.numPassedTests; - const testsPending = aggregatedResults.numPendingTests; - const testsTotal = aggregatedResults.numTotalTests; - const width = options && options.width || 0; - - const suites = - chalk.bold('Test Suites: ') + ( - suitesFailed ? chalk.bold.red(`${ suitesFailed } failed`) + ', ' : '') + ( - suitesPending ? - chalk.bold.yellow(`${ suitesPending } skipped`) + ', ' : - '') + ( - - suitesPassed ? - chalk.bold.green(`${ suitesPassed } passed`) + ', ' : - '') + ( - - suitesRun !== suitesTotal ? - suitesRun + ' of ' + suitesTotal : - suitesTotal) + - ` total`; - - const tests = - chalk.bold('Tests: ') + ( - testsFailed ? chalk.bold.red(`${ testsFailed } failed`) + ', ' : '') + ( - testsPending ? - chalk.bold.yellow(`${ testsPending } skipped`) + ', ' : - '') + ( - - testsPassed ? - chalk.bold.green(`${ testsPassed } passed`) + ', ' : - '') + - - `${ testsTotal } total`; - - const snapshots = - chalk.bold('Snapshots: ') + ( - snapshotsFailed ? - chalk.bold.red(`${ snapshotsFailed } failed`) + ', ' : - '') + ( - - snapshotsUpdated ? - chalk.bold.green(`${ snapshotsUpdated } updated`) + ', ' : - '') + ( - - snapshotsAdded ? - chalk.bold.green(`${ snapshotsAdded } added`) + ', ' : - '') + ( - - snapshotsPassed ? - chalk.bold.green(`${ snapshotsPassed } passed`) + ', ' : - '') + - - `${ snapshotsTotal } total`; - - const time = renderTime(runTime, estimatedTime, width); - return [suites, tests, snapshots, time].join('\n'); -}; - -const renderTime = ( -runTime, -estimatedTime, -width) => -{ - // If we are more than one second over the estimated time, highlight it. - const renderedTime = estimatedTime && runTime >= estimatedTime + 1 ? - chalk.bold.yellow(runTime + 's') : - runTime + 's'; - let time = chalk.bold(`Time:`) + ` ${ renderedTime }`; - if (runTime < estimatedTime) { - time += `, estimated ${ estimatedTime }s`; - } - - // Only show a progress bar if the test run is actually going to take - // some time. - if ( - estimatedTime > 2 && - runTime < estimatedTime && - width) - { - const availableWidth = Math.min(PROGRESS_BAR_WIDTH, width); - const length = Math.min( - Math.floor(runTime / estimatedTime * availableWidth), - availableWidth); - - if (availableWidth >= 2) { - time += - '\n' + - chalk.green.inverse(' ').repeat(length) + - chalk.white.inverse(' ').repeat(availableWidth - length); - } - } - return time; -}; - -// word-wrap a string that contains ANSI escape sequences. -// ANSI escape sequences do not add to the string length. -const wrapAnsiString = (string, terminalWidth) => { - if (terminalWidth === 0) { - // if the terminal width is zero, don't bother word-wrapping - return string; - } - - const ANSI_REGEXP = /[\u001b\u009b]\[\d{1,2}m/g; - const tokens = []; - let lastIndex = 0; - let match; - - while (match = ANSI_REGEXP.exec(string)) { - const ansi = match[0]; - const index = match['index']; - if (index != lastIndex) { - tokens.push(['string', string.slice(lastIndex, index)]); - } - tokens.push(['ansi', ansi]); - lastIndex = index + ansi.length; - } - - if (lastIndex != string.length - 1) { - tokens.push(['string', string.slice(lastIndex, string.length)]); - } - - let lastLineLength = 0; - - return tokens.reduce( - (lines, _ref) => {var _ref2 = _slicedToArray(_ref, 2);let kind = _ref2[0],token = _ref2[1]; - if (kind === 'string') { - if (lastLineLength + token.length > terminalWidth) { - - while (token.length) { - const chunk = token.slice(0, terminalWidth - lastLineLength); - const remaining = token.slice( - terminalWidth - lastLineLength, - token.length); - - lines[lines.length - 1] += chunk; - lastLineLength += chunk.length; - token = remaining; - if (token.length) { - lines.push(''); - lastLineLength = 0; - } - } - } else { - lines[lines.length - 1] += token; - lastLineLength += token.length; - } - } else { - lines[lines.length - 1] += token; - } - - return lines; - }, - ['']). - join('\n'); -}; - -module.exports = { - formatTestPath, - getSummary, - pluralize, - relativePath, - trimAndFormatPath, - wrapAnsiString }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/runTest.js b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/runTest.js deleted file mode 100644 index 20cf032fa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/build/runTest.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * Copyright (c) 2014-present, Facebook, Inc. All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * - */ -'use strict'; - - - - - -const BufferedConsole = require('./lib/BufferedConsole'); -const Console = require('jest-util').Console; -const NullConsole = require('jest-util').NullConsole; - -const getConsoleOutput = require('./reporters/getConsoleOutput'); - -function runTest(path, config, resolver) { - /* $FlowFixMe */ - const TestEnvironment = require(config.testEnvironment); - /* $FlowFixMe */ - const TestRunner = require(config.testRunner); - /* $FlowFixMe */ - const ModuleLoader = require(config.moduleLoader || 'jest-runtime'); - - const env = new TestEnvironment(config); - const TestConsole = - config.verbose ? - Console : - config.silent ? - NullConsole : - BufferedConsole; - - const testConsole = env.global.console = new TestConsole( - config.useStderr ? process.stderr : process.stdout, - process.stderr, - (type, message) => getConsoleOutput( - config.rootDir, - !!config.verbose, - // 4 = the console call is burried 4 stack frames deep - BufferedConsole.write([], type, message, 4))); - - - const runtime = new ModuleLoader(config, env, resolver); - const start = Date.now(); - return TestRunner(config, env, runtime, path). - then(result => { - const testCount = - result.numPassingTests + - result.numFailingTests + - result.numPendingTests; - result.perfStats = { end: Date.now(), start }; - result.testFilePath = path; - result.coverage = runtime.getAllCoverageInfo(); - result.console = testConsole.getBuffer(); - result.skipped = testCount === result.numPendingTests; - return result; - }). - then( - result => Promise.resolve().then(() => { - env.dispose(); - if (config.logHeapUsage) { - if (global.gc) { - global.gc(); - } - result.memoryUsage = process.memoryUsage().heapUsed; - } - return result; - }), - err => Promise.resolve().then(() => { - env.dispose(); - throw err; - })); - -} - -module.exports = runTest; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/package.json b/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/package.json deleted file mode 100644 index 6dd1d284a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli/package.json +++ /dev/null @@ -1,138 +0,0 @@ -{ - "_args": [ - [ - "jest-cli@^17.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest" - ] - ], - "_from": "jest-cli@>=17.0.3 <18.0.0", - "_id": "jest-cli@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest/jest-cli", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/jest-cli-17.0.3.tgz_1479368471902_0.6936498954892159" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": {}, - "_requested": { - "name": "jest-cli", - "raw": "jest-cli@^17.0.3", - "rawSpec": "^17.0.3", - "scope": null, - "spec": ">=17.0.3 <18.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest" - ], - "_resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-17.0.3.tgz", - "_shasum": "700b8c02a9ea0ec9eab0cd5a9fd42d8a858ce146", - "_shrinkwrap": null, - "_spec": "jest-cli@^17.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest", - "bin": { - "jest": "./bin/jest.js" - }, - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "ansi-escapes": "^1.4.0", - "callsites": "^2.0.0", - "chalk": "^1.1.1", - "graceful-fs": "^4.1.6", - "is-ci": "^1.0.9", - "istanbul-api": "^1.0.0-aplha.10", - "istanbul-lib-coverage": "^1.0.0", - "istanbul-lib-instrument": "^1.1.1", - "jest-changed-files": "^17.0.2", - "jest-config": "^17.0.3", - "jest-environment-jsdom": "^17.0.2", - "jest-file-exists": "^17.0.0", - "jest-haste-map": "^17.0.3", - "jest-jasmine2": "^17.0.3", - "jest-mock": "^17.0.2", - "jest-resolve": "^17.0.3", - "jest-resolve-dependencies": "^17.0.3", - "jest-runtime": "^17.0.3", - "jest-snapshot": "^17.0.3", - "jest-util": "^17.0.2", - "json-stable-stringify": "^1.0.0", - "node-notifier": "^4.6.1", - "sane": "~1.4.1", - "strip-ansi": "^3.0.1", - "throat": "^3.0.0", - "which": "^1.1.1", - "worker-farm": "^1.3.1", - "yargs": "^6.3.0" - }, - "description": "Painless JavaScript Testing.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "700b8c02a9ea0ec9eab0cd5a9fd42d8a858ce146", - "tarball": "https://registry.npmjs.org/jest-cli/-/jest-cli-17.0.3.tgz" - }, - "engines": { - "node": ">= 4" - }, - "homepage": "http://facebook.github.io/jest/", - "keywords": [ - "facebook", - "jest", - "test", - "unit", - "jasmine", - "mock" - ], - "license": "BSD-3-Clause", - "main": "build/jest.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "lbljeffmo@gmail.com", - "name": "jeffmo" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - }, - { - "email": "paul@oshannessy.com", - "name": "zpao" - } - ], - "name": "jest-cli", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": { - "test": "./bin/jest.js" - }, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jest/package.json b/fundamentals/bug-challenge-es6/node_modules/jest/package.json deleted file mode 100644 index e1584349a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jest/package.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "_args": [ - [ - "jest", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6" - ] - ], - "_from": "jest@latest", - "_id": "jest@17.0.3", - "_inCache": true, - "_installable": true, - "_location": "/jest", - "_nodeVersion": "7.1.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/jest-17.0.3.tgz_1479368471486_0.3772578139323741" - }, - "_npmUser": { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - "_npmVersion": "3.10.9", - "_phantomChildren": { - "ansi-escapes": "1.4.0", - "callsites": "2.0.0", - "chalk": "1.1.3", - "graceful-fs": "4.1.11", - "is-ci": "1.0.10", - "istanbul-api": "1.0.0-aplha.10", - "istanbul-lib-coverage": "1.0.0", - "istanbul-lib-instrument": "1.3.0", - "jest-changed-files": "17.0.2", - "jest-config": "17.0.3", - "jest-environment-jsdom": "17.0.2", - "jest-file-exists": "17.0.0", - "jest-haste-map": "17.0.3", - "jest-jasmine2": "17.0.3", - "jest-mock": "17.0.2", - "jest-resolve": "17.0.3", - "jest-resolve-dependencies": "17.0.3", - "jest-runtime": "17.0.3", - "jest-snapshot": "17.0.3", - "jest-util": "17.0.2", - "json-stable-stringify": "1.0.1", - "node-notifier": "4.6.1", - "sane": "1.4.1", - "strip-ansi": "3.0.1", - "throat": "3.0.0", - "which": "1.2.12", - "worker-farm": "1.3.1", - "yargs": "6.4.0" - }, - "_requested": { - "name": "jest", - "raw": "jest", - "rawSpec": "", - "scope": null, - "spec": "latest", - "type": "tag" - }, - "_requiredBy": [ - "#DEV:/" - ], - "_resolved": "https://registry.npmjs.org/jest/-/jest-17.0.3.tgz", - "_shasum": "89c43b30b0aaad42462e9ea701352dacbad4a354", - "_shrinkwrap": null, - "_spec": "jest", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6", - "bin": { - "jest": "./bin/jest.js" - }, - "bugs": { - "url": "https://github.com/facebook/jest/issues" - }, - "dependencies": { - "jest-cli": "^17.0.3" - }, - "description": "Painless JavaScript Testing.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "89c43b30b0aaad42462e9ea701352dacbad4a354", - "tarball": "https://registry.npmjs.org/jest/-/jest-17.0.3.tgz" - }, - "engines": { - "node": ">= 4" - }, - "homepage": "https://github.com/facebook/jest#readme", - "license": "BSD-3-Clause", - "main": "build/jest.js", - "maintainers": [ - { - "email": "christoph.pojer@gmail.com", - "name": "cpojer" - }, - { - "email": "dmitrii@rheia.us", - "name": "dmitriiabramov" - }, - { - "email": "opensource+npm@fb.com", - "name": "fb" - }, - { - "email": "dan.abramov@gmail.com", - "name": "gaearon" - }, - { - "email": "kentaromiura@gmail.com", - "name": "kentaromiura" - }, - { - "email": "me@refack.com", - "name": "refack" - } - ], - "name": "jest", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/facebook/jest.git" - }, - "scripts": {}, - "version": "17.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jodid25519/.npmignore deleted file mode 100644 index 877830c06..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/.npmignore +++ /dev/null @@ -1,11 +0,0 @@ -# Editor, IDE and dev environment stuff -*~ -.project -.settings - -# Build files and directories -/coverage -/doc/api -/build/ -/test/ -/jodid25519-*.tgz diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/jodid25519/.travis.yml deleted file mode 100644 index 92a990f67..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: node_js -node_js: - - "0.10" - - "0.11" -branches: - only: - - master diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/AUTHORS.md b/fundamentals/bug-challenge-es6/node_modules/jodid25519/AUTHORS.md deleted file mode 100644 index 0c1709737..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/AUTHORS.md +++ /dev/null @@ -1,3 +0,0 @@ -* Michele Bini (original Curve25519 core code: curve25519.js) -* Ron Garret (original Ed25519 code: fast-djbec.js) -* Guy Kloss (package refactoring, unit testing) diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/LICENSE b/fundamentals/bug-challenge-es6/node_modules/jodid25519/LICENSE deleted file mode 100644 index c722113b2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2012 Ron Garret -Copyright (c) 2007, 2013, 2014 Michele Bini -Copyright (c) 2014 Mega Limited - -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/fundamentals/bug-challenge-es6/node_modules/jodid25519/README.md b/fundamentals/bug-challenge-es6/node_modules/jodid25519/README.md deleted file mode 100644 index 5335b2dec..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/README.md +++ /dev/null @@ -1,51 +0,0 @@ -Jodid25519 [![Build Status](https://secure.travis-ci.org/meganz/jodid25519.png)](https://travis-ci.org/meganz/jodid25519) -=================================================================================================================================== - -Javascript implementation of the Curve25519 and Ed25519 elliptic cryptography functions by Daniel J. Bernstein. - -For the API, please consult the generated documentation under doc/ (you can run `make` to generate it). - -To run the tests do the following on the console from the project's root directory: - - $ npm install - $ make test - - -Contributors ------------- - -If you are one of the contributors and want to add yourself or change the information here, please do submit a pull request. Contributors appear in no particular order. - -### For the Curve25519 submodule - -* [Graydon Hoare](https://github.com/graydon): suggested clamping the private key by default for increased safety and uniformity with other implementations. -* [liliakai](https://github.com/liliakai): spotted an unused argument in some of the functions -* [RyanC](https://github.com/ryancdotorg): removed dependency of a function to the Javascript Math library -* [Guy Kloss](https://github.com/pohutukawa): performance improvements through bit-shift operations, performance and conformance testing, documentation, compatibility with the npm package ecosystem, and more -* [Michele Bini](https://github.com/rev22): originally wrote the Javascript implementation - - -Copyright and MIT licensing ---------------------------- - -* Copyright (c) 2012 Ron Garret -* Copyright (c) 2007, 2013, 2014 Michele Bini -* Copyright (c) 2014 Mega Limited - -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/fundamentals/bug-challenge-es6/node_modules/jodid25519/almond.0 b/fundamentals/bug-challenge-es6/node_modules/jodid25519/almond.0 deleted file mode 100644 index 55ffcc47c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/almond.0 +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Curve 25519-based cryptography collection. - * - * EC Diffie-Hellman (ECDH) based on Curve25519 and digital signatures (EdDSA) - * based on Ed25519. - * - * Copyright (c) 2012 Ron Garret - * Copyright (c) 2007, 2013, 2014 Michele Bini - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * You should have received a copy of the license along with this program. - */ -// See https://github.com/jrburke/almond#exporting-a-public-api -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // Allow using this built library as an AMD module - // in another project. That other project will only - // see this AMD call, not the internal modules in - // the closure below. - define([], factory); - } else if (typeof module === 'object' && module.exports) { - // Allow using this built library as a CommonJS module - module.exports = factory(); - } else { - // Browser globals case. Just assign the - // result to a property on the global. - root.jodid25519 = factory(); - } -}(this, function () { - if (typeof module === 'object' && module.exports) { - // If we're running under CommonJS, our dependencies get confused and - // each clobber module.exports which leads to bad behaviour because - // almond does asynchronous loading. So just pretend we're in the - // browser globals case, and make them write to those values instead. - // TODO: ditch requirejs/almond and use browserify or something. - var __oldModule = module; - var __oldExports = exports; - var window = global; - module = undefined; - exports = undefined; - } diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/almond.1 b/fundamentals/bug-challenge-es6/node_modules/jodid25519/almond.1 deleted file mode 100644 index cdb5e6728..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/almond.1 +++ /dev/null @@ -1,13 +0,0 @@ - if (typeof module === 'object' && module.exports) { - // Restore CommonJS exports once our dependencies have all finished - // loading. - module = __oldModule; - exports = __oldExports; - } - // The modules for your project will be inlined above - // this snippet. Ask almond to synchronously require the - // module value for 'main' here and return it as the - // value to use for the public API for the built file. - return require('jodid25519'); -})); -// See https://github.com/jrburke/almond#exporting-a-public-api diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/index.js b/fundamentals/bug-challenge-es6/node_modules/jodid25519/index.js deleted file mode 100644 index 870983984..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/index.js +++ /dev/null @@ -1,35 +0,0 @@ -"use strict"; - -/* - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * Authors: Guy K. Kloss - * - * You should have received a copy of the license along with this program. - */ - -var dh = require('./lib/dh'); -var eddsa = require('./lib/eddsa'); -var curve255 = require('./lib/curve255'); -var utils = require('./lib/utils'); - - /** - * @exports jodid25519 - * Curve 25519-based cryptography collection. - * - * @description - * EC Diffie-Hellman (ECDH) based on Curve25519 and digital signatures - * (EdDSA) based on Ed25519. - */ - var ns = {}; - - /** Module version indicator as string (format: [major.minor.patch]). */ - ns.VERSION = '0.7.1'; - - ns.dh = dh; - ns.eddsa = eddsa; - ns.curve255 = curve255; - ns.utils = utils; - -module.exports = ns; diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/jsdoc.json b/fundamentals/bug-challenge-es6/node_modules/jodid25519/jsdoc.json deleted file mode 100644 index 21eba9bd6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/jsdoc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "templates": { - "applicationName": "jodid25519 Library", - "disqus": "", - "googleAnalytics": "", - "openGraph": { - "title": "jodid25519 Library", - "type": "website", - "image": "", - "site_name": "", - "url": "" - }, - "meta": { - "title": "jodid25519 Library", - "description": "", - "keyword": "" - } - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/core.js b/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/core.js deleted file mode 100644 index f78fd74dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/core.js +++ /dev/null @@ -1,481 +0,0 @@ -"use strict"; -/** - * @fileOverview - * Core operations on curve 25519 required for the higher level modules. - */ - -/* - * Copyright (c) 2007, 2013, 2014 Michele Bini - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * Authors: Guy K. Kloss, Michele Bini - * - * You should have received a copy of the license along with this program. - */ - -var crypto = require('crypto'); - - /** - * @exports jodid25519/core - * Core operations on curve 25519 required for the higher level modules. - * - * @description - * Core operations on curve 25519 required for the higher level modules. - * - *

- * This core code is extracted from Michele Bini's curve255.js implementation, - * which is used as a base for Curve25519 ECDH and Ed25519 EdDSA operations. - *

- */ - var ns = {}; - - function _setbit(n, c, v) { - var i = c >> 4; - var a = n[i]; - a = a + (1 << (c & 0xf)) * v; - n[i] = a; - } - - function _getbit(n, c) { - return (n[c >> 4] >> (c & 0xf)) & 1; - } - - function _ZERO() { - return [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - } - - function _ONE() { - return [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - } - - // Basepoint. - function _BASE() { - return [9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - } - - // return -1, 0, +1 when a is less than, equal, or greater than b - function _bigintcmp(a, b) { - // The following code is a bit tricky to avoid code branching - var c, abs_r, mask; - var r = 0; - for (c = 15; c >= 0; c--) { - var x = a[c]; - var y = b[c]; - r = r + (x - y) * (1 - r * r); - // http://graphics.stanford.edu/~seander/bithacks.html#IntegerAbs - // correct for [-294967295, 294967295] - mask = r >> 31; - abs_r = (r + mask) ^ mask; - // http://stackoverflow.com/questions/596467/how-do-i-convert-a-number-to-an-integer-in-javascript - // this rounds towards zero - r = ~~((r << 1) / (abs_r + 1)); - } - return r; - } - - function _bigintadd(a, b) { - var r = []; - var v; - r[0] = (v = a[0] + b[0]) & 0xffff; - r[1] = (v = (v >>> 16) + a[1] + b[1]) & 0xffff; - r[2] = (v = (v >>> 16) + a[2] + b[2]) & 0xffff; - r[3] = (v = (v >>> 16) + a[3] + b[3]) & 0xffff; - r[4] = (v = (v >>> 16) + a[4] + b[4]) & 0xffff; - r[5] = (v = (v >>> 16) + a[5] + b[5]) & 0xffff; - r[6] = (v = (v >>> 16) + a[6] + b[6]) & 0xffff; - r[7] = (v = (v >>> 16) + a[7] + b[7]) & 0xffff; - r[8] = (v = (v >>> 16) + a[8] + b[8]) & 0xffff; - r[9] = (v = (v >>> 16) + a[9] + b[9]) & 0xffff; - r[10] = (v = (v >>> 16) + a[10] + b[10]) & 0xffff; - r[11] = (v = (v >>> 16) + a[11] + b[11]) & 0xffff; - r[12] = (v = (v >>> 16) + a[12] + b[12]) & 0xffff; - r[13] = (v = (v >>> 16) + a[13] + b[13]) & 0xffff; - r[14] = (v = (v >>> 16) + a[14] + b[14]) & 0xffff; - r[15] = (v >>> 16) + a[15] + b[15]; - return r; - } - - function _bigintsub(a, b) { - var r = []; - var v; - r[0] = (v = 0x80000 + a[0] - b[0]) & 0xffff; - r[1] = (v = (v >>> 16) + 0x7fff8 + a[1] - b[1]) & 0xffff; - r[2] = (v = (v >>> 16) + 0x7fff8 + a[2] - b[2]) & 0xffff; - r[3] = (v = (v >>> 16) + 0x7fff8 + a[3] - b[3]) & 0xffff; - r[4] = (v = (v >>> 16) + 0x7fff8 + a[4] - b[4]) & 0xffff; - r[5] = (v = (v >>> 16) + 0x7fff8 + a[5] - b[5]) & 0xffff; - r[6] = (v = (v >>> 16) + 0x7fff8 + a[6] - b[6]) & 0xffff; - r[7] = (v = (v >>> 16) + 0x7fff8 + a[7] - b[7]) & 0xffff; - r[8] = (v = (v >>> 16) + 0x7fff8 + a[8] - b[8]) & 0xffff; - r[9] = (v = (v >>> 16) + 0x7fff8 + a[9] - b[9]) & 0xffff; - r[10] = (v = (v >>> 16) + 0x7fff8 + a[10] - b[10]) & 0xffff; - r[11] = (v = (v >>> 16) + 0x7fff8 + a[11] - b[11]) & 0xffff; - r[12] = (v = (v >>> 16) + 0x7fff8 + a[12] - b[12]) & 0xffff; - r[13] = (v = (v >>> 16) + 0x7fff8 + a[13] - b[13]) & 0xffff; - r[14] = (v = (v >>> 16) + 0x7fff8 + a[14] - b[14]) & 0xffff; - r[15] = (v >>> 16) - 8 + a[15] - b[15]; - return r; - } - - function _sqr8h(a7, a6, a5, a4, a3, a2, a1, a0) { - // 'division by 0x10000' can not be replaced by '>> 16' because - // more than 32 bits of precision are needed similarly - // 'multiplication by 2' cannot be replaced by '<< 1' - var r = []; - var v; - r[0] = (v = a0 * a0) & 0xffff; - r[1] = (v = (0 | (v / 0x10000)) + 2 * a0 * a1) & 0xffff; - r[2] = (v = (0 | (v / 0x10000)) + 2 * a0 * a2 + a1 * a1) & 0xffff; - r[3] = (v = (0 | (v / 0x10000)) + 2 * a0 * a3 + 2 * a1 * a2) & 0xffff; - r[4] = (v = (0 | (v / 0x10000)) + 2 * a0 * a4 + 2 * a1 * a3 + a2 - * a2) & 0xffff; - r[5] = (v = (0 | (v / 0x10000)) + 2 * a0 * a5 + 2 * a1 * a4 + 2 - * a2 * a3) & 0xffff; - r[6] = (v = (0 | (v / 0x10000)) + 2 * a0 * a6 + 2 * a1 * a5 + 2 - * a2 * a4 + a3 * a3) & 0xffff; - r[7] = (v = (0 | (v / 0x10000)) + 2 * a0 * a7 + 2 * a1 * a6 + 2 - * a2 * a5 + 2 * a3 * a4) & 0xffff; - r[8] = (v = (0 | (v / 0x10000)) + 2 * a1 * a7 + 2 * a2 * a6 + 2 - * a3 * a5 + a4 * a4) & 0xffff; - r[9] = (v = (0 | (v / 0x10000)) + 2 * a2 * a7 + 2 * a3 * a6 + 2 - * a4 * a5) & 0xffff; - r[10] = (v = (0 | (v / 0x10000)) + 2 * a3 * a7 + 2 * a4 * a6 - + a5 * a5) & 0xffff; - r[11] = (v = (0 | (v / 0x10000)) + 2 * a4 * a7 + 2 * a5 * a6) & 0xffff; - r[12] = (v = (0 | (v / 0x10000)) + 2 * a5 * a7 + a6 * a6) & 0xffff; - r[13] = (v = (0 | (v / 0x10000)) + 2 * a6 * a7) & 0xffff; - r[14] = (v = (0 | (v / 0x10000)) + a7 * a7) & 0xffff; - r[15] = 0 | (v / 0x10000); - return r; - } - - function _sqrmodp(a) { - var x = _sqr8h(a[15], a[14], a[13], a[12], a[11], a[10], a[9], - a[8]); - var z = _sqr8h(a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0]); - var y = _sqr8h(a[15] + a[7], a[14] + a[6], a[13] + a[5], a[12] - + a[4], - a[11] + a[3], a[10] + a[2], a[9] + a[1], a[8] - + a[0]); - var r = []; - var v; - r[0] = (v = 0x800000 + z[0] + (y[8] - x[8] - z[8] + x[0] - 0x80) - * 38) & 0xffff; - r[1] = (v = 0x7fff80 + (v >>> 16) + z[1] - + (y[9] - x[9] - z[9] + x[1]) * 38) & 0xffff; - r[2] = (v = 0x7fff80 + (v >>> 16) + z[2] - + (y[10] - x[10] - z[10] + x[2]) * 38) & 0xffff; - r[3] = (v = 0x7fff80 + (v >>> 16) + z[3] - + (y[11] - x[11] - z[11] + x[3]) * 38) & 0xffff; - r[4] = (v = 0x7fff80 + (v >>> 16) + z[4] - + (y[12] - x[12] - z[12] + x[4]) * 38) & 0xffff; - r[5] = (v = 0x7fff80 + (v >>> 16) + z[5] - + (y[13] - x[13] - z[13] + x[5]) * 38) & 0xffff; - r[6] = (v = 0x7fff80 + (v >>> 16) + z[6] - + (y[14] - x[14] - z[14] + x[6]) * 38) & 0xffff; - r[7] = (v = 0x7fff80 + (v >>> 16) + z[7] - + (y[15] - x[15] - z[15] + x[7]) * 38) & 0xffff; - r[8] = (v = 0x7fff80 + (v >>> 16) + z[8] + y[0] - x[0] - z[0] - + x[8] * 38) & 0xffff; - r[9] = (v = 0x7fff80 + (v >>> 16) + z[9] + y[1] - x[1] - z[1] - + x[9] * 38) & 0xffff; - r[10] = (v = 0x7fff80 + (v >>> 16) + z[10] + y[2] - x[2] - z[2] - + x[10] * 38) & 0xffff; - r[11] = (v = 0x7fff80 + (v >>> 16) + z[11] + y[3] - x[3] - z[3] - + x[11] * 38) & 0xffff; - r[12] = (v = 0x7fff80 + (v >>> 16) + z[12] + y[4] - x[4] - z[4] - + x[12] * 38) & 0xffff; - r[13] = (v = 0x7fff80 + (v >>> 16) + z[13] + y[5] - x[5] - z[5] - + x[13] * 38) & 0xffff; - r[14] = (v = 0x7fff80 + (v >>> 16) + z[14] + y[6] - x[6] - z[6] - + x[14] * 38) & 0xffff; - r[15] = 0x7fff80 + (v >>> 16) + z[15] + y[7] - x[7] - z[7] - + x[15] * 38; - _reduce(r); - return r; - } - - function _mul8h(a7, a6, a5, a4, a3, a2, a1, a0, b7, b6, b5, b4, b3, - b2, b1, b0) { - // 'division by 0x10000' can not be replaced by '>> 16' because - // more than 32 bits of precision are needed - var r = []; - var v; - r[0] = (v = a0 * b0) & 0xffff; - r[1] = (v = (0 | (v / 0x10000)) + a0 * b1 + a1 * b0) & 0xffff; - r[2] = (v = (0 | (v / 0x10000)) + a0 * b2 + a1 * b1 + a2 * b0) & 0xffff; - r[3] = (v = (0 | (v / 0x10000)) + a0 * b3 + a1 * b2 + a2 * b1 - + a3 * b0) & 0xffff; - r[4] = (v = (0 | (v / 0x10000)) + a0 * b4 + a1 * b3 + a2 * b2 - + a3 * b1 + a4 * b0) & 0xffff; - r[5] = (v = (0 | (v / 0x10000)) + a0 * b5 + a1 * b4 + a2 * b3 - + a3 * b2 + a4 * b1 + a5 * b0) & 0xffff; - r[6] = (v = (0 | (v / 0x10000)) + a0 * b6 + a1 * b5 + a2 * b4 - + a3 * b3 + a4 * b2 + a5 * b1 + a6 * b0) & 0xffff; - r[7] = (v = (0 | (v / 0x10000)) + a0 * b7 + a1 * b6 + a2 * b5 - + a3 * b4 + a4 * b3 + a5 * b2 + a6 * b1 + a7 * b0) & 0xffff; - r[8] = (v = (0 | (v / 0x10000)) + a1 * b7 + a2 * b6 + a3 * b5 - + a4 * b4 + a5 * b3 + a6 * b2 + a7 * b1) & 0xffff; - r[9] = (v = (0 | (v / 0x10000)) + a2 * b7 + a3 * b6 + a4 * b5 - + a5 * b4 + a6 * b3 + a7 * b2) & 0xffff; - r[10] = (v = (0 | (v / 0x10000)) + a3 * b7 + a4 * b6 + a5 * b5 - + a6 * b4 + a7 * b3) & 0xffff; - r[11] = (v = (0 | (v / 0x10000)) + a4 * b7 + a5 * b6 + a6 * b5 - + a7 * b4) & 0xffff; - r[12] = (v = (0 | (v / 0x10000)) + a5 * b7 + a6 * b6 + a7 * b5) & 0xffff; - r[13] = (v = (0 | (v / 0x10000)) + a6 * b7 + a7 * b6) & 0xffff; - r[14] = (v = (0 | (v / 0x10000)) + a7 * b7) & 0xffff; - r[15] = (0 | (v / 0x10000)); - return r; - } - - function _mulmodp(a, b) { - // Karatsuba multiplication scheme: x*y = (b^2+b)*x1*y1 - - // b*(x1-x0)*(y1-y0) + (b+1)*x0*y0 - var x = _mul8h(a[15], a[14], a[13], a[12], a[11], a[10], a[9], - a[8], b[15], b[14], b[13], b[12], b[11], b[10], - b[9], b[8]); - var z = _mul8h(a[7], a[6], a[5], a[4], a[3], a[2], a[1], a[0], - b[7], b[6], b[5], b[4], b[3], b[2], b[1], b[0]); - var y = _mul8h(a[15] + a[7], a[14] + a[6], a[13] + a[5], a[12] - + a[4], - a[11] + a[3], a[10] + a[2], a[9] + a[1], a[8] - + a[0], - b[15] + b[7], b[14] + b[6], b[13] + b[5], b[12] - + b[4], - b[11] + b[3], b[10] + b[2], b[9] + b[1], b[8] - + b[0]); - var r = []; - var v; - r[0] = (v = 0x800000 + z[0] + (y[8] - x[8] - z[8] + x[0] - 0x80) - * 38) & 0xffff; - r[1] = (v = 0x7fff80 + (v >>> 16) + z[1] - + (y[9] - x[9] - z[9] + x[1]) * 38) & 0xffff; - r[2] = (v = 0x7fff80 + (v >>> 16) + z[2] - + (y[10] - x[10] - z[10] + x[2]) * 38) & 0xffff; - r[3] = (v = 0x7fff80 + (v >>> 16) + z[3] - + (y[11] - x[11] - z[11] + x[3]) * 38) & 0xffff; - r[4] = (v = 0x7fff80 + (v >>> 16) + z[4] - + (y[12] - x[12] - z[12] + x[4]) * 38) & 0xffff; - r[5] = (v = 0x7fff80 + (v >>> 16) + z[5] - + (y[13] - x[13] - z[13] + x[5]) * 38) & 0xffff; - r[6] = (v = 0x7fff80 + (v >>> 16) + z[6] - + (y[14] - x[14] - z[14] + x[6]) * 38) & 0xffff; - r[7] = (v = 0x7fff80 + (v >>> 16) + z[7] - + (y[15] - x[15] - z[15] + x[7]) * 38) & 0xffff; - r[8] = (v = 0x7fff80 + (v >>> 16) + z[8] + y[0] - x[0] - z[0] - + x[8] * 38) & 0xffff; - r[9] = (v = 0x7fff80 + (v >>> 16) + z[9] + y[1] - x[1] - z[1] - + x[9] * 38) & 0xffff; - r[10] = (v = 0x7fff80 + (v >>> 16) + z[10] + y[2] - x[2] - z[2] - + x[10] * 38) & 0xffff; - r[11] = (v = 0x7fff80 + (v >>> 16) + z[11] + y[3] - x[3] - z[3] - + x[11] * 38) & 0xffff; - r[12] = (v = 0x7fff80 + (v >>> 16) + z[12] + y[4] - x[4] - z[4] - + x[12] * 38) & 0xffff; - r[13] = (v = 0x7fff80 + (v >>> 16) + z[13] + y[5] - x[5] - z[5] - + x[13] * 38) & 0xffff; - r[14] = (v = 0x7fff80 + (v >>> 16) + z[14] + y[6] - x[6] - z[6] - + x[14] * 38) & 0xffff; - r[15] = 0x7fff80 + (v >>> 16) + z[15] + y[7] - x[7] - z[7] - + x[15] * 38; - _reduce(r); - return r; - } - - function _reduce(arr) { - var aCopy = arr.slice(0); - var choice = [arr, aCopy]; - var v = arr[15]; - // Use the dummy copy instead of just returning to be more constant time. - var a = choice[(v < 0x8000) & 1]; - a[15] = v & 0x7fff; - // >32-bits of precision are required here so '/ 0x8000' can not be - // replaced by the arithmetic equivalent '>>> 15' - v = (0 | (v / 0x8000)) * 19; - a[0] = (v += a[0]) & 0xffff; - v = v >>> 16; - a[1] = (v += a[1]) & 0xffff; - v = v >>> 16; - a[2] = (v += a[2]) & 0xffff; - v = v >>> 16; - a[3] = (v += a[3]) & 0xffff; - v = v >>> 16; - a[4] = (v += a[4]) & 0xffff; - v = v >>> 16; - a[5] = (v += a[5]) & 0xffff; - v = v >>> 16; - a[6] = (v += a[6]) & 0xffff; - v = v >>> 16; - a[7] = (v += a[7]) & 0xffff; - v = v >>> 16; - a[8] = (v += a[8]) & 0xffff; - v = v >>> 16; - a[9] = (v += a[9]) & 0xffff; - v = v >>> 16; - a[10] = (v += a[10]) & 0xffff; - v = v >>> 16; - a[11] = (v += a[11]) & 0xffff; - v = v >>> 16; - a[12] = (v += a[12]) & 0xffff; - v = v >>> 16; - a[13] = (v += a[13]) & 0xffff; - v = v >>> 16; - a[14] = (v += a[14]) & 0xffff; - v = v >>> 16; - a[15] += v; - } - - function _addmodp(a, b) { - var r = []; - var v; - r[0] = (v = ((0 | (a[15] >>> 15)) + (0 | (b[15] >>> 15))) * 19 - + a[0] + b[0]) & 0xffff; - r[1] = (v = (v >>> 16) + a[1] + b[1]) & 0xffff; - r[2] = (v = (v >>> 16) + a[2] + b[2]) & 0xffff; - r[3] = (v = (v >>> 16) + a[3] + b[3]) & 0xffff; - r[4] = (v = (v >>> 16) + a[4] + b[4]) & 0xffff; - r[5] = (v = (v >>> 16) + a[5] + b[5]) & 0xffff; - r[6] = (v = (v >>> 16) + a[6] + b[6]) & 0xffff; - r[7] = (v = (v >>> 16) + a[7] + b[7]) & 0xffff; - r[8] = (v = (v >>> 16) + a[8] + b[8]) & 0xffff; - r[9] = (v = (v >>> 16) + a[9] + b[9]) & 0xffff; - r[10] = (v = (v >>> 16) + a[10] + b[10]) & 0xffff; - r[11] = (v = (v >>> 16) + a[11] + b[11]) & 0xffff; - r[12] = (v = (v >>> 16) + a[12] + b[12]) & 0xffff; - r[13] = (v = (v >>> 16) + a[13] + b[13]) & 0xffff; - r[14] = (v = (v >>> 16) + a[14] + b[14]) & 0xffff; - r[15] = (v >>> 16) + (a[15] & 0x7fff) + (b[15] & 0x7fff); - return r; - } - - function _submodp(a, b) { - var r = []; - var v; - r[0] = (v = 0x80000 - + ((0 | (a[15] >>> 15)) - (0 | (b[15] >>> 15)) - 1) - * 19 + a[0] - b[0]) & 0xffff; - r[1] = (v = (v >>> 16) + 0x7fff8 + a[1] - b[1]) & 0xffff; - r[2] = (v = (v >>> 16) + 0x7fff8 + a[2] - b[2]) & 0xffff; - r[3] = (v = (v >>> 16) + 0x7fff8 + a[3] - b[3]) & 0xffff; - r[4] = (v = (v >>> 16) + 0x7fff8 + a[4] - b[4]) & 0xffff; - r[5] = (v = (v >>> 16) + 0x7fff8 + a[5] - b[5]) & 0xffff; - r[6] = (v = (v >>> 16) + 0x7fff8 + a[6] - b[6]) & 0xffff; - r[7] = (v = (v >>> 16) + 0x7fff8 + a[7] - b[7]) & 0xffff; - r[8] = (v = (v >>> 16) + 0x7fff8 + a[8] - b[8]) & 0xffff; - r[9] = (v = (v >>> 16) + 0x7fff8 + a[9] - b[9]) & 0xffff; - r[10] = (v = (v >>> 16) + 0x7fff8 + a[10] - b[10]) & 0xffff; - r[11] = (v = (v >>> 16) + 0x7fff8 + a[11] - b[11]) & 0xffff; - r[12] = (v = (v >>> 16) + 0x7fff8 + a[12] - b[12]) & 0xffff; - r[13] = (v = (v >>> 16) + 0x7fff8 + a[13] - b[13]) & 0xffff; - r[14] = (v = (v >>> 16) + 0x7fff8 + a[14] - b[14]) & 0xffff; - r[15] = (v >>> 16) + 0x7ff8 + (a[15] & 0x7fff) - - (b[15] & 0x7fff); - return r; - } - - function _invmodp(a) { - var c = a; - var i = 250; - while (--i) { - a = _sqrmodp(a); - a = _mulmodp(a, c); - } - a = _sqrmodp(a); - a = _sqrmodp(a); - a = _mulmodp(a, c); - a = _sqrmodp(a); - a = _sqrmodp(a); - a = _mulmodp(a, c); - a = _sqrmodp(a); - a = _mulmodp(a, c); - return a; - } - - function _mulasmall(a) { - // 'division by 0x10000' can not be replaced by '>> 16' because - // more than 32 bits of precision are needed - var m = 121665; - var r = []; - var v; - r[0] = (v = a[0] * m) & 0xffff; - r[1] = (v = (0 | (v / 0x10000)) + a[1] * m) & 0xffff; - r[2] = (v = (0 | (v / 0x10000)) + a[2] * m) & 0xffff; - r[3] = (v = (0 | (v / 0x10000)) + a[3] * m) & 0xffff; - r[4] = (v = (0 | (v / 0x10000)) + a[4] * m) & 0xffff; - r[5] = (v = (0 | (v / 0x10000)) + a[5] * m) & 0xffff; - r[6] = (v = (0 | (v / 0x10000)) + a[6] * m) & 0xffff; - r[7] = (v = (0 | (v / 0x10000)) + a[7] * m) & 0xffff; - r[8] = (v = (0 | (v / 0x10000)) + a[8] * m) & 0xffff; - r[9] = (v = (0 | (v / 0x10000)) + a[9] * m) & 0xffff; - r[10] = (v = (0 | (v / 0x10000)) + a[10] * m) & 0xffff; - r[11] = (v = (0 | (v / 0x10000)) + a[11] * m) & 0xffff; - r[12] = (v = (0 | (v / 0x10000)) + a[12] * m) & 0xffff; - r[13] = (v = (0 | (v / 0x10000)) + a[13] * m) & 0xffff; - r[14] = (v = (0 | (v / 0x10000)) + a[14] * m) & 0xffff; - r[15] = (0 | (v / 0x10000)) + a[15] * m; - _reduce(r); - return r; - } - - function _dbl(x, z) { - var x_2, z_2, m, n, o; - m = _sqrmodp(_addmodp(x, z)); - n = _sqrmodp(_submodp(x, z)); - o = _submodp(m, n); - x_2 = _mulmodp(n, m); - z_2 = _mulmodp(_addmodp(_mulasmall(o), m), o); - return [x_2, z_2]; - } - - function _sum(x, z, x_p, z_p, x_1) { - var x_3, z_3, p, q; - p = _mulmodp(_submodp(x, z), _addmodp(x_p, z_p)); - q = _mulmodp(_addmodp(x, z), _submodp(x_p, z_p)); - x_3 = _sqrmodp(_addmodp(p, q)); - z_3 = _mulmodp(_sqrmodp(_submodp(p, q)), x_1); - return [x_3, z_3]; - } - - function _generateKey(curve25519) { - var buffer = crypto.randomBytes(32); - - // For Curve25519 DH keys, we need to apply some bit mask on generated - // keys: - // * clear bit 0, 1, 2 of first byte - // * clear bit 7 of last byte - // * set bit 6 of last byte - if (curve25519 === true) { - buffer[0] &= 0xf8; - buffer[31] = (buffer[31] & 0x7f) | 0x40; - } - var result = []; - for (var i = 0; i < buffer.length; i++) { - result.push(String.fromCharCode(buffer[i])); - } - return result.join(''); - } - - // Expose some functions to the outside through this name space. - // Note: This is not part of the public API. - ns.getbit = _getbit; - ns.setbit = _setbit; - ns.addmodp = _addmodp; - ns.invmodp = _invmodp; - ns.mulmodp = _mulmodp; - ns.reduce = _reduce; - ns.dbl = _dbl; - ns.sum = _sum; - ns.ZERO = _ZERO; - ns.ONE = _ONE; - ns.BASE = _BASE; - ns.bigintadd = _bigintadd; - ns.bigintsub = _bigintsub; - ns.bigintcmp = _bigintcmp; - ns.mulmodp = _mulmodp; - ns.sqrmodp = _sqrmodp; - ns.generateKey = _generateKey; - - -module.exports = ns; diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/curve255.js b/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/curve255.js deleted file mode 100644 index 3978b46e3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/curve255.js +++ /dev/null @@ -1,221 +0,0 @@ -"use strict"; -/** - * @fileOverview - * Core operations on curve 25519 required for the higher level modules. - */ - -/* - * Copyright (c) 2007, 2013, 2014 Michele Bini - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * Authors: Guy K. Kloss, Michele Bini - * - * You should have received a copy of the license along with this program. - */ - -var core = require('./core'); -var utils = require('./utils'); - - /** - * @exports jodid25519/curve255 - * Legacy compatibility module for Michele Bini's previous curve255.js. - * - * @description - * Legacy compatibility module for Michele Bini's previous curve255.js. - * - *

- * This code presents an API with all key formats as previously available - * from Michele Bini's curve255.js implementation. - *

- */ - var ns = {}; - - function curve25519_raw(f, c) { - var a, x_1, q; - - x_1 = c; - a = core.dbl(x_1, core.ONE()); - q = [x_1, core.ONE()]; - - var n = 255; - - while (core.getbit(f, n) == 0) { - n--; - // For correct constant-time operation, bit 255 should always be - // set to 1 so the following 'while' loop is never entered. - if (n < 0) { - return core.ZERO(); - } - } - n--; - - var aq = [a, q]; - - while (n >= 0) { - var r, s; - var b = core.getbit(f, n); - r = core.sum(aq[0][0], aq[0][1], aq[1][0], aq[1][1], x_1); - s = core.dbl(aq[1 - b][0], aq[1 - b][1]); - aq[1 - b] = s; - aq[b] = r; - n--; - } - q = aq[1]; - - q[1] = core.invmodp(q[1]); - q[0] = core.mulmodp(q[0], q[1]); - core.reduce(q[0]); - return q[0]; - } - - function curve25519b32(a, b) { - return _base32encode(curve25519(_base32decode(a), - _base32decode(b))); - } - - function curve25519(f, c) { - if (!c) { - c = core.BASE(); - } - f[0] &= 0xFFF8; - f[15] = (f[15] & 0x7FFF) | 0x4000; - return curve25519_raw(f, c); - } - - function _hexEncodeVector(k) { - var hexKey = utils.hexEncode(k); - // Pad with '0' at the front. - hexKey = new Array(64 + 1 - hexKey.length).join('0') + hexKey; - // Invert bytes. - return hexKey.split(/(..)/).reverse().join(''); - } - - function _hexDecodeVector(v) { - // assert(length(x) == 64); - // Invert bytes. - var hexKey = v.split(/(..)/).reverse().join(''); - return utils.hexDecode(hexKey); - } - - - // Expose some functions to the outside through this name space. - - /** - * Computes the scalar product of a point on the curve 25519. - * - * This function is used for the DH key-exchange protocol. - * - * Before multiplication, some bit operations are applied to the - * private key to ensure it is a valid Curve25519 secret key. - * It is the user's responsibility to make sure that the private - * key is a uniformly random, secret value. - * - * @function - * @param f {array} - * Private key. - * @param c {array} - * Public point on the curve. If not given, the curve's base point is used. - * @returns {array} - * Key point resulting from scalar product. - */ - ns.curve25519 = curve25519; - - /** - * Computes the scalar product of a point on the curve 25519. - * - * This variant does not make sure that the private key is valid. - * The user has the responsibility to ensure the private key is - * valid or that this results in a safe protocol. Unless you know - * exactly what you are doing, you should not use this variant, - * please use 'curve25519' instead. - * - * @function - * @param f {array} - * Private key. - * @param c {array} - * Public point on the curve. If not given, the curve's base point is used. - * @returns {array} - * Key point resulting from scalar product. - */ - ns.curve25519_raw = curve25519_raw; - - /** - * Encodes the internal representation of a key to a canonical hex - * representation. - * - * This is the format commonly used in other libraries and for - * test vectors, and is equivalent to the hex dump of the key in - * little-endian binary format. - * - * @function - * @param n {array} - * Array representation of key. - * @returns {string} - * Hexadecimal string representation of key. - */ - ns.hexEncodeVector = _hexEncodeVector; - - /** - * Decodes a canonical hex representation of a key - * to an internally compatible array representation. - * - * @function - * @param n {string} - * Hexadecimal string representation of key. - * @returns {array} - * Array representation of key. - */ - ns.hexDecodeVector = _hexDecodeVector; - - /** - * Encodes the internal representation of a key into a - * hexadecimal representation. - * - * This is a strict positional notation, most significant digit first. - * - * @function - * @param n {array} - * Array representation of key. - * @returns {string} - * Hexadecimal string representation of key. - */ - ns.hexencode = utils.hexEncode; - - /** - * Decodes a hex representation of a key to an internally - * compatible array representation. - * - * @function - * @param n {string} - * Hexadecimal string representation of key. - * @returns {array} - * Array representation of key. - */ - ns.hexdecode = utils.hexDecode; - - /** - * Encodes the internal representation of a key to a base32 - * representation. - * - * @function - * @param n {array} - * Array representation of key. - * @returns {string} - * Base32 string representation of key. - */ - ns.base32encode = utils.base32encode; - - /** - * Decodes a base32 representation of a key to an internally - * compatible array representation. - * - * @function - * @param n {string} - * Base32 string representation of key. - * @returns {array} - * Array representation of key. - */ - ns.base32decode = utils.base32decode; - -module.exports = ns; diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/dh.js b/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/dh.js deleted file mode 100644 index 2f75494a4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/dh.js +++ /dev/null @@ -1,111 +0,0 @@ -"use strict"; -/** - * @fileOverview - * EC Diffie-Hellman operations on Curve25519. - */ - -/* - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * Authors: Guy K. Kloss - * - * You should have received a copy of the license along with this program. - */ - -var core = require('./core'); -var utils = require('./utils'); -var curve255 = require('./curve255'); - - - /** - * @exports jodid25519/dh - * EC Diffie-Hellman operations on Curve25519. - * - * @description - * EC Diffie-Hellman operations on Curve25519. - */ - var ns = {}; - - - function _toString(vector) { - var u = new Uint16Array(vector); - return (new Buffer(new Uint8Array(u.buffer))); - } - - function _fromString(vector) { - if (Buffer.isBuffer(vector)) { - var u = new Uint8Array(vector); - return (new Uint16Array(u.buffer)); - } - - var result = new Array(16); - for (var i = 0, l = 0; i < vector.length; i += 2) { - result[l] = (vector.charCodeAt(i + 1) << 8) | vector.charCodeAt(i); - l++; - } - return result; - } - - - /** - * Computes a key through scalar multiplication of a point on the curve 25519. - * - * This function is used for the DH key-exchange protocol. It computes a - * key based on a secret key with a public component (opponent's public key - * or curve base point if not given) by using scalar multiplication. - * - * Before multiplication, some bit operations are applied to the - * private key to ensure it is a valid Curve25519 secret key. - * It is the user's responsibility to make sure that the private - * key is a uniformly random, secret value. - * - * @function - * @param privateComponent {string} - * Private point as byte string on the curve. - * @param publicComponent {string} - * Public point as byte string on the curve. If not given, the curve's - * base point is used. - * @returns {string} - * Key point as byte string resulting from scalar product. - */ - ns.computeKey = function(privateComponent, publicComponent) { - if (publicComponent) { - return _toString(curve255.curve25519(_fromString(privateComponent), - _fromString(publicComponent))); - } else { - return _toString(curve255.curve25519(_fromString(privateComponent))); - } - }; - - /** - * Computes the public key to a private key on the curve 25519. - * - * Before multiplication, some bit operations are applied to the - * private key to ensure it is a valid Curve25519 secret key. - * It is the user's responsibility to make sure that the private - * key is a uniformly random, secret value. - * - * @function - * @param privateKey {string} - * Private point as byte string on the curve. - * @returns {string} - * Public key point as byte string resulting from scalar product. - */ - ns.publicKey = function(privateKey) { - return _toString(curve255.curve25519(_fromString(privateKey))); - }; - - - /** - * Generates a new random private key of 32 bytes length (256 bit). - * - * @function - * @returns {string} - * Byte string containing a new random private key seed. - */ - ns.generateKey = function() { - return core.generateKey(true); - }; - -module.exports = ns; diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/eddsa.js b/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/eddsa.js deleted file mode 100644 index c384f3293..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/eddsa.js +++ /dev/null @@ -1,573 +0,0 @@ -"use strict"; -/** - * @fileOverview - * Digital signature scheme based on Curve25519 (Ed25519 or EdDSA). - */ - -/* - * Copyright (c) 2011, 2012, 2014 Ron Garret - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * Authors: Guy K. Kloss, Ron Garret - * - * You should have received a copy of the license along with this program. - */ - -var core = require('./core'); -var curve255 = require('./curve255'); -var utils = require('./utils'); -var BigInteger = require('jsbn').BigInteger; -var crypto = require('crypto'); - - /** - * @exports jodid25519/eddsa - * Digital signature scheme based on Curve25519 (Ed25519 or EdDSA). - * - * @description - * Digital signature scheme based on Curve25519 (Ed25519 or EdDSA). - * - *

- * This code is adapted from fast-djbec.js, a faster but more complicated - * version of the Ed25519 encryption scheme (as compared to djbec.js). - * It uses two different representations for big integers: The jsbn - * BigInteger class, which can represent arbitrary-length numbers, and a - * special fixed-length representation optimised for 256-bit integers. - * The reason both are needed is that the Ed25519 algorithm requires some - * 512-bit numbers.

- */ - var ns = {}; - - function _bi255(value) { - if (!(this instanceof _bi255)) { - return new _bi255(value); - } - if (typeof value === 'undefined') { - return _ZERO; - } - var c = value.constructor; - if ((c === Array || c === Uint16Array || c === Uint32Array) && (value.length === 16)) { - this.n = value; - } else if ((c === Array) && (value.length === 32)) { - this.n = _bytes2bi255(value).n; - } else if (c === String) { - this.n = utils.hexDecode(value); - } else if (c === Number) { - this.n = [value & 0xffff, - value >> 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - } else if (value instanceof _bi255) { - this.n = value.n.slice(0); // Copy constructor - } else { - throw "Bad argument for bignum: " + value; - } - } - - _bi255.prototype = { - 'toString' : function() { - return utils.hexEncode(this.n); - }, - 'toSource' : function() { - return '_' + utils.hexEncode(this.n); - }, - 'plus' : function(n1) { - return _bi255(core.bigintadd(this.n, n1.n)); - }, - 'minus' : function(n1) { - return _bi255(core.bigintsub(this.n, n1.n)).modq(); - }, - 'times' : function(n1) { - return _bi255(core.mulmodp(this.n, n1.n)); - }, - 'divide' : function(n1) { - return this.times(n1.inv()); - }, - 'sqr' : function() { - return _bi255(core.sqrmodp(this.n)); - }, - 'cmp' : function(n1) { - return core.bigintcmp(this.n, n1.n); - }, - 'equals' : function(n1) { - return this.cmp(n1) === 0; - }, - 'isOdd' : function() { - return (this.n[0] & 1) === 1; - }, - 'shiftLeft' : function(cnt) { - _shiftL(this.n, cnt); - return this; - }, - 'shiftRight' : function(cnt) { - _shiftR(this.n, cnt); - return this; - }, - 'inv' : function() { - return _bi255(core.invmodp(this.n)); - }, - 'pow' : function(e) { - return _bi255(_pow(this.n, e.n)); - }, - 'modq' : function() { - return _modq(this); - }, - 'bytes' : function() { - return _bi255_bytes(this); - } - }; - - function _shiftL(n, cnt) { - var lastcarry = 0; - for (var i = 0; i < 16; i++) { - var carry = n[i] >> (16 - cnt); - n[i] = (n[i] << cnt) & 0xffff | lastcarry; - lastcarry = carry; - } - return n; - } - - function _shiftR(n, cnt) { - var lastcarry = 0; - for (var i = 15; i >= 0; i--) { - var carry = n[i] << (16 - cnt) & 0xffff; - n[i] = (n[i] >> cnt) | lastcarry; - lastcarry = carry; - } - return n; - } - - function _bi255_bytes(n) { - n = _bi255(n); // Make a copy because shiftRight is destructive - var a = new Array(32); - for (var i = 31; i >= 0; i--) { - a[i] = n.n[0] & 0xff; - n.shiftRight(8); - } - return a; - } - - function _bytes2bi255(a) { - var n = _ZERO; - for (var i = 0; i < 32; i++) { - n.shiftLeft(8); - n = n.plus(_bi255(a[i])); - } - return n; - } - - function _pow(n, e) { - var result = core.ONE(); - for (var i = 0; i < 256; i++) { - if (core.getbit(e, i) === 1) { - result = core.mulmodp(result, n); - } - n = core.sqrmodp(n); - } - return result; - } - - var _ZERO = _bi255(0); - var _ONE = _bi255(1); - var _TWO = _bi255(2); - // This is the core prime. - var _Q = _bi255([0xffff - 18, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, - 0xffff, 0xffff, 0x7fff]); - - function _modq(n) { - core.reduce(n.n); - if (n.cmp(_Q) >= 0) { - return _modq(n.minus(_Q)); - } - if (n.cmp(_ZERO) === -1) { - return _modq(n.plus(_Q)); - } else { - return n; - } - } - - // _RECOVERY_EXPONENT = _Q.plus(_bi255(3)).divide(_bi255(8)); - var _RECOVERY_EXPONENT = _bi255('0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe'); - // _D = _Q.minus(_bi255(121665)).divide(_bi255(121666)); - var _D = _bi255('52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3'); - // _I = _TWO.pow(_Q.minus(_ONE).divide(_bi255(4))); - var _I = _bi255('2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0'); - // _L = _TWO.pow(_bi255(252)).plus(_bi255('14def9dea2f79cd65812631a5cf5d3ed')); - var _L = _bi255('1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed'); - var _L_BI = _bi('1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed', 16); - - - // //////////////////////////////////////////////////////////// - - function _isoncurve(p) { - var x = p[0]; - var y = p[1]; - var xsqr = x.sqr(); - var ysqr = y.sqr(); - var v = _D.times(xsqr).times(ysqr); - return ysqr.minus(xsqr).minus(_ONE).minus(v).modq().equals(_ZERO); - } - - function _xrecover(y) { - var ysquared = y.sqr(); - var xx = ysquared.minus(_ONE).divide(_ONE.plus(_D.times(ysquared))); - var x = xx.pow(_RECOVERY_EXPONENT); - if (!(x.times(x).minus(xx).equals(_ZERO))) { - x = x.times(_I); - } - if (x.isOdd()) { - x = _Q.minus(x); - } - return x; - } - - function _x_pt_add(pt1, pt2) { - var x1 = pt1[0]; - var y1 = pt1[1]; - var z1 = pt1[2]; - var t1 = pt1[3]; - var x2 = pt2[0]; - var y2 = pt2[1]; - var z2 = pt2[2]; - var t2 = pt2[3]; - var A = y1.minus(x1).times(y2.plus(x2)); - var B = y1.plus(x1).times(y2.minus(x2)); - var C = z1.times(_TWO).times(t2); - var D = t1.times(_TWO).times(z2); - var E = D.plus(C); - var F = B.minus(A); - var G = B.plus(A); - var H = D.minus(C); - return [E.times(F), G.times(H), F.times(G), E.times(H)]; - } - - function _xpt_double(pt1) { - var x1 = pt1[0]; - var y1 = pt1[1]; - var z1 = pt1[2]; - var A = x1.times(x1); - var B = y1.times(y1); - var C = _TWO.times(z1).times(z1); - var D = _Q.minus(A); - var J = x1.plus(y1); - var E = J.times(J).minus(A).minus(B); - var G = D.plus(B); - var F = G.minus(C); - var H = D.minus(B); - return [E.times(F), G.times(H), F.times(G), E.times(H)]; - } - - function _xpt_mult(pt, n) { - if (n.equals(_ZERO)) { - return [_ZERO, _ONE, _ONE, _ZERO]; - } - var odd = n.isOdd(); - n.shiftRight(1); - var value = _xpt_double(_xpt_mult(pt, n)); - return odd ? _x_pt_add(value, pt) : value; - } - - function _pt_xform(pt) { - var x = pt[0]; - var y = pt[1]; - return [x, y, _ONE, x.times(y)]; - } - - function _pt_unxform(pt) { - var x = pt[0]; - var y = pt[1]; - var z = pt[2]; - var invz = z.inv(); - return [x.times(invz), y.times(invz)]; - } - - function _scalarmult(pt, n) { - return _pt_unxform(_xpt_mult(_pt_xform(pt), n)); - } - - function _bytesgetbit(bytes, n) { - return (bytes[bytes.length - (n >>> 3) - 1] >> (n & 7)) & 1; - } - - function _xpt_mult_bytes(pt, bytes) { - var r = [_ZERO, _ONE, _ONE, _ZERO]; - for (var i = (bytes.length << 3) - 1; i >= 0; i--) { - r = _xpt_double(r); - if (_bytesgetbit(bytes, i) === 1) { - r = _x_pt_add(r, pt); - } - } - return r; - } - - function _scalarmultBytes(pt, bytes) { - return _pt_unxform(_xpt_mult_bytes(_pt_xform(pt), bytes)); - } - - var _by = _bi255(4).divide(_bi255(5)); - var _bx = _xrecover(_by); - var _bp = [_bx, _by]; - - function _encodeint(n) { - return n.bytes(32).reverse(); - } - function _decodeint(b) { - return _bi255(b.slice(0).reverse()); - } - - function _encodepoint(p) { - var v = _encodeint(p[1]); - if (p[0].isOdd()) { - v[31] |= 0x80; - } - return v; - } - - function _decodepoint(v) { - v = v.slice(0); - var signbit = v[31] >> 7; - v[31] &= 127; - var y = _decodeint(v); - var x = _xrecover(y); - if ((x.n[0] & 1) !== signbit) { - x = _Q.minus(x); - } - var p = [x, y]; - if (!_isoncurve(p)) { - throw ('Point is not on curve'); - } - return p; - } - - // ////////////////////////////////////////////////// - - /** - * Factory function to create a suitable BigInteger. - * - * @param value - * The value for the big integer. - * @param base {integer} - * Base of the conversion of elements in ``value``. - * @returns - * A BigInteger object. - */ - function _bi(value, base) { - if (base !== undefined) { - if (base === 256) { - return _bi(utils.string2bytes(value)); - } - return new BigInteger(value, base); - } else if (typeof value === 'string') { - return new BigInteger(value, 10); - } else if ((value instanceof Array) || (value instanceof Uint8Array) - || Buffer.isBuffer(value)) { - return new BigInteger(value); - } else if (typeof value === 'number') { - return new BigInteger(value.toString(), 10); - } else { - throw "Can't convert " + value + " to BigInteger"; - } - } - - function _bi2bytes(n, cnt) { - if (cnt === undefined) { - cnt = (n.bitLength() + 7) >>> 3; - } - var bytes = new Array(cnt); - for (var i = cnt - 1; i >= 0; i--) { - bytes[i] = n[0] & 255; // n.and(0xff); - n = n.shiftRight(8); - } - return bytes; - } - - BigInteger.prototype.bytes = function(n) { - return _bi2bytes(this, n); - }; - - // ///////////////////////////////////////////////////////// - - function _bytehash(s) { - var sha = crypto.createHash('sha512').update(s).digest(); - return _bi2bytes(_bi(sha), 64).reverse(); - } - - function _stringhash(s) { - var sha = crypto.createHash('sha512').update(s).digest(); - return _map(_chr, _bi2bytes(_bi(sha), 64)).join(''); - } - - function _inthash(s) { - // Need a leading 0 to prevent sign extension - return _bi([0].concat(_bytehash(s))); - } - - function _inthash_lo(s) { - return _bi255(_bytehash(s).slice(32, 64)); - } - - function _inthash_mod_l(s) { - return _inthash(s).mod(_L_BI); - } - - function _get_a(sk) { - var a = _inthash_lo(sk); - a.n[0] &= 0xfff8; - a.n[15] &= 0x3fff; - a.n[15] |= 0x4000; - return a; - } - - function _publickey(sk) { - return _encodepoint(_scalarmult(_bp, _get_a(sk))); - } - - function _map(f, l) { - var result = new Array(l.length); - for (var i = 0; i < l.length; i++) { - result[i] = f(l[i]); - } - return result; - } - - function _chr(n) { - return String.fromCharCode(n); - } - - function _ord(c) { - return c.charCodeAt(0); - } - - function _pt_add(p1, p2) { - return _pt_unxform(_x_pt_add(_pt_xform(p1), _pt_xform(p2))); - } - - - // Exports for the API. - - /** - * Checks whether a point is on the curve. - * - * @function - * @param point {string} - * The point to check for in a byte string representation. - * @returns {boolean} - * true if the point is on the curve, false otherwise. - */ - ns.isOnCurve = function(point) { - try { - _isoncurve(_decodepoint(utils.string2bytes(point))); - } catch(e) { - if (e === 'Point is not on curve') { - return false; - } else { - throw e; - } - } - return true; - }; - - - /** - * Computes the EdDSA public key. - * - *

Note: Seeds should be a byte string, not a unicode string containing - * multi-byte characters.

- * - * @function - * @param keySeed {string} - * Private key seed in the form of a byte string. - * @returns {string} - * Public key as byte string computed from the private key seed - * (32 bytes). - */ - ns.publicKey = function(keySeed) { - return utils.bytes2string(_publickey(keySeed)); - }; - - - /** - * Computes an EdDSA signature of a message. - * - *

Notes:

- * - *
    - *
  • Unicode messages need to be converted to a byte representation - * (e. g. UTF-8).
  • - *
  • If `publicKey` is given, and it is *not* a point of the curve, - * the signature will be faulty, but no error will be thrown.
  • - *
- * - * @function - * @param message {string} - * Message in the form of a byte string. - * @param keySeed {string} - * Private key seed in the form of a byte string. - * @param publicKey {string} - * Public key as byte string (if not present, it will be computed from - * the private key seed). - * @returns {string} - * Detached message signature in the form of a byte string (64 bytes). - */ - ns.sign = function(message, keySeed, publicKey) { - if (publicKey === undefined) { - publicKey = _publickey(keySeed); - } else { - publicKey = utils.string2bytes(publicKey); - } - var a = _bi(_get_a(keySeed).toString(), 16); - var hs = _stringhash(keySeed); - var r = _bytehash(hs.slice(32, 64) + message); - var rp = _scalarmultBytes(_bp, r); - var erp = _encodepoint(rp); - r = _bi(r).mod(_bi(1, 10).shiftLeft(512)); - var s = _map(_chr, erp).join('') + _map(_chr, publicKey).join('') + message; - s = _inthash_mod_l(s).multiply(a).add(r).mod(_L_BI); - return utils.bytes2string(erp.concat(_encodeint(s))); - }; - - - /** - * Verifies an EdDSA signature of a message with the public key. - * - *

Note: Unicode messages need to be converted to a byte representation - * (e. g. UTF-8).

- * - * @function - * @param signature {string} - * Message signature in the form of a byte string. Can be detached - * (64 bytes), or attached to be sliced off. - * @param message {string} - * Message in the form of a byte string. - * @param publicKey {string} - * Public key as byte string (if not present, it will be computed from - * the private key seed). - * @returns {boolean} - * true, if the signature verifies. - */ - ns.verify = function(signature, message, publicKey) { - signature = utils.string2bytes(signature.slice(0, 64)); - publicKey = utils.string2bytes(publicKey); - var rpe = signature.slice(0, 32); - var rp = _decodepoint(rpe); - var a = _decodepoint(publicKey); - var s = _decodeint(signature.slice(32, 64)); - var h = _inthash(utils.bytes2string(rpe.concat(publicKey)) + message); - var v1 = _scalarmult(_bp, s); - var value = _scalarmultBytes(a, _bi2bytes(h)); - var v2 = _pt_add(rp, value); - return v1[0].equals(v2[0]) && v1[1].equals(v2[1]); - }; - - - /** - * Generates a new random private key seed of 32 bytes length (256 bit). - * - * @function - * @returns {string} - * Byte string containing a new random private key seed. - */ - ns.generateKeySeed = function() { - return core.generateKey(false); - }; - -module.exports = ns; diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/utils.js b/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/utils.js deleted file mode 100644 index c795231ad..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/lib/utils.js +++ /dev/null @@ -1,198 +0,0 @@ -"use strict"; -/** - * @fileOverview - * A collection of general utility functions.. - */ - -/* - * Copyright (c) 2011, 2012, 2014 Ron Garret - * Copyright (c) 2007, 2013, 2014 Michele Bini - * Copyright (c) 2014 Mega Limited - * under the MIT License. - * - * Authors: Guy K. Kloss, Michele Bini, Ron Garret - * - * You should have received a copy of the license along with this program. - */ - -var core = require('./core'); - - /** - * @exports jodid25519/utils - * A collection of general utility functions.. - * - * @description - * A collection of general utility functions.. - */ - var ns = {}; - - var _HEXCHARS = "0123456789abcdef"; - - function _hexencode(vector) { - var result = []; - for (var i = vector.length - 1; i >= 0; i--) { - var value = vector[i]; - result.push(_HEXCHARS.substr((value >>> 12) & 0x0f, 1)); - result.push(_HEXCHARS.substr((value >>> 8) & 0x0f, 1)); - result.push(_HEXCHARS.substr((value >>> 4) & 0x0f, 1)); - result.push(_HEXCHARS.substr(value & 0x0f, 1)); - } - return result.join(''); - } - - function _hexdecode(vector) { - var result = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; - for (var i = vector.length - 1, l = 0; i >= 0; i -= 4) { - result[l] = (_HEXCHARS.indexOf(vector.charAt(i))) - | (_HEXCHARS.indexOf(vector.charAt(i - 1)) << 4) - | (_HEXCHARS.indexOf(vector.charAt(i - 2)) << 8) - | (_HEXCHARS.indexOf(vector.charAt(i - 3)) << 12); - l++; - } - return result; - } - - var _BASE32CHARS = "abcdefghijklmnopqrstuvwxyz234567"; - - var _BASE32VALUES = (function () { - var result = {}; - for (var i = 0; i < _BASE32CHARS.length; i++) { - result[_BASE32CHARS.charAt(i)] = i; - } - return result; - })(); - - function _base32encode(n) { - var c; - var r = ""; - for (c = 0; c < 255; c += 5) { - r = _BASE32CHARS.substr(core.getbit(n, c) - + (core.getbit(n, c + 1) << 1) - + (core.getbit(n, c + 2) << 2) - + (core.getbit(n, c + 3) << 3) - + (core.getbit(n, c + 4) << 4), 1) - + r; - } - return r; - } - - function _base32decode(n) { - var c = 0; - var r = core.ZERO(); - var l = n.length; - for (c = 0; (l > 0) && (c < 255); c += 5) { - l--; - var v = _BASE32VALUES[n.substr(l, 1)]; - core.setbit(r, c, v & 1); - v >>= 1; - core.setbit(r, c + 1, v & 1); - v >>= 1; - core.setbit(r, c + 2, v & 1); - v >>= 1; - core.setbit(r, c + 3, v & 1); - v >>= 1; - core.setbit(r, c + 4, v & 1); - } - return r; - } - - function _map(f, l) { - var result = new Array(l.length); - for (var i = 0; i < l.length; i++) { - result[i] = f(l[i]); - } - return result; - } - - function _chr(n) { - return String.fromCharCode(n); - } - - function _ord(c) { - return c.charCodeAt(0); - } - - function _bytes2string(bytes) { - return _map(_chr, bytes).join(''); - } - - function _string2bytes(s) { - return _map(_ord, s); - } - - - // Expose some functions to the outside through this name space. - - /** - * Encodes an array of unsigned 8-bit integers to a hex string. - * - * @function - * @param vector {array} - * Array containing the byte values. - * @returns {string} - * String containing vector in a hexadecimal representation. - */ - ns.hexEncode = _hexencode; - - - /** - * Decodes a hex string to an array of unsigned 8-bit integers. - * - * @function - * @param vector {string} - * String containing vector in a hexadecimal representation. - * @returns {array} - * Array containing the byte values. - */ - ns.hexDecode = _hexdecode; - - - /** - * Encodes an array of unsigned 8-bit integers using base32 encoding. - * - * @function - * @param vector {array} - * Array containing the byte values. - * @returns {string} - * String containing vector in a hexadecimal representation. - */ - ns.base32encode = _base32encode; - - - /** - * Decodes a base32 encoded string to an array of unsigned 8-bit integers. - * - * @function - * @param vector {string} - * String containing vector in a hexadecimal representation. - * @returns {array} - * Array containing the byte values. - */ - ns.base32decode = _base32decode; - - - /** - * Converts an unsigned 8-bit integer array representation to a byte string. - * - * @function - * @param vector {array} - * Array containing the byte values. - * @returns {string} - * Byte string representation of vector. - */ - ns.bytes2string = _bytes2string; - - - /** - * Converts a byte string representation to an array of unsigned - * 8-bit integers. - * - * @function - * @param vector {array} - * Array containing the byte values. - * @returns {string} - * Byte string representation of vector. - */ - ns.string2bytes = _string2bytes; - -module.exports = ns; diff --git a/fundamentals/bug-challenge-es6/node_modules/jodid25519/package.json b/fundamentals/bug-challenge-es6/node_modules/jodid25519/package.json deleted file mode 100644 index f0f3d4d7e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jodid25519/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "jodid25519@^1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/sshpk" - ] - ], - "_from": "jodid25519@>=1.0.0 <2.0.0", - "_id": "jodid25519@1.0.2", - "_inCache": true, - "_installable": true, - "_location": "/jodid25519", - "_nodeVersion": "4.1.1", - "_npmUser": { - "email": "alex@cooperi.net", - "name": "arekinath" - }, - "_npmVersion": "2.14.4", - "_phantomChildren": {}, - "_requested": { - "name": "jodid25519", - "raw": "jodid25519@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz", - "_shasum": "06d4912255093419477d425633606e0e90782967", - "_shrinkwrap": null, - "_spec": "jodid25519@^1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/sshpk", - "author": { - "name": "Michele Bini, Ron Garret, Guy K. Kloss" - }, - "bugs": { - "url": "https://github.com/meganz/jodid25519/issues" - }, - "dependencies": { - "jsbn": "~0.1.0" - }, - "description": "jodid25519 - Curve 25519-based cryptography", - "devDependencies": { - "almond": "~0.3.1", - "chai": "^3.0.0", - "dateformat": "~1.0.7-1.2.3", - "ibrik": "~2.0.0", - "istanbul": "~0.3.5", - "jsdoc": "<=3.3.0", - "mocha": "~2.0.1", - "sinon": "~1.10.3", - "sinon-chai": "^2.8.0" - }, - "directories": { - "doc": "doc", - "src": "src", - "test": "test" - }, - "dist": { - "shasum": "06d4912255093419477d425633606e0e90782967", - "tarball": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz" - }, - "gitHead": "a83b9fcf7fd3be4f27cd4a57817aff171c7cd918", - "homepage": "https://github.com/meganz/jodid25519", - "keywords": [ - "Curve25519", - "Ed25519", - "ECDH", - "EdDSA", - "ECDSA", - "encryption", - "signing" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "alex@cooperi.net", - "name": "arekinath" - } - ], - "name": "jodid25519", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/meganz/jodid25519.git" - }, - "scripts": { - "test": "mocha test/*_test.js" - }, - "version": "1.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/js-tokens/LICENSE b/fundamentals/bug-challenge-es6/node_modules/js-tokens/LICENSE deleted file mode 100644 index c9a4e1bb4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-tokens/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014, 2015, 2016 Simon Lydell - -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/fundamentals/bug-challenge-es6/node_modules/js-tokens/changelog.md b/fundamentals/bug-challenge-es6/node_modules/js-tokens/changelog.md deleted file mode 100644 index b789fdd49..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-tokens/changelog.md +++ /dev/null @@ -1,82 +0,0 @@ -### Version 2.0.0 (2016-06-19) ### - -- Added: Support for ES2016. In other words, support for the `**` exponentiation - operator. - -These are the breaking changes: - -- `'**'.match(jsTokens)` no longer returns `['*', '*']`, but `['**']`. -- `'**='.match(jsTokens)` no longer returns `['*', '*=']`, but `['**=']`. - - -### Version 1.0.3 (2016-03-27) ### - -- Improved: Made the regex ever so slightly smaller. -- Updated: The readme. - - -### Version 1.0.2 (2015-10-18) ### - -- Improved: Limited npm package contents for a smaller download. Thanks to - @zertosh! - - -### Version 1.0.1 (2015-06-20) ### - -- Fixed: Declared an undeclared variable. - - -### Version 1.0.0 (2015-02-26) ### - -- Changed: Merged the 'operator' and 'punctuation' types into 'punctuator'. That - type is now equivalent to the Punctuator token in the ECMAScript - specification. (Backwards-incompatible change.) -- Fixed: A `-` followed by a number is now correctly matched as a punctuator - followed by a number. It used to be matched as just a number, but there is no - such thing as negative number literals. (Possibly backwards-incompatible - change.) - - -### Version 0.4.1 (2015-02-21) ### - -- Added: Support for the regex `u` flag. - - -### Version 0.4.0 (2015-02-21) ### - -- Improved: `jsTokens.matchToToken` performance. -- Added: Support for octal and binary number literals. -- Added: Support for template strings. - - -### Version 0.3.1 (2015-01-06) ### - -- Fixed: Support for unicode spaces. They used to be allowed in names (which is - very confusing), and some unicode newlines were wrongly allowed in strings and - regexes. - - -### Version 0.3.0 (2014-12-19) ### - -- Changed: The `jsTokens.names` array has been replaced with the - `jsTokens.matchToToken` function. The capturing groups of `jsTokens` are no - longer part of the public API; instead use said function. See this [gist] for - an example. (Backwards-incompatible change.) -- Changed: The empty string is now considered an “invalid” token, instead an - “empty” token (its own group). (Backwards-incompatible change.) -- Removed: component support. (Backwards-incompatible change.) - -[gist]: https://gist.github.com/lydell/be49dbf80c382c473004 - - -### Version 0.2.0 (2014-06-19) ### - -- Changed: Match ES6 function arrows (`=>`) as an operator, instead of its own - category (“functionArrow”), for simplicity. (Backwards-incompatible change.) -- Added: ES6 splats (`...`) are now matched as an operator (instead of three - punctuations). (Backwards-incompatible change.) - - -### Version 0.1.0 (2014-03-08) ### - -- Initial release. diff --git a/fundamentals/bug-challenge-es6/node_modules/js-tokens/index.js b/fundamentals/bug-challenge-es6/node_modules/js-tokens/index.js deleted file mode 100644 index 2e070409d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-tokens/index.js +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2014, 2015, 2016 Simon Lydell -// X11 (“MIT”) Licensed. (See LICENSE.) - -// This regex comes from regex.coffee, and is inserted here by generate-index.js -// (run `npm run build`). -module.exports = /((['"])(?:(?!\2|\\).|\\(?:\r\n|[\s\S]))*(\2)?|`(?:[^`\\$]|\\[\s\S]|\$(?!\{)|\$\{(?:[^{}]|\{[^}]*\}?)*\}?)*(`)?)|(\/\/.*)|(\/\*(?:[^*]|\*(?!\/))*(\*\/)?)|(\/(?!\*)(?:\[(?:(?![\]\\]).|\\.)*\]|(?![\/\]\\]).|\\.)+\/(?:(?!\s*(?:\b|[\u0080-\uFFFF$\\'"~({]|[+\-!](?!=)|\.?\d))|[gmiyu]{1,5}\b(?![\u0080-\uFFFF$\\]|\s*(?:[+\-*%&|^<>!=?({]|\/(?![\/*])))))|(0[xX][\da-fA-F]+|0[oO][0-7]+|0[bB][01]+|(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?)|((?!\d)(?:(?!\s)[$\w\u0080-\uFFFF]|\\u[\da-fA-F]{4}|\\u\{[\da-fA-F]{1,6}\})+)|(--|\+\+|&&|\|\||=>|\.{3}|(?:[+\-\/%&|^]|\*{1,2}|<{1,2}|>{1,3}|!=?|={1,2})=?|[?~.,:;[\](){}])|(\s+)|(^$|[\s\S])/g - -module.exports.matchToToken = function(match) { - var token = {type: "invalid", value: match[0]} - if (match[ 1]) token.type = "string" , token.closed = !!(match[3] || match[4]) - else if (match[ 5]) token.type = "comment" - else if (match[ 6]) token.type = "comment", token.closed = !!match[7] - else if (match[ 8]) token.type = "regex" - else if (match[ 9]) token.type = "number" - else if (match[10]) token.type = "name" - else if (match[11]) token.type = "punctuator" - else if (match[12]) token.type = "whitespace" - return token -} diff --git a/fundamentals/bug-challenge-es6/node_modules/js-tokens/package.json b/fundamentals/bug-challenge-es6/node_modules/js-tokens/package.json deleted file mode 100644 index 22f622155..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-tokens/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "js-tokens@^2.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-code-frame" - ] - ], - "_from": "js-tokens@>=2.0.0 <3.0.0", - "_id": "js-tokens@2.0.0", - "_inCache": true, - "_installable": true, - "_location": "/js-tokens", - "_nodeVersion": "5.11.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/js-tokens-2.0.0.tgz_1466321890449_0.1510669116396457" - }, - "_npmUser": { - "email": "simon.lydell@gmail.com", - "name": "lydell" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "js-tokens", - "raw": "js-tokens@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-code-frame", - "/loose-envify" - ], - "_resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-2.0.0.tgz", - "_shasum": "79903f5563ee778cc1162e6dcf1a0027c97f9cb5", - "_shrinkwrap": null, - "_spec": "js-tokens@^2.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-code-frame", - "author": { - "name": "Simon Lydell" - }, - "bugs": { - "url": "https://github.com/lydell/js-tokens/issues" - }, - "dependencies": {}, - "description": "A regex that tokenizes JavaScript.", - "devDependencies": { - "coffee-script": "~1.10.0", - "esprima": "^2.7.2", - "everything.js": "^1.0.3", - "mocha": "^2.5.3" - }, - "directories": {}, - "dist": { - "shasum": "79903f5563ee778cc1162e6dcf1a0027c97f9cb5", - "tarball": "https://registry.npmjs.org/js-tokens/-/js-tokens-2.0.0.tgz" - }, - "files": [ - "index.js" - ], - "gitHead": "23fcbe4639fb4baee5dc53616958cc04c8b94026", - "homepage": "https://github.com/lydell/js-tokens#readme", - "keywords": [ - "JavaScript", - "js", - "token", - "tokenize", - "regex" - ], - "license": "MIT", - "maintainers": [ - { - "email": "simon.lydell@gmail.com", - "name": "lydell" - } - ], - "name": "js-tokens", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lydell/js-tokens.git" - }, - "scripts": { - "build": "node generate-index.js", - "dev": "npm run build && npm test", - "esprima-compare": "node esprima-compare ./index.js everything.js/es5.js", - "test": "mocha --ui tdd" - }, - "version": "2.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/js-tokens/readme.md b/fundamentals/bug-challenge-es6/node_modules/js-tokens/readme.md deleted file mode 100644 index 68e470f0c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-tokens/readme.md +++ /dev/null @@ -1,217 +0,0 @@ -Overview [![Build Status](https://travis-ci.org/lydell/js-tokens.png?branch=master)](https://travis-ci.org/lydell/js-tokens) -======== - -A regex that tokenizes JavaScript. - -```js -var jsTokens = require("js-tokens") - -var jsString = "var foo=opts.foo;\n..." - -jsString.match(jsTokens) -// ["var", " ", "foo", "=", "opts", ".", "foo", ";", "\n", ...] -``` - - -Installation -============ - -`npm install js-tokens` - -```js -var jsTokens = require("js-tokens") -``` - - -Usage -===== - -### `jsTokens` ### - -A regex with the `g` flag that matches JavaScript tokens. - -The regex _always_ matches, even invalid JavaScript and the empty string. - -The next match is always directly after the previous. - -### `var token = jsTokens.matchToToken(match)` ### - -Takes a `match` returned by `jsTokens.exec(string)`, and returns a `{type: -String, value: String}` object. The following types are available: - -- string -- comment -- regex -- number -- name -- punctuator -- whitespace -- invalid - -Multi-line comments and strings also have a `closed` property indicating if the -token was closed or not (see below). - -Comments and strings both come in several flavors. To distinguish them, check if -the token starts with `//`, `/*`, `'`, `"` or `` ` ``. - -Names are ECMAScript IdentifierNames, that is, including both identifiers and -keywords. You may use [is-keyword-js] to tell them apart. - -Whitespace includes both line terminators and other whitespace. - -For example usage, please see this [gist]. - -[is-keyword-js]: https://github.com/crissdev/is-keyword-js -[gist]: https://gist.github.com/lydell/be49dbf80c382c473004 - - -ECMAScript support -================== - -The intention is to always support the latest stable ECMAScript version. - -If adding support for a newer version requires changes, a new version with a -major verion bump will be released. - -Currently, [ECMAScript 2016] is supported. - -[ECMAScript 2016]: http://www.ecma-international.org/ecma-262/7.0/index.html - - -Invalid code handling -===================== - -Unterminated strings are still matched as strings. JavaScript strings cannot -contain (unescaped) newlines, so unterminated strings simply end at the end of -the line. Unterminated template strings can contain unescaped newlines, though, -so they go on to the end of input. - -Unterminated multi-line comments are also still matched as comments. They -simply go on to the end of the input. - -Unterminated regex literals are likely matched as division and whatever is -inside the regex. - -Invalid ASCII characters have their own capturing group. - -Invalid non-ASCII characters are treated as names, to simplify the matching of -names (except unicode spaces which are treated as whitespace). - -Regex literals may contain invalid regex syntax. They are still matched as -regex literals. They may also contain repeated regex flags, to keep the regex -simple. - -Strings may contain invalid escape sequences. - - -Limitations -=========== - -Tokenizing JavaScript using regexes—in fact, _one single regex_—won’t be -perfect. But that’s not the point either. - -You may compare jsTokens with [esprima] by using `esprima-compare.js`. -See `npm run esprima-compare`! - -[esprima]: http://esprima.org/ - -### Template string interpolation ### - -Template strings are matched as single tokens, from the starting `` ` `` to the -ending `` ` ``, including interpolations (whose tokens are not matched -individually). - -Matching template string interpolations requires recursive balancing of `{` and -`}`—something that JavaScript regexes cannot do. Only one level of nesting is -supported. - -### Division and regex literals collision ### - -Consider this example: - -```js -var g = 9.82 -var number = bar / 2/g - -var regex = / 2/g -``` - -A human can easily understand that in the `number` line we’re dealing with -division, and in the `regex` line we’re dealing with a regex literal. How come? -Because humans can look at the whole code to put the `/` characters in context. -A JavaScript regex cannot. It only sees forwards. - -When the `jsTokens` regex scans throught the above, it will see the following -at the end of both the `number` and `regex` rows: - -```js -/ 2/g -``` - -It is then impossible to know if that is a regex literal, or part of an -expression dealing with division. - -Here is a similar case: - -```js -foo /= 2/g -foo(/= 2/g) -``` - -The first line divides the `foo` variable with `2/g`. The second line calls the -`foo` function with the regex literal `/= 2/g`. Again, since `jsTokens` only -sees forwards, it cannot tell the two cases apart. - -There are some cases where we _can_ tell division and regex literals apart, -though. - -First off, we have the simple cases where there’s only one slash in the line: - -```js -var foo = 2/g -foo /= 2 -``` - -Regex literals cannot contain newlines, so the above cases are correctly -identified as division. Things are only problematic when there are more than -one non-comment slash in a single line. - -Secondly, not every character is a valid regex flag. - -```js -var number = bar / 2/e -``` - -The above example is also correctly identified as division, because `e` is not a -valid regex flag. I initially wanted to future-proof by allowing `[a-zA-Z]*` -(any letter) as flags, but it is not worth it since it increases the amount of -ambigous cases. So only the standard `g`, `m`, `i`, `y` and `u` flags are -allowed. This means that the above example will be identified as division as -long as you don’t rename the `e` variable to some permutation of `gmiyu` 1 to 5 -characters long. - -Lastly, we can look _forward_ for information. - -- If the token following what looks like a regex literal is not valid after a - regex literal, but is valid in a division expression, then the regex literal - is treated as division instead. For example, a flagless regex cannot be - followed by a string, number or name, but all of those three can be the - denominator of a division. -- Generally, if what looks like a regex literal is followed by an operator, the - regex literal is treated as division instead. This is because regexes are - seldomly used with operators (such as `+`, `*`, `&&` and `==`), but division - could likely be part of such an expression. - -Please consult the regex source and the test cases for precise information on -when regex or division is matched (should you need to know). In short, you -could sum it up as: - -If the end of a statement looks like a regex literal (even if it isn’t), it -will be treated as one. Otherwise it should work as expected (if you write sane -code). - - -License -======= - -[The X11 (“MIT”) License](LICENSE). diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/js-yaml/CHANGELOG.md deleted file mode 100644 index 103b1bbc9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/CHANGELOG.md +++ /dev/null @@ -1,409 +0,0 @@ -3.7.0 / 2016-11-12 ------------------- - -- Fix parsing of quotes followed by newlines (#304, thanks to @dplepage). -- Support polymorphism for tags (#300, thanks to @monken). - - -3.6.1 / 2016-05-11 ------------------- - -- Fix output cut on a pipe, #286. - - -3.6.0 / 2016-04-16 ------------------- - -- Dumper rewrite, fix multiple bugs with trailing `\n`. - Big thanks to @aepsilon! -- Loader: fix leading/trailing newlines in block scalars, @aepsilon. - - -3.5.5 / 2016-03-17 ------------------- - -- Date parse fix: don't allow dates with on digit in month and day, #268. - - -3.5.4 / 2016-03-09 ------------------- - -- `noCompatMode` for dumper, to disable quoting YAML 1.1 values. - - -3.5.3 / 2016-02-11 ------------------- - -- Maintenance release. - - -3.5.2 / 2016-01-11 ------------------- - -- Maintenance: missed comma in bower config. - - -3.5.1 / 2016-01-11 ------------------- - -- Removed `inherit` dependency, #239. -- Better browserify workaround for esprima load. -- Demo rewrite. - - -3.5.0 / 2016-01-10 ------------------- - -- Dumper. Fold strings only, #217. -- Dumper. `norefs` option, to clone linked objects, #229. -- Loader. Throw a warning for duplicate keys, #166. -- Improved browserify support (mark `esprima` & `Buffer` excluded). - - -3.4.6 / 2015-11-26 ------------------- - -- Use standalone `inherit` to keep browserified files clear. - - -3.4.5 / 2015-11-23 ------------------- - -- Added `lineWidth` option to dumper. - - -3.4.4 / 2015-11-21 ------------------- - -- Fixed floats dump (missed dot for scientific format), #220. -- Allow non-printable characters inside quoted scalars, #192. - - -3.4.3 / 2015-10-10 ------------------- - -- Maintenance release - deps bump (esprima, argparse). - - -3.4.2 / 2015-09-09 ------------------- - -- Fixed serialization of duplicated entries in sequences, #205. - Thanks to @vogelsgesang. - - -3.4.1 / 2015-09-05 ------------------- - -- Fixed stacktrace handling in generated errors, for browsers (FF/IE). - - -3.4.0 / 2015-08-23 ------------------- - -- Fixed multiline keys dump, #197. Thanks to @tcr. -- Don't throw on warnongs anymore. Use `onWarning` option to catch. -- Throw error on unknown tags (was warning before). -- Fixed heading line breaks in some scalars (regression). -- Reworked internals of error class. - - -3.3.1 / 2015-05-13 ------------------- - -- Added `.sortKeys` dumper option, thanks to @rjmunro. -- Fixed astral characters support, #191. - - -3.3.0 / 2015-04-26 ------------------- - -- Significantly improved long strings formatting in dumper, thanks to @isaacs. -- Strip BOM if exists. - - -3.2.7 / 2015-02-19 ------------------- - -- Maintenance release. -- Updated dependencies. -- HISTORY.md -> CHANGELOG.md - - -3.2.6 / 2015-02-07 ------------------- - -- Fixed encoding of UTF-16 surrogate pairs. (e.g. "\U0001F431" CAT FACE). -- Fixed demo dates dump (#113, thanks to @Hypercubed). - - -3.2.5 / 2014-12-28 ------------------- - -- Fixed resolving of all built-in types on empty nodes. -- Fixed invalid warning on empty lines within quoted scalars and flow collections. -- Fixed bug: Tag on an empty node didn't resolve in some cases. - - -3.2.4 / 2014-12-19 ------------------- - -- Fixed resolving of !!null tag on an empty node. - - -3.2.3 / 2014-11-08 ------------------- - -- Implemented dumping of objects with circular and cross references. -- Partially fixed aliasing of constructed objects. (see issue #141 for details) - - -3.2.2 / 2014-09-07 ------------------- - -- Fixed infinite loop on unindented block scalars. -- Rewritten base64 encode/decode in binary type, to keep code licence clear. - - -3.2.1 / 2014-08-24 ------------------- - -- Nothig new. Just fix npm publish error. - - -3.2.0 / 2014-08-24 ------------------- - -- Added input piping support to CLI. -- Fixed typo, that could cause hand on initial indent (#139). - - -3.1.0 / 2014-07-07 ------------------- - -- 1.5x-2x speed boost. -- Removed deprecated `require('xxx.yml')` support. -- Significant code cleanup and refactoring. -- Internal API changed. If you used custom types - see updated examples. - Others are not affected. -- Even if the input string has no trailing line break character, - it will be parsed as if it has one. -- Added benchmark scripts. -- Moved bower files to /dist folder -- Bugfixes. - - -3.0.2 / 2014-02-27 ------------------- - -- Fixed bug: "constructor" string parsed as `null`. - - -3.0.1 / 2013-12-22 ------------------- - -- Fixed parsing of literal scalars. (issue #108) -- Prevented adding unnecessary spaces in object dumps. (issue #68) -- Fixed dumping of objects with very long (> 1024 in length) keys. - - -3.0.0 / 2013-12-16 ------------------- - -- Refactored code. Changed API for custom types. -- Removed output colors in CLI, dump json by default. -- Removed big dependencies from browser version (esprima, buffer) - - load `esprima` manually, if !!js/function needed - - !!bin now returns Array in browser -- AMD support. -- Don't quote dumped strings because of `-` & `?` (if not first char). -- __Deprecated__ loading yaml files via `require()`, as not recommended - behaviour for node. - - -2.1.3 / 2013-10-16 ------------------- - -- Fix wrong loading of empty block scalars. - - -2.1.2 / 2013-10-07 ------------------- - -- Fix unwanted line breaks in folded scalars. - - -2.1.1 / 2013-10-02 ------------------- - -- Dumper now respects deprecated booleans syntax from YAML 1.0/1.1 -- Fixed reader bug in JSON-like sequences/mappings. - - -2.1.0 / 2013-06-05 ------------------- - -- Add standard YAML schemas: Failsafe (`FAILSAFE_SCHEMA`), - JSON (`JSON_SCHEMA`) and Core (`CORE_SCHEMA`). -- Rename `DEFAULT_SCHEMA` to `DEFAULT_FULL_SCHEMA` - and `SAFE_SCHEMA` to `DEFAULT_SAFE_SCHEMA`. -- Bug fix: export `NIL` constant from the public interface. -- Add `skipInvalid` dumper option. -- Use `safeLoad` for `require` extension. - - -2.0.5 / 2013-04-26 ------------------- - -- Close security issue in !!js/function constructor. - Big thanks to @nealpoole for security audit. - - -2.0.4 / 2013-04-08 ------------------- - -- Updated .npmignore to reduce package size - - -2.0.3 / 2013-02-26 ------------------- - -- Fixed dumping of empty arrays ans objects. ([] and {} instead of null) - - -2.0.2 / 2013-02-15 ------------------- - -- Fixed input validation: tabs are printable characters. - - -2.0.1 / 2013-02-09 ------------------- - -- Fixed error, when options not passed to function cass - - -2.0.0 / 2013-02-09 ------------------- - -- Full rewrite. New architecture. Fast one-stage parsing. -- Changed custom types API. -- Added YAML dumper. - - -1.0.3 / 2012-11-05 ------------------- - -- Fixed utf-8 files loading. - - -1.0.2 / 2012-08-02 ------------------- - -- Pull out hand-written shims. Use ES5-Shims for old browsers support. See #44. -- Fix timstamps incorectly parsed in local time when no time part specified. - - -1.0.1 / 2012-07-07 ------------------- - -- Fixes `TypeError: 'undefined' is not an object` under Safari. Thanks Phuong. -- Fix timestamps incorrectly parsed in local time. Thanks @caolan. Closes #46. - - -1.0.0 / 2012-07-01 ------------------- - -- `y`, `yes`, `n`, `no`, `on`, `off` are not converted to Booleans anymore. - Fixes #42. -- `require(filename)` now returns a single document and throws an Error if - file contains more than one document. -- CLI was merged back from js-yaml.bin - - -0.3.7 / 2012-02-28 ------------------- - -- Fix export of `addConstructor()`. Closes #39. - - -0.3.6 / 2012-02-22 ------------------- - -- Removed AMD parts - too buggy to use. Need help to rewrite from scratch -- Removed YUI compressor warning (renamed `double` variable). Closes #40. - - -0.3.5 / 2012-01-10 ------------------- - -- Workagound for .npmignore fuckup under windows. Thanks to airportyh. - - -0.3.4 / 2011-12-24 ------------------- - -- Fixes str[] for oldIEs support. -- Adds better has change support for browserified demo. -- improves compact output of Error. Closes #33. - - -0.3.3 / 2011-12-20 ------------------- - -- jsyaml executable moved to separate module. -- adds `compact` stringification of Errors. - - -0.3.2 / 2011-12-16 ------------------- - -- Fixes ug with block style scalars. Closes #26. -- All sources are passing JSLint now. -- Fixes bug in Safari. Closes #28. -- Fixes bug in Opers. Closes #29. -- Improves browser support. Closes #20. -- Added jsyaml executable. -- Added !!js/function support. Closes #12. - - -0.3.1 / 2011-11-18 ------------------- - -- Added AMD support for browserified version. -- Wrapped browserified js-yaml into closure. -- Fixed the resolvement of non-specific tags. Closes #17. -- Added permalinks for online demo YAML snippets. Now we have YPaste service, lol. -- Added !!js/regexp and !!js/undefined types. Partially solves #12. -- Fixed !!set mapping. -- Fixed month parse in dates. Closes #19. - - -0.3.0 / 2011-11-09 ------------------- - -- Removed JS.Class dependency. Closes #3. -- Added browserified version. Closes #13. -- Added live demo of browserified version. -- Ported some of the PyYAML tests. See #14. -- Fixed timestamp bug when fraction was given. - - -0.2.2 / 2011-11-06 ------------------- - -- Fixed crash on docs without ---. Closes #8. -- Fixed miltiline string parse -- Fixed tests/comments for using array as key - - -0.2.1 / 2011-11-02 ------------------- - -- Fixed short file read (<4k). Closes #9. - - -0.2.0 / 2011-11-02 ------------------- - -- First public release diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/LICENSE b/fundamentals/bug-challenge-es6/node_modules/js-yaml/LICENSE deleted file mode 100644 index 09d3a29e9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -(The MIT License) - -Copyright (C) 2011-2015 by Vitaly Puzrin - -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/fundamentals/bug-challenge-es6/node_modules/js-yaml/README.md b/fundamentals/bug-challenge-es6/node_modules/js-yaml/README.md deleted file mode 100644 index 45c35020c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/README.md +++ /dev/null @@ -1,295 +0,0 @@ -JS-YAML - YAML 1.2 parser / writer for JavaScript -================================================= - -[![Build Status](https://travis-ci.org/nodeca/js-yaml.svg?branch=master)](https://travis-ci.org/nodeca/js-yaml) -[![NPM version](https://img.shields.io/npm/v/js-yaml.svg)](https://www.npmjs.org/package/js-yaml) - -__[Online Demo](http://nodeca.github.com/js-yaml/)__ - - -This is an implementation of [YAML](http://yaml.org/), a human friendly data -serialization language. Started as [PyYAML](http://pyyaml.org/) port, it was -completely rewritten from scratch. Now it's very fast, and supports 1.2 spec. - - -Installation ------------- - -### YAML module for node.js - -``` -npm install js-yaml -``` - - -### CLI executable - -If you want to inspect your YAML files from CLI, install js-yaml globally: - -``` -npm install -g js-yaml -``` - -#### Usage - -``` -usage: js-yaml [-h] [-v] [-c] [-t] file - -Positional arguments: - file File with YAML document(s) - -Optional arguments: - -h, --help Show this help message and exit. - -v, --version Show program's version number and exit. - -c, --compact Display errors in compact mode - -t, --trace Show stack trace on error -``` - - -### Bundled YAML library for browsers - -``` html - - - - -``` - -Browser support was done mostly for online demo. If you find any errors - feel -free to send pull requests with fixes. Also note, that IE and other old browsers -needs [es5-shims](https://github.com/kriskowal/es5-shim) to operate. - -Notes: - -1. We have no resources to support browserified version. Don't expect it to be - well tested. Don't expect fast fixes if something goes wrong there. -2. `!!js/function` in browser bundle will not work by default. If you really need - it - load `esprima` parser first (via amd or directly). -3. `!!bin` in browser will return `Array`, because browsers do not support - node.js `Buffer` and adding Buffer shims is completely useless on practice. - - -API ---- - -Here we cover the most 'useful' methods. If you need advanced details (creating -your own tags), see [wiki](https://github.com/nodeca/js-yaml/wiki) and -[examples](https://github.com/nodeca/js-yaml/tree/master/examples) for more -info. - -``` javascript -yaml = require('js-yaml'); -fs = require('fs'); - -// Get document, or throw exception on error -try { - var doc = yaml.safeLoad(fs.readFileSync('/home/ixti/example.yml', 'utf8')); - console.log(doc); -} catch (e) { - console.log(e); -} -``` - - -### safeLoad (string [ , options ]) - -**Recommended loading way.** Parses `string` as single YAML document. Returns a JavaScript -object or throws `YAMLException` on error. By default, does not support regexps, -functions and undefined. This method is safe for untrusted data. - -options: - -- `filename` _(default: null)_ - string to be used as a file path in - error/warning messages. -- `onWarning` _(default: null)_ - function to call on warning messages. - Loader will throw on warnings if this function is not provided. -- `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ - specifies a schema to use. - - `FAILSAFE_SCHEMA` - only strings, arrays and plain objects: - http://www.yaml.org/spec/1.2/spec.html#id2802346 - - `JSON_SCHEMA` - all JSON-supported types: - http://www.yaml.org/spec/1.2/spec.html#id2803231 - - `CORE_SCHEMA` - same as `JSON_SCHEMA`: - http://www.yaml.org/spec/1.2/spec.html#id2804923 - - `DEFAULT_SAFE_SCHEMA` - all supported YAML types, without unsafe ones - (`!!js/undefined`, `!!js/regexp` and `!!js/function`): - http://yaml.org/type/ - - `DEFAULT_FULL_SCHEMA` - all supported YAML types. -- `json` _(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error. - -NOTE: This function **does not** understand multi-document sources, it throws -exception on those. - -NOTE: JS-YAML **does not** support schema-specific tag resolution restrictions. -So, JSON schema is not as strict as defined in the YAML specification. -It allows numbers in any notation, use `Null` and `NULL` as `null`, etc. -Core schema also has no such restrictions. It allows binary notation for integers. - - -### load (string [ , options ]) - -**Use with care with untrusted sources**. The same as `safeLoad()` but uses -`DEFAULT_FULL_SCHEMA` by default - adds some JavaScript-specific types: -`!!js/function`, `!!js/regexp` and `!!js/undefined`. For untrusted sources you -must additionally validate object structure, to avoid injections: - -``` javascript -var untrusted_code = '"toString": ! "function (){very_evil_thing();}"'; - -// I'm just converting that string, what could possibly go wrong? -require('js-yaml').load(untrusted_code) + '' -``` - - -### safeLoadAll (string, iterator [ , options ]) - -Same as `safeLoad()`, but understands multi-document sources and apply -`iterator` to each document. - -``` javascript -var yaml = require('js-yaml'); - -yaml.safeLoadAll(data, function (doc) { - console.log(doc); -}); -``` - - -### loadAll (string, iterator [ , options ]) - -Same as `safeLoadAll()` but uses `DEFAULT_FULL_SCHEMA` by default. - - -### safeDump (object [ , options ]) - -Serializes `object` as YAML document. Uses `DEFAULT_SAFE_SCHEMA`, so it will -throw exception if you try to dump regexps or functions. However, you can -disable exceptions by `skipInvalid` option. - -options: - -- `indent` _(default: 2)_ - indentation width to use (in spaces). -- `skipInvalid` _(default: false)_ - do not throw on invalid types (like function - in the safe schema) and skip pairs and single values with such types. -- `flowLevel` (default: -1) - specifies level of nesting, when to switch from - block to flow style for collections. -1 means block style everwhere -- `styles` - "tag" => "style" map. Each tag may have own set of styles. -- `schema` _(default: `DEFAULT_SAFE_SCHEMA`)_ specifies a schema to use. -- `sortKeys` _(default: `false`)_ - if `true`, sort keys when dumping YAML. If a - function, use the function to sort the keys. -- `lineWidth` _(default: `80`)_ - set max line width. -- `noRefs` _(default: `false`)_ - if `true`, don't convert duplicate objects into references -- `noCompatMode` _(default: `false`)_ - if `true` don't try to be compatible with older - yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1 - -styles: - -``` none -!!null - "canonical" => "~" - -!!int - "binary" => "0b1", "0b101010", "0b1110001111010" - "octal" => "01", "052", "016172" - "decimal" => "1", "42", "7290" - "hexadecimal" => "0x1", "0x2A", "0x1C7A" - -!!null, !!bool, !!float - "lowercase" => "null", "true", "false", ".nan", '.inf' - "uppercase" => "NULL", "TRUE", "FALSE", ".NAN", '.INF' - "camelcase" => "Null", "True", "False", ".NaN", '.Inf' -``` - -By default, !!int uses `decimal`, and !!null, !!bool, !!float use `lowercase`. - - - -### dump (object [ , options ]) - -Same as `safeDump()` but without limits (uses `DEFAULT_FULL_SCHEMA` by default). - - -Supported YAML types --------------------- - -The list of standard YAML tags and corresponding JavaScipt types. See also -[YAML tag discussion](http://pyyaml.org/wiki/YAMLTagDiscussion) and -[YAML types repository](http://yaml.org/type/). - -``` -!!null '' # null -!!bool 'yes' # bool -!!int '3...' # number -!!float '3.14...' # number -!!binary '...base64...' # buffer -!!timestamp 'YYYY-...' # date -!!omap [ ... ] # array of key-value pairs -!!pairs [ ... ] # array or array pairs -!!set { ... } # array of objects with given keys and null values -!!str '...' # string -!!seq [ ... ] # array -!!map { ... } # object -``` - -**JavaScript-specific tags** - -``` -!!js/regexp /pattern/gim # RegExp -!!js/undefined '' # Undefined -!!js/function 'function () {...}' # Function -``` - -Caveats -------- - -Note, that you use arrays or objects as key in JS-YAML. JS does not allow objects -or array as keys, and stringifies (by calling .toString method) them at the -moment of adding them. - -``` yaml ---- -? [ foo, bar ] -: - baz -? { foo: bar } -: - baz - - baz -``` - -``` javascript -{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] } -``` - -Also, reading of properties on implicit block mapping keys is not supported yet. -So, the following YAML document cannot be loaded. - -``` yaml -&anchor foo: - foo: bar - *anchor: duplicate key - baz: bat - *anchor: duplicate key -``` - - -Breaking changes in 2.x.x -> 3.x.x ----------------------------------- - -If you have not used __custom__ tags or loader classes and not loaded yaml -files via `require()` - no changes needed. Just upgrade library. - -Otherwise, you should: - -1. Replace all occurences of `require('xxxx.yml')` by `fs.readFileSync()` + - `yaml.safeLoad()`. -2. rewrite your custom tags constructors and custom loader - classes, to conform new API. See - [examples](https://github.com/nodeca/js-yaml/tree/master/examples) and - [wiki](https://github.com/nodeca/js-yaml/wiki) for details. - - -License -------- - -View the [LICENSE](https://github.com/nodeca/js-yaml/blob/master/LICENSE) file -(MIT). diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/bin/js-yaml.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/bin/js-yaml.js deleted file mode 100755 index e79186be6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/bin/js-yaml.js +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env node - - -'use strict'; - -/*eslint-disable no-console*/ - - -// stdlib -var fs = require('fs'); - - -// 3rd-party -var argparse = require('argparse'); - - -// internal -var yaml = require('..'); - - -//////////////////////////////////////////////////////////////////////////////// - - -var cli = new argparse.ArgumentParser({ - prog: 'js-yaml', - version: require('../package.json').version, - addHelp: true -}); - - -cli.addArgument([ '-c', '--compact' ], { - help: 'Display errors in compact mode', - action: 'storeTrue' -}); - - -// deprecated (not needed after we removed output colors) -// option suppressed, but not completely removed for compatibility -cli.addArgument([ '-j', '--to-json' ], { - help: argparse.Const.SUPPRESS, - dest: 'json', - action: 'storeTrue' -}); - - -cli.addArgument([ '-t', '--trace' ], { - help: 'Show stack trace on error', - action: 'storeTrue' -}); - -cli.addArgument([ 'file' ], { - help: 'File to read, utf-8 encoded without BOM', - nargs: '?', - defaultValue: '-' -}); - - -//////////////////////////////////////////////////////////////////////////////// - - -var options = cli.parseArgs(); - - -//////////////////////////////////////////////////////////////////////////////// - -function readFile(filename, encoding, callback) { - if (options.file === '-') { - // read from stdin - - var chunks = []; - - process.stdin.on('data', function (chunk) { - chunks.push(chunk); - }); - - process.stdin.on('end', function () { - return callback(null, Buffer.concat(chunks).toString(encoding)); - }); - } else { - fs.readFile(filename, encoding, callback); - } -} - -readFile(options.file, 'utf8', function (error, input) { - var output, isYaml; - - if (error) { - if (error.code === 'ENOENT') { - console.error('File not found: ' + options.file); - process.exit(2); - } - - console.error( - options.trace && error.stack || - error.message || - String(error)); - - process.exit(1); - } - - try { - output = JSON.parse(input); - isYaml = false; - } catch (err) { - if (err instanceof SyntaxError) { - try { - output = []; - yaml.loadAll(input, function (doc) { output.push(doc); }, {}); - isYaml = true; - - if (output.length === 0) output = null; - else if (output.length === 1) output = output[0]; - - } catch (e) { - if (options.trace && err.stack) console.error(e.stack); - else console.error(e.toString(options.compact)); - - process.exit(1); - } - } else { - console.error( - options.trace && err.stack || - err.message || - String(err)); - - process.exit(1); - } - } - - if (isYaml) console.log(JSON.stringify(output, null, ' ')); - else console.log(yaml.dump(output)); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/dist/js-yaml.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/dist/js-yaml.js deleted file mode 100644 index 49cb23c95..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/dist/js-yaml.js +++ /dev/null @@ -1,3855 +0,0 @@ -/* js-yaml 3.7.0 https://github.com/nodeca/js-yaml */(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.jsyaml = 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 */ -var CHAR_QUESTION = 0x3F; /* ? */ -var CHAR_COMMERCIAL_AT = 0x40; /* @ */ -var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ -var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ -var CHAR_GRAVE_ACCENT = 0x60; /* ` */ -var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ -var CHAR_VERTICAL_LINE = 0x7C; /* | */ -var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ - -var ESCAPE_SEQUENCES = {}; - -ESCAPE_SEQUENCES[0x00] = '\\0'; -ESCAPE_SEQUENCES[0x07] = '\\a'; -ESCAPE_SEQUENCES[0x08] = '\\b'; -ESCAPE_SEQUENCES[0x09] = '\\t'; -ESCAPE_SEQUENCES[0x0A] = '\\n'; -ESCAPE_SEQUENCES[0x0B] = '\\v'; -ESCAPE_SEQUENCES[0x0C] = '\\f'; -ESCAPE_SEQUENCES[0x0D] = '\\r'; -ESCAPE_SEQUENCES[0x1B] = '\\e'; -ESCAPE_SEQUENCES[0x22] = '\\"'; -ESCAPE_SEQUENCES[0x5C] = '\\\\'; -ESCAPE_SEQUENCES[0x85] = '\\N'; -ESCAPE_SEQUENCES[0xA0] = '\\_'; -ESCAPE_SEQUENCES[0x2028] = '\\L'; -ESCAPE_SEQUENCES[0x2029] = '\\P'; - -var DEPRECATED_BOOLEANS_SYNTAX = [ - 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', - 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' -]; - -function compileStyleMap(schema, map) { - var result, keys, index, length, tag, style, type; - - if (map === null) return {}; - - result = {}; - keys = Object.keys(map); - - for (index = 0, length = keys.length; index < length; index += 1) { - tag = keys[index]; - style = String(map[tag]); - - if (tag.slice(0, 2) === '!!') { - tag = 'tag:yaml.org,2002:' + tag.slice(2); - } - type = schema.compiledTypeMap['fallback'][tag]; - - if (type && _hasOwnProperty.call(type.styleAliases, style)) { - style = type.styleAliases[style]; - } - - result[tag] = style; - } - - return result; -} - -function encodeHex(character) { - var string, handle, length; - - string = character.toString(16).toUpperCase(); - - if (character <= 0xFF) { - handle = 'x'; - length = 2; - } else if (character <= 0xFFFF) { - handle = 'u'; - length = 4; - } else if (character <= 0xFFFFFFFF) { - handle = 'U'; - length = 8; - } else { - throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF'); - } - - return '\\' + handle + common.repeat('0', length - string.length) + string; -} - -function State(options) { - this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; - this.indent = Math.max(1, (options['indent'] || 2)); - this.skipInvalid = options['skipInvalid'] || false; - this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); - this.styleMap = compileStyleMap(this.schema, options['styles'] || null); - this.sortKeys = options['sortKeys'] || false; - this.lineWidth = options['lineWidth'] || 80; - this.noRefs = options['noRefs'] || false; - this.noCompatMode = options['noCompatMode'] || false; - - this.implicitTypes = this.schema.compiledImplicit; - this.explicitTypes = this.schema.compiledExplicit; - - this.tag = null; - this.result = ''; - - this.duplicates = []; - this.usedDuplicates = null; -} - -// Indents every line in a string. Empty lines (\n only) are not indented. -function indentString(string, spaces) { - var ind = common.repeat(' ', spaces), - position = 0, - next = -1, - result = '', - line, - length = string.length; - - while (position < length) { - next = string.indexOf('\n', position); - if (next === -1) { - line = string.slice(position); - position = length; - } else { - line = string.slice(position, next + 1); - position = next + 1; - } - - if (line.length && line !== '\n') result += ind; - - result += line; - } - - return result; -} - -function generateNextLine(state, level) { - return '\n' + common.repeat(' ', state.indent * level); -} - -function testImplicitResolving(state, str) { - var index, length, type; - - for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { - type = state.implicitTypes[index]; - - if (type.resolve(str)) { - return true; - } - } - - return false; -} - -// [33] s-white ::= s-space | s-tab -function isWhitespace(c) { - return c === CHAR_SPACE || c === CHAR_TAB; -} - -// Returns true if the character can be printed without escaping. -// From YAML 1.2: "any allowed characters known to be non-printable -// should also be escaped. [However,] This isn’t mandatory" -// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. -function isPrintable(c) { - return (0x00020 <= c && c <= 0x00007E) - || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) - || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */) - || (0x10000 <= c && c <= 0x10FFFF); -} - -// Simplified test for values allowed after the first character in plain style. -function isPlainSafe(c) { - // Uses a subset of nb-char - c-flow-indicator - ":" - "#" - // where nb-char ::= c-printable - b-char - c-byte-order-mark. - return isPrintable(c) && c !== 0xFEFF - // - c-flow-indicator - && c !== CHAR_COMMA - && c !== CHAR_LEFT_SQUARE_BRACKET - && c !== CHAR_RIGHT_SQUARE_BRACKET - && c !== CHAR_LEFT_CURLY_BRACKET - && c !== CHAR_RIGHT_CURLY_BRACKET - // - ":" - "#" - && c !== CHAR_COLON - && c !== CHAR_SHARP; -} - -// Simplified test for values allowed as the first character in plain style. -function isPlainSafeFirst(c) { - // Uses a subset of ns-char - c-indicator - // where ns-char = nb-char - s-white. - return isPrintable(c) && c !== 0xFEFF - && !isWhitespace(c) // - s-white - // - (c-indicator ::= - // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” - && c !== CHAR_MINUS - && c !== CHAR_QUESTION - && c !== CHAR_COLON - && c !== CHAR_COMMA - && c !== CHAR_LEFT_SQUARE_BRACKET - && c !== CHAR_RIGHT_SQUARE_BRACKET - && c !== CHAR_LEFT_CURLY_BRACKET - && c !== CHAR_RIGHT_CURLY_BRACKET - // | “#” | “&” | “*” | “!” | “|” | “>” | “'” | “"” - && c !== CHAR_SHARP - && c !== CHAR_AMPERSAND - && c !== CHAR_ASTERISK - && c !== CHAR_EXCLAMATION - && c !== CHAR_VERTICAL_LINE - && c !== CHAR_GREATER_THAN - && c !== CHAR_SINGLE_QUOTE - && c !== CHAR_DOUBLE_QUOTE - // | “%” | “@” | “`”) - && c !== CHAR_PERCENT - && c !== CHAR_COMMERCIAL_AT - && c !== CHAR_GRAVE_ACCENT; -} - -var STYLE_PLAIN = 1, - STYLE_SINGLE = 2, - STYLE_LITERAL = 3, - STYLE_FOLDED = 4, - STYLE_DOUBLE = 5; - -// Determines which scalar styles are possible and returns the preferred style. -// lineWidth = -1 => no limit. -// Pre-conditions: str.length > 0. -// Post-conditions: -// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. -// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). -// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). -function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { - var i; - var char; - var hasLineBreak = false; - var hasFoldableLine = false; // only checked if shouldTrackWidth - var shouldTrackWidth = lineWidth !== -1; - var previousLineBreak = -1; // count the first line correctly - var plain = isPlainSafeFirst(string.charCodeAt(0)) - && !isWhitespace(string.charCodeAt(string.length - 1)); - - if (singleLineOnly) { - // Case: no block styles. - // Check for disallowed characters to rule out plain and single. - for (i = 0; i < string.length; i++) { - char = string.charCodeAt(i); - if (!isPrintable(char)) { - return STYLE_DOUBLE; - } - plain = plain && isPlainSafe(char); - } - } else { - // Case: block styles permitted. - for (i = 0; i < string.length; i++) { - char = string.charCodeAt(i); - if (char === CHAR_LINE_FEED) { - hasLineBreak = true; - // Check if any line can be folded. - if (shouldTrackWidth) { - hasFoldableLine = hasFoldableLine || - // Foldable line = too long, and not more-indented. - (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' '); - previousLineBreak = i; - } - } else if (!isPrintable(char)) { - return STYLE_DOUBLE; - } - plain = plain && isPlainSafe(char); - } - // in case the end is missing a \n - hasFoldableLine = hasFoldableLine || (shouldTrackWidth && - (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' ')); - } - // Although every style can represent \n without escaping, prefer block styles - // for multiline, since they're more readable and they don't add empty lines. - // Also prefer folding a super-long line. - if (!hasLineBreak && !hasFoldableLine) { - // Strings interpretable as another type have to be quoted; - // e.g. the string 'true' vs. the boolean true. - return plain && !testAmbiguousType(string) - ? STYLE_PLAIN : STYLE_SINGLE; - } - // Edge case: block indentation indicator can only have one digit. - if (string[0] === ' ' && indentPerLevel > 9) { - return STYLE_DOUBLE; - } - // At this point we know block styles are valid. - // Prefer literal style unless we want to fold. - return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; -} - -// Note: line breaking/folding is implemented for only the folded style. -// NB. We drop the last trailing newline (if any) of a returned block scalar -// since the dumper adds its own newline. This always works: -// • No ending newline => unaffected; already using strip "-" chomping. -// • Ending newline => removed then restored. -// Importantly, this keeps the "+" chomp indicator from gaining an extra line. -function writeScalar(state, string, level, iskey) { - state.dump = (function () { - if (string.length === 0) { - return "''"; - } - if (!state.noCompatMode && - DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) { - return "'" + string + "'"; - } - - var indent = state.indent * Math.max(1, level); // no 0-indent scalars - // As indentation gets deeper, let the width decrease monotonically - // to the lower bound min(state.lineWidth, 40). - // Note that this implies - // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. - // state.lineWidth > 40 + state.indent: width decreases until the lower bound. - // This behaves better than a constant minimum width which disallows narrower options, - // or an indent threshold which causes the width to suddenly increase. - var lineWidth = state.lineWidth === -1 - ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); - - // Without knowing if keys are implicit/explicit, assume implicit for safety. - var singleLineOnly = iskey - // No block styles in flow mode. - || (state.flowLevel > -1 && level >= state.flowLevel); - function testAmbiguity(string) { - return testImplicitResolving(state, string); - } - - switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) { - case STYLE_PLAIN: - return string; - case STYLE_SINGLE: - return "'" + string.replace(/'/g, "''") + "'"; - case STYLE_LITERAL: - return '|' + blockHeader(string, state.indent) - + dropEndingNewline(indentString(string, indent)); - case STYLE_FOLDED: - return '>' + blockHeader(string, state.indent) - + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); - case STYLE_DOUBLE: - return '"' + escapeString(string, lineWidth) + '"'; - default: - throw new YAMLException('impossible error: invalid scalar style'); - } - }()); -} - -// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. -function blockHeader(string, indentPerLevel) { - var indentIndicator = (string[0] === ' ') ? String(indentPerLevel) : ''; - - // note the special case: the string '\n' counts as a "trailing" empty line. - var clip = string[string.length - 1] === '\n'; - var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); - var chomp = keep ? '+' : (clip ? '' : '-'); - - return indentIndicator + chomp + '\n'; -} - -// (See the note for writeScalar.) -function dropEndingNewline(string) { - return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; -} - -// Note: a long line without a suitable break point will exceed the width limit. -// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. -function foldString(string, width) { - // In folded style, $k$ consecutive newlines output as $k+1$ newlines— - // unless they're before or after a more-indented line, or at the very - // beginning or end, in which case $k$ maps to $k$. - // Therefore, parse each chunk as newline(s) followed by a content line. - var lineRe = /(\n+)([^\n]*)/g; - - // first line (possibly an empty line) - var result = (function () { - var nextLF = string.indexOf('\n'); - nextLF = nextLF !== -1 ? nextLF : string.length; - lineRe.lastIndex = nextLF; - return foldLine(string.slice(0, nextLF), width); - }()); - // If we haven't reached the first content line yet, don't add an extra \n. - var prevMoreIndented = string[0] === '\n' || string[0] === ' '; - var moreIndented; - - // rest of the lines - var match; - while ((match = lineRe.exec(string))) { - var prefix = match[1], line = match[2]; - moreIndented = (line[0] === ' '); - result += prefix - + (!prevMoreIndented && !moreIndented && line !== '' - ? '\n' : '') - + foldLine(line, width); - prevMoreIndented = moreIndented; - } - - return result; -} - -// Greedy line breaking. -// Picks the longest line under the limit each time, -// otherwise settles for the shortest line over the limit. -// NB. More-indented lines *cannot* be folded, as that would add an extra \n. -function foldLine(line, width) { - if (line === '' || line[0] === ' ') return line; - - // Since a more-indented line adds a \n, breaks can't be followed by a space. - var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. - var match; - // start is an inclusive index. end, curr, and next are exclusive. - var start = 0, end, curr = 0, next = 0; - var result = ''; - - // Invariants: 0 <= start <= length-1. - // 0 <= curr <= next <= max(0, length-2). curr - start <= width. - // Inside the loop: - // A match implies length >= 2, so curr and next are <= length-2. - while ((match = breakRe.exec(line))) { - next = match.index; - // maintain invariant: curr - start <= width - if (next - start > width) { - end = (curr > start) ? curr : next; // derive end <= length-2 - result += '\n' + line.slice(start, end); - // skip the space that was output as \n - start = end + 1; // derive start <= length-1 - } - curr = next; - } - - // By the invariants, start <= length-1, so there is something left over. - // It is either the whole string or a part starting from non-whitespace. - result += '\n'; - // Insert a break if the remainder is too long and there is a break available. - if (line.length - start > width && curr > start) { - result += line.slice(start, curr) + '\n' + line.slice(curr + 1); - } else { - result += line.slice(start); - } - - return result.slice(1); // drop extra \n joiner -} - -// Escapes a double-quoted string. -function escapeString(string) { - var result = ''; - var char; - var escapeSeq; - - for (var i = 0; i < string.length; i++) { - char = string.charCodeAt(i); - escapeSeq = ESCAPE_SEQUENCES[char]; - result += !escapeSeq && isPrintable(char) - ? string[i] - : escapeSeq || encodeHex(char); - } - - return result; -} - -function writeFlowSequence(state, level, object) { - var _result = '', - _tag = state.tag, - index, - length; - - for (index = 0, length = object.length; index < length; index += 1) { - // Write only valid elements. - if (writeNode(state, level, object[index], false, false)) { - if (index !== 0) _result += ', '; - _result += state.dump; - } - } - - state.tag = _tag; - state.dump = '[' + _result + ']'; -} - -function writeBlockSequence(state, level, object, compact) { - var _result = '', - _tag = state.tag, - index, - length; - - for (index = 0, length = object.length; index < length; index += 1) { - // Write only valid elements. - if (writeNode(state, level + 1, object[index], true, true)) { - if (!compact || index !== 0) { - _result += generateNextLine(state, level); - } - _result += '- ' + state.dump; - } - } - - state.tag = _tag; - state.dump = _result || '[]'; // Empty sequence if no valid values. -} - -function writeFlowMapping(state, level, object) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - pairBuffer; - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - pairBuffer = ''; - - if (index !== 0) pairBuffer += ', '; - - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; - - if (!writeNode(state, level, objectKey, false, false)) { - continue; // Skip this pair because of invalid key; - } - - if (state.dump.length > 1024) pairBuffer += '? '; - - pairBuffer += state.dump + ': '; - - if (!writeNode(state, level, objectValue, false, false)) { - continue; // Skip this pair because of invalid value. - } - - pairBuffer += state.dump; - - // Both key and value are valid. - _result += pairBuffer; - } - - state.tag = _tag; - state.dump = '{' + _result + '}'; -} - -function writeBlockMapping(state, level, object, compact) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - explicitPair, - pairBuffer; - - // Allow sorting keys so that the output file is deterministic - if (state.sortKeys === true) { - // Default sorting - objectKeyList.sort(); - } else if (typeof state.sortKeys === 'function') { - // Custom sort function - objectKeyList.sort(state.sortKeys); - } else if (state.sortKeys) { - // Something is wrong - throw new YAMLException('sortKeys must be a boolean or a function'); - } - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - pairBuffer = ''; - - if (!compact || index !== 0) { - pairBuffer += generateNextLine(state, level); - } - - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; - - if (!writeNode(state, level + 1, objectKey, true, true, true)) { - continue; // Skip this pair because of invalid key. - } - - explicitPair = (state.tag !== null && state.tag !== '?') || - (state.dump && state.dump.length > 1024); - - if (explicitPair) { - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - pairBuffer += '?'; - } else { - pairBuffer += '? '; - } - } - - pairBuffer += state.dump; - - if (explicitPair) { - pairBuffer += generateNextLine(state, level); - } - - if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { - continue; // Skip this pair because of invalid value. - } - - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - pairBuffer += ':'; - } else { - pairBuffer += ': '; - } - - pairBuffer += state.dump; - - // Both key and value are valid. - _result += pairBuffer; - } - - state.tag = _tag; - state.dump = _result || '{}'; // Empty mapping if no valid pairs. -} - -function detectType(state, object, explicit) { - var _result, typeList, index, length, type, style; - - typeList = explicit ? state.explicitTypes : state.implicitTypes; - - for (index = 0, length = typeList.length; index < length; index += 1) { - type = typeList[index]; - - if ((type.instanceOf || type.predicate) && - (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && - (!type.predicate || type.predicate(object))) { - - state.tag = explicit ? type.tag : '?'; - - if (type.represent) { - style = state.styleMap[type.tag] || type.defaultStyle; - - if (_toString.call(type.represent) === '[object Function]') { - _result = type.represent(object, style); - } else if (_hasOwnProperty.call(type.represent, style)) { - _result = type.represent[style](object, style); - } else { - throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); - } - - state.dump = _result; - } - - return true; - } - } - - return false; -} - -// Serializes `object` and writes it to global `result`. -// Returns true on success, or false on invalid object. -// -function writeNode(state, level, object, block, compact, iskey) { - state.tag = null; - state.dump = object; - - if (!detectType(state, object, false)) { - detectType(state, object, true); - } - - var type = _toString.call(state.dump); - - if (block) { - block = (state.flowLevel < 0 || state.flowLevel > level); - } - - var objectOrArray = type === '[object Object]' || type === '[object Array]', - duplicateIndex, - duplicate; - - if (objectOrArray) { - duplicateIndex = state.duplicates.indexOf(object); - duplicate = duplicateIndex !== -1; - } - - if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { - compact = false; - } - - if (duplicate && state.usedDuplicates[duplicateIndex]) { - state.dump = '*ref_' + duplicateIndex; - } else { - if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { - state.usedDuplicates[duplicateIndex] = true; - } - if (type === '[object Object]') { - if (block && (Object.keys(state.dump).length !== 0)) { - writeBlockMapping(state, level, state.dump, compact); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; - } - } else { - writeFlowMapping(state, level, state.dump); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; - } - } - } else if (type === '[object Array]') { - if (block && (state.dump.length !== 0)) { - writeBlockSequence(state, level, state.dump, compact); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; - } - } else { - writeFlowSequence(state, level, state.dump); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; - } - } - } else if (type === '[object String]') { - if (state.tag !== '?') { - writeScalar(state, state.dump, level, iskey); - } - } else { - if (state.skipInvalid) return false; - throw new YAMLException('unacceptable kind of an object to dump ' + type); - } - - if (state.tag !== null && state.tag !== '?') { - state.dump = '!<' + state.tag + '> ' + state.dump; - } - } - - return true; -} - -function getDuplicateReferences(object, state) { - var objects = [], - duplicatesIndexes = [], - index, - length; - - inspectNode(object, objects, duplicatesIndexes); - - for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { - state.duplicates.push(objects[duplicatesIndexes[index]]); - } - state.usedDuplicates = new Array(length); -} - -function inspectNode(object, objects, duplicatesIndexes) { - var objectKeyList, - index, - length; - - if (object !== null && typeof object === 'object') { - index = objects.indexOf(object); - if (index !== -1) { - if (duplicatesIndexes.indexOf(index) === -1) { - duplicatesIndexes.push(index); - } - } else { - objects.push(object); - - if (Array.isArray(object)) { - for (index = 0, length = object.length; index < length; index += 1) { - inspectNode(object[index], objects, duplicatesIndexes); - } - } else { - objectKeyList = Object.keys(object); - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); - } - } - } - } -} - -function dump(input, options) { - options = options || {}; - - var state = new State(options); - - if (!state.noRefs) getDuplicateReferences(input, state); - - if (writeNode(state, 0, input, true, true)) return state.dump + '\n'; - - return ''; -} - -function safeDump(input, options) { - return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); -} - -module.exports.dump = dump; -module.exports.safeDump = safeDump; - -},{"./common":2,"./exception":4,"./schema/default_full":9,"./schema/default_safe":10}],4:[function(require,module,exports){ -// YAML error class. http://stackoverflow.com/questions/8458984 -// -'use strict'; - -function YAMLException(reason, mark) { - // Super constructor - Error.call(this); - - // Include stack trace in error object - if (Error.captureStackTrace) { - // Chrome and NodeJS - Error.captureStackTrace(this, this.constructor); - } else { - // FF, IE 10+ and Safari 6+. Fallback for others - this.stack = (new Error()).stack || ''; - } - - this.name = 'YAMLException'; - this.reason = reason; - this.mark = mark; - this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : ''); -} - - -// Inherit from Error -YAMLException.prototype = Object.create(Error.prototype); -YAMLException.prototype.constructor = YAMLException; - - -YAMLException.prototype.toString = function toString(compact) { - var result = this.name + ': '; - - result += this.reason || '(unknown reason)'; - - if (!compact && this.mark) { - result += ' ' + this.mark.toString(); - } - - return result; -}; - - -module.exports = YAMLException; - -},{}],5:[function(require,module,exports){ -'use strict'; - -/*eslint-disable max-len,no-use-before-define*/ - -var common = require('./common'); -var YAMLException = require('./exception'); -var Mark = require('./mark'); -var DEFAULT_SAFE_SCHEMA = require('./schema/default_safe'); -var DEFAULT_FULL_SCHEMA = require('./schema/default_full'); - - -var _hasOwnProperty = Object.prototype.hasOwnProperty; - - -var CONTEXT_FLOW_IN = 1; -var CONTEXT_FLOW_OUT = 2; -var CONTEXT_BLOCK_IN = 3; -var CONTEXT_BLOCK_OUT = 4; - - -var CHOMPING_CLIP = 1; -var CHOMPING_STRIP = 2; -var CHOMPING_KEEP = 3; - - -var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; -var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; -var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; -var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; - - -function is_EOL(c) { - return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); -} - -function is_WHITE_SPACE(c) { - return (c === 0x09/* Tab */) || (c === 0x20/* Space */); -} - -function is_WS_OR_EOL(c) { - return (c === 0x09/* Tab */) || - (c === 0x20/* Space */) || - (c === 0x0A/* LF */) || - (c === 0x0D/* CR */); -} - -function is_FLOW_INDICATOR(c) { - return c === 0x2C/* , */ || - c === 0x5B/* [ */ || - c === 0x5D/* ] */ || - c === 0x7B/* { */ || - c === 0x7D/* } */; -} - -function fromHexCode(c) { - var lc; - - if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { - return c - 0x30; - } - - /*eslint-disable no-bitwise*/ - lc = c | 0x20; - - if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { - return lc - 0x61 + 10; - } - - return -1; -} - -function escapedHexLen(c) { - if (c === 0x78/* x */) { return 2; } - if (c === 0x75/* u */) { return 4; } - if (c === 0x55/* U */) { return 8; } - return 0; -} - -function fromDecimalCode(c) { - if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { - return c - 0x30; - } - - return -1; -} - -function simpleEscapeSequence(c) { - return (c === 0x30/* 0 */) ? '\x00' : - (c === 0x61/* a */) ? '\x07' : - (c === 0x62/* b */) ? '\x08' : - (c === 0x74/* t */) ? '\x09' : - (c === 0x09/* Tab */) ? '\x09' : - (c === 0x6E/* n */) ? '\x0A' : - (c === 0x76/* v */) ? '\x0B' : - (c === 0x66/* f */) ? '\x0C' : - (c === 0x72/* r */) ? '\x0D' : - (c === 0x65/* e */) ? '\x1B' : - (c === 0x20/* Space */) ? ' ' : - (c === 0x22/* " */) ? '\x22' : - (c === 0x2F/* / */) ? '/' : - (c === 0x5C/* \ */) ? '\x5C' : - (c === 0x4E/* N */) ? '\x85' : - (c === 0x5F/* _ */) ? '\xA0' : - (c === 0x4C/* L */) ? '\u2028' : - (c === 0x50/* P */) ? '\u2029' : ''; -} - -function charFromCodepoint(c) { - if (c <= 0xFFFF) { - return String.fromCharCode(c); - } - // Encode UTF-16 surrogate pair - // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF - return String.fromCharCode(((c - 0x010000) >> 10) + 0xD800, - ((c - 0x010000) & 0x03FF) + 0xDC00); -} - -var simpleEscapeCheck = new Array(256); // integer, for fast access -var simpleEscapeMap = new Array(256); -for (var i = 0; i < 256; i++) { - simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; - simpleEscapeMap[i] = simpleEscapeSequence(i); -} - - -function State(input, options) { - this.input = input; - - this.filename = options['filename'] || null; - this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; - this.onWarning = options['onWarning'] || null; - this.legacy = options['legacy'] || false; - this.json = options['json'] || false; - this.listener = options['listener'] || null; - - this.implicitTypes = this.schema.compiledImplicit; - this.typeMap = this.schema.compiledTypeMap; - - this.length = input.length; - this.position = 0; - this.line = 0; - this.lineStart = 0; - this.lineIndent = 0; - - this.documents = []; - - /* - this.version; - this.checkLineBreaks; - this.tagMap; - this.anchorMap; - this.tag; - this.anchor; - this.kind; - this.result;*/ - -} - - -function generateError(state, message) { - return new YAMLException( - message, - new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); -} - -function throwError(state, message) { - throw generateError(state, message); -} - -function throwWarning(state, message) { - if (state.onWarning) { - state.onWarning.call(null, generateError(state, message)); - } -} - - -var directiveHandlers = { - - YAML: function handleYamlDirective(state, name, args) { - - var match, major, minor; - - if (state.version !== null) { - throwError(state, 'duplication of %YAML directive'); - } - - if (args.length !== 1) { - throwError(state, 'YAML directive accepts exactly one argument'); - } - - match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); - - if (match === null) { - throwError(state, 'ill-formed argument of the YAML directive'); - } - - major = parseInt(match[1], 10); - minor = parseInt(match[2], 10); - - if (major !== 1) { - throwError(state, 'unacceptable YAML version of the document'); - } - - state.version = args[0]; - state.checkLineBreaks = (minor < 2); - - if (minor !== 1 && minor !== 2) { - throwWarning(state, 'unsupported YAML version of the document'); - } - }, - - TAG: function handleTagDirective(state, name, args) { - - var handle, prefix; - - if (args.length !== 2) { - throwError(state, 'TAG directive accepts exactly two arguments'); - } - - handle = args[0]; - prefix = args[1]; - - if (!PATTERN_TAG_HANDLE.test(handle)) { - throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); - } - - if (_hasOwnProperty.call(state.tagMap, handle)) { - throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); - } - - if (!PATTERN_TAG_URI.test(prefix)) { - throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); - } - - state.tagMap[handle] = prefix; - } -}; - - -function captureSegment(state, start, end, checkJson) { - var _position, _length, _character, _result; - - if (start < end) { - _result = state.input.slice(start, end); - - if (checkJson) { - for (_position = 0, _length = _result.length; - _position < _length; - _position += 1) { - _character = _result.charCodeAt(_position); - if (!(_character === 0x09 || - (0x20 <= _character && _character <= 0x10FFFF))) { - throwError(state, 'expected valid JSON character'); - } - } - } else if (PATTERN_NON_PRINTABLE.test(_result)) { - throwError(state, 'the stream contains non-printable characters'); - } - - state.result += _result; - } -} - -function mergeMappings(state, destination, source, overridableKeys) { - var sourceKeys, key, index, quantity; - - if (!common.isObject(source)) { - throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); - } - - sourceKeys = Object.keys(source); - - for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { - key = sourceKeys[index]; - - if (!_hasOwnProperty.call(destination, key)) { - destination[key] = source[key]; - overridableKeys[key] = true; - } - } -} - -function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode) { - var index, quantity; - - keyNode = String(keyNode); - - if (_result === null) { - _result = {}; - } - - if (keyTag === 'tag:yaml.org,2002:merge') { - if (Array.isArray(valueNode)) { - for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { - mergeMappings(state, _result, valueNode[index], overridableKeys); - } - } else { - mergeMappings(state, _result, valueNode, overridableKeys); - } - } else { - if (!state.json && - !_hasOwnProperty.call(overridableKeys, keyNode) && - _hasOwnProperty.call(_result, keyNode)) { - throwError(state, 'duplicated mapping key'); - } - _result[keyNode] = valueNode; - delete overridableKeys[keyNode]; - } - - return _result; -} - -function readLineBreak(state) { - var ch; - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x0A/* LF */) { - state.position++; - } else if (ch === 0x0D/* CR */) { - state.position++; - if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { - state.position++; - } - } else { - throwError(state, 'a line break is expected'); - } - - state.line += 1; - state.lineStart = state.position; -} - -function skipSeparationSpace(state, allowComments, checkIndent) { - var lineBreaks = 0, - ch = state.input.charCodeAt(state.position); - - while (ch !== 0) { - while (is_WHITE_SPACE(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (allowComments && ch === 0x23/* # */) { - do { - ch = state.input.charCodeAt(++state.position); - } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); - } - - if (is_EOL(ch)) { - readLineBreak(state); - - ch = state.input.charCodeAt(state.position); - lineBreaks++; - state.lineIndent = 0; - - while (ch === 0x20/* Space */) { - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); - } - } else { - break; - } - } - - if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { - throwWarning(state, 'deficient indentation'); - } - - return lineBreaks; -} - -function testDocumentSeparator(state) { - var _position = state.position, - ch; - - ch = state.input.charCodeAt(_position); - - // Condition state.position === state.lineStart is tested - // in parent on each call, for efficiency. No needs to test here again. - if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && - ch === state.input.charCodeAt(_position + 1) && - ch === state.input.charCodeAt(_position + 2)) { - - _position += 3; - - ch = state.input.charCodeAt(_position); - - if (ch === 0 || is_WS_OR_EOL(ch)) { - return true; - } - } - - return false; -} - -function writeFoldedLines(state, count) { - if (count === 1) { - state.result += ' '; - } else if (count > 1) { - state.result += common.repeat('\n', count - 1); - } -} - - -function readPlainScalar(state, nodeIndent, withinFlowCollection) { - var preceding, - following, - captureStart, - captureEnd, - hasPendingContent, - _line, - _lineStart, - _lineIndent, - _kind = state.kind, - _result = state.result, - ch; - - ch = state.input.charCodeAt(state.position); - - if (is_WS_OR_EOL(ch) || - is_FLOW_INDICATOR(ch) || - ch === 0x23/* # */ || - ch === 0x26/* & */ || - ch === 0x2A/* * */ || - ch === 0x21/* ! */ || - ch === 0x7C/* | */ || - ch === 0x3E/* > */ || - ch === 0x27/* ' */ || - ch === 0x22/* " */ || - ch === 0x25/* % */ || - ch === 0x40/* @ */ || - ch === 0x60/* ` */) { - return false; - } - - if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { - following = state.input.charCodeAt(state.position + 1); - - if (is_WS_OR_EOL(following) || - withinFlowCollection && is_FLOW_INDICATOR(following)) { - return false; - } - } - - state.kind = 'scalar'; - state.result = ''; - captureStart = captureEnd = state.position; - hasPendingContent = false; - - while (ch !== 0) { - if (ch === 0x3A/* : */) { - following = state.input.charCodeAt(state.position + 1); - - if (is_WS_OR_EOL(following) || - withinFlowCollection && is_FLOW_INDICATOR(following)) { - break; - } - - } else if (ch === 0x23/* # */) { - preceding = state.input.charCodeAt(state.position - 1); - - if (is_WS_OR_EOL(preceding)) { - break; - } - - } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || - withinFlowCollection && is_FLOW_INDICATOR(ch)) { - break; - - } else if (is_EOL(ch)) { - _line = state.line; - _lineStart = state.lineStart; - _lineIndent = state.lineIndent; - skipSeparationSpace(state, false, -1); - - if (state.lineIndent >= nodeIndent) { - hasPendingContent = true; - ch = state.input.charCodeAt(state.position); - continue; - } else { - state.position = captureEnd; - state.line = _line; - state.lineStart = _lineStart; - state.lineIndent = _lineIndent; - break; - } - } - - if (hasPendingContent) { - captureSegment(state, captureStart, captureEnd, false); - writeFoldedLines(state, state.line - _line); - captureStart = captureEnd = state.position; - hasPendingContent = false; - } - - if (!is_WHITE_SPACE(ch)) { - captureEnd = state.position + 1; - } - - ch = state.input.charCodeAt(++state.position); - } - - captureSegment(state, captureStart, captureEnd, false); - - if (state.result) { - return true; - } - - state.kind = _kind; - state.result = _result; - return false; -} - -function readSingleQuotedScalar(state, nodeIndent) { - var ch, - captureStart, captureEnd; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x27/* ' */) { - return false; - } - - state.kind = 'scalar'; - state.result = ''; - state.position++; - captureStart = captureEnd = state.position; - - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - if (ch === 0x27/* ' */) { - captureSegment(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); - - if (ch === 0x27/* ' */) { - captureStart = state.position; - state.position++; - captureEnd = state.position; - } else { - return true; - } - - } else if (is_EOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); - captureStart = captureEnd = state.position; - - } else if (state.position === state.lineStart && testDocumentSeparator(state)) { - throwError(state, 'unexpected end of the document within a single quoted scalar'); - - } else { - state.position++; - captureEnd = state.position; - } - } - - throwError(state, 'unexpected end of the stream within a single quoted scalar'); -} - -function readDoubleQuotedScalar(state, nodeIndent) { - var captureStart, - captureEnd, - hexLength, - hexResult, - tmp, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x22/* " */) { - return false; - } - - state.kind = 'scalar'; - state.result = ''; - state.position++; - captureStart = captureEnd = state.position; - - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - if (ch === 0x22/* " */) { - captureSegment(state, captureStart, state.position, true); - state.position++; - return true; - - } else if (ch === 0x5C/* \ */) { - captureSegment(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); - - if (is_EOL(ch)) { - skipSeparationSpace(state, false, nodeIndent); - - // TODO: rework to inline fn with no type cast? - } else if (ch < 256 && simpleEscapeCheck[ch]) { - state.result += simpleEscapeMap[ch]; - state.position++; - - } else if ((tmp = escapedHexLen(ch)) > 0) { - hexLength = tmp; - hexResult = 0; - - for (; hexLength > 0; hexLength--) { - ch = state.input.charCodeAt(++state.position); - - if ((tmp = fromHexCode(ch)) >= 0) { - hexResult = (hexResult << 4) + tmp; - - } else { - throwError(state, 'expected hexadecimal character'); - } - } - - state.result += charFromCodepoint(hexResult); - - state.position++; - - } else { - throwError(state, 'unknown escape sequence'); - } - - captureStart = captureEnd = state.position; - - } else if (is_EOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); - captureStart = captureEnd = state.position; - - } else if (state.position === state.lineStart && testDocumentSeparator(state)) { - throwError(state, 'unexpected end of the document within a double quoted scalar'); - - } else { - state.position++; - captureEnd = state.position; - } - } - - throwError(state, 'unexpected end of the stream within a double quoted scalar'); -} - -function readFlowCollection(state, nodeIndent) { - var readNext = true, - _line, - _tag = state.tag, - _result, - _anchor = state.anchor, - following, - terminator, - isPair, - isExplicitPair, - isMapping, - overridableKeys = {}, - keyNode, - keyTag, - valueNode, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x5B/* [ */) { - terminator = 0x5D;/* ] */ - isMapping = false; - _result = []; - } else if (ch === 0x7B/* { */) { - terminator = 0x7D;/* } */ - isMapping = true; - _result = {}; - } else { - return false; - } - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } - - ch = state.input.charCodeAt(++state.position); - - while (ch !== 0) { - skipSeparationSpace(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if (ch === terminator) { - state.position++; - state.tag = _tag; - state.anchor = _anchor; - state.kind = isMapping ? 'mapping' : 'sequence'; - state.result = _result; - return true; - } else if (!readNext) { - throwError(state, 'missed comma between flow collection entries'); - } - - keyTag = keyNode = valueNode = null; - isPair = isExplicitPair = false; - - if (ch === 0x3F/* ? */) { - following = state.input.charCodeAt(state.position + 1); - - if (is_WS_OR_EOL(following)) { - isPair = isExplicitPair = true; - state.position++; - skipSeparationSpace(state, true, nodeIndent); - } - } - - _line = state.line; - composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); - keyTag = state.tag; - keyNode = state.result; - skipSeparationSpace(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { - isPair = true; - ch = state.input.charCodeAt(++state.position); - skipSeparationSpace(state, true, nodeIndent); - composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); - valueNode = state.result; - } - - if (isMapping) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode); - } else if (isPair) { - _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode)); - } else { - _result.push(keyNode); - } - - skipSeparationSpace(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x2C/* , */) { - readNext = true; - ch = state.input.charCodeAt(++state.position); - } else { - readNext = false; - } - } - - throwError(state, 'unexpected end of the stream within a flow collection'); -} - -function readBlockScalar(state, nodeIndent) { - var captureStart, - folding, - chomping = CHOMPING_CLIP, - didReadContent = false, - detectedIndent = false, - textIndent = nodeIndent, - emptyLines = 0, - atMoreIndented = false, - tmp, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x7C/* | */) { - folding = false; - } else if (ch === 0x3E/* > */) { - folding = true; - } else { - return false; - } - - state.kind = 'scalar'; - state.result = ''; - - while (ch !== 0) { - ch = state.input.charCodeAt(++state.position); - - if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { - if (CHOMPING_CLIP === chomping) { - chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; - } else { - throwError(state, 'repeat of a chomping mode identifier'); - } - - } else if ((tmp = fromDecimalCode(ch)) >= 0) { - if (tmp === 0) { - throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); - } else if (!detectedIndent) { - textIndent = nodeIndent + tmp - 1; - detectedIndent = true; - } else { - throwError(state, 'repeat of an indentation width identifier'); - } - - } else { - break; - } - } - - if (is_WHITE_SPACE(ch)) { - do { ch = state.input.charCodeAt(++state.position); } - while (is_WHITE_SPACE(ch)); - - if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (!is_EOL(ch) && (ch !== 0)); - } - } - - while (ch !== 0) { - readLineBreak(state); - state.lineIndent = 0; - - ch = state.input.charCodeAt(state.position); - - while ((!detectedIndent || state.lineIndent < textIndent) && - (ch === 0x20/* Space */)) { - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); - } - - if (!detectedIndent && state.lineIndent > textIndent) { - textIndent = state.lineIndent; - } - - if (is_EOL(ch)) { - emptyLines++; - continue; - } - - // End of the scalar. - if (state.lineIndent < textIndent) { - - // Perform the chomping. - if (chomping === CHOMPING_KEEP) { - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - } else if (chomping === CHOMPING_CLIP) { - if (didReadContent) { // i.e. only if the scalar is not empty. - state.result += '\n'; - } - } - - // Break this `while` cycle and go to the funciton's epilogue. - break; - } - - // Folded style: use fancy rules to handle line breaks. - if (folding) { - - // Lines starting with white space characters (more-indented lines) are not folded. - if (is_WHITE_SPACE(ch)) { - atMoreIndented = true; - // except for the first content line (cf. Example 8.1) - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - - // End of more-indented block. - } else if (atMoreIndented) { - atMoreIndented = false; - state.result += common.repeat('\n', emptyLines + 1); - - // Just one line break - perceive as the same line. - } else if (emptyLines === 0) { - if (didReadContent) { // i.e. only if we have already read some scalar content. - state.result += ' '; - } - - // Several line breaks - perceive as different lines. - } else { - state.result += common.repeat('\n', emptyLines); - } - - // Literal style: just add exact number of line breaks between content lines. - } else { - // Keep all line breaks except the header line break. - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - } - - didReadContent = true; - detectedIndent = true; - emptyLines = 0; - captureStart = state.position; - - while (!is_EOL(ch) && (ch !== 0)) { - ch = state.input.charCodeAt(++state.position); - } - - captureSegment(state, captureStart, state.position, false); - } - - return true; -} - -function readBlockSequence(state, nodeIndent) { - var _line, - _tag = state.tag, - _anchor = state.anchor, - _result = [], - following, - detected = false, - ch; - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } - - ch = state.input.charCodeAt(state.position); - - while (ch !== 0) { - - if (ch !== 0x2D/* - */) { - break; - } - - following = state.input.charCodeAt(state.position + 1); - - if (!is_WS_OR_EOL(following)) { - break; - } - - detected = true; - state.position++; - - if (skipSeparationSpace(state, true, -1)) { - if (state.lineIndent <= nodeIndent) { - _result.push(null); - ch = state.input.charCodeAt(state.position); - continue; - } - } - - _line = state.line; - composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); - _result.push(state.result); - skipSeparationSpace(state, true, -1); - - ch = state.input.charCodeAt(state.position); - - if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { - throwError(state, 'bad indentation of a sequence entry'); - } else if (state.lineIndent < nodeIndent) { - break; - } - } - - if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'sequence'; - state.result = _result; - return true; - } - return false; -} - -function readBlockMapping(state, nodeIndent, flowIndent) { - var following, - allowCompact, - _line, - _tag = state.tag, - _anchor = state.anchor, - _result = {}, - overridableKeys = {}, - keyTag = null, - keyNode = null, - valueNode = null, - atExplicitKey = false, - detected = false, - ch; - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } - - ch = state.input.charCodeAt(state.position); - - while (ch !== 0) { - following = state.input.charCodeAt(state.position + 1); - _line = state.line; // Save the current line. - - // - // Explicit notation case. There are two separate blocks: - // first for the key (denoted by "?") and second for the value (denoted by ":") - // - if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { - - if (ch === 0x3F/* ? */) { - if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); - keyTag = keyNode = valueNode = null; - } - - detected = true; - atExplicitKey = true; - allowCompact = true; - - } else if (atExplicitKey) { - // i.e. 0x3A/* : */ === character after the explicit key. - atExplicitKey = false; - allowCompact = true; - - } else { - throwError(state, 'incomplete explicit mapping pair; a key node is missed'); - } - - state.position += 1; - ch = following; - - // - // Implicit notation case. Flow-style node as the key first, then ":", and the value. - // - } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { - - if (state.line === _line) { - ch = state.input.charCodeAt(state.position); - - while (is_WHITE_SPACE(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (ch === 0x3A/* : */) { - ch = state.input.charCodeAt(++state.position); - - if (!is_WS_OR_EOL(ch)) { - throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); - } - - if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); - keyTag = keyNode = valueNode = null; - } - - detected = true; - atExplicitKey = false; - allowCompact = false; - keyTag = state.tag; - keyNode = state.result; - - } else if (detected) { - throwError(state, 'can not read an implicit mapping pair; a colon is missed'); - - } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. - } - - } else if (detected) { - throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); - - } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. - } - - } else { - break; // Reading is done. Go to the epilogue. - } - - // - // Common reading code for both explicit and implicit notations. - // - if (state.line === _line || state.lineIndent > nodeIndent) { - if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { - if (atExplicitKey) { - keyNode = state.result; - } else { - valueNode = state.result; - } - } - - if (!atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode); - keyTag = keyNode = valueNode = null; - } - - skipSeparationSpace(state, true, -1); - ch = state.input.charCodeAt(state.position); - } - - if (state.lineIndent > nodeIndent && (ch !== 0)) { - throwError(state, 'bad indentation of a mapping entry'); - } else if (state.lineIndent < nodeIndent) { - break; - } - } - - // - // Epilogue. - // - - // Special case: last mapping's node contains only the key in explicit notation. - if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); - } - - // Expose the resulting mapping. - if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'mapping'; - state.result = _result; - } - - return detected; -} - -function readTagProperty(state) { - var _position, - isVerbatim = false, - isNamed = false, - tagHandle, - tagName, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x21/* ! */) return false; - - if (state.tag !== null) { - throwError(state, 'duplication of a tag property'); - } - - ch = state.input.charCodeAt(++state.position); - - if (ch === 0x3C/* < */) { - isVerbatim = true; - ch = state.input.charCodeAt(++state.position); - - } else if (ch === 0x21/* ! */) { - isNamed = true; - tagHandle = '!!'; - ch = state.input.charCodeAt(++state.position); - - } else { - tagHandle = '!'; - } - - _position = state.position; - - if (isVerbatim) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && ch !== 0x3E/* > */); - - if (state.position < state.length) { - tagName = state.input.slice(_position, state.position); - ch = state.input.charCodeAt(++state.position); - } else { - throwError(state, 'unexpected end of the stream within a verbatim tag'); - } - } else { - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - - if (ch === 0x21/* ! */) { - if (!isNamed) { - tagHandle = state.input.slice(_position - 1, state.position + 1); - - if (!PATTERN_TAG_HANDLE.test(tagHandle)) { - throwError(state, 'named tag handle cannot contain such characters'); - } - - isNamed = true; - _position = state.position + 1; - } else { - throwError(state, 'tag suffix cannot contain exclamation marks'); - } - } - - ch = state.input.charCodeAt(++state.position); - } - - tagName = state.input.slice(_position, state.position); - - if (PATTERN_FLOW_INDICATORS.test(tagName)) { - throwError(state, 'tag suffix cannot contain flow indicator characters'); - } - } - - if (tagName && !PATTERN_TAG_URI.test(tagName)) { - throwError(state, 'tag name cannot contain such characters: ' + tagName); - } - - if (isVerbatim) { - state.tag = tagName; - - } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) { - state.tag = state.tagMap[tagHandle] + tagName; - - } else if (tagHandle === '!') { - state.tag = '!' + tagName; - - } else if (tagHandle === '!!') { - state.tag = 'tag:yaml.org,2002:' + tagName; - - } else { - throwError(state, 'undeclared tag handle "' + tagHandle + '"'); - } - - return true; -} - -function readAnchorProperty(state) { - var _position, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x26/* & */) return false; - - if (state.anchor !== null) { - throwError(state, 'duplication of an anchor property'); - } - - ch = state.input.charCodeAt(++state.position); - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (state.position === _position) { - throwError(state, 'name of an anchor node must contain at least one character'); - } - - state.anchor = state.input.slice(_position, state.position); - return true; -} - -function readAlias(state) { - var _position, alias, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x2A/* * */) return false; - - ch = state.input.charCodeAt(++state.position); - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (state.position === _position) { - throwError(state, 'name of an alias node must contain at least one character'); - } - - alias = state.input.slice(_position, state.position); - - if (!state.anchorMap.hasOwnProperty(alias)) { - throwError(state, 'unidentified alias "' + alias + '"'); - } - - state.result = state.anchorMap[alias]; - skipSeparationSpace(state, true, -1); - return true; -} - -function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { - var allowBlockStyles, - allowBlockScalars, - allowBlockCollections, - indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; - } - } - } - - if (indentStatus === 1) { - while (readTagProperty(state) || readAnchorProperty(state)) { - if (skipSeparationSpace(state, true, -1)) { - atNewLine = true; - allowBlockCollections = allowBlockStyles; - - if (state.lineIndent > parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; - } - } else { - allowBlockCollections = false; - } - } - } - - if (allowBlockCollections) { - allowBlockCollections = atNewLine || allowCompact; - } - - if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { - if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { - flowIndent = parentIndent; - } else { - flowIndent = parentIndent + 1; - } - - blockIndent = state.position - state.lineStart; - - if (indentStatus === 1) { - if (allowBlockCollections && - (readBlockSequence(state, blockIndent) || - readBlockMapping(state, blockIndent, flowIndent)) || - readFlowCollection(state, flowIndent)) { - hasContent = true; - } else { - if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || - readSingleQuotedScalar(state, flowIndent) || - readDoubleQuotedScalar(state, flowIndent)) { - hasContent = true; - - } else if (readAlias(state)) { - hasContent = true; - - if (state.tag !== null || state.anchor !== null) { - throwError(state, 'alias node should not have any properties'); - } - - } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { - hasContent = true; - - if (state.tag === null) { - state.tag = '?'; - } - } - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - } - } else if (indentStatus === 0) { - // Special case: block sequences are allowed to have same indentation level as the parent. - // http://www.yaml.org/spec/1.2/spec.html#id2799784 - hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); - } - } - - if (state.tag !== null && state.tag !== '!') { - if (state.tag === '?') { - for (typeIndex = 0, typeQuantity = state.implicitTypes.length; - typeIndex < typeQuantity; - typeIndex += 1) { - type = state.implicitTypes[typeIndex]; - - // Implicit resolving is not allowed for non-scalar types, and '?' - // non-specific tag is only assigned to plain scalars. So, it isn't - // needed to check for 'kind' conformity. - - if (type.resolve(state.result)) { // `state.result` updated in resolver if matched - state.result = type.construct(state.result); - state.tag = type.tag; - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - break; - } - } - } else if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) { - type = state.typeMap[state.kind || 'fallback'][state.tag]; - - if (state.result !== null && type.kind !== state.kind) { - throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); - } - - if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched - throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); - } else { - state.result = type.construct(state.result); - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - } - } else { - throwError(state, 'unknown tag !<' + state.tag + '>'); - } - } - - if (state.listener !== null) { - state.listener('close', state); - } - return state.tag !== null || state.anchor !== null || hasContent; -} - -function readDocument(state) { - var documentStart = state.position, - _position, - directiveName, - directiveArgs, - hasDirectives = false, - ch; - - state.version = null; - state.checkLineBreaks = state.legacy; - state.tagMap = {}; - state.anchorMap = {}; - - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - skipSeparationSpace(state, true, -1); - - ch = state.input.charCodeAt(state.position); - - if (state.lineIndent > 0 || ch !== 0x25/* % */) { - break; - } - - hasDirectives = true; - ch = state.input.charCodeAt(++state.position); - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - directiveName = state.input.slice(_position, state.position); - directiveArgs = []; - - if (directiveName.length < 1) { - throwError(state, 'directive name must not be less than one character in length'); - } - - while (ch !== 0) { - while (is_WHITE_SPACE(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && !is_EOL(ch)); - break; - } - - if (is_EOL(ch)) break; - - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - directiveArgs.push(state.input.slice(_position, state.position)); - } - - if (ch !== 0) readLineBreak(state); - - if (_hasOwnProperty.call(directiveHandlers, directiveName)) { - directiveHandlers[directiveName](state, directiveName, directiveArgs); - } else { - throwWarning(state, 'unknown document directive "' + directiveName + '"'); - } - } - - skipSeparationSpace(state, true, -1); - - if (state.lineIndent === 0 && - state.input.charCodeAt(state.position) === 0x2D/* - */ && - state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && - state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { - state.position += 3; - skipSeparationSpace(state, true, -1); - - } else if (hasDirectives) { - throwError(state, 'directives end mark is expected'); - } - - composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); - skipSeparationSpace(state, true, -1); - - if (state.checkLineBreaks && - PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { - throwWarning(state, 'non-ASCII line breaks are interpreted as content'); - } - - state.documents.push(state.result); - - if (state.position === state.lineStart && testDocumentSeparator(state)) { - - if (state.input.charCodeAt(state.position) === 0x2E/* . */) { - state.position += 3; - skipSeparationSpace(state, true, -1); - } - return; - } - - if (state.position < (state.length - 1)) { - throwError(state, 'end of the stream or a document separator is expected'); - } else { - return; - } -} - - -function loadDocuments(input, options) { - input = String(input); - options = options || {}; - - if (input.length !== 0) { - - // Add tailing `\n` if not exists - if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && - input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { - input += '\n'; - } - - // Strip BOM - if (input.charCodeAt(0) === 0xFEFF) { - input = input.slice(1); - } - } - - var state = new State(input, options); - - // Use 0 as string terminator. That significantly simplifies bounds check. - state.input += '\0'; - - while (state.input.charCodeAt(state.position) === 0x20/* Space */) { - state.lineIndent += 1; - state.position += 1; - } - - while (state.position < (state.length - 1)) { - readDocument(state); - } - - return state.documents; -} - - -function loadAll(input, iterator, options) { - var documents = loadDocuments(input, options), index, length; - - for (index = 0, length = documents.length; index < length; index += 1) { - iterator(documents[index]); - } -} - - -function load(input, options) { - var documents = loadDocuments(input, options); - - if (documents.length === 0) { - /*eslint-disable no-undefined*/ - return undefined; - } else if (documents.length === 1) { - return documents[0]; - } - throw new YAMLException('expected a single document in the stream, but found more'); -} - - -function safeLoadAll(input, output, options) { - loadAll(input, output, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); -} - - -function safeLoad(input, options) { - return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); -} - - -module.exports.loadAll = loadAll; -module.exports.load = load; -module.exports.safeLoadAll = safeLoadAll; -module.exports.safeLoad = safeLoad; - -},{"./common":2,"./exception":4,"./mark":6,"./schema/default_full":9,"./schema/default_safe":10}],6:[function(require,module,exports){ -'use strict'; - - -var common = require('./common'); - - -function Mark(name, buffer, position, line, column) { - this.name = name; - this.buffer = buffer; - this.position = position; - this.line = line; - this.column = column; -} - - -Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { - var head, start, tail, end, snippet; - - if (!this.buffer) return null; - - indent = indent || 4; - maxLength = maxLength || 75; - - head = ''; - start = this.position; - - while (start > 0 && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) { - start -= 1; - if (this.position - start > (maxLength / 2 - 1)) { - head = ' ... '; - start += 5; - break; - } - } - - tail = ''; - end = this.position; - - while (end < this.buffer.length && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end)) === -1) { - end += 1; - if (end - this.position > (maxLength / 2 - 1)) { - tail = ' ... '; - end -= 5; - break; - } - } - - snippet = this.buffer.slice(start, end); - - return common.repeat(' ', indent) + head + snippet + tail + '\n' + - common.repeat(' ', indent + this.position - start + head.length) + '^'; -}; - - -Mark.prototype.toString = function toString(compact) { - var snippet, where = ''; - - if (this.name) { - where += 'in "' + this.name + '" '; - } - - where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1); - - if (!compact) { - snippet = this.getSnippet(); - - if (snippet) { - where += ':\n' + snippet; - } - } - - return where; -}; - - -module.exports = Mark; - -},{"./common":2}],7:[function(require,module,exports){ -'use strict'; - -/*eslint-disable max-len*/ - -var common = require('./common'); -var YAMLException = require('./exception'); -var Type = require('./type'); - - -function compileList(schema, name, result) { - var exclude = []; - - schema.include.forEach(function (includedSchema) { - result = compileList(includedSchema, name, result); - }); - - schema[name].forEach(function (currentType) { - result.forEach(function (previousType, previousIndex) { - if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) { - exclude.push(previousIndex); - } - }); - - result.push(currentType); - }); - - return result.filter(function (type, index) { - return exclude.indexOf(index) === -1; - }); -} - - -function compileMap(/* lists... */) { - var result = { - scalar: {}, - sequence: {}, - mapping: {}, - fallback: {} - }, index, length; - - function collectType(type) { - result[type.kind][type.tag] = result['fallback'][type.tag] = type; - } - - for (index = 0, length = arguments.length; index < length; index += 1) { - arguments[index].forEach(collectType); - } - return result; -} - - -function Schema(definition) { - this.include = definition.include || []; - this.implicit = definition.implicit || []; - this.explicit = definition.explicit || []; - - this.implicit.forEach(function (type) { - if (type.loadKind && type.loadKind !== 'scalar') { - throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); - } - }); - - this.compiledImplicit = compileList(this, 'implicit', []); - this.compiledExplicit = compileList(this, 'explicit', []); - this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit); -} - - -Schema.DEFAULT = null; - - -Schema.create = function createSchema() { - var schemas, types; - - switch (arguments.length) { - case 1: - schemas = Schema.DEFAULT; - types = arguments[0]; - break; - - case 2: - schemas = arguments[0]; - types = arguments[1]; - break; - - default: - throw new YAMLException('Wrong number of arguments for Schema.create function'); - } - - schemas = common.toArray(schemas); - types = common.toArray(types); - - if (!schemas.every(function (schema) { return schema instanceof Schema; })) { - throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); - } - - if (!types.every(function (type) { return type instanceof Type; })) { - throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); - } - - return new Schema({ - include: schemas, - explicit: types - }); -}; - - -module.exports = Schema; - -},{"./common":2,"./exception":4,"./type":13}],8:[function(require,module,exports){ -// Standard YAML's Core schema. -// http://www.yaml.org/spec/1.2/spec.html#id2804923 -// -// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. -// So, Core schema has no distinctions from JSON schema is JS-YAML. - - -'use strict'; - - -var Schema = require('../schema'); - - -module.exports = new Schema({ - include: [ - require('./json') - ] -}); - -},{"../schema":7,"./json":12}],9:[function(require,module,exports){ -// JS-YAML's default schema for `load` function. -// It is not described in the YAML specification. -// -// This schema is based on JS-YAML's default safe schema and includes -// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function. -// -// Also this schema is used as default base schema at `Schema.create` function. - - -'use strict'; - - -var Schema = require('../schema'); - - -module.exports = Schema.DEFAULT = new Schema({ - include: [ - require('./default_safe') - ], - explicit: [ - require('../type/js/undefined'), - require('../type/js/regexp'), - require('../type/js/function') - ] -}); - -},{"../schema":7,"../type/js/function":18,"../type/js/regexp":19,"../type/js/undefined":20,"./default_safe":10}],10:[function(require,module,exports){ -// JS-YAML's default schema for `safeLoad` function. -// It is not described in the YAML specification. -// -// This schema is based on standard YAML's Core schema and includes most of -// extra types described at YAML tag repository. (http://yaml.org/type/) - - -'use strict'; - - -var Schema = require('../schema'); - - -module.exports = new Schema({ - include: [ - require('./core') - ], - implicit: [ - require('../type/timestamp'), - require('../type/merge') - ], - explicit: [ - require('../type/binary'), - require('../type/omap'), - require('../type/pairs'), - require('../type/set') - ] -}); - -},{"../schema":7,"../type/binary":14,"../type/merge":22,"../type/omap":24,"../type/pairs":25,"../type/set":27,"../type/timestamp":29,"./core":8}],11:[function(require,module,exports){ -// Standard YAML's Failsafe schema. -// http://www.yaml.org/spec/1.2/spec.html#id2802346 - - -'use strict'; - - -var Schema = require('../schema'); - - -module.exports = new Schema({ - explicit: [ - require('../type/str'), - require('../type/seq'), - require('../type/map') - ] -}); - -},{"../schema":7,"../type/map":21,"../type/seq":26,"../type/str":28}],12:[function(require,module,exports){ -// Standard YAML's JSON schema. -// http://www.yaml.org/spec/1.2/spec.html#id2803231 -// -// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. -// So, this schema is not such strict as defined in the YAML specification. -// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc. - - -'use strict'; - - -var Schema = require('../schema'); - - -module.exports = new Schema({ - include: [ - require('./failsafe') - ], - implicit: [ - require('../type/null'), - require('../type/bool'), - require('../type/int'), - require('../type/float') - ] -}); - -},{"../schema":7,"../type/bool":15,"../type/float":16,"../type/int":17,"../type/null":23,"./failsafe":11}],13:[function(require,module,exports){ -'use strict'; - -var YAMLException = require('./exception'); - -var TYPE_CONSTRUCTOR_OPTIONS = [ - 'kind', - 'resolve', - 'construct', - 'instanceOf', - 'predicate', - 'represent', - 'defaultStyle', - 'styleAliases' -]; - -var YAML_NODE_KINDS = [ - 'scalar', - 'sequence', - 'mapping' -]; - -function compileStyleAliases(map) { - var result = {}; - - if (map !== null) { - Object.keys(map).forEach(function (style) { - map[style].forEach(function (alias) { - result[String(alias)] = style; - }); - }); - } - - return result; -} - -function Type(tag, options) { - options = options || {}; - - Object.keys(options).forEach(function (name) { - if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { - throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); - } - }); - - // TODO: Add tag format check. - this.tag = tag; - this.kind = options['kind'] || null; - this.resolve = options['resolve'] || function () { return true; }; - this.construct = options['construct'] || function (data) { return data; }; - this.instanceOf = options['instanceOf'] || null; - this.predicate = options['predicate'] || null; - this.represent = options['represent'] || null; - this.defaultStyle = options['defaultStyle'] || null; - this.styleAliases = compileStyleAliases(options['styleAliases'] || null); - - if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { - throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); - } -} - -module.exports = Type; - -},{"./exception":4}],14:[function(require,module,exports){ -'use strict'; - -/*eslint-disable no-bitwise*/ - -var NodeBuffer; - -try { - // A trick for browserified version, to not include `Buffer` shim - var _require = require; - NodeBuffer = _require('buffer').Buffer; -} catch (__) {} - -var Type = require('../type'); - - -// [ 64, 65, 66 ] -> [ padding, CR, LF ] -var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; - - -function resolveYamlBinary(data) { - if (data === null) return false; - - var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; - - // Convert one by one. - for (idx = 0; idx < max; idx++) { - code = map.indexOf(data.charAt(idx)); - - // Skip CR/LF - if (code > 64) continue; - - // Fail on illegal characters - if (code < 0) return false; - - bitlen += 6; - } - - // If there are any bits left, source was corrupted - return (bitlen % 8) === 0; -} - -function constructYamlBinary(data) { - var idx, tailbits, - input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan - max = input.length, - map = BASE64_MAP, - bits = 0, - result = []; - - // Collect by 6*4 bits (3 bytes) - - for (idx = 0; idx < max; idx++) { - if ((idx % 4 === 0) && idx) { - result.push((bits >> 16) & 0xFF); - result.push((bits >> 8) & 0xFF); - result.push(bits & 0xFF); - } - - bits = (bits << 6) | map.indexOf(input.charAt(idx)); - } - - // Dump tail - - tailbits = (max % 4) * 6; - - if (tailbits === 0) { - result.push((bits >> 16) & 0xFF); - result.push((bits >> 8) & 0xFF); - result.push(bits & 0xFF); - } else if (tailbits === 18) { - result.push((bits >> 10) & 0xFF); - result.push((bits >> 2) & 0xFF); - } else if (tailbits === 12) { - result.push((bits >> 4) & 0xFF); - } - - // Wrap into Buffer for NodeJS and leave Array for browser - if (NodeBuffer) return new NodeBuffer(result); - - return result; -} - -function representYamlBinary(object /*, style*/) { - var result = '', bits = 0, idx, tail, - max = object.length, - map = BASE64_MAP; - - // Convert every three bytes to 4 ASCII characters. - - for (idx = 0; idx < max; idx++) { - if ((idx % 3 === 0) && idx) { - result += map[(bits >> 18) & 0x3F]; - result += map[(bits >> 12) & 0x3F]; - result += map[(bits >> 6) & 0x3F]; - result += map[bits & 0x3F]; - } - - bits = (bits << 8) + object[idx]; - } - - // Dump tail - - tail = max % 3; - - if (tail === 0) { - result += map[(bits >> 18) & 0x3F]; - result += map[(bits >> 12) & 0x3F]; - result += map[(bits >> 6) & 0x3F]; - result += map[bits & 0x3F]; - } else if (tail === 2) { - result += map[(bits >> 10) & 0x3F]; - result += map[(bits >> 4) & 0x3F]; - result += map[(bits << 2) & 0x3F]; - result += map[64]; - } else if (tail === 1) { - result += map[(bits >> 2) & 0x3F]; - result += map[(bits << 4) & 0x3F]; - result += map[64]; - result += map[64]; - } - - return result; -} - -function isBinary(object) { - return NodeBuffer && NodeBuffer.isBuffer(object); -} - -module.exports = new Type('tag:yaml.org,2002:binary', { - kind: 'scalar', - resolve: resolveYamlBinary, - construct: constructYamlBinary, - predicate: isBinary, - represent: representYamlBinary -}); - -},{"../type":13}],15:[function(require,module,exports){ -'use strict'; - -var Type = require('../type'); - -function resolveYamlBoolean(data) { - if (data === null) return false; - - var max = data.length; - - return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || - (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); -} - -function constructYamlBoolean(data) { - return data === 'true' || - data === 'True' || - data === 'TRUE'; -} - -function isBoolean(object) { - return Object.prototype.toString.call(object) === '[object Boolean]'; -} - -module.exports = new Type('tag:yaml.org,2002:bool', { - kind: 'scalar', - resolve: resolveYamlBoolean, - construct: constructYamlBoolean, - predicate: isBoolean, - represent: { - lowercase: function (object) { return object ? 'true' : 'false'; }, - uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, - camelcase: function (object) { return object ? 'True' : 'False'; } - }, - defaultStyle: 'lowercase' -}); - -},{"../type":13}],16:[function(require,module,exports){ -'use strict'; - -var common = require('../common'); -var Type = require('../type'); - -var YAML_FLOAT_PATTERN = new RegExp( - '^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?' + - '|\\.[0-9_]+(?:[eE][-+][0-9]+)?' + - '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + - '|[-+]?\\.(?:inf|Inf|INF)' + - '|\\.(?:nan|NaN|NAN))$'); - -function resolveYamlFloat(data) { - if (data === null) return false; - - if (!YAML_FLOAT_PATTERN.test(data)) return false; - - return true; -} - -function constructYamlFloat(data) { - var value, sign, base, digits; - - value = data.replace(/_/g, '').toLowerCase(); - sign = value[0] === '-' ? -1 : 1; - digits = []; - - if ('+-'.indexOf(value[0]) >= 0) { - value = value.slice(1); - } - - if (value === '.inf') { - return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; - - } else if (value === '.nan') { - return NaN; - - } else if (value.indexOf(':') >= 0) { - value.split(':').forEach(function (v) { - digits.unshift(parseFloat(v, 10)); - }); - - value = 0.0; - base = 1; - - digits.forEach(function (d) { - value += d * base; - base *= 60; - }); - - return sign * value; - - } - return sign * parseFloat(value, 10); -} - - -var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; - -function representYamlFloat(object, style) { - var res; - - if (isNaN(object)) { - switch (style) { - case 'lowercase': return '.nan'; - case 'uppercase': return '.NAN'; - case 'camelcase': return '.NaN'; - } - } else if (Number.POSITIVE_INFINITY === object) { - switch (style) { - case 'lowercase': return '.inf'; - case 'uppercase': return '.INF'; - case 'camelcase': return '.Inf'; - } - } else if (Number.NEGATIVE_INFINITY === object) { - switch (style) { - case 'lowercase': return '-.inf'; - case 'uppercase': return '-.INF'; - case 'camelcase': return '-.Inf'; - } - } else if (common.isNegativeZero(object)) { - return '-0.0'; - } - - res = object.toString(10); - - // JS stringifier can build scientific format without dots: 5e-100, - // while YAML requres dot: 5.e-100. Fix it with simple hack - - return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; -} - -function isFloat(object) { - return (Object.prototype.toString.call(object) === '[object Number]') && - (object % 1 !== 0 || common.isNegativeZero(object)); -} - -module.exports = new Type('tag:yaml.org,2002:float', { - kind: 'scalar', - resolve: resolveYamlFloat, - construct: constructYamlFloat, - predicate: isFloat, - represent: representYamlFloat, - defaultStyle: 'lowercase' -}); - -},{"../common":2,"../type":13}],17:[function(require,module,exports){ -'use strict'; - -var common = require('../common'); -var Type = require('../type'); - -function isHexCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || - ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || - ((0x61/* a */ <= c) && (c <= 0x66/* f */)); -} - -function isOctCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); -} - -function isDecCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); -} - -function resolveYamlInteger(data) { - if (data === null) return false; - - var max = data.length, - index = 0, - hasDigits = false, - ch; - - if (!max) return false; - - ch = data[index]; - - // sign - if (ch === '-' || ch === '+') { - ch = data[++index]; - } - - if (ch === '0') { - // 0 - if (index + 1 === max) return true; - ch = data[++index]; - - // base 2, base 8, base 16 - - if (ch === 'b') { - // base 2 - index++; - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (ch !== '0' && ch !== '1') return false; - hasDigits = true; - } - return hasDigits; - } - - - if (ch === 'x') { - // base 16 - index++; - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isHexCode(data.charCodeAt(index))) return false; - hasDigits = true; - } - return hasDigits; - } - - // base 8 - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isOctCode(data.charCodeAt(index))) return false; - hasDigits = true; - } - return hasDigits; - } - - // base 10 (except 0) or base 60 - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (ch === ':') break; - if (!isDecCode(data.charCodeAt(index))) { - return false; - } - hasDigits = true; - } - - if (!hasDigits) return false; - - // if !base60 - done; - if (ch !== ':') return true; - - // base60 almost not used, no needs to optimize - return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); -} - -function constructYamlInteger(data) { - var value = data, sign = 1, ch, base, digits = []; - - if (value.indexOf('_') !== -1) { - value = value.replace(/_/g, ''); - } - - ch = value[0]; - - if (ch === '-' || ch === '+') { - if (ch === '-') sign = -1; - value = value.slice(1); - ch = value[0]; - } - - if (value === '0') return 0; - - if (ch === '0') { - if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); - if (value[1] === 'x') return sign * parseInt(value, 16); - return sign * parseInt(value, 8); - } - - if (value.indexOf(':') !== -1) { - value.split(':').forEach(function (v) { - digits.unshift(parseInt(v, 10)); - }); - - value = 0; - base = 1; - - digits.forEach(function (d) { - value += (d * base); - base *= 60; - }); - - return sign * value; - - } - - return sign * parseInt(value, 10); -} - -function isInteger(object) { - return (Object.prototype.toString.call(object)) === '[object Number]' && - (object % 1 === 0 && !common.isNegativeZero(object)); -} - -module.exports = new Type('tag:yaml.org,2002:int', { - kind: 'scalar', - resolve: resolveYamlInteger, - construct: constructYamlInteger, - predicate: isInteger, - represent: { - binary: function (object) { return '0b' + object.toString(2); }, - octal: function (object) { return '0' + object.toString(8); }, - decimal: function (object) { return object.toString(10); }, - hexadecimal: function (object) { return '0x' + object.toString(16).toUpperCase(); } - }, - defaultStyle: 'decimal', - styleAliases: { - binary: [ 2, 'bin' ], - octal: [ 8, 'oct' ], - decimal: [ 10, 'dec' ], - hexadecimal: [ 16, 'hex' ] - } -}); - -},{"../common":2,"../type":13}],18:[function(require,module,exports){ -'use strict'; - -var esprima; - -// Browserified version does not have esprima -// -// 1. For node.js just require module as deps -// 2. For browser try to require mudule via external AMD system. -// If not found - try to fallback to window.esprima. If not -// found too - then fail to parse. -// -try { - // workaround to exclude package from browserify list. - var _require = require; - esprima = _require('esprima'); -} catch (_) { - /*global window */ - if (typeof window !== 'undefined') esprima = window.esprima; -} - -var Type = require('../../type'); - -function resolveJavascriptFunction(data) { - if (data === null) return false; - - try { - var source = '(' + data + ')', - ast = esprima.parse(source, { range: true }); - - if (ast.type !== 'Program' || - ast.body.length !== 1 || - ast.body[0].type !== 'ExpressionStatement' || - ast.body[0].expression.type !== 'FunctionExpression') { - return false; - } - - return true; - } catch (err) { - return false; - } -} - -function constructJavascriptFunction(data) { - /*jslint evil:true*/ - - var source = '(' + data + ')', - ast = esprima.parse(source, { range: true }), - params = [], - body; - - if (ast.type !== 'Program' || - ast.body.length !== 1 || - ast.body[0].type !== 'ExpressionStatement' || - ast.body[0].expression.type !== 'FunctionExpression') { - throw new Error('Failed to resolve function'); - } - - ast.body[0].expression.params.forEach(function (param) { - params.push(param.name); - }); - - body = ast.body[0].expression.body.range; - - // Esprima's ranges include the first '{' and the last '}' characters on - // function expressions. So cut them out. - /*eslint-disable no-new-func*/ - return new Function(params, source.slice(body[0] + 1, body[1] - 1)); -} - -function representJavascriptFunction(object /*, style*/) { - return object.toString(); -} - -function isFunction(object) { - return Object.prototype.toString.call(object) === '[object Function]'; -} - -module.exports = new Type('tag:yaml.org,2002:js/function', { - kind: 'scalar', - resolve: resolveJavascriptFunction, - construct: constructJavascriptFunction, - predicate: isFunction, - represent: representJavascriptFunction -}); - -},{"../../type":13}],19:[function(require,module,exports){ -'use strict'; - -var Type = require('../../type'); - -function resolveJavascriptRegExp(data) { - if (data === null) return false; - if (data.length === 0) return false; - - var regexp = data, - tail = /\/([gim]*)$/.exec(data), - modifiers = ''; - - // if regexp starts with '/' it can have modifiers and must be properly closed - // `/foo/gim` - modifiers tail can be maximum 3 chars - if (regexp[0] === '/') { - if (tail) modifiers = tail[1]; - - if (modifiers.length > 3) return false; - // if expression starts with /, is should be properly terminated - if (regexp[regexp.length - modifiers.length - 1] !== '/') return false; - } - - return true; -} - -function constructJavascriptRegExp(data) { - var regexp = data, - tail = /\/([gim]*)$/.exec(data), - modifiers = ''; - - // `/foo/gim` - tail can be maximum 4 chars - if (regexp[0] === '/') { - if (tail) modifiers = tail[1]; - regexp = regexp.slice(1, regexp.length - modifiers.length - 1); - } - - return new RegExp(regexp, modifiers); -} - -function representJavascriptRegExp(object /*, style*/) { - var result = '/' + object.source + '/'; - - if (object.global) result += 'g'; - if (object.multiline) result += 'm'; - if (object.ignoreCase) result += 'i'; - - return result; -} - -function isRegExp(object) { - return Object.prototype.toString.call(object) === '[object RegExp]'; -} - -module.exports = new Type('tag:yaml.org,2002:js/regexp', { - kind: 'scalar', - resolve: resolveJavascriptRegExp, - construct: constructJavascriptRegExp, - predicate: isRegExp, - represent: representJavascriptRegExp -}); - -},{"../../type":13}],20:[function(require,module,exports){ -'use strict'; - -var Type = require('../../type'); - -function resolveJavascriptUndefined() { - return true; -} - -function constructJavascriptUndefined() { - /*eslint-disable no-undefined*/ - return undefined; -} - -function representJavascriptUndefined() { - return ''; -} - -function isUndefined(object) { - return typeof object === 'undefined'; -} - -module.exports = new Type('tag:yaml.org,2002:js/undefined', { - kind: 'scalar', - resolve: resolveJavascriptUndefined, - construct: constructJavascriptUndefined, - predicate: isUndefined, - represent: representJavascriptUndefined -}); - -},{"../../type":13}],21:[function(require,module,exports){ -'use strict'; - -var Type = require('../type'); - -module.exports = new Type('tag:yaml.org,2002:map', { - kind: 'mapping', - construct: function (data) { return data !== null ? data : {}; } -}); - -},{"../type":13}],22:[function(require,module,exports){ -'use strict'; - -var Type = require('../type'); - -function resolveYamlMerge(data) { - return data === '<<' || data === null; -} - -module.exports = new Type('tag:yaml.org,2002:merge', { - kind: 'scalar', - resolve: resolveYamlMerge -}); - -},{"../type":13}],23:[function(require,module,exports){ -'use strict'; - -var Type = require('../type'); - -function resolveYamlNull(data) { - if (data === null) return true; - - var max = data.length; - - return (max === 1 && data === '~') || - (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); -} - -function constructYamlNull() { - return null; -} - -function isNull(object) { - return object === null; -} - -module.exports = new Type('tag:yaml.org,2002:null', { - kind: 'scalar', - resolve: resolveYamlNull, - construct: constructYamlNull, - predicate: isNull, - represent: { - canonical: function () { return '~'; }, - lowercase: function () { return 'null'; }, - uppercase: function () { return 'NULL'; }, - camelcase: function () { return 'Null'; } - }, - defaultStyle: 'lowercase' -}); - -},{"../type":13}],24:[function(require,module,exports){ -'use strict'; - -var Type = require('../type'); - -var _hasOwnProperty = Object.prototype.hasOwnProperty; -var _toString = Object.prototype.toString; - -function resolveYamlOmap(data) { - if (data === null) return true; - - var objectKeys = [], index, length, pair, pairKey, pairHasKey, - object = data; - - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; - pairHasKey = false; - - if (_toString.call(pair) !== '[object Object]') return false; - - for (pairKey in pair) { - if (_hasOwnProperty.call(pair, pairKey)) { - if (!pairHasKey) pairHasKey = true; - else return false; - } - } - - if (!pairHasKey) return false; - - if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); - else return false; - } - - return true; -} - -function constructYamlOmap(data) { - return data !== null ? data : []; -} - -module.exports = new Type('tag:yaml.org,2002:omap', { - kind: 'sequence', - resolve: resolveYamlOmap, - construct: constructYamlOmap -}); - -},{"../type":13}],25:[function(require,module,exports){ -'use strict'; - -var Type = require('../type'); - -var _toString = Object.prototype.toString; - -function resolveYamlPairs(data) { - if (data === null) return true; - - var index, length, pair, keys, result, - object = data; - - result = new Array(object.length); - - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; - - if (_toString.call(pair) !== '[object Object]') return false; - - keys = Object.keys(pair); - - if (keys.length !== 1) return false; - - result[index] = [ keys[0], pair[keys[0]] ]; - } - - return true; -} - -function constructYamlPairs(data) { - if (data === null) return []; - - var index, length, pair, keys, result, - object = data; - - result = new Array(object.length); - - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; - - keys = Object.keys(pair); - - result[index] = [ keys[0], pair[keys[0]] ]; - } - - return result; -} - -module.exports = new Type('tag:yaml.org,2002:pairs', { - kind: 'sequence', - resolve: resolveYamlPairs, - construct: constructYamlPairs -}); - -},{"../type":13}],26:[function(require,module,exports){ -'use strict'; - -var Type = require('../type'); - -module.exports = new Type('tag:yaml.org,2002:seq', { - kind: 'sequence', - construct: function (data) { return data !== null ? data : []; } -}); - -},{"../type":13}],27:[function(require,module,exports){ -'use strict'; - -var Type = require('../type'); - -var _hasOwnProperty = Object.prototype.hasOwnProperty; - -function resolveYamlSet(data) { - if (data === null) return true; - - var key, object = data; - - for (key in object) { - if (_hasOwnProperty.call(object, key)) { - if (object[key] !== null) return false; - } - } - - return true; -} - -function constructYamlSet(data) { - return data !== null ? data : {}; -} - -module.exports = new Type('tag:yaml.org,2002:set', { - kind: 'mapping', - resolve: resolveYamlSet, - construct: constructYamlSet -}); - -},{"../type":13}],28:[function(require,module,exports){ -'use strict'; - -var Type = require('../type'); - -module.exports = new Type('tag:yaml.org,2002:str', { - kind: 'scalar', - construct: function (data) { return data !== null ? data : ''; } -}); - -},{"../type":13}],29:[function(require,module,exports){ -'use strict'; - -var Type = require('../type'); - -var YAML_DATE_REGEXP = new RegExp( - '^([0-9][0-9][0-9][0-9])' + // [1] year - '-([0-9][0-9])' + // [2] month - '-([0-9][0-9])$'); // [3] day - -var YAML_TIMESTAMP_REGEXP = new RegExp( - '^([0-9][0-9][0-9][0-9])' + // [1] year - '-([0-9][0-9]?)' + // [2] month - '-([0-9][0-9]?)' + // [3] day - '(?:[Tt]|[ \\t]+)' + // ... - '([0-9][0-9]?)' + // [4] hour - ':([0-9][0-9])' + // [5] minute - ':([0-9][0-9])' + // [6] second - '(?:\\.([0-9]*))?' + // [7] fraction - '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour - '(?::([0-9][0-9]))?))?$'); // [11] tz_minute - -function resolveYamlTimestamp(data) { - if (data === null) return false; - if (YAML_DATE_REGEXP.exec(data) !== null) return true; - if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; - return false; -} - -function constructYamlTimestamp(data) { - var match, year, month, day, hour, minute, second, fraction = 0, - delta = null, tz_hour, tz_minute, date; - - match = YAML_DATE_REGEXP.exec(data); - if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); - - if (match === null) throw new Error('Date resolve error'); - - // match: [1] year [2] month [3] day - - year = +(match[1]); - month = +(match[2]) - 1; // JS month starts with 0 - day = +(match[3]); - - if (!match[4]) { // no hour - return new Date(Date.UTC(year, month, day)); - } - - // match: [4] hour [5] minute [6] second [7] fraction - - hour = +(match[4]); - minute = +(match[5]); - second = +(match[6]); - - if (match[7]) { - fraction = match[7].slice(0, 3); - while (fraction.length < 3) { // milli-seconds - fraction += '0'; - } - fraction = +fraction; - } - - // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute - - if (match[9]) { - tz_hour = +(match[10]); - tz_minute = +(match[11] || 0); - delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds - if (match[9] === '-') delta = -delta; - } - - date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); - - if (delta) date.setTime(date.getTime() - delta); - - return date; -} - -function representYamlTimestamp(object /*, style*/) { - return object.toISOString(); -} - -module.exports = new Type('tag:yaml.org,2002:timestamp', { - kind: 'scalar', - resolve: resolveYamlTimestamp, - construct: constructYamlTimestamp, - instanceOf: Date, - represent: representYamlTimestamp -}); - -},{"../type":13}],"/":[function(require,module,exports){ -'use strict'; - - -var yaml = require('./lib/js-yaml.js'); - - -module.exports = yaml; - -},{"./lib/js-yaml.js":1}]},{},[])("/") -}); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/dist/js-yaml.min.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/dist/js-yaml.min.js deleted file mode 100644 index 211c64ce3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/dist/js-yaml.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/* js-yaml 3.7.0 https://github.com/nodeca/js-yaml */ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.jsyaml=e()}}(function(){return function e(t,n,i){function r(a,s){if(!n[a]){if(!t[a]){var c="function"==typeof require&&require;if(!s&&c)return c(a,!0);if(o)return o(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var l=n[a]={exports:{}};t[a][0].call(l.exports,function(e){var n=t[a][1][e];return r(n?n:e)},l,l.exports,e,t,n,i)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;ai&&" "!==e[h+1],h=o);else if(!l(a))return le;m=m&&p(a)}c=c||d&&o-h-1>i&&" "!==e[h+1]}return s||c?" "===e[0]&&n>9?le:c?ue:ce:m&&!r(e)?ae:se}function h(e,t,n,i){e.dump=function(){function r(t){return c(e,t)}if(0===t.length)return"''";if(!e.noCompatMode&&oe.indexOf(t)!==-1)return"'"+t+"'";var o=e.indent*Math.max(1,n),s=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-o),u=i||e.flowLevel>-1&&n>=e.flowLevel;switch(d(t,u,e.indent,s,r)){case ae:return t;case se:return"'"+t.replace(/'/g,"''")+"'";case ce:return"|"+m(t,e.indent)+g(a(t,o));case ue:return">"+m(t,e.indent)+g(a(y(t,s),o));case le:return'"'+v(t,s)+'"';default:throw new N("impossible error: invalid scalar style")}}()}function m(e,t){var n=" "===e[0]?String(t):"",i="\n"===e[e.length-1],r=i&&("\n"===e[e.length-2]||"\n"===e),o=r?"+":i?"":"-";return n+o+"\n"}function g(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function y(e,t){for(var n,i,r=/(\n+)([^\n]*)/g,o=function(){var n=e.indexOf("\n");return n=n!==-1?n:e.length,r.lastIndex=n,x(e.slice(0,n),t)}(),a="\n"===e[0]||" "===e[0];i=r.exec(e);){var s=i[1],c=i[2];n=" "===c[0],o+=s+(a||n||""===c?"":"\n")+x(c,t),a=n}return o}function x(e,t){if(""===e||" "===e[0])return e;for(var n,i,r=/ [^ ]/g,o=0,a=0,s=0,c="";n=r.exec(e);)s=n.index,s-o>t&&(i=a>o?a:s,c+="\n"+e.slice(o,i),o=i+1),a=s;return c+="\n",c+=e.length-o>t&&a>o?e.slice(o,a)+"\n"+e.slice(a+1):e.slice(o),c.slice(1)}function v(e){for(var t,n,i="",o=0;o1024&&(s+="? "),s+=e.dump+": ",j(e,t,a,!1,!1)&&(s+=e.dump,c+=s));e.tag=u,e.dump="{"+c+"}"}function C(e,t,n,i){var r,o,a,c,u,l,p="",f=e.tag,d=Object.keys(n);if(e.sortKeys===!0)d.sort();else if("function"==typeof e.sortKeys)d.sort(e.sortKeys);else if(e.sortKeys)throw new N("sortKeys must be a boolean or a function");for(r=0,o=d.length;r1024,u&&(l+=e.dump&&U===e.dump.charCodeAt(0)?"?":"? "),l+=e.dump,u&&(l+=s(e,t)),j(e,t+1,c,!0,u)&&(l+=e.dump&&U===e.dump.charCodeAt(0)?":":": ",l+=e.dump,p+=l));e.tag=f,e.dump=p||"{}"}function k(e,t,n){var i,r,o,a,s,c;for(r=n?e.explicitTypes:e.implicitTypes,o=0,a=r.length;o tag resolver accepts not "'+c+'" style');i=s.represent[c](t,c)}e.dump=i}return!0}return!1}function j(e,t,n,i,r,o){e.tag=null,e.dump=n,k(e,n,!1)||k(e,n,!0);var a=T.call(e.dump);i&&(i=e.flowLevel<0||e.flowLevel>t);var s,c,u="[object Object]"===a||"[object Array]"===a;if(u&&(s=e.duplicates.indexOf(n),c=s!==-1),(null!==e.tag&&"?"!==e.tag||c||2!==e.indent&&t>0)&&(r=!1),c&&e.usedDuplicates[s])e.dump="*ref_"+s;else{if(u&&c&&!e.usedDuplicates[s]&&(e.usedDuplicates[s]=!0),"[object Object]"===a)i&&0!==Object.keys(e.dump).length?(C(e,t,e.dump,r),c&&(e.dump="&ref_"+s+e.dump)):(w(e,t,e.dump),c&&(e.dump="&ref_"+s+" "+e.dump));else if("[object Array]"===a)i&&0!==e.dump.length?(b(e,t,e.dump,r),c&&(e.dump="&ref_"+s+e.dump)):(A(e,t,e.dump),c&&(e.dump="&ref_"+s+" "+e.dump));else{if("[object String]"!==a){if(e.skipInvalid)return!1;throw new N("unacceptable kind of an object to dump "+a)}"?"!==e.tag&&h(e,e.dump,t,o)}null!==e.tag&&"?"!==e.tag&&(e.dump="!<"+e.tag+"> "+e.dump)}return!0}function I(e,t){var n,i,r=[],o=[];for(S(e,r,o),n=0,i=o.length;n>10)+55296,(e-65536&1023)+56320)}function f(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||K,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function d(e,t){return new P(t,new W(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function h(e,t){throw d(e,t)}function m(e,t){e.onWarning&&e.onWarning.call(null,d(e,t))}function g(e,t,n,i){var r,o,a,s;if(t1&&(e.result+=R.repeat("\n",t-1))}function C(e,t,n){var s,c,u,l,p,f,d,h,m,y=e.kind,x=e.result;if(m=e.input.charCodeAt(e.position),o(m)||a(m)||35===m||38===m||42===m||33===m||124===m||62===m||39===m||34===m||37===m||64===m||96===m)return!1;if((63===m||45===m)&&(c=e.input.charCodeAt(e.position+1),o(c)||n&&a(c)))return!1;for(e.kind="scalar",e.result="",u=l=e.position,p=!1;0!==m;){if(58===m){if(c=e.input.charCodeAt(e.position+1),o(c)||n&&a(c))break}else if(35===m){if(s=e.input.charCodeAt(e.position-1),o(s))break}else{if(e.position===e.lineStart&&b(e)||n&&a(m))break;if(i(m)){if(f=e.line,d=e.lineStart,h=e.lineIndent,A(e,!1,-1),e.lineIndent>=t){p=!0,m=e.input.charCodeAt(e.position);continue}e.position=l,e.line=f,e.lineStart=d,e.lineIndent=h;break}}p&&(g(e,u,l,!1),w(e,e.line-f),u=l=e.position,p=!1),r(m)||(l=e.position+1),m=e.input.charCodeAt(++e.position)}return g(e,u,l,!1),!!e.result||(e.kind=y,e.result=x,!1)}function k(e,t){var n,r,o;if(n=e.input.charCodeAt(e.position),39!==n)return!1;for(e.kind="scalar",e.result="",e.position++,r=o=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(g(e,r,e.position,!0),n=e.input.charCodeAt(++e.position),39!==n)return!0;r=e.position,e.position++,o=e.position}else i(n)?(g(e,r,o,!0),w(e,A(e,!1,t)),r=o=e.position):e.position===e.lineStart&&b(e)?h(e,"unexpected end of the document within a single quoted scalar"):(e.position++,o=e.position);h(e,"unexpected end of the stream within a single quoted scalar")}function j(e,t){var n,r,o,a,u,l;if(l=e.input.charCodeAt(e.position),34!==l)return!1;for(e.kind="scalar",e.result="",e.position++,n=r=e.position;0!==(l=e.input.charCodeAt(e.position));){if(34===l)return g(e,n,e.position,!0),e.position++,!0;if(92===l){if(g(e,n,e.position,!0),l=e.input.charCodeAt(++e.position),i(l))A(e,!1,t);else if(l<256&&re[l])e.result+=oe[l],e.position++;else if((u=c(l))>0){for(o=u,a=0;o>0;o--)l=e.input.charCodeAt(++e.position),(u=s(l))>=0?a=(a<<4)+u:h(e,"expected hexadecimal character");e.result+=p(a),e.position++}else h(e,"unknown escape sequence");n=r=e.position}else i(l)?(g(e,n,r,!0),w(e,A(e,!1,t)),n=r=e.position):e.position===e.lineStart&&b(e)?h(e,"unexpected end of the document within a double quoted scalar"):(e.position++,r=e.position)}h(e,"unexpected end of the stream within a double quoted scalar")}function I(e,t){var n,i,r,a,s,c,u,l,p,f,d,m=!0,g=e.tag,y=e.anchor,v={};if(d=e.input.charCodeAt(e.position),91===d)a=93,u=!1,i=[];else{if(123!==d)return!1;a=125,u=!0,i={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=i),d=e.input.charCodeAt(++e.position);0!==d;){if(A(e,!0,t),d=e.input.charCodeAt(e.position),d===a)return e.position++,e.tag=g,e.anchor=y,e.kind=u?"mapping":"sequence",e.result=i,!0;m||h(e,"missed comma between flow collection entries"),p=l=f=null,s=c=!1,63===d&&(r=e.input.charCodeAt(e.position+1),o(r)&&(s=c=!0,e.position++,A(e,!0,t))),n=e.line,_(e,t,H,!1,!0),p=e.tag,l=e.result,A(e,!0,t),d=e.input.charCodeAt(e.position),!c&&e.line!==n||58!==d||(s=!0,d=e.input.charCodeAt(++e.position),A(e,!0,t),_(e,t,H,!1,!0),f=e.result),u?x(e,i,v,p,l,f):s?i.push(x(e,null,v,p,l,f)):i.push(l),A(e,!0,t),d=e.input.charCodeAt(e.position),44===d?(m=!0,d=e.input.charCodeAt(++e.position)):m=!1}h(e,"unexpected end of the stream within a flow collection")}function S(e,t){var n,o,a,s,c=z,l=!1,p=!1,f=t,d=0,m=!1;if(s=e.input.charCodeAt(e.position),124===s)o=!1;else{if(62!==s)return!1;o=!0}for(e.kind="scalar",e.result="";0!==s;)if(s=e.input.charCodeAt(++e.position),43===s||45===s)z===c?c=43===s?Q:J:h(e,"repeat of a chomping mode identifier");else{if(!((a=u(s))>=0))break;0===a?h(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):p?h(e,"repeat of an indentation width identifier"):(f=t+a-1,p=!0)}if(r(s)){do s=e.input.charCodeAt(++e.position);while(r(s));if(35===s)do s=e.input.charCodeAt(++e.position);while(!i(s)&&0!==s)}for(;0!==s;){for(v(e),e.lineIndent=0,s=e.input.charCodeAt(e.position);(!p||e.lineIndentf&&(f=e.lineIndent),i(s))d++;else{if(e.lineIndentt)&&0!==r)h(e,"bad indentation of a sequence entry");else if(e.lineIndentt)&&(_(e,t,Z,!0,a)&&(y?m=e.result:g=e.result),y||(x(e,p,f,d,m,g),d=m=g=null),A(e,!0,-1),c=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==c)h(e,"bad indentation of a mapping entry");else if(e.lineIndentt?d=1:e.lineIndent===t?d=0:e.lineIndentt?d=1:e.lineIndent===t?d=0:e.lineIndent tag; it should be "'+l.kind+'", not "'+e.kind+'"'),l.resolve(e.result)?(e.result=l.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):h(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):h(e,"unknown tag !<"+e.tag+">");return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||g}function T(e){var t,n,a,s,c=e.position,u=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(s=e.input.charCodeAt(e.position))&&(A(e,!0,-1),s=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==s));){for(u=!0,s=e.input.charCodeAt(++e.position),t=e.position;0!==s&&!o(s);)s=e.input.charCodeAt(++e.position);for(n=e.input.slice(t,e.position),a=[],n.length<1&&h(e,"directive name must not be less than one character in length");0!==s;){for(;r(s);)s=e.input.charCodeAt(++e.position);if(35===s){do s=e.input.charCodeAt(++e.position);while(0!==s&&!i(s));break}if(i(s))break;for(t=e.position;0!==s&&!o(s);)s=e.input.charCodeAt(++e.position);a.push(e.input.slice(t,e.position))}0!==s&&v(e),$.call(se,n)?se[n](e,n,a):m(e,'unknown document directive "'+n+'"')}return A(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,A(e,!0,-1)):u&&h(e,"directives end mark is expected"),_(e,e.lineIndent-1,Z,!1,!0),A(e,!0,-1),e.checkLineBreaks&&ee.test(e.input.slice(c,e.position))&&m(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&b(e)?void(46===e.input.charCodeAt(e.position)&&(e.position+=3,A(e,!0,-1))):void(e.position0&&"\0\r\n…\u2028\u2029".indexOf(this.buffer.charAt(i-1))===-1;)if(i-=1,this.position-i>t/2-1){n=" ... ",i+=5;break}for(o="",a=this.position;at/2-1){o=" ... ",a-=5;break}return s=this.buffer.slice(i,a),r.repeat(" ",e)+n+s+o+"\n"+r.repeat(" ",e+this.position-i+n.length)+"^"},i.prototype.toString=function(e){var t,n="";return this.name&&(n+='in "'+this.name+'" '),n+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(n+=":\n"+t)),n},t.exports=i},{"./common":2}],7:[function(e,t,n){"use strict";function i(e,t,n){var r=[];return e.include.forEach(function(e){n=i(e,t,n)}),e[t].forEach(function(e){n.forEach(function(t,n){t.tag===e.tag&&t.kind===e.kind&&r.push(n)}),n.push(e)}),n.filter(function(e,t){return r.indexOf(t)===-1})}function r(){function e(e){i[e.kind][e.tag]=i.fallback[e.tag]=e}var t,n,i={scalar:{},sequence:{},mapping:{},fallback:{}};for(t=0,n=arguments.length;t64)){if(t<0)return!1;i+=6}return i%8===0}function r(e){var t,n,i=e.replace(/[\r\n=]/g,""),r=i.length,o=l,a=0,c=[];for(t=0;t>16&255),c.push(a>>8&255),c.push(255&a)),a=a<<6|o.indexOf(i.charAt(t));return n=r%4*6,0===n?(c.push(a>>16&255),c.push(a>>8&255),c.push(255&a)):18===n?(c.push(a>>10&255),c.push(a>>2&255)):12===n&&c.push(a>>4&255),s?new s(c):c}function o(e){var t,n,i="",r=0,o=e.length,a=l;for(t=0;t>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]),r=(r<<8)+e[t];return n=o%3,0===n?(i+=a[r>>18&63],i+=a[r>>12&63],i+=a[r>>6&63],i+=a[63&r]):2===n?(i+=a[r>>10&63],i+=a[r>>4&63], -i+=a[r<<2&63],i+=a[64]):1===n&&(i+=a[r>>2&63],i+=a[r<<4&63],i+=a[64],i+=a[64]),i}function a(e){return s&&s.isBuffer(e)}var s;try{var c=e;s=c("buffer").Buffer}catch(e){}var u=e("../type"),l="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";t.exports=new u("tag:yaml.org,2002:binary",{kind:"scalar",resolve:i,construct:r,predicate:a,represent:o})},{"../type":13}],15:[function(e,t,n){"use strict";function i(e){if(null===e)return!1;var t=e.length;return 4===t&&("true"===e||"True"===e||"TRUE"===e)||5===t&&("false"===e||"False"===e||"FALSE"===e)}function r(e){return"true"===e||"True"===e||"TRUE"===e}function o(e){return"[object Boolean]"===Object.prototype.toString.call(e)}var a=e("../type");t.exports=new a("tag:yaml.org,2002:bool",{kind:"scalar",resolve:i,construct:r,predicate:o,represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"})},{"../type":13}],16:[function(e,t,n){"use strict";function i(e){return null!==e&&!!u.test(e)}function r(e){var t,n,i,r;return t=e.replace(/_/g,"").toLowerCase(),n="-"===t[0]?-1:1,r=[],"+-".indexOf(t[0])>=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:t.indexOf(":")>=0?(t.split(":").forEach(function(e){r.unshift(parseFloat(e,10))}),t=0,i=1,r.forEach(function(e){t+=e*i,i*=60}),n*t):n*parseFloat(t,10)}function o(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(s.isNegativeZero(e))return"-0.0";return n=e.toString(10),l.test(n)?n.replace("e",".e"):n}function a(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!==0||s.isNegativeZero(e))}var s=e("../common"),c=e("../type"),u=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?|\\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),l=/^[-+]?[0-9]+e/;t.exports=new c("tag:yaml.org,2002:float",{kind:"scalar",resolve:i,construct:r,predicate:a,represent:o,defaultStyle:"lowercase"})},{"../common":2,"../type":13}],17:[function(e,t,n){"use strict";function i(e){return 48<=e&&e<=57||65<=e&&e<=70||97<=e&&e<=102}function r(e){return 48<=e&&e<=55}function o(e){return 48<=e&&e<=57}function a(e){if(null===e)return!1;var t,n=e.length,a=0,s=!1;if(!n)return!1;if(t=e[a],"-"!==t&&"+"!==t||(t=e[++a]),"0"===t){if(a+1===n)return!0;if(t=e[++a],"b"===t){for(a++;a3)return!1;if("/"!==t[t.length-i.length-1])return!1}return!0}function r(e){var t=e,n=/\/([gim]*)$/.exec(e),i="";return"/"===t[0]&&(n&&(i=n[1]),t=t.slice(1,t.length-i.length-1)),new RegExp(t,i)}function o(e){var t="/"+e.source+"/";return e.global&&(t+="g"),e.multiline&&(t+="m"),e.ignoreCase&&(t+="i"),t}function a(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var s=e("../../type");t.exports=new s("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:i,construct:r,predicate:a,represent:o})},{"../../type":13}],20:[function(e,t,n){"use strict";function i(){return!0}function r(){}function o(){return""}function a(e){return"undefined"==typeof e}var s=e("../../type");t.exports=new s("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:i,construct:r,predicate:a,represent:o})},{"../../type":13}],21:[function(e,t,n){"use strict";var i=e("../type");t.exports=new i("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return null!==e?e:{}}})},{"../type":13}],22:[function(e,t,n){"use strict";function i(e){return"<<"===e||null===e}var r=e("../type");t.exports=new r("tag:yaml.org,2002:merge",{kind:"scalar",resolve:i})},{"../type":13}],23:[function(e,t,n){"use strict";function i(e){if(null===e)return!0;var t=e.length;return 1===t&&"~"===e||4===t&&("null"===e||"Null"===e||"NULL"===e)}function r(){return null}function o(e){return null===e}var a=e("../type");t.exports=new a("tag:yaml.org,2002:null",{kind:"scalar",resolve:i,construct:r,predicate:o,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})},{"../type":13}],24:[function(e,t,n){"use strict";function i(e){if(null===e)return!0;var t,n,i,r,o,c=[],u=e;for(t=0,n=u.length;t */ -var CHAR_QUESTION = 0x3F; /* ? */ -var CHAR_COMMERCIAL_AT = 0x40; /* @ */ -var CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */ -var CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */ -var CHAR_GRAVE_ACCENT = 0x60; /* ` */ -var CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */ -var CHAR_VERTICAL_LINE = 0x7C; /* | */ -var CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */ - -var ESCAPE_SEQUENCES = {}; - -ESCAPE_SEQUENCES[0x00] = '\\0'; -ESCAPE_SEQUENCES[0x07] = '\\a'; -ESCAPE_SEQUENCES[0x08] = '\\b'; -ESCAPE_SEQUENCES[0x09] = '\\t'; -ESCAPE_SEQUENCES[0x0A] = '\\n'; -ESCAPE_SEQUENCES[0x0B] = '\\v'; -ESCAPE_SEQUENCES[0x0C] = '\\f'; -ESCAPE_SEQUENCES[0x0D] = '\\r'; -ESCAPE_SEQUENCES[0x1B] = '\\e'; -ESCAPE_SEQUENCES[0x22] = '\\"'; -ESCAPE_SEQUENCES[0x5C] = '\\\\'; -ESCAPE_SEQUENCES[0x85] = '\\N'; -ESCAPE_SEQUENCES[0xA0] = '\\_'; -ESCAPE_SEQUENCES[0x2028] = '\\L'; -ESCAPE_SEQUENCES[0x2029] = '\\P'; - -var DEPRECATED_BOOLEANS_SYNTAX = [ - 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON', - 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF' -]; - -function compileStyleMap(schema, map) { - var result, keys, index, length, tag, style, type; - - if (map === null) return {}; - - result = {}; - keys = Object.keys(map); - - for (index = 0, length = keys.length; index < length; index += 1) { - tag = keys[index]; - style = String(map[tag]); - - if (tag.slice(0, 2) === '!!') { - tag = 'tag:yaml.org,2002:' + tag.slice(2); - } - type = schema.compiledTypeMap['fallback'][tag]; - - if (type && _hasOwnProperty.call(type.styleAliases, style)) { - style = type.styleAliases[style]; - } - - result[tag] = style; - } - - return result; -} - -function encodeHex(character) { - var string, handle, length; - - string = character.toString(16).toUpperCase(); - - if (character <= 0xFF) { - handle = 'x'; - length = 2; - } else if (character <= 0xFFFF) { - handle = 'u'; - length = 4; - } else if (character <= 0xFFFFFFFF) { - handle = 'U'; - length = 8; - } else { - throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF'); - } - - return '\\' + handle + common.repeat('0', length - string.length) + string; -} - -function State(options) { - this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; - this.indent = Math.max(1, (options['indent'] || 2)); - this.skipInvalid = options['skipInvalid'] || false; - this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']); - this.styleMap = compileStyleMap(this.schema, options['styles'] || null); - this.sortKeys = options['sortKeys'] || false; - this.lineWidth = options['lineWidth'] || 80; - this.noRefs = options['noRefs'] || false; - this.noCompatMode = options['noCompatMode'] || false; - - this.implicitTypes = this.schema.compiledImplicit; - this.explicitTypes = this.schema.compiledExplicit; - - this.tag = null; - this.result = ''; - - this.duplicates = []; - this.usedDuplicates = null; -} - -// Indents every line in a string. Empty lines (\n only) are not indented. -function indentString(string, spaces) { - var ind = common.repeat(' ', spaces), - position = 0, - next = -1, - result = '', - line, - length = string.length; - - while (position < length) { - next = string.indexOf('\n', position); - if (next === -1) { - line = string.slice(position); - position = length; - } else { - line = string.slice(position, next + 1); - position = next + 1; - } - - if (line.length && line !== '\n') result += ind; - - result += line; - } - - return result; -} - -function generateNextLine(state, level) { - return '\n' + common.repeat(' ', state.indent * level); -} - -function testImplicitResolving(state, str) { - var index, length, type; - - for (index = 0, length = state.implicitTypes.length; index < length; index += 1) { - type = state.implicitTypes[index]; - - if (type.resolve(str)) { - return true; - } - } - - return false; -} - -// [33] s-white ::= s-space | s-tab -function isWhitespace(c) { - return c === CHAR_SPACE || c === CHAR_TAB; -} - -// Returns true if the character can be printed without escaping. -// From YAML 1.2: "any allowed characters known to be non-printable -// should also be escaped. [However,] This isn’t mandatory" -// Derived from nb-char - \t - #x85 - #xA0 - #x2028 - #x2029. -function isPrintable(c) { - return (0x00020 <= c && c <= 0x00007E) - || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029) - || ((0x0E000 <= c && c <= 0x00FFFD) && c !== 0xFEFF /* BOM */) - || (0x10000 <= c && c <= 0x10FFFF); -} - -// Simplified test for values allowed after the first character in plain style. -function isPlainSafe(c) { - // Uses a subset of nb-char - c-flow-indicator - ":" - "#" - // where nb-char ::= c-printable - b-char - c-byte-order-mark. - return isPrintable(c) && c !== 0xFEFF - // - c-flow-indicator - && c !== CHAR_COMMA - && c !== CHAR_LEFT_SQUARE_BRACKET - && c !== CHAR_RIGHT_SQUARE_BRACKET - && c !== CHAR_LEFT_CURLY_BRACKET - && c !== CHAR_RIGHT_CURLY_BRACKET - // - ":" - "#" - && c !== CHAR_COLON - && c !== CHAR_SHARP; -} - -// Simplified test for values allowed as the first character in plain style. -function isPlainSafeFirst(c) { - // Uses a subset of ns-char - c-indicator - // where ns-char = nb-char - s-white. - return isPrintable(c) && c !== 0xFEFF - && !isWhitespace(c) // - s-white - // - (c-indicator ::= - // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}” - && c !== CHAR_MINUS - && c !== CHAR_QUESTION - && c !== CHAR_COLON - && c !== CHAR_COMMA - && c !== CHAR_LEFT_SQUARE_BRACKET - && c !== CHAR_RIGHT_SQUARE_BRACKET - && c !== CHAR_LEFT_CURLY_BRACKET - && c !== CHAR_RIGHT_CURLY_BRACKET - // | “#” | “&” | “*” | “!” | “|” | “>” | “'” | “"” - && c !== CHAR_SHARP - && c !== CHAR_AMPERSAND - && c !== CHAR_ASTERISK - && c !== CHAR_EXCLAMATION - && c !== CHAR_VERTICAL_LINE - && c !== CHAR_GREATER_THAN - && c !== CHAR_SINGLE_QUOTE - && c !== CHAR_DOUBLE_QUOTE - // | “%” | “@” | “`”) - && c !== CHAR_PERCENT - && c !== CHAR_COMMERCIAL_AT - && c !== CHAR_GRAVE_ACCENT; -} - -var STYLE_PLAIN = 1, - STYLE_SINGLE = 2, - STYLE_LITERAL = 3, - STYLE_FOLDED = 4, - STYLE_DOUBLE = 5; - -// Determines which scalar styles are possible and returns the preferred style. -// lineWidth = -1 => no limit. -// Pre-conditions: str.length > 0. -// Post-conditions: -// STYLE_PLAIN or STYLE_SINGLE => no \n are in the string. -// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1). -// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1). -function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType) { - var i; - var char; - var hasLineBreak = false; - var hasFoldableLine = false; // only checked if shouldTrackWidth - var shouldTrackWidth = lineWidth !== -1; - var previousLineBreak = -1; // count the first line correctly - var plain = isPlainSafeFirst(string.charCodeAt(0)) - && !isWhitespace(string.charCodeAt(string.length - 1)); - - if (singleLineOnly) { - // Case: no block styles. - // Check for disallowed characters to rule out plain and single. - for (i = 0; i < string.length; i++) { - char = string.charCodeAt(i); - if (!isPrintable(char)) { - return STYLE_DOUBLE; - } - plain = plain && isPlainSafe(char); - } - } else { - // Case: block styles permitted. - for (i = 0; i < string.length; i++) { - char = string.charCodeAt(i); - if (char === CHAR_LINE_FEED) { - hasLineBreak = true; - // Check if any line can be folded. - if (shouldTrackWidth) { - hasFoldableLine = hasFoldableLine || - // Foldable line = too long, and not more-indented. - (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' '); - previousLineBreak = i; - } - } else if (!isPrintable(char)) { - return STYLE_DOUBLE; - } - plain = plain && isPlainSafe(char); - } - // in case the end is missing a \n - hasFoldableLine = hasFoldableLine || (shouldTrackWidth && - (i - previousLineBreak - 1 > lineWidth && - string[previousLineBreak + 1] !== ' ')); - } - // Although every style can represent \n without escaping, prefer block styles - // for multiline, since they're more readable and they don't add empty lines. - // Also prefer folding a super-long line. - if (!hasLineBreak && !hasFoldableLine) { - // Strings interpretable as another type have to be quoted; - // e.g. the string 'true' vs. the boolean true. - return plain && !testAmbiguousType(string) - ? STYLE_PLAIN : STYLE_SINGLE; - } - // Edge case: block indentation indicator can only have one digit. - if (string[0] === ' ' && indentPerLevel > 9) { - return STYLE_DOUBLE; - } - // At this point we know block styles are valid. - // Prefer literal style unless we want to fold. - return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL; -} - -// Note: line breaking/folding is implemented for only the folded style. -// NB. We drop the last trailing newline (if any) of a returned block scalar -// since the dumper adds its own newline. This always works: -// • No ending newline => unaffected; already using strip "-" chomping. -// • Ending newline => removed then restored. -// Importantly, this keeps the "+" chomp indicator from gaining an extra line. -function writeScalar(state, string, level, iskey) { - state.dump = (function () { - if (string.length === 0) { - return "''"; - } - if (!state.noCompatMode && - DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1) { - return "'" + string + "'"; - } - - var indent = state.indent * Math.max(1, level); // no 0-indent scalars - // As indentation gets deeper, let the width decrease monotonically - // to the lower bound min(state.lineWidth, 40). - // Note that this implies - // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound. - // state.lineWidth > 40 + state.indent: width decreases until the lower bound. - // This behaves better than a constant minimum width which disallows narrower options, - // or an indent threshold which causes the width to suddenly increase. - var lineWidth = state.lineWidth === -1 - ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent); - - // Without knowing if keys are implicit/explicit, assume implicit for safety. - var singleLineOnly = iskey - // No block styles in flow mode. - || (state.flowLevel > -1 && level >= state.flowLevel); - function testAmbiguity(string) { - return testImplicitResolving(state, string); - } - - switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth, testAmbiguity)) { - case STYLE_PLAIN: - return string; - case STYLE_SINGLE: - return "'" + string.replace(/'/g, "''") + "'"; - case STYLE_LITERAL: - return '|' + blockHeader(string, state.indent) - + dropEndingNewline(indentString(string, indent)); - case STYLE_FOLDED: - return '>' + blockHeader(string, state.indent) - + dropEndingNewline(indentString(foldString(string, lineWidth), indent)); - case STYLE_DOUBLE: - return '"' + escapeString(string, lineWidth) + '"'; - default: - throw new YAMLException('impossible error: invalid scalar style'); - } - }()); -} - -// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9. -function blockHeader(string, indentPerLevel) { - var indentIndicator = (string[0] === ' ') ? String(indentPerLevel) : ''; - - // note the special case: the string '\n' counts as a "trailing" empty line. - var clip = string[string.length - 1] === '\n'; - var keep = clip && (string[string.length - 2] === '\n' || string === '\n'); - var chomp = keep ? '+' : (clip ? '' : '-'); - - return indentIndicator + chomp + '\n'; -} - -// (See the note for writeScalar.) -function dropEndingNewline(string) { - return string[string.length - 1] === '\n' ? string.slice(0, -1) : string; -} - -// Note: a long line without a suitable break point will exceed the width limit. -// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0. -function foldString(string, width) { - // In folded style, $k$ consecutive newlines output as $k+1$ newlines— - // unless they're before or after a more-indented line, or at the very - // beginning or end, in which case $k$ maps to $k$. - // Therefore, parse each chunk as newline(s) followed by a content line. - var lineRe = /(\n+)([^\n]*)/g; - - // first line (possibly an empty line) - var result = (function () { - var nextLF = string.indexOf('\n'); - nextLF = nextLF !== -1 ? nextLF : string.length; - lineRe.lastIndex = nextLF; - return foldLine(string.slice(0, nextLF), width); - }()); - // If we haven't reached the first content line yet, don't add an extra \n. - var prevMoreIndented = string[0] === '\n' || string[0] === ' '; - var moreIndented; - - // rest of the lines - var match; - while ((match = lineRe.exec(string))) { - var prefix = match[1], line = match[2]; - moreIndented = (line[0] === ' '); - result += prefix - + (!prevMoreIndented && !moreIndented && line !== '' - ? '\n' : '') - + foldLine(line, width); - prevMoreIndented = moreIndented; - } - - return result; -} - -// Greedy line breaking. -// Picks the longest line under the limit each time, -// otherwise settles for the shortest line over the limit. -// NB. More-indented lines *cannot* be folded, as that would add an extra \n. -function foldLine(line, width) { - if (line === '' || line[0] === ' ') return line; - - // Since a more-indented line adds a \n, breaks can't be followed by a space. - var breakRe = / [^ ]/g; // note: the match index will always be <= length-2. - var match; - // start is an inclusive index. end, curr, and next are exclusive. - var start = 0, end, curr = 0, next = 0; - var result = ''; - - // Invariants: 0 <= start <= length-1. - // 0 <= curr <= next <= max(0, length-2). curr - start <= width. - // Inside the loop: - // A match implies length >= 2, so curr and next are <= length-2. - while ((match = breakRe.exec(line))) { - next = match.index; - // maintain invariant: curr - start <= width - if (next - start > width) { - end = (curr > start) ? curr : next; // derive end <= length-2 - result += '\n' + line.slice(start, end); - // skip the space that was output as \n - start = end + 1; // derive start <= length-1 - } - curr = next; - } - - // By the invariants, start <= length-1, so there is something left over. - // It is either the whole string or a part starting from non-whitespace. - result += '\n'; - // Insert a break if the remainder is too long and there is a break available. - if (line.length - start > width && curr > start) { - result += line.slice(start, curr) + '\n' + line.slice(curr + 1); - } else { - result += line.slice(start); - } - - return result.slice(1); // drop extra \n joiner -} - -// Escapes a double-quoted string. -function escapeString(string) { - var result = ''; - var char; - var escapeSeq; - - for (var i = 0; i < string.length; i++) { - char = string.charCodeAt(i); - escapeSeq = ESCAPE_SEQUENCES[char]; - result += !escapeSeq && isPrintable(char) - ? string[i] - : escapeSeq || encodeHex(char); - } - - return result; -} - -function writeFlowSequence(state, level, object) { - var _result = '', - _tag = state.tag, - index, - length; - - for (index = 0, length = object.length; index < length; index += 1) { - // Write only valid elements. - if (writeNode(state, level, object[index], false, false)) { - if (index !== 0) _result += ', '; - _result += state.dump; - } - } - - state.tag = _tag; - state.dump = '[' + _result + ']'; -} - -function writeBlockSequence(state, level, object, compact) { - var _result = '', - _tag = state.tag, - index, - length; - - for (index = 0, length = object.length; index < length; index += 1) { - // Write only valid elements. - if (writeNode(state, level + 1, object[index], true, true)) { - if (!compact || index !== 0) { - _result += generateNextLine(state, level); - } - _result += '- ' + state.dump; - } - } - - state.tag = _tag; - state.dump = _result || '[]'; // Empty sequence if no valid values. -} - -function writeFlowMapping(state, level, object) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - pairBuffer; - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - pairBuffer = ''; - - if (index !== 0) pairBuffer += ', '; - - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; - - if (!writeNode(state, level, objectKey, false, false)) { - continue; // Skip this pair because of invalid key; - } - - if (state.dump.length > 1024) pairBuffer += '? '; - - pairBuffer += state.dump + ': '; - - if (!writeNode(state, level, objectValue, false, false)) { - continue; // Skip this pair because of invalid value. - } - - pairBuffer += state.dump; - - // Both key and value are valid. - _result += pairBuffer; - } - - state.tag = _tag; - state.dump = '{' + _result + '}'; -} - -function writeBlockMapping(state, level, object, compact) { - var _result = '', - _tag = state.tag, - objectKeyList = Object.keys(object), - index, - length, - objectKey, - objectValue, - explicitPair, - pairBuffer; - - // Allow sorting keys so that the output file is deterministic - if (state.sortKeys === true) { - // Default sorting - objectKeyList.sort(); - } else if (typeof state.sortKeys === 'function') { - // Custom sort function - objectKeyList.sort(state.sortKeys); - } else if (state.sortKeys) { - // Something is wrong - throw new YAMLException('sortKeys must be a boolean or a function'); - } - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - pairBuffer = ''; - - if (!compact || index !== 0) { - pairBuffer += generateNextLine(state, level); - } - - objectKey = objectKeyList[index]; - objectValue = object[objectKey]; - - if (!writeNode(state, level + 1, objectKey, true, true, true)) { - continue; // Skip this pair because of invalid key. - } - - explicitPair = (state.tag !== null && state.tag !== '?') || - (state.dump && state.dump.length > 1024); - - if (explicitPair) { - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - pairBuffer += '?'; - } else { - pairBuffer += '? '; - } - } - - pairBuffer += state.dump; - - if (explicitPair) { - pairBuffer += generateNextLine(state, level); - } - - if (!writeNode(state, level + 1, objectValue, true, explicitPair)) { - continue; // Skip this pair because of invalid value. - } - - if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) { - pairBuffer += ':'; - } else { - pairBuffer += ': '; - } - - pairBuffer += state.dump; - - // Both key and value are valid. - _result += pairBuffer; - } - - state.tag = _tag; - state.dump = _result || '{}'; // Empty mapping if no valid pairs. -} - -function detectType(state, object, explicit) { - var _result, typeList, index, length, type, style; - - typeList = explicit ? state.explicitTypes : state.implicitTypes; - - for (index = 0, length = typeList.length; index < length; index += 1) { - type = typeList[index]; - - if ((type.instanceOf || type.predicate) && - (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) && - (!type.predicate || type.predicate(object))) { - - state.tag = explicit ? type.tag : '?'; - - if (type.represent) { - style = state.styleMap[type.tag] || type.defaultStyle; - - if (_toString.call(type.represent) === '[object Function]') { - _result = type.represent(object, style); - } else if (_hasOwnProperty.call(type.represent, style)) { - _result = type.represent[style](object, style); - } else { - throw new YAMLException('!<' + type.tag + '> tag resolver accepts not "' + style + '" style'); - } - - state.dump = _result; - } - - return true; - } - } - - return false; -} - -// Serializes `object` and writes it to global `result`. -// Returns true on success, or false on invalid object. -// -function writeNode(state, level, object, block, compact, iskey) { - state.tag = null; - state.dump = object; - - if (!detectType(state, object, false)) { - detectType(state, object, true); - } - - var type = _toString.call(state.dump); - - if (block) { - block = (state.flowLevel < 0 || state.flowLevel > level); - } - - var objectOrArray = type === '[object Object]' || type === '[object Array]', - duplicateIndex, - duplicate; - - if (objectOrArray) { - duplicateIndex = state.duplicates.indexOf(object); - duplicate = duplicateIndex !== -1; - } - - if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) { - compact = false; - } - - if (duplicate && state.usedDuplicates[duplicateIndex]) { - state.dump = '*ref_' + duplicateIndex; - } else { - if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) { - state.usedDuplicates[duplicateIndex] = true; - } - if (type === '[object Object]') { - if (block && (Object.keys(state.dump).length !== 0)) { - writeBlockMapping(state, level, state.dump, compact); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; - } - } else { - writeFlowMapping(state, level, state.dump); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; - } - } - } else if (type === '[object Array]') { - if (block && (state.dump.length !== 0)) { - writeBlockSequence(state, level, state.dump, compact); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + state.dump; - } - } else { - writeFlowSequence(state, level, state.dump); - if (duplicate) { - state.dump = '&ref_' + duplicateIndex + ' ' + state.dump; - } - } - } else if (type === '[object String]') { - if (state.tag !== '?') { - writeScalar(state, state.dump, level, iskey); - } - } else { - if (state.skipInvalid) return false; - throw new YAMLException('unacceptable kind of an object to dump ' + type); - } - - if (state.tag !== null && state.tag !== '?') { - state.dump = '!<' + state.tag + '> ' + state.dump; - } - } - - return true; -} - -function getDuplicateReferences(object, state) { - var objects = [], - duplicatesIndexes = [], - index, - length; - - inspectNode(object, objects, duplicatesIndexes); - - for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) { - state.duplicates.push(objects[duplicatesIndexes[index]]); - } - state.usedDuplicates = new Array(length); -} - -function inspectNode(object, objects, duplicatesIndexes) { - var objectKeyList, - index, - length; - - if (object !== null && typeof object === 'object') { - index = objects.indexOf(object); - if (index !== -1) { - if (duplicatesIndexes.indexOf(index) === -1) { - duplicatesIndexes.push(index); - } - } else { - objects.push(object); - - if (Array.isArray(object)) { - for (index = 0, length = object.length; index < length; index += 1) { - inspectNode(object[index], objects, duplicatesIndexes); - } - } else { - objectKeyList = Object.keys(object); - - for (index = 0, length = objectKeyList.length; index < length; index += 1) { - inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes); - } - } - } - } -} - -function dump(input, options) { - options = options || {}; - - var state = new State(options); - - if (!state.noRefs) getDuplicateReferences(input, state); - - if (writeNode(state, 0, input, true, true)) return state.dump + '\n'; - - return ''; -} - -function safeDump(input, options) { - return dump(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); -} - -module.exports.dump = dump; -module.exports.safeDump = safeDump; diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/exception.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/exception.js deleted file mode 100644 index cf4e62520..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/exception.js +++ /dev/null @@ -1,43 +0,0 @@ -// YAML error class. http://stackoverflow.com/questions/8458984 -// -'use strict'; - -function YAMLException(reason, mark) { - // Super constructor - Error.call(this); - - // Include stack trace in error object - if (Error.captureStackTrace) { - // Chrome and NodeJS - Error.captureStackTrace(this, this.constructor); - } else { - // FF, IE 10+ and Safari 6+. Fallback for others - this.stack = (new Error()).stack || ''; - } - - this.name = 'YAMLException'; - this.reason = reason; - this.mark = mark; - this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : ''); -} - - -// Inherit from Error -YAMLException.prototype = Object.create(Error.prototype); -YAMLException.prototype.constructor = YAMLException; - - -YAMLException.prototype.toString = function toString(compact) { - var result = this.name + ': '; - - result += this.reason || '(unknown reason)'; - - if (!compact && this.mark) { - result += ' ' + this.mark.toString(); - } - - return result; -}; - - -module.exports = YAMLException; diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/loader.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/loader.js deleted file mode 100644 index 70e1a565d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/loader.js +++ /dev/null @@ -1,1587 +0,0 @@ -'use strict'; - -/*eslint-disable max-len,no-use-before-define*/ - -var common = require('./common'); -var YAMLException = require('./exception'); -var Mark = require('./mark'); -var DEFAULT_SAFE_SCHEMA = require('./schema/default_safe'); -var DEFAULT_FULL_SCHEMA = require('./schema/default_full'); - - -var _hasOwnProperty = Object.prototype.hasOwnProperty; - - -var CONTEXT_FLOW_IN = 1; -var CONTEXT_FLOW_OUT = 2; -var CONTEXT_BLOCK_IN = 3; -var CONTEXT_BLOCK_OUT = 4; - - -var CHOMPING_CLIP = 1; -var CHOMPING_STRIP = 2; -var CHOMPING_KEEP = 3; - - -var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/; -var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/; -var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/; -var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i; -var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i; - - -function is_EOL(c) { - return (c === 0x0A/* LF */) || (c === 0x0D/* CR */); -} - -function is_WHITE_SPACE(c) { - return (c === 0x09/* Tab */) || (c === 0x20/* Space */); -} - -function is_WS_OR_EOL(c) { - return (c === 0x09/* Tab */) || - (c === 0x20/* Space */) || - (c === 0x0A/* LF */) || - (c === 0x0D/* CR */); -} - -function is_FLOW_INDICATOR(c) { - return c === 0x2C/* , */ || - c === 0x5B/* [ */ || - c === 0x5D/* ] */ || - c === 0x7B/* { */ || - c === 0x7D/* } */; -} - -function fromHexCode(c) { - var lc; - - if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { - return c - 0x30; - } - - /*eslint-disable no-bitwise*/ - lc = c | 0x20; - - if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) { - return lc - 0x61 + 10; - } - - return -1; -} - -function escapedHexLen(c) { - if (c === 0x78/* x */) { return 2; } - if (c === 0x75/* u */) { return 4; } - if (c === 0x55/* U */) { return 8; } - return 0; -} - -function fromDecimalCode(c) { - if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) { - return c - 0x30; - } - - return -1; -} - -function simpleEscapeSequence(c) { - return (c === 0x30/* 0 */) ? '\x00' : - (c === 0x61/* a */) ? '\x07' : - (c === 0x62/* b */) ? '\x08' : - (c === 0x74/* t */) ? '\x09' : - (c === 0x09/* Tab */) ? '\x09' : - (c === 0x6E/* n */) ? '\x0A' : - (c === 0x76/* v */) ? '\x0B' : - (c === 0x66/* f */) ? '\x0C' : - (c === 0x72/* r */) ? '\x0D' : - (c === 0x65/* e */) ? '\x1B' : - (c === 0x20/* Space */) ? ' ' : - (c === 0x22/* " */) ? '\x22' : - (c === 0x2F/* / */) ? '/' : - (c === 0x5C/* \ */) ? '\x5C' : - (c === 0x4E/* N */) ? '\x85' : - (c === 0x5F/* _ */) ? '\xA0' : - (c === 0x4C/* L */) ? '\u2028' : - (c === 0x50/* P */) ? '\u2029' : ''; -} - -function charFromCodepoint(c) { - if (c <= 0xFFFF) { - return String.fromCharCode(c); - } - // Encode UTF-16 surrogate pair - // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF - return String.fromCharCode(((c - 0x010000) >> 10) + 0xD800, - ((c - 0x010000) & 0x03FF) + 0xDC00); -} - -var simpleEscapeCheck = new Array(256); // integer, for fast access -var simpleEscapeMap = new Array(256); -for (var i = 0; i < 256; i++) { - simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0; - simpleEscapeMap[i] = simpleEscapeSequence(i); -} - - -function State(input, options) { - this.input = input; - - this.filename = options['filename'] || null; - this.schema = options['schema'] || DEFAULT_FULL_SCHEMA; - this.onWarning = options['onWarning'] || null; - this.legacy = options['legacy'] || false; - this.json = options['json'] || false; - this.listener = options['listener'] || null; - - this.implicitTypes = this.schema.compiledImplicit; - this.typeMap = this.schema.compiledTypeMap; - - this.length = input.length; - this.position = 0; - this.line = 0; - this.lineStart = 0; - this.lineIndent = 0; - - this.documents = []; - - /* - this.version; - this.checkLineBreaks; - this.tagMap; - this.anchorMap; - this.tag; - this.anchor; - this.kind; - this.result;*/ - -} - - -function generateError(state, message) { - return new YAMLException( - message, - new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart))); -} - -function throwError(state, message) { - throw generateError(state, message); -} - -function throwWarning(state, message) { - if (state.onWarning) { - state.onWarning.call(null, generateError(state, message)); - } -} - - -var directiveHandlers = { - - YAML: function handleYamlDirective(state, name, args) { - - var match, major, minor; - - if (state.version !== null) { - throwError(state, 'duplication of %YAML directive'); - } - - if (args.length !== 1) { - throwError(state, 'YAML directive accepts exactly one argument'); - } - - match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]); - - if (match === null) { - throwError(state, 'ill-formed argument of the YAML directive'); - } - - major = parseInt(match[1], 10); - minor = parseInt(match[2], 10); - - if (major !== 1) { - throwError(state, 'unacceptable YAML version of the document'); - } - - state.version = args[0]; - state.checkLineBreaks = (minor < 2); - - if (minor !== 1 && minor !== 2) { - throwWarning(state, 'unsupported YAML version of the document'); - } - }, - - TAG: function handleTagDirective(state, name, args) { - - var handle, prefix; - - if (args.length !== 2) { - throwError(state, 'TAG directive accepts exactly two arguments'); - } - - handle = args[0]; - prefix = args[1]; - - if (!PATTERN_TAG_HANDLE.test(handle)) { - throwError(state, 'ill-formed tag handle (first argument) of the TAG directive'); - } - - if (_hasOwnProperty.call(state.tagMap, handle)) { - throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle'); - } - - if (!PATTERN_TAG_URI.test(prefix)) { - throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive'); - } - - state.tagMap[handle] = prefix; - } -}; - - -function captureSegment(state, start, end, checkJson) { - var _position, _length, _character, _result; - - if (start < end) { - _result = state.input.slice(start, end); - - if (checkJson) { - for (_position = 0, _length = _result.length; - _position < _length; - _position += 1) { - _character = _result.charCodeAt(_position); - if (!(_character === 0x09 || - (0x20 <= _character && _character <= 0x10FFFF))) { - throwError(state, 'expected valid JSON character'); - } - } - } else if (PATTERN_NON_PRINTABLE.test(_result)) { - throwError(state, 'the stream contains non-printable characters'); - } - - state.result += _result; - } -} - -function mergeMappings(state, destination, source, overridableKeys) { - var sourceKeys, key, index, quantity; - - if (!common.isObject(source)) { - throwError(state, 'cannot merge mappings; the provided source object is unacceptable'); - } - - sourceKeys = Object.keys(source); - - for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) { - key = sourceKeys[index]; - - if (!_hasOwnProperty.call(destination, key)) { - destination[key] = source[key]; - overridableKeys[key] = true; - } - } -} - -function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode) { - var index, quantity; - - keyNode = String(keyNode); - - if (_result === null) { - _result = {}; - } - - if (keyTag === 'tag:yaml.org,2002:merge') { - if (Array.isArray(valueNode)) { - for (index = 0, quantity = valueNode.length; index < quantity; index += 1) { - mergeMappings(state, _result, valueNode[index], overridableKeys); - } - } else { - mergeMappings(state, _result, valueNode, overridableKeys); - } - } else { - if (!state.json && - !_hasOwnProperty.call(overridableKeys, keyNode) && - _hasOwnProperty.call(_result, keyNode)) { - throwError(state, 'duplicated mapping key'); - } - _result[keyNode] = valueNode; - delete overridableKeys[keyNode]; - } - - return _result; -} - -function readLineBreak(state) { - var ch; - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x0A/* LF */) { - state.position++; - } else if (ch === 0x0D/* CR */) { - state.position++; - if (state.input.charCodeAt(state.position) === 0x0A/* LF */) { - state.position++; - } - } else { - throwError(state, 'a line break is expected'); - } - - state.line += 1; - state.lineStart = state.position; -} - -function skipSeparationSpace(state, allowComments, checkIndent) { - var lineBreaks = 0, - ch = state.input.charCodeAt(state.position); - - while (ch !== 0) { - while (is_WHITE_SPACE(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (allowComments && ch === 0x23/* # */) { - do { - ch = state.input.charCodeAt(++state.position); - } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0); - } - - if (is_EOL(ch)) { - readLineBreak(state); - - ch = state.input.charCodeAt(state.position); - lineBreaks++; - state.lineIndent = 0; - - while (ch === 0x20/* Space */) { - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); - } - } else { - break; - } - } - - if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) { - throwWarning(state, 'deficient indentation'); - } - - return lineBreaks; -} - -function testDocumentSeparator(state) { - var _position = state.position, - ch; - - ch = state.input.charCodeAt(_position); - - // Condition state.position === state.lineStart is tested - // in parent on each call, for efficiency. No needs to test here again. - if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) && - ch === state.input.charCodeAt(_position + 1) && - ch === state.input.charCodeAt(_position + 2)) { - - _position += 3; - - ch = state.input.charCodeAt(_position); - - if (ch === 0 || is_WS_OR_EOL(ch)) { - return true; - } - } - - return false; -} - -function writeFoldedLines(state, count) { - if (count === 1) { - state.result += ' '; - } else if (count > 1) { - state.result += common.repeat('\n', count - 1); - } -} - - -function readPlainScalar(state, nodeIndent, withinFlowCollection) { - var preceding, - following, - captureStart, - captureEnd, - hasPendingContent, - _line, - _lineStart, - _lineIndent, - _kind = state.kind, - _result = state.result, - ch; - - ch = state.input.charCodeAt(state.position); - - if (is_WS_OR_EOL(ch) || - is_FLOW_INDICATOR(ch) || - ch === 0x23/* # */ || - ch === 0x26/* & */ || - ch === 0x2A/* * */ || - ch === 0x21/* ! */ || - ch === 0x7C/* | */ || - ch === 0x3E/* > */ || - ch === 0x27/* ' */ || - ch === 0x22/* " */ || - ch === 0x25/* % */ || - ch === 0x40/* @ */ || - ch === 0x60/* ` */) { - return false; - } - - if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) { - following = state.input.charCodeAt(state.position + 1); - - if (is_WS_OR_EOL(following) || - withinFlowCollection && is_FLOW_INDICATOR(following)) { - return false; - } - } - - state.kind = 'scalar'; - state.result = ''; - captureStart = captureEnd = state.position; - hasPendingContent = false; - - while (ch !== 0) { - if (ch === 0x3A/* : */) { - following = state.input.charCodeAt(state.position + 1); - - if (is_WS_OR_EOL(following) || - withinFlowCollection && is_FLOW_INDICATOR(following)) { - break; - } - - } else if (ch === 0x23/* # */) { - preceding = state.input.charCodeAt(state.position - 1); - - if (is_WS_OR_EOL(preceding)) { - break; - } - - } else if ((state.position === state.lineStart && testDocumentSeparator(state)) || - withinFlowCollection && is_FLOW_INDICATOR(ch)) { - break; - - } else if (is_EOL(ch)) { - _line = state.line; - _lineStart = state.lineStart; - _lineIndent = state.lineIndent; - skipSeparationSpace(state, false, -1); - - if (state.lineIndent >= nodeIndent) { - hasPendingContent = true; - ch = state.input.charCodeAt(state.position); - continue; - } else { - state.position = captureEnd; - state.line = _line; - state.lineStart = _lineStart; - state.lineIndent = _lineIndent; - break; - } - } - - if (hasPendingContent) { - captureSegment(state, captureStart, captureEnd, false); - writeFoldedLines(state, state.line - _line); - captureStart = captureEnd = state.position; - hasPendingContent = false; - } - - if (!is_WHITE_SPACE(ch)) { - captureEnd = state.position + 1; - } - - ch = state.input.charCodeAt(++state.position); - } - - captureSegment(state, captureStart, captureEnd, false); - - if (state.result) { - return true; - } - - state.kind = _kind; - state.result = _result; - return false; -} - -function readSingleQuotedScalar(state, nodeIndent) { - var ch, - captureStart, captureEnd; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x27/* ' */) { - return false; - } - - state.kind = 'scalar'; - state.result = ''; - state.position++; - captureStart = captureEnd = state.position; - - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - if (ch === 0x27/* ' */) { - captureSegment(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); - - if (ch === 0x27/* ' */) { - captureStart = state.position; - state.position++; - captureEnd = state.position; - } else { - return true; - } - - } else if (is_EOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); - captureStart = captureEnd = state.position; - - } else if (state.position === state.lineStart && testDocumentSeparator(state)) { - throwError(state, 'unexpected end of the document within a single quoted scalar'); - - } else { - state.position++; - captureEnd = state.position; - } - } - - throwError(state, 'unexpected end of the stream within a single quoted scalar'); -} - -function readDoubleQuotedScalar(state, nodeIndent) { - var captureStart, - captureEnd, - hexLength, - hexResult, - tmp, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x22/* " */) { - return false; - } - - state.kind = 'scalar'; - state.result = ''; - state.position++; - captureStart = captureEnd = state.position; - - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - if (ch === 0x22/* " */) { - captureSegment(state, captureStart, state.position, true); - state.position++; - return true; - - } else if (ch === 0x5C/* \ */) { - captureSegment(state, captureStart, state.position, true); - ch = state.input.charCodeAt(++state.position); - - if (is_EOL(ch)) { - skipSeparationSpace(state, false, nodeIndent); - - // TODO: rework to inline fn with no type cast? - } else if (ch < 256 && simpleEscapeCheck[ch]) { - state.result += simpleEscapeMap[ch]; - state.position++; - - } else if ((tmp = escapedHexLen(ch)) > 0) { - hexLength = tmp; - hexResult = 0; - - for (; hexLength > 0; hexLength--) { - ch = state.input.charCodeAt(++state.position); - - if ((tmp = fromHexCode(ch)) >= 0) { - hexResult = (hexResult << 4) + tmp; - - } else { - throwError(state, 'expected hexadecimal character'); - } - } - - state.result += charFromCodepoint(hexResult); - - state.position++; - - } else { - throwError(state, 'unknown escape sequence'); - } - - captureStart = captureEnd = state.position; - - } else if (is_EOL(ch)) { - captureSegment(state, captureStart, captureEnd, true); - writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent)); - captureStart = captureEnd = state.position; - - } else if (state.position === state.lineStart && testDocumentSeparator(state)) { - throwError(state, 'unexpected end of the document within a double quoted scalar'); - - } else { - state.position++; - captureEnd = state.position; - } - } - - throwError(state, 'unexpected end of the stream within a double quoted scalar'); -} - -function readFlowCollection(state, nodeIndent) { - var readNext = true, - _line, - _tag = state.tag, - _result, - _anchor = state.anchor, - following, - terminator, - isPair, - isExplicitPair, - isMapping, - overridableKeys = {}, - keyNode, - keyTag, - valueNode, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x5B/* [ */) { - terminator = 0x5D;/* ] */ - isMapping = false; - _result = []; - } else if (ch === 0x7B/* { */) { - terminator = 0x7D;/* } */ - isMapping = true; - _result = {}; - } else { - return false; - } - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } - - ch = state.input.charCodeAt(++state.position); - - while (ch !== 0) { - skipSeparationSpace(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if (ch === terminator) { - state.position++; - state.tag = _tag; - state.anchor = _anchor; - state.kind = isMapping ? 'mapping' : 'sequence'; - state.result = _result; - return true; - } else if (!readNext) { - throwError(state, 'missed comma between flow collection entries'); - } - - keyTag = keyNode = valueNode = null; - isPair = isExplicitPair = false; - - if (ch === 0x3F/* ? */) { - following = state.input.charCodeAt(state.position + 1); - - if (is_WS_OR_EOL(following)) { - isPair = isExplicitPair = true; - state.position++; - skipSeparationSpace(state, true, nodeIndent); - } - } - - _line = state.line; - composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); - keyTag = state.tag; - keyNode = state.result; - skipSeparationSpace(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) { - isPair = true; - ch = state.input.charCodeAt(++state.position); - skipSeparationSpace(state, true, nodeIndent); - composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true); - valueNode = state.result; - } - - if (isMapping) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode); - } else if (isPair) { - _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode)); - } else { - _result.push(keyNode); - } - - skipSeparationSpace(state, true, nodeIndent); - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x2C/* , */) { - readNext = true; - ch = state.input.charCodeAt(++state.position); - } else { - readNext = false; - } - } - - throwError(state, 'unexpected end of the stream within a flow collection'); -} - -function readBlockScalar(state, nodeIndent) { - var captureStart, - folding, - chomping = CHOMPING_CLIP, - didReadContent = false, - detectedIndent = false, - textIndent = nodeIndent, - emptyLines = 0, - atMoreIndented = false, - tmp, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch === 0x7C/* | */) { - folding = false; - } else if (ch === 0x3E/* > */) { - folding = true; - } else { - return false; - } - - state.kind = 'scalar'; - state.result = ''; - - while (ch !== 0) { - ch = state.input.charCodeAt(++state.position); - - if (ch === 0x2B/* + */ || ch === 0x2D/* - */) { - if (CHOMPING_CLIP === chomping) { - chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP; - } else { - throwError(state, 'repeat of a chomping mode identifier'); - } - - } else if ((tmp = fromDecimalCode(ch)) >= 0) { - if (tmp === 0) { - throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one'); - } else if (!detectedIndent) { - textIndent = nodeIndent + tmp - 1; - detectedIndent = true; - } else { - throwError(state, 'repeat of an indentation width identifier'); - } - - } else { - break; - } - } - - if (is_WHITE_SPACE(ch)) { - do { ch = state.input.charCodeAt(++state.position); } - while (is_WHITE_SPACE(ch)); - - if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (!is_EOL(ch) && (ch !== 0)); - } - } - - while (ch !== 0) { - readLineBreak(state); - state.lineIndent = 0; - - ch = state.input.charCodeAt(state.position); - - while ((!detectedIndent || state.lineIndent < textIndent) && - (ch === 0x20/* Space */)) { - state.lineIndent++; - ch = state.input.charCodeAt(++state.position); - } - - if (!detectedIndent && state.lineIndent > textIndent) { - textIndent = state.lineIndent; - } - - if (is_EOL(ch)) { - emptyLines++; - continue; - } - - // End of the scalar. - if (state.lineIndent < textIndent) { - - // Perform the chomping. - if (chomping === CHOMPING_KEEP) { - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - } else if (chomping === CHOMPING_CLIP) { - if (didReadContent) { // i.e. only if the scalar is not empty. - state.result += '\n'; - } - } - - // Break this `while` cycle and go to the funciton's epilogue. - break; - } - - // Folded style: use fancy rules to handle line breaks. - if (folding) { - - // Lines starting with white space characters (more-indented lines) are not folded. - if (is_WHITE_SPACE(ch)) { - atMoreIndented = true; - // except for the first content line (cf. Example 8.1) - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - - // End of more-indented block. - } else if (atMoreIndented) { - atMoreIndented = false; - state.result += common.repeat('\n', emptyLines + 1); - - // Just one line break - perceive as the same line. - } else if (emptyLines === 0) { - if (didReadContent) { // i.e. only if we have already read some scalar content. - state.result += ' '; - } - - // Several line breaks - perceive as different lines. - } else { - state.result += common.repeat('\n', emptyLines); - } - - // Literal style: just add exact number of line breaks between content lines. - } else { - // Keep all line breaks except the header line break. - state.result += common.repeat('\n', didReadContent ? 1 + emptyLines : emptyLines); - } - - didReadContent = true; - detectedIndent = true; - emptyLines = 0; - captureStart = state.position; - - while (!is_EOL(ch) && (ch !== 0)) { - ch = state.input.charCodeAt(++state.position); - } - - captureSegment(state, captureStart, state.position, false); - } - - return true; -} - -function readBlockSequence(state, nodeIndent) { - var _line, - _tag = state.tag, - _anchor = state.anchor, - _result = [], - following, - detected = false, - ch; - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } - - ch = state.input.charCodeAt(state.position); - - while (ch !== 0) { - - if (ch !== 0x2D/* - */) { - break; - } - - following = state.input.charCodeAt(state.position + 1); - - if (!is_WS_OR_EOL(following)) { - break; - } - - detected = true; - state.position++; - - if (skipSeparationSpace(state, true, -1)) { - if (state.lineIndent <= nodeIndent) { - _result.push(null); - ch = state.input.charCodeAt(state.position); - continue; - } - } - - _line = state.line; - composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true); - _result.push(state.result); - skipSeparationSpace(state, true, -1); - - ch = state.input.charCodeAt(state.position); - - if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) { - throwError(state, 'bad indentation of a sequence entry'); - } else if (state.lineIndent < nodeIndent) { - break; - } - } - - if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'sequence'; - state.result = _result; - return true; - } - return false; -} - -function readBlockMapping(state, nodeIndent, flowIndent) { - var following, - allowCompact, - _line, - _tag = state.tag, - _anchor = state.anchor, - _result = {}, - overridableKeys = {}, - keyTag = null, - keyNode = null, - valueNode = null, - atExplicitKey = false, - detected = false, - ch; - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = _result; - } - - ch = state.input.charCodeAt(state.position); - - while (ch !== 0) { - following = state.input.charCodeAt(state.position + 1); - _line = state.line; // Save the current line. - - // - // Explicit notation case. There are two separate blocks: - // first for the key (denoted by "?") and second for the value (denoted by ":") - // - if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) { - - if (ch === 0x3F/* ? */) { - if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); - keyTag = keyNode = valueNode = null; - } - - detected = true; - atExplicitKey = true; - allowCompact = true; - - } else if (atExplicitKey) { - // i.e. 0x3A/* : */ === character after the explicit key. - atExplicitKey = false; - allowCompact = true; - - } else { - throwError(state, 'incomplete explicit mapping pair; a key node is missed'); - } - - state.position += 1; - ch = following; - - // - // Implicit notation case. Flow-style node as the key first, then ":", and the value. - // - } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) { - - if (state.line === _line) { - ch = state.input.charCodeAt(state.position); - - while (is_WHITE_SPACE(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (ch === 0x3A/* : */) { - ch = state.input.charCodeAt(++state.position); - - if (!is_WS_OR_EOL(ch)) { - throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping'); - } - - if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); - keyTag = keyNode = valueNode = null; - } - - detected = true; - atExplicitKey = false; - allowCompact = false; - keyTag = state.tag; - keyNode = state.result; - - } else if (detected) { - throwError(state, 'can not read an implicit mapping pair; a colon is missed'); - - } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. - } - - } else if (detected) { - throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key'); - - } else { - state.tag = _tag; - state.anchor = _anchor; - return true; // Keep the result of `composeNode`. - } - - } else { - break; // Reading is done. Go to the epilogue. - } - - // - // Common reading code for both explicit and implicit notations. - // - if (state.line === _line || state.lineIndent > nodeIndent) { - if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) { - if (atExplicitKey) { - keyNode = state.result; - } else { - valueNode = state.result; - } - } - - if (!atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode); - keyTag = keyNode = valueNode = null; - } - - skipSeparationSpace(state, true, -1); - ch = state.input.charCodeAt(state.position); - } - - if (state.lineIndent > nodeIndent && (ch !== 0)) { - throwError(state, 'bad indentation of a mapping entry'); - } else if (state.lineIndent < nodeIndent) { - break; - } - } - - // - // Epilogue. - // - - // Special case: last mapping's node contains only the key in explicit notation. - if (atExplicitKey) { - storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null); - } - - // Expose the resulting mapping. - if (detected) { - state.tag = _tag; - state.anchor = _anchor; - state.kind = 'mapping'; - state.result = _result; - } - - return detected; -} - -function readTagProperty(state) { - var _position, - isVerbatim = false, - isNamed = false, - tagHandle, - tagName, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x21/* ! */) return false; - - if (state.tag !== null) { - throwError(state, 'duplication of a tag property'); - } - - ch = state.input.charCodeAt(++state.position); - - if (ch === 0x3C/* < */) { - isVerbatim = true; - ch = state.input.charCodeAt(++state.position); - - } else if (ch === 0x21/* ! */) { - isNamed = true; - tagHandle = '!!'; - ch = state.input.charCodeAt(++state.position); - - } else { - tagHandle = '!'; - } - - _position = state.position; - - if (isVerbatim) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && ch !== 0x3E/* > */); - - if (state.position < state.length) { - tagName = state.input.slice(_position, state.position); - ch = state.input.charCodeAt(++state.position); - } else { - throwError(state, 'unexpected end of the stream within a verbatim tag'); - } - } else { - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - - if (ch === 0x21/* ! */) { - if (!isNamed) { - tagHandle = state.input.slice(_position - 1, state.position + 1); - - if (!PATTERN_TAG_HANDLE.test(tagHandle)) { - throwError(state, 'named tag handle cannot contain such characters'); - } - - isNamed = true; - _position = state.position + 1; - } else { - throwError(state, 'tag suffix cannot contain exclamation marks'); - } - } - - ch = state.input.charCodeAt(++state.position); - } - - tagName = state.input.slice(_position, state.position); - - if (PATTERN_FLOW_INDICATORS.test(tagName)) { - throwError(state, 'tag suffix cannot contain flow indicator characters'); - } - } - - if (tagName && !PATTERN_TAG_URI.test(tagName)) { - throwError(state, 'tag name cannot contain such characters: ' + tagName); - } - - if (isVerbatim) { - state.tag = tagName; - - } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) { - state.tag = state.tagMap[tagHandle] + tagName; - - } else if (tagHandle === '!') { - state.tag = '!' + tagName; - - } else if (tagHandle === '!!') { - state.tag = 'tag:yaml.org,2002:' + tagName; - - } else { - throwError(state, 'undeclared tag handle "' + tagHandle + '"'); - } - - return true; -} - -function readAnchorProperty(state) { - var _position, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x26/* & */) return false; - - if (state.anchor !== null) { - throwError(state, 'duplication of an anchor property'); - } - - ch = state.input.charCodeAt(++state.position); - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (state.position === _position) { - throwError(state, 'name of an anchor node must contain at least one character'); - } - - state.anchor = state.input.slice(_position, state.position); - return true; -} - -function readAlias(state) { - var _position, alias, - ch; - - ch = state.input.charCodeAt(state.position); - - if (ch !== 0x2A/* * */) return false; - - ch = state.input.charCodeAt(++state.position); - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (state.position === _position) { - throwError(state, 'name of an alias node must contain at least one character'); - } - - alias = state.input.slice(_position, state.position); - - if (!state.anchorMap.hasOwnProperty(alias)) { - throwError(state, 'unidentified alias "' + alias + '"'); - } - - state.result = state.anchorMap[alias]; - skipSeparationSpace(state, true, -1); - return true; -} - -function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) { - var allowBlockStyles, - allowBlockScalars, - allowBlockCollections, - indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; - } - } - } - - if (indentStatus === 1) { - while (readTagProperty(state) || readAnchorProperty(state)) { - if (skipSeparationSpace(state, true, -1)) { - atNewLine = true; - allowBlockCollections = allowBlockStyles; - - if (state.lineIndent > parentIndent) { - indentStatus = 1; - } else if (state.lineIndent === parentIndent) { - indentStatus = 0; - } else if (state.lineIndent < parentIndent) { - indentStatus = -1; - } - } else { - allowBlockCollections = false; - } - } - } - - if (allowBlockCollections) { - allowBlockCollections = atNewLine || allowCompact; - } - - if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) { - if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) { - flowIndent = parentIndent; - } else { - flowIndent = parentIndent + 1; - } - - blockIndent = state.position - state.lineStart; - - if (indentStatus === 1) { - if (allowBlockCollections && - (readBlockSequence(state, blockIndent) || - readBlockMapping(state, blockIndent, flowIndent)) || - readFlowCollection(state, flowIndent)) { - hasContent = true; - } else { - if ((allowBlockScalars && readBlockScalar(state, flowIndent)) || - readSingleQuotedScalar(state, flowIndent) || - readDoubleQuotedScalar(state, flowIndent)) { - hasContent = true; - - } else if (readAlias(state)) { - hasContent = true; - - if (state.tag !== null || state.anchor !== null) { - throwError(state, 'alias node should not have any properties'); - } - - } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) { - hasContent = true; - - if (state.tag === null) { - state.tag = '?'; - } - } - - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - } - } else if (indentStatus === 0) { - // Special case: block sequences are allowed to have same indentation level as the parent. - // http://www.yaml.org/spec/1.2/spec.html#id2799784 - hasContent = allowBlockCollections && readBlockSequence(state, blockIndent); - } - } - - if (state.tag !== null && state.tag !== '!') { - if (state.tag === '?') { - for (typeIndex = 0, typeQuantity = state.implicitTypes.length; - typeIndex < typeQuantity; - typeIndex += 1) { - type = state.implicitTypes[typeIndex]; - - // Implicit resolving is not allowed for non-scalar types, and '?' - // non-specific tag is only assigned to plain scalars. So, it isn't - // needed to check for 'kind' conformity. - - if (type.resolve(state.result)) { // `state.result` updated in resolver if matched - state.result = type.construct(state.result); - state.tag = type.tag; - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - break; - } - } - } else if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) { - type = state.typeMap[state.kind || 'fallback'][state.tag]; - - if (state.result !== null && type.kind !== state.kind) { - throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be "' + type.kind + '", not "' + state.kind + '"'); - } - - if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched - throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag'); - } else { - state.result = type.construct(state.result); - if (state.anchor !== null) { - state.anchorMap[state.anchor] = state.result; - } - } - } else { - throwError(state, 'unknown tag !<' + state.tag + '>'); - } - } - - if (state.listener !== null) { - state.listener('close', state); - } - return state.tag !== null || state.anchor !== null || hasContent; -} - -function readDocument(state) { - var documentStart = state.position, - _position, - directiveName, - directiveArgs, - hasDirectives = false, - ch; - - state.version = null; - state.checkLineBreaks = state.legacy; - state.tagMap = {}; - state.anchorMap = {}; - - while ((ch = state.input.charCodeAt(state.position)) !== 0) { - skipSeparationSpace(state, true, -1); - - ch = state.input.charCodeAt(state.position); - - if (state.lineIndent > 0 || ch !== 0x25/* % */) { - break; - } - - hasDirectives = true; - ch = state.input.charCodeAt(++state.position); - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - directiveName = state.input.slice(_position, state.position); - directiveArgs = []; - - if (directiveName.length < 1) { - throwError(state, 'directive name must not be less than one character in length'); - } - - while (ch !== 0) { - while (is_WHITE_SPACE(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - if (ch === 0x23/* # */) { - do { ch = state.input.charCodeAt(++state.position); } - while (ch !== 0 && !is_EOL(ch)); - break; - } - - if (is_EOL(ch)) break; - - _position = state.position; - - while (ch !== 0 && !is_WS_OR_EOL(ch)) { - ch = state.input.charCodeAt(++state.position); - } - - directiveArgs.push(state.input.slice(_position, state.position)); - } - - if (ch !== 0) readLineBreak(state); - - if (_hasOwnProperty.call(directiveHandlers, directiveName)) { - directiveHandlers[directiveName](state, directiveName, directiveArgs); - } else { - throwWarning(state, 'unknown document directive "' + directiveName + '"'); - } - } - - skipSeparationSpace(state, true, -1); - - if (state.lineIndent === 0 && - state.input.charCodeAt(state.position) === 0x2D/* - */ && - state.input.charCodeAt(state.position + 1) === 0x2D/* - */ && - state.input.charCodeAt(state.position + 2) === 0x2D/* - */) { - state.position += 3; - skipSeparationSpace(state, true, -1); - - } else if (hasDirectives) { - throwError(state, 'directives end mark is expected'); - } - - composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true); - skipSeparationSpace(state, true, -1); - - if (state.checkLineBreaks && - PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) { - throwWarning(state, 'non-ASCII line breaks are interpreted as content'); - } - - state.documents.push(state.result); - - if (state.position === state.lineStart && testDocumentSeparator(state)) { - - if (state.input.charCodeAt(state.position) === 0x2E/* . */) { - state.position += 3; - skipSeparationSpace(state, true, -1); - } - return; - } - - if (state.position < (state.length - 1)) { - throwError(state, 'end of the stream or a document separator is expected'); - } else { - return; - } -} - - -function loadDocuments(input, options) { - input = String(input); - options = options || {}; - - if (input.length !== 0) { - - // Add tailing `\n` if not exists - if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ && - input.charCodeAt(input.length - 1) !== 0x0D/* CR */) { - input += '\n'; - } - - // Strip BOM - if (input.charCodeAt(0) === 0xFEFF) { - input = input.slice(1); - } - } - - var state = new State(input, options); - - // Use 0 as string terminator. That significantly simplifies bounds check. - state.input += '\0'; - - while (state.input.charCodeAt(state.position) === 0x20/* Space */) { - state.lineIndent += 1; - state.position += 1; - } - - while (state.position < (state.length - 1)) { - readDocument(state); - } - - return state.documents; -} - - -function loadAll(input, iterator, options) { - var documents = loadDocuments(input, options), index, length; - - for (index = 0, length = documents.length; index < length; index += 1) { - iterator(documents[index]); - } -} - - -function load(input, options) { - var documents = loadDocuments(input, options); - - if (documents.length === 0) { - /*eslint-disable no-undefined*/ - return undefined; - } else if (documents.length === 1) { - return documents[0]; - } - throw new YAMLException('expected a single document in the stream, but found more'); -} - - -function safeLoadAll(input, output, options) { - loadAll(input, output, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); -} - - -function safeLoad(input, options) { - return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options)); -} - - -module.exports.loadAll = loadAll; -module.exports.load = load; -module.exports.safeLoadAll = safeLoadAll; -module.exports.safeLoad = safeLoad; diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/mark.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/mark.js deleted file mode 100644 index 47b265c20..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/mark.js +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; - - -var common = require('./common'); - - -function Mark(name, buffer, position, line, column) { - this.name = name; - this.buffer = buffer; - this.position = position; - this.line = line; - this.column = column; -} - - -Mark.prototype.getSnippet = function getSnippet(indent, maxLength) { - var head, start, tail, end, snippet; - - if (!this.buffer) return null; - - indent = indent || 4; - maxLength = maxLength || 75; - - head = ''; - start = this.position; - - while (start > 0 && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) { - start -= 1; - if (this.position - start > (maxLength / 2 - 1)) { - head = ' ... '; - start += 5; - break; - } - } - - tail = ''; - end = this.position; - - while (end < this.buffer.length && '\x00\r\n\x85\u2028\u2029'.indexOf(this.buffer.charAt(end)) === -1) { - end += 1; - if (end - this.position > (maxLength / 2 - 1)) { - tail = ' ... '; - end -= 5; - break; - } - } - - snippet = this.buffer.slice(start, end); - - return common.repeat(' ', indent) + head + snippet + tail + '\n' + - common.repeat(' ', indent + this.position - start + head.length) + '^'; -}; - - -Mark.prototype.toString = function toString(compact) { - var snippet, where = ''; - - if (this.name) { - where += 'in "' + this.name + '" '; - } - - where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1); - - if (!compact) { - snippet = this.getSnippet(); - - if (snippet) { - where += ':\n' + snippet; - } - } - - return where; -}; - - -module.exports = Mark; diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema.js deleted file mode 100644 index ca7cf47e7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema.js +++ /dev/null @@ -1,108 +0,0 @@ -'use strict'; - -/*eslint-disable max-len*/ - -var common = require('./common'); -var YAMLException = require('./exception'); -var Type = require('./type'); - - -function compileList(schema, name, result) { - var exclude = []; - - schema.include.forEach(function (includedSchema) { - result = compileList(includedSchema, name, result); - }); - - schema[name].forEach(function (currentType) { - result.forEach(function (previousType, previousIndex) { - if (previousType.tag === currentType.tag && previousType.kind === currentType.kind) { - exclude.push(previousIndex); - } - }); - - result.push(currentType); - }); - - return result.filter(function (type, index) { - return exclude.indexOf(index) === -1; - }); -} - - -function compileMap(/* lists... */) { - var result = { - scalar: {}, - sequence: {}, - mapping: {}, - fallback: {} - }, index, length; - - function collectType(type) { - result[type.kind][type.tag] = result['fallback'][type.tag] = type; - } - - for (index = 0, length = arguments.length; index < length; index += 1) { - arguments[index].forEach(collectType); - } - return result; -} - - -function Schema(definition) { - this.include = definition.include || []; - this.implicit = definition.implicit || []; - this.explicit = definition.explicit || []; - - this.implicit.forEach(function (type) { - if (type.loadKind && type.loadKind !== 'scalar') { - throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.'); - } - }); - - this.compiledImplicit = compileList(this, 'implicit', []); - this.compiledExplicit = compileList(this, 'explicit', []); - this.compiledTypeMap = compileMap(this.compiledImplicit, this.compiledExplicit); -} - - -Schema.DEFAULT = null; - - -Schema.create = function createSchema() { - var schemas, types; - - switch (arguments.length) { - case 1: - schemas = Schema.DEFAULT; - types = arguments[0]; - break; - - case 2: - schemas = arguments[0]; - types = arguments[1]; - break; - - default: - throw new YAMLException('Wrong number of arguments for Schema.create function'); - } - - schemas = common.toArray(schemas); - types = common.toArray(types); - - if (!schemas.every(function (schema) { return schema instanceof Schema; })) { - throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.'); - } - - if (!types.every(function (type) { return type instanceof Type; })) { - throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.'); - } - - return new Schema({ - include: schemas, - explicit: types - }); -}; - - -module.exports = Schema; diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/core.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/core.js deleted file mode 100644 index 206daab56..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/core.js +++ /dev/null @@ -1,18 +0,0 @@ -// Standard YAML's Core schema. -// http://www.yaml.org/spec/1.2/spec.html#id2804923 -// -// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. -// So, Core schema has no distinctions from JSON schema is JS-YAML. - - -'use strict'; - - -var Schema = require('../schema'); - - -module.exports = new Schema({ - include: [ - require('./json') - ] -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/default_full.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/default_full.js deleted file mode 100644 index a55ef42ac..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +++ /dev/null @@ -1,25 +0,0 @@ -// JS-YAML's default schema for `load` function. -// It is not described in the YAML specification. -// -// This schema is based on JS-YAML's default safe schema and includes -// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function. -// -// Also this schema is used as default base schema at `Schema.create` function. - - -'use strict'; - - -var Schema = require('../schema'); - - -module.exports = Schema.DEFAULT = new Schema({ - include: [ - require('./default_safe') - ], - explicit: [ - require('../type/js/undefined'), - require('../type/js/regexp'), - require('../type/js/function') - ] -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js deleted file mode 100644 index 11d89bbfb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +++ /dev/null @@ -1,28 +0,0 @@ -// JS-YAML's default schema for `safeLoad` function. -// It is not described in the YAML specification. -// -// This schema is based on standard YAML's Core schema and includes most of -// extra types described at YAML tag repository. (http://yaml.org/type/) - - -'use strict'; - - -var Schema = require('../schema'); - - -module.exports = new Schema({ - include: [ - require('./core') - ], - implicit: [ - require('../type/timestamp'), - require('../type/merge') - ], - explicit: [ - require('../type/binary'), - require('../type/omap'), - require('../type/pairs'), - require('../type/set') - ] -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js deleted file mode 100644 index b7a33eb7a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +++ /dev/null @@ -1,17 +0,0 @@ -// Standard YAML's Failsafe schema. -// http://www.yaml.org/spec/1.2/spec.html#id2802346 - - -'use strict'; - - -var Schema = require('../schema'); - - -module.exports = new Schema({ - explicit: [ - require('../type/str'), - require('../type/seq'), - require('../type/map') - ] -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/json.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/json.js deleted file mode 100644 index 5be3dbf80..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/schema/json.js +++ /dev/null @@ -1,25 +0,0 @@ -// Standard YAML's JSON schema. -// http://www.yaml.org/spec/1.2/spec.html#id2803231 -// -// NOTE: JS-YAML does not support schema-specific tag resolution restrictions. -// So, this schema is not such strict as defined in the YAML specification. -// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc. - - -'use strict'; - - -var Schema = require('../schema'); - - -module.exports = new Schema({ - include: [ - require('./failsafe') - ], - implicit: [ - require('../type/null'), - require('../type/bool'), - require('../type/int'), - require('../type/float') - ] -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type.js deleted file mode 100644 index 90b702ac0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type.js +++ /dev/null @@ -1,61 +0,0 @@ -'use strict'; - -var YAMLException = require('./exception'); - -var TYPE_CONSTRUCTOR_OPTIONS = [ - 'kind', - 'resolve', - 'construct', - 'instanceOf', - 'predicate', - 'represent', - 'defaultStyle', - 'styleAliases' -]; - -var YAML_NODE_KINDS = [ - 'scalar', - 'sequence', - 'mapping' -]; - -function compileStyleAliases(map) { - var result = {}; - - if (map !== null) { - Object.keys(map).forEach(function (style) { - map[style].forEach(function (alias) { - result[String(alias)] = style; - }); - }); - } - - return result; -} - -function Type(tag, options) { - options = options || {}; - - Object.keys(options).forEach(function (name) { - if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) { - throw new YAMLException('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.'); - } - }); - - // TODO: Add tag format check. - this.tag = tag; - this.kind = options['kind'] || null; - this.resolve = options['resolve'] || function () { return true; }; - this.construct = options['construct'] || function (data) { return data; }; - this.instanceOf = options['instanceOf'] || null; - this.predicate = options['predicate'] || null; - this.represent = options['represent'] || null; - this.defaultStyle = options['defaultStyle'] || null; - this.styleAliases = compileStyleAliases(options['styleAliases'] || null); - - if (YAML_NODE_KINDS.indexOf(this.kind) === -1) { - throw new YAMLException('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.'); - } -} - -module.exports = Type; diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/binary.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/binary.js deleted file mode 100644 index 205629f74..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/binary.js +++ /dev/null @@ -1,135 +0,0 @@ -'use strict'; - -/*eslint-disable no-bitwise*/ - -var NodeBuffer; - -try { - // A trick for browserified version, to not include `Buffer` shim - var _require = require; - NodeBuffer = _require('buffer').Buffer; -} catch (__) {} - -var Type = require('../type'); - - -// [ 64, 65, 66 ] -> [ padding, CR, LF ] -var BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r'; - - -function resolveYamlBinary(data) { - if (data === null) return false; - - var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP; - - // Convert one by one. - for (idx = 0; idx < max; idx++) { - code = map.indexOf(data.charAt(idx)); - - // Skip CR/LF - if (code > 64) continue; - - // Fail on illegal characters - if (code < 0) return false; - - bitlen += 6; - } - - // If there are any bits left, source was corrupted - return (bitlen % 8) === 0; -} - -function constructYamlBinary(data) { - var idx, tailbits, - input = data.replace(/[\r\n=]/g, ''), // remove CR/LF & padding to simplify scan - max = input.length, - map = BASE64_MAP, - bits = 0, - result = []; - - // Collect by 6*4 bits (3 bytes) - - for (idx = 0; idx < max; idx++) { - if ((idx % 4 === 0) && idx) { - result.push((bits >> 16) & 0xFF); - result.push((bits >> 8) & 0xFF); - result.push(bits & 0xFF); - } - - bits = (bits << 6) | map.indexOf(input.charAt(idx)); - } - - // Dump tail - - tailbits = (max % 4) * 6; - - if (tailbits === 0) { - result.push((bits >> 16) & 0xFF); - result.push((bits >> 8) & 0xFF); - result.push(bits & 0xFF); - } else if (tailbits === 18) { - result.push((bits >> 10) & 0xFF); - result.push((bits >> 2) & 0xFF); - } else if (tailbits === 12) { - result.push((bits >> 4) & 0xFF); - } - - // Wrap into Buffer for NodeJS and leave Array for browser - if (NodeBuffer) return new NodeBuffer(result); - - return result; -} - -function representYamlBinary(object /*, style*/) { - var result = '', bits = 0, idx, tail, - max = object.length, - map = BASE64_MAP; - - // Convert every three bytes to 4 ASCII characters. - - for (idx = 0; idx < max; idx++) { - if ((idx % 3 === 0) && idx) { - result += map[(bits >> 18) & 0x3F]; - result += map[(bits >> 12) & 0x3F]; - result += map[(bits >> 6) & 0x3F]; - result += map[bits & 0x3F]; - } - - bits = (bits << 8) + object[idx]; - } - - // Dump tail - - tail = max % 3; - - if (tail === 0) { - result += map[(bits >> 18) & 0x3F]; - result += map[(bits >> 12) & 0x3F]; - result += map[(bits >> 6) & 0x3F]; - result += map[bits & 0x3F]; - } else if (tail === 2) { - result += map[(bits >> 10) & 0x3F]; - result += map[(bits >> 4) & 0x3F]; - result += map[(bits << 2) & 0x3F]; - result += map[64]; - } else if (tail === 1) { - result += map[(bits >> 2) & 0x3F]; - result += map[(bits << 4) & 0x3F]; - result += map[64]; - result += map[64]; - } - - return result; -} - -function isBinary(object) { - return NodeBuffer && NodeBuffer.isBuffer(object); -} - -module.exports = new Type('tag:yaml.org,2002:binary', { - kind: 'scalar', - resolve: resolveYamlBinary, - construct: constructYamlBinary, - predicate: isBinary, - represent: representYamlBinary -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/bool.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/bool.js deleted file mode 100644 index cb7745930..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/bool.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; - -var Type = require('../type'); - -function resolveYamlBoolean(data) { - if (data === null) return false; - - var max = data.length; - - return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) || - (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE')); -} - -function constructYamlBoolean(data) { - return data === 'true' || - data === 'True' || - data === 'TRUE'; -} - -function isBoolean(object) { - return Object.prototype.toString.call(object) === '[object Boolean]'; -} - -module.exports = new Type('tag:yaml.org,2002:bool', { - kind: 'scalar', - resolve: resolveYamlBoolean, - construct: constructYamlBoolean, - predicate: isBoolean, - represent: { - lowercase: function (object) { return object ? 'true' : 'false'; }, - uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; }, - camelcase: function (object) { return object ? 'True' : 'False'; } - }, - defaultStyle: 'lowercase' -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/float.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/float.js deleted file mode 100644 index 76871547c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/float.js +++ /dev/null @@ -1,105 +0,0 @@ -'use strict'; - -var common = require('../common'); -var Type = require('../type'); - -var YAML_FLOAT_PATTERN = new RegExp( - '^(?:[-+]?(?:[0-9][0-9_]*)\\.[0-9_]*(?:[eE][-+][0-9]+)?' + - '|\\.[0-9_]+(?:[eE][-+][0-9]+)?' + - '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*' + - '|[-+]?\\.(?:inf|Inf|INF)' + - '|\\.(?:nan|NaN|NAN))$'); - -function resolveYamlFloat(data) { - if (data === null) return false; - - if (!YAML_FLOAT_PATTERN.test(data)) return false; - - return true; -} - -function constructYamlFloat(data) { - var value, sign, base, digits; - - value = data.replace(/_/g, '').toLowerCase(); - sign = value[0] === '-' ? -1 : 1; - digits = []; - - if ('+-'.indexOf(value[0]) >= 0) { - value = value.slice(1); - } - - if (value === '.inf') { - return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY; - - } else if (value === '.nan') { - return NaN; - - } else if (value.indexOf(':') >= 0) { - value.split(':').forEach(function (v) { - digits.unshift(parseFloat(v, 10)); - }); - - value = 0.0; - base = 1; - - digits.forEach(function (d) { - value += d * base; - base *= 60; - }); - - return sign * value; - - } - return sign * parseFloat(value, 10); -} - - -var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/; - -function representYamlFloat(object, style) { - var res; - - if (isNaN(object)) { - switch (style) { - case 'lowercase': return '.nan'; - case 'uppercase': return '.NAN'; - case 'camelcase': return '.NaN'; - } - } else if (Number.POSITIVE_INFINITY === object) { - switch (style) { - case 'lowercase': return '.inf'; - case 'uppercase': return '.INF'; - case 'camelcase': return '.Inf'; - } - } else if (Number.NEGATIVE_INFINITY === object) { - switch (style) { - case 'lowercase': return '-.inf'; - case 'uppercase': return '-.INF'; - case 'camelcase': return '-.Inf'; - } - } else if (common.isNegativeZero(object)) { - return '-0.0'; - } - - res = object.toString(10); - - // JS stringifier can build scientific format without dots: 5e-100, - // while YAML requres dot: 5.e-100. Fix it with simple hack - - return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res; -} - -function isFloat(object) { - return (Object.prototype.toString.call(object) === '[object Number]') && - (object % 1 !== 0 || common.isNegativeZero(object)); -} - -module.exports = new Type('tag:yaml.org,2002:float', { - kind: 'scalar', - resolve: resolveYamlFloat, - construct: constructYamlFloat, - predicate: isFloat, - represent: representYamlFloat, - defaultStyle: 'lowercase' -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/int.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/int.js deleted file mode 100644 index a3c496503..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/int.js +++ /dev/null @@ -1,168 +0,0 @@ -'use strict'; - -var common = require('../common'); -var Type = require('../type'); - -function isHexCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) || - ((0x41/* A */ <= c) && (c <= 0x46/* F */)) || - ((0x61/* a */ <= c) && (c <= 0x66/* f */)); -} - -function isOctCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */)); -} - -function isDecCode(c) { - return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)); -} - -function resolveYamlInteger(data) { - if (data === null) return false; - - var max = data.length, - index = 0, - hasDigits = false, - ch; - - if (!max) return false; - - ch = data[index]; - - // sign - if (ch === '-' || ch === '+') { - ch = data[++index]; - } - - if (ch === '0') { - // 0 - if (index + 1 === max) return true; - ch = data[++index]; - - // base 2, base 8, base 16 - - if (ch === 'b') { - // base 2 - index++; - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (ch !== '0' && ch !== '1') return false; - hasDigits = true; - } - return hasDigits; - } - - - if (ch === 'x') { - // base 16 - index++; - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isHexCode(data.charCodeAt(index))) return false; - hasDigits = true; - } - return hasDigits; - } - - // base 8 - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (!isOctCode(data.charCodeAt(index))) return false; - hasDigits = true; - } - return hasDigits; - } - - // base 10 (except 0) or base 60 - - for (; index < max; index++) { - ch = data[index]; - if (ch === '_') continue; - if (ch === ':') break; - if (!isDecCode(data.charCodeAt(index))) { - return false; - } - hasDigits = true; - } - - if (!hasDigits) return false; - - // if !base60 - done; - if (ch !== ':') return true; - - // base60 almost not used, no needs to optimize - return /^(:[0-5]?[0-9])+$/.test(data.slice(index)); -} - -function constructYamlInteger(data) { - var value = data, sign = 1, ch, base, digits = []; - - if (value.indexOf('_') !== -1) { - value = value.replace(/_/g, ''); - } - - ch = value[0]; - - if (ch === '-' || ch === '+') { - if (ch === '-') sign = -1; - value = value.slice(1); - ch = value[0]; - } - - if (value === '0') return 0; - - if (ch === '0') { - if (value[1] === 'b') return sign * parseInt(value.slice(2), 2); - if (value[1] === 'x') return sign * parseInt(value, 16); - return sign * parseInt(value, 8); - } - - if (value.indexOf(':') !== -1) { - value.split(':').forEach(function (v) { - digits.unshift(parseInt(v, 10)); - }); - - value = 0; - base = 1; - - digits.forEach(function (d) { - value += (d * base); - base *= 60; - }); - - return sign * value; - - } - - return sign * parseInt(value, 10); -} - -function isInteger(object) { - return (Object.prototype.toString.call(object)) === '[object Number]' && - (object % 1 === 0 && !common.isNegativeZero(object)); -} - -module.exports = new Type('tag:yaml.org,2002:int', { - kind: 'scalar', - resolve: resolveYamlInteger, - construct: constructYamlInteger, - predicate: isInteger, - represent: { - binary: function (object) { return '0b' + object.toString(2); }, - octal: function (object) { return '0' + object.toString(8); }, - decimal: function (object) { return object.toString(10); }, - hexadecimal: function (object) { return '0x' + object.toString(16).toUpperCase(); } - }, - defaultStyle: 'decimal', - styleAliases: { - binary: [ 2, 'bin' ], - octal: [ 8, 'oct' ], - decimal: [ 10, 'dec' ], - hexadecimal: [ 16, 'hex' ] - } -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/js/function.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/js/function.js deleted file mode 100644 index c6a42d002..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/js/function.js +++ /dev/null @@ -1,84 +0,0 @@ -'use strict'; - -var esprima; - -// Browserified version does not have esprima -// -// 1. For node.js just require module as deps -// 2. For browser try to require mudule via external AMD system. -// If not found - try to fallback to window.esprima. If not -// found too - then fail to parse. -// -try { - // workaround to exclude package from browserify list. - var _require = require; - esprima = _require('esprima'); -} catch (_) { - /*global window */ - if (typeof window !== 'undefined') esprima = window.esprima; -} - -var Type = require('../../type'); - -function resolveJavascriptFunction(data) { - if (data === null) return false; - - try { - var source = '(' + data + ')', - ast = esprima.parse(source, { range: true }); - - if (ast.type !== 'Program' || - ast.body.length !== 1 || - ast.body[0].type !== 'ExpressionStatement' || - ast.body[0].expression.type !== 'FunctionExpression') { - return false; - } - - return true; - } catch (err) { - return false; - } -} - -function constructJavascriptFunction(data) { - /*jslint evil:true*/ - - var source = '(' + data + ')', - ast = esprima.parse(source, { range: true }), - params = [], - body; - - if (ast.type !== 'Program' || - ast.body.length !== 1 || - ast.body[0].type !== 'ExpressionStatement' || - ast.body[0].expression.type !== 'FunctionExpression') { - throw new Error('Failed to resolve function'); - } - - ast.body[0].expression.params.forEach(function (param) { - params.push(param.name); - }); - - body = ast.body[0].expression.body.range; - - // Esprima's ranges include the first '{' and the last '}' characters on - // function expressions. So cut them out. - /*eslint-disable no-new-func*/ - return new Function(params, source.slice(body[0] + 1, body[1] - 1)); -} - -function representJavascriptFunction(object /*, style*/) { - return object.toString(); -} - -function isFunction(object) { - return Object.prototype.toString.call(object) === '[object Function]'; -} - -module.exports = new Type('tag:yaml.org,2002:js/function', { - kind: 'scalar', - resolve: resolveJavascriptFunction, - construct: constructJavascriptFunction, - predicate: isFunction, - represent: representJavascriptFunction -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js deleted file mode 100644 index 43fa47017..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -var Type = require('../../type'); - -function resolveJavascriptRegExp(data) { - if (data === null) return false; - if (data.length === 0) return false; - - var regexp = data, - tail = /\/([gim]*)$/.exec(data), - modifiers = ''; - - // if regexp starts with '/' it can have modifiers and must be properly closed - // `/foo/gim` - modifiers tail can be maximum 3 chars - if (regexp[0] === '/') { - if (tail) modifiers = tail[1]; - - if (modifiers.length > 3) return false; - // if expression starts with /, is should be properly terminated - if (regexp[regexp.length - modifiers.length - 1] !== '/') return false; - } - - return true; -} - -function constructJavascriptRegExp(data) { - var regexp = data, - tail = /\/([gim]*)$/.exec(data), - modifiers = ''; - - // `/foo/gim` - tail can be maximum 4 chars - if (regexp[0] === '/') { - if (tail) modifiers = tail[1]; - regexp = regexp.slice(1, regexp.length - modifiers.length - 1); - } - - return new RegExp(regexp, modifiers); -} - -function representJavascriptRegExp(object /*, style*/) { - var result = '/' + object.source + '/'; - - if (object.global) result += 'g'; - if (object.multiline) result += 'm'; - if (object.ignoreCase) result += 'i'; - - return result; -} - -function isRegExp(object) { - return Object.prototype.toString.call(object) === '[object RegExp]'; -} - -module.exports = new Type('tag:yaml.org,2002:js/regexp', { - kind: 'scalar', - resolve: resolveJavascriptRegExp, - construct: constructJavascriptRegExp, - predicate: isRegExp, - represent: representJavascriptRegExp -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js deleted file mode 100644 index 95b5569fd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -var Type = require('../../type'); - -function resolveJavascriptUndefined() { - return true; -} - -function constructJavascriptUndefined() { - /*eslint-disable no-undefined*/ - return undefined; -} - -function representJavascriptUndefined() { - return ''; -} - -function isUndefined(object) { - return typeof object === 'undefined'; -} - -module.exports = new Type('tag:yaml.org,2002:js/undefined', { - kind: 'scalar', - resolve: resolveJavascriptUndefined, - construct: constructJavascriptUndefined, - predicate: isUndefined, - represent: representJavascriptUndefined -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/map.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/map.js deleted file mode 100644 index f327beebd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/map.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var Type = require('../type'); - -module.exports = new Type('tag:yaml.org,2002:map', { - kind: 'mapping', - construct: function (data) { return data !== null ? data : {}; } -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/merge.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/merge.js deleted file mode 100644 index ae08a8644..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/merge.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var Type = require('../type'); - -function resolveYamlMerge(data) { - return data === '<<' || data === null; -} - -module.exports = new Type('tag:yaml.org,2002:merge', { - kind: 'scalar', - resolve: resolveYamlMerge -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/null.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/null.js deleted file mode 100644 index 6874daa64..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/null.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -var Type = require('../type'); - -function resolveYamlNull(data) { - if (data === null) return true; - - var max = data.length; - - return (max === 1 && data === '~') || - (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL')); -} - -function constructYamlNull() { - return null; -} - -function isNull(object) { - return object === null; -} - -module.exports = new Type('tag:yaml.org,2002:null', { - kind: 'scalar', - resolve: resolveYamlNull, - construct: constructYamlNull, - predicate: isNull, - represent: { - canonical: function () { return '~'; }, - lowercase: function () { return 'null'; }, - uppercase: function () { return 'NULL'; }, - camelcase: function () { return 'Null'; } - }, - defaultStyle: 'lowercase' -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/omap.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/omap.js deleted file mode 100644 index b2b5323bd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/omap.js +++ /dev/null @@ -1,44 +0,0 @@ -'use strict'; - -var Type = require('../type'); - -var _hasOwnProperty = Object.prototype.hasOwnProperty; -var _toString = Object.prototype.toString; - -function resolveYamlOmap(data) { - if (data === null) return true; - - var objectKeys = [], index, length, pair, pairKey, pairHasKey, - object = data; - - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; - pairHasKey = false; - - if (_toString.call(pair) !== '[object Object]') return false; - - for (pairKey in pair) { - if (_hasOwnProperty.call(pair, pairKey)) { - if (!pairHasKey) pairHasKey = true; - else return false; - } - } - - if (!pairHasKey) return false; - - if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey); - else return false; - } - - return true; -} - -function constructYamlOmap(data) { - return data !== null ? data : []; -} - -module.exports = new Type('tag:yaml.org,2002:omap', { - kind: 'sequence', - resolve: resolveYamlOmap, - construct: constructYamlOmap -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/pairs.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/pairs.js deleted file mode 100644 index 74b52403f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/pairs.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var Type = require('../type'); - -var _toString = Object.prototype.toString; - -function resolveYamlPairs(data) { - if (data === null) return true; - - var index, length, pair, keys, result, - object = data; - - result = new Array(object.length); - - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; - - if (_toString.call(pair) !== '[object Object]') return false; - - keys = Object.keys(pair); - - if (keys.length !== 1) return false; - - result[index] = [ keys[0], pair[keys[0]] ]; - } - - return true; -} - -function constructYamlPairs(data) { - if (data === null) return []; - - var index, length, pair, keys, result, - object = data; - - result = new Array(object.length); - - for (index = 0, length = object.length; index < length; index += 1) { - pair = object[index]; - - keys = Object.keys(pair); - - result[index] = [ keys[0], pair[keys[0]] ]; - } - - return result; -} - -module.exports = new Type('tag:yaml.org,2002:pairs', { - kind: 'sequence', - resolve: resolveYamlPairs, - construct: constructYamlPairs -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/seq.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/seq.js deleted file mode 100644 index be8f77f28..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/seq.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var Type = require('../type'); - -module.exports = new Type('tag:yaml.org,2002:seq', { - kind: 'sequence', - construct: function (data) { return data !== null ? data : []; } -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/set.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/set.js deleted file mode 100644 index f885a329c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/set.js +++ /dev/null @@ -1,29 +0,0 @@ -'use strict'; - -var Type = require('../type'); - -var _hasOwnProperty = Object.prototype.hasOwnProperty; - -function resolveYamlSet(data) { - if (data === null) return true; - - var key, object = data; - - for (key in object) { - if (_hasOwnProperty.call(object, key)) { - if (object[key] !== null) return false; - } - } - - return true; -} - -function constructYamlSet(data) { - return data !== null ? data : {}; -} - -module.exports = new Type('tag:yaml.org,2002:set', { - kind: 'mapping', - resolve: resolveYamlSet, - construct: constructYamlSet -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/str.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/str.js deleted file mode 100644 index 27acc106c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/str.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -var Type = require('../type'); - -module.exports = new Type('tag:yaml.org,2002:str', { - kind: 'scalar', - construct: function (data) { return data !== null ? data : ''; } -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/timestamp.js b/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/timestamp.js deleted file mode 100644 index 8fa9c5865..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +++ /dev/null @@ -1,88 +0,0 @@ -'use strict'; - -var Type = require('../type'); - -var YAML_DATE_REGEXP = new RegExp( - '^([0-9][0-9][0-9][0-9])' + // [1] year - '-([0-9][0-9])' + // [2] month - '-([0-9][0-9])$'); // [3] day - -var YAML_TIMESTAMP_REGEXP = new RegExp( - '^([0-9][0-9][0-9][0-9])' + // [1] year - '-([0-9][0-9]?)' + // [2] month - '-([0-9][0-9]?)' + // [3] day - '(?:[Tt]|[ \\t]+)' + // ... - '([0-9][0-9]?)' + // [4] hour - ':([0-9][0-9])' + // [5] minute - ':([0-9][0-9])' + // [6] second - '(?:\\.([0-9]*))?' + // [7] fraction - '(?:[ \\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour - '(?::([0-9][0-9]))?))?$'); // [11] tz_minute - -function resolveYamlTimestamp(data) { - if (data === null) return false; - if (YAML_DATE_REGEXP.exec(data) !== null) return true; - if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true; - return false; -} - -function constructYamlTimestamp(data) { - var match, year, month, day, hour, minute, second, fraction = 0, - delta = null, tz_hour, tz_minute, date; - - match = YAML_DATE_REGEXP.exec(data); - if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data); - - if (match === null) throw new Error('Date resolve error'); - - // match: [1] year [2] month [3] day - - year = +(match[1]); - month = +(match[2]) - 1; // JS month starts with 0 - day = +(match[3]); - - if (!match[4]) { // no hour - return new Date(Date.UTC(year, month, day)); - } - - // match: [4] hour [5] minute [6] second [7] fraction - - hour = +(match[4]); - minute = +(match[5]); - second = +(match[6]); - - if (match[7]) { - fraction = match[7].slice(0, 3); - while (fraction.length < 3) { // milli-seconds - fraction += '0'; - } - fraction = +fraction; - } - - // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute - - if (match[9]) { - tz_hour = +(match[10]); - tz_minute = +(match[11] || 0); - delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds - if (match[9] === '-') delta = -delta; - } - - date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction)); - - if (delta) date.setTime(date.getTime() - delta); - - return date; -} - -function representYamlTimestamp(object /*, style*/) { - return object.toISOString(); -} - -module.exports = new Type('tag:yaml.org,2002:timestamp', { - kind: 'scalar', - resolve: resolveYamlTimestamp, - construct: constructYamlTimestamp, - instanceOf: Date, - represent: representYamlTimestamp -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/js-yaml/package.json b/fundamentals/bug-challenge-es6/node_modules/js-yaml/package.json deleted file mode 100644 index d791a183d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/js-yaml/package.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "_args": [ - [ - "js-yaml@3.x", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api" - ] - ], - "_from": "js-yaml@>=3.0.0 <4.0.0", - "_id": "js-yaml@3.7.0", - "_inCache": true, - "_installable": true, - "_location": "/js-yaml", - "_nodeVersion": "6.8.1", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/js-yaml-3.7.0.tgz_1478914323559_0.38230896391905844" - }, - "_npmUser": { - "email": "vitaly@rcdesign.ru", - "name": "vitaly" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "js-yaml", - "raw": "js-yaml@3.x", - "rawSpec": "3.x", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul", - "/istanbul-api" - ], - "_resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "_shasum": "5c967ddd837a9bfdca5f2de84253abe8a1c03b80", - "_shrinkwrap": null, - "_spec": "js-yaml@3.x", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api", - "author": { - "email": "dervus.grim@gmail.com", - "name": "Vladimir Zapparov" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - }, - "bugs": { - "url": "https://github.com/nodeca/js-yaml/issues" - }, - "contributors": [ - { - "email": "ixti@member.fsf.org", - "name": "Aleksey V Zapparov", - "url": "http://www.ixti.net/" - }, - { - "email": "vitaly@rcdesign.ru", - "name": "Vitaly Puzrin", - "url": "https://github.com/puzrin" - }, - { - "email": "martin.grenfell@gmail.com", - "name": "Martin Grenfell", - "url": "http://got-ravings.blogspot.com" - } - ], - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^2.6.0" - }, - "description": "YAML 1.2 parser and serializer", - "devDependencies": { - "ansi": "*", - "benchmark": "*", - "browserify": "^13.0.0", - "codemirror": "^5.13.4", - "eslint": "^2.8.0", - "istanbul": "*", - "mocha": "*", - "uglify-js": "^2.6.1" - }, - "directories": {}, - "dist": { - "shasum": "5c967ddd837a9bfdca5f2de84253abe8a1c03b80", - "tarball": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz" - }, - "files": [ - "index.js", - "lib/", - "bin/", - "dist/" - ], - "gitHead": "279655fa5ad46d17117f60680fa3b46a0b5391c5", - "homepage": "https://github.com/nodeca/js-yaml", - "keywords": [ - "yaml", - "parser", - "serializer", - "pyyaml" - ], - "license": "MIT", - "maintainers": [ - { - "email": "vitaly@rcdesign.ru", - "name": "vitaly" - } - ], - "name": "js-yaml", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/nodeca/js-yaml.git" - }, - "scripts": { - "test": "make test" - }, - "version": "3.7.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jsbn/.npmignore b/fundamentals/bug-challenge-es6/node_modules/jsbn/.npmignore deleted file mode 100644 index 28f1ba756..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsbn/.npmignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -.DS_Store \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jsbn/LICENSE b/fundamentals/bug-challenge-es6/node_modules/jsbn/LICENSE deleted file mode 100644 index 2a6457e9e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsbn/LICENSE +++ /dev/null @@ -1,40 +0,0 @@ -Licensing ---------- - -This software is covered under the following copyright: - -/* - * Copyright (c) 2003-2005 Tom Wu - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER - * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF - * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * In addition, the following condition applies: - * - * All redistributions must retain an intact copy of this copyright notice - * and disclaimer. - */ - -Address all questions regarding this license to: - - Tom Wu - tjw@cs.Stanford.EDU \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jsbn/README.md b/fundamentals/bug-challenge-es6/node_modules/jsbn/README.md deleted file mode 100644 index 7aac67f53..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsbn/README.md +++ /dev/null @@ -1,175 +0,0 @@ -# jsbn: javascript big number - -[Tom Wu's Original Website](http://www-cs-students.stanford.edu/~tjw/jsbn/) - -I felt compelled to put this on github and publish to npm. I haven't tested every other big integer library out there, but the few that I have tested in comparison to this one have not even come close in performance. I am aware of the `bi` module on npm, however it has been modified and I wanted to publish the original without modifications. This is jsbn and jsbn2 from Tom Wu's original website above, with the modular pattern applied to prevent global leaks and to allow for use with node.js on the server side. - -## usage - - var BigInteger = require('jsbn'); - - var a = new BigInteger('91823918239182398123'); - alert(a.bitLength()); // 67 - - -## API - -### bi.toString() - -returns the base-10 number as a string - -### bi.negate() - -returns a new BigInteger equal to the negation of `bi` - -### bi.abs - -returns new BI of absolute value - -### bi.compareTo - - - -### bi.bitLength - - - -### bi.mod - - - -### bi.modPowInt - - - -### bi.clone - - - -### bi.intValue - - - -### bi.byteValue - - - -### bi.shortValue - - - -### bi.signum - - - -### bi.toByteArray - - - -### bi.equals - - - -### bi.min - - - -### bi.max - - - -### bi.and - - - -### bi.or - - - -### bi.xor - - - -### bi.andNot - - - -### bi.not - - - -### bi.shiftLeft - - - -### bi.shiftRight - - - -### bi.getLowestSetBit - - - -### bi.bitCount - - - -### bi.testBit - - - -### bi.setBit - - - -### bi.clearBit - - - -### bi.flipBit - - - -### bi.add - - - -### bi.subtract - - - -### bi.multiply - - - -### bi.divide - - - -### bi.remainder - - - -### bi.divideAndRemainder - - - -### bi.modPow - - - -### bi.modInverse - - - -### bi.pow - - - -### bi.gcd - - - -### bi.isProbablePrime - - diff --git a/fundamentals/bug-challenge-es6/node_modules/jsbn/example.html b/fundamentals/bug-challenge-es6/node_modules/jsbn/example.html deleted file mode 100644 index 7c26a5665..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsbn/example.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jsbn/example.js b/fundamentals/bug-challenge-es6/node_modules/jsbn/example.js deleted file mode 100644 index 664c1b455..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsbn/example.js +++ /dev/null @@ -1,3 +0,0 @@ -var BigInteger = require('./'); -var a = new BigInteger('91823918239182398123'); -console.log(a.bitLength()); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/jsbn/index.js b/fundamentals/bug-challenge-es6/node_modules/jsbn/index.js deleted file mode 100644 index e32fe13d8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsbn/index.js +++ /dev/null @@ -1,1358 +0,0 @@ -(function(){ - - // Copyright (c) 2005 Tom Wu - // All Rights Reserved. - // See "LICENSE" for details. - - // Basic JavaScript BN library - subset useful for RSA encryption. - - // Bits per digit - var dbits; - - // JavaScript engine analysis - var canary = 0xdeadbeefcafe; - var j_lm = ((canary&0xffffff)==0xefcafe); - - // (public) Constructor - function BigInteger(a,b,c) { - if(a != null) - if("number" == typeof a) this.fromNumber(a,b,c); - else if(b == null && "string" != typeof a) this.fromString(a,256); - else this.fromString(a,b); - } - - // return new, unset BigInteger - function nbi() { return new BigInteger(null); } - - // am: Compute w_j += (x*this_i), propagate carries, - // c is initial carry, returns final carry. - // c < 3*dvalue, x < 2*dvalue, this_i < dvalue - // We need to select the fastest one that works in this environment. - - // am1: use a single mult and divide to get the high bits, - // max digit bits should be 26 because - // max internal value = 2*dvalue^2-2*dvalue (< 2^53) - function am1(i,x,w,j,c,n) { - while(--n >= 0) { - var v = x*this[i++]+w[j]+c; - c = Math.floor(v/0x4000000); - w[j++] = v&0x3ffffff; - } - return c; - } - // am2 avoids a big mult-and-extract completely. - // Max digit bits should be <= 30 because we do bitwise ops - // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) - function am2(i,x,w,j,c,n) { - var xl = x&0x7fff, xh = x>>15; - while(--n >= 0) { - var l = this[i]&0x7fff; - var h = this[i++]>>15; - var m = xh*l+h*xl; - l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff); - c = (l>>>30)+(m>>>15)+xh*h+(c>>>30); - w[j++] = l&0x3fffffff; - } - return c; - } - // Alternately, set max digit bits to 28 since some - // browsers slow down when dealing with 32-bit numbers. - function am3(i,x,w,j,c,n) { - var xl = x&0x3fff, xh = x>>14; - while(--n >= 0) { - var l = this[i]&0x3fff; - var h = this[i++]>>14; - var m = xh*l+h*xl; - l = xl*l+((m&0x3fff)<<14)+w[j]+c; - c = (l>>28)+(m>>14)+xh*h; - w[j++] = l&0xfffffff; - } - return c; - } - var inBrowser = typeof navigator !== "undefined"; - if(inBrowser && j_lm && (navigator.appName == "Microsoft Internet Explorer")) { - BigInteger.prototype.am = am2; - dbits = 30; - } - else if(inBrowser && j_lm && (navigator.appName != "Netscape")) { - BigInteger.prototype.am = am1; - dbits = 26; - } - else { // Mozilla/Netscape seems to prefer am3 - BigInteger.prototype.am = am3; - dbits = 28; - } - - BigInteger.prototype.DB = dbits; - BigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i]; - r.t = this.t; - r.s = this.s; - } - - // (protected) set from integer value x, -DV <= x < DV - function bnpFromInt(x) { - this.t = 1; - this.s = (x<0)?-1:0; - if(x > 0) this[0] = x; - else if(x < -1) this[0] = x+this.DV; - else this.t = 0; - } - - // return bigint initialized to value - function nbv(i) { var r = nbi(); r.fromInt(i); return r; } - - // (protected) set from string and radix - function bnpFromString(s,b) { - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 256) k = 8; // byte array - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else { this.fromRadix(s,b); return; } - this.t = 0; - this.s = 0; - var i = s.length, mi = false, sh = 0; - while(--i >= 0) { - var x = (k==8)?s[i]&0xff:intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-") mi = true; - continue; - } - mi = false; - if(sh == 0) - this[this.t++] = x; - else if(sh+k > this.DB) { - this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh)); - } - else - this[this.t-1] |= x<= this.DB) sh -= this.DB; - } - if(k == 8 && (s[0]&0x80) != 0) { - this.s = -1; - if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t; - } - - // (public) return string representation in given radix - function bnToString(b) { - if(this.s < 0) return "-"+this.negate().toString(b); - var k; - if(b == 16) k = 4; - else if(b == 8) k = 3; - else if(b == 2) k = 1; - else if(b == 32) k = 5; - else if(b == 4) k = 2; - else return this.toRadix(b); - var km = (1< 0) { - if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); } - while(i >= 0) { - if(p < k) { - d = (this[i]&((1<>(p+=this.DB-k); - } - else { - d = (this[i]>>(p-=k))&km; - if(p <= 0) { p += this.DB; --i; } - } - if(d > 0) m = true; - if(m) r += int2char(d); - } - } - return m?r:"0"; - } - - // (public) -this - function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; } - - // (public) |this| - function bnAbs() { return (this.s<0)?this.negate():this; } - - // (public) return + if this > a, - if this < a, 0 if equal - function bnCompareTo(a) { - var r = this.s-a.s; - if(r != 0) return r; - var i = this.t; - r = i-a.t; - if(r != 0) return (this.s<0)?-r:r; - while(--i >= 0) if((r=this[i]-a[i]) != 0) return r; - return 0; - } - - // returns bit length of the integer x - function nbits(x) { - var r = 1, t; - if((t=x>>>16) != 0) { x = t; r += 16; } - if((t=x>>8) != 0) { x = t; r += 8; } - if((t=x>>4) != 0) { x = t; r += 4; } - if((t=x>>2) != 0) { x = t; r += 2; } - if((t=x>>1) != 0) { x = t; r += 1; } - return r; - } - - // (public) return the number of bits in "this" - function bnBitLength() { - if(this.t <= 0) return 0; - return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM)); - } - - // (protected) r = this << n*DB - function bnpDLShiftTo(n,r) { - var i; - for(i = this.t-1; i >= 0; --i) r[i+n] = this[i]; - for(i = n-1; i >= 0; --i) r[i] = 0; - r.t = this.t+n; - r.s = this.s; - } - - // (protected) r = this >> n*DB - function bnpDRShiftTo(n,r) { - for(var i = n; i < this.t; ++i) r[i-n] = this[i]; - r.t = Math.max(this.t-n,0); - r.s = this.s; - } - - // (protected) r = this << n - function bnpLShiftTo(n,r) { - var bs = n%this.DB; - var cbs = this.DB-bs; - var bm = (1<= 0; --i) { - r[i+ds+1] = (this[i]>>cbs)|c; - c = (this[i]&bm)<= 0; --i) r[i] = 0; - r[ds] = c; - r.t = this.t+ds+1; - r.s = this.s; - r.clamp(); - } - - // (protected) r = this >> n - function bnpRShiftTo(n,r) { - r.s = this.s; - var ds = Math.floor(n/this.DB); - if(ds >= this.t) { r.t = 0; return; } - var bs = n%this.DB; - var cbs = this.DB-bs; - var bm = (1<>bs; - for(var i = ds+1; i < this.t; ++i) { - r[i-ds-1] |= (this[i]&bm)<>bs; - } - if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB; - } - if(a.t < this.t) { - c -= a.s; - while(i < this.t) { - c += this[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while(i < a.t) { - c -= a[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c -= a.s; - } - r.s = (c<0)?-1:0; - if(c < -1) r[i++] = this.DV+c; - else if(c > 0) r[i++] = c; - r.t = i; - r.clamp(); - } - - // (protected) r = this * a, r != this,a (HAC 14.12) - // "this" should be the larger one if appropriate. - function bnpMultiplyTo(a,r) { - var x = this.abs(), y = a.abs(); - var i = x.t; - r.t = i+y.t; - while(--i >= 0) r[i] = 0; - for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t); - r.s = 0; - r.clamp(); - if(this.s != a.s) BigInteger.ZERO.subTo(r,r); - } - - // (protected) r = this^2, r != this (HAC 14.16) - function bnpSquareTo(r) { - var x = this.abs(); - var i = r.t = 2*x.t; - while(--i >= 0) r[i] = 0; - for(i = 0; i < x.t-1; ++i) { - var c = x.am(i,x[i],r,2*i,0,1); - if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) { - r[i+x.t] -= x.DV; - r[i+x.t+1] = 1; - } - } - if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1); - r.s = 0; - r.clamp(); - } - - // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) - // r != q, this != m. q or r may be null. - function bnpDivRemTo(m,q,r) { - var pm = m.abs(); - if(pm.t <= 0) return; - var pt = this.abs(); - if(pt.t < pm.t) { - if(q != null) q.fromInt(0); - if(r != null) this.copyTo(r); - return; - } - if(r == null) r = nbi(); - var y = nbi(), ts = this.s, ms = m.s; - var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus - if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); } - else { pm.copyTo(y); pt.copyTo(r); } - var ys = y.t; - var y0 = y[ys-1]; - if(y0 == 0) return; - var yt = y0*(1<1)?y[ys-2]>>this.F2:0); - var d1 = this.FV/yt, d2 = (1<= 0) { - r[r.t++] = 1; - r.subTo(t,r); - } - BigInteger.ONE.dlShiftTo(ys,t); - t.subTo(y,y); // "negative" y so we can replace sub with am later - while(y.t < ys) y[y.t++] = 0; - while(--j >= 0) { - // Estimate quotient digit - var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2); - if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out - y.dlShiftTo(j,t); - r.subTo(t,r); - while(r[i] < --qd) r.subTo(t,r); - } - } - if(q != null) { - r.drShiftTo(ys,q); - if(ts != ms) BigInteger.ZERO.subTo(q,q); - } - r.t = ys; - r.clamp(); - if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder - if(ts < 0) BigInteger.ZERO.subTo(r,r); - } - - // (public) this mod a - function bnMod(a) { - var r = nbi(); - this.abs().divRemTo(a,null,r); - if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r); - return r; - } - - // Modular reduction using "classic" algorithm - function Classic(m) { this.m = m; } - function cConvert(x) { - if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m); - else return x; - } - function cRevert(x) { return x; } - function cReduce(x) { x.divRemTo(this.m,null,x); } - function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - - Classic.prototype.convert = cConvert; - Classic.prototype.revert = cRevert; - Classic.prototype.reduce = cReduce; - Classic.prototype.mulTo = cMulTo; - Classic.prototype.sqrTo = cSqrTo; - - // (protected) return "-1/this % 2^DB"; useful for Mont. reduction - // justification: - // xy == 1 (mod m) - // xy = 1+km - // xy(2-xy) = (1+km)(1-km) - // x[y(2-xy)] = 1-k^2m^2 - // x[y(2-xy)] == 1 (mod m^2) - // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 - // should reduce x and y(2-xy) by m^2 at each step to keep size bounded. - // JS multiply "overflows" differently from C/C++, so care is needed here. - function bnpInvDigit() { - if(this.t < 1) return 0; - var x = this[0]; - if((x&1) == 0) return 0; - var y = x&3; // y == 1/x mod 2^2 - y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4 - y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8 - y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16 - // last step - calculate inverse mod DV directly; - // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints - y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits - // we really want the negative inverse, and -DV < y < DV - return (y>0)?this.DV-y:-y; - } - - // Montgomery reduction - function Montgomery(m) { - this.m = m; - this.mp = m.invDigit(); - this.mpl = this.mp&0x7fff; - this.mph = this.mp>>15; - this.um = (1<<(m.DB-15))-1; - this.mt2 = 2*m.t; - } - - // xR mod m - function montConvert(x) { - var r = nbi(); - x.abs().dlShiftTo(this.m.t,r); - r.divRemTo(this.m,null,r); - if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r); - return r; - } - - // x/R mod m - function montRevert(x) { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; - } - - // x = x/R mod m (HAC 14.32) - function montReduce(x) { - while(x.t <= this.mt2) // pad x so am has enough room later - x[x.t++] = 0; - for(var i = 0; i < this.m.t; ++i) { - // faster way of calculating u0 = x[i]*mp mod DV - var j = x[i]&0x7fff; - var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM; - // use am to combine the multiply-shift-add into one call - j = i+this.m.t; - x[j] += this.m.am(0,u0,x,i,0,this.m.t); - // propagate carry - while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; } - } - x.clamp(); - x.drShiftTo(this.m.t,x); - if(x.compareTo(this.m) >= 0) x.subTo(this.m,x); - } - - // r = "x^2/R mod m"; x != r - function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - - // r = "xy/R mod m"; x,y != r - function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - - Montgomery.prototype.convert = montConvert; - Montgomery.prototype.revert = montRevert; - Montgomery.prototype.reduce = montReduce; - Montgomery.prototype.mulTo = montMulTo; - Montgomery.prototype.sqrTo = montSqrTo; - - // (protected) true iff this is even - function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; } - - // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) - function bnpExp(e,z) { - if(e > 0xffffffff || e < 1) return BigInteger.ONE; - var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1; - g.copyTo(r); - while(--i >= 0) { - z.sqrTo(r,r2); - if((e&(1< 0) z.mulTo(r2,g,r); - else { var t = r; r = r2; r2 = t; } - } - return z.revert(r); - } - - // (public) this^e % m, 0 <= e < 2^32 - function bnModPowInt(e,m) { - var z; - if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m); - return this.exp(e,z); - } - - // protected - BigInteger.prototype.copyTo = bnpCopyTo; - BigInteger.prototype.fromInt = bnpFromInt; - BigInteger.prototype.fromString = bnpFromString; - BigInteger.prototype.clamp = bnpClamp; - BigInteger.prototype.dlShiftTo = bnpDLShiftTo; - BigInteger.prototype.drShiftTo = bnpDRShiftTo; - BigInteger.prototype.lShiftTo = bnpLShiftTo; - BigInteger.prototype.rShiftTo = bnpRShiftTo; - BigInteger.prototype.subTo = bnpSubTo; - BigInteger.prototype.multiplyTo = bnpMultiplyTo; - BigInteger.prototype.squareTo = bnpSquareTo; - BigInteger.prototype.divRemTo = bnpDivRemTo; - BigInteger.prototype.invDigit = bnpInvDigit; - BigInteger.prototype.isEven = bnpIsEven; - BigInteger.prototype.exp = bnpExp; - - // public - BigInteger.prototype.toString = bnToString; - BigInteger.prototype.negate = bnNegate; - BigInteger.prototype.abs = bnAbs; - BigInteger.prototype.compareTo = bnCompareTo; - BigInteger.prototype.bitLength = bnBitLength; - BigInteger.prototype.mod = bnMod; - BigInteger.prototype.modPowInt = bnModPowInt; - - // "constants" - BigInteger.ZERO = nbv(0); - BigInteger.ONE = nbv(1); - - // Copyright (c) 2005-2009 Tom Wu - // All Rights Reserved. - // See "LICENSE" for details. - - // Extended JavaScript BN functions, required for RSA private ops. - - // Version 1.1: new BigInteger("0", 10) returns "proper" zero - // Version 1.2: square() API, isProbablePrime fix - - // (public) - function bnClone() { var r = nbi(); this.copyTo(r); return r; } - - // (public) return value as integer - function bnIntValue() { - if(this.s < 0) { - if(this.t == 1) return this[0]-this.DV; - else if(this.t == 0) return -1; - } - else if(this.t == 1) return this[0]; - else if(this.t == 0) return 0; - // assumes 16 < DB < 32 - return ((this[1]&((1<<(32-this.DB))-1))<>24; } - - // (public) return value as short (assumes DB>=16) - function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; } - - // (protected) return x s.t. r^x < DV - function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); } - - // (public) 0 if this == 0, 1 if this > 0 - function bnSigNum() { - if(this.s < 0) return -1; - else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0; - else return 1; - } - - // (protected) convert to radix string - function bnpToRadix(b) { - if(b == null) b = 10; - if(this.signum() == 0 || b < 2 || b > 36) return "0"; - var cs = this.chunkSize(b); - var a = Math.pow(b,cs); - var d = nbv(a), y = nbi(), z = nbi(), r = ""; - this.divRemTo(d,y,z); - while(y.signum() > 0) { - r = (a+z.intValue()).toString(b).substr(1) + r; - y.divRemTo(d,y,z); - } - return z.intValue().toString(b) + r; - } - - // (protected) convert from radix string - function bnpFromRadix(s,b) { - this.fromInt(0); - if(b == null) b = 10; - var cs = this.chunkSize(b); - var d = Math.pow(b,cs), mi = false, j = 0, w = 0; - for(var i = 0; i < s.length; ++i) { - var x = intAt(s,i); - if(x < 0) { - if(s.charAt(i) == "-" && this.signum() == 0) mi = true; - continue; - } - w = b*w+x; - if(++j >= cs) { - this.dMultiply(d); - this.dAddOffset(w,0); - j = 0; - w = 0; - } - } - if(j > 0) { - this.dMultiply(Math.pow(b,j)); - this.dAddOffset(w,0); - } - if(mi) BigInteger.ZERO.subTo(this,this); - } - - // (protected) alternate constructor - function bnpFromNumber(a,b,c) { - if("number" == typeof b) { - // new BigInteger(int,int,RNG) - if(a < 2) this.fromInt(1); - else { - this.fromNumber(a,c); - if(!this.testBit(a-1)) // force MSB set - this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this); - if(this.isEven()) this.dAddOffset(1,0); // force odd - while(!this.isProbablePrime(b)) { - this.dAddOffset(2,0); - if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this); - } - } - } - else { - // new BigInteger(int,RNG) - var x = new Array(), t = a&7; - x.length = (a>>3)+1; - b.nextBytes(x); - if(t > 0) x[0] &= ((1< 0) { - if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p) - r[k++] = d|(this.s<<(this.DB-p)); - while(i >= 0) { - if(p < 8) { - d = (this[i]&((1<>(p+=this.DB-8); - } - else { - d = (this[i]>>(p-=8))&0xff; - if(p <= 0) { p += this.DB; --i; } - } - if((d&0x80) != 0) d |= -256; - if(k == 0 && (this.s&0x80) != (d&0x80)) ++k; - if(k > 0 || d != this.s) r[k++] = d; - } - } - return r; - } - - function bnEquals(a) { return(this.compareTo(a)==0); } - function bnMin(a) { return(this.compareTo(a)<0)?this:a; } - function bnMax(a) { return(this.compareTo(a)>0)?this:a; } - - // (protected) r = this op a (bitwise) - function bnpBitwiseTo(a,op,r) { - var i, f, m = Math.min(a.t,this.t); - for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]); - if(a.t < this.t) { - f = a.s&this.DM; - for(i = m; i < this.t; ++i) r[i] = op(this[i],f); - r.t = this.t; - } - else { - f = this.s&this.DM; - for(i = m; i < a.t; ++i) r[i] = op(f,a[i]); - r.t = a.t; - } - r.s = op(this.s,a.s); - r.clamp(); - } - - // (public) this & a - function op_and(x,y) { return x&y; } - function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; } - - // (public) this | a - function op_or(x,y) { return x|y; } - function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; } - - // (public) this ^ a - function op_xor(x,y) { return x^y; } - function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; } - - // (public) this & ~a - function op_andnot(x,y) { return x&~y; } - function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; } - - // (public) ~this - function bnNot() { - var r = nbi(); - for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i]; - r.t = this.t; - r.s = ~this.s; - return r; - } - - // (public) this << n - function bnShiftLeft(n) { - var r = nbi(); - if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r); - return r; - } - - // (public) this >> n - function bnShiftRight(n) { - var r = nbi(); - if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r); - return r; - } - - // return index of lowest 1-bit in x, x < 2^31 - function lbit(x) { - if(x == 0) return -1; - var r = 0; - if((x&0xffff) == 0) { x >>= 16; r += 16; } - if((x&0xff) == 0) { x >>= 8; r += 8; } - if((x&0xf) == 0) { x >>= 4; r += 4; } - if((x&3) == 0) { x >>= 2; r += 2; } - if((x&1) == 0) ++r; - return r; - } - - // (public) returns index of lowest 1-bit (or -1 if none) - function bnGetLowestSetBit() { - for(var i = 0; i < this.t; ++i) - if(this[i] != 0) return i*this.DB+lbit(this[i]); - if(this.s < 0) return this.t*this.DB; - return -1; - } - - // return number of 1 bits in x - function cbit(x) { - var r = 0; - while(x != 0) { x &= x-1; ++r; } - return r; - } - - // (public) return number of set bits - function bnBitCount() { - var r = 0, x = this.s&this.DM; - for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x); - return r; - } - - // (public) true iff nth bit is set - function bnTestBit(n) { - var j = Math.floor(n/this.DB); - if(j >= this.t) return(this.s!=0); - return((this[j]&(1<<(n%this.DB)))!=0); - } - - // (protected) this op (1<>= this.DB; - } - if(a.t < this.t) { - c += a.s; - while(i < this.t) { - c += this[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while(i < a.t) { - c += a[i]; - r[i++] = c&this.DM; - c >>= this.DB; - } - c += a.s; - } - r.s = (c<0)?-1:0; - if(c > 0) r[i++] = c; - else if(c < -1) r[i++] = this.DV+c; - r.t = i; - r.clamp(); - } - - // (public) this + a - function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; } - - // (public) this - a - function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; } - - // (public) this * a - function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; } - - // (public) this^2 - function bnSquare() { var r = nbi(); this.squareTo(r); return r; } - - // (public) this / a - function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; } - - // (public) this % a - function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; } - - // (public) [this/a,this%a] - function bnDivideAndRemainder(a) { - var q = nbi(), r = nbi(); - this.divRemTo(a,q,r); - return new Array(q,r); - } - - // (protected) this *= n, this >= 0, 1 < n < DV - function bnpDMultiply(n) { - this[this.t] = this.am(0,n-1,this,0,0,this.t); - ++this.t; - this.clamp(); - } - - // (protected) this += n << w words, this >= 0 - function bnpDAddOffset(n,w) { - if(n == 0) return; - while(this.t <= w) this[this.t++] = 0; - this[w] += n; - while(this[w] >= this.DV) { - this[w] -= this.DV; - if(++w >= this.t) this[this.t++] = 0; - ++this[w]; - } - } - - // A "null" reducer - function NullExp() {} - function nNop(x) { return x; } - function nMulTo(x,y,r) { x.multiplyTo(y,r); } - function nSqrTo(x,r) { x.squareTo(r); } - - NullExp.prototype.convert = nNop; - NullExp.prototype.revert = nNop; - NullExp.prototype.mulTo = nMulTo; - NullExp.prototype.sqrTo = nSqrTo; - - // (public) this^e - function bnPow(e) { return this.exp(e,new NullExp()); } - - // (protected) r = lower n words of "this * a", a.t <= n - // "this" should be the larger one if appropriate. - function bnpMultiplyLowerTo(a,n,r) { - var i = Math.min(this.t+a.t,n); - r.s = 0; // assumes a,this >= 0 - r.t = i; - while(i > 0) r[--i] = 0; - var j; - for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t); - for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i); - r.clamp(); - } - - // (protected) r = "this * a" without lower n words, n > 0 - // "this" should be the larger one if appropriate. - function bnpMultiplyUpperTo(a,n,r) { - --n; - var i = r.t = this.t+a.t-n; - r.s = 0; // assumes a,this >= 0 - while(--i >= 0) r[i] = 0; - for(i = Math.max(n-this.t,0); i < a.t; ++i) - r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n); - r.clamp(); - r.drShiftTo(1,r); - } - - // Barrett modular reduction - function Barrett(m) { - // setup Barrett - this.r2 = nbi(); - this.q3 = nbi(); - BigInteger.ONE.dlShiftTo(2*m.t,this.r2); - this.mu = this.r2.divide(m); - this.m = m; - } - - function barrettConvert(x) { - if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m); - else if(x.compareTo(this.m) < 0) return x; - else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; } - } - - function barrettRevert(x) { return x; } - - // x = x mod m (HAC 14.42) - function barrettReduce(x) { - x.drShiftTo(this.m.t-1,this.r2); - if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); } - this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3); - this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2); - while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1); - x.subTo(this.r2,x); - while(x.compareTo(this.m) >= 0) x.subTo(this.m,x); - } - - // r = x^2 mod m; x != r - function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); } - - // r = x*y mod m; x,y != r - function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); } - - Barrett.prototype.convert = barrettConvert; - Barrett.prototype.revert = barrettRevert; - Barrett.prototype.reduce = barrettReduce; - Barrett.prototype.mulTo = barrettMulTo; - Barrett.prototype.sqrTo = barrettSqrTo; - - // (public) this^e % m (HAC 14.85) - function bnModPow(e,m) { - var i = e.bitLength(), k, r = nbv(1), z; - if(i <= 0) return r; - else if(i < 18) k = 1; - else if(i < 48) k = 3; - else if(i < 144) k = 4; - else if(i < 768) k = 5; - else k = 6; - if(i < 8) - z = new Classic(m); - else if(m.isEven()) - z = new Barrett(m); - else - z = new Montgomery(m); - - // precomputation - var g = new Array(), n = 3, k1 = k-1, km = (1< 1) { - var g2 = nbi(); - z.sqrTo(g[1],g2); - while(n <= km) { - g[n] = nbi(); - z.mulTo(g2,g[n-2],g[n]); - n += 2; - } - } - - var j = e.t-1, w, is1 = true, r2 = nbi(), t; - i = nbits(e[j])-1; - while(j >= 0) { - if(i >= k1) w = (e[j]>>(i-k1))&km; - else { - w = (e[j]&((1<<(i+1))-1))<<(k1-i); - if(j > 0) w |= e[j-1]>>(this.DB+i-k1); - } - - n = k; - while((w&1) == 0) { w >>= 1; --n; } - if((i -= n) < 0) { i += this.DB; --j; } - if(is1) { // ret == 1, don't bother squaring or multiplying it - g[w].copyTo(r); - is1 = false; - } - else { - while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; } - if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; } - z.mulTo(r2,g[w],r); - } - - while(j >= 0 && (e[j]&(1< 0) { - x.rShiftTo(g,x); - y.rShiftTo(g,y); - } - while(x.signum() > 0) { - if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x); - if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y); - if(x.compareTo(y) >= 0) { - x.subTo(y,x); - x.rShiftTo(1,x); - } - else { - y.subTo(x,y); - y.rShiftTo(1,y); - } - } - if(g > 0) y.lShiftTo(g,y); - return y; - } - - // (protected) this % n, n < 2^26 - function bnpModInt(n) { - if(n <= 0) return 0; - var d = this.DV%n, r = (this.s<0)?n-1:0; - if(this.t > 0) - if(d == 0) r = this[0]%n; - else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n; - return r; - } - - // (public) 1/this % m (HAC 14.61) - function bnModInverse(m) { - var ac = m.isEven(); - if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO; - var u = m.clone(), v = this.clone(); - var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1); - while(u.signum() != 0) { - while(u.isEven()) { - u.rShiftTo(1,u); - if(ac) { - if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); } - a.rShiftTo(1,a); - } - else if(!b.isEven()) b.subTo(m,b); - b.rShiftTo(1,b); - } - while(v.isEven()) { - v.rShiftTo(1,v); - if(ac) { - if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); } - c.rShiftTo(1,c); - } - else if(!d.isEven()) d.subTo(m,d); - d.rShiftTo(1,d); - } - if(u.compareTo(v) >= 0) { - u.subTo(v,u); - if(ac) a.subTo(c,a); - b.subTo(d,b); - } - else { - v.subTo(u,v); - if(ac) c.subTo(a,c); - d.subTo(b,d); - } - } - if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO; - if(d.compareTo(m) >= 0) return d.subtract(m); - if(d.signum() < 0) d.addTo(m,d); else return d; - if(d.signum() < 0) return d.add(m); else return d; - } - - var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997]; - var lplim = (1<<26)/lowprimes[lowprimes.length-1]; - - // (public) test primality with certainty >= 1-.5^t - function bnIsProbablePrime(t) { - var i, x = this.abs(); - if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) { - for(i = 0; i < lowprimes.length; ++i) - if(x[0] == lowprimes[i]) return true; - return false; - } - if(x.isEven()) return false; - i = 1; - while(i < lowprimes.length) { - var m = lowprimes[i], j = i+1; - while(j < lowprimes.length && m < lplim) m *= lowprimes[j++]; - m = x.modInt(m); - while(i < j) if(m%lowprimes[i++] == 0) return false; - } - return x.millerRabin(t); - } - - // (protected) true if probably prime (HAC 4.24, Miller-Rabin) - function bnpMillerRabin(t) { - var n1 = this.subtract(BigInteger.ONE); - var k = n1.getLowestSetBit(); - if(k <= 0) return false; - var r = n1.shiftRight(k); - t = (t+1)>>1; - if(t > lowprimes.length) t = lowprimes.length; - var a = nbi(); - for(var i = 0; i < t; ++i) { - //Pick bases at random, instead of starting at 2 - a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]); - var y = a.modPow(r,this); - if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { - var j = 1; - while(j++ < k && y.compareTo(n1) != 0) { - y = y.modPowInt(2,this); - if(y.compareTo(BigInteger.ONE) == 0) return false; - } - if(y.compareTo(n1) != 0) return false; - } - } - return true; - } - - // protected - BigInteger.prototype.chunkSize = bnpChunkSize; - BigInteger.prototype.toRadix = bnpToRadix; - BigInteger.prototype.fromRadix = bnpFromRadix; - BigInteger.prototype.fromNumber = bnpFromNumber; - BigInteger.prototype.bitwiseTo = bnpBitwiseTo; - BigInteger.prototype.changeBit = bnpChangeBit; - BigInteger.prototype.addTo = bnpAddTo; - BigInteger.prototype.dMultiply = bnpDMultiply; - BigInteger.prototype.dAddOffset = bnpDAddOffset; - BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; - BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; - BigInteger.prototype.modInt = bnpModInt; - BigInteger.prototype.millerRabin = bnpMillerRabin; - - // public - BigInteger.prototype.clone = bnClone; - BigInteger.prototype.intValue = bnIntValue; - BigInteger.prototype.byteValue = bnByteValue; - BigInteger.prototype.shortValue = bnShortValue; - BigInteger.prototype.signum = bnSigNum; - BigInteger.prototype.toByteArray = bnToByteArray; - BigInteger.prototype.equals = bnEquals; - BigInteger.prototype.min = bnMin; - BigInteger.prototype.max = bnMax; - BigInteger.prototype.and = bnAnd; - BigInteger.prototype.or = bnOr; - BigInteger.prototype.xor = bnXor; - BigInteger.prototype.andNot = bnAndNot; - BigInteger.prototype.not = bnNot; - BigInteger.prototype.shiftLeft = bnShiftLeft; - BigInteger.prototype.shiftRight = bnShiftRight; - BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; - BigInteger.prototype.bitCount = bnBitCount; - BigInteger.prototype.testBit = bnTestBit; - BigInteger.prototype.setBit = bnSetBit; - BigInteger.prototype.clearBit = bnClearBit; - BigInteger.prototype.flipBit = bnFlipBit; - BigInteger.prototype.add = bnAdd; - BigInteger.prototype.subtract = bnSubtract; - BigInteger.prototype.multiply = bnMultiply; - BigInteger.prototype.divide = bnDivide; - BigInteger.prototype.remainder = bnRemainder; - BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder; - BigInteger.prototype.modPow = bnModPow; - BigInteger.prototype.modInverse = bnModInverse; - BigInteger.prototype.pow = bnPow; - BigInteger.prototype.gcd = bnGCD; - BigInteger.prototype.isProbablePrime = bnIsProbablePrime; - - // JSBN-specific extension - BigInteger.prototype.square = bnSquare; - - // Expose the Barrett function - BigInteger.prototype.Barrett = Barrett - - // BigInteger interfaces not implemented in jsbn: - - // BigInteger(int signum, byte[] magnitude) - // double doubleValue() - // float floatValue() - // int hashCode() - // long longValue() - // static BigInteger valueOf(long val) - - // Random number generator - requires a PRNG backend, e.g. prng4.js - - // For best results, put code like - // - // in your main HTML document. - - var rng_state; - var rng_pool; - var rng_pptr; - - // Mix in a 32-bit integer into the pool - function rng_seed_int(x) { - rng_pool[rng_pptr++] ^= x & 255; - rng_pool[rng_pptr++] ^= (x >> 8) & 255; - rng_pool[rng_pptr++] ^= (x >> 16) & 255; - rng_pool[rng_pptr++] ^= (x >> 24) & 255; - if(rng_pptr >= rng_psize) rng_pptr -= rng_psize; - } - - // Mix in the current time (w/milliseconds) into the pool - function rng_seed_time() { - rng_seed_int(new Date().getTime()); - } - - // Initialize the pool with junk if needed. - if(rng_pool == null) { - rng_pool = new Array(); - rng_pptr = 0; - var t; - if(typeof window !== "undefined" && window.crypto) { - if (window.crypto.getRandomValues) { - // Use webcrypto if available - var ua = new Uint8Array(32); - window.crypto.getRandomValues(ua); - for(t = 0; t < 32; ++t) - rng_pool[rng_pptr++] = ua[t]; - } - else if(navigator.appName == "Netscape" && navigator.appVersion < "5") { - // Extract entropy (256 bits) from NS4 RNG if available - var z = window.crypto.random(32); - for(t = 0; t < z.length; ++t) - rng_pool[rng_pptr++] = z.charCodeAt(t) & 255; - } - } - while(rng_pptr < rng_psize) { // extract some randomness from Math.random() - t = Math.floor(65536 * Math.random()); - rng_pool[rng_pptr++] = t >>> 8; - rng_pool[rng_pptr++] = t & 255; - } - rng_pptr = 0; - rng_seed_time(); - //rng_seed_int(window.screenX); - //rng_seed_int(window.screenY); - } - - function rng_get_byte() { - if(rng_state == null) { - rng_seed_time(); - rng_state = prng_newstate(); - rng_state.init(rng_pool); - for(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) - rng_pool[rng_pptr] = 0; - rng_pptr = 0; - //rng_pool = null; - } - // TODO: allow reseeding after first request - return rng_state.next(); - } - - function rng_get_bytes(ba) { - var i; - for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte(); - } - - function SecureRandom() {} - - SecureRandom.prototype.nextBytes = rng_get_bytes; - - // prng4.js - uses Arcfour as a PRNG - - function Arcfour() { - this.i = 0; - this.j = 0; - this.S = new Array(); - } - - // Initialize arcfour context from key, an array of ints, each from [0..255] - function ARC4init(key) { - var i, j, t; - for(i = 0; i < 256; ++i) - this.S[i] = i; - j = 0; - for(i = 0; i < 256; ++i) { - j = (j + this.S[i] + key[i % key.length]) & 255; - t = this.S[i]; - this.S[i] = this.S[j]; - this.S[j] = t; - } - this.i = 0; - this.j = 0; - } - - function ARC4next() { - var t; - this.i = (this.i + 1) & 255; - this.j = (this.j + this.S[this.i]) & 255; - t = this.S[this.i]; - this.S[this.i] = this.S[this.j]; - this.S[this.j] = t; - return this.S[(t + this.S[this.i]) & 255]; - } - - Arcfour.prototype.init = ARC4init; - Arcfour.prototype.next = ARC4next; - - // Plug in your RNG constructor here - function prng_newstate() { - return new Arcfour(); - } - - // Pool size must be a multiple of 4 and greater than 32. - // An array of bytes the size of the pool will be passed to init() - var rng_psize = 256; - - if (typeof exports !== 'undefined') { - exports = module.exports = { - BigInteger: BigInteger, - SecureRandom: SecureRandom, - }; - } else { - this.BigInteger = BigInteger; - this.SecureRandom = SecureRandom; - } - -}).call(this); diff --git a/fundamentals/bug-challenge-es6/node_modules/jsbn/package.json b/fundamentals/bug-challenge-es6/node_modules/jsbn/package.json deleted file mode 100644 index 7b0d47b99..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsbn/package.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "_args": [ - [ - "jsbn@~0.1.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/sshpk" - ] - ], - "_from": "jsbn@>=0.1.0 <0.2.0", - "_id": "jsbn@0.1.0", - "_inCache": true, - "_installable": true, - "_location": "/jsbn", - "_nodeVersion": "0.12.2", - "_npmUser": { - "email": "andyperlitch@gmail.com", - "name": "andyperlitch" - }, - "_npmVersion": "2.7.4", - "_phantomChildren": {}, - "_requested": { - "name": "jsbn", - "raw": "jsbn@~0.1.0", - "rawSpec": "~0.1.0", - "scope": null, - "spec": ">=0.1.0 <0.2.0", - "type": "range" - }, - "_requiredBy": [ - "/ecc-jsbn", - "/jodid25519", - "/sshpk" - ], - "_resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz", - "_shasum": "650987da0dd74f4ebf5a11377a2aa2d273e97dfd", - "_shrinkwrap": null, - "_spec": "jsbn@~0.1.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/sshpk", - "author": { - "name": "Tom Wu" - }, - "bugs": { - "url": "https://github.com/andyperlitch/jsbn/issues" - }, - "dependencies": {}, - "description": "The jsbn library is a fast, portable implementation of large-number math in pure JavaScript, enabling public-key crypto and other applications on desktop and mobile browsers.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "650987da0dd74f4ebf5a11377a2aa2d273e97dfd", - "tarball": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.0.tgz" - }, - "gitHead": "148a967b112806e63ddeeed78ee7938eef74c84a", - "homepage": "https://github.com/andyperlitch/jsbn", - "keywords": [ - "biginteger", - "bignumber", - "big", - "integer" - ], - "license": "BSD", - "main": "index.js", - "maintainers": [ - { - "email": "andyperlitch@gmail.com", - "name": "andyperlitch" - } - ], - "name": "jsbn", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/andyperlitch/jsbn.git" - }, - "scripts": { - "test": "mocha test.js" - }, - "version": "0.1.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jsdom/Changelog.md b/fundamentals/bug-challenge-es6/node_modules/jsdom/Changelog.md deleted file mode 100644 index 3889f6ad1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsdom/Changelog.md +++ /dev/null @@ -1,1254 +0,0 @@ -## 9.8.3 - -* Fixed syntax errors in node v4. - -## 9.8.2 - -* Fixed `DOMTokenList` and `getElementsByClassName` to only split on ASCII whitespace, not all Unicode whitespace. - -## 9.8.1 - -* Fixed an error that occurred when passing no class names to `getElementsByClassName`, e.g. `getElementsByClassName("")` or `getElementsByClassName(" ")`. - -## 9.8.0 - -* Added the `blob.isClosed` property. (TimothyGu) -* Fixed the `file.lastModified` property to be on `File` instead of on `Blob`. (TimothyGu) -* Fixed the `file.lastModified` property to default to the time of the `File` object's creation, not the time that the property is accessed. (TimothyGu) -* Fixed a minor edge-case regression where non-HTML elements with the name `"iframe"` became focusable in 9.7.0. - -## 9.7.1 - -* Fixed a performance regression introduced in 9.5.0 for modifying the DOM. It was particularly noticable during initial parsing of a document with many elements; for example, one test showed parsing ten thousand elements taking 36.4 seconds, whereas after this fix it is back to a more reasonable 0.4 seconds. - -## 9.7.0 - -* Added `EventListenerOptions` support to `addEventListener` and `removeEventListener`, including both the `once` and `capture` options. (GianlucaGuarini) -* Added `document.hasFocus()` (acusti) -* Fixed the focus management to ensure that focusing something inside an `iframe` will also focus the `iframe` itself (acusti) - -## 9.6.0 - -* Added `HTMLCollection.prototype[Symbol.iterator]`, so you can use `for`-`of` loops over `HTMLCollection`s now. (i8-pi) -* Fixed `file.lastModified` to return the current time as the default, instead of `0`. -* Fixed cloning of `Attr`s to properly clone the namespace prefix. -* Tweaked `XMLHttpRequest` progress event ordering slightly to better match the spec and browsers. -* Tweaked the behavior of calling `event.stopPropagation` and `event.stopImmediatePropagation` on already-dispatched events, per [the latest changes to the DOM Standard](https://github.com/whatwg/dom/commit/806d4aab584f6fc38c21f8e088b51b8ba3e27e20). - -## 9.5.0 - -* Added `document.scripts`, `document.embeds`, and `document.plugins`. -* Fixed `document.getElementsByTagName` and `document.getElementsByTagNameNS` to return `HTMLCollection`s instead of `NodeList`s, and to follow the spec algorithms more exactly. -* Fixed various `HTMLCollection`-returning getters such as `document.applets` or `table.cells` to be more spec-compliant. -* Fixed the resource loader to respect the `agent` and `agentClass` options, not just the `agentOptions` one. -* Fixed `console.groupCollapse` to be `console.groupCollapsed` (and changed the virtual console accordingly). - -## 9.4.5 - -* Fixed `"error"` events from failed resource loads going missing since 9.4.3. I really should have tested that release better. - -## 9.4.4 - -* Fixed a leftover `console.log` introduced in the error handling path in 9.4.3. - -## 9.4.3 - -* Fixed spurious `"jsdomError"`s occuring when closing a window, due to aborted resource loads. - -## 9.4.2 - -* Fixed what would happen when inline event handlers (such as `element.onclick`) would return non-boolean values (such as `undefined`); it would previously erroneously cancel the event, in many cases. (dmethvin) -* Upgraded the minimum tough-cookie version to ensure all installations are protected against [a security advisory](https://nodesecurity.io/advisories/130). - -## 9.4.1 - -* Implemented the cloning steps for `` elements, so that cloned inputs properly copy over their value, checkedness, dirty value flag, and dirty checkedness flag. (matthewp) - -## 9.4.0 - -* Added the `DOMParser` API. It is spec-compliant, including producing `` elements, except that the produced documents do not have the same URL as the creating document (they instead always have `"about:blank"`). -* Added strict XML parsing when using `parsingMode: "xml"`. Creating documents will now fail, just like in a browser, when ill-formed XHTML markup is used. -* Added some rudimentary application of XML ``. -* Updated `FormData` for [recent spec fixes](https://github.com/whatwg/xhr/commit/1a75845e67792418a7721d516266ad01a90f2062): blobs, files, and filenames should now all work like you'd expect. -* Updated the `FormData` constructor to use the proper, rather-complex, [constructing the form data set](https://html.spec.whatwg.org/multipage/forms.html#constructing-form-data-set) algorithm. -* Fixed all constructors that appears as globals on the jsdom `window` object to be non-enumerable. -* Fixed ` -``` - -For more details, see the discussion in [#640](https://github.com/tmpvar/jsdom/issues/640), especially [@matthewkastor](https://github.com/matthewkastor)'s [insightful comment](https://github.com/tmpvar/jsdom/issues/640#issuecomment-22216965). - -#### Listening for script errors during initialization - -Although it is easy to listen for script errors after initialization, via code like - -```js -var window = jsdom.jsdom(...).defaultView; -window.addEventListener("error", function (event) { - console.error("script error!!", event.error); -}); -``` - -it is often also desirable to listen for any script errors during initialization, or errors loading scripts passed to `jsdom.env`. To do this, use the virtual console feature, described in more detail later: - -```js -var virtualConsole = jsdom.createVirtualConsole(); -virtualConsole.on("jsdomError", function (error) { - console.error(error.stack, error.detail); -}); - -var window = jsdom.jsdom(..., { virtualConsole }).defaultView; -``` - -You also get this functionality for free by default if you use `virtualConsole.sendTo`; again, see more below: - -```js -var virtualConsole = jsdom.createVirtualConsole().sendTo(console); -var window = jsdom.jsdom(..., { virtualConsole }).defaultView; -``` - -### On running scripts and being safe - -By default, `jsdom.env` will not process and run external JavaScript, since our sandbox is not foolproof. That is, code running inside the DOM's ` -``` - -Then in both cases, you can simply replace native `JSON` calls with `JSON5`: - -```js -var obj = JSON5.parse('{unquoted:"key",trailing:"comma",}'); -var str = JSON5.stringify(obj); -``` - -`JSON5.parse` supports all of the JSON5 features listed above (*TODO: except -Unicode*), as well as the native [`reviver` argument][json-parse]. - -[json-parse]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse - -`JSON5.stringify` mainly avoids quoting keys where possible, but we hope to -keep expanding it in the future (e.g. to also output trailing commas). -It supports the native [`replacer` and `space` arguments][json-stringify], -as well. *(TODO: Any implemented `toJSON` methods aren’t used today.)* - -[json-stringify]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify - - -### Extras - -If you’re running this on Node, you can also register a JSON5 `require()` hook -to let you `require()` `.json5` files just like you can `.json` files: - -```js -require('json5/lib/require'); -require('./path/to/foo'); // tries foo.json5 after foo.js, foo.json, etc. -require('./path/to/bar.json5'); -``` - -This module also provides a `json5` executable (requires Node) for converting -JSON5 files to JSON: - -```sh -json5 -c path/to/foo.json5 # generates path/to/foo.json -``` - - -## Development - -```sh -git clone git://github.com/aseemk/json5.git -cd json5 -npm install -npm test -``` - -As the `package.json5` file states, be sure to run `npm run build` on changes -to `package.json5`, since npm requires `package.json`. - -Feel free to [file issues](https://github.com/aseemk/json5/issues) and submit -[pull requests](https://github.com/aseemk/json5/pulls) — contributions are -welcome. If you do submit a pull request, please be sure to add or update the -tests, and ensure that `npm test` continues to pass. - - -## License - -MIT License © 2012-2016 Aseem Kishore, and [others]( -https://github.com/aseemk/json5/contributors). - - -## Credits - -[Michael Bolin](http://bolinfest.com/) independently arrived at and published -some of these same ideas with awesome explanations and detail. -Recommended reading: -[Suggested Improvements to JSON](http://bolinfest.com/essays/json.html) - -[Douglas Crockford](http://www.crockford.com/) of course designed and built -JSON, but his state machine diagrams on the [JSON website](http://json.org/), -as cheesy as it may sound, gave me motivation and confidence that building a -new parser to implement these ideas this was within my reach! -This code is also modeled directly off of Doug’s open-source [json_parse.js][] -parser. I’m super grateful for that clean and well-documented code. - -[json_parse.js]: https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js - -[Max Nanasy](https://github.com/MaxNanasy) has been an early and prolific -supporter, contributing multiple patches and ideas. Thanks Max! - -[Andrew Eisenberg](https://github.com/aeisenberg) has contributed the -`stringify` method. - -[Jordan Tucker](https://github.com/jordanbtucker) has aligned JSON5 more closely -with ES5 and is actively maintaining this project. diff --git a/fundamentals/bug-challenge-es6/node_modules/json5/lib/cli.js b/fundamentals/bug-challenge-es6/node_modules/json5/lib/cli.js deleted file mode 100755 index 9b72f6d19..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/json5/lib/cli.js +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env node - -// cli.js -// JSON5 command-line interface. -// -// This is pretty minimal for now; just supports compiling files via `-c`. -// TODO More useful functionality, like output path, watch, etc.? - -var FS = require('fs'); -var JSON5 = require('./json5'); -var Path = require('path'); - -var USAGE = [ - 'Usage: json5 -c path/to/file.json5 ...', - 'Compiles JSON5 files into sibling JSON files with the same basenames.', -].join('\n'); - -// if valid, args look like [node, json5, -c, file1, file2, ...] -var args = process.argv; - -if (args.length < 4 || args[2] !== '-c') { - console.error(USAGE); - process.exit(1); -} - -var cwd = process.cwd(); -var files = args.slice(3); - -// iterate over each file and convert JSON5 files to JSON: -files.forEach(function (file) { - var path = Path.resolve(cwd, file); - var basename = Path.basename(path, '.json5'); - var dirname = Path.dirname(path); - - var json5 = FS.readFileSync(path, 'utf8'); - var obj = JSON5.parse(json5); - var json = JSON.stringify(obj, null, 4); // 4 spaces; TODO configurable? - - path = Path.join(dirname, basename + '.json'); - FS.writeFileSync(path, json, 'utf8'); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/json5/lib/json5.js b/fundamentals/bug-challenge-es6/node_modules/json5/lib/json5.js deleted file mode 100644 index ead6862e0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/json5/lib/json5.js +++ /dev/null @@ -1,767 +0,0 @@ -// json5.js -// Modern JSON. See README.md for details. -// -// This file is based directly off of Douglas Crockford's json_parse.js: -// https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js - -var JSON5 = (typeof exports === 'object' ? exports : {}); - -JSON5.parse = (function () { - "use strict"; - -// This is a function that can parse a JSON5 text, producing a JavaScript -// data structure. It is a simple, recursive descent parser. It does not use -// eval or regular expressions, so it can be used as a model for implementing -// a JSON5 parser in other languages. - -// We are defining the function inside of another function to avoid creating -// global variables. - - var at, // The index of the current character - lineNumber, // The current line number - columnNumber, // The current column number - ch, // The current character - escapee = { - "'": "'", - '"': '"', - '\\': '\\', - '/': '/', - '\n': '', // Replace escaped newlines in strings w/ empty string - b: '\b', - f: '\f', - n: '\n', - r: '\r', - t: '\t' - }, - ws = [ - ' ', - '\t', - '\r', - '\n', - '\v', - '\f', - '\xA0', - '\uFEFF' - ], - text, - - renderChar = function (chr) { - return chr === '' ? 'EOF' : "'" + chr + "'"; - }, - - error = function (m) { - -// Call error when something is wrong. - - var error = new SyntaxError(); - // beginning of message suffix to agree with that provided by Gecko - see https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse - error.message = m + " at line " + lineNumber + " column " + columnNumber + " of the JSON5 data. Still to read: " + JSON.stringify(text.substring(at - 1, at + 19)); - error.at = at; - // These two property names have been chosen to agree with the ones in Gecko, the only popular - // environment which seems to supply this info on JSON.parse - error.lineNumber = lineNumber; - error.columnNumber = columnNumber; - throw error; - }, - - next = function (c) { - -// If a c parameter is provided, verify that it matches the current character. - - if (c && c !== ch) { - error("Expected " + renderChar(c) + " instead of " + renderChar(ch)); - } - -// Get the next character. When there are no more characters, -// return the empty string. - - ch = text.charAt(at); - at++; - columnNumber++; - if (ch === '\n' || ch === '\r' && peek() !== '\n') { - lineNumber++; - columnNumber = 0; - } - return ch; - }, - - peek = function () { - -// Get the next character without consuming it or -// assigning it to the ch varaible. - - return text.charAt(at); - }, - - identifier = function () { - -// Parse an identifier. Normally, reserved words are disallowed here, but we -// only use this for unquoted object keys, where reserved words are allowed, -// so we don't check for those here. References: -// - http://es5.github.com/#x7.6 -// - https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Core_Language_Features#Variables -// - http://docstore.mik.ua/orelly/webprog/jscript/ch02_07.htm -// TODO Identifiers can have Unicode "letters" in them; add support for those. - - var key = ch; - - // Identifiers must start with a letter, _ or $. - if ((ch !== '_' && ch !== '$') && - (ch < 'a' || ch > 'z') && - (ch < 'A' || ch > 'Z')) { - error("Bad identifier as unquoted key"); - } - - // Subsequent characters can contain digits. - while (next() && ( - ch === '_' || ch === '$' || - (ch >= 'a' && ch <= 'z') || - (ch >= 'A' && ch <= 'Z') || - (ch >= '0' && ch <= '9'))) { - key += ch; - } - - return key; - }, - - number = function () { - -// Parse a number value. - - var number, - sign = '', - string = '', - base = 10; - - if (ch === '-' || ch === '+') { - sign = ch; - next(ch); - } - - // support for Infinity (could tweak to allow other words): - if (ch === 'I') { - number = word(); - if (typeof number !== 'number' || isNaN(number)) { - error('Unexpected word for number'); - } - return (sign === '-') ? -number : number; - } - - // support for NaN - if (ch === 'N' ) { - number = word(); - if (!isNaN(number)) { - error('expected word to be NaN'); - } - // ignore sign as -NaN also is NaN - return number; - } - - if (ch === '0') { - string += ch; - next(); - if (ch === 'x' || ch === 'X') { - string += ch; - next(); - base = 16; - } else if (ch >= '0' && ch <= '9') { - error('Octal literal'); - } - } - - switch (base) { - case 10: - while (ch >= '0' && ch <= '9' ) { - string += ch; - next(); - } - if (ch === '.') { - string += '.'; - while (next() && ch >= '0' && ch <= '9') { - string += ch; - } - } - if (ch === 'e' || ch === 'E') { - string += ch; - next(); - if (ch === '-' || ch === '+') { - string += ch; - next(); - } - while (ch >= '0' && ch <= '9') { - string += ch; - next(); - } - } - break; - case 16: - while (ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'F' || ch >= 'a' && ch <= 'f') { - string += ch; - next(); - } - break; - } - - if(sign === '-') { - number = -string; - } else { - number = +string; - } - - if (!isFinite(number)) { - error("Bad number"); - } else { - return number; - } - }, - - string = function () { - -// Parse a string value. - - var hex, - i, - string = '', - delim, // double quote or single quote - uffff; - -// When parsing for string values, we must look for ' or " and \ characters. - - if (ch === '"' || ch === "'") { - delim = ch; - while (next()) { - if (ch === delim) { - next(); - return string; - } else if (ch === '\\') { - next(); - if (ch === 'u') { - uffff = 0; - for (i = 0; i < 4; i += 1) { - hex = parseInt(next(), 16); - if (!isFinite(hex)) { - break; - } - uffff = uffff * 16 + hex; - } - string += String.fromCharCode(uffff); - } else if (ch === '\r') { - if (peek() === '\n') { - next(); - } - } else if (typeof escapee[ch] === 'string') { - string += escapee[ch]; - } else { - break; - } - } else if (ch === '\n') { - // unescaped newlines are invalid; see: - // https://github.com/aseemk/json5/issues/24 - // TODO this feels special-cased; are there other - // invalid unescaped chars? - break; - } else { - string += ch; - } - } - } - error("Bad string"); - }, - - inlineComment = function () { - -// Skip an inline comment, assuming this is one. The current character should -// be the second / character in the // pair that begins this inline comment. -// To finish the inline comment, we look for a newline or the end of the text. - - if (ch !== '/') { - error("Not an inline comment"); - } - - do { - next(); - if (ch === '\n' || ch === '\r') { - next(); - return; - } - } while (ch); - }, - - blockComment = function () { - -// Skip a block comment, assuming this is one. The current character should be -// the * character in the /* pair that begins this block comment. -// To finish the block comment, we look for an ending */ pair of characters, -// but we also watch for the end of text before the comment is terminated. - - if (ch !== '*') { - error("Not a block comment"); - } - - do { - next(); - while (ch === '*') { - next('*'); - if (ch === '/') { - next('/'); - return; - } - } - } while (ch); - - error("Unterminated block comment"); - }, - - comment = function () { - -// Skip a comment, whether inline or block-level, assuming this is one. -// Comments always begin with a / character. - - if (ch !== '/') { - error("Not a comment"); - } - - next('/'); - - if (ch === '/') { - inlineComment(); - } else if (ch === '*') { - blockComment(); - } else { - error("Unrecognized comment"); - } - }, - - white = function () { - -// Skip whitespace and comments. -// Note that we're detecting comments by only a single / character. -// This works since regular expressions are not valid JSON(5), but this will -// break if there are other valid values that begin with a / character! - - while (ch) { - if (ch === '/') { - comment(); - } else if (ws.indexOf(ch) >= 0) { - next(); - } else { - return; - } - } - }, - - word = function () { - -// true, false, or null. - - switch (ch) { - case 't': - next('t'); - next('r'); - next('u'); - next('e'); - return true; - case 'f': - next('f'); - next('a'); - next('l'); - next('s'); - next('e'); - return false; - case 'n': - next('n'); - next('u'); - next('l'); - next('l'); - return null; - case 'I': - next('I'); - next('n'); - next('f'); - next('i'); - next('n'); - next('i'); - next('t'); - next('y'); - return Infinity; - case 'N': - next( 'N' ); - next( 'a' ); - next( 'N' ); - return NaN; - } - error("Unexpected " + renderChar(ch)); - }, - - value, // Place holder for the value function. - - array = function () { - -// Parse an array value. - - var array = []; - - if (ch === '[') { - next('['); - white(); - while (ch) { - if (ch === ']') { - next(']'); - return array; // Potentially empty array - } - // ES5 allows omitting elements in arrays, e.g. [,] and - // [,null]. We don't allow this in JSON5. - if (ch === ',') { - error("Missing array element"); - } else { - array.push(value()); - } - white(); - // If there's no comma after this value, this needs to - // be the end of the array. - if (ch !== ',') { - next(']'); - return array; - } - next(','); - white(); - } - } - error("Bad array"); - }, - - object = function () { - -// Parse an object value. - - var key, - object = {}; - - if (ch === '{') { - next('{'); - white(); - while (ch) { - if (ch === '}') { - next('}'); - return object; // Potentially empty object - } - - // Keys can be unquoted. If they are, they need to be - // valid JS identifiers. - if (ch === '"' || ch === "'") { - key = string(); - } else { - key = identifier(); - } - - white(); - next(':'); - object[key] = value(); - white(); - // If there's no comma after this pair, this needs to be - // the end of the object. - if (ch !== ',') { - next('}'); - return object; - } - next(','); - white(); - } - } - error("Bad object"); - }; - - value = function () { - -// Parse a JSON value. It could be an object, an array, a string, a number, -// or a word. - - white(); - switch (ch) { - case '{': - return object(); - case '[': - return array(); - case '"': - case "'": - return string(); - case '-': - case '+': - case '.': - return number(); - default: - return ch >= '0' && ch <= '9' ? number() : word(); - } - }; - -// Return the json_parse function. It will have access to all of the above -// functions and variables. - - return function (source, reviver) { - var result; - - text = String(source); - at = 0; - lineNumber = 1; - columnNumber = 1; - ch = ' '; - result = value(); - white(); - if (ch) { - error("Syntax error"); - } - -// If there is a reviver function, we recursively walk the new structure, -// passing each name/value pair to the reviver function for possible -// transformation, starting with a temporary root object that holds the result -// in an empty key. If there is not a reviver function, we simply return the -// result. - - return typeof reviver === 'function' ? (function walk(holder, key) { - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - }({'': result}, '')) : result; - }; -}()); - -// JSON5 stringify will not quote keys where appropriate -JSON5.stringify = function (obj, replacer, space) { - if (replacer && (typeof(replacer) !== "function" && !isArray(replacer))) { - throw new Error('Replacer must be a function or an array'); - } - var getReplacedValueOrUndefined = function(holder, key, isTopLevel) { - var value = holder[key]; - - // Replace the value with its toJSON value first, if possible - if (value && value.toJSON && typeof value.toJSON === "function") { - value = value.toJSON(); - } - - // If the user-supplied replacer if a function, call it. If it's an array, check objects' string keys for - // presence in the array (removing the key/value pair from the resulting JSON if the key is missing). - if (typeof(replacer) === "function") { - return replacer.call(holder, key, value); - } else if(replacer) { - if (isTopLevel || isArray(holder) || replacer.indexOf(key) >= 0) { - return value; - } else { - return undefined; - } - } else { - return value; - } - }; - - function isWordChar(c) { - return (c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z') || - (c >= '0' && c <= '9') || - c === '_' || c === '$'; - } - - function isWordStart(c) { - return (c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z') || - c === '_' || c === '$'; - } - - function isWord(key) { - if (typeof key !== 'string') { - return false; - } - if (!isWordStart(key[0])) { - return false; - } - var i = 1, length = key.length; - while (i < length) { - if (!isWordChar(key[i])) { - return false; - } - i++; - } - return true; - } - - // export for use in tests - JSON5.isWord = isWord; - - // polyfills - function isArray(obj) { - if (Array.isArray) { - return Array.isArray(obj); - } else { - return Object.prototype.toString.call(obj) === '[object Array]'; - } - } - - function isDate(obj) { - return Object.prototype.toString.call(obj) === '[object Date]'; - } - - var objStack = []; - function checkForCircular(obj) { - for (var i = 0; i < objStack.length; i++) { - if (objStack[i] === obj) { - throw new TypeError("Converting circular structure to JSON"); - } - } - } - - function makeIndent(str, num, noNewLine) { - if (!str) { - return ""; - } - // indentation no more than 10 chars - if (str.length > 10) { - str = str.substring(0, 10); - } - - var indent = noNewLine ? "" : "\n"; - for (var i = 0; i < num; i++) { - indent += str; - } - - return indent; - } - - var indentStr; - if (space) { - if (typeof space === "string") { - indentStr = space; - } else if (typeof space === "number" && space >= 0) { - indentStr = makeIndent(" ", space, true); - } else { - // ignore space parameter - } - } - - // Copied from Crokford's implementation of JSON - // See https://github.com/douglascrockford/JSON-js/blob/e39db4b7e6249f04a195e7dd0840e610cc9e941e/json2.js#L195 - // Begin - var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }; - function escapeString(string) { - -// If the string contains no control characters, no quote characters, and no -// backslash characters, then we can safely slap some quotes around it. -// Otherwise we must also replace the offending characters with safe escape -// sequences. - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' ? - c : - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; - } - // End - - function internalStringify(holder, key, isTopLevel) { - var buffer, res; - - // Replace the value, if necessary - var obj_part = getReplacedValueOrUndefined(holder, key, isTopLevel); - - if (obj_part && !isDate(obj_part)) { - // unbox objects - // don't unbox dates, since will turn it into number - obj_part = obj_part.valueOf(); - } - switch(typeof obj_part) { - case "boolean": - return obj_part.toString(); - - case "number": - if (isNaN(obj_part) || !isFinite(obj_part)) { - return "null"; - } - return obj_part.toString(); - - case "string": - return escapeString(obj_part.toString()); - - case "object": - if (obj_part === null) { - return "null"; - } else if (isArray(obj_part)) { - checkForCircular(obj_part); - buffer = "["; - objStack.push(obj_part); - - for (var i = 0; i < obj_part.length; i++) { - res = internalStringify(obj_part, i, false); - buffer += makeIndent(indentStr, objStack.length); - if (res === null || typeof res === "undefined") { - buffer += "null"; - } else { - buffer += res; - } - if (i < obj_part.length-1) { - buffer += ","; - } else if (indentStr) { - buffer += "\n"; - } - } - objStack.pop(); - buffer += makeIndent(indentStr, objStack.length, true) + "]"; - } else { - checkForCircular(obj_part); - buffer = "{"; - var nonEmpty = false; - objStack.push(obj_part); - for (var prop in obj_part) { - if (obj_part.hasOwnProperty(prop)) { - var value = internalStringify(obj_part, prop, false); - isTopLevel = false; - if (typeof value !== "undefined" && value !== null) { - buffer += makeIndent(indentStr, objStack.length); - nonEmpty = true; - key = isWord(prop) ? prop : escapeString(prop); - buffer += key + ":" + (indentStr ? ' ' : '') + value + ","; - } - } - } - objStack.pop(); - if (nonEmpty) { - buffer = buffer.substring(0, buffer.length-1) + makeIndent(indentStr, objStack.length) + "}"; - } else { - buffer = '{}'; - } - } - return buffer; - default: - // functions and undefined should be ignored - return undefined; - } - } - - // special case...when undefined is used inside of - // a compound object/array, return null. - // but when top-level, return undefined - var topLevelHolder = {"":obj}; - if (obj === undefined) { - return getReplacedValueOrUndefined(topLevelHolder, '', true); - } - return internalStringify(topLevelHolder, '', true); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/json5/lib/require.js b/fundamentals/bug-challenge-es6/node_modules/json5/lib/require.js deleted file mode 100644 index 73e56fe92..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/json5/lib/require.js +++ /dev/null @@ -1,18 +0,0 @@ -// require.js -// Node.js only: adds a require() hook for .json5 files, just like the native -// hook for .json files. -// -// Usage: -// require('json5/require'); -// require('./foo'); // will check foo.json5 after foo.js, foo.json, etc. -// require('./bar.json5'); - -var FS = require('fs'); -var JSON5 = require('./json5'); - -// Modeled off of (v0.6.18 link; check latest too): -// https://github.com/joyent/node/blob/v0.6.18/lib/module.js#L468-L472 -require.extensions['.json5'] = function (module, filename) { - var content = FS.readFileSync(filename, 'utf8'); - module.exports = JSON5.parse(content); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/json5/package.json b/fundamentals/bug-challenge-es6/node_modules/json5/package.json deleted file mode 100644 index f51f33cda..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/json5/package.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "_args": [ - [ - "json5@^0.5.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core" - ] - ], - "_from": "json5@>=0.5.0 <0.6.0", - "_id": "json5@0.5.0", - "_inCache": true, - "_installable": true, - "_location": "/json5", - "_nodeVersion": "5.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/json5-0.5.0.tgz_1458238912216_0.23146007652394474" - }, - "_npmUser": { - "email": "jordanbtucker@gmail.com", - "name": "jordanbtucker" - }, - "_npmVersion": "3.7.3", - "_phantomChildren": {}, - "_requested": { - "name": "json5", - "raw": "json5@^0.5.0", - "rawSpec": "^0.5.0", - "scope": null, - "spec": ">=0.5.0 <0.6.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-core" - ], - "_resolved": "https://registry.npmjs.org/json5/-/json5-0.5.0.tgz", - "_shasum": "9b20715b026cbe3778fd769edccd822d8332a5b2", - "_shrinkwrap": null, - "_spec": "json5@^0.5.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core", - "author": { - "email": "aseem.kishore@gmail.com", - "name": "Aseem Kishore" - }, - "bin": { - "json5": "lib/cli.js" - }, - "bugs": { - "url": "https://github.com/aseemk/json5/issues" - }, - "contributors": [ - { - "email": "max.nanasy@gmail.com", - "name": "Max Nanasy" - }, - { - "email": "andrew@eisenberg.as", - "name": "Andrew Eisenberg" - }, - { - "email": "jordanbtucker@gmail.com", - "name": "Jordan Tucker" - } - ], - "dependencies": {}, - "description": "JSON for the ES5 era.", - "devDependencies": { - "gulp": "^3.9.1", - "gulp-jshint": "^2.0.0", - "jshint": "^2.9.1", - "jshint-stylish": "^2.1.0", - "mocha": "^2.4.5" - }, - "directories": {}, - "dist": { - "shasum": "9b20715b026cbe3778fd769edccd822d8332a5b2", - "tarball": "https://registry.npmjs.org/json5/-/json5-0.5.0.tgz" - }, - "files": [ - "lib/" - ], - "gitHead": "c58c026a58dd0b71401f7aa99e891291a60820e3", - "homepage": "http://json5.org/", - "keywords": [ - "json", - "es5" - ], - "license": "MIT", - "main": "lib/json5.js", - "maintainers": [ - { - "email": "aseem.kishore@gmail.com", - "name": "aseemk" - }, - { - "email": "jordanbtucker@gmail.com", - "name": "jordanbtucker" - } - ], - "name": "json5", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/aseemk/json5.git" - }, - "scripts": { - "build": "node ./lib/cli.js -c package.json5", - "test": "mocha --ui exports --reporter spec" - }, - "version": "0.5.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonify/README.markdown b/fundamentals/bug-challenge-es6/node_modules/jsonify/README.markdown deleted file mode 100644 index 71d9a93b5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonify/README.markdown +++ /dev/null @@ -1,34 +0,0 @@ -jsonify -======= - -This module provides Douglas Crockford's JSON implementation without modifying -any globals. - -`stringify` and `parse` are merely exported without respect to whether or not a -global `JSON` object exists. - -methods -======= - -var json = require('jsonify'); - -json.parse(source, reviver) ---------------------------- - -Return a new javascript object from a parse of the `source` string. - -If a `reviver` function is specified, walk the structure passing each name/value -pair to `reviver.call(parent, key, value)` to transform the `value` before -parsing it. - -json.stringify(value, replacer, space) --------------------------------------- - -Return a string representation for `value`. - -If `replacer` is specified, walk the structure passing each name/value pair to -`replacer.call(parent, key, value)` to transform the `value` before stringifying -it. - -If `space` is a number, indent the result by that many spaces. -If `space` is a string, use `space` as the indentation. diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonify/index.js b/fundamentals/bug-challenge-es6/node_modules/jsonify/index.js deleted file mode 100644 index f728a1605..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonify/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.parse = require('./lib/parse'); -exports.stringify = require('./lib/stringify'); diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonify/lib/parse.js b/fundamentals/bug-challenge-es6/node_modules/jsonify/lib/parse.js deleted file mode 100644 index 30e2f0143..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonify/lib/parse.js +++ /dev/null @@ -1,273 +0,0 @@ -var at, // The index of the current character - ch, // The current character - escapee = { - '"': '"', - '\\': '\\', - '/': '/', - b: '\b', - f: '\f', - n: '\n', - r: '\r', - t: '\t' - }, - text, - - error = function (m) { - // Call error when something is wrong. - throw { - name: 'SyntaxError', - message: m, - at: at, - text: text - }; - }, - - next = function (c) { - // If a c parameter is provided, verify that it matches the current character. - if (c && c !== ch) { - error("Expected '" + c + "' instead of '" + ch + "'"); - } - - // Get the next character. When there are no more characters, - // return the empty string. - - ch = text.charAt(at); - at += 1; - return ch; - }, - - number = function () { - // Parse a number value. - var number, - string = ''; - - if (ch === '-') { - string = '-'; - next('-'); - } - while (ch >= '0' && ch <= '9') { - string += ch; - next(); - } - if (ch === '.') { - string += '.'; - while (next() && ch >= '0' && ch <= '9') { - string += ch; - } - } - if (ch === 'e' || ch === 'E') { - string += ch; - next(); - if (ch === '-' || ch === '+') { - string += ch; - next(); - } - while (ch >= '0' && ch <= '9') { - string += ch; - next(); - } - } - number = +string; - if (!isFinite(number)) { - error("Bad number"); - } else { - return number; - } - }, - - string = function () { - // Parse a string value. - var hex, - i, - string = '', - uffff; - - // When parsing for string values, we must look for " and \ characters. - if (ch === '"') { - while (next()) { - if (ch === '"') { - next(); - return string; - } else if (ch === '\\') { - next(); - if (ch === 'u') { - uffff = 0; - for (i = 0; i < 4; i += 1) { - hex = parseInt(next(), 16); - if (!isFinite(hex)) { - break; - } - uffff = uffff * 16 + hex; - } - string += String.fromCharCode(uffff); - } else if (typeof escapee[ch] === 'string') { - string += escapee[ch]; - } else { - break; - } - } else { - string += ch; - } - } - } - error("Bad string"); - }, - - white = function () { - -// Skip whitespace. - - while (ch && ch <= ' ') { - next(); - } - }, - - word = function () { - -// true, false, or null. - - switch (ch) { - case 't': - next('t'); - next('r'); - next('u'); - next('e'); - return true; - case 'f': - next('f'); - next('a'); - next('l'); - next('s'); - next('e'); - return false; - case 'n': - next('n'); - next('u'); - next('l'); - next('l'); - return null; - } - error("Unexpected '" + ch + "'"); - }, - - value, // Place holder for the value function. - - array = function () { - -// Parse an array value. - - var array = []; - - if (ch === '[') { - next('['); - white(); - if (ch === ']') { - next(']'); - return array; // empty array - } - while (ch) { - array.push(value()); - white(); - if (ch === ']') { - next(']'); - return array; - } - next(','); - white(); - } - } - error("Bad array"); - }, - - object = function () { - -// Parse an object value. - - var key, - object = {}; - - if (ch === '{') { - next('{'); - white(); - if (ch === '}') { - next('}'); - return object; // empty object - } - while (ch) { - key = string(); - white(); - next(':'); - if (Object.hasOwnProperty.call(object, key)) { - error('Duplicate key "' + key + '"'); - } - object[key] = value(); - white(); - if (ch === '}') { - next('}'); - return object; - } - next(','); - white(); - } - } - error("Bad object"); - }; - -value = function () { - -// Parse a JSON value. It could be an object, an array, a string, a number, -// or a word. - - white(); - switch (ch) { - case '{': - return object(); - case '[': - return array(); - case '"': - return string(); - case '-': - return number(); - default: - return ch >= '0' && ch <= '9' ? number() : word(); - } -}; - -// Return the json_parse function. It will have access to all of the above -// functions and variables. - -module.exports = function (source, reviver) { - var result; - - text = source; - at = 0; - ch = ' '; - result = value(); - white(); - if (ch) { - error("Syntax error"); - } - - // If there is a reviver function, we recursively walk the new structure, - // passing each name/value pair to the reviver function for possible - // transformation, starting with a temporary root object that holds the result - // in an empty key. If there is not a reviver function, we simply return the - // result. - - return typeof reviver === 'function' ? (function walk(holder, key) { - var k, v, value = holder[key]; - if (value && typeof value === 'object') { - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = walk(value, k); - if (v !== undefined) { - value[k] = v; - } else { - delete value[k]; - } - } - } - } - return reviver.call(holder, key, value); - }({'': result}, '')) : result; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonify/lib/stringify.js b/fundamentals/bug-challenge-es6/node_modules/jsonify/lib/stringify.js deleted file mode 100644 index 134587081..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonify/lib/stringify.js +++ /dev/null @@ -1,154 +0,0 @@ -var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, - gap, - indent, - meta = { // table of character substitutions - '\b': '\\b', - '\t': '\\t', - '\n': '\\n', - '\f': '\\f', - '\r': '\\r', - '"' : '\\"', - '\\': '\\\\' - }, - rep; - -function quote(string) { - // If the string contains no control characters, no quote characters, and no - // backslash characters, then we can safely slap some quotes around it. - // Otherwise we must also replace the offending characters with safe escape - // sequences. - - escapable.lastIndex = 0; - return escapable.test(string) ? '"' + string.replace(escapable, function (a) { - var c = meta[a]; - return typeof c === 'string' ? c : - '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); - }) + '"' : '"' + string + '"'; -} - -function str(key, holder) { - // Produce a string from holder[key]. - var i, // The loop counter. - k, // The member key. - v, // The member value. - length, - mind = gap, - partial, - value = holder[key]; - - // If the value has a toJSON method, call it to obtain a replacement value. - if (value && typeof value === 'object' && - typeof value.toJSON === 'function') { - value = value.toJSON(key); - } - - // If we were called with a replacer function, then call the replacer to - // obtain a replacement value. - if (typeof rep === 'function') { - value = rep.call(holder, key, value); - } - - // What happens next depends on the value's type. - switch (typeof value) { - case 'string': - return quote(value); - - case 'number': - // JSON numbers must be finite. Encode non-finite numbers as null. - return isFinite(value) ? String(value) : 'null'; - - case 'boolean': - case 'null': - // If the value is a boolean or null, convert it to a string. Note: - // typeof null does not produce 'null'. The case is included here in - // the remote chance that this gets fixed someday. - return String(value); - - case 'object': - if (!value) return 'null'; - gap += indent; - partial = []; - - // Array.isArray - if (Object.prototype.toString.apply(value) === '[object Array]') { - length = value.length; - for (i = 0; i < length; i += 1) { - partial[i] = str(i, value) || 'null'; - } - - // Join all of the elements together, separated with commas, and - // wrap them in brackets. - v = partial.length === 0 ? '[]' : gap ? - '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : - '[' + partial.join(',') + ']'; - gap = mind; - return v; - } - - // If the replacer is an array, use it to select the members to be - // stringified. - if (rep && typeof rep === 'object') { - length = rep.length; - for (i = 0; i < length; i += 1) { - k = rep[i]; - if (typeof k === 'string') { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - else { - // Otherwise, iterate through all of the keys in the object. - for (k in value) { - if (Object.prototype.hasOwnProperty.call(value, k)) { - v = str(k, value); - if (v) { - partial.push(quote(k) + (gap ? ': ' : ':') + v); - } - } - } - } - - // Join all of the member texts together, separated with commas, - // and wrap them in braces. - - v = partial.length === 0 ? '{}' : gap ? - '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : - '{' + partial.join(',') + '}'; - gap = mind; - return v; - } -} - -module.exports = function (value, replacer, space) { - var i; - gap = ''; - indent = ''; - - // If the space parameter is a number, make an indent string containing that - // many spaces. - if (typeof space === 'number') { - for (i = 0; i < space; i += 1) { - indent += ' '; - } - } - // If the space parameter is a string, it will be used as the indent string. - else if (typeof space === 'string') { - indent = space; - } - - // If there is a replacer, it must be a function or an array. - // Otherwise, throw an error. - rep = replacer; - if (replacer && typeof replacer !== 'function' - && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) { - throw new Error('JSON.stringify'); - } - - // Make a fake root object containing our value under the key of ''. - // Return the result of stringifying the value. - return str('', {'': value}); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonify/package.json b/fundamentals/bug-challenge-es6/node_modules/jsonify/package.json deleted file mode 100644 index 4ff731d6b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonify/package.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "_args": [ - [ - "jsonify@~0.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/json-stable-stringify" - ] - ], - "_defaultsLoaded": true, - "_engineSupported": true, - "_from": "jsonify@>=0.0.0 <0.1.0", - "_id": "jsonify@0.0.0", - "_inCache": true, - "_installable": true, - "_location": "/jsonify", - "_nodeVersion": "v0.5.0-pre", - "_npmVersion": "1.0.10", - "_phantomChildren": {}, - "_requested": { - "name": "jsonify", - "raw": "jsonify@~0.0.0", - "rawSpec": "~0.0.0", - "scope": null, - "spec": ">=0.0.0 <0.1.0", - "type": "range" - }, - "_requiredBy": [ - "/json-stable-stringify" - ], - "_resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "_shasum": "2c74b6ee41d93ca51b7b5aaee8f503631d252a73", - "_shrinkwrap": null, - "_spec": "jsonify@~0.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/json-stable-stringify", - "author": { - "name": "Douglas Crockford", - "url": "http://crockford.com/" - }, - "bugs": { - "url": "https://github.com/substack/jsonify/issues" - }, - "dependencies": {}, - "description": "JSON without touching any globals", - "devDependencies": { - "garbage": "0.0.x", - "tap": "0.0.x" - }, - "directories": { - "lib": ".", - "test": "test" - }, - "dist": { - "shasum": "2c74b6ee41d93ca51b7b5aaee8f503631d252a73", - "tarball": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz" - }, - "engines": { - "node": "*" - }, - "homepage": "https://github.com/substack/jsonify#readme", - "keywords": [ - "json", - "browser" - ], - "license": "Public Domain", - "main": "index.js", - "maintainers": [ - { - "email": "mail@substack.net", - "name": "substack" - } - ], - "name": "jsonify", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/substack/jsonify.git" - }, - "scripts": { - "test": "tap test" - }, - "version": "0.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonify/test/parse.js b/fundamentals/bug-challenge-es6/node_modules/jsonify/test/parse.js deleted file mode 100644 index e2313f55a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonify/test/parse.js +++ /dev/null @@ -1,16 +0,0 @@ -var test = require('tap').test; -var json = require('../'); -var garbage = require('garbage'); - -test('parse', function (t) { - for (var i = 0; i < 50; i++) { - var s = JSON.stringify(garbage(50)); - - t.deepEqual( - json.parse(s), - JSON.parse(s) - ); - } - - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonify/test/stringify.js b/fundamentals/bug-challenge-es6/node_modules/jsonify/test/stringify.js deleted file mode 100644 index 89b0b6703..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonify/test/stringify.js +++ /dev/null @@ -1,15 +0,0 @@ -var test = require('tap').test; -var json = require('../'); -var garbage = require('garbage'); - -test('stringify', function (t) { - for (var i = 0; i < 50; i++) { - var obj = garbage(50); - t.equal( - json.stringify(obj), - JSON.stringify(obj) - ); - } - - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/jsonpointer/.travis.yml deleted file mode 100644 index 7f56324f5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/.travis.yml +++ /dev/null @@ -1,7 +0,0 @@ -language: "node_js" -node_js: - - 0.10 - - 0.11 - - 0.12 - - 4.0 - - node diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/LICENSE.md b/fundamentals/bug-challenge-es6/node_modules/jsonpointer/LICENSE.md deleted file mode 100644 index ac32f5dfd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2011-2015 Jan Lehnardt & Marc Bachmann - -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/fundamentals/bug-challenge-es6/node_modules/jsonpointer/README.md b/fundamentals/bug-challenge-es6/node_modules/jsonpointer/README.md deleted file mode 100644 index bc7aa153d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# JSON Pointer for nodejs - -This is an implementation of [JSON Pointer](http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-08). - -## Usage -```javascript -var jsonpointer = require('jsonpointer'); -var obj = { foo: 1, bar: { baz: 2}, qux: [3, 4, 5]}; - -jsonpointer.get(obj, '/foo'); // returns 1 -jsonpointer.get(obj, '/bar/baz'); // returns 2 -jsonpointer.get(obj, '/qux/0'); // returns 3 -jsonpointer.get(obj, '/qux/1'); // returns 4 -jsonpointer.get(obj, '/qux/2'); // returns 5 -jsonpointer.get(obj, '/quo'); // returns null - -jsonpointer.set(obj, '/foo', 6); // sets obj.foo = 6; -jsonpointer.set(obj, '/qux/-', 6) // sets obj.qux = [3, 4, 5, 6] - -var pointer = jsonpointer.compile('/foo') -pointer.get(obj) // returns 1 -pointer.set(obj, 1) // sets obj.foo = 1 -``` - -## Testing - - $ node test.js - All tests pass. - $ - -[![Build Status](https://travis-ci.org/janl/node-jsonpointer.png?branch=master)](https://travis-ci.org/janl/node-jsonpointer) - -## Author - -(c) 2011-2015 Jan Lehnardt & Marc Bachmann - -## License - -MIT License. diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/benchmark.js b/fundamentals/bug-challenge-es6/node_modules/jsonpointer/benchmark.js deleted file mode 100644 index 8a95636de..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/benchmark.js +++ /dev/null @@ -1,56 +0,0 @@ -var jsonpointer = require('./') - -var i -var obj = { - a: 1, - b: { - c: 2 - }, - d: { - e: [{ a: 3 }, { b: 4 }, { c: 5 }] - } -} - -// Get -console.time('get first level property') -for (i = 0; i < 1e6; i++) { - jsonpointer.get(obj, '/a') -} -console.timeEnd('get first level property') - -console.time('get second level property') -for (i = 0; i < 1e6; i++) { - jsonpointer.get(obj, '/d/e') -} -console.timeEnd('get second level property') - -console.time('get third level property') -for (i = 0; i < 1e6; i++) { - jsonpointer.get(obj, '/d/e/0') -} -console.timeEnd('get third level property') - -// Set -console.time('set first level property') -for (i = 0; i < 1e6; i++) { - jsonpointer.set(obj, '/a', 'bla') -} -console.timeEnd('set first level property') - -console.time('set second level property') -for (i = 0; i < 1e6; i++) { - jsonpointer.set(obj, '/d/e', 'bla') -} -console.timeEnd('set second level property') - -console.time('set third level property') -for (i = 0; i < 1e6; i++) { - jsonpointer.set(obj, '/d/e/0', 'bla') -} -console.timeEnd('set third level property') - -console.time('push property into array') -for (i = 0; i < 1e6; i++) { - jsonpointer.set(obj, '/d/e/-', 'bla') -} -console.timeEnd('push property into array') diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/jsonpointer.js b/fundamentals/bug-challenge-es6/node_modules/jsonpointer/jsonpointer.js deleted file mode 100644 index 7cfaec0fb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/jsonpointer.js +++ /dev/null @@ -1,93 +0,0 @@ -var hasExcape = /~/ -var escapeMatcher = /~[01]/g -function escapeReplacer (m) { - switch (m) { - case '~1': return '/' - case '~0': return '~' - } - throw new Error('Invalid tilde escape: ' + m) -} - -function untilde (str) { - if (!hasExcape.test(str)) return str - return str.replace(escapeMatcher, escapeReplacer) -} - -function setter (obj, pointer, value) { - var part - var hasNextPart - - for (var p = 1, len = pointer.length; p < len;) { - part = untilde(pointer[p++]) - hasNextPart = len > p - - if (typeof obj[part] === 'undefined') { - // support setting of /- - if (Array.isArray(obj) && part === '-') { - part = obj.length - } - - // support nested objects/array when setting values - if (hasNextPart) { - if ((pointer[p] !== '' && pointer[p] < Infinity) || pointer[p] === '-') obj[part] = [] - else obj[part] = {} - } - } - - if (!hasNextPart) break - obj = obj[part] - } - - var oldValue = obj[part] - if (value === undefined) delete obj[part] - else obj[part] = value - return oldValue -} - -function compilePointer (pointer) { - if (typeof pointer === 'string') { - pointer = pointer.split('/') - if (pointer[0] === '') return pointer - throw new Error('Invalid JSON pointer.') - } else if (Array.isArray(pointer)) { - return pointer - } - - throw new Error('Invalid JSON pointer.') -} - -function get (obj, pointer) { - if (typeof obj !== 'object') throw new Error('Invalid input object.') - pointer = compilePointer(pointer) - var len = pointer.length - if (len === 1) return obj - - for (var p = 1; p < len;) { - obj = obj[untilde(pointer[p++])] - if (len === p) return obj - if (typeof obj !== 'object') return undefined - } -} - -function set (obj, pointer, value) { - if (typeof obj !== 'object') throw new Error('Invalid input object.') - pointer = compilePointer(pointer) - if (pointer.length === 0) throw new Error('Invalid JSON pointer for set.') - return setter(obj, pointer, value) -} - -function compile (pointer) { - var compiled = compilePointer(pointer) - return { - get: function (object) { - return get(object, compiled) - }, - set: function (object, value) { - return set(object, compiled, value) - } - } -} - -exports.get = get -exports.set = set -exports.compile = compile diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/package.json b/fundamentals/bug-challenge-es6/node_modules/jsonpointer/package.json deleted file mode 100644 index b06e95661..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "jsonpointer@^4.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/is-my-json-valid" - ] - ], - "_from": "jsonpointer@>=4.0.0 <5.0.0", - "_id": "jsonpointer@4.0.0", - "_inCache": true, - "_installable": true, - "_location": "/jsonpointer", - "_nodeVersion": "6.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/jsonpointer-4.0.0.tgz_1463651460494_0.02921536797657609" - }, - "_npmUser": { - "email": "marc.brookman@gmail.com", - "name": "marcbachmann" - }, - "_npmVersion": "3.8.6", - "_phantomChildren": {}, - "_requested": { - "name": "jsonpointer", - "raw": "jsonpointer@^4.0.0", - "rawSpec": "^4.0.0", - "scope": null, - "spec": ">=4.0.0 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/is-my-json-valid" - ], - "_resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", - "_shasum": "6661e161d2fc445f19f98430231343722e1fcbd5", - "_shrinkwrap": null, - "_spec": "jsonpointer@^4.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/is-my-json-valid", - "author": { - "email": "jan@apache.org", - "name": "Jan Lehnardt" - }, - "bugs": { - "url": "http://github.com/janl/node-jsonpointer/issues" - }, - "contributors": [ - { - "email": "joe-github@cursive.net", - "name": "Joe Hildebrand" - }, - { - "email": "marc.brookman@gmail.com", - "name": "Marc Bachmann" - } - ], - "dependencies": {}, - "description": "Simple JSON Addressing.", - "devDependencies": { - "standard": "^5.3.1" - }, - "directories": {}, - "dist": { - "shasum": "6661e161d2fc445f19f98430231343722e1fcbd5", - "tarball": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "gitHead": "2d46030ba6df41b566934c7202e31fb65058de71", - "homepage": "https://github.com/janl/node-jsonpointer#readme", - "license": "MIT", - "main": "./jsonpointer", - "maintainers": [ - { - "email": "jan@apache.org", - "name": "jan" - }, - { - "email": "marc.brookman@gmail.com", - "name": "marcbachmann" - } - ], - "name": "jsonpointer", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/janl/node-jsonpointer.git" - }, - "scripts": { - "test": "standard && node test.js" - }, - "tags": [ - "util", - "simple", - "util", - "utility" - ], - "version": "4.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/test.js b/fundamentals/bug-challenge-es6/node_modules/jsonpointer/test.js deleted file mode 100644 index e3d99630f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsonpointer/test.js +++ /dev/null @@ -1,131 +0,0 @@ -var assert = require('assert') -var jsonpointer = require('./jsonpointer') - -var obj = { - a: 1, - b: { - c: 2 - }, - d: { - e: [{ a: 3 }, { b: 4 }, { c: 5 }] - } -} - -assert.equal(jsonpointer.get(obj, '/a'), 1) -assert.equal(jsonpointer.get(obj, '/b/c'), 2) -assert.equal(jsonpointer.get(obj, '/d/e/0/a'), 3) -assert.equal(jsonpointer.get(obj, '/d/e/1/b'), 4) -assert.equal(jsonpointer.get(obj, '/d/e/2/c'), 5) - -// set returns old value -assert.equal(jsonpointer.set(obj, '/a', 2), 1) -assert.equal(jsonpointer.set(obj, '/b/c', 3), 2) -assert.equal(jsonpointer.set(obj, '/d/e/0/a', 4), 3) -assert.equal(jsonpointer.set(obj, '/d/e/1/b', 5), 4) -assert.equal(jsonpointer.set(obj, '/d/e/2/c', 6), 5) - -// set nested properties -assert.equal(jsonpointer.set(obj, '/f/g/h/i', 6), undefined) -assert.equal(jsonpointer.get(obj, '/f/g/h/i'), 6) - -// set an array -assert.equal(jsonpointer.set(obj, '/f/g/h/foo/-', 'test'), undefined) -var arr = jsonpointer.get(obj, '/f/g/h/foo') -assert(Array.isArray(arr), 'set /- creates an array.') -assert.equal(arr[0], 'test') - -assert.equal(jsonpointer.get(obj, '/a'), 2) -assert.equal(jsonpointer.get(obj, '/b/c'), 3) -assert.equal(jsonpointer.get(obj, '/d/e/0/a'), 4) -assert.equal(jsonpointer.get(obj, '/d/e/1/b'), 5) -assert.equal(jsonpointer.get(obj, '/d/e/2/c'), 6) - -// can set `null` as a value -assert.equal(jsonpointer.set(obj, '/f/g/h/foo/0', null), 'test') -assert.strictEqual(jsonpointer.get(obj, '/f/g/h/foo/0'), null) -assert.equal(jsonpointer.set(obj, '/b/c', null), 3) -assert.strictEqual(jsonpointer.get(obj, '/b/c'), null) - -assert.equal(jsonpointer.get(obj, ''), obj) -assert.throws(function () { jsonpointer.get(obj, 'a') }, validateError) -assert.throws(function () { jsonpointer.get(obj, 'a/') }, validateError) - -// can unset values with `undefined` -jsonpointer.set(obj, '/a', undefined) -assert.strictEqual(jsonpointer.get(obj, '/a'), undefined) -jsonpointer.set(obj, '/d/e/1', undefined) -assert.strictEqual(jsonpointer.get(obj, '/d/e/1'), undefined) - -// returns `undefined` when path extends beyond any existing objects -assert.strictEqual(jsonpointer.get(obj, '/x/y/z'), undefined) - -function validateError (err) { - if ((err instanceof Error) && /Invalid JSON pointer/.test(err.message)) { - return true - } -} - -var complexKeys = { - 'a/b': { - c: 1 - }, - d: { - 'e/f': 2 - }, - '~1': 3, - '01': 4 -} - -assert.equal(jsonpointer.get(complexKeys, '/a~1b/c'), 1) -assert.equal(jsonpointer.get(complexKeys, '/d/e~1f'), 2) -assert.equal(jsonpointer.get(complexKeys, '/~01'), 3) -assert.equal(jsonpointer.get(complexKeys, '/01'), 4) -assert.equal(jsonpointer.get(complexKeys, '/a/b/c'), null) -assert.equal(jsonpointer.get(complexKeys, '/~1'), null) - -// draft-ietf-appsawg-json-pointer-08 has special array rules -var ary = [ 'zero', 'one', 'two' ] -assert.equal(jsonpointer.get(ary, '/01'), null) - -assert.equal(jsonpointer.set(ary, '/-', 'three'), null) -assert.equal(ary[3], 'three') - -// Examples from the draft: -var example = { - 'foo': ['bar', 'baz'], - '': 0, - 'a/b': 1, - 'c%d': 2, - 'e^f': 3, - 'g|h': 4, - 'i\\j': 5, - 'k\'l': 6, - ' ': 7, - 'm~n': 8 -} - -assert.equal(jsonpointer.get(example, ''), example) -var ans = jsonpointer.get(example, '/foo') -assert.equal(ans.length, 2) -assert.equal(ans[0], 'bar') -assert.equal(ans[1], 'baz') -assert.equal(jsonpointer.get(example, '/foo/0'), 'bar') -assert.equal(jsonpointer.get(example, '/'), 0) -assert.equal(jsonpointer.get(example, '/a~1b'), 1) -assert.equal(jsonpointer.get(example, '/c%d'), 2) -assert.equal(jsonpointer.get(example, '/e^f'), 3) -assert.equal(jsonpointer.get(example, '/g|h'), 4) -assert.equal(jsonpointer.get(example, '/i\\j'), 5) -assert.equal(jsonpointer.get(example, '/k\'l'), 6) -assert.equal(jsonpointer.get(example, '/ '), 7) -assert.equal(jsonpointer.get(example, '/m~0n'), 8) - -// jsonpointer.compile(path) -var a = {foo: 'bar'} -var pointer = jsonpointer.compile('/foo') -assert.equal(pointer.get(a), 'bar') -assert.equal(pointer.set(a, 'test'), 'bar') -assert.equal(pointer.get(a), 'test') -assert.deepEqual(a, {foo: 'test'}) - -console.log('All tests pass.') diff --git a/fundamentals/bug-challenge-es6/node_modules/jsprim/CHANGES.md b/fundamentals/bug-challenge-es6/node_modules/jsprim/CHANGES.md deleted file mode 100644 index 3e152ab80..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsprim/CHANGES.md +++ /dev/null @@ -1,39 +0,0 @@ -# Changelog - -## not yet released - -None yet. - -## v1.3.1 (2016-09-12) - -* #13 Incompatible with webpack - -## v1.3.0 (2016-06-22) - -* #14 add safer version of hasOwnProperty() -* #15 forEachKey() should ignore inherited properties - -## v1.2.2 (2015-10-15) - -* #11 NPM package shouldn't include any code that does `require('JSV')` -* #12 jsl.node.conf missing definition for "module" - -## v1.2.1 (2015-10-14) - -* #8 odd date parsing behaviour - -## v1.2.0 (2015-10-13) - -* #9 want function for returning RFC1123 dates - -## v1.1.0 (2015-09-02) - -* #6 a new suite of hrtime manipulation routines: `hrtimeAdd()`, - `hrtimeAccum()`, `hrtimeNanosec()`, `hrtimeMicrosec()` and - `hrtimeMillisec()`. - -## v1.0.0 (2015-09-01) - -First tracked release. Includes everything in previous releases, plus: - -* #4 want function for merging objects diff --git a/fundamentals/bug-challenge-es6/node_modules/jsprim/LICENSE b/fundamentals/bug-challenge-es6/node_modules/jsprim/LICENSE deleted file mode 100644 index cbc0bb3ba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsprim/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2012, Joyent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE diff --git a/fundamentals/bug-challenge-es6/node_modules/jsprim/README.md b/fundamentals/bug-challenge-es6/node_modules/jsprim/README.md deleted file mode 100644 index 7303642e0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsprim/README.md +++ /dev/null @@ -1,237 +0,0 @@ -# jsprim: utilities for primitive JavaScript types - -This module provides miscellaneous facilities for working with strings, -numbers, dates, and objects and arrays of these basic types. - - -### deepCopy(obj) - -Creates a deep copy of a primitive type, object, or array of primitive types. - - -### deepEqual(obj1, obj2) - -Returns whether two objects are equal. - - -### isEmpty(obj) - -Returns true if the given object has no properties and false otherwise. This -is O(1) (unlike `Object.keys(obj).length === 0`, which is O(N)). - -### hasKey(obj, key) - -Returns true if the given object has an enumerable, non-inherited property -called `key`. [For information on enumerability and ownership of properties, see -the MDN -documentation.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) - -### forEachKey(obj, callback) - -Like Array.forEach, but iterates enumerable, owned properties of an object -rather than elements of an array. Equivalent to: - - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - callback(key, obj[key]); - } - } - - -### flattenObject(obj, depth) - -Flattens an object up to a given level of nesting, returning an array of arrays -of length "depth + 1", where the first "depth" elements correspond to flattened -columns and the last element contains the remaining object . For example: - - flattenObject({ - 'I': { - 'A': { - 'i': { - 'datum1': [ 1, 2 ], - 'datum2': [ 3, 4 ] - }, - 'ii': { - 'datum1': [ 3, 4 ] - } - }, - 'B': { - 'i': { - 'datum1': [ 5, 6 ] - }, - 'ii': { - 'datum1': [ 7, 8 ], - 'datum2': [ 3, 4 ], - }, - 'iii': { - } - } - }, - 'II': { - 'A': { - 'i': { - 'datum1': [ 1, 2 ], - 'datum2': [ 3, 4 ] - } - } - } - }, 3) - -becomes: - - [ - [ 'I', 'A', 'i', { 'datum1': [ 1, 2 ], 'datum2': [ 3, 4 ] } ], - [ 'I', 'A', 'ii', { 'datum1': [ 3, 4 ] } ], - [ 'I', 'B', 'i', { 'datum1': [ 5, 6 ] } ], - [ 'I', 'B', 'ii', { 'datum1': [ 7, 8 ], 'datum2': [ 3, 4 ] } ], - [ 'I', 'B', 'iii', {} ], - [ 'II', 'A', 'i', { 'datum1': [ 1, 2 ], 'datum2': [ 3, 4 ] } ] - ] - -This function is strict: "depth" must be a non-negative integer and "obj" must -be a non-null object with at least "depth" levels of nesting under all keys. - - -### flattenIter(obj, depth, func) - -This is similar to `flattenObject` except that instead of returning an array, -this function invokes `func(entry)` for each `entry` in the array that -`flattenObject` would return. `flattenIter(obj, depth, func)` is logically -equivalent to `flattenObject(obj, depth).forEach(func)`. Importantly, this -version never constructs the full array. Its memory usage is O(depth) rather -than O(n) (where `n` is the number of flattened elements). - -There's another difference between `flattenObject` and `flattenIter` that's -related to the special case where `depth === 0`. In this case, `flattenObject` -omits the array wrapping `obj` (which is regrettable). - - -### pluck(obj, key) - -Fetch nested property "key" from object "obj", traversing objects as needed. -For example, `pluck(obj, "foo.bar.baz")` is roughly equivalent to -`obj.foo.bar.baz`, except that: - -1. If traversal fails, the resulting value is undefined, and no error is - thrown. For example, `pluck({}, "foo.bar")` is just undefined. -2. If "obj" has property "key" directly (without traversing), the - corresponding property is returned. For example, - `pluck({ 'foo.bar': 1 }, 'foo.bar')` is 1, not undefined. This is also - true recursively, so `pluck({ 'a': { 'foo.bar': 1 } }, 'a.foo.bar')` is - also 1, not undefined. - - -### randElt(array) - -Returns an element from "array" selected uniformly at random. If "array" is -empty, throws an Error. - - -### startsWith(str, prefix) - -Returns true if the given string starts with the given prefix and false -otherwise. - - -### endsWith(str, suffix) - -Returns true if the given string ends with the given suffix and false -otherwise. - - -### iso8601(date) - -Converts a Date object to an ISO8601 date string of the form -"YYYY-MM-DDTHH:MM:SS.sssZ". This format is not customizable. - - -### parseDateTime(str) - -Parses a date expressed as a string, as either a number of milliseconds since -the epoch or any string format that Date accepts, giving preference to the -former where these two sets overlap (e.g., strings containing small numbers). - - -### hrtimeDiff(timeA, timeB) - -Given two hrtime readings (as from Node's `process.hrtime()`), where timeA is -later than timeB, compute the difference and return that as an hrtime. It is -illegal to invoke this for a pair of times where timeB is newer than timeA. - -### hrtimeAdd(timeA, timeB) - -Add two hrtime intervals (as from Node's `process.hrtime()`), returning a new -hrtime interval array. This function does not modify either input argument. - - -### hrtimeAccum(timeA, timeB) - -Add two hrtime intervals (as from Node's `process.hrtime()`), storing the -result in `timeA`. This function overwrites (and returns) the first argument -passed in. - - -### hrtimeNanosec(timeA), hrtimeMicrosec(timeA), hrtimeMillisec(timeA) - -This suite of functions converts a hrtime interval (as from Node's -`process.hrtime()`) into a scalar number of nanoseconds, microseconds or -milliseconds. Results are truncated, as with `Math.floor()`. - - -### validateJsonObject(schema, object) - -Uses JSON validation (via JSV) to validate the given object against the given -schema. On success, returns null. On failure, *returns* (does not throw) a -useful Error object. - - -### extraProperties(object, allowed) - -Check an object for unexpected properties. Accepts the object to check, and an -array of allowed property name strings. If extra properties are detected, an -array of extra property names is returned. If no properties other than those -in the allowed list are present on the object, the returned array will be of -zero length. - -### mergeObjects(provided, overrides, defaults) - -Merge properties from objects "provided", "overrides", and "defaults". The -intended use case is for functions that accept named arguments in an "args" -object, but want to provide some default values and override other values. In -that case, "provided" is what the caller specified, "overrides" are what the -function wants to override, and "defaults" contains default values. - -The function starts with the values in "defaults", overrides them with the -values in "provided", and then overrides those with the values in "overrides". -For convenience, any of these objects may be falsey, in which case they will be -ignored. The input objects are never modified, but properties in the returned -object are not deep-copied. - -For example: - - mergeObjects(undefined, { 'objectMode': true }, { 'highWaterMark': 0 }) - -returns: - - { 'objectMode': true, 'highWaterMark': 0 } - -For another example: - - mergeObjects( - { 'highWaterMark': 16, 'objectMode': 7 }, /* from caller */ - { 'objectMode': true }, /* overrides */ - { 'highWaterMark': 0 }); /* default */ - -returns: - - { 'objectMode': true, 'highWaterMark': 16 } - - -# Contributing - -Code should be "make check" clean. This target assumes that -[jsl](http://github.com/davepacheco/javascriptlint) and -[jsstyle](http://github.com/davepacheco/jsstyle) are on your path. - -New tests should generally accompany new functions and bug fixes. The tests -should pass cleanly (run tests/basic.js). diff --git a/fundamentals/bug-challenge-es6/node_modules/jsprim/lib/jsprim.js b/fundamentals/bug-challenge-es6/node_modules/jsprim/lib/jsprim.js deleted file mode 100644 index 26c3ba1c0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsprim/lib/jsprim.js +++ /dev/null @@ -1,488 +0,0 @@ -/* - * lib/jsprim.js: utilities for primitive JavaScript types - */ - -var mod_assert = require('assert'); -var mod_util = require('util'); - -var mod_extsprintf = require('extsprintf'); -var mod_verror = require('verror'); -var mod_jsonschema = require('json-schema'); - -/* - * Public interface - */ -exports.deepCopy = deepCopy; -exports.deepEqual = deepEqual; -exports.isEmpty = isEmpty; -exports.hasKey = hasKey; -exports.forEachKey = forEachKey; -exports.pluck = pluck; -exports.flattenObject = flattenObject; -exports.flattenIter = flattenIter; -exports.validateJsonObject = validateJsonObjectJS; -exports.validateJsonObjectJS = validateJsonObjectJS; -exports.randElt = randElt; -exports.extraProperties = extraProperties; -exports.mergeObjects = mergeObjects; - -exports.startsWith = startsWith; -exports.endsWith = endsWith; - -exports.iso8601 = iso8601; -exports.rfc1123 = rfc1123; -exports.parseDateTime = parseDateTime; - -exports.hrtimediff = hrtimeDiff; -exports.hrtimeDiff = hrtimeDiff; -exports.hrtimeAccum = hrtimeAccum; -exports.hrtimeAdd = hrtimeAdd; -exports.hrtimeNanosec = hrtimeNanosec; -exports.hrtimeMicrosec = hrtimeMicrosec; -exports.hrtimeMillisec = hrtimeMillisec; - - -/* - * Deep copy an acyclic *basic* Javascript object. This only handles basic - * scalars (strings, numbers, booleans) and arbitrarily deep arrays and objects - * containing these. This does *not* handle instances of other classes. - */ -function deepCopy(obj) -{ - var ret, key; - var marker = '__deepCopy'; - - if (obj && obj[marker]) - throw (new Error('attempted deep copy of cyclic object')); - - if (obj && obj.constructor == Object) { - ret = {}; - obj[marker] = true; - - for (key in obj) { - if (key == marker) - continue; - - ret[key] = deepCopy(obj[key]); - } - - delete (obj[marker]); - return (ret); - } - - if (obj && obj.constructor == Array) { - ret = []; - obj[marker] = true; - - for (key = 0; key < obj.length; key++) - ret.push(deepCopy(obj[key])); - - delete (obj[marker]); - return (ret); - } - - /* - * It must be a primitive type -- just return it. - */ - return (obj); -} - -function deepEqual(obj1, obj2) -{ - if (typeof (obj1) != typeof (obj2)) - return (false); - - if (obj1 === null || obj2 === null || typeof (obj1) != 'object') - return (obj1 === obj2); - - if (obj1.constructor != obj2.constructor) - return (false); - - var k; - for (k in obj1) { - if (!obj2.hasOwnProperty(k)) - return (false); - - if (!deepEqual(obj1[k], obj2[k])) - return (false); - } - - for (k in obj2) { - if (!obj1.hasOwnProperty(k)) - return (false); - } - - return (true); -} - -function isEmpty(obj) -{ - var key; - for (key in obj) - return (false); - return (true); -} - -function hasKey(obj, key) -{ - mod_assert.equal(typeof (key), 'string'); - return (Object.prototype.hasOwnProperty.call(obj, key)); -} - -function forEachKey(obj, callback) -{ - for (var key in obj) { - if (hasKey(obj, key)) { - callback(key, obj[key]); - } - } -} - -function pluck(obj, key) -{ - mod_assert.equal(typeof (key), 'string'); - return (pluckv(obj, key)); -} - -function pluckv(obj, key) -{ - if (obj === null || typeof (obj) !== 'object') - return (undefined); - - if (obj.hasOwnProperty(key)) - return (obj[key]); - - var i = key.indexOf('.'); - if (i == -1) - return (undefined); - - var key1 = key.substr(0, i); - if (!obj.hasOwnProperty(key1)) - return (undefined); - - return (pluckv(obj[key1], key.substr(i + 1))); -} - -/* - * Invoke callback(row) for each entry in the array that would be returned by - * flattenObject(data, depth). This is just like flattenObject(data, - * depth).forEach(callback), except that the intermediate array is never - * created. - */ -function flattenIter(data, depth, callback) -{ - doFlattenIter(data, depth, [], callback); -} - -function doFlattenIter(data, depth, accum, callback) -{ - var each; - var key; - - if (depth === 0) { - each = accum.slice(0); - each.push(data); - callback(each); - return; - } - - mod_assert.ok(data !== null); - mod_assert.equal(typeof (data), 'object'); - mod_assert.equal(typeof (depth), 'number'); - mod_assert.ok(depth >= 0); - - for (key in data) { - each = accum.slice(0); - each.push(key); - doFlattenIter(data[key], depth - 1, each, callback); - } -} - -function flattenObject(data, depth) -{ - if (depth === 0) - return ([ data ]); - - mod_assert.ok(data !== null); - mod_assert.equal(typeof (data), 'object'); - mod_assert.equal(typeof (depth), 'number'); - mod_assert.ok(depth >= 0); - - var rv = []; - var key; - - for (key in data) { - flattenObject(data[key], depth - 1).forEach(function (p) { - rv.push([ key ].concat(p)); - }); - } - - return (rv); -} - -function startsWith(str, prefix) -{ - return (str.substr(0, prefix.length) == prefix); -} - -function endsWith(str, suffix) -{ - return (str.substr( - str.length - suffix.length, suffix.length) == suffix); -} - -function iso8601(d) -{ - if (typeof (d) == 'number') - d = new Date(d); - mod_assert.ok(d.constructor === Date); - return (mod_extsprintf.sprintf('%4d-%02d-%02dT%02d:%02d:%02d.%03dZ', - d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate(), - d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), - d.getUTCMilliseconds())); -} - -var RFC1123_MONTHS = [ - 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', - 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; -var RFC1123_DAYS = [ - 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; - -function rfc1123(date) { - return (mod_extsprintf.sprintf('%s, %02d %s %04d %02d:%02d:%02d GMT', - RFC1123_DAYS[date.getUTCDay()], date.getUTCDate(), - RFC1123_MONTHS[date.getUTCMonth()], date.getUTCFullYear(), - date.getUTCHours(), date.getUTCMinutes(), - date.getUTCSeconds())); -} - -/* - * Parses a date expressed as a string, as either a number of milliseconds since - * the epoch or any string format that Date accepts, giving preference to the - * former where these two sets overlap (e.g., small numbers). - */ -function parseDateTime(str) -{ - /* - * This is irritatingly implicit, but significantly more concise than - * alternatives. The "+str" will convert a string containing only a - * number directly to a Number, or NaN for other strings. Thus, if the - * conversion succeeds, we use it (this is the milliseconds-since-epoch - * case). Otherwise, we pass the string directly to the Date - * constructor to parse. - */ - var numeric = +str; - if (!isNaN(numeric)) { - return (new Date(numeric)); - } else { - return (new Date(str)); - } -} - -function validateJsonObjectJS(schema, input) -{ - var report = mod_jsonschema.validate(input, schema); - - if (report.errors.length === 0) - return (null); - - /* Currently, we only do anything useful with the first error. */ - var error = report.errors[0]; - - /* The failed property is given by a URI with an irrelevant prefix. */ - var propname = error['property']; - var reason = error['message'].toLowerCase(); - var i, j; - - /* - * There's at least one case where the property error message is - * confusing at best. We work around this here. - */ - if ((i = reason.indexOf('the property ')) != -1 && - (j = reason.indexOf(' is not defined in the schema and the ' + - 'schema does not allow additional properties')) != -1) { - i += 'the property '.length; - if (propname === '') - propname = reason.substr(i, j - i); - else - propname = propname + '.' + reason.substr(i, j - i); - - reason = 'unsupported property'; - } - - var rv = new mod_verror.VError('property "%s": %s', propname, reason); - rv.jsv_details = error; - return (rv); -} - -function randElt(arr) -{ - mod_assert.ok(Array.isArray(arr) && arr.length > 0, - 'randElt argument must be a non-empty array'); - - return (arr[Math.floor(Math.random() * arr.length)]); -} - -function assertHrtime(a) -{ - mod_assert.ok(a[0] >= 0 && a[1] >= 0, - 'negative numbers not allowed in hrtimes'); - mod_assert.ok(a[1] < 1e9, 'nanoseconds column overflow'); -} - -/* - * Compute the time elapsed between hrtime readings A and B, where A is later - * than B. hrtime readings come from Node's process.hrtime(). There is no - * defined way to represent negative deltas, so it's illegal to diff B from A - * where the time denoted by B is later than the time denoted by A. If this - * becomes valuable, we can define a representation and extend the - * implementation to support it. - */ -function hrtimeDiff(a, b) -{ - assertHrtime(a); - assertHrtime(b); - mod_assert.ok(a[0] > b[0] || (a[0] == b[0] && a[1] >= b[1]), - 'negative differences not allowed'); - - var rv = [ a[0] - b[0], 0 ]; - - if (a[1] >= b[1]) { - rv[1] = a[1] - b[1]; - } else { - rv[0]--; - rv[1] = 1e9 - (b[1] - a[1]); - } - - return (rv); -} - -/* - * Convert a hrtime reading from the array format returned by Node's - * process.hrtime() into a scalar number of nanoseconds. - */ -function hrtimeNanosec(a) -{ - assertHrtime(a); - - return (Math.floor(a[0] * 1e9 + a[1])); -} - -/* - * Convert a hrtime reading from the array format returned by Node's - * process.hrtime() into a scalar number of microseconds. - */ -function hrtimeMicrosec(a) -{ - assertHrtime(a); - - return (Math.floor(a[0] * 1e6 + a[1] / 1e3)); -} - -/* - * Convert a hrtime reading from the array format returned by Node's - * process.hrtime() into a scalar number of milliseconds. - */ -function hrtimeMillisec(a) -{ - assertHrtime(a); - - return (Math.floor(a[0] * 1e3 + a[1] / 1e6)); -} - -/* - * Add two hrtime readings A and B, overwriting A with the result of the - * addition. This function is useful for accumulating several hrtime intervals - * into a counter. Returns A. - */ -function hrtimeAccum(a, b) -{ - assertHrtime(a); - assertHrtime(b); - - /* - * Accumulate the nanosecond component. - */ - a[1] += b[1]; - if (a[1] >= 1e9) { - /* - * The nanosecond component overflowed, so carry to the seconds - * field. - */ - a[0]++; - a[1] -= 1e9; - } - - /* - * Accumulate the seconds component. - */ - a[0] += b[0]; - - return (a); -} - -/* - * Add two hrtime readings A and B, returning the result as a new hrtime array. - * Does not modify either input argument. - */ -function hrtimeAdd(a, b) -{ - assertHrtime(a); - - var rv = [ a[0], a[1] ]; - - return (hrtimeAccum(rv, b)); -} - - -/* - * Check an object for unexpected properties. Accepts the object to check, and - * an array of allowed property names (strings). Returns an array of key names - * that were found on the object, but did not appear in the list of allowed - * properties. If no properties were found, the returned array will be of - * zero length. - */ -function extraProperties(obj, allowed) -{ - mod_assert.ok(typeof (obj) === 'object' && obj !== null, - 'obj argument must be a non-null object'); - mod_assert.ok(Array.isArray(allowed), - 'allowed argument must be an array of strings'); - for (var i = 0; i < allowed.length; i++) { - mod_assert.ok(typeof (allowed[i]) === 'string', - 'allowed argument must be an array of strings'); - } - - return (Object.keys(obj).filter(function (key) { - return (allowed.indexOf(key) === -1); - })); -} - -/* - * Given three sets of properties "provided" (may be undefined), "overrides" - * (required), and "defaults" (may be undefined), construct an object containing - * the union of these sets with "overrides" overriding "provided", and - * "provided" overriding "defaults". None of the input objects are modified. - */ -function mergeObjects(provided, overrides, defaults) -{ - var rv, k; - - rv = {}; - if (defaults) { - for (k in defaults) - rv[k] = defaults[k]; - } - - if (provided) { - for (k in provided) - rv[k] = provided[k]; - } - - if (overrides) { - for (k in overrides) - rv[k] = overrides[k]; - } - - return (rv); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/jsprim/package.json b/fundamentals/bug-challenge-es6/node_modules/jsprim/package.json deleted file mode 100644 index 84cecdc24..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/jsprim/package.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "_args": [ - [ - "jsprim@^1.2.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/http-signature" - ] - ], - "_from": "jsprim@>=1.2.2 <2.0.0", - "_id": "jsprim@1.3.1", - "_inCache": true, - "_installable": true, - "_location": "/jsprim", - "_nodeVersion": "0.12.7", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/jsprim-1.3.1.tgz_1473725209917_0.5387293708045036" - }, - "_npmUser": { - "email": "dap@cs.brown.edu", - "name": "dap" - }, - "_npmVersion": "2.15.9", - "_phantomChildren": {}, - "_requested": { - "name": "jsprim", - "raw": "jsprim@^1.2.2", - "rawSpec": "^1.2.2", - "scope": null, - "spec": ">=1.2.2 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/http-signature" - ], - "_resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz", - "_shasum": "2a7256f70412a29ee3670aaca625994c4dcff252", - "_shrinkwrap": null, - "_spec": "jsprim@^1.2.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/http-signature", - "bugs": { - "url": "https://github.com/davepacheco/node-jsprim/issues" - }, - "dependencies": { - "extsprintf": "1.0.2", - "json-schema": "0.2.3", - "verror": "1.3.6" - }, - "description": "utilities for primitive JavaScript types", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "2a7256f70412a29ee3670aaca625994c4dcff252", - "tarball": "https://registry.npmjs.org/jsprim/-/jsprim-1.3.1.tgz" - }, - "engines": [ - "node >=0.6.0" - ], - "gitHead": "825aba45c6cff4340c18cdae363ccb5bdf840bd7", - "homepage": "https://github.com/davepacheco/node-jsprim#readme", - "license": "MIT", - "main": "./lib/jsprim.js", - "maintainers": [ - { - "email": "dap@cs.brown.edu", - "name": "dap" - } - ], - "name": "jsprim", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/davepacheco/node-jsprim.git" - }, - "scripts": {}, - "version": "1.3.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/kind-of/LICENSE b/fundamentals/bug-challenge-es6/node_modules/kind-of/LICENSE deleted file mode 100644 index 39245ac1c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/kind-of/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/kind-of/README.md b/fundamentals/bug-challenge-es6/node_modules/kind-of/README.md deleted file mode 100644 index 4ac4f18b1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/kind-of/README.md +++ /dev/null @@ -1,247 +0,0 @@ -# kind-of [![NPM version](https://img.shields.io/npm/v/kind-of.svg?style=flat)](https://www.npmjs.com/package/kind-of) [![NPM downloads](https://img.shields.io/npm/dm/kind-of.svg?style=flat)](https://npmjs.org/package/kind-of) [![Build Status](https://img.shields.io/travis/jonschlinkert/kind-of.svg?style=flat)](https://travis-ci.org/jonschlinkert/kind-of) - -Get the native type of a value. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save kind-of -``` - -Install with [bower](http://bower.io/) - -```sh -$ bower install kind-of --save -``` - -## Usage - -> es5, browser and es6 ready - -```js -var kindOf = require('kind-of'); - -kindOf(undefined); -//=> 'undefined' - -kindOf(null); -//=> 'null' - -kindOf(true); -//=> 'boolean' - -kindOf(false); -//=> 'boolean' - -kindOf(new Boolean(true)); -//=> 'boolean' - -kindOf(new Buffer('')); -//=> 'buffer' - -kindOf(42); -//=> 'number' - -kindOf(new Number(42)); -//=> 'number' - -kindOf('str'); -//=> 'string' - -kindOf(new String('str')); -//=> 'string' - -kindOf(arguments); -//=> 'arguments' - -kindOf({}); -//=> 'object' - -kindOf(Object.create(null)); -//=> 'object' - -kindOf(new Test()); -//=> 'object' - -kindOf(new Date()); -//=> 'date' - -kindOf([]); -//=> 'array' - -kindOf([1, 2, 3]); -//=> 'array' - -kindOf(new Array()); -//=> 'array' - -kindOf(/foo/); -//=> 'regexp' - -kindOf(new RegExp('foo')); -//=> 'regexp' - -kindOf(function () {}); -//=> 'function' - -kindOf(function * () {}); -//=> 'function' - -kindOf(new Function()); -//=> 'function' - -kindOf(new Map()); -//=> 'map' - -kindOf(new WeakMap()); -//=> 'weakmap' - -kindOf(new Set()); -//=> 'set' - -kindOf(new WeakSet()); -//=> 'weakset' - -kindOf(Symbol('str')); -//=> 'symbol' - -kindOf(new Int8Array()); -//=> 'int8array' - -kindOf(new Uint8Array()); -//=> 'uint8array' - -kindOf(new Uint8ClampedArray()); -//=> 'uint8clampedarray' - -kindOf(new Int16Array()); -//=> 'int16array' - -kindOf(new Uint16Array()); -//=> 'uint16array' - -kindOf(new Int32Array()); -//=> 'int32array' - -kindOf(new Uint32Array()); -//=> 'uint32array' - -kindOf(new Float32Array()); -//=> 'float32array' - -kindOf(new Float64Array()); -//=> 'float64array' -``` - -## Benchmarks - -Benchmarked against [typeof](http://github.com/CodingFu/typeof) and [type-of](https://github.com/ForbesLindesay/type-of). -Note that performaces is slower for es6 features `Map`, `WeakMap`, `Set` and `WeakSet`. - -```bash -#1: array - current x 23,329,397 ops/sec ±0.82% (94 runs sampled) - lib-type-of x 4,170,273 ops/sec ±0.55% (94 runs sampled) - lib-typeof x 9,686,935 ops/sec ±0.59% (98 runs sampled) - -#2: boolean - current x 27,197,115 ops/sec ±0.85% (94 runs sampled) - lib-type-of x 3,145,791 ops/sec ±0.73% (97 runs sampled) - lib-typeof x 9,199,562 ops/sec ±0.44% (99 runs sampled) - -#3: date - current x 20,190,117 ops/sec ±0.86% (92 runs sampled) - lib-type-of x 5,166,970 ops/sec ±0.74% (94 runs sampled) - lib-typeof x 9,610,821 ops/sec ±0.50% (96 runs sampled) - -#4: function - current x 23,855,460 ops/sec ±0.60% (97 runs sampled) - lib-type-of x 5,667,740 ops/sec ±0.54% (100 runs sampled) - lib-typeof x 10,010,644 ops/sec ±0.44% (100 runs sampled) - -#5: null - current x 27,061,047 ops/sec ±0.97% (96 runs sampled) - lib-type-of x 13,965,573 ops/sec ±0.62% (97 runs sampled) - lib-typeof x 8,460,194 ops/sec ±0.61% (97 runs sampled) - -#6: number - current x 25,075,682 ops/sec ±0.53% (99 runs sampled) - lib-type-of x 2,266,405 ops/sec ±0.41% (98 runs sampled) - lib-typeof x 9,821,481 ops/sec ±0.45% (99 runs sampled) - -#7: object - current x 3,348,980 ops/sec ±0.49% (99 runs sampled) - lib-type-of x 3,245,138 ops/sec ±0.60% (94 runs sampled) - lib-typeof x 9,262,952 ops/sec ±0.59% (99 runs sampled) - -#8: regex - current x 21,284,827 ops/sec ±0.72% (96 runs sampled) - lib-type-of x 4,689,241 ops/sec ±0.43% (100 runs sampled) - lib-typeof x 8,957,593 ops/sec ±0.62% (98 runs sampled) - -#9: string - current x 25,379,234 ops/sec ±0.58% (96 runs sampled) - lib-type-of x 3,635,148 ops/sec ±0.76% (93 runs sampled) - lib-typeof x 9,494,134 ops/sec ±0.49% (98 runs sampled) - -#10: undef - current x 27,459,221 ops/sec ±1.01% (93 runs sampled) - lib-type-of x 14,360,433 ops/sec ±0.52% (99 runs sampled) - lib-typeof x 23,202,868 ops/sec ±0.59% (94 runs sampled) -``` - -## Optimizations - -In 7 out of 8 cases, this library is 2x-10x faster than other top libraries included in the benchmarks. There are a few things that lead to this performance advantage, none of them hard and fast rules, but all of them simple and repeatable in almost any code library: - -1. Optimize around the fastest and most common use cases first. Of course, this will change from project-to-project, but I took some time to understand how and why `typeof` checks were being used in my own libraries and other libraries I use a lot. -2. Optimize around bottlenecks - In other words, the order in which conditionals are implemented is significant, because each check is only as fast as the failing checks that came before it. Here, the biggest bottleneck by far is checking for plain objects (an object that was created by the `Object` constructor). I opted to make this check happen by process of elimination rather than brute force up front (e.g. by using something like `val.constructor.name`), so that every other type check would not be penalized it. -3. Don't do uneccessary processing - why do `.slice(8, -1).toLowerCase();` just to get the word `regex`? It's much faster to do `if (type === '[object RegExp]') return 'regex'` - -## About - -### Related projects - -* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet") -* [is-number](https://www.npmjs.com/package/is-number): Returns true if the value is a number. comprehensive tests. | [homepage](https://github.com/jonschlinkert/is-number "Returns true if the value is a number. comprehensive tests.") -* [is-primitive](https://www.npmjs.com/package/is-primitive): Returns `true` if the value is a primitive. | [homepage](https://github.com/jonschlinkert/is-primitive "Returns `true` if the value is a primitive. ") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Building docs - -_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_ - -To generate the readme and API documentation with [verb](https://github.com/verbose/verb): - -```sh -$ npm install -g verb verb-generate-readme && verb -``` - -### Running tests - -Install dev dependencies: - -```sh -$ npm install -d && npm test -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -### License - -Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). -Released under the [MIT license](https://github.com/jonschlinkert/kind-of/blob/master/LICENSE). - -*** - -_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.1.28, on July 29, 2016._ \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/kind-of/index.js b/fundamentals/bug-challenge-es6/node_modules/kind-of/index.js deleted file mode 100644 index 87938c9a2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/kind-of/index.js +++ /dev/null @@ -1,113 +0,0 @@ -var isBuffer = require('is-buffer'); -var toString = Object.prototype.toString; - -/** - * Get the native `typeof` a value. - * - * @param {*} `val` - * @return {*} Native javascript type - */ - -module.exports = function kindOf(val) { - // primitivies - if (typeof val === 'undefined') { - return 'undefined'; - } - if (val === null) { - return 'null'; - } - if (val === true || val === false || val instanceof Boolean) { - return 'boolean'; - } - if (typeof val === 'string' || val instanceof String) { - return 'string'; - } - if (typeof val === 'number' || val instanceof Number) { - return 'number'; - } - - // functions - if (typeof val === 'function' || val instanceof Function) { - return 'function'; - } - - // array - if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) { - return 'array'; - } - - // check for instances of RegExp and Date before calling `toString` - if (val instanceof RegExp) { - return 'regexp'; - } - if (val instanceof Date) { - return 'date'; - } - - // other objects - var type = toString.call(val); - - if (type === '[object RegExp]') { - return 'regexp'; - } - if (type === '[object Date]') { - return 'date'; - } - if (type === '[object Arguments]') { - return 'arguments'; - } - - // buffer - if (typeof Buffer !== 'undefined' && isBuffer(val)) { - return 'buffer'; - } - - // es6: Map, WeakMap, Set, WeakSet - if (type === '[object Set]') { - return 'set'; - } - if (type === '[object WeakSet]') { - return 'weakset'; - } - if (type === '[object Map]') { - return 'map'; - } - if (type === '[object WeakMap]') { - return 'weakmap'; - } - if (type === '[object Symbol]') { - return 'symbol'; - } - - // typed arrays - if (type === '[object Int8Array]') { - return 'int8array'; - } - if (type === '[object Uint8Array]') { - return 'uint8array'; - } - if (type === '[object Uint8ClampedArray]') { - return 'uint8clampedarray'; - } - if (type === '[object Int16Array]') { - return 'int16array'; - } - if (type === '[object Uint16Array]') { - return 'uint16array'; - } - if (type === '[object Int32Array]') { - return 'int32array'; - } - if (type === '[object Uint32Array]') { - return 'uint32array'; - } - if (type === '[object Float32Array]') { - return 'float32array'; - } - if (type === '[object Float64Array]') { - return 'float64array'; - } - - // must be a plain object - return 'object'; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/kind-of/package.json b/fundamentals/bug-challenge-es6/node_modules/kind-of/package.json deleted file mode 100644 index c4601f1a7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/kind-of/package.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "_args": [ - [ - "kind-of@^3.0.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch" - ] - ], - "_from": "kind-of@>=3.0.2 <4.0.0", - "_id": "kind-of@3.0.4", - "_inCache": true, - "_installable": true, - "_location": "/kind-of", - "_nodeVersion": "6.3.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/kind-of-3.0.4.tgz_1469811230830_0.8813814013265073" - }, - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "kind-of", - "raw": "kind-of@^3.0.2", - "rawSpec": "^3.0.2", - "scope": null, - "spec": ">=3.0.2 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/is-number", - "/micromatch", - "/randomatic" - ], - "_resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.0.4.tgz", - "_shasum": "7b8ecf18a4e17f8269d73b501c9f232c96887a74", - "_shrinkwrap": null, - "_spec": "kind-of@^3.0.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/kind-of/issues" - }, - "dependencies": { - "is-buffer": "^1.0.2" - }, - "description": "Get the native type of a value.", - "devDependencies": { - "ansi-bold": "^0.1.1", - "benchmarked": "^0.2.5", - "browserify": "^13.1.0", - "glob": "^7.0.5", - "gulp-format-md": "^0.1.9", - "mocha": "^2.5.3", - "type-of": "^2.0.1", - "typeof": "^1.0.0" - }, - "directories": {}, - "dist": { - "shasum": "7b8ecf18a4e17f8269d73b501c9f232c96887a74", - "tarball": "https://registry.npmjs.org/kind-of/-/kind-of-3.0.4.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js", - "LICENSE", - "README.md" - ], - "gitHead": "8f93765a6bbbe350e1ba68e790d1ff337b91331a", - "homepage": "https://github.com/jonschlinkert/kind-of", - "keywords": [ - "arguments", - "array", - "boolean", - "check", - "date", - "function", - "is", - "is-type", - "is-type-of", - "kind", - "kind-of", - "number", - "object", - "of", - "regexp", - "string", - "test", - "type", - "type-of", - "typeof", - "types" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - } - ], - "name": "kind-of", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/kind-of.git" - }, - "scripts": { - "prepublish": "browserify -o browser.js -e index.js -s index --bare", - "test": "mocha" - }, - "verb": { - "layout": "default", - "lint": { - "reflinks": true - }, - "plugins": [ - "gulp-format-md" - ], - "reflinks": [ - "verb" - ], - "related": { - "list": [ - "is-glob", - "is-number", - "is-primitive" - ] - }, - "tasks": [ - "readme" - ], - "toc": false - }, - "version": "3.0.4" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lazy-cache/LICENSE b/fundamentals/bug-challenge-es6/node_modules/lazy-cache/LICENSE deleted file mode 100644 index 1e49edf81..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lazy-cache/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lazy-cache/README.md b/fundamentals/bug-challenge-es6/node_modules/lazy-cache/README.md deleted file mode 100644 index 33b5a4dde..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lazy-cache/README.md +++ /dev/null @@ -1,147 +0,0 @@ -# lazy-cache [![NPM version](https://img.shields.io/npm/v/lazy-cache.svg?style=flat)](https://www.npmjs.com/package/lazy-cache) [![NPM downloads](https://img.shields.io/npm/dm/lazy-cache.svg?style=flat)](https://npmjs.org/package/lazy-cache) [![Build Status](https://img.shields.io/travis/jonschlinkert/lazy-cache.svg?style=flat)](https://travis-ci.org/jonschlinkert/lazy-cache) - -> Cache requires to be lazy-loaded when needed. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install lazy-cache --save -``` - -If you use webpack and are experiencing issues, try using [unlazy-loader](https://github.com/doowb/unlazy-loader), a webpack loader that fixes the bug that prevents webpack from working with native javascript getters. - -## Usage - -```js -var utils = require('lazy-cache')(require); -``` - -**Use as a property on `lazy`** - -The module is also added as a property to the `lazy` function -so it can be called without having to call a function first. - -```js -var utils = require('lazy-cache')(require); - -// `npm install glob` -utils('glob'); - -// glob sync -console.log(utils.glob.sync('*.js')); - -// glob async -utils.glob('*.js', function (err, files) { - console.log(files); -}); -``` - -**Use as a function** - -```js -var utils = require('lazy-cache')(require); -var glob = utils('glob'); - -// `glob` is a now a function that may be called when needed -glob().sync('foo/*.js'); -``` - -## Aliases - -An alias may be passed as the second argument if you don't want to use the automatically camel-cased variable name. - -**Example** - -```js -var utils = require('lazy-cache')(require); - -// alias `ansi-yellow` as `yellow` -utils('ansi-yellow', 'yellow'); -console.log(utils.yellow('foo')); -``` - -## Browserify usage - -**Example** - -```js -var utils = require('lazy-cache')(require); -// temporarily re-assign `require` to trick browserify -var fn = require; -require = utils; -// list module dependencies (here, `require` is actually `lazy-cache`) -require('glob'); -require = fn; // restore the native `require` function - -/** - * Now you can use glob with the `utils.glob` variable - */ - -// sync -console.log(utils.glob.sync('*.js')); - -// async -utils.glob('*.js', function (err, files) { - console.log(files.join('\n')); -}); -``` - -## Kill switch - -In certain rare edge cases it may be necessary to unlazy all lazy-cached dependencies (5 reported cases after ~30 million downloads). - -To force lazy-cache to immediately invoke all dependencies, do: - -```js -process.env.UNLAZY = true; -``` - -## Related projects - -You might also be interested in these projects: - -[lint-deps](https://www.npmjs.com/package/lint-deps): CLI tool that tells you when dependencies are missing from package.json and offers you a… [more](https://www.npmjs.com/package/lint-deps) | [homepage](https://github.com/jonschlinkert/lint-deps) - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/lazy-cache/issues/new). - -## Building docs - -Generate readme and API documentation with [verb](https://github.com/verbose/verb): - -```sh -$ npm install verb && npm run docs -``` - -Or, if [verb](https://github.com/verbose/verb) is installed globally: - -```sh -$ verb -``` - -## Running tests - -Install dev dependencies: - -```sh -$ npm install -d && npm test -``` - -## Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). -Released under the [MIT license](https://github.com/jonschlinkert/lazy-cache/blob/master/LICENSE). - -*** - -_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on April 22, 2016._ \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/lazy-cache/index.js b/fundamentals/bug-challenge-es6/node_modules/lazy-cache/index.js deleted file mode 100644 index da7897d0c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lazy-cache/index.js +++ /dev/null @@ -1,67 +0,0 @@ -'use strict'; - -/** - * Cache results of the first function call to ensure only calling once. - * - * ```js - * var utils = require('lazy-cache')(require); - * // cache the call to `require('ansi-yellow')` - * utils('ansi-yellow', 'yellow'); - * // use `ansi-yellow` - * console.log(utils.yellow('this is yellow')); - * ``` - * - * @param {Function} `fn` Function that will be called only once. - * @return {Function} Function that can be called to get the cached function - * @api public - */ - -function lazyCache(fn) { - var cache = {}; - var proxy = function(mod, name) { - name = name || camelcase(mod); - - // check both boolean and string in case `process.env` cases to string - if (process.env.UNLAZY === 'true' || process.env.UNLAZY === true || process.env.TRAVIS) { - cache[name] = fn(mod); - } - - Object.defineProperty(proxy, name, { - enumerable: true, - configurable: true, - get: getter - }); - - function getter() { - if (cache.hasOwnProperty(name)) { - return cache[name]; - } - return (cache[name] = fn(mod)); - } - return getter; - }; - return proxy; -} - -/** - * Used to camelcase the name to be stored on the `lazy` object. - * - * @param {String} `str` String containing `_`, `.`, `-` or whitespace that will be camelcased. - * @return {String} camelcased string. - */ - -function camelcase(str) { - if (str.length === 1) { - return str.toLowerCase(); - } - str = str.replace(/^[\W_]+|[\W_]+$/g, '').toLowerCase(); - return str.replace(/[\W_]+(\w|$)/g, function(_, ch) { - return ch.toUpperCase(); - }); -} - -/** - * Expose `lazyCache` - */ - -module.exports = lazyCache; diff --git a/fundamentals/bug-challenge-es6/node_modules/lazy-cache/package.json b/fundamentals/bug-challenge-es6/node_modules/lazy-cache/package.json deleted file mode 100644 index 4e8e192e4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lazy-cache/package.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "_args": [ - [ - "lazy-cache@^1.0.3", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/center-align" - ] - ], - "_from": "lazy-cache@>=1.0.3 <2.0.0", - "_id": "lazy-cache@1.0.4", - "_inCache": true, - "_installable": true, - "_location": "/lazy-cache", - "_nodeVersion": "5.5.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/lazy-cache-1.0.4.tgz_1461378859142_0.0996799839194864" - }, - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.6.0", - "_phantomChildren": {}, - "_requested": { - "name": "lazy-cache", - "raw": "lazy-cache@^1.0.3", - "rawSpec": "^1.0.3", - "scope": null, - "spec": ">=1.0.3 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/center-align" - ], - "_resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "_shasum": "a1d78fc3a50474cb80845d3b3b6e1da49a446e8e", - "_shrinkwrap": null, - "_spec": "lazy-cache@^1.0.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/center-align", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/lazy-cache/issues" - }, - "dependencies": {}, - "description": "Cache requires to be lazy-loaded when needed.", - "devDependencies": { - "ansi-yellow": "^0.1.1", - "glob": "^7.0.3", - "gulp-format-md": "^0.1.8", - "mocha": "^2.4.5" - }, - "directories": {}, - "dist": { - "shasum": "a1d78fc3a50474cb80845d3b3b6e1da49a446e8e", - "tarball": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "d081ffbda147391083a6856fafb1c5d82308f80c", - "homepage": "https://github.com/jonschlinkert/lazy-cache", - "keywords": [ - "cache", - "caching", - "dependencies", - "dependency", - "lazy", - "require", - "requires" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - } - ], - "name": "lazy-cache", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/lazy-cache.git" - }, - "scripts": { - "test": "mocha" - }, - "verb": { - "layout": "default", - "lint": { - "reflinks": true - }, - "plugins": [ - "gulp-format-md" - ], - "reflinks": [ - "verb" - ], - "related": { - "list": [ - "lint-deps" - ] - }, - "tasks": [ - "readme" - ], - "toc": false - }, - "version": "1.0.4" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lcid/index.js b/fundamentals/bug-challenge-es6/node_modules/lcid/index.js deleted file mode 100644 index 69bd3d231..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lcid/index.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; -var invertKv = require('invert-kv'); -var all = require('./lcid.json'); -var inverted = invertKv(all); - -exports.from = function (lcidCode) { - if (typeof lcidCode !== 'number') { - throw new TypeError('Expected a number'); - } - - return inverted[lcidCode]; -}; - -exports.to = function (localeId) { - if (typeof localeId !== 'string') { - throw new TypeError('Expected a string'); - } - - return all[localeId]; -}; - -exports.all = all; diff --git a/fundamentals/bug-challenge-es6/node_modules/lcid/lcid.json b/fundamentals/bug-challenge-es6/node_modules/lcid/lcid.json deleted file mode 100644 index 9c89f6a49..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lcid/lcid.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "af_ZA": 1078, - "am_ET": 1118, - "ar_AE": 14337, - "ar_BH": 15361, - "ar_DZ": 5121, - "ar_EG": 3073, - "ar_IQ": 2049, - "ar_JO": 11265, - "ar_KW": 13313, - "ar_LB": 12289, - "ar_LY": 4097, - "ar_MA": 6145, - "ar_OM": 8193, - "ar_QA": 16385, - "ar_SA": 1025, - "ar_SY": 10241, - "ar_TN": 7169, - "ar_YE": 9217, - "arn_CL": 1146, - "as_IN": 1101, - "az_AZ": 2092, - "ba_RU": 1133, - "be_BY": 1059, - "bg_BG": 1026, - "bn_IN": 1093, - "bo_BT": 2129, - "bo_CN": 1105, - "br_FR": 1150, - "bs_BA": 8218, - "ca_ES": 1027, - "co_FR": 1155, - "cs_CZ": 1029, - "cy_GB": 1106, - "da_DK": 1030, - "de_AT": 3079, - "de_CH": 2055, - "de_DE": 1031, - "de_LI": 5127, - "de_LU": 4103, - "div_MV": 1125, - "dsb_DE": 2094, - "el_GR": 1032, - "en_AU": 3081, - "en_BZ": 10249, - "en_CA": 4105, - "en_CB": 9225, - "en_GB": 2057, - "en_IE": 6153, - "en_IN": 18441, - "en_JA": 8201, - "en_MY": 17417, - "en_NZ": 5129, - "en_PH": 13321, - "en_TT": 11273, - "en_US": 1033, - "en_ZA": 7177, - "en_ZW": 12297, - "es_AR": 11274, - "es_BO": 16394, - "es_CL": 13322, - "es_CO": 9226, - "es_CR": 5130, - "es_DO": 7178, - "es_EC": 12298, - "es_ES": 3082, - "es_GT": 4106, - "es_HN": 18442, - "es_MX": 2058, - "es_NI": 19466, - "es_PA": 6154, - "es_PE": 10250, - "es_PR": 20490, - "es_PY": 15370, - "es_SV": 17418, - "es_UR": 14346, - "es_US": 21514, - "es_VE": 8202, - "et_EE": 1061, - "eu_ES": 1069, - "fa_IR": 1065, - "fi_FI": 1035, - "fil_PH": 1124, - "fo_FO": 1080, - "fr_BE": 2060, - "fr_CA": 3084, - "fr_CH": 4108, - "fr_FR": 1036, - "fr_LU": 5132, - "fr_MC": 6156, - "fy_NL": 1122, - "ga_IE": 2108, - "gbz_AF": 1164, - "gl_ES": 1110, - "gsw_FR": 1156, - "gu_IN": 1095, - "ha_NG": 1128, - "he_IL": 1037, - "hi_IN": 1081, - "hr_BA": 4122, - "hr_HR": 1050, - "hu_HU": 1038, - "hy_AM": 1067, - "id_ID": 1057, - "ii_CN": 1144, - "is_IS": 1039, - "it_CH": 2064, - "it_IT": 1040, - "iu_CA": 2141, - "ja_JP": 1041, - "ka_GE": 1079, - "kh_KH": 1107, - "kk_KZ": 1087, - "kl_GL": 1135, - "kn_IN": 1099, - "ko_KR": 1042, - "kok_IN": 1111, - "ky_KG": 1088, - "lb_LU": 1134, - "lo_LA": 1108, - "lt_LT": 1063, - "lv_LV": 1062, - "mi_NZ": 1153, - "mk_MK": 1071, - "ml_IN": 1100, - "mn_CN": 2128, - "mn_MN": 1104, - "moh_CA": 1148, - "mr_IN": 1102, - "ms_BN": 2110, - "ms_MY": 1086, - "mt_MT": 1082, - "my_MM": 1109, - "nb_NO": 1044, - "ne_NP": 1121, - "nl_BE": 2067, - "nl_NL": 1043, - "nn_NO": 2068, - "ns_ZA": 1132, - "oc_FR": 1154, - "or_IN": 1096, - "pa_IN": 1094, - "pl_PL": 1045, - "ps_AF": 1123, - "pt_BR": 1046, - "pt_PT": 2070, - "qut_GT": 1158, - "quz_BO": 1131, - "quz_EC": 2155, - "quz_PE": 3179, - "rm_CH": 1047, - "ro_RO": 1048, - "ru_RU": 1049, - "rw_RW": 1159, - "sa_IN": 1103, - "sah_RU": 1157, - "se_FI": 3131, - "se_NO": 1083, - "se_SE": 2107, - "si_LK": 1115, - "sk_SK": 1051, - "sl_SI": 1060, - "sma_NO": 6203, - "sma_SE": 7227, - "smj_NO": 4155, - "smj_SE": 5179, - "smn_FI": 9275, - "sms_FI": 8251, - "sq_AL": 1052, - "sr_BA": 7194, - "sr_SP": 3098, - "sv_FI": 2077, - "sv_SE": 1053, - "sw_KE": 1089, - "syr_SY": 1114, - "ta_IN": 1097, - "te_IN": 1098, - "tg_TJ": 1064, - "th_TH": 1054, - "tk_TM": 1090, - "tmz_DZ": 2143, - "tn_ZA": 1074, - "tr_TR": 1055, - "tt_RU": 1092, - "ug_CN": 1152, - "uk_UA": 1058, - "ur_IN": 2080, - "ur_PK": 1056, - "uz_UZ": 2115, - "vi_VN": 1066, - "wen_DE": 1070, - "wo_SN": 1160, - "xh_ZA": 1076, - "yo_NG": 1130, - "zh_CHS": 4, - "zh_CHT": 31748, - "zh_CN": 2052, - "zh_HK": 3076, - "zh_MO": 5124, - "zh_SG": 4100, - "zh_TW": 1028, - "zu_ZA": 1077 -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lcid/license b/fundamentals/bug-challenge-es6/node_modules/lcid/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lcid/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lcid/package.json b/fundamentals/bug-challenge-es6/node_modules/lcid/package.json deleted file mode 100644 index 20e282401..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lcid/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "lcid@^1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/os-locale" - ] - ], - "_from": "lcid@>=1.0.0 <2.0.0", - "_id": "lcid@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/lcid", - "_nodeVersion": "0.12.0", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.5.1", - "_phantomChildren": {}, - "_requested": { - "name": "lcid", - "raw": "lcid@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/os-locale" - ], - "_resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "_shasum": "308accafa0bc483a3867b4b6f2b9506251d1b835", - "_shrinkwrap": null, - "_spec": "lcid@^1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/os-locale", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/lcid/issues" - }, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "description": "Mapping between standard locale identifiers and Windows locale identifiers (LCID)", - "devDependencies": { - "ava": "0.0.4" - }, - "directories": {}, - "dist": { - "shasum": "308accafa0bc483a3867b4b6f2b9506251d1b835", - "tarball": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js", - "lcid.json" - ], - "gitHead": "96bb3e617f77f5f8ceb78653c77de5a85abb3b1e", - "homepage": "https://github.com/sindresorhus/lcid", - "keywords": [ - "lcid", - "locale", - "string", - "str", - "id", - "identifier", - "windows", - "language", - "lang", - "map", - "mapping", - "convert", - "json", - "bcp47", - "ietf", - "tag" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "lcid", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/lcid.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "1.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lcid/readme.md b/fundamentals/bug-challenge-es6/node_modules/lcid/readme.md deleted file mode 100644 index bee4a7016..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lcid/readme.md +++ /dev/null @@ -1,35 +0,0 @@ -# lcid [![Build Status](https://travis-ci.org/sindresorhus/lcid.svg?branch=master)](https://travis-ci.org/sindresorhus/lcid) - -> Mapping between [standard locale identifiers](http://en.wikipedia.org/wiki/Locale) and [Windows locale identifiers (LCID)](http://en.wikipedia.org/wiki/Locale#Specifics_for_Microsoft_platforms) - -Based on the [mapping](https://github.com/python/cpython/blob/be2a1a76fa43bb1ea1b3577bb5bdd506a2e90e37/Lib/locale.py#L1395-L1604) used in the Python standard library. - -The mapping itself is just a [JSON file](lcid.json) and can be used wherever. - - -## Install - -``` -$ npm install --save lcid -``` - - -## Usage - -```js -var lcid = require('lcid'); - -lcid.from(1044); -//=> 'nb_NO' - -lcid.to('nb_NO'); -//=> 1044 - -lcid.all; -//=> {'af_ZA': 1078, ...} -``` - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/levn/LICENSE b/fundamentals/bug-challenge-es6/node_modules/levn/LICENSE deleted file mode 100644 index 525b11850..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/levn/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) George Zahariev - -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/fundamentals/bug-challenge-es6/node_modules/levn/README.md b/fundamentals/bug-challenge-es6/node_modules/levn/README.md deleted file mode 100644 index bb9ffea05..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/levn/README.md +++ /dev/null @@ -1,196 +0,0 @@ -# levn [![Build Status](https://travis-ci.org/gkz/levn.png)](https://travis-ci.org/gkz/levn) -__Light ECMAScript (JavaScript) Value Notation__ -Levn is a library which allows you to parse a string into a JavaScript value based on an expected type. It is meant for short amounts of human entered data (eg. config files, command line arguments). - -Levn aims to concisely describe JavaScript values in text, and allow for the extraction and validation of those values. Levn uses [type-check](https://github.com/gkz/type-check) for its type format, and to validate the results. MIT license. Version 0.3.0. - -__How is this different than JSON?__ levn is meant to be written by humans only, is (due to the previous point) much more concise, can be validated against supplied types, has regex and date literals, and can easily be extended with custom types. On the other hand, it is probably slower and thus less efficient at transporting large amounts of data, which is fine since this is not its purpose. - - npm install levn - -For updates on levn, [follow me on twitter](https://twitter.com/gkzahariev). - - -## Quick Examples - -```js -var parse = require('levn').parse; -parse('Number', '2'); // 2 -parse('String', '2'); // '2' -parse('String', 'levn'); // 'levn' -parse('String', 'a b'); // 'a b' -parse('Boolean', 'true'); // true - -parse('Date', '#2011-11-11#'); // (Date object) -parse('Date', '2011-11-11'); // (Date object) -parse('RegExp', '/[a-z]/gi'); // /[a-z]/gi -parse('RegExp', 're'); // /re/ -parse('Int', '2'); // 2 - -parse('Number | String', 'str'); // 'str' -parse('Number | String', '2'); // 2 - -parse('[Number]', '[1,2,3]'); // [1,2,3] -parse('(String, Boolean)', '(hi, false)'); // ['hi', false] -parse('{a: String, b: Number}', '{a: str, b: 2}'); // {a: 'str', b: 2} - -// at the top level, you can ommit surrounding delimiters -parse('[Number]', '1,2,3'); // [1,2,3] -parse('(String, Boolean)', 'hi, false'); // ['hi', false] -parse('{a: String, b: Number}', 'a: str, b: 2'); // {a: 'str', b: 2} - -// wildcard - auto choose type -parse('*', '[hi,(null,[42]),{k: true}]'); // ['hi', [null, [42]], {k: true}] -``` -## Usage - -`require('levn');` returns an object that exposes three properties. `VERSION` is the current version of the library as a string. `parse` and `parsedTypeParse` are functions. - -```js -// parse(type, input, options); -parse('[Number]', '1,2,3'); // [1, 2, 3] - -// parsedTypeParse(parsedType, input, options); -var parsedType = require('type-check').parseType('[Number]'); -parsedTypeParse(parsedType, '1,2,3'); // [1, 2, 3] -``` - -### parse(type, input, options) - -`parse` casts the string `input` into a JavaScript value according to the specified `type` in the [type format](https://github.com/gkz/type-check#type-format) (and taking account the optional `options`) and returns the resulting JavaScript value. - -##### arguments -* type - `String` - the type written in the [type format](https://github.com/gkz/type-check#type-format) which to check against -* input - `String` - the value written in the [levn format](#levn-format) -* options - `Maybe Object` - an optional parameter specifying additional [options](#options) - -##### returns -`*` - the resulting JavaScript value - -##### example -```js -parse('[Number]', '1,2,3'); // [1, 2, 3] -``` - -### parsedTypeParse(parsedType, input, options) - -`parsedTypeParse` casts the string `input` into a JavaScript value according to the specified `type` which has already been parsed (and taking account the optional `options`) and returns the resulting JavaScript value. You can parse a type using the [type-check](https://github.com/gkz/type-check) library's `parseType` function. - -##### arguments -* type - `Object` - the type in the parsed type format which to check against -* input - `String` - the value written in the [levn format](#levn-format) -* options - `Maybe Object` - an optional parameter specifying additional [options](#options) - -##### returns -`*` - the resulting JavaScript value - -##### example -```js -var parsedType = require('type-check').parseType('[Number]'); -parsedTypeParse(parsedType, '1,2,3'); // [1, 2, 3] -``` - -## Levn Format - -Levn can use the type information you provide to choose the appropriate value to produce from the input. For the same input, it will choose a different output value depending on the type provided. For example, `parse('Number', '2')` will produce the number `2`, but `parse('String', '2')` will produce the string `"2"`. - -If you do not provide type information, and simply use `*`, levn will parse the input according the unambiguous "explicit" mode, which we will now detail - you can also set the `explicit` option to true manually in the [options](#options). - -* `"string"`, `'string'` are parsed as a String, eg. `"a msg"` is `"a msg"` -* `#date#` is parsed as a Date, eg. `#2011-11-11#` is `new Date('2011-11-11')` -* `/regexp/flags` is parsed as a RegExp, eg. `/re/gi` is `/re/gi` -* `undefined`, `null`, `NaN`, `true`, and `false` are all their JavaScript equivalents -* `[element1, element2, etc]` is an Array, and the casting procedure is recursively applied to each element. Eg. `[1,2,3]` is `[1,2,3]`. -* `(element1, element2, etc)` is an tuple, and the casting procedure is recursively applied to each element. Eg. `(1, a)` is `(1, a)` (is `[1, 'a']`). -* `{key1: val1, key2: val2, ...}` is an Object, and the casting procedure is recursively applied to each property. Eg. `{a: 1, b: 2}` is `{a: 1, b: 2}`. -* Any test which does not fall under the above, and which does not contain special characters (`[``]``(``)``{``}``:``,`) is a string, eg. `$12- blah` is `"$12- blah"`. - -If you do provide type information, you can make your input more concise as the program already has some information about what it expects. Please see the [type format](https://github.com/gkz/type-check#type-format) section of [type-check](https://github.com/gkz/type-check) for more information about how to specify types. There are some rules about what levn can do with the information: - -* If a String is expected, and only a String, all characters of the input (including any special ones) will become part of the output. Eg. `[({})]` is `"[({})]"`, and `"hi"` is `'"hi"'`. -* If a Date is expected, the surrounding `#` can be omitted from date literals. Eg. `2011-11-11` is `new Date('2011-11-11')`. -* If a RegExp is expected, no flags need to be specified, and the regex is not using any of the special characters,the opening and closing `/` can be omitted - this will have the affect of setting the source of the regex to the input. Eg. `regex` is `/regex/`. -* If an Array is expected, and it is the root node (at the top level), the opening `[` and closing `]` can be omitted. Eg. `1,2,3` is `[1,2,3]`. -* If a tuple is expected, and it is the root node (at the top level), the opening `(` and closing `)` can be omitted. Eg. `1, a` is `(1, a)` (is `[1, 'a']`). -* If an Object is expected, and it is the root node (at the top level), the opening `{` and closing `}` can be omitted. Eg `a: 1, b: 2` is `{a: 1, b: 2}`. - -If you list multiple types (eg. `Number | String`), it will first attempt to cast to the first type and then validate - if the validation fails it will move on to the next type and so forth, left to right. You must be careful as some types will succeed with any input, such as String. Thus put String at the end of your list. In non-explicit mode, Date and RegExp will succeed with a large variety of input - also be careful with these and list them near the end if not last in your list. - -Whitespace between special characters and elements is inconsequential. - -## Options - -Options is an object. It is an optional parameter to the `parse` and `parsedTypeParse` functions. - -### Explicit - -A `Boolean`. By default it is `false`. - -__Example:__ - -```js -parse('RegExp', 're', {explicit: false}); // /re/ -parse('RegExp', 're', {explicit: true}); // Error: ... does not type check... -parse('RegExp | String', 're', {explicit: true}); // 're' -``` - -`explicit` sets whether to be in explicit mode or not. Using `*` automatically activates explicit mode. For more information, read the [levn format](#levn-format) section. - -### customTypes - -An `Object`. Empty `{}` by default. - -__Example:__ - -```js -var options = { - customTypes: { - Even: { - typeOf: 'Number', - validate: function (x) { - return x % 2 === 0; - }, - cast: function (x) { - return {type: 'Just', value: parseInt(x)}; - } - } - } -} -parse('Even', '2', options); // 2 -parse('Even', '3', options); // Error: Value: "3" does not type check... -``` - -__Another Example:__ -```js -function Person(name, age){ - this.name = name; - this.age = age; -} -var options = { - customTypes: { - Person: { - typeOf: 'Object', - validate: function (x) { - x instanceof Person; - }, - cast: function (value, options, typesCast) { - var name, age; - if ({}.toString.call(value).slice(8, -1) !== 'Object') { - return {type: 'Nothing'}; - } - name = typesCast(value.name, [{type: 'String'}], options); - age = typesCast(value.age, [{type: 'Numger'}], options); - return {type: 'Just', value: new Person(name, age)}; - } - } -} -parse('Person', '{name: Laura, age: 25}', options); // Person {name: 'Laura', age: 25} -``` - -`customTypes` is an object whose keys are the name of the types, and whose values are an object with three properties, `typeOf`, `validate`, and `cast`. For more information about `typeOf` and `validate`, please see the [custom types](https://github.com/gkz/type-check#custom-types) section of type-check. - -`cast` is a function which receives three arguments, the value under question, options, and the typesCast function. In `cast`, attempt to cast the value into the specified type. If you are successful, return an object in the format `{type: 'Just', value: CAST-VALUE}`, if you know it won't work, return `{type: 'Nothing'}`. You can use the `typesCast` function to cast any child values. Remember to pass `options` to it. In your function you can also check for `options.explicit` and act accordingly. - -## Technical About - -`levn` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It uses [type-check](https://github.com/gkz/type-check) to both parse types and validate values. It also uses the [prelude.ls](http://preludels.com/) library. diff --git a/fundamentals/bug-challenge-es6/node_modules/levn/lib/cast.js b/fundamentals/bug-challenge-es6/node_modules/levn/lib/cast.js deleted file mode 100644 index 411e29d40..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/levn/lib/cast.js +++ /dev/null @@ -1,298 +0,0 @@ -// Generated by LiveScript 1.4.0 -(function(){ - var parsedTypeCheck, types, toString$ = {}.toString; - parsedTypeCheck = require('type-check').parsedTypeCheck; - types = { - '*': function(value, options){ - switch (toString$.call(value).slice(8, -1)) { - case 'Array': - return typeCast(value, { - type: 'Array' - }, options); - case 'Object': - return typeCast(value, { - type: 'Object' - }, options); - default: - return { - type: 'Just', - value: typesCast(value, [ - { - type: 'Undefined' - }, { - type: 'Null' - }, { - type: 'NaN' - }, { - type: 'Boolean' - }, { - type: 'Number' - }, { - type: 'Date' - }, { - type: 'RegExp' - }, { - type: 'Array' - }, { - type: 'Object' - }, { - type: 'String' - } - ], (options.explicit = true, options)) - }; - } - }, - Undefined: function(it){ - if (it === 'undefined' || it === void 8) { - return { - type: 'Just', - value: void 8 - }; - } else { - return { - type: 'Nothing' - }; - } - }, - Null: function(it){ - if (it === 'null') { - return { - type: 'Just', - value: null - }; - } else { - return { - type: 'Nothing' - }; - } - }, - NaN: function(it){ - if (it === 'NaN') { - return { - type: 'Just', - value: NaN - }; - } else { - return { - type: 'Nothing' - }; - } - }, - Boolean: function(it){ - if (it === 'true') { - return { - type: 'Just', - value: true - }; - } else if (it === 'false') { - return { - type: 'Just', - value: false - }; - } else { - return { - type: 'Nothing' - }; - } - }, - Number: function(it){ - return { - type: 'Just', - value: +it - }; - }, - Int: function(it){ - return { - type: 'Just', - value: +it - }; - }, - Float: function(it){ - return { - type: 'Just', - value: +it - }; - }, - Date: function(value, options){ - var that; - if (that = /^\#([\s\S]*)\#$/.exec(value)) { - return { - type: 'Just', - value: new Date(+that[1] || that[1]) - }; - } else if (options.explicit) { - return { - type: 'Nothing' - }; - } else { - return { - type: 'Just', - value: new Date(+value || value) - }; - } - }, - RegExp: function(value, options){ - var that; - if (that = /^\/([\s\S]*)\/([gimy]*)$/.exec(value)) { - return { - type: 'Just', - value: new RegExp(that[1], that[2]) - }; - } else if (options.explicit) { - return { - type: 'Nothing' - }; - } else { - return { - type: 'Just', - value: new RegExp(value) - }; - } - }, - Array: function(value, options){ - return castArray(value, { - of: [{ - type: '*' - }] - }, options); - }, - Object: function(value, options){ - return castFields(value, { - of: {} - }, options); - }, - String: function(it){ - var that; - if (toString$.call(it).slice(8, -1) !== 'String') { - return { - type: 'Nothing' - }; - } - if (that = it.match(/^'([\s\S]*)'$/)) { - return { - type: 'Just', - value: that[1].replace(/\\'/g, "'") - }; - } else if (that = it.match(/^"([\s\S]*)"$/)) { - return { - type: 'Just', - value: that[1].replace(/\\"/g, '"') - }; - } else { - return { - type: 'Just', - value: it - }; - } - } - }; - function castArray(node, type, options){ - var typeOf, element; - if (toString$.call(node).slice(8, -1) !== 'Array') { - return { - type: 'Nothing' - }; - } - typeOf = type.of; - return { - type: 'Just', - value: (function(){ - var i$, ref$, len$, results$ = []; - for (i$ = 0, len$ = (ref$ = node).length; i$ < len$; ++i$) { - element = ref$[i$]; - results$.push(typesCast(element, typeOf, options)); - } - return results$; - }()) - }; - } - function castTuple(node, type, options){ - var result, i, i$, ref$, len$, types, cast; - if (toString$.call(node).slice(8, -1) !== 'Array') { - return { - type: 'Nothing' - }; - } - result = []; - i = 0; - for (i$ = 0, len$ = (ref$ = type.of).length; i$ < len$; ++i$) { - types = ref$[i$]; - cast = typesCast(node[i], types, options); - if (toString$.call(cast).slice(8, -1) !== 'Undefined') { - result.push(cast); - } - i++; - } - if (node.length <= i) { - return { - type: 'Just', - value: result - }; - } else { - return { - type: 'Nothing' - }; - } - } - function castFields(node, type, options){ - var typeOf, key, value; - if (toString$.call(node).slice(8, -1) !== 'Object') { - return { - type: 'Nothing' - }; - } - typeOf = type.of; - return { - type: 'Just', - value: (function(){ - var ref$, resultObj$ = {}; - for (key in ref$ = node) { - value = ref$[key]; - resultObj$[typesCast(key, [{ - type: 'String' - }], options)] = typesCast(value, typeOf[key] || [{ - type: '*' - }], options); - } - return resultObj$; - }()) - }; - } - function typeCast(node, typeObj, options){ - var type, structure, castFunc, ref$; - type = typeObj.type, structure = typeObj.structure; - if (type) { - castFunc = ((ref$ = options.customTypes[type]) != null ? ref$.cast : void 8) || types[type]; - if (!castFunc) { - throw new Error("Type not defined: " + type + "."); - } - return castFunc(node, options, typesCast); - } else { - switch (structure) { - case 'array': - return castArray(node, typeObj, options); - case 'tuple': - return castTuple(node, typeObj, options); - case 'fields': - return castFields(node, typeObj, options); - } - } - } - function typesCast(node, types, options){ - var i$, len$, type, ref$, valueType, value; - for (i$ = 0, len$ = types.length; i$ < len$; ++i$) { - type = types[i$]; - ref$ = typeCast(node, type, options), valueType = ref$.type, value = ref$.value; - if (valueType === 'Nothing') { - continue; - } - if (parsedTypeCheck([type], value, { - customTypes: options.customTypes - })) { - return value; - } - } - throw new Error("Value " + JSON.stringify(node) + " does not type check against " + JSON.stringify(types) + "."); - } - module.exports = typesCast; -}).call(this); diff --git a/fundamentals/bug-challenge-es6/node_modules/levn/lib/coerce.js b/fundamentals/bug-challenge-es6/node_modules/levn/lib/coerce.js deleted file mode 100644 index 027b6da02..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/levn/lib/coerce.js +++ /dev/null @@ -1,285 +0,0 @@ -// Generated by LiveScript 1.2.0 -(function(){ - var parsedTypeCheck, types, toString$ = {}.toString; - parsedTypeCheck = require('type-check').parsedTypeCheck; - types = { - '*': function(it){ - switch (toString$.call(it).slice(8, -1)) { - case 'Array': - return coerceType(it, { - type: 'Array' - }); - case 'Object': - return coerceType(it, { - type: 'Object' - }); - default: - return { - type: 'Just', - value: coerceTypes(it, [ - { - type: 'Undefined' - }, { - type: 'Null' - }, { - type: 'NaN' - }, { - type: 'Boolean' - }, { - type: 'Number' - }, { - type: 'Date' - }, { - type: 'RegExp' - }, { - type: 'Array' - }, { - type: 'Object' - }, { - type: 'String' - } - ], { - explicit: true - }) - }; - } - }, - Undefined: function(it){ - if (it === 'undefined' || it === void 8) { - return { - type: 'Just', - value: void 8 - }; - } else { - return { - type: 'Nothing' - }; - } - }, - Null: function(it){ - if (it === 'null') { - return { - type: 'Just', - value: null - }; - } else { - return { - type: 'Nothing' - }; - } - }, - NaN: function(it){ - if (it === 'NaN') { - return { - type: 'Just', - value: NaN - }; - } else { - return { - type: 'Nothing' - }; - } - }, - Boolean: function(it){ - if (it === 'true') { - return { - type: 'Just', - value: true - }; - } else if (it === 'false') { - return { - type: 'Just', - value: false - }; - } else { - return { - type: 'Nothing' - }; - } - }, - Number: function(it){ - return { - type: 'Just', - value: +it - }; - }, - Int: function(it){ - return { - type: 'Just', - value: parseInt(it) - }; - }, - Float: function(it){ - return { - type: 'Just', - value: parseFloat(it) - }; - }, - Date: function(value, options){ - var that; - if (that = /^\#(.*)\#$/.exec(value)) { - return { - type: 'Just', - value: new Date(+that[1] || that[1]) - }; - } else if (options.explicit) { - return { - type: 'Nothing' - }; - } else { - return { - type: 'Just', - value: new Date(+value || value) - }; - } - }, - RegExp: function(value, options){ - var that; - if (that = /^\/(.*)\/([gimy]*)$/.exec(value)) { - return { - type: 'Just', - value: new RegExp(that[1], that[2]) - }; - } else if (options.explicit) { - return { - type: 'Nothing' - }; - } else { - return { - type: 'Just', - value: new RegExp(value) - }; - } - }, - Array: function(it){ - return coerceArray(it, { - of: [{ - type: '*' - }] - }); - }, - Object: function(it){ - return coerceFields(it, { - of: {} - }); - }, - String: function(it){ - var that; - if (toString$.call(it).slice(8, -1) !== 'String') { - return { - type: 'Nothing' - }; - } - if (that = it.match(/^'(.*)'$/)) { - return { - type: 'Just', - value: that[1] - }; - } else if (that = it.match(/^"(.*)"$/)) { - return { - type: 'Just', - value: that[1] - }; - } else { - return { - type: 'Just', - value: it - }; - } - } - }; - function coerceArray(node, type){ - var typeOf, element; - if (toString$.call(node).slice(8, -1) !== 'Array') { - return { - type: 'Nothing' - }; - } - typeOf = type.of; - return { - type: 'Just', - value: (function(){ - var i$, ref$, len$, results$ = []; - for (i$ = 0, len$ = (ref$ = node).length; i$ < len$; ++i$) { - element = ref$[i$]; - results$.push(coerceTypes(element, typeOf)); - } - return results$; - }()) - }; - } - function coerceTuple(node, type){ - var result, i$, ref$, len$, i, types, that; - if (toString$.call(node).slice(8, -1) !== 'Array') { - return { - type: 'Nothing' - }; - } - result = []; - for (i$ = 0, len$ = (ref$ = type.of).length; i$ < len$; ++i$) { - i = i$; - types = ref$[i$]; - if (that = coerceTypes(node[i], types)) { - result.push(that); - } - } - return { - type: 'Just', - value: result - }; - } - function coerceFields(node, type){ - var typeOf, key, value; - if (toString$.call(node).slice(8, -1) !== 'Object') { - return { - type: 'Nothing' - }; - } - typeOf = type.of; - return { - type: 'Just', - value: (function(){ - var ref$, results$ = {}; - for (key in ref$ = node) { - value = ref$[key]; - results$[key] = coerceTypes(value, typeOf[key] || [{ - type: '*' - }]); - } - return results$; - }()) - }; - } - function coerceType(node, typeObj, options){ - var type, structure, coerceFunc; - type = typeObj.type, structure = typeObj.structure; - if (type) { - coerceFunc = types[type]; - return coerceFunc(node, options); - } else { - switch (structure) { - case 'array': - return coerceArray(node, typeObj); - case 'tuple': - return coerceTuple(node, typeObj); - case 'fields': - return coerceFields(node, typeObj); - } - } - } - function coerceTypes(node, types, options){ - var i$, len$, type, ref$, valueType, value; - for (i$ = 0, len$ = types.length; i$ < len$; ++i$) { - type = types[i$]; - ref$ = coerceType(node, type, options), valueType = ref$.type, value = ref$.value; - if (valueType === 'Nothing') { - continue; - } - if (parsedTypeCheck([type], value)) { - return value; - } - } - throw new Error("Value " + JSON.stringify(node) + " does not type check against " + JSON.stringify(types) + "."); - } - module.exports = coerceTypes; -}).call(this); diff --git a/fundamentals/bug-challenge-es6/node_modules/levn/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/levn/lib/index.js deleted file mode 100644 index 4adae30c8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/levn/lib/index.js +++ /dev/null @@ -1,22 +0,0 @@ -// Generated by LiveScript 1.4.0 -(function(){ - var parseString, cast, parseType, VERSION, parsedTypeParse, parse; - parseString = require('./parse-string'); - cast = require('./cast'); - parseType = require('type-check').parseType; - VERSION = '0.3.0'; - parsedTypeParse = function(parsedType, string, options){ - options == null && (options = {}); - options.explicit == null && (options.explicit = false); - options.customTypes == null && (options.customTypes = {}); - return cast(parseString(parsedType, string, options), parsedType, options); - }; - parse = function(type, string, options){ - return parsedTypeParse(parseType(type), string, options); - }; - module.exports = { - VERSION: VERSION, - parse: parse, - parsedTypeParse: parsedTypeParse - }; -}).call(this); diff --git a/fundamentals/bug-challenge-es6/node_modules/levn/lib/parse-string.js b/fundamentals/bug-challenge-es6/node_modules/levn/lib/parse-string.js deleted file mode 100644 index d573975fc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/levn/lib/parse-string.js +++ /dev/null @@ -1,113 +0,0 @@ -// Generated by LiveScript 1.4.0 -(function(){ - var reject, special, tokenRegex; - reject = require('prelude-ls').reject; - function consumeOp(tokens, op){ - if (tokens[0] === op) { - return tokens.shift(); - } else { - throw new Error("Expected '" + op + "', but got '" + tokens[0] + "' instead in " + JSON.stringify(tokens) + "."); - } - } - function maybeConsumeOp(tokens, op){ - if (tokens[0] === op) { - return tokens.shift(); - } - } - function consumeList(tokens, arg$, hasDelimiters){ - var open, close, result, untilTest; - open = arg$[0], close = arg$[1]; - if (hasDelimiters) { - consumeOp(tokens, open); - } - result = []; - untilTest = "," + (hasDelimiters ? close : ''); - while (tokens.length && (hasDelimiters && tokens[0] !== close)) { - result.push(consumeElement(tokens, untilTest)); - maybeConsumeOp(tokens, ','); - } - if (hasDelimiters) { - consumeOp(tokens, close); - } - return result; - } - function consumeArray(tokens, hasDelimiters){ - return consumeList(tokens, ['[', ']'], hasDelimiters); - } - function consumeTuple(tokens, hasDelimiters){ - return consumeList(tokens, ['(', ')'], hasDelimiters); - } - function consumeFields(tokens, hasDelimiters){ - var result, untilTest, key; - if (hasDelimiters) { - consumeOp(tokens, '{'); - } - result = {}; - untilTest = "," + (hasDelimiters ? '}' : ''); - while (tokens.length && (!hasDelimiters || tokens[0] !== '}')) { - key = consumeValue(tokens, ':'); - consumeOp(tokens, ':'); - result[key] = consumeElement(tokens, untilTest); - maybeConsumeOp(tokens, ','); - } - if (hasDelimiters) { - consumeOp(tokens, '}'); - } - return result; - } - function consumeValue(tokens, untilTest){ - var out; - untilTest == null && (untilTest = ''); - out = ''; - while (tokens.length && -1 === untilTest.indexOf(tokens[0])) { - out += tokens.shift(); - } - return out; - } - function consumeElement(tokens, untilTest){ - switch (tokens[0]) { - case '[': - return consumeArray(tokens, true); - case '(': - return consumeTuple(tokens, true); - case '{': - return consumeFields(tokens, true); - default: - return consumeValue(tokens, untilTest); - } - } - function consumeTopLevel(tokens, types, options){ - var ref$, type, structure, origTokens, result, finalResult, x$, y$; - ref$ = types[0], type = ref$.type, structure = ref$.structure; - origTokens = tokens.concat(); - if (!options.explicit && types.length === 1 && ((!type && structure) || (type === 'Array' || type === 'Object'))) { - result = structure === 'array' || type === 'Array' - ? consumeArray(tokens, tokens[0] === '[') - : structure === 'tuple' - ? consumeTuple(tokens, tokens[0] === '(') - : consumeFields(tokens, tokens[0] === '{'); - finalResult = tokens.length ? consumeElement(structure === 'array' || type === 'Array' - ? (x$ = origTokens, x$.unshift('['), x$.push(']'), x$) - : (y$ = origTokens, y$.unshift('('), y$.push(')'), y$)) : result; - } else { - finalResult = consumeElement(tokens); - } - return finalResult; - } - special = /\[\]\(\)}{:,/.source; - tokenRegex = RegExp('("(?:\\\\"|[^"])*")|(\'(?:\\\\\'|[^\'])*\')|(/(?:\\\\/|[^/])*/[a-zA-Z]*)|(#.*#)|([' + special + '])|([^\\s' + special + '](?:\\s*[^\\s' + special + ']+)*)|\\s*'); - module.exports = function(types, string, options){ - var tokens, node; - options == null && (options = {}); - if (!options.explicit && types.length === 1 && types[0].type === 'String') { - return "'" + string.replace(/\\'/g, "\\\\'") + "'"; - } - tokens = reject(not$, string.split(tokenRegex)); - node = consumeTopLevel(tokens, types, options); - if (!node) { - throw new Error("Error parsing '" + string + "'."); - } - return node; - }; - function not$(x){ return !x; } -}).call(this); diff --git a/fundamentals/bug-challenge-es6/node_modules/levn/lib/parse.js b/fundamentals/bug-challenge-es6/node_modules/levn/lib/parse.js deleted file mode 100644 index 2beff0f47..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/levn/lib/parse.js +++ /dev/null @@ -1,102 +0,0 @@ -// Generated by LiveScript 1.2.0 -(function(){ - var reject, special, tokenRegex; - reject = require('prelude-ls').reject; - function consumeOp(tokens, op){ - if (tokens[0] === op) { - return tokens.shift(); - } else { - throw new Error("Expected '" + op + "', but got '" + tokens[0] + "' instead in " + JSON.stringify(tokens) + "."); - } - } - function maybeConsumeOp(tokens, op){ - if (tokens[0] === op) { - return tokens.shift(); - } - } - function consumeList(tokens, delimiters, hasDelimiters){ - var result; - if (hasDelimiters) { - consumeOp(tokens, delimiters[0]); - } - result = []; - while (tokens.length && tokens[0] !== delimiters[1]) { - result.push(consumeElement(tokens)); - maybeConsumeOp(tokens, ','); - } - if (hasDelimiters) { - consumeOp(tokens, delimiters[1]); - } - return result; - } - function consumeArray(tokens, hasDelimiters){ - return consumeList(tokens, ['[', ']'], hasDelimiters); - } - function consumeTuple(tokens, hasDelimiters){ - return consumeList(tokens, ['(', ')'], hasDelimiters); - } - function consumeFields(tokens, hasDelimiters){ - var result, key; - if (hasDelimiters) { - consumeOp(tokens, '{'); - } - result = {}; - while (tokens.length && (!hasDelimiters || tokens[0] !== '}')) { - key = tokens.shift(); - consumeOp(tokens, ':'); - result[key] = consumeElement(tokens); - maybeConsumeOp(tokens, ','); - } - if (hasDelimiters) { - consumeOp(tokens, '}'); - } - return result; - } - function consumeElement(tokens){ - switch (tokens[0]) { - case '[': - return consumeArray(tokens, true); - case '(': - return consumeTuple(tokens, true); - case '{': - return consumeFields(tokens, true); - default: - return tokens.shift(); - } - } - function consumeTopLevel(tokens, types){ - var ref$, type, structure, origTokens, result, finalResult, x$, y$; - ref$ = types[0], type = ref$.type, structure = ref$.structure; - origTokens = tokens.concat(); - if (types.length === 1 && (structure || (type === 'Array' || type === 'Object'))) { - result = structure === 'array' || type === 'Array' - ? consumeArray(tokens, tokens[0] === '[') - : structure === 'tuple' - ? consumeTuple(tokens, tokens[0] === '(') - : consumeFields(tokens, tokens[0] === '{'); - finalResult = tokens.length ? consumeElement(structure === 'array' || type === 'Array' - ? (x$ = origTokens, x$.unshift('['), x$.push(']'), x$) - : (y$ = origTokens, y$.unshift('('), y$.push(')'), y$)) : result; - } else { - finalResult = consumeElement(tokens); - } - if (tokens.length && origTokens.length) { - throw new Error("Unable to parse " + JSON.stringify(origTokens) + " of type " + JSON.stringify(types) + "."); - } else { - return finalResult; - } - } - special = /\[\]\(\)}{:,/.source; - tokenRegex = RegExp('("(?:[^"]|\\\\")*")|(\'(?:[^\']|\\\\\')*\')|(#.*#)|(/(?:\\\\/|[^/])*/[gimy]*)|([' + special + '])|([^\\s' + special + ']+)|\\s*'); - module.exports = function(string, types){ - var tokens, node; - tokens = reject(function(it){ - return !it || /^\s+$/.test(it); - }, string.split(tokenRegex)); - node = consumeTopLevel(tokens, types); - if (!node) { - throw new Error("Error parsing '" + string + "'."); - } - return node; - }; -}).call(this); diff --git a/fundamentals/bug-challenge-es6/node_modules/levn/package.json b/fundamentals/bug-challenge-es6/node_modules/levn/package.json deleted file mode 100644 index 5e82f36bb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/levn/package.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "_args": [ - [ - "levn@~0.3.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/optionator" - ] - ], - "_from": "levn@>=0.3.0 <0.4.0", - "_id": "levn@0.3.0", - "_inCache": true, - "_installable": true, - "_location": "/levn", - "_nodeVersion": "4.2.4", - "_npmUser": { - "email": "z@georgezahariev.com", - "name": "gkz" - }, - "_npmVersion": "2.14.12", - "_phantomChildren": {}, - "_requested": { - "name": "levn", - "raw": "levn@~0.3.0", - "rawSpec": "~0.3.0", - "scope": null, - "spec": ">=0.3.0 <0.4.0", - "type": "range" - }, - "_requiredBy": [ - "/optionator" - ], - "_resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "_shasum": "3b09924edf9f083c0490fdd4c0bc4421e04764ee", - "_shrinkwrap": null, - "_spec": "levn@~0.3.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/optionator", - "author": { - "email": "z@georgezahariev.com", - "name": "George Zahariev" - }, - "bugs": { - "url": "https://github.com/gkz/levn/issues" - }, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "description": "Light ECMAScript (JavaScript) Value Notation - human written, concise, typed, flexible", - "devDependencies": { - "istanbul": "~0.4.1", - "livescript": "~1.4.0", - "mocha": "~2.3.4" - }, - "directories": {}, - "dist": { - "shasum": "3b09924edf9f083c0490fdd4c0bc4421e04764ee", - "tarball": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" - }, - "engines": { - "node": ">= 0.8.0" - }, - "files": [ - "lib", - "README.md", - "LICENSE" - ], - "gitHead": "a92b9acf928282ba81134b4ae8e6a5f29e1f5e1e", - "homepage": "https://github.com/gkz/levn", - "keywords": [ - "levn", - "light", - "ecmascript", - "value", - "notation", - "json", - "typed", - "human", - "concise", - "typed", - "flexible" - ], - "license": "MIT", - "main": "./lib/", - "maintainers": [ - { - "email": "z@georgezahariev.com", - "name": "gkz" - } - ], - "name": "levn", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/gkz/levn.git" - }, - "scripts": { - "test": "make test" - }, - "version": "0.3.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/load-json-file/index.js b/fundamentals/bug-challenge-es6/node_modules/load-json-file/index.js deleted file mode 100644 index 96d4d9f6f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/load-json-file/index.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; -var path = require('path'); -var fs = require('graceful-fs'); -var stripBom = require('strip-bom'); -var parseJson = require('parse-json'); -var Promise = require('pinkie-promise'); -var pify = require('pify'); - -function parse(x, fp) { - return parseJson(stripBom(x), path.relative(process.cwd(), fp)); -} - -module.exports = function (fp) { - return pify(fs.readFile, Promise)(fp, 'utf8').then(function (data) { - return parse(data, fp); - }); -}; - -module.exports.sync = function (fp) { - return parse(fs.readFileSync(fp, 'utf8'), fp); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/load-json-file/license b/fundamentals/bug-challenge-es6/node_modules/load-json-file/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/load-json-file/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/load-json-file/package.json b/fundamentals/bug-challenge-es6/node_modules/load-json-file/package.json deleted file mode 100644 index c61b619c3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/load-json-file/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "load-json-file@^1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/read-pkg" - ] - ], - "_from": "load-json-file@>=1.0.0 <2.0.0", - "_id": "load-json-file@1.1.0", - "_inCache": true, - "_installable": true, - "_location": "/load-json-file", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.14.7", - "_phantomChildren": {}, - "_requested": { - "name": "load-json-file", - "raw": "load-json-file@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/read-pkg" - ], - "_resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "_shasum": "956905708d58b4bab4c2261b04f59f31c99374c0", - "_shrinkwrap": null, - "_spec": "load-json-file@^1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/read-pkg", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/load-json-file/issues" - }, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "description": "Read and parse a JSON file", - "devDependencies": { - "ava": "*", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "956905708d58b4bab4c2261b04f59f31c99374c0", - "tarball": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "115157a417380d3160da418d4ff25bb33b0051eb", - "homepage": "https://github.com/sindresorhus/load-json-file", - "keywords": [ - "json", - "read", - "parse", - "file", - "fs", - "graceful", - "load" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "load-json-file", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/load-json-file.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.1.0", - "xo": { - "ignores": [ - "test.js" - ] - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/load-json-file/readme.md b/fundamentals/bug-challenge-es6/node_modules/load-json-file/readme.md deleted file mode 100644 index fa982b549..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/load-json-file/readme.md +++ /dev/null @@ -1,45 +0,0 @@ -# load-json-file [![Build Status](https://travis-ci.org/sindresorhus/load-json-file.svg?branch=master)](https://travis-ci.org/sindresorhus/load-json-file) - -> Read and parse a JSON file - -[Strips UTF-8 BOM](https://github.com/sindresorhus/strip-bom), uses [`graceful-fs`](https://github.com/isaacs/node-graceful-fs), and throws more [helpful JSON errors](https://github.com/sindresorhus/parse-json). - - -## Install - -``` -$ npm install --save load-json-file -``` - - -## Usage - -```js -const loadJsonFile = require('load-json-file'); - -loadJsonFile('foo.json').then(json => { - console.log(json); - //=> {foo: true} -}); -``` - - -## API - -### loadJsonFile(filepath) - -Returns a promise that resolves to the parsed JSON. - -### loadJsonFile.sync(filepath) - -Returns the parsed JSON. - - -## Related - -- [write-json-file](https://github.com/sindresorhus/write-json-file) - Stringify and write JSON to a file atomically - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/LICENSE.txt b/fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/LICENSE.txt deleted file mode 100644 index 17764328c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/README.md deleted file mode 100644 index 16ee6fd24..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# lodash._arraycopy v3.0.0 - -The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `arrayCopy` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. - -## Installation - -Using npm: - -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash._arraycopy -``` - -In Node.js/io.js: - -```js -var arrayCopy = require('lodash._arraycopy'); -``` - -See the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._arraycopy) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/index.js deleted file mode 100644 index b9abb2253..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/index.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * lodash 3.0.0 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.7.0 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function arrayCopy(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -module.exports = arrayCopy; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/package.json deleted file mode 100644 index bc5d209fb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._arraycopy/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "_args": [ - [ - "lodash._arraycopy@^3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone" - ] - ], - "_from": "lodash._arraycopy@>=3.0.0 <4.0.0", - "_id": "lodash._arraycopy@3.0.0", - "_inCache": true, - "_installable": true, - "_location": "/lodash._arraycopy", - "_nodeVersion": "0.10.35", - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.3.0", - "_phantomChildren": {}, - "_requested": { - "name": "lodash._arraycopy", - "raw": "lodash._arraycopy@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/lodash._baseclone" - ], - "_resolved": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz", - "_shasum": "76e7b7c1f1fb92547374878a562ed06a3e50f6e1", - "_shrinkwrap": null, - "_spec": "lodash._arraycopy@^3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "demoneaux@gmail.com", - "name": "Benjamin Tan", - "url": "https://d10.github.io/" - }, - { - "email": "blaine@iceddev.com", - "name": "Blaine Bublitz", - "url": "http://www.iceddev.com/" - }, - { - "email": "github@kitcambridge.be", - "name": "Kit Cambridge", - "url": "http://kitcambridge.be/" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": {}, - "description": "The modern build of lodash’s internal `arrayCopy` as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "76e7b7c1f1fb92547374878a562ed06a3e50f6e1", - "tarball": "https://registry.npmjs.org/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - } - ], - "name": "lodash._arraycopy", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "3.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/LICENSE.txt b/fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/LICENSE.txt deleted file mode 100644 index 17764328c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js 1.7.0, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/README.md deleted file mode 100644 index 1f3236ba0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# lodash._arrayeach v3.0.0 - -The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `arrayEach` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. - -## Installation - -Using npm: - -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash._arrayeach -``` - -In Node.js/io.js: - -```js -var arrayEach = require('lodash._arrayeach'); -``` - -See the [package source](https://github.com/lodash/lodash/blob/3.0.0-npm-packages/lodash._arrayeach) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/index.js deleted file mode 100644 index 7b31bcdb2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/index.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * lodash 3.0.0 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.7.0 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * A specialized version of `_.forEach` for arrays without support for callback - * shorthands or `this` binding. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -module.exports = arrayEach; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/package.json deleted file mode 100644 index ec18af6b4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._arrayeach/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "_args": [ - [ - "lodash._arrayeach@^3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone" - ] - ], - "_from": "lodash._arrayeach@>=3.0.0 <4.0.0", - "_id": "lodash._arrayeach@3.0.0", - "_inCache": true, - "_installable": true, - "_location": "/lodash._arrayeach", - "_nodeVersion": "0.10.35", - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.3.0", - "_phantomChildren": {}, - "_requested": { - "name": "lodash._arrayeach", - "raw": "lodash._arrayeach@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/lodash._baseclone" - ], - "_resolved": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz", - "_shasum": "bab156b2a90d3f1bbd5c653403349e5e5933ef9e", - "_shrinkwrap": null, - "_spec": "lodash._arrayeach@^3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "demoneaux@gmail.com", - "name": "Benjamin Tan", - "url": "https://d10.github.io/" - }, - { - "email": "blaine@iceddev.com", - "name": "Blaine Bublitz", - "url": "http://www.iceddev.com/" - }, - { - "email": "github@kitcambridge.be", - "name": "Kit Cambridge", - "url": "http://kitcambridge.be/" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": {}, - "description": "The modern build of lodash’s internal `arrayEach` as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "bab156b2a90d3f1bbd5c653403349e5e5933ef9e", - "tarball": "https://registry.npmjs.org/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - } - ], - "name": "lodash._arrayeach", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "3.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/LICENSE.txt b/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/LICENSE.txt deleted file mode 100644 index 9cd87e5dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/README.md deleted file mode 100644 index 0aa230937..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# lodash._baseassign v3.2.0 - -The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseAssign` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. - -## Installation - -Using npm: - -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash._baseassign -``` - -In Node.js/io.js: - -```js -var baseAssign = require('lodash._baseassign'); -``` - -See the [package source](https://github.com/lodash/lodash/blob/3.2.0-npm-packages/lodash._baseassign) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/index.js deleted file mode 100644 index f5612c850..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/index.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * lodash 3.2.0 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -var baseCopy = require('lodash._basecopy'), - keys = require('lodash.keys'); - -/** - * The base implementation of `_.assign` without support for argument juggling, - * multiple sources, and `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return source == null - ? object - : baseCopy(source, keys(source), object); -} - -module.exports = baseAssign; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/package.json deleted file mode 100644 index ae73c2d42..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign/package.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "_args": [ - [ - "lodash._baseassign@^3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone" - ] - ], - "_from": "lodash._baseassign@>=3.0.0 <4.0.0", - "_id": "lodash._baseassign@3.2.0", - "_inCache": true, - "_installable": true, - "_location": "/lodash._baseassign", - "_nodeVersion": "0.12.3", - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.10.0", - "_phantomChildren": {}, - "_requested": { - "name": "lodash._baseassign", - "raw": "lodash._baseassign@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/lodash._baseclone" - ], - "_resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "_shasum": "8c38a099500f215ad09e59f1722fd0c52bfe0a4e", - "_shrinkwrap": null, - "_spec": "lodash._baseassign@^3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "demoneaux@gmail.com", - "name": "Benjamin Tan", - "url": "https://d10.github.io/" - }, - { - "email": "blaine@iceddev.com", - "name": "Blaine Bublitz", - "url": "http://www.iceddev.com/" - }, - { - "email": "github@kitcambridge.be", - "name": "Kit Cambridge", - "url": "http://kitcambridge.be/" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - }, - "description": "The modern build of lodash’s internal `baseAssign` as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "8c38a099500f215ad09e59f1722fd0c52bfe0a4e", - "tarball": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - { - "email": "demoneaux@gmail.com", - "name": "d10" - }, - { - "email": "github@kitcambridge.be", - "name": "kitcambridge" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - { - "email": "blaine@iceddev.com", - "name": "phated" - } - ], - "name": "lodash._baseassign", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "3.2.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/LICENSE b/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/LICENSE deleted file mode 100644 index 9cd87e5dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/README.md deleted file mode 100644 index 883a43c3a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# lodash._baseclone v3.3.0 - -The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseClone` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. - -## Installation - -Using npm: - -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash._baseclone -``` - -In Node.js/io.js: - -```js -var baseClone = require('lodash._baseclone'); -``` - -See the [package source](https://github.com/lodash/lodash/blob/3.3.0-npm-packages/lodash._baseclone) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/index.js deleted file mode 100644 index 4024d58ad..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/index.js +++ /dev/null @@ -1,271 +0,0 @@ -/** - * lodash 3.3.0 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -var arrayCopy = require('lodash._arraycopy'), - arrayEach = require('lodash._arrayeach'), - baseAssign = require('lodash._baseassign'), - baseFor = require('lodash._basefor'), - isArray = require('lodash.isarray'), - keys = require('lodash.keys'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = -cloneableTags[dateTag] = cloneableTags[float32Tag] = -cloneableTags[float64Tag] = cloneableTags[int8Tag] = -cloneableTags[int16Tag] = cloneableTags[int32Tag] = -cloneableTags[numberTag] = cloneableTags[objectTag] = -cloneableTags[regexpTag] = cloneableTags[stringTag] = -cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = -cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[mapTag] = cloneableTags[setTag] = -cloneableTags[weakMapTag] = false; - -/** Used for native method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objToString = objectProto.toString; - -/** Native method references. */ -var ArrayBuffer = global.ArrayBuffer, - Uint8Array = global.Uint8Array; - -/** - * The base implementation of `_.clone` without support for argument juggling - * and `this` binding `customizer` functions. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @param {Function} [customizer] The function to customize cloning values. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The object `value` belongs to. - * @param {Array} [stackA=[]] Tracks traversed source objects. - * @param {Array} [stackB=[]] Associates clones with source counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, isDeep, customizer, key, object, stackA, stackB) { - var result; - if (customizer) { - result = object ? customizer(value, key, object) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return arrayCopy(value, result); - } - } else { - var tag = objToString.call(value), - isFunc = tag == funcTag; - - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return baseAssign(result, value); - } - } else { - return cloneableTags[tag] - ? initCloneByTag(value, tag, isDeep) - : (object ? value : {}); - } - } - // Check for circular references and return its corresponding clone. - stackA || (stackA = []); - stackB || (stackB = []); - - var length = stackA.length; - while (length--) { - if (stackA[length] == value) { - return stackB[length]; - } - } - // Add the source value to the stack of traversed objects and associate it with its clone. - stackA.push(value); - stackB.push(result); - - // Recursively populate clone (susceptible to call stack limits). - (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { - result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB); - }); - return result; -} - -/** - * The base implementation of `_.forOwn` without support for callback - * shorthands and `this` binding. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return baseFor(object, iteratee, keys); -} - -/** - * Creates a clone of the given array buffer. - * - * @private - * @param {ArrayBuffer} buffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ -function bufferClone(buffer) { - var result = new ArrayBuffer(buffer.byteLength), - view = new Uint8Array(result); - - view.set(new Uint8Array(buffer)); - return result; -} - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add array properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -/** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneObject(object) { - var Ctor = object.constructor; - if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) { - Ctor = Object; - } - return new Ctor; -} - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return bufferClone(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - var buffer = object.buffer; - return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - var result = new Ctor(object.source, reFlags.exec(object)); - result.lastIndex = object.lastIndex; - } - return result; -} - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -module.exports = baseClone; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/package.json deleted file mode 100644 index a57faf5b5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone/package.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "_args": [ - [ - "lodash._baseclone@^3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep" - ] - ], - "_from": "lodash._baseclone@>=3.0.0 <4.0.0", - "_id": "lodash._baseclone@3.3.0", - "_inCache": true, - "_installable": true, - "_location": "/lodash._baseclone", - "_nodeVersion": "0.12.5", - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.12.0", - "_phantomChildren": {}, - "_requested": { - "name": "lodash._baseclone", - "raw": "lodash._baseclone@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/lodash.clonedeep" - ], - "_resolved": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz", - "_shasum": "303519bf6393fe7e42f34d8b630ef7794e3542b7", - "_shrinkwrap": null, - "_spec": "lodash._baseclone@^3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "demoneaux@gmail.com", - "name": "Benjamin Tan", - "url": "https://d10.github.io/" - }, - { - "email": "blaine@iceddev.com", - "name": "Blaine Bublitz", - "url": "http://www.iceddev.com/" - }, - { - "email": "github@kitcambridge.be", - "name": "Kit Cambridge", - "url": "http://kitcambridge.be/" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": { - "lodash._arraycopy": "^3.0.0", - "lodash._arrayeach": "^3.0.0", - "lodash._baseassign": "^3.0.0", - "lodash._basefor": "^3.0.0", - "lodash.isarray": "^3.0.0", - "lodash.keys": "^3.0.0" - }, - "description": "The modern build of lodash’s internal `baseClone` as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "303519bf6393fe7e42f34d8b630ef7794e3542b7", - "tarball": "https://registry.npmjs.org/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - { - "email": "github@kitcambridge.be", - "name": "kitcambridge" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - { - "email": "blaine@iceddev.com", - "name": "phated" - }, - { - "email": "demoneaux@gmail.com", - "name": "d10" - } - ], - "name": "lodash._baseclone", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "3.3.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/LICENSE.txt b/fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/LICENSE.txt deleted file mode 100644 index 9cd87e5dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/README.md deleted file mode 100644 index acdfa29d3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# lodash._basecopy v3.0.1 - -The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `baseCopy` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. - -## Installation - -Using npm: - -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash._basecopy -``` - -In Node.js/io.js: - -```js -var baseCopy = require('lodash._basecopy'); -``` - -See the [package source](https://github.com/lodash/lodash/blob/3.0.1-npm-packages/lodash._basecopy) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/index.js deleted file mode 100644 index b586d31d9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/index.js +++ /dev/null @@ -1,32 +0,0 @@ -/** - * lodash 3.0.1 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property names to copy. - * @param {Object} [object={}] The object to copy properties to. - * @returns {Object} Returns `object`. - */ -function baseCopy(source, props, object) { - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - object[key] = source[key]; - } - return object; -} - -module.exports = baseCopy; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/package.json deleted file mode 100644 index 316269feb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._basecopy/package.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "_args": [ - [ - "lodash._basecopy@^3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign" - ] - ], - "_from": "lodash._basecopy@>=3.0.0 <4.0.0", - "_id": "lodash._basecopy@3.0.1", - "_inCache": true, - "_installable": true, - "_location": "/lodash._basecopy", - "_nodeVersion": "0.12.2", - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.7.6", - "_phantomChildren": {}, - "_requested": { - "name": "lodash._basecopy", - "raw": "lodash._basecopy@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/lodash._baseassign" - ], - "_resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "_shasum": "8da0e6a876cf344c0ad8a54882111dd3c5c7ca36", - "_shrinkwrap": null, - "_spec": "lodash._basecopy@^3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseassign", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "demoneaux@gmail.com", - "name": "Benjamin Tan", - "url": "https://d10.github.io/" - }, - { - "email": "blaine@iceddev.com", - "name": "Blaine Bublitz", - "url": "http://www.iceddev.com/" - }, - { - "email": "github@kitcambridge.be", - "name": "Kit Cambridge", - "url": "http://kitcambridge.be/" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": {}, - "description": "The modern build of lodash’s internal `baseCopy` as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "8da0e6a876cf344c0ad8a54882111dd3c5c7ca36", - "tarball": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - { - "email": "demoneaux@gmail.com", - "name": "d10" - }, - { - "email": "github@kitcambridge.be", - "name": "kitcambridge" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - { - "email": "blaine@iceddev.com", - "name": "phated" - } - ], - "name": "lodash._basecopy", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "3.0.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._basefor/LICENSE b/fundamentals/bug-challenge-es6/node_modules/lodash._basefor/LICENSE deleted file mode 100644 index b054ca5a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._basefor/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2016 The Dojo Foundation -Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._basefor/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash._basefor/README.md deleted file mode 100644 index b17e221b1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._basefor/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# lodash._basefor v3.0.3 - -The internal [lodash](https://lodash.com/) function `baseFor` exported as a [Node.js](https://nodejs.org/) module. - -## Installation - -Using npm: -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash._basefor -``` - -In Node.js: -```js -var baseFor = require('lodash._basefor'); -``` - -See the [package source](https://github.com/lodash/lodash/blob/3.0.3-npm-packages/lodash._basefor) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._basefor/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash._basefor/index.js deleted file mode 100644 index 3f1d1896d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._basefor/index.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * lodash 3.0.3 (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright 2012-2016 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * The base implementation of `baseForIn` and `baseForOwn` which iterates - * over `object` properties returned by `keysFunc` invoking `iteratee` for - * each property. Iteratee functions may exit iteration early by explicitly - * returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseFor = createBaseFor(); - -/** - * Creates a base function for methods like `_.forIn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} - -module.exports = baseFor; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._basefor/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash._basefor/package.json deleted file mode 100644 index b1842ab14..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._basefor/package.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "_args": [ - [ - "lodash._basefor@^3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone" - ] - ], - "_from": "lodash._basefor@>=3.0.0 <4.0.0", - "_id": "lodash._basefor@3.0.3", - "_inCache": true, - "_installable": true, - "_location": "/lodash._basefor", - "_nodeVersion": "5.4.0", - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.14.15", - "_phantomChildren": {}, - "_requested": { - "name": "lodash._basefor", - "raw": "lodash._basefor@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/lodash._baseclone" - ], - "_resolved": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz", - "_shasum": "7550b4e9218ef09fad24343b612021c79b4c20c2", - "_shrinkwrap": null, - "_spec": "lodash._basefor@^3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "blaine@iceddev.com", - "name": "Blaine Bublitz", - "url": "https://github.com/phated" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": {}, - "description": "The internal lodash function `baseFor` exported as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "7550b4e9218ef09fad24343b612021c79b4c20c2", - "tarball": "https://registry.npmjs.org/lodash._basefor/-/lodash._basefor-3.0.3.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - { - "email": "blaine@iceddev.com", - "name": "phated" - } - ], - "name": "lodash._basefor", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "3.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/LICENSE.txt b/fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/LICENSE.txt deleted file mode 100644 index 9cd87e5dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/README.md deleted file mode 100644 index d287f26d8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# lodash._bindcallback v3.0.1 - -The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `bindCallback` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. - -## Installation - -Using npm: - -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash._bindcallback -``` - -In Node.js/io.js: - -```js -var bindCallback = require('lodash._bindcallback'); -``` - -See the [package source](https://github.com/lodash/lodash/blob/3.0.1-npm-packages/lodash._bindcallback) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/index.js deleted file mode 100644 index ef6811d1a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/index.js +++ /dev/null @@ -1,65 +0,0 @@ -/** - * lodash 3.0.1 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** - * A specialized version of `baseCallback` which only supports `this` binding - * and specifying the number of arguments to provide to `func`. - * - * @private - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {number} [argCount] The number of arguments to provide to `func`. - * @returns {Function} Returns the callback. - */ -function bindCallback(func, thisArg, argCount) { - if (typeof func != 'function') { - return identity; - } - if (thisArg === undefined) { - return func; - } - switch (argCount) { - case 1: return function(value) { - return func.call(thisArg, value); - }; - case 3: return function(value, index, collection) { - return func.call(thisArg, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(thisArg, accumulator, value, index, collection); - }; - case 5: return function(value, other, key, object, source) { - return func.call(thisArg, value, other, key, object, source); - }; - } - return function() { - return func.apply(thisArg, arguments); - }; -} - -/** - * This method returns the first argument provided to it. - * - * @static - * @memberOf _ - * @category Utility - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'user': 'fred' }; - * - * _.identity(object) === object; - * // => true - */ -function identity(value) { - return value; -} - -module.exports = bindCallback; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/package.json deleted file mode 100644 index a9277a91c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._bindcallback/package.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "_args": [ - [ - "lodash._bindcallback@^3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep" - ] - ], - "_from": "lodash._bindcallback@>=3.0.0 <4.0.0", - "_id": "lodash._bindcallback@3.0.1", - "_inCache": true, - "_installable": true, - "_location": "/lodash._bindcallback", - "_nodeVersion": "0.12.2", - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.7.6", - "_phantomChildren": {}, - "_requested": { - "name": "lodash._bindcallback", - "raw": "lodash._bindcallback@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/lodash.clonedeep" - ], - "_resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", - "_shasum": "e531c27644cf8b57a99e17ed95b35c748789392e", - "_shrinkwrap": null, - "_spec": "lodash._bindcallback@^3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "demoneaux@gmail.com", - "name": "Benjamin Tan", - "url": "https://d10.github.io/" - }, - { - "email": "blaine@iceddev.com", - "name": "Blaine Bublitz", - "url": "http://www.iceddev.com/" - }, - { - "email": "github@kitcambridge.be", - "name": "Kit Cambridge", - "url": "http://kitcambridge.be/" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": {}, - "description": "The modern build of lodash’s internal `bindCallback` as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "e531c27644cf8b57a99e17ed95b35c748789392e", - "tarball": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - { - "email": "demoneaux@gmail.com", - "name": "d10" - }, - { - "email": "github@kitcambridge.be", - "name": "kitcambridge" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - { - "email": "blaine@iceddev.com", - "name": "phated" - } - ], - "name": "lodash._bindcallback", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "3.0.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._getnative/LICENSE b/fundamentals/bug-challenge-es6/node_modules/lodash._getnative/LICENSE deleted file mode 100644 index 9cd87e5dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._getnative/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._getnative/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash._getnative/README.md deleted file mode 100644 index 7835cec0a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._getnative/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# lodash._getnative v3.9.1 - -The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) internal `getNative` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. - -## Installation - -Using npm: - -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash._getnative -``` - -In Node.js/io.js: - -```js -var getNative = require('lodash._getnative'); -``` - -See the [package source](https://github.com/lodash/lodash/blob/3.9.1-npm-packages/lodash._getnative) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._getnative/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash._getnative/index.js deleted file mode 100644 index a32063d27..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._getnative/index.js +++ /dev/null @@ -1,137 +0,0 @@ -/** - * lodash 3.9.1 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** `Object#toString` result references. */ -var funcTag = '[object Function]'; - -/** Used to detect host constructors (Safari > 5). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** - * Checks if `value` is object-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -/** Used for native method references. */ -var objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var fnToString = Function.prototype.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objToString = objectProto.toString; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = object == null ? undefined : object[key]; - return isNative(value) ? value : undefined; -} - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in older versions of Chrome and Safari which return 'function' for regexes - // and Safari 8 equivalents which return 'object' for typed array constructors. - return isObject(value) && objToString.call(value) == funcTag; -} - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -/** - * Checks if `value` is a native function. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ -function isNative(value) { - if (value == null) { - return false; - } - if (isFunction(value)) { - return reIsNative.test(fnToString.call(value)); - } - return isObjectLike(value) && reIsHostCtor.test(value); -} - -module.exports = getNative; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash._getnative/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash._getnative/package.json deleted file mode 100644 index a25d04ca9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash._getnative/package.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "_args": [ - [ - "lodash._getnative@^3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash.keys" - ] - ], - "_from": "lodash._getnative@>=3.0.0 <4.0.0", - "_id": "lodash._getnative@3.9.1", - "_inCache": true, - "_installable": true, - "_location": "/lodash._getnative", - "_nodeVersion": "0.12.5", - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.12.0", - "_phantomChildren": {}, - "_requested": { - "name": "lodash._getnative", - "raw": "lodash._getnative@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/lodash.keys" - ], - "_resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "_shasum": "570bc7dede46d61cdcde687d65d3eecbaa3aaff5", - "_shrinkwrap": null, - "_spec": "lodash._getnative@^3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash.keys", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "demoneaux@gmail.com", - "name": "Benjamin Tan", - "url": "https://d10.github.io/" - }, - { - "email": "blaine@iceddev.com", - "name": "Blaine Bublitz", - "url": "http://www.iceddev.com/" - }, - { - "email": "github@kitcambridge.be", - "name": "Kit Cambridge", - "url": "http://kitcambridge.be/" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": {}, - "description": "The modern build of lodash’s internal `getNative` as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "570bc7dede46d61cdcde687d65d3eecbaa3aaff5", - "tarball": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - { - "email": "github@kitcambridge.be", - "name": "kitcambridge" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - { - "email": "blaine@iceddev.com", - "name": "phated" - } - ], - "name": "lodash._getnative", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "3.9.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.assign/LICENSE b/fundamentals/bug-challenge-es6/node_modules/lodash.assign/LICENSE deleted file mode 100644 index e0c69d560..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.assign/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.assign/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash.assign/README.md deleted file mode 100644 index 6bce2d6bd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.assign/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# lodash.assign v4.2.0 - -The [lodash](https://lodash.com/) method `_.assign` exported as a [Node.js](https://nodejs.org/) module. - -## Installation - -Using npm: -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash.assign -``` - -In Node.js: -```js -var assign = require('lodash.assign'); -``` - -See the [documentation](https://lodash.com/docs#assign) or [package source](https://github.com/lodash/lodash/blob/4.2.0-npm-packages/lodash.assign) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.assign/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash.assign/index.js deleted file mode 100644 index 8b007bc78..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.assign/index.js +++ /dev/null @@ -1,637 +0,0 @@ -/** - * lodash (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]'; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max; - -/** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */ -var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf'); - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - // Safari 8.1 makes `arguments.callee` enumerable in strict mode. - // Safari 9 makes `arguments.length` enumerable in strict mode. - var result = (isArray(value) || isArguments(value)) - ? baseTimes(value.length, String) - : []; - - var length = result.length, - skipIndexes = !!length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && (key == 'length' || isIndex(key, length)))) { - result.push(key); - } - } - return result; -} - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - object[key] = value; - } -} - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = array; - return apply(func, this, otherArgs); - }; -} - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - assignValue(object, key, newValue === undefined ? source[key] : newValue); - } - return object; -} - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); -} - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; -} - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; -} - -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -function isArguments(value) { - // Safari 8.1 makes `arguments.callee` enumerable in strict mode. - return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && - (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); -} - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -/** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ -function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); -} - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8-9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; -} - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -/** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ -var assign = createAssigner(function(object, source) { - if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } -}); - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); -} - -module.exports = assign; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.assign/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash.assign/package.json deleted file mode 100644 index 5c28478ff..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.assign/package.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "_args": [ - [ - "lodash.assign@^4.2.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/marked-terminal" - ] - ], - "_from": "lodash.assign@>=4.2.0 <5.0.0", - "_id": "lodash.assign@4.2.0", - "_inCache": true, - "_installable": true, - "_location": "/lodash.assign", - "_nodeVersion": "4.4.7", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/lodash.assign-4.2.0.tgz_1471109795713_0.5842255132738501" - }, - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.15.10", - "_phantomChildren": {}, - "_requested": { - "name": "lodash.assign", - "raw": "lodash.assign@^4.2.0", - "rawSpec": "^4.2.0", - "scope": null, - "spec": ">=4.2.0 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/marked-terminal" - ], - "_resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "_shasum": "0d99f3ccd7a6d261d19bdaeb9245005d285808e7", - "_shrinkwrap": null, - "_spec": "lodash.assign@^4.2.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/marked-terminal", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "blaine.bublitz@gmail.com", - "name": "Blaine Bublitz", - "url": "https://github.com/phated" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": {}, - "description": "The lodash method `_.assign` exported as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "0d99f3ccd7a6d261d19bdaeb9245005d285808e7", - "tarball": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "keywords": [ - "lodash-modularized", - "assign" - ], - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - { - "email": "blaine@iceddev.com", - "name": "phated" - } - ], - "name": "lodash.assign", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "4.2.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/LICENSE b/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/LICENSE deleted file mode 100644 index 9cd87e5dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/README.md deleted file mode 100644 index 7be9a82e4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# lodash.clonedeep v3.0.2 - -The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.cloneDeep` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. - -## Installation - -Using npm: - -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash.clonedeep -``` - -In Node.js/io.js: - -```js -var cloneDeep = require('lodash.clonedeep'); -``` - -See the [documentation](https://lodash.com/docs#cloneDeep) or [package source](https://github.com/lodash/lodash/blob/3.0.2-npm-packages/lodash.clonedeep) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/index.js deleted file mode 100644 index f486c2246..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/index.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * lodash 3.0.2 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -var baseClone = require('lodash._baseclone'), - bindCallback = require('lodash._bindcallback'); - -/** - * Creates a deep clone of `value`. If `customizer` is provided it's invoked - * to produce the cloned values. If `customizer` returns `undefined` cloning - * is handled by the method instead. The `customizer` is bound to `thisArg` - * and invoked with up to three argument; (value [, index|key, object]). - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](http://www.w3.org/TR/html5/infrastructure.html#internal-structured-cloning-algorithm). - * The enumerable properties of `arguments` objects and objects created by - * constructors other than `Object` are cloned to plain `Object` objects. An - * empty object is returned for uncloneable values such as functions, DOM nodes, - * Maps, Sets, and WeakMaps. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to deep clone. - * @param {Function} [customizer] The function to customize cloning values. - * @param {*} [thisArg] The `this` binding of `customizer`. - * @returns {*} Returns the deep cloned value. - * @example - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * var deep = _.cloneDeep(users); - * deep[0] === users[0]; - * // => false - * - * // using a customizer callback - * var el = _.cloneDeep(document.body, function(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * }); - * - * el === document.body - * // => false - * el.nodeName - * // => BODY - * el.childNodes.length; - * // => 20 - */ -function cloneDeep(value, customizer, thisArg) { - return typeof customizer == 'function' - ? baseClone(value, true, bindCallback(customizer, thisArg, 3)) - : baseClone(value, true); -} - -module.exports = cloneDeep; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/package.json deleted file mode 100644 index 6d3c4236b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.clonedeep/package.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "_args": [ - [ - "lodash.clonedeep@^3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/node-notifier" - ] - ], - "_from": "lodash.clonedeep@>=3.0.0 <4.0.0", - "_id": "lodash.clonedeep@3.0.2", - "_inCache": true, - "_installable": true, - "_location": "/lodash.clonedeep", - "_nodeVersion": "0.12.5", - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.13.1", - "_phantomChildren": {}, - "_requested": { - "name": "lodash.clonedeep", - "raw": "lodash.clonedeep@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/node-notifier" - ], - "_resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz", - "_shasum": "a0a1e40d82a5ea89ff5b147b8444ed63d92827db", - "_shrinkwrap": null, - "_spec": "lodash.clonedeep@^3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/node-notifier", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "demoneaux@gmail.com", - "name": "Benjamin Tan", - "url": "https://d10.github.io/" - }, - { - "email": "blaine@iceddev.com", - "name": "Blaine Bublitz", - "url": "http://www.iceddev.com/" - }, - { - "email": "github@kitcambridge.be", - "name": "Kit Cambridge", - "url": "http://kitcambridge.be/" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": { - "lodash._baseclone": "^3.0.0", - "lodash._bindcallback": "^3.0.0" - }, - "description": "The modern build of lodash’s `_.cloneDeep` as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "a0a1e40d82a5ea89ff5b147b8444ed63d92827db", - "tarball": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "keywords": [ - "lodash", - "lodash-modularized", - "stdlib", - "util" - ], - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - { - "email": "github@kitcambridge.be", - "name": "kitcambridge" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - { - "email": "blaine@iceddev.com", - "name": "phated" - }, - { - "email": "demoneaux@gmail.com", - "name": "d10" - } - ], - "name": "lodash.clonedeep", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "3.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/LICENSE b/fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/LICENSE deleted file mode 100644 index e0c69d560..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/README.md deleted file mode 100644 index eb95fe134..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# lodash.isarguments v3.1.0 - -The [lodash](https://lodash.com/) method `_.isArguments` exported as a [Node.js](https://nodejs.org/) module. - -## Installation - -Using npm: -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash.isarguments -``` - -In Node.js: -```js -var isArguments = require('lodash.isarguments'); -``` - -See the [documentation](https://lodash.com/docs#isArguments) or [package source](https://github.com/lodash/lodash/blob/3.1.0-npm-packages/lodash.isarguments) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/index.js deleted file mode 100644 index 042dac501..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/index.js +++ /dev/null @@ -1,229 +0,0 @@ -/** - * lodash (Custom Build) - * Build: `lodash modularize exports="npm" -o ./` - * Copyright jQuery Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var objectToString = objectProto.toString; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -function isArguments(value) { - // Safari 8.1 makes `arguments.callee` enumerable in strict mode. - return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && - (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); -} - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -/** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ -function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); -} - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 8-9 which returns 'object' for typed array and other constructors. - var tag = isObject(value) ? objectToString.call(value) : ''; - return tag == funcTag || tag == genTag; -} - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -module.exports = isArguments; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/package.json deleted file mode 100644 index dd0456972..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.isarguments/package.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "_args": [ - [ - "lodash.isarguments@^3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash.keys" - ] - ], - "_from": "lodash.isarguments@>=3.0.0 <4.0.0", - "_id": "lodash.isarguments@3.1.0", - "_inCache": true, - "_installable": true, - "_location": "/lodash.isarguments", - "_nodeVersion": "4.4.7", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/lodash.isarguments-3.1.0.tgz_1471110006733_0.7392017105594277" - }, - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.15.10", - "_phantomChildren": {}, - "_requested": { - "name": "lodash.isarguments", - "raw": "lodash.isarguments@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/lodash.keys" - ], - "_resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "_shasum": "2f573d85c6a24289ff00663b491c1d338ff3458a", - "_shrinkwrap": null, - "_spec": "lodash.isarguments@^3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash.keys", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "blaine.bublitz@gmail.com", - "name": "Blaine Bublitz", - "url": "https://github.com/phated" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": {}, - "description": "The lodash method `_.isArguments` exported as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "2f573d85c6a24289ff00663b491c1d338ff3458a", - "tarball": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "keywords": [ - "lodash-modularized", - "isarguments" - ], - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - { - "email": "blaine@iceddev.com", - "name": "phated" - } - ], - "name": "lodash.isarguments", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "3.1.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.isarray/LICENSE b/fundamentals/bug-challenge-es6/node_modules/lodash.isarray/LICENSE deleted file mode 100644 index 9cd87e5dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.isarray/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.isarray/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash.isarray/README.md deleted file mode 100644 index ea274aae1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.isarray/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# lodash.isarray v3.0.4 - -The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.isArray` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. - -## Installation - -Using npm: - -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash.isarray -``` - -In Node.js/io.js: - -```js -var isArray = require('lodash.isarray'); -``` - -See the [documentation](https://lodash.com/docs#isArray) or [package source](https://github.com/lodash/lodash/blob/3.0.4-npm-packages/lodash.isarray) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.isarray/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash.isarray/index.js deleted file mode 100644 index dd2465844..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.isarray/index.js +++ /dev/null @@ -1,180 +0,0 @@ -/** - * lodash 3.0.4 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ - -/** `Object#toString` result references. */ -var arrayTag = '[object Array]', - funcTag = '[object Function]'; - -/** Used to detect host constructors (Safari > 5). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** - * Checks if `value` is object-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - */ -function isObjectLike(value) { - return !!value && typeof value == 'object'; -} - -/** Used for native method references. */ -var objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var fnToString = Function.prototype.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) - * of values. - */ -var objToString = objectProto.toString; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/* Native method references for those with the same name as other `lodash` methods. */ -var nativeIsArray = getNative(Array, 'isArray'); - -/** - * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) - * of an array-like value. - */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = object == null ? undefined : object[key]; - return isNative(value) ? value : undefined; -} - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - */ -function isLength(value) { - return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(function() { return arguments; }()); - * // => false - */ -var isArray = nativeIsArray || function(value) { - return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; -}; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is correctly classified, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - // The use of `Object#toString` avoids issues with the `typeof` operator - // in older versions of Chrome and Safari which return 'function' for regexes - // and Safari 8 equivalents which return 'object' for typed array constructors. - return isObject(value) && objToString.call(value) == funcTag; -} - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -/** - * Checks if `value` is a native function. - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ -function isNative(value) { - if (value == null) { - return false; - } - if (isFunction(value)) { - return reIsNative.test(fnToString.call(value)); - } - return isObjectLike(value) && reIsHostCtor.test(value); -} - -module.exports = isArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.isarray/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash.isarray/package.json deleted file mode 100644 index 3d4d3995b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.isarray/package.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "_args": [ - [ - "lodash.isarray@^3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone" - ] - ], - "_from": "lodash.isarray@>=3.0.0 <4.0.0", - "_id": "lodash.isarray@3.0.4", - "_inCache": true, - "_installable": true, - "_location": "/lodash.isarray", - "_nodeVersion": "0.12.5", - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.12.0", - "_phantomChildren": {}, - "_requested": { - "name": "lodash.isarray", - "raw": "lodash.isarray@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/lodash._baseclone", - "/lodash.keys" - ], - "_resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "_shasum": "79e4eb88c36a8122af86f844aa9bcd851b5fbb55", - "_shrinkwrap": null, - "_spec": "lodash.isarray@^3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "demoneaux@gmail.com", - "name": "Benjamin Tan", - "url": "https://d10.github.io/" - }, - { - "email": "blaine@iceddev.com", - "name": "Blaine Bublitz", - "url": "http://www.iceddev.com/" - }, - { - "email": "github@kitcambridge.be", - "name": "Kit Cambridge", - "url": "http://kitcambridge.be/" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": {}, - "description": "The modern build of lodash’s `_.isArray` as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "79e4eb88c36a8122af86f844aa9bcd851b5fbb55", - "tarball": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "keywords": [ - "lodash", - "lodash-modularized", - "stdlib", - "util" - ], - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - { - "email": "github@kitcambridge.be", - "name": "kitcambridge" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - { - "email": "blaine@iceddev.com", - "name": "phated" - }, - { - "email": "demoneaux@gmail.com", - "name": "d10" - } - ], - "name": "lodash.isarray", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "3.0.4" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.keys/LICENSE b/fundamentals/bug-challenge-es6/node_modules/lodash.keys/LICENSE deleted file mode 100644 index 9cd87e5dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.keys/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright 2012-2015 The Dojo Foundation -Based on Underscore.js, copyright 2009-2015 Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.keys/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash.keys/README.md deleted file mode 100644 index 5f69a1826..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.keys/README.md +++ /dev/null @@ -1,20 +0,0 @@ -# lodash.keys v3.1.2 - -The [modern build](https://github.com/lodash/lodash/wiki/Build-Differences) of [lodash’s](https://lodash.com/) `_.keys` exported as a [Node.js](http://nodejs.org/)/[io.js](https://iojs.org/) module. - -## Installation - -Using npm: - -```bash -$ {sudo -H} npm i -g npm -$ npm i --save lodash.keys -``` - -In Node.js/io.js: - -```js -var keys = require('lodash.keys'); -``` - -See the [documentation](https://lodash.com/docs#keys) or [package source](https://github.com/lodash/lodash/blob/3.1.2-npm-packages/lodash.keys) for more details. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.keys/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash.keys/index.js deleted file mode 100644 index f4c17749a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.keys/index.js +++ /dev/null @@ -1,236 +0,0 @@ -/** - * lodash 3.1.2 (Custom Build) - * Build: `lodash modern modularize exports="npm" -o ./` - * Copyright 2012-2015 The Dojo Foundation - * Based on Underscore.js 1.8.3 - * Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - * Available under MIT license - */ -var getNative = require('lodash._getnative'), - isArguments = require('lodash.isarguments'), - isArray = require('lodash.isarray'); - -/** Used to detect unsigned integer values. */ -var reIsUint = /^\d+$/; - -/** Used for native method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/* Native method references for those with the same name as other `lodash` methods. */ -var nativeKeys = getNative(Object, 'keys'); - -/** - * Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer) - * of an array-like value. - */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -/** - * Gets the "length" property value of `object`. - * - * **Note:** This function is used to avoid a [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) - * that affects Safari on at least iOS 8.1-8.3 ARM64. - * - * @private - * @param {Object} object The object to query. - * @returns {*} Returns the "length" value. - */ -var getLength = baseProperty('length'); - -/** - * Checks if `value` is array-like. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - */ -function isArrayLike(value) { - return value != null && isLength(getLength(value)); -} - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1; - length = length == null ? MAX_SAFE_INTEGER : length; - return value > -1 && value % 1 == 0 && value < length; -} - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - */ -function isLength(value) { - return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * A fallback implementation of `Object.keys` which creates an array of the - * own enumerable property names of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function shimKeys(object) { - var props = keysIn(object), - propsLength = props.length, - length = propsLength && object.length; - - var allowIndexes = !!length && isLength(length) && - (isArray(object) || isArguments(object)); - - var index = -1, - result = []; - - while (++index < propsLength) { - var key = props[index]; - if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { - result.push(key); - } - } - return result; -} - -/** - * Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`. - * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(1); - * // => false - */ -function isObject(value) { - // Avoid a V8 JIT bug in Chrome 19-20. - // See https://code.google.com/p/v8/issues/detail?id=2291 for more details. - var type = typeof value; - return !!value && (type == 'object' || type == 'function'); -} - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys) - * for more details. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -var keys = !nativeKeys ? shimKeys : function(object) { - var Ctor = object == null ? undefined : object.constructor; - if ((typeof Ctor == 'function' && Ctor.prototype === object) || - (typeof object != 'function' && isArrayLike(object))) { - return shimKeys(object); - } - return isObject(object) ? nativeKeys(object) : []; -}; - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn(object) { - if (object == null) { - return []; - } - if (!isObject(object)) { - object = Object(object); - } - var length = object.length; - length = (length && isLength(length) && - (isArray(object) || isArguments(object)) && length) || 0; - - var Ctor = object.constructor, - index = -1, - isProto = typeof Ctor == 'function' && Ctor.prototype === object, - result = Array(length), - skipIndexes = length > 0; - - while (++index < length) { - result[index] = (index + ''); - } - for (var key in object) { - if (!(skipIndexes && isIndex(key, length)) && - !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; -} - -module.exports = keys; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash.keys/package.json b/fundamentals/bug-challenge-es6/node_modules/lodash.keys/package.json deleted file mode 100644 index 05894de9c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash.keys/package.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "_args": [ - [ - "lodash.keys@^3.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone" - ] - ], - "_from": "lodash.keys@>=3.0.0 <4.0.0", - "_id": "lodash.keys@3.1.2", - "_inCache": true, - "_installable": true, - "_location": "/lodash.keys", - "_nodeVersion": "0.12.5", - "_npmUser": { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - "_npmVersion": "2.12.0", - "_phantomChildren": {}, - "_requested": { - "name": "lodash.keys", - "raw": "lodash.keys@^3.0.0", - "rawSpec": "^3.0.0", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/lodash._baseassign", - "/lodash._baseclone" - ], - "_resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "_shasum": "4dbc0472b156be50a0b286855d1bd0b0c656098a", - "_shrinkwrap": null, - "_spec": "lodash.keys@^3.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/lodash._baseclone", - "author": { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - "bugs": { - "url": "https://github.com/lodash/lodash/issues" - }, - "contributors": [ - { - "email": "john.david.dalton@gmail.com", - "name": "John-David Dalton", - "url": "http://allyoucanleet.com/" - }, - { - "email": "demoneaux@gmail.com", - "name": "Benjamin Tan", - "url": "https://d10.github.io/" - }, - { - "email": "blaine@iceddev.com", - "name": "Blaine Bublitz", - "url": "http://www.iceddev.com/" - }, - { - "email": "github@kitcambridge.be", - "name": "Kit Cambridge", - "url": "http://kitcambridge.be/" - }, - { - "email": "mathias@qiwi.be", - "name": "Mathias Bynens", - "url": "https://mathiasbynens.be/" - } - ], - "dependencies": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - }, - "description": "The modern build of lodash’s `_.keys` as a module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "4dbc0472b156be50a0b286855d1bd0b0c656098a", - "tarball": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz" - }, - "homepage": "https://lodash.com/", - "icon": "https://lodash.com/icon.svg", - "keywords": [ - "lodash", - "lodash-modularized", - "stdlib", - "util" - ], - "license": "MIT", - "maintainers": [ - { - "email": "john.david.dalton@gmail.com", - "name": "jdalton" - }, - { - "email": "github@kitcambridge.be", - "name": "kitcambridge" - }, - { - "email": "mathias@qiwi.be", - "name": "mathias" - }, - { - "email": "blaine@iceddev.com", - "name": "phated" - }, - { - "email": "demoneaux@gmail.com", - "name": "d10" - } - ], - "name": "lodash.keys", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/lodash/lodash.git" - }, - "scripts": { - "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" - }, - "version": "3.1.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/LICENSE b/fundamentals/bug-challenge-es6/node_modules/lodash/LICENSE deleted file mode 100644 index c6f2f6145..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/LICENSE +++ /dev/null @@ -1,47 +0,0 @@ -Copyright JS Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/README.md b/fundamentals/bug-challenge-es6/node_modules/lodash/README.md deleted file mode 100644 index 382e74051..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# lodash v4.17.2 - -The [Lodash](https://lodash.com/) library exported as [Node.js](https://nodejs.org/) modules. - -## Installation - -Using npm: -```shell -$ npm i -g npm -$ npm i --save lodash -``` - -In Node.js: -```js -// Load the full build. -var _ = require('lodash'); -// Load the core build. -var _ = require('lodash/core'); -// Load the FP build for immutable auto-curried iteratee-first data-last methods. -var fp = require('lodash/fp'); - -// Load method categories. -var array = require('lodash/array'); -var object = require('lodash/fp/object'); - -// Cherry-pick methods for smaller browserify/rollup/webpack bundles. -var at = require('lodash/at'); -var curryN = require('lodash/fp/curryN'); -``` - -See the [package source](https://github.com/lodash/lodash/tree/4.17.2-npm) for more details. - -**Note:**
-Install [n_](https://www.npmjs.com/package/n_) for Lodash use in the Node.js < 6 REPL. - -## Support - -Tested in Chrome 53-54, Firefox 48-49, IE 11, Edge 14, Safari 9-10, Node.js 6-7, & PhantomJS 2.1.1.
-Automated [browser](https://saucelabs.com/u/lodash) & [CI](https://travis-ci.org/lodash/lodash/) test runs are available. diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_DataView.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_DataView.js deleted file mode 100644 index ac2d57ca6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_DataView.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var DataView = getNative(root, 'DataView'); - -module.exports = DataView; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_Hash.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_Hash.js deleted file mode 100644 index b504fe340..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_Hash.js +++ /dev/null @@ -1,32 +0,0 @@ -var hashClear = require('./_hashClear'), - hashDelete = require('./_hashDelete'), - hashGet = require('./_hashGet'), - hashHas = require('./_hashHas'), - hashSet = require('./_hashSet'); - -/** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `Hash`. -Hash.prototype.clear = hashClear; -Hash.prototype['delete'] = hashDelete; -Hash.prototype.get = hashGet; -Hash.prototype.has = hashHas; -Hash.prototype.set = hashSet; - -module.exports = Hash; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_LazyWrapper.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_LazyWrapper.js deleted file mode 100644 index 81786c7f1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_LazyWrapper.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseCreate = require('./_baseCreate'), - baseLodash = require('./_baseLodash'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295; - -/** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ -function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; -} - -// Ensure `LazyWrapper` is an instance of `baseLodash`. -LazyWrapper.prototype = baseCreate(baseLodash.prototype); -LazyWrapper.prototype.constructor = LazyWrapper; - -module.exports = LazyWrapper; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_ListCache.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_ListCache.js deleted file mode 100644 index 26895c3a8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_ListCache.js +++ /dev/null @@ -1,32 +0,0 @@ -var listCacheClear = require('./_listCacheClear'), - listCacheDelete = require('./_listCacheDelete'), - listCacheGet = require('./_listCacheGet'), - listCacheHas = require('./_listCacheHas'), - listCacheSet = require('./_listCacheSet'); - -/** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `ListCache`. -ListCache.prototype.clear = listCacheClear; -ListCache.prototype['delete'] = listCacheDelete; -ListCache.prototype.get = listCacheGet; -ListCache.prototype.has = listCacheHas; -ListCache.prototype.set = listCacheSet; - -module.exports = ListCache; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_LodashWrapper.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_LodashWrapper.js deleted file mode 100644 index c1e4d9df7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_LodashWrapper.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseCreate = require('./_baseCreate'), - baseLodash = require('./_baseLodash'); - -/** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ -function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; -} - -LodashWrapper.prototype = baseCreate(baseLodash.prototype); -LodashWrapper.prototype.constructor = LodashWrapper; - -module.exports = LodashWrapper; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_Map.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_Map.js deleted file mode 100644 index b73f29a0f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_Map.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Map = getNative(root, 'Map'); - -module.exports = Map; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_MapCache.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_MapCache.js deleted file mode 100644 index 4a4eea7bf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_MapCache.js +++ /dev/null @@ -1,32 +0,0 @@ -var mapCacheClear = require('./_mapCacheClear'), - mapCacheDelete = require('./_mapCacheDelete'), - mapCacheGet = require('./_mapCacheGet'), - mapCacheHas = require('./_mapCacheHas'), - mapCacheSet = require('./_mapCacheSet'); - -/** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} - -// Add methods to `MapCache`. -MapCache.prototype.clear = mapCacheClear; -MapCache.prototype['delete'] = mapCacheDelete; -MapCache.prototype.get = mapCacheGet; -MapCache.prototype.has = mapCacheHas; -MapCache.prototype.set = mapCacheSet; - -module.exports = MapCache; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_Promise.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_Promise.js deleted file mode 100644 index 247b9e1ba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_Promise.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Promise = getNative(root, 'Promise'); - -module.exports = Promise; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_Set.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_Set.js deleted file mode 100644 index b3c8dcbf0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_Set.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var Set = getNative(root, 'Set'); - -module.exports = Set; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_SetCache.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_SetCache.js deleted file mode 100644 index 6468b0647..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_SetCache.js +++ /dev/null @@ -1,27 +0,0 @@ -var MapCache = require('./_MapCache'), - setCacheAdd = require('./_setCacheAdd'), - setCacheHas = require('./_setCacheHas'); - -/** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ -function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } -} - -// Add methods to `SetCache`. -SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; -SetCache.prototype.has = setCacheHas; - -module.exports = SetCache; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_Stack.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_Stack.js deleted file mode 100644 index 80b2cf1b0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_Stack.js +++ /dev/null @@ -1,27 +0,0 @@ -var ListCache = require('./_ListCache'), - stackClear = require('./_stackClear'), - stackDelete = require('./_stackDelete'), - stackGet = require('./_stackGet'), - stackHas = require('./_stackHas'), - stackSet = require('./_stackSet'); - -/** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ -function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; -} - -// Add methods to `Stack`. -Stack.prototype.clear = stackClear; -Stack.prototype['delete'] = stackDelete; -Stack.prototype.get = stackGet; -Stack.prototype.has = stackHas; -Stack.prototype.set = stackSet; - -module.exports = Stack; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_Symbol.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_Symbol.js deleted file mode 100644 index a013f7c5b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_Symbol.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Built-in value references. */ -var Symbol = root.Symbol; - -module.exports = Symbol; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_Uint8Array.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_Uint8Array.js deleted file mode 100644 index 2fb30e157..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_Uint8Array.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Built-in value references. */ -var Uint8Array = root.Uint8Array; - -module.exports = Uint8Array; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_WeakMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_WeakMap.js deleted file mode 100644 index 567f86c61..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_WeakMap.js +++ /dev/null @@ -1,7 +0,0 @@ -var getNative = require('./_getNative'), - root = require('./_root'); - -/* Built-in method references that are verified to be native. */ -var WeakMap = getNative(root, 'WeakMap'); - -module.exports = WeakMap; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_addMapEntry.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_addMapEntry.js deleted file mode 100644 index 5a6921216..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_addMapEntry.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Adds the key-value `pair` to `map`. - * - * @private - * @param {Object} map The map to modify. - * @param {Array} pair The key-value pair to add. - * @returns {Object} Returns `map`. - */ -function addMapEntry(map, pair) { - // Don't return `map.set` because it's not chainable in IE 11. - map.set(pair[0], pair[1]); - return map; -} - -module.exports = addMapEntry; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_addSetEntry.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_addSetEntry.js deleted file mode 100644 index 1a07b708a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_addSetEntry.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Adds `value` to `set`. - * - * @private - * @param {Object} set The set to modify. - * @param {*} value The value to add. - * @returns {Object} Returns `set`. - */ -function addSetEntry(set, value) { - // Don't return `set.add` because it's not chainable in IE 11. - set.add(value); - return set; -} - -module.exports = addSetEntry; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_apply.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_apply.js deleted file mode 100644 index 36436dda5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_apply.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -module.exports = apply; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayAggregator.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayAggregator.js deleted file mode 100644 index d96c3ca47..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayAggregator.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; -} - -module.exports = arrayAggregator; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayEach.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayEach.js deleted file mode 100644 index 2c5f57968..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayEach.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} - -module.exports = arrayEach; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayEachRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayEachRight.js deleted file mode 100644 index 976ca5c29..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayEachRight.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ -function arrayEachRight(array, iteratee) { - var length = array == null ? 0 : array.length; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; -} - -module.exports = arrayEachRight; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayEvery.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayEvery.js deleted file mode 100644 index e26a91845..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayEvery.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ -function arrayEvery(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; -} - -module.exports = arrayEvery; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayFilter.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayFilter.js deleted file mode 100644 index 75ea25445..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayFilter.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} - -module.exports = arrayFilter; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayIncludes.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayIncludes.js deleted file mode 100644 index 3737a6d9e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayIncludes.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && baseIndexOf(array, value, 0) > -1; -} - -module.exports = arrayIncludes; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayIncludesWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayIncludesWith.js deleted file mode 100644 index 235fd9758..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayIncludesWith.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ -function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; -} - -module.exports = arrayIncludesWith; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayLikeKeys.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayLikeKeys.js deleted file mode 100644 index b2ec9ce78..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayLikeKeys.js +++ /dev/null @@ -1,49 +0,0 @@ -var baseTimes = require('./_baseTimes'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isIndex = require('./_isIndex'), - isTypedArray = require('./isTypedArray'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} - -module.exports = arrayLikeKeys; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayMap.js deleted file mode 100644 index 22b22464e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayMap.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -module.exports = arrayMap; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayPush.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayPush.js deleted file mode 100644 index 7d742b383..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayPush.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ -function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; -} - -module.exports = arrayPush; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayReduce.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayReduce.js deleted file mode 100644 index de8b79b28..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayReduce.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; -} - -module.exports = arrayReduce; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayReduceRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayReduceRight.js deleted file mode 100644 index 22d8976de..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayReduceRight.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ -function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array == null ? 0 : array.length; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; -} - -module.exports = arrayReduceRight; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arraySample.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arraySample.js deleted file mode 100644 index fcab0105e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arraySample.js +++ /dev/null @@ -1,15 +0,0 @@ -var baseRandom = require('./_baseRandom'); - -/** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ -function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; -} - -module.exports = arraySample; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arraySampleSize.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arraySampleSize.js deleted file mode 100644 index 8c7e364f5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arraySampleSize.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseClamp = require('./_baseClamp'), - copyArray = require('./_copyArray'), - shuffleSelf = require('./_shuffleSelf'); - -/** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ -function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); -} - -module.exports = arraySampleSize; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayShuffle.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayShuffle.js deleted file mode 100644 index 46313a39b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arrayShuffle.js +++ /dev/null @@ -1,15 +0,0 @@ -var copyArray = require('./_copyArray'), - shuffleSelf = require('./_shuffleSelf'); - -/** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); -} - -module.exports = arrayShuffle; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_arraySome.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_arraySome.js deleted file mode 100644 index 6fd02fd4a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_arraySome.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; -} - -module.exports = arraySome; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_asciiSize.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_asciiSize.js deleted file mode 100644 index 11d29c33a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_asciiSize.js +++ /dev/null @@ -1,12 +0,0 @@ -var baseProperty = require('./_baseProperty'); - -/** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -var asciiSize = baseProperty('length'); - -module.exports = asciiSize; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_asciiToArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_asciiToArray.js deleted file mode 100644 index 8e3dd5b47..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_asciiToArray.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function asciiToArray(string) { - return string.split(''); -} - -module.exports = asciiToArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_asciiWords.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_asciiWords.js deleted file mode 100644 index d765f0f76..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_asciiWords.js +++ /dev/null @@ -1,15 +0,0 @@ -/** Used to match words composed of alphanumeric characters. */ -var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - -/** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ -function asciiWords(string) { - return string.match(reAsciiWord) || []; -} - -module.exports = asciiWords; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_assignInDefaults.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_assignInDefaults.js deleted file mode 100644 index ea6b0e358..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_assignInDefaults.js +++ /dev/null @@ -1,27 +0,0 @@ -var eq = require('./eq'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used by `_.defaults` to customize its `_.assignIn` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ -function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; -} - -module.exports = assignInDefaults; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_assignMergeValue.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_assignMergeValue.js deleted file mode 100644 index cb1185e99..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_assignMergeValue.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - eq = require('./eq'); - -/** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -module.exports = assignMergeValue; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_assignValue.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_assignValue.js deleted file mode 100644 index 40839575b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_assignValue.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - eq = require('./eq'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -module.exports = assignValue; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_assocIndexOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_assocIndexOf.js deleted file mode 100644 index 5b77a2bdd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_assocIndexOf.js +++ /dev/null @@ -1,21 +0,0 @@ -var eq = require('./eq'); - -/** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; -} - -module.exports = assocIndexOf; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAggregator.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAggregator.js deleted file mode 100644 index 4bc9e91f4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAggregator.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ -function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; -} - -module.exports = baseAggregator; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAssign.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAssign.js deleted file mode 100644 index e5c4a1a5b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAssign.js +++ /dev/null @@ -1,17 +0,0 @@ -var copyObject = require('./_copyObject'), - keys = require('./keys'); - -/** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); -} - -module.exports = baseAssign; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAssignIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAssignIn.js deleted file mode 100644 index 6624f9006..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAssignIn.js +++ /dev/null @@ -1,17 +0,0 @@ -var copyObject = require('./_copyObject'), - keysIn = require('./keysIn'); - -/** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ -function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object); -} - -module.exports = baseAssignIn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAssignValue.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAssignValue.js deleted file mode 100644 index d6f66ef3a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAssignValue.js +++ /dev/null @@ -1,25 +0,0 @@ -var defineProperty = require('./_defineProperty'); - -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -module.exports = baseAssignValue; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAt.js deleted file mode 100644 index 90e4237a0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseAt.js +++ /dev/null @@ -1,23 +0,0 @@ -var get = require('./get'); - -/** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths to pick. - * @returns {Array} Returns the picked elements. - */ -function baseAt(object, paths) { - var index = -1, - length = paths.length, - result = Array(length), - skip = object == null; - - while (++index < length) { - result[index] = skip ? undefined : get(object, paths[index]); - } - return result; -} - -module.exports = baseAt; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseClamp.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseClamp.js deleted file mode 100644 index a1c569292..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseClamp.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ -function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; -} - -module.exports = baseClamp; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseClone.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseClone.js deleted file mode 100644 index 7c27a37d3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseClone.js +++ /dev/null @@ -1,153 +0,0 @@ -var Stack = require('./_Stack'), - arrayEach = require('./_arrayEach'), - assignValue = require('./_assignValue'), - baseAssign = require('./_baseAssign'), - baseAssignIn = require('./_baseAssignIn'), - cloneBuffer = require('./_cloneBuffer'), - copyArray = require('./_copyArray'), - copySymbols = require('./_copySymbols'), - copySymbolsIn = require('./_copySymbolsIn'), - getAllKeys = require('./_getAllKeys'), - getAllKeysIn = require('./_getAllKeysIn'), - getTag = require('./_getTag'), - initCloneArray = require('./_initCloneArray'), - initCloneByTag = require('./_initCloneByTag'), - initCloneObject = require('./_initCloneObject'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isObject = require('./isObject'), - keys = require('./keys'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values supported by `_.clone`. */ -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = -cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = -cloneableTags[boolTag] = cloneableTags[dateTag] = -cloneableTags[float32Tag] = cloneableTags[float64Tag] = -cloneableTags[int8Tag] = cloneableTags[int16Tag] = -cloneableTags[int32Tag] = cloneableTags[mapTag] = -cloneableTags[numberTag] = cloneableTags[objectTag] = -cloneableTags[regexpTag] = cloneableTags[setTag] = -cloneableTags[stringTag] = cloneableTags[symbolTag] = -cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = -cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = -cloneableTags[weakMapTag] = false; - -/** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ -function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat - ? copySymbolsIn(value, baseAssignIn(result, value)) - : copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, baseClone, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - var keysFunc = isFull - ? (isFlat ? getAllKeysIn : getAllKeys) - : (isFlat ? keysIn : keys); - - var props = isArr ? undefined : keysFunc(value); - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; -} - -module.exports = baseClone; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseConforms.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseConforms.js deleted file mode 100644 index 947e20d40..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseConforms.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseConformsTo = require('./_baseConformsTo'), - keys = require('./keys'); - -/** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - */ -function baseConforms(source) { - var props = keys(source); - return function(object) { - return baseConformsTo(object, source, props); - }; -} - -module.exports = baseConforms; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseConformsTo.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseConformsTo.js deleted file mode 100644 index e449cb84b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseConformsTo.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * The base implementation of `_.conformsTo` which accepts `props` to check. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - */ -function baseConformsTo(object, source, props) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length], - predicate = source[key], - value = object[key]; - - if ((value === undefined && !(key in object)) || !predicate(value)) { - return false; - } - } - return true; -} - -module.exports = baseConformsTo; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseCreate.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseCreate.js deleted file mode 100644 index ffa6a52ac..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseCreate.js +++ /dev/null @@ -1,30 +0,0 @@ -var isObject = require('./isObject'); - -/** Built-in value references. */ -var objectCreate = Object.create; - -/** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ -var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; -}()); - -module.exports = baseCreate; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseDelay.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseDelay.js deleted file mode 100644 index 1486d697e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseDelay.js +++ /dev/null @@ -1,21 +0,0 @@ -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ -function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); -} - -module.exports = baseDelay; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseDifference.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseDifference.js deleted file mode 100644 index 343ac19f0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseDifference.js +++ /dev/null @@ -1,67 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - arrayMap = require('./_arrayMap'), - baseUnary = require('./_baseUnary'), - cacheHas = require('./_cacheHas'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ -function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee == null ? value : iteratee(value); - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; -} - -module.exports = baseDifference; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseEach.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseEach.js deleted file mode 100644 index 512c06768..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseEach.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseForOwn = require('./_baseForOwn'), - createBaseEach = require('./_createBaseEach'); - -/** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEach = createBaseEach(baseForOwn); - -module.exports = baseEach; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseEachRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseEachRight.js deleted file mode 100644 index 0a8feeca4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseEachRight.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseForOwnRight = require('./_baseForOwnRight'), - createBaseEach = require('./_createBaseEach'); - -/** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ -var baseEachRight = createBaseEach(baseForOwnRight, true); - -module.exports = baseEachRight; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseEvery.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseEvery.js deleted file mode 100644 index fa52f7bc7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseEvery.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ -function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; -} - -module.exports = baseEvery; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseExtremum.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseExtremum.js deleted file mode 100644 index 9d6aa77ed..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseExtremum.js +++ /dev/null @@ -1,32 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ -function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !isSymbol(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; -} - -module.exports = baseExtremum; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFill.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFill.js deleted file mode 100644 index 46ef9c761..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFill.js +++ /dev/null @@ -1,32 +0,0 @@ -var toInteger = require('./toInteger'), - toLength = require('./toLength'); - -/** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ -function baseFill(array, value, start, end) { - var length = array.length; - - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; -} - -module.exports = baseFill; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFilter.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFilter.js deleted file mode 100644 index 467847736..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFilter.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ -function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; -} - -module.exports = baseFilter; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFindIndex.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFindIndex.js deleted file mode 100644 index e3f5d8aa2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFindIndex.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; -} - -module.exports = baseFindIndex; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFindKey.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFindKey.js deleted file mode 100644 index 2e430f3a2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFindKey.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ -function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; - } - }); - return result; -} - -module.exports = baseFindKey; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFlatten.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFlatten.js deleted file mode 100644 index 4b1e009b1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFlatten.js +++ /dev/null @@ -1,38 +0,0 @@ -var arrayPush = require('./_arrayPush'), - isFlattenable = require('./_isFlattenable'); - -/** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ -function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} - -module.exports = baseFlatten; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFor.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFor.js deleted file mode 100644 index d946590f8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFor.js +++ /dev/null @@ -1,16 +0,0 @@ -var createBaseFor = require('./_createBaseFor'); - -/** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseFor = createBaseFor(); - -module.exports = baseFor; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseForOwn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseForOwn.js deleted file mode 100644 index 503d52344..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseForOwn.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseFor = require('./_baseFor'), - keys = require('./keys'); - -/** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); -} - -module.exports = baseForOwn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseForOwnRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseForOwnRight.js deleted file mode 100644 index a4b10e6c5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseForOwnRight.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseForRight = require('./_baseForRight'), - keys = require('./keys'); - -/** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ -function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); -} - -module.exports = baseForOwnRight; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseForRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseForRight.js deleted file mode 100644 index 32842cd81..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseForRight.js +++ /dev/null @@ -1,15 +0,0 @@ -var createBaseFor = require('./_createBaseFor'); - -/** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ -var baseForRight = createBaseFor(true); - -module.exports = baseForRight; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFunctions.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFunctions.js deleted file mode 100644 index d23bc9b47..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseFunctions.js +++ /dev/null @@ -1,19 +0,0 @@ -var arrayFilter = require('./_arrayFilter'), - isFunction = require('./isFunction'); - -/** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ -function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); -} - -module.exports = baseFunctions; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseGet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseGet.js deleted file mode 100644 index a194913d2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseGet.js +++ /dev/null @@ -1,24 +0,0 @@ -var castPath = require('./_castPath'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ -function baseGet(object, path) { - path = castPath(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; -} - -module.exports = baseGet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseGetAllKeys.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseGetAllKeys.js deleted file mode 100644 index 8ad204ea4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseGetAllKeys.js +++ /dev/null @@ -1,20 +0,0 @@ -var arrayPush = require('./_arrayPush'), - isArray = require('./isArray'); - -/** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ -function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); -} - -module.exports = baseGetAllKeys; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseGetTag.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseGetTag.js deleted file mode 100644 index cf869ac6e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseGetTag.js +++ /dev/null @@ -1,29 +0,0 @@ -var Symbol = require('./_Symbol'), - getRawTag = require('./_getRawTag'), - objectToString = require('./_objectToString'); - -/** `Object#toString` result references. */ -var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - -/** Built-in value references. */ -var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - -/** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - value = Object(value); - return (symToStringTag && symToStringTag in value) - ? getRawTag(value) - : objectToString(value); -} - -module.exports = baseGetTag; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseGt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseGt.js deleted file mode 100644 index 502d273ca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseGt.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ -function baseGt(value, other) { - return value > other; -} - -module.exports = baseGt; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseHas.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseHas.js deleted file mode 100644 index 1b730321c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseHas.js +++ /dev/null @@ -1,19 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); -} - -module.exports = baseHas; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseHasIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseHasIn.js deleted file mode 100644 index 2e0d04269..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseHasIn.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ -function baseHasIn(object, key) { - return object != null && key in Object(object); -} - -module.exports = baseHasIn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseInRange.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseInRange.js deleted file mode 100644 index ec9566618..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseInRange.js +++ /dev/null @@ -1,18 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * The base implementation of `_.inRange` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ -function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); -} - -module.exports = baseInRange; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIndexOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIndexOf.js deleted file mode 100644 index 167e706e7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIndexOf.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIsNaN = require('./_baseIsNaN'), - strictIndexOf = require('./_strictIndexOf'); - -/** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex); -} - -module.exports = baseIndexOf; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIndexOfWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIndexOfWith.js deleted file mode 100644 index f815fe0dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIndexOfWith.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; -} - -module.exports = baseIndexOfWith; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIntersection.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIntersection.js deleted file mode 100644 index c1d250c2a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIntersection.js +++ /dev/null @@ -1,74 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - arrayMap = require('./_arrayMap'), - baseUnary = require('./_baseUnary'), - cacheHas = require('./_cacheHas'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ -function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; - - var index = -1, - seen = caches[0]; - - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -module.exports = baseIntersection; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseInverter.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseInverter.js deleted file mode 100644 index fbc337f01..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseInverter.js +++ /dev/null @@ -1,21 +0,0 @@ -var baseForOwn = require('./_baseForOwn'); - -/** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ -function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; -} - -module.exports = baseInverter; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseInvoke.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseInvoke.js deleted file mode 100644 index 49bcf3c35..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseInvoke.js +++ /dev/null @@ -1,24 +0,0 @@ -var apply = require('./_apply'), - castPath = require('./_castPath'), - last = require('./last'), - parent = require('./_parent'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ -function baseInvoke(object, path, args) { - path = castPath(path, object); - object = parent(object, path); - var func = object == null ? object : object[toKey(last(path))]; - return func == null ? undefined : apply(func, object, args); -} - -module.exports = baseInvoke; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsArguments.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsArguments.js deleted file mode 100644 index b3562cca2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsArguments.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]'; - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; -} - -module.exports = baseIsArguments; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsArrayBuffer.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsArrayBuffer.js deleted file mode 100644 index a2c4f30a8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsArrayBuffer.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -var arrayBufferTag = '[object ArrayBuffer]'; - -/** - * The base implementation of `_.isArrayBuffer` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - */ -function baseIsArrayBuffer(value) { - return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; -} - -module.exports = baseIsArrayBuffer; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsDate.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsDate.js deleted file mode 100644 index ba67c7857..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsDate.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var dateTag = '[object Date]'; - -/** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ -function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; -} - -module.exports = baseIsDate; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsEqual.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsEqual.js deleted file mode 100644 index 0c4212ea4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsEqual.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseIsEqualDeep = require('./_baseIsEqualDeep'), - isObject = require('./isObject'), - isObjectLike = require('./isObjectLike'); - -/** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ -function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); -} - -module.exports = baseIsEqual; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsEqualDeep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsEqualDeep.js deleted file mode 100644 index b32f1f3ff..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsEqualDeep.js +++ /dev/null @@ -1,88 +0,0 @@ -var Stack = require('./_Stack'), - equalArrays = require('./_equalArrays'), - equalByTag = require('./_equalByTag'), - equalObjects = require('./_equalObjects'), - getTag = require('./_getTag'), - isArray = require('./isArray'), - isBuffer = require('./isBuffer'), - isTypedArray = require('./isTypedArray'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = getTag(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = getTag(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); -} - -module.exports = baseIsEqualDeep; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsMap.js deleted file mode 100644 index 02a4021ca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsMap.js +++ /dev/null @@ -1,18 +0,0 @@ -var getTag = require('./_getTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]'; - -/** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ -function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; -} - -module.exports = baseIsMap; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsMatch.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsMatch.js deleted file mode 100644 index 72494bed4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsMatch.js +++ /dev/null @@ -1,62 +0,0 @@ -var Stack = require('./_Stack'), - baseIsEqual = require('./_baseIsEqual'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ -function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; -} - -module.exports = baseIsMatch; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsNaN.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsNaN.js deleted file mode 100644 index 316f1eb1e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsNaN.js +++ /dev/null @@ -1,12 +0,0 @@ -/** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ -function baseIsNaN(value) { - return value !== value; -} - -module.exports = baseIsNaN; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsNative.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsNative.js deleted file mode 100644 index 870233049..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsNative.js +++ /dev/null @@ -1,47 +0,0 @@ -var isFunction = require('./isFunction'), - isMasked = require('./_isMasked'), - isObject = require('./isObject'), - toSource = require('./_toSource'); - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -module.exports = baseIsNative; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsRegExp.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsRegExp.js deleted file mode 100644 index 6cd7c1aee..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsRegExp.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var regexpTag = '[object RegExp]'; - -/** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ -function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; -} - -module.exports = baseIsRegExp; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsSet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsSet.js deleted file mode 100644 index 6dee36716..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsSet.js +++ /dev/null @@ -1,18 +0,0 @@ -var getTag = require('./_getTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var setTag = '[object Set]'; - -/** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ -function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; -} - -module.exports = baseIsSet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsTypedArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsTypedArray.js deleted file mode 100644 index 1edb32ff3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIsTypedArray.js +++ /dev/null @@ -1,60 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isLength = require('./isLength'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag] = -typedArrayTags[setTag] = typedArrayTags[stringTag] = -typedArrayTags[weakMapTag] = false; - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; -} - -module.exports = baseIsTypedArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIteratee.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIteratee.js deleted file mode 100644 index 995c25756..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseIteratee.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseMatches = require('./_baseMatches'), - baseMatchesProperty = require('./_baseMatchesProperty'), - identity = require('./identity'), - isArray = require('./isArray'), - property = require('./property'); - -/** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ -function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); -} - -module.exports = baseIteratee; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseKeys.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseKeys.js deleted file mode 100644 index 45e9e6f39..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseKeys.js +++ /dev/null @@ -1,30 +0,0 @@ -var isPrototype = require('./_isPrototype'), - nativeKeys = require('./_nativeKeys'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -module.exports = baseKeys; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseKeysIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseKeysIn.js deleted file mode 100644 index ea8a0a174..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseKeysIn.js +++ /dev/null @@ -1,33 +0,0 @@ -var isObject = require('./isObject'), - isPrototype = require('./_isPrototype'), - nativeKeysIn = require('./_nativeKeysIn'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; -} - -module.exports = baseKeysIn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseLodash.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseLodash.js deleted file mode 100644 index f76c790e2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseLodash.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ -function baseLodash() { - // No operation performed. -} - -module.exports = baseLodash; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseLt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseLt.js deleted file mode 100644 index 8674d2946..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseLt.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ -function baseLt(value, other) { - return value < other; -} - -module.exports = baseLt; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMap.js deleted file mode 100644 index 0bf5cead5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMap.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseEach = require('./_baseEach'), - isArrayLike = require('./isArrayLike'); - -/** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; -} - -module.exports = baseMap; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMatches.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMatches.js deleted file mode 100644 index e56582ad8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMatches.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'), - matchesStrictComparable = require('./_matchesStrictComparable'); - -/** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; -} - -module.exports = baseMatches; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMatchesProperty.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMatchesProperty.js deleted file mode 100644 index 24afd893d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMatchesProperty.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseIsEqual = require('./_baseIsEqual'), - get = require('./get'), - hasIn = require('./hasIn'), - isKey = require('./_isKey'), - isStrictComparable = require('./_isStrictComparable'), - matchesStrictComparable = require('./_matchesStrictComparable'), - toKey = require('./_toKey'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; -} - -module.exports = baseMatchesProperty; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMean.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMean.js deleted file mode 100644 index fa9e00a0a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMean.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseSum = require('./_baseSum'); - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ -function baseMean(array, iteratee) { - var length = array == null ? 0 : array.length; - return length ? (baseSum(array, iteratee) / length) : NAN; -} - -module.exports = baseMean; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMerge.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMerge.js deleted file mode 100644 index f4cb8c698..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMerge.js +++ /dev/null @@ -1,41 +0,0 @@ -var Stack = require('./_Stack'), - assignMergeValue = require('./_assignMergeValue'), - baseFor = require('./_baseFor'), - baseMergeDeep = require('./_baseMergeDeep'), - isObject = require('./isObject'), - keysIn = require('./keysIn'); - -/** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ -function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - if (isObject(srcValue)) { - stack || (stack = new Stack); - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(object[key], srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); -} - -module.exports = baseMerge; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMergeDeep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMergeDeep.js deleted file mode 100644 index 42b405a3d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseMergeDeep.js +++ /dev/null @@ -1,93 +0,0 @@ -var assignMergeValue = require('./_assignMergeValue'), - cloneBuffer = require('./_cloneBuffer'), - cloneTypedArray = require('./_cloneTypedArray'), - copyArray = require('./_copyArray'), - initCloneObject = require('./_initCloneObject'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isArrayLikeObject = require('./isArrayLikeObject'), - isBuffer = require('./isBuffer'), - isFunction = require('./isFunction'), - isObject = require('./isObject'), - isPlainObject = require('./isPlainObject'), - isTypedArray = require('./isTypedArray'), - toPlainObject = require('./toPlainObject'); - -/** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ -function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = object[key], - srcValue = source[key], - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); - - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { - newValue = initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); -} - -module.exports = baseMergeDeep; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseNth.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseNth.js deleted file mode 100644 index 0403c2a36..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseNth.js +++ /dev/null @@ -1,20 +0,0 @@ -var isIndex = require('./_isIndex'); - -/** - * The base implementation of `_.nth` which doesn't coerce arguments. - * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. - */ -function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; -} - -module.exports = baseNth; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseOrderBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseOrderBy.js deleted file mode 100644 index d8a46ab20..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseOrderBy.js +++ /dev/null @@ -1,34 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIteratee = require('./_baseIteratee'), - baseMap = require('./_baseMap'), - baseSortBy = require('./_baseSortBy'), - baseUnary = require('./_baseUnary'), - compareMultiple = require('./_compareMultiple'), - identity = require('./identity'); - -/** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ -function baseOrderBy(collection, iteratees, orders) { - var index = -1; - iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee)); - - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); -} - -module.exports = baseOrderBy; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_basePick.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_basePick.js deleted file mode 100644 index 6afce4041..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_basePick.js +++ /dev/null @@ -1,20 +0,0 @@ -var basePickBy = require('./_basePickBy'), - hasIn = require('./hasIn'); - -/** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ -function basePick(object, paths) { - object = Object(object); - return basePickBy(object, paths, function(value, path) { - return hasIn(object, path); - }); -} - -module.exports = basePick; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_basePickBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_basePickBy.js deleted file mode 100644 index 85be68c84..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_basePickBy.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseGet = require('./_baseGet'), - baseSet = require('./_baseSet'), - castPath = require('./_castPath'); - -/** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ -function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = baseGet(object, path); - - if (predicate(value, path)) { - baseSet(result, castPath(path, object), value); - } - } - return result; -} - -module.exports = basePickBy; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseProperty.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseProperty.js deleted file mode 100644 index 496281ec4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseProperty.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; -} - -module.exports = baseProperty; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_basePropertyDeep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_basePropertyDeep.js deleted file mode 100644 index 1e5aae50c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_basePropertyDeep.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseGet = require('./_baseGet'); - -/** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; -} - -module.exports = basePropertyDeep; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_basePropertyOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_basePropertyOf.js deleted file mode 100644 index 461739990..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_basePropertyOf.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ -function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; -} - -module.exports = basePropertyOf; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_basePullAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_basePullAll.js deleted file mode 100644 index 305720ede..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_basePullAll.js +++ /dev/null @@ -1,51 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIndexOf = require('./_baseIndexOf'), - baseIndexOfWith = require('./_baseIndexOfWith'), - baseUnary = require('./_baseUnary'), - copyArray = require('./_copyArray'); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ -function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; - - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; -} - -module.exports = basePullAll; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_basePullAt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_basePullAt.js deleted file mode 100644 index c3e9e7102..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_basePullAt.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseUnset = require('./_baseUnset'), - isIndex = require('./_isIndex'); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ -function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } else { - baseUnset(array, index); - } - } - } - return array; -} - -module.exports = basePullAt; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseRandom.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseRandom.js deleted file mode 100644 index 94f76a766..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseRandom.js +++ /dev/null @@ -1,18 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeRandom = Math.random; - -/** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ -function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); -} - -module.exports = baseRandom; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseRange.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseRange.js deleted file mode 100644 index 0fb8e419f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseRange.js +++ /dev/null @@ -1,28 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -module.exports = baseRange; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseReduce.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseReduce.js deleted file mode 100644 index 5a1f8b57f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseReduce.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ -function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; -} - -module.exports = baseReduce; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseRepeat.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseRepeat.js deleted file mode 100644 index ee44c31ab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseRepeat.js +++ /dev/null @@ -1,35 +0,0 @@ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor; - -/** - * The base implementation of `_.repeat` which doesn't coerce arguments. - * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. - */ -function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); - - return result; -} - -module.exports = baseRepeat; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseRest.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseRest.js deleted file mode 100644 index d0dc4bdd1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseRest.js +++ /dev/null @@ -1,17 +0,0 @@ -var identity = require('./identity'), - overRest = require('./_overRest'), - setToString = require('./_setToString'); - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); -} - -module.exports = baseRest; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSample.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSample.js deleted file mode 100644 index 58582b911..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSample.js +++ /dev/null @@ -1,15 +0,0 @@ -var arraySample = require('./_arraySample'), - values = require('./values'); - -/** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ -function baseSample(collection) { - return arraySample(values(collection)); -} - -module.exports = baseSample; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSampleSize.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSampleSize.js deleted file mode 100644 index 5c90ec518..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSampleSize.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseClamp = require('./_baseClamp'), - shuffleSelf = require('./_shuffleSelf'), - values = require('./values'); - -/** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ -function baseSampleSize(collection, n) { - var array = values(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); -} - -module.exports = baseSampleSize; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSet.js deleted file mode 100644 index 612a24cc8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSet.js +++ /dev/null @@ -1,47 +0,0 @@ -var assignValue = require('./_assignValue'), - castPath = require('./_castPath'), - isIndex = require('./_isIndex'), - isObject = require('./isObject'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = castPath(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; -} - -module.exports = baseSet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSetData.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSetData.js deleted file mode 100644 index c409947dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSetData.js +++ /dev/null @@ -1,17 +0,0 @@ -var identity = require('./identity'), - metaMap = require('./_metaMap'); - -/** - * The base implementation of `setData` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ -var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; -}; - -module.exports = baseSetData; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSetToString.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSetToString.js deleted file mode 100644 index 89eaca38d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSetToString.js +++ /dev/null @@ -1,22 +0,0 @@ -var constant = require('./constant'), - defineProperty = require('./_defineProperty'), - identity = require('./identity'); - -/** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); -}; - -module.exports = baseSetToString; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseShuffle.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseShuffle.js deleted file mode 100644 index 023077ac4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseShuffle.js +++ /dev/null @@ -1,15 +0,0 @@ -var shuffleSelf = require('./_shuffleSelf'), - values = require('./values'); - -/** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function baseShuffle(collection) { - return shuffleSelf(values(collection)); -} - -module.exports = baseShuffle; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSlice.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSlice.js deleted file mode 100644 index 786f6c99e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSlice.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ -function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; -} - -module.exports = baseSlice; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSome.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSome.js deleted file mode 100644 index 58f3f447a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSome.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseEach = require('./_baseEach'); - -/** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ -function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; -} - -module.exports = baseSome; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortBy.js deleted file mode 100644 index a25c92eda..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortBy.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ -function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; -} - -module.exports = baseSortBy; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortedIndex.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortedIndex.js deleted file mode 100644 index 638c366c7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortedIndex.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseSortedIndexBy = require('./_baseSortedIndexBy'), - identity = require('./identity'), - isSymbol = require('./isSymbol'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - -/** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ -function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array == null ? low : array.length; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if (computed !== null && !isSymbol(computed) && - (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); -} - -module.exports = baseSortedIndex; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortedIndexBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortedIndexBy.js deleted file mode 100644 index bb22e36dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortedIndexBy.js +++ /dev/null @@ -1,64 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeMin = Math.min; - -/** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ -function baseSortedIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array == null ? 0 : array.length, - valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); -} - -module.exports = baseSortedIndexBy; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortedUniq.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortedUniq.js deleted file mode 100644 index 802159a3d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSortedUniq.js +++ /dev/null @@ -1,30 +0,0 @@ -var eq = require('./eq'); - -/** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; -} - -module.exports = baseSortedUniq; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSum.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSum.js deleted file mode 100644 index a9e84c13c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseSum.js +++ /dev/null @@ -1,24 +0,0 @@ -/** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ -function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); - } - } - return result; -} - -module.exports = baseSum; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseTimes.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseTimes.js deleted file mode 100644 index 0603fc37e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseTimes.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -module.exports = baseTimes; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseToNumber.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseToNumber.js deleted file mode 100644 index 04859f391..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseToNumber.js +++ /dev/null @@ -1,24 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. - * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. - */ -function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; -} - -module.exports = baseToNumber; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseToPairs.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseToPairs.js deleted file mode 100644 index bff199128..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseToPairs.js +++ /dev/null @@ -1,18 +0,0 @@ -var arrayMap = require('./_arrayMap'); - -/** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ -function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); -} - -module.exports = baseToPairs; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseToString.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseToString.js deleted file mode 100644 index ada6ad298..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseToString.js +++ /dev/null @@ -1,37 +0,0 @@ -var Symbol = require('./_Symbol'), - arrayMap = require('./_arrayMap'), - isArray = require('./isArray'), - isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -module.exports = baseToString; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseUnary.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseUnary.js deleted file mode 100644 index 98639e92f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseUnary.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -module.exports = baseUnary; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseUniq.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseUniq.js deleted file mode 100644 index aea459dc7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseUniq.js +++ /dev/null @@ -1,72 +0,0 @@ -var SetCache = require('./_SetCache'), - arrayIncludes = require('./_arrayIncludes'), - arrayIncludesWith = require('./_arrayIncludesWith'), - cacheHas = require('./_cacheHas'), - createSet = require('./_createSet'), - setToArray = require('./_setToArray'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ -function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; -} - -module.exports = baseUniq; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseUnset.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseUnset.js deleted file mode 100644 index eefc6e37d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseUnset.js +++ /dev/null @@ -1,20 +0,0 @@ -var castPath = require('./_castPath'), - last = require('./last'), - parent = require('./_parent'), - toKey = require('./_toKey'); - -/** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The property path to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ -function baseUnset(object, path) { - path = castPath(path, object); - object = parent(object, path); - return object == null || delete object[toKey(last(path))]; -} - -module.exports = baseUnset; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseUpdate.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseUpdate.js deleted file mode 100644 index 92a623777..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseUpdate.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseGet = require('./_baseGet'), - baseSet = require('./_baseSet'); - -/** - * The base implementation of `_.update`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ -function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); -} - -module.exports = baseUpdate; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseValues.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseValues.js deleted file mode 100644 index b95faadcf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseValues.js +++ /dev/null @@ -1,19 +0,0 @@ -var arrayMap = require('./_arrayMap'); - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); -} - -module.exports = baseValues; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseWhile.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseWhile.js deleted file mode 100644 index 07eac61b9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseWhile.js +++ /dev/null @@ -1,26 +0,0 @@ -var baseSlice = require('./_baseSlice'); - -/** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ -function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length) && - predicate(array[index], index, array)) {} - - return isDrop - ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); -} - -module.exports = baseWhile; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseWrapperValue.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseWrapperValue.js deleted file mode 100644 index 443e0df5e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseWrapperValue.js +++ /dev/null @@ -1,25 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - arrayPush = require('./_arrayPush'), - arrayReduce = require('./_arrayReduce'); - -/** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ -function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); -} - -module.exports = baseWrapperValue; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseXor.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseXor.js deleted file mode 100644 index 8e69338bf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseXor.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - baseUniq = require('./_baseUniq'); - -/** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ -function baseXor(arrays, iteratee, comparator) { - var length = arrays.length; - if (length < 2) { - return length ? baseUniq(arrays[0]) : []; - } - var index = -1, - result = Array(length); - - while (++index < length) { - var array = arrays[index], - othIndex = -1; - - while (++othIndex < length) { - if (othIndex != index) { - result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); - } - } - } - return baseUniq(baseFlatten(result, 1), iteratee, comparator); -} - -module.exports = baseXor; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseZipObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_baseZipObject.js deleted file mode 100644 index 401f85be2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_baseZipObject.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ -function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; -} - -module.exports = baseZipObject; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_cacheHas.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_cacheHas.js deleted file mode 100644 index 2dec89268..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_cacheHas.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function cacheHas(cache, key) { - return cache.has(key); -} - -module.exports = cacheHas; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_castArrayLikeObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_castArrayLikeObject.js deleted file mode 100644 index 92c75fa1a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_castArrayLikeObject.js +++ /dev/null @@ -1,14 +0,0 @@ -var isArrayLikeObject = require('./isArrayLikeObject'); - -/** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ -function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; -} - -module.exports = castArrayLikeObject; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_castFunction.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_castFunction.js deleted file mode 100644 index 98c91ae63..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_castFunction.js +++ /dev/null @@ -1,14 +0,0 @@ -var identity = require('./identity'); - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : identity; -} - -module.exports = castFunction; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_castPath.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_castPath.js deleted file mode 100644 index 017e4c1b4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_castPath.js +++ /dev/null @@ -1,21 +0,0 @@ -var isArray = require('./isArray'), - isKey = require('./_isKey'), - stringToPath = require('./_stringToPath'), - toString = require('./toString'); - -/** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ -function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); -} - -module.exports = castPath; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_castRest.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_castRest.js deleted file mode 100644 index 213c66f19..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_castRest.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseRest = require('./_baseRest'); - -/** - * A `baseRest` alias which can be replaced with `identity` by module - * replacement plugins. - * - * @private - * @type {Function} - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -var castRest = baseRest; - -module.exports = castRest; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_castSlice.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_castSlice.js deleted file mode 100644 index 071faeba5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_castSlice.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseSlice = require('./_baseSlice'); - -/** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ -function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); -} - -module.exports = castSlice; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_charsEndIndex.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_charsEndIndex.js deleted file mode 100644 index 07908ff3a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_charsEndIndex.js +++ /dev/null @@ -1,19 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ -function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; -} - -module.exports = charsEndIndex; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_charsStartIndex.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_charsStartIndex.js deleted file mode 100644 index b17afd254..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_charsStartIndex.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'); - -/** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ -function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; - - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; -} - -module.exports = charsStartIndex; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneArrayBuffer.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneArrayBuffer.js deleted file mode 100644 index c3d8f6e39..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneArrayBuffer.js +++ /dev/null @@ -1,16 +0,0 @@ -var Uint8Array = require('./_Uint8Array'); - -/** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ -function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; -} - -module.exports = cloneArrayBuffer; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneBuffer.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneBuffer.js deleted file mode 100644 index 27c48109b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneBuffer.js +++ /dev/null @@ -1,35 +0,0 @@ -var root = require('./_root'); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Built-in value references. */ -var Buffer = moduleExports ? root.Buffer : undefined, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined; - -/** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ -function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - - buffer.copy(result); - return result; -} - -module.exports = cloneBuffer; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneDataView.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneDataView.js deleted file mode 100644 index 9c9b7b054..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneDataView.js +++ /dev/null @@ -1,16 +0,0 @@ -var cloneArrayBuffer = require('./_cloneArrayBuffer'); - -/** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ -function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} - -module.exports = cloneDataView; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneMap.js deleted file mode 100644 index 334b73e98..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneMap.js +++ /dev/null @@ -1,22 +0,0 @@ -var addMapEntry = require('./_addMapEntry'), - arrayReduce = require('./_arrayReduce'), - mapToArray = require('./_mapToArray'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1; - -/** - * Creates a clone of `map`. - * - * @private - * @param {Object} map The map to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned map. - */ -function cloneMap(map, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map); - return arrayReduce(array, addMapEntry, new map.constructor); -} - -module.exports = cloneMap; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneRegExp.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneRegExp.js deleted file mode 100644 index 64a30dfb4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneRegExp.js +++ /dev/null @@ -1,17 +0,0 @@ -/** Used to match `RegExp` flags from their coerced string values. */ -var reFlags = /\w*$/; - -/** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ -function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} - -module.exports = cloneRegExp; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneSet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneSet.js deleted file mode 100644 index 713a2f76b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneSet.js +++ /dev/null @@ -1,22 +0,0 @@ -var addSetEntry = require('./_addSetEntry'), - arrayReduce = require('./_arrayReduce'), - setToArray = require('./_setToArray'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1; - -/** - * Creates a clone of `set`. - * - * @private - * @param {Object} set The set to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned set. - */ -function cloneSet(set, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set); - return arrayReduce(array, addSetEntry, new set.constructor); -} - -module.exports = cloneSet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneSymbol.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneSymbol.js deleted file mode 100644 index bede39f50..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneSymbol.js +++ /dev/null @@ -1,18 +0,0 @@ -var Symbol = require('./_Symbol'); - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ -function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} - -module.exports = cloneSymbol; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneTypedArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneTypedArray.js deleted file mode 100644 index 7aad84d4f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_cloneTypedArray.js +++ /dev/null @@ -1,16 +0,0 @@ -var cloneArrayBuffer = require('./_cloneArrayBuffer'); - -/** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ -function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); -} - -module.exports = cloneTypedArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_compareAscending.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_compareAscending.js deleted file mode 100644 index 8dc279108..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_compareAscending.js +++ /dev/null @@ -1,41 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ -function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; -} - -module.exports = compareAscending; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_compareMultiple.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_compareMultiple.js deleted file mode 100644 index ad61f0fbc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_compareMultiple.js +++ /dev/null @@ -1,44 +0,0 @@ -var compareAscending = require('./_compareAscending'); - -/** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ -function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; -} - -module.exports = compareMultiple; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_composeArgs.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_composeArgs.js deleted file mode 100644 index 1ce40f4f9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_composeArgs.js +++ /dev/null @@ -1,39 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ -function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; -} - -module.exports = composeArgs; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_composeArgsRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_composeArgsRight.js deleted file mode 100644 index 8dc588d0a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_composeArgsRight.js +++ /dev/null @@ -1,41 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ -function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; -} - -module.exports = composeArgsRight; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_copyArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_copyArray.js deleted file mode 100644 index cd94d5d09..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_copyArray.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -module.exports = copyArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_copyObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_copyObject.js deleted file mode 100644 index 2f2a5c23b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_copyObject.js +++ /dev/null @@ -1,40 +0,0 @@ -var assignValue = require('./_assignValue'), - baseAssignValue = require('./_baseAssignValue'); - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; -} - -module.exports = copyObject; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_copySymbols.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_copySymbols.js deleted file mode 100644 index c35944ab5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_copySymbols.js +++ /dev/null @@ -1,16 +0,0 @@ -var copyObject = require('./_copyObject'), - getSymbols = require('./_getSymbols'); - -/** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); -} - -module.exports = copySymbols; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_copySymbolsIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_copySymbolsIn.js deleted file mode 100644 index fdf20a73c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_copySymbolsIn.js +++ /dev/null @@ -1,16 +0,0 @@ -var copyObject = require('./_copyObject'), - getSymbolsIn = require('./_getSymbolsIn'); - -/** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ -function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object); -} - -module.exports = copySymbolsIn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_coreJsData.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_coreJsData.js deleted file mode 100644 index f8e5b4e34..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_coreJsData.js +++ /dev/null @@ -1,6 +0,0 @@ -var root = require('./_root'); - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -module.exports = coreJsData; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_countHolders.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_countHolders.js deleted file mode 100644 index 718fcdaa8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_countHolders.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ -function countHolders(array, placeholder) { - var length = array.length, - result = 0; - - while (length--) { - if (array[length] === placeholder) { - ++result; - } - } - return result; -} - -module.exports = countHolders; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createAggregator.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createAggregator.js deleted file mode 100644 index 0be42c41c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createAggregator.js +++ /dev/null @@ -1,23 +0,0 @@ -var arrayAggregator = require('./_arrayAggregator'), - baseAggregator = require('./_baseAggregator'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ -function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, baseIteratee(iteratee, 2), accumulator); - }; -} - -module.exports = createAggregator; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createAssigner.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createAssigner.js deleted file mode 100644 index 1f904c51b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createAssigner.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseRest = require('./_baseRest'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} - -module.exports = createAssigner; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createBaseEach.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createBaseEach.js deleted file mode 100644 index d24fdd1bb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createBaseEach.js +++ /dev/null @@ -1,32 +0,0 @@ -var isArrayLike = require('./isArrayLike'); - -/** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; -} - -module.exports = createBaseEach; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createBaseFor.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createBaseFor.js deleted file mode 100644 index 94cbf297a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createBaseFor.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ -function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; -} - -module.exports = createBaseFor; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createBind.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createBind.js deleted file mode 100644 index 07cb99f4d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createBind.js +++ /dev/null @@ -1,28 +0,0 @@ -var createCtor = require('./_createCtor'), - root = require('./_root'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1; - -/** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; -} - -module.exports = createBind; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createCaseFirst.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createCaseFirst.js deleted file mode 100644 index fe8ea4830..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createCaseFirst.js +++ /dev/null @@ -1,33 +0,0 @@ -var castSlice = require('./_castSlice'), - hasUnicode = require('./_hasUnicode'), - stringToArray = require('./_stringToArray'), - toString = require('./toString'); - -/** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ -function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; -} - -module.exports = createCaseFirst; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createCompounder.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createCompounder.js deleted file mode 100644 index 8d4cee2cd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createCompounder.js +++ /dev/null @@ -1,24 +0,0 @@ -var arrayReduce = require('./_arrayReduce'), - deburr = require('./deburr'), - words = require('./words'); - -/** Used to compose unicode capture groups. */ -var rsApos = "['\u2019]"; - -/** Used to match apostrophes. */ -var reApos = RegExp(rsApos, 'g'); - -/** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ -function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; -} - -module.exports = createCompounder; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createCtor.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createCtor.js deleted file mode 100644 index 9047aa5fa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createCtor.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseCreate = require('./_baseCreate'), - isObject = require('./isObject'); - -/** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ -function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; -} - -module.exports = createCtor; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createCurry.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createCurry.js deleted file mode 100644 index f06c2cdd8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createCurry.js +++ /dev/null @@ -1,46 +0,0 @@ -var apply = require('./_apply'), - createCtor = require('./_createCtor'), - createHybrid = require('./_createHybrid'), - createRecurry = require('./_createRecurry'), - getHolder = require('./_getHolder'), - replaceHolders = require('./_replaceHolders'), - root = require('./_root'); - -/** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); - - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - if (length < arity) { - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; -} - -module.exports = createCurry; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createFind.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createFind.js deleted file mode 100644 index 8859ff89f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createFind.js +++ /dev/null @@ -1,25 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - isArrayLike = require('./isArrayLike'), - keys = require('./keys'); - -/** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ -function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = baseIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; -} - -module.exports = createFind; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createFlow.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createFlow.js deleted file mode 100644 index c6b43f799..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createFlow.js +++ /dev/null @@ -1,82 +0,0 @@ -var LodashWrapper = require('./_LodashWrapper'), - flatRest = require('./_flatRest'), - getData = require('./_getData'), - getFuncName = require('./_getFuncName'), - isArray = require('./isArray'), - isLaziable = require('./_isLaziable'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** Used to compose bitmasks for function metadata. */ -var WRAP_CURRY_FLAG = 8, - WRAP_PARTIAL_FLAG = 32, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256; - -/** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ -function createFlow(fromRight) { - return flatRest(function(funcs) { - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; - - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && - data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && - !data[4].length && data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) - ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && - isArray(value) && value.length >= LARGE_ARRAY_SIZE) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); -} - -module.exports = createFlow; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createHybrid.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createHybrid.js deleted file mode 100644 index b671bd11f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createHybrid.js +++ /dev/null @@ -1,92 +0,0 @@ -var composeArgs = require('./_composeArgs'), - composeArgsRight = require('./_composeArgsRight'), - countHolders = require('./_countHolders'), - createCtor = require('./_createCtor'), - createRecurry = require('./_createRecurry'), - getHolder = require('./_getHolder'), - reorder = require('./_reorder'), - replaceHolders = require('./_replaceHolders'), - root = require('./_root'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_ARY_FLAG = 128, - WRAP_FLIP_FLAG = 512; - -/** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & WRAP_ARY_FLAG, - isBind = bitmask & WRAP_BIND_FLAG, - isBindKey = bitmask & WRAP_BIND_KEY_FLAG, - isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), - isFlip = bitmask & WRAP_FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, thisArg, - args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; -} - -module.exports = createHybrid; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createInverter.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createInverter.js deleted file mode 100644 index 6c0c56299..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createInverter.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseInverter = require('./_baseInverter'); - -/** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ -function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; -} - -module.exports = createInverter; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createMathOperation.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createMathOperation.js deleted file mode 100644 index f1e238ac0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createMathOperation.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseToNumber = require('./_baseToNumber'), - baseToString = require('./_baseToString'); - -/** - * Creates a function that performs a mathematical operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @param {number} [defaultValue] The value used for `undefined` arguments. - * @returns {Function} Returns the new mathematical operation function. - */ -function createMathOperation(operator, defaultValue) { - return function(value, other) { - var result; - if (value === undefined && other === undefined) { - return defaultValue; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; -} - -module.exports = createMathOperation; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createOver.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createOver.js deleted file mode 100644 index 3b9455161..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createOver.js +++ /dev/null @@ -1,27 +0,0 @@ -var apply = require('./_apply'), - arrayMap = require('./_arrayMap'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'), - baseUnary = require('./_baseUnary'), - flatRest = require('./_flatRest'); - -/** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. - */ -function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); -} - -module.exports = createOver; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createPadding.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createPadding.js deleted file mode 100644 index 2124612b8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createPadding.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseRepeat = require('./_baseRepeat'), - baseToString = require('./_baseToString'), - castSlice = require('./_castSlice'), - hasUnicode = require('./_hasUnicode'), - stringSize = require('./_stringSize'), - stringToArray = require('./_stringToArray'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil; - -/** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ -function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); - - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return hasUnicode(chars) - ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length); -} - -module.exports = createPadding; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createPartial.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createPartial.js deleted file mode 100644 index e16c248b5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createPartial.js +++ /dev/null @@ -1,43 +0,0 @@ -var apply = require('./_apply'), - createCtor = require('./_createCtor'), - root = require('./_root'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1; - -/** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ -function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; -} - -module.exports = createPartial; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createRange.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createRange.js deleted file mode 100644 index 9f52c7793..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createRange.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseRange = require('./_baseRange'), - isIterateeCall = require('./_isIterateeCall'), - toFinite = require('./toFinite'); - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; -} - -module.exports = createRange; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createRecurry.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createRecurry.js deleted file mode 100644 index eb29fb24c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createRecurry.js +++ /dev/null @@ -1,56 +0,0 @@ -var isLaziable = require('./_isLaziable'), - setData = require('./_setData'), - setWrapToString = require('./_setWrapToString'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_BOUND_FLAG = 4, - WRAP_CURRY_FLAG = 8, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64; - -/** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & WRAP_CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); - - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; - - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); -} - -module.exports = createRecurry; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createRelationalOperation.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createRelationalOperation.js deleted file mode 100644 index a17c6b5e7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createRelationalOperation.js +++ /dev/null @@ -1,20 +0,0 @@ -var toNumber = require('./toNumber'); - -/** - * Creates a function that performs a relational operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. - */ -function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; -} - -module.exports = createRelationalOperation; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createRound.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createRound.js deleted file mode 100644 index 74b20d408..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createRound.js +++ /dev/null @@ -1,33 +0,0 @@ -var toInteger = require('./toInteger'), - toNumber = require('./toNumber'), - toString = require('./toString'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ -function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = nativeMin(toInteger(precision), 292); - if (precision) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); - - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; -} - -module.exports = createRound; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createSet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createSet.js deleted file mode 100644 index 0f644eeae..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createSet.js +++ /dev/null @@ -1,19 +0,0 @@ -var Set = require('./_Set'), - noop = require('./noop'), - setToArray = require('./_setToArray'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ -var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); -}; - -module.exports = createSet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createToPairs.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createToPairs.js deleted file mode 100644 index 568417afd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createToPairs.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseToPairs = require('./_baseToPairs'), - getTag = require('./_getTag'), - mapToArray = require('./_mapToArray'), - setToPairs = require('./_setToPairs'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ -function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; -} - -module.exports = createToPairs; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_createWrap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_createWrap.js deleted file mode 100644 index f14b968d7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_createWrap.js +++ /dev/null @@ -1,106 +0,0 @@ -var baseSetData = require('./_baseSetData'), - createBind = require('./_createBind'), - createCurry = require('./_createCurry'), - createHybrid = require('./_createHybrid'), - createPartial = require('./_createPartial'), - getData = require('./_getData'), - mergeData = require('./_mergeData'), - setData = require('./_setData'), - setWrapToString = require('./_setWrapToString'), - toInteger = require('./toInteger'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ -function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; - - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] == null - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); - - if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { - bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG) { - var result = createBind(func, bitmask, thisArg); - } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { - result = createCurry(func, bitmask, arity); - } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); -} - -module.exports = createWrap; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_deburrLetter.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_deburrLetter.js deleted file mode 100644 index 3e531edcf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_deburrLetter.js +++ /dev/null @@ -1,71 +0,0 @@ -var basePropertyOf = require('./_basePropertyOf'); - -/** Used to map Latin Unicode letters to basic Latin letters. */ -var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', - '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', - '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', - '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', - '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', - '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', - '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', - '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', - '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', - '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', - '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', - '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', - '\u0134': 'J', '\u0135': 'j', - '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', - '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', - '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', - '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', - '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', - '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', - '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', - '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', - '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', - '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', - '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', - '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', - '\u0163': 't', '\u0165': 't', '\u0167': 't', - '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', - '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', - '\u0174': 'W', '\u0175': 'w', - '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', - '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', - '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', - '\u0132': 'IJ', '\u0133': 'ij', - '\u0152': 'Oe', '\u0153': 'oe', - '\u0149': "'n", '\u017f': 's' -}; - -/** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ -var deburrLetter = basePropertyOf(deburredLetters); - -module.exports = deburrLetter; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_defineProperty.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_defineProperty.js deleted file mode 100644 index b6116d92a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_defineProperty.js +++ /dev/null @@ -1,11 +0,0 @@ -var getNative = require('./_getNative'); - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); - -module.exports = defineProperty; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_equalArrays.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_equalArrays.js deleted file mode 100644 index f6a3b7c9f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_equalArrays.js +++ /dev/null @@ -1,83 +0,0 @@ -var SetCache = require('./_SetCache'), - arraySome = require('./_arraySome'), - cacheHas = require('./_cacheHas'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ -function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked && stack.get(other)) { - return stacked == other; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; -} - -module.exports = equalArrays; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_equalByTag.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_equalByTag.js deleted file mode 100644 index 71919e867..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_equalByTag.js +++ /dev/null @@ -1,112 +0,0 @@ -var Symbol = require('./_Symbol'), - Uint8Array = require('./_Uint8Array'), - eq = require('./eq'), - equalArrays = require('./_equalArrays'), - mapToArray = require('./_mapToArray'), - setToArray = require('./_setToArray'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]'; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; - -/** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; -} - -module.exports = equalByTag; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_equalObjects.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_equalObjects.js deleted file mode 100644 index 7044ae9bb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_equalObjects.js +++ /dev/null @@ -1,89 +0,0 @@ -var keys = require('./keys'); - -/** Used to compose bitmasks for value comparisons. */ -var COMPARE_PARTIAL_FLAG = 1; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ -function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked && stack.get(other)) { - return stacked == other; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; -} - -module.exports = equalObjects; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_escapeHtmlChar.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_escapeHtmlChar.js deleted file mode 100644 index 7ca68ee62..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_escapeHtmlChar.js +++ /dev/null @@ -1,21 +0,0 @@ -var basePropertyOf = require('./_basePropertyOf'); - -/** Used to map characters to HTML entities. */ -var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' -}; - -/** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ -var escapeHtmlChar = basePropertyOf(htmlEscapes); - -module.exports = escapeHtmlChar; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_escapeStringChar.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_escapeStringChar.js deleted file mode 100644 index 44eca96ca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_escapeStringChar.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used to escape characters for inclusion in compiled string literals. */ -var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' -}; - -/** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ -function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; -} - -module.exports = escapeStringChar; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_flatRest.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_flatRest.js deleted file mode 100644 index 94ab6cca7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_flatRest.js +++ /dev/null @@ -1,16 +0,0 @@ -var flatten = require('./flatten'), - overRest = require('./_overRest'), - setToString = require('./_setToString'); - -/** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ -function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); -} - -module.exports = flatRest; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_freeGlobal.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_freeGlobal.js deleted file mode 100644 index bbec998fc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_freeGlobal.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -module.exports = freeGlobal; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getAllKeys.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getAllKeys.js deleted file mode 100644 index a9ce6995a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getAllKeys.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseGetAllKeys = require('./_baseGetAllKeys'), - getSymbols = require('./_getSymbols'), - keys = require('./keys'); - -/** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); -} - -module.exports = getAllKeys; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getAllKeysIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getAllKeysIn.js deleted file mode 100644 index 1b4667841..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getAllKeysIn.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseGetAllKeys = require('./_baseGetAllKeys'), - getSymbolsIn = require('./_getSymbolsIn'), - keysIn = require('./keysIn'); - -/** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ -function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); -} - -module.exports = getAllKeysIn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getData.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getData.js deleted file mode 100644 index a1fe7b779..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getData.js +++ /dev/null @@ -1,15 +0,0 @@ -var metaMap = require('./_metaMap'), - noop = require('./noop'); - -/** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ -var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); -}; - -module.exports = getData; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getFuncName.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getFuncName.js deleted file mode 100644 index 21e15b337..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getFuncName.js +++ /dev/null @@ -1,31 +0,0 @@ -var realNames = require('./_realNames'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ -function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; -} - -module.exports = getFuncName; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getHolder.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getHolder.js deleted file mode 100644 index 65e94b5c2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getHolder.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ -function getHolder(func) { - var object = func; - return object.placeholder; -} - -module.exports = getHolder; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getMapData.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getMapData.js deleted file mode 100644 index 17f63032e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getMapData.js +++ /dev/null @@ -1,18 +0,0 @@ -var isKeyable = require('./_isKeyable'); - -/** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ -function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; -} - -module.exports = getMapData; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getMatchData.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getMatchData.js deleted file mode 100644 index 2cc70f917..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getMatchData.js +++ /dev/null @@ -1,24 +0,0 @@ -var isStrictComparable = require('./_isStrictComparable'), - keys = require('./keys'); - -/** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ -function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; -} - -module.exports = getMatchData; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getNative.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getNative.js deleted file mode 100644 index 97a622b83..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getNative.js +++ /dev/null @@ -1,17 +0,0 @@ -var baseIsNative = require('./_baseIsNative'), - getValue = require('./_getValue'); - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -module.exports = getNative; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getPrototype.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getPrototype.js deleted file mode 100644 index e80861212..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getPrototype.js +++ /dev/null @@ -1,6 +0,0 @@ -var overArg = require('./_overArg'); - -/** Built-in value references. */ -var getPrototype = overArg(Object.getPrototypeOf, Object); - -module.exports = getPrototype; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getRawTag.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getRawTag.js deleted file mode 100644 index 49a95c9c6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getRawTag.js +++ /dev/null @@ -1,46 +0,0 @@ -var Symbol = require('./_Symbol'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; - -/** Built-in value references. */ -var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - -/** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ -function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; - - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; -} - -module.exports = getRawTag; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getSymbols.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getSymbols.js deleted file mode 100644 index b53c1270b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getSymbols.js +++ /dev/null @@ -1,16 +0,0 @@ -var overArg = require('./_overArg'), - stubArray = require('./stubArray'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray; - -module.exports = getSymbols; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getSymbolsIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getSymbolsIn.js deleted file mode 100644 index cec0855a4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getSymbolsIn.js +++ /dev/null @@ -1,25 +0,0 @@ -var arrayPush = require('./_arrayPush'), - getPrototype = require('./_getPrototype'), - getSymbols = require('./_getSymbols'), - stubArray = require('./stubArray'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeGetSymbols = Object.getOwnPropertySymbols; - -/** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ -var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; -}; - -module.exports = getSymbolsIn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getTag.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getTag.js deleted file mode 100644 index deaf89d58..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getTag.js +++ /dev/null @@ -1,58 +0,0 @@ -var DataView = require('./_DataView'), - Map = require('./_Map'), - Promise = require('./_Promise'), - Set = require('./_Set'), - WeakMap = require('./_WeakMap'), - baseGetTag = require('./_baseGetTag'), - toSource = require('./_toSource'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - setTag = '[object Set]', - weakMapTag = '[object WeakMap]'; - -var dataViewTag = '[object DataView]'; - -/** Used to detect maps, sets, and weakmaps. */ -var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); - -/** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -var getTag = baseGetTag; - -// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. -if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; -} - -module.exports = getTag; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getValue.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getValue.js deleted file mode 100644 index 5f7d77367..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getValue.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -module.exports = getValue; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getView.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getView.js deleted file mode 100644 index df1e5d44b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getView.js +++ /dev/null @@ -1,33 +0,0 @@ -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ -function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; -} - -module.exports = getView; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_getWrapDetails.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_getWrapDetails.js deleted file mode 100644 index 3bcc6e48a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_getWrapDetails.js +++ /dev/null @@ -1,17 +0,0 @@ -/** Used to match wrap detail comments. */ -var reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & /; - -/** - * Extracts wrapper details from the `source` body comment. - * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. - */ -function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; -} - -module.exports = getWrapDetails; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_hasPath.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_hasPath.js deleted file mode 100644 index 93dbde152..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_hasPath.js +++ /dev/null @@ -1,39 +0,0 @@ -var castPath = require('./_castPath'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isIndex = require('./_isIndex'), - isLength = require('./isLength'), - toKey = require('./_toKey'); - -/** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ -function hasPath(object, path, hasFunc) { - path = castPath(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); -} - -module.exports = hasPath; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_hasUnicode.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_hasUnicode.js deleted file mode 100644 index cb6ca15f6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_hasUnicode.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -module.exports = hasUnicode; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_hasUnicodeWord.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_hasUnicodeWord.js deleted file mode 100644 index a35d6e504..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_hasUnicodeWord.js +++ /dev/null @@ -1,15 +0,0 @@ -/** Used to detect strings that need a more robust regexp to match words. */ -var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - -/** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ -function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); -} - -module.exports = hasUnicodeWord; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_hashClear.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_hashClear.js deleted file mode 100644 index 5d4b70cc4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_hashClear.js +++ /dev/null @@ -1,15 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ -function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; -} - -module.exports = hashClear; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_hashDelete.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_hashDelete.js deleted file mode 100644 index ea9dabf13..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_hashDelete.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; -} - -module.exports = hashDelete; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_hashGet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_hashGet.js deleted file mode 100644 index 1fc2f34b1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_hashGet.js +++ /dev/null @@ -1,30 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; -} - -module.exports = hashGet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_hashHas.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_hashHas.js deleted file mode 100644 index f30aac384..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_hashHas.js +++ /dev/null @@ -1,23 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); -} - -module.exports = hashHas; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_hashSet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_hashSet.js deleted file mode 100644 index e1055283e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_hashSet.js +++ /dev/null @@ -1,23 +0,0 @@ -var nativeCreate = require('./_nativeCreate'); - -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ -function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; -} - -module.exports = hashSet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_initCloneArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_initCloneArray.js deleted file mode 100644 index aef02120e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_initCloneArray.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ -function initCloneArray(array) { - var length = array.length, - result = array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; -} - -module.exports = initCloneArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_initCloneByTag.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_initCloneByTag.js deleted file mode 100644 index e7b77edc6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_initCloneByTag.js +++ /dev/null @@ -1,80 +0,0 @@ -var cloneArrayBuffer = require('./_cloneArrayBuffer'), - cloneDataView = require('./_cloneDataView'), - cloneMap = require('./_cloneMap'), - cloneRegExp = require('./_cloneRegExp'), - cloneSet = require('./_cloneSet'), - cloneSymbol = require('./_cloneSymbol'), - cloneTypedArray = require('./_cloneTypedArray'); - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]', - dateTag = '[object Date]', - mapTag = '[object Map]', - numberTag = '[object Number]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneByTag(object, tag, cloneFunc, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); - - case mapTag: - return cloneMap(object, isDeep, cloneFunc); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return cloneSet(object, isDeep, cloneFunc); - - case symbolTag: - return cloneSymbol(object); - } -} - -module.exports = initCloneByTag; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_initCloneObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_initCloneObject.js deleted file mode 100644 index 5a13e64a5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_initCloneObject.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseCreate = require('./_baseCreate'), - getPrototype = require('./_getPrototype'), - isPrototype = require('./_isPrototype'); - -/** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ -function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; -} - -module.exports = initCloneObject; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_insertWrapDetails.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_insertWrapDetails.js deleted file mode 100644 index e79080864..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_insertWrapDetails.js +++ /dev/null @@ -1,23 +0,0 @@ -/** Used to match wrap detail comments. */ -var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/; - -/** - * Inserts wrapper `details` in a comment at the top of the `source` body. - * - * @private - * @param {string} source The source to modify. - * @returns {Array} details The details to insert. - * @returns {string} Returns the modified source. - */ -function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; - details = details.join(length > 2 ? ', ' : ' '); - return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); -} - -module.exports = insertWrapDetails; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_isFlattenable.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_isFlattenable.js deleted file mode 100644 index 4cc2c249c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_isFlattenable.js +++ /dev/null @@ -1,20 +0,0 @@ -var Symbol = require('./_Symbol'), - isArguments = require('./isArguments'), - isArray = require('./isArray'); - -/** Built-in value references. */ -var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined; - -/** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ -function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); -} - -module.exports = isFlattenable; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_isIndex.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_isIndex.js deleted file mode 100644 index e123dde8b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_isIndex.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); -} - -module.exports = isIndex; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_isIterateeCall.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_isIterateeCall.js deleted file mode 100644 index a0bb5a9cf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_isIterateeCall.js +++ /dev/null @@ -1,30 +0,0 @@ -var eq = require('./eq'), - isArrayLike = require('./isArrayLike'), - isIndex = require('./_isIndex'), - isObject = require('./isObject'); - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; -} - -module.exports = isIterateeCall; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_isKey.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_isKey.js deleted file mode 100644 index ff08b0680..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_isKey.js +++ /dev/null @@ -1,29 +0,0 @@ -var isArray = require('./isArray'), - isSymbol = require('./isSymbol'); - -/** Used to match property names within property paths. */ -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/; - -/** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ -function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); -} - -module.exports = isKey; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_isKeyable.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_isKeyable.js deleted file mode 100644 index 39f1828d4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_isKeyable.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ -function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); -} - -module.exports = isKeyable; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_isLaziable.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_isLaziable.js deleted file mode 100644 index a57c4f2dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_isLaziable.js +++ /dev/null @@ -1,28 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - getData = require('./_getData'), - getFuncName = require('./_getFuncName'), - lodash = require('./wrapperLodash'); - -/** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ -function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; - - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; -} - -module.exports = isLaziable; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_isMaskable.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_isMaskable.js deleted file mode 100644 index eb98d09f3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_isMaskable.js +++ /dev/null @@ -1,14 +0,0 @@ -var coreJsData = require('./_coreJsData'), - isFunction = require('./isFunction'), - stubFalse = require('./stubFalse'); - -/** - * Checks if `func` is capable of being masked. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `func` is maskable, else `false`. - */ -var isMaskable = coreJsData ? isFunction : stubFalse; - -module.exports = isMaskable; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_isMasked.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_isMasked.js deleted file mode 100644 index 4b0f21ba8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_isMasked.js +++ /dev/null @@ -1,20 +0,0 @@ -var coreJsData = require('./_coreJsData'); - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -module.exports = isMasked; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_isPrototype.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_isPrototype.js deleted file mode 100644 index 0f29498d4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_isPrototype.js +++ /dev/null @@ -1,18 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; -} - -module.exports = isPrototype; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_isStrictComparable.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_isStrictComparable.js deleted file mode 100644 index b59f40b85..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_isStrictComparable.js +++ /dev/null @@ -1,15 +0,0 @@ -var isObject = require('./isObject'); - -/** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ -function isStrictComparable(value) { - return value === value && !isObject(value); -} - -module.exports = isStrictComparable; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_iteratorToArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_iteratorToArray.js deleted file mode 100644 index 476856647..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_iteratorToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ -function iteratorToArray(iterator) { - var data, - result = []; - - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; -} - -module.exports = iteratorToArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_lazyClone.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_lazyClone.js deleted file mode 100644 index d8a51f870..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_lazyClone.js +++ /dev/null @@ -1,23 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - copyArray = require('./_copyArray'); - -/** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ -function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; -} - -module.exports = lazyClone; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_lazyReverse.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_lazyReverse.js deleted file mode 100644 index c5b52190f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_lazyReverse.js +++ /dev/null @@ -1,23 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'); - -/** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ -function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; -} - -module.exports = lazyReverse; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_lazyValue.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_lazyValue.js deleted file mode 100644 index 09bf14b43..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_lazyValue.js +++ /dev/null @@ -1,73 +0,0 @@ -var baseWrapperValue = require('./_baseWrapperValue'), - getView = require('./_getView'), - isArray = require('./isArray'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** Used to indicate the type of lazy iteratees. */ -var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ -function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || arrLength < LARGE_ARRAY_SIZE || - (arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; -} - -module.exports = lazyValue; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheClear.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheClear.js deleted file mode 100644 index acbe39a59..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheClear.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ -function listCacheClear() { - this.__data__ = []; - this.size = 0; -} - -module.exports = listCacheClear; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheDelete.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheDelete.js deleted file mode 100644 index b1384ade9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheDelete.js +++ /dev/null @@ -1,35 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/** Built-in value references. */ -var splice = arrayProto.splice; - -/** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; -} - -module.exports = listCacheDelete; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheGet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheGet.js deleted file mode 100644 index f8192fc38..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheGet.js +++ /dev/null @@ -1,19 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; -} - -module.exports = listCacheGet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheHas.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheHas.js deleted file mode 100644 index 2adf67146..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheHas.js +++ /dev/null @@ -1,16 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; -} - -module.exports = listCacheHas; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheSet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheSet.js deleted file mode 100644 index 5855c95e4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_listCacheSet.js +++ /dev/null @@ -1,26 +0,0 @@ -var assocIndexOf = require('./_assocIndexOf'); - -/** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ -function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} - -module.exports = listCacheSet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheClear.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheClear.js deleted file mode 100644 index bc9ca204a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheClear.js +++ /dev/null @@ -1,21 +0,0 @@ -var Hash = require('./_Hash'), - ListCache = require('./_ListCache'), - Map = require('./_Map'); - -/** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ -function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; -} - -module.exports = mapCacheClear; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheDelete.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheDelete.js deleted file mode 100644 index 946ca3c93..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheDelete.js +++ /dev/null @@ -1,18 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; -} - -module.exports = mapCacheDelete; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheGet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheGet.js deleted file mode 100644 index f29f55cfd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheGet.js +++ /dev/null @@ -1,16 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function mapCacheGet(key) { - return getMapData(this, key).get(key); -} - -module.exports = mapCacheGet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheHas.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheHas.js deleted file mode 100644 index a1214c028..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheHas.js +++ /dev/null @@ -1,16 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function mapCacheHas(key) { - return getMapData(this, key).has(key); -} - -module.exports = mapCacheHas; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheSet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheSet.js deleted file mode 100644 index 734684927..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_mapCacheSet.js +++ /dev/null @@ -1,22 +0,0 @@ -var getMapData = require('./_getMapData'); - -/** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ -function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; -} - -module.exports = mapCacheSet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_mapToArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_mapToArray.js deleted file mode 100644 index fe3dd531a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_mapToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ -function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; -} - -module.exports = mapToArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_matchesStrictComparable.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_matchesStrictComparable.js deleted file mode 100644 index f608af9ec..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_matchesStrictComparable.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ -function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; -} - -module.exports = matchesStrictComparable; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_memoizeCapped.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_memoizeCapped.js deleted file mode 100644 index 7f71c8fba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_memoizeCapped.js +++ /dev/null @@ -1,26 +0,0 @@ -var memoize = require('./memoize'); - -/** Used as the maximum memoize cache size. */ -var MAX_MEMOIZE_SIZE = 500; - -/** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ -function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; -} - -module.exports = memoizeCapped; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_mergeData.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_mergeData.js deleted file mode 100644 index cb570f976..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_mergeData.js +++ /dev/null @@ -1,90 +0,0 @@ -var composeArgs = require('./_composeArgs'), - composeArgsRight = require('./_composeArgsRight'), - replaceHolders = require('./_replaceHolders'); - -/** Used as the internal argument placeholder. */ -var PLACEHOLDER = '__lodash_placeholder__'; - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_BOUND_FLAG = 4, - WRAP_CURRY_FLAG = 8, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ -function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); - - var isCombo = - ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || - ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || - ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & WRAP_BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & WRAP_ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; -} - -module.exports = mergeData; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_mergeDefaults.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_mergeDefaults.js deleted file mode 100644 index 9888f0e76..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_mergeDefaults.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseMerge = require('./_baseMerge'), - isObject = require('./isObject'); - -/** - * Used by `_.defaultsDeep` to customize its `_.merge` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ -function mergeDefaults(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined, mergeDefaults, stack); - stack['delete'](srcValue); - } - return objValue; -} - -module.exports = mergeDefaults; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_metaMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_metaMap.js deleted file mode 100644 index 0157a0b09..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_metaMap.js +++ /dev/null @@ -1,6 +0,0 @@ -var WeakMap = require('./_WeakMap'); - -/** Used to store function metadata. */ -var metaMap = WeakMap && new WeakMap; - -module.exports = metaMap; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_nativeCreate.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_nativeCreate.js deleted file mode 100644 index c7aede85b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_nativeCreate.js +++ /dev/null @@ -1,6 +0,0 @@ -var getNative = require('./_getNative'); - -/* Built-in method references that are verified to be native. */ -var nativeCreate = getNative(Object, 'create'); - -module.exports = nativeCreate; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_nativeKeys.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_nativeKeys.js deleted file mode 100644 index 479a104a1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_nativeKeys.js +++ /dev/null @@ -1,6 +0,0 @@ -var overArg = require('./_overArg'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object); - -module.exports = nativeKeys; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_nativeKeysIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_nativeKeysIn.js deleted file mode 100644 index 00ee50594..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_nativeKeysIn.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; -} - -module.exports = nativeKeysIn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_nodeUtil.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_nodeUtil.js deleted file mode 100644 index 14e179fe1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_nodeUtil.js +++ /dev/null @@ -1,22 +0,0 @@ -var freeGlobal = require('./_freeGlobal'); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports && freeGlobal.process; - -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); - -module.exports = nodeUtil; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_objectToString.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_objectToString.js deleted file mode 100644 index c614ec09b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_objectToString.js +++ /dev/null @@ -1,22 +0,0 @@ -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto.toString; - -/** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ -function objectToString(value) { - return nativeObjectToString.call(value); -} - -module.exports = objectToString; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_overArg.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_overArg.js deleted file mode 100644 index 651c5c55f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_overArg.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -module.exports = overArg; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_overRest.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_overRest.js deleted file mode 100644 index c7cdef339..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_overRest.js +++ /dev/null @@ -1,36 +0,0 @@ -var apply = require('./_apply'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ -function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; -} - -module.exports = overRest; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_parent.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_parent.js deleted file mode 100644 index f174328fc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_parent.js +++ /dev/null @@ -1,16 +0,0 @@ -var baseGet = require('./_baseGet'), - baseSlice = require('./_baseSlice'); - -/** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ -function parent(object, path) { - return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); -} - -module.exports = parent; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_reEscape.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_reEscape.js deleted file mode 100644 index 7f47eda68..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_reEscape.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to match template delimiters. */ -var reEscape = /<%-([\s\S]+?)%>/g; - -module.exports = reEscape; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_reEvaluate.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_reEvaluate.js deleted file mode 100644 index 6adfc312c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_reEvaluate.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to match template delimiters. */ -var reEvaluate = /<%([\s\S]+?)%>/g; - -module.exports = reEvaluate; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_reInterpolate.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_reInterpolate.js deleted file mode 100644 index d02ff0b29..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_reInterpolate.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to match template delimiters. */ -var reInterpolate = /<%=([\s\S]+?)%>/g; - -module.exports = reInterpolate; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_realNames.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_realNames.js deleted file mode 100644 index aa0d52926..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_realNames.js +++ /dev/null @@ -1,4 +0,0 @@ -/** Used to lookup unminified function names. */ -var realNames = {}; - -module.exports = realNames; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_reorder.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_reorder.js deleted file mode 100644 index a3502b051..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_reorder.js +++ /dev/null @@ -1,29 +0,0 @@ -var copyArray = require('./_copyArray'), - isIndex = require('./_isIndex'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ -function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; -} - -module.exports = reorder; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_replaceHolders.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_replaceHolders.js deleted file mode 100644 index 74360ec4d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_replaceHolders.js +++ /dev/null @@ -1,29 +0,0 @@ -/** Used as the internal argument placeholder. */ -var PLACEHOLDER = '__lodash_placeholder__'; - -/** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ -function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; -} - -module.exports = replaceHolders; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_root.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_root.js deleted file mode 100644 index d2852bed4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_root.js +++ /dev/null @@ -1,9 +0,0 @@ -var freeGlobal = require('./_freeGlobal'); - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -module.exports = root; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_setCacheAdd.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_setCacheAdd.js deleted file mode 100644 index 1081a7442..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_setCacheAdd.js +++ /dev/null @@ -1,19 +0,0 @@ -/** Used to stand-in for `undefined` hash values. */ -var HASH_UNDEFINED = '__lodash_hash_undefined__'; - -/** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ -function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; -} - -module.exports = setCacheAdd; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_setCacheHas.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_setCacheHas.js deleted file mode 100644 index 9a492556e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_setCacheHas.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ -function setCacheHas(value) { - return this.__data__.has(value); -} - -module.exports = setCacheHas; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_setData.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_setData.js deleted file mode 100644 index e5cf3eb96..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_setData.js +++ /dev/null @@ -1,20 +0,0 @@ -var baseSetData = require('./_baseSetData'), - shortOut = require('./_shortOut'); - -/** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ -var setData = shortOut(baseSetData); - -module.exports = setData; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_setToArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_setToArray.js deleted file mode 100644 index b87f07418..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_setToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ -function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; -} - -module.exports = setToArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_setToPairs.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_setToPairs.js deleted file mode 100644 index 36ad37a05..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_setToPairs.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ -function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; -} - -module.exports = setToPairs; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_setToString.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_setToString.js deleted file mode 100644 index 6ca841967..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_setToString.js +++ /dev/null @@ -1,14 +0,0 @@ -var baseSetToString = require('./_baseSetToString'), - shortOut = require('./_shortOut'); - -/** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var setToString = shortOut(baseSetToString); - -module.exports = setToString; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_setWrapToString.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_setWrapToString.js deleted file mode 100644 index decdc4499..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_setWrapToString.js +++ /dev/null @@ -1,21 +0,0 @@ -var getWrapDetails = require('./_getWrapDetails'), - insertWrapDetails = require('./_insertWrapDetails'), - setToString = require('./_setToString'), - updateWrapDetails = require('./_updateWrapDetails'); - -/** - * Sets the `toString` method of `wrapper` to mimic the source of `reference` - * with wrapper details in a comment at the top of the source body. - * - * @private - * @param {Function} wrapper The function to modify. - * @param {Function} reference The reference function. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Function} Returns `wrapper`. - */ -function setWrapToString(wrapper, reference, bitmask) { - var source = (reference + ''); - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); -} - -module.exports = setWrapToString; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_shortOut.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_shortOut.js deleted file mode 100644 index 3300a0796..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_shortOut.js +++ /dev/null @@ -1,37 +0,0 @@ -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 800, - HOT_SPAN = 16; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeNow = Date.now; - -/** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ -function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; -} - -module.exports = shortOut; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_shuffleSelf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_shuffleSelf.js deleted file mode 100644 index 8bcc4f5c3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_shuffleSelf.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseRandom = require('./_baseRandom'); - -/** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ -function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; -} - -module.exports = shuffleSelf; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_stackClear.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_stackClear.js deleted file mode 100644 index ce8e5a92f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_stackClear.js +++ /dev/null @@ -1,15 +0,0 @@ -var ListCache = require('./_ListCache'); - -/** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ -function stackClear() { - this.__data__ = new ListCache; - this.size = 0; -} - -module.exports = stackClear; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_stackDelete.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_stackDelete.js deleted file mode 100644 index ff9887ab6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_stackDelete.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ -function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; -} - -module.exports = stackDelete; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_stackGet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_stackGet.js deleted file mode 100644 index 1cdf00409..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_stackGet.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ -function stackGet(key) { - return this.__data__.get(key); -} - -module.exports = stackGet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_stackHas.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_stackHas.js deleted file mode 100644 index 16a3ad11b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_stackHas.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ -function stackHas(key) { - return this.__data__.has(key); -} - -module.exports = stackHas; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_stackSet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_stackSet.js deleted file mode 100644 index b790ac5f4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_stackSet.js +++ /dev/null @@ -1,34 +0,0 @@ -var ListCache = require('./_ListCache'), - Map = require('./_Map'), - MapCache = require('./_MapCache'); - -/** Used as the size to enable large array optimizations. */ -var LARGE_ARRAY_SIZE = 200; - -/** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ -function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; -} - -module.exports = stackSet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_strictIndexOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_strictIndexOf.js deleted file mode 100644 index 0486a4956..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_strictIndexOf.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; -} - -module.exports = strictIndexOf; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_strictLastIndexOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_strictLastIndexOf.js deleted file mode 100644 index d7310dcc2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_strictLastIndexOf.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * A specialized version of `_.lastIndexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ -function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array[index] === value) { - return index; - } - } - return index; -} - -module.exports = strictLastIndexOf; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_stringSize.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_stringSize.js deleted file mode 100644 index 17ef462a6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_stringSize.js +++ /dev/null @@ -1,18 +0,0 @@ -var asciiSize = require('./_asciiSize'), - hasUnicode = require('./_hasUnicode'), - unicodeSize = require('./_unicodeSize'); - -/** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ -function stringSize(string) { - return hasUnicode(string) - ? unicodeSize(string) - : asciiSize(string); -} - -module.exports = stringSize; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_stringToArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_stringToArray.js deleted file mode 100644 index d161158c6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_stringToArray.js +++ /dev/null @@ -1,18 +0,0 @@ -var asciiToArray = require('./_asciiToArray'), - hasUnicode = require('./_hasUnicode'), - unicodeToArray = require('./_unicodeToArray'); - -/** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); -} - -module.exports = stringToArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_stringToPath.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_stringToPath.js deleted file mode 100644 index db7b0f7db..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_stringToPath.js +++ /dev/null @@ -1,28 +0,0 @@ -var memoizeCapped = require('./_memoizeCapped'); - -/** Used to match property names within property paths. */ -var reLeadingDot = /^\./, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - -/** Used to match backslashes in property paths. */ -var reEscapeChar = /\\(\\)?/g; - -/** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ -var stringToPath = memoizeCapped(function(string) { - var result = []; - if (reLeadingDot.test(string)) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; -}); - -module.exports = stringToPath; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_toKey.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_toKey.js deleted file mode 100644 index c6d645c4d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_toKey.js +++ /dev/null @@ -1,21 +0,0 @@ -var isSymbol = require('./isSymbol'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ -function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; -} - -module.exports = toKey; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_toSource.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_toSource.js deleted file mode 100644 index a020b386c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_toSource.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var funcProto = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -module.exports = toSource; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_unescapeHtmlChar.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_unescapeHtmlChar.js deleted file mode 100644 index a71fecb3f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_unescapeHtmlChar.js +++ /dev/null @@ -1,21 +0,0 @@ -var basePropertyOf = require('./_basePropertyOf'); - -/** Used to map HTML entities to characters. */ -var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" -}; - -/** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ -var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - -module.exports = unescapeHtmlChar; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_unicodeSize.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_unicodeSize.js deleted file mode 100644 index 68137ec2c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_unicodeSize.js +++ /dev/null @@ -1,44 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ -function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; -} - -module.exports = unicodeSize; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_unicodeToArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_unicodeToArray.js deleted file mode 100644 index 2a725c062..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_unicodeToArray.js +++ /dev/null @@ -1,40 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function unicodeToArray(string) { - return string.match(reUnicode) || []; -} - -module.exports = unicodeToArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_unicodeWords.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_unicodeWords.js deleted file mode 100644 index d8b822ada..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_unicodeWords.js +++ /dev/null @@ -1,69 +0,0 @@ -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - -/** Used to compose unicode capture groups. */ -var rsApos = "['\u2019]", - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', - rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsOrdLower = '\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)', - rsOrdUpper = '\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq; - -/** Used to match complex or compound words. */ -var reUnicodeWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', - rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, - rsUpper + '+' + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji -].join('|'), 'g'); - -/** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ -function unicodeWords(string) { - return string.match(reUnicodeWord) || []; -} - -module.exports = unicodeWords; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_updateWrapDetails.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_updateWrapDetails.js deleted file mode 100644 index 8759fbdf7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_updateWrapDetails.js +++ /dev/null @@ -1,46 +0,0 @@ -var arrayEach = require('./_arrayEach'), - arrayIncludes = require('./_arrayIncludes'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256, - WRAP_FLIP_FLAG = 512; - -/** Used to associate wrap methods with their bit flags. */ -var wrapFlags = [ - ['ary', WRAP_ARY_FLAG], - ['bind', WRAP_BIND_FLAG], - ['bindKey', WRAP_BIND_KEY_FLAG], - ['curry', WRAP_CURRY_FLAG], - ['curryRight', WRAP_CURRY_RIGHT_FLAG], - ['flip', WRAP_FLIP_FLAG], - ['partial', WRAP_PARTIAL_FLAG], - ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], - ['rearg', WRAP_REARG_FLAG] -]; - -/** - * Updates wrapper `details` based on `bitmask` flags. - * - * @private - * @returns {Array} details The details to modify. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Array} Returns `details`. - */ -function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = '_.' + pair[0]; - if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); -} - -module.exports = updateWrapDetails; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/_wrapperClone.js b/fundamentals/bug-challenge-es6/node_modules/lodash/_wrapperClone.js deleted file mode 100644 index 7bb58a2e8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/_wrapperClone.js +++ /dev/null @@ -1,23 +0,0 @@ -var LazyWrapper = require('./_LazyWrapper'), - LodashWrapper = require('./_LodashWrapper'), - copyArray = require('./_copyArray'); - -/** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ -function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; -} - -module.exports = wrapperClone; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/add.js b/fundamentals/bug-challenge-es6/node_modules/lodash/add.js deleted file mode 100644 index f06951564..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/add.js +++ /dev/null @@ -1,22 +0,0 @@ -var createMathOperation = require('./_createMathOperation'); - -/** - * Adds two numbers. - * - * @static - * @memberOf _ - * @since 3.4.0 - * @category Math - * @param {number} augend The first number in an addition. - * @param {number} addend The second number in an addition. - * @returns {number} Returns the total. - * @example - * - * _.add(6, 4); - * // => 10 - */ -var add = createMathOperation(function(augend, addend) { - return augend + addend; -}, 0); - -module.exports = add; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/after.js b/fundamentals/bug-challenge-es6/node_modules/lodash/after.js deleted file mode 100644 index 3900c979a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/after.js +++ /dev/null @@ -1,42 +0,0 @@ -var toInteger = require('./toInteger'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ -function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; -} - -module.exports = after; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/array.js b/fundamentals/bug-challenge-es6/node_modules/lodash/array.js deleted file mode 100644 index af688d3ee..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/array.js +++ /dev/null @@ -1,67 +0,0 @@ -module.exports = { - 'chunk': require('./chunk'), - 'compact': require('./compact'), - 'concat': require('./concat'), - 'difference': require('./difference'), - 'differenceBy': require('./differenceBy'), - 'differenceWith': require('./differenceWith'), - 'drop': require('./drop'), - 'dropRight': require('./dropRight'), - 'dropRightWhile': require('./dropRightWhile'), - 'dropWhile': require('./dropWhile'), - 'fill': require('./fill'), - 'findIndex': require('./findIndex'), - 'findLastIndex': require('./findLastIndex'), - 'first': require('./first'), - 'flatten': require('./flatten'), - 'flattenDeep': require('./flattenDeep'), - 'flattenDepth': require('./flattenDepth'), - 'fromPairs': require('./fromPairs'), - 'head': require('./head'), - 'indexOf': require('./indexOf'), - 'initial': require('./initial'), - 'intersection': require('./intersection'), - 'intersectionBy': require('./intersectionBy'), - 'intersectionWith': require('./intersectionWith'), - 'join': require('./join'), - 'last': require('./last'), - 'lastIndexOf': require('./lastIndexOf'), - 'nth': require('./nth'), - 'pull': require('./pull'), - 'pullAll': require('./pullAll'), - 'pullAllBy': require('./pullAllBy'), - 'pullAllWith': require('./pullAllWith'), - 'pullAt': require('./pullAt'), - 'remove': require('./remove'), - 'reverse': require('./reverse'), - 'slice': require('./slice'), - 'sortedIndex': require('./sortedIndex'), - 'sortedIndexBy': require('./sortedIndexBy'), - 'sortedIndexOf': require('./sortedIndexOf'), - 'sortedLastIndex': require('./sortedLastIndex'), - 'sortedLastIndexBy': require('./sortedLastIndexBy'), - 'sortedLastIndexOf': require('./sortedLastIndexOf'), - 'sortedUniq': require('./sortedUniq'), - 'sortedUniqBy': require('./sortedUniqBy'), - 'tail': require('./tail'), - 'take': require('./take'), - 'takeRight': require('./takeRight'), - 'takeRightWhile': require('./takeRightWhile'), - 'takeWhile': require('./takeWhile'), - 'union': require('./union'), - 'unionBy': require('./unionBy'), - 'unionWith': require('./unionWith'), - 'uniq': require('./uniq'), - 'uniqBy': require('./uniqBy'), - 'uniqWith': require('./uniqWith'), - 'unzip': require('./unzip'), - 'unzipWith': require('./unzipWith'), - 'without': require('./without'), - 'xor': require('./xor'), - 'xorBy': require('./xorBy'), - 'xorWith': require('./xorWith'), - 'zip': require('./zip'), - 'zipObject': require('./zipObject'), - 'zipObjectDeep': require('./zipObjectDeep'), - 'zipWith': require('./zipWith') -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/ary.js b/fundamentals/bug-challenge-es6/node_modules/lodash/ary.js deleted file mode 100644 index 70c87d094..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/ary.js +++ /dev/null @@ -1,29 +0,0 @@ -var createWrap = require('./_createWrap'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_ARY_FLAG = 128; - -/** - * Creates a function that invokes `func`, with up to `n` arguments, - * ignoring any additional arguments. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ -function ary(func, n, guard) { - n = guard ? undefined : n; - n = (func && n == null) ? func.length : n; - return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); -} - -module.exports = ary; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/assign.js b/fundamentals/bug-challenge-es6/node_modules/lodash/assign.js deleted file mode 100644 index 909db26a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/assign.js +++ /dev/null @@ -1,58 +0,0 @@ -var assignValue = require('./_assignValue'), - copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - isArrayLike = require('./isArrayLike'), - isPrototype = require('./_isPrototype'), - keys = require('./keys'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ -var assign = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } -}); - -module.exports = assign; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/assignIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/assignIn.js deleted file mode 100644 index e663473a0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/assignIn.js +++ /dev/null @@ -1,40 +0,0 @@ -var copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - keysIn = require('./keysIn'); - -/** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ -var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); -}); - -module.exports = assignIn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/assignInWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/assignInWith.js deleted file mode 100644 index 68fcc0b03..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/assignInWith.js +++ /dev/null @@ -1,38 +0,0 @@ -var copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - keysIn = require('./keysIn'); - -/** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); -}); - -module.exports = assignInWith; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/assignWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/assignWith.js deleted file mode 100644 index 7dc6c761b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/assignWith.js +++ /dev/null @@ -1,37 +0,0 @@ -var copyObject = require('./_copyObject'), - createAssigner = require('./_createAssigner'), - keys = require('./keys'); - -/** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); -}); - -module.exports = assignWith; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/at.js b/fundamentals/bug-challenge-es6/node_modules/lodash/at.js deleted file mode 100644 index 781ee9e5f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/at.js +++ /dev/null @@ -1,23 +0,0 @@ -var baseAt = require('./_baseAt'), - flatRest = require('./_flatRest'); - -/** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ -var at = flatRest(baseAt); - -module.exports = at; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/attempt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/attempt.js deleted file mode 100644 index 624d01524..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/attempt.js +++ /dev/null @@ -1,35 +0,0 @@ -var apply = require('./_apply'), - baseRest = require('./_baseRest'), - isError = require('./isError'); - -/** - * Attempts to invoke `func`, returning either the result or the caught error - * object. Any additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {Function} func The function to attempt. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {*} Returns the `func` result or error object. - * @example - * - * // Avoid throwing errors for invalid selectors. - * var elements = _.attempt(function(selector) { - * return document.querySelectorAll(selector); - * }, '>_>'); - * - * if (_.isError(elements)) { - * elements = []; - * } - */ -var attempt = baseRest(function(func, args) { - try { - return apply(func, undefined, args); - } catch (e) { - return isError(e) ? e : new Error(e); - } -}); - -module.exports = attempt; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/before.js b/fundamentals/bug-challenge-es6/node_modules/lodash/before.js deleted file mode 100644 index a3e0a16c7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/before.js +++ /dev/null @@ -1,40 +0,0 @@ -var toInteger = require('./toInteger'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ -function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; -} - -module.exports = before; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/bind.js b/fundamentals/bug-challenge-es6/node_modules/lodash/bind.js deleted file mode 100644 index b1076e93e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/bind.js +++ /dev/null @@ -1,57 +0,0 @@ -var baseRest = require('./_baseRest'), - createWrap = require('./_createWrap'), - getHolder = require('./_getHolder'), - replaceHolders = require('./_replaceHolders'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_PARTIAL_FLAG = 32; - -/** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ -var bind = baseRest(function(func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); -}); - -// Assign default placeholders. -bind.placeholder = {}; - -module.exports = bind; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/bindAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/bindAll.js deleted file mode 100644 index a35706dee..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/bindAll.js +++ /dev/null @@ -1,41 +0,0 @@ -var arrayEach = require('./_arrayEach'), - baseAssignValue = require('./_baseAssignValue'), - bind = require('./bind'), - flatRest = require('./_flatRest'), - toKey = require('./_toKey'); - -/** - * Binds methods of an object to the object itself, overwriting the existing - * method. - * - * **Note:** This method doesn't set the "length" property of bound functions. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {Object} object The object to bind and assign the bound methods to. - * @param {...(string|string[])} methodNames The object method names to bind. - * @returns {Object} Returns `object`. - * @example - * - * var view = { - * 'label': 'docs', - * 'click': function() { - * console.log('clicked ' + this.label); - * } - * }; - * - * _.bindAll(view, ['click']); - * jQuery(element).on('click', view.click); - * // => Logs 'clicked docs' when clicked. - */ -var bindAll = flatRest(function(object, methodNames) { - arrayEach(methodNames, function(key) { - key = toKey(key); - baseAssignValue(object, key, bind(object[key], object)); - }); - return object; -}); - -module.exports = bindAll; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/bindKey.js b/fundamentals/bug-challenge-es6/node_modules/lodash/bindKey.js deleted file mode 100644 index f7fd64cd4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/bindKey.js +++ /dev/null @@ -1,68 +0,0 @@ -var baseRest = require('./_baseRest'), - createWrap = require('./_createWrap'), - getHolder = require('./_getHolder'), - replaceHolders = require('./_replaceHolders'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_PARTIAL_FLAG = 32; - -/** - * Creates a function that invokes the method at `object[key]` with `partials` - * prepended to the arguments it receives. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. See - * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ -var bindKey = baseRest(function(object, key, partials) { - var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(key, bitmask, object, partials, holders); -}); - -// Assign default placeholders. -bindKey.placeholder = {}; - -module.exports = bindKey; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/camelCase.js b/fundamentals/bug-challenge-es6/node_modules/lodash/camelCase.js deleted file mode 100644 index d7390def5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/camelCase.js +++ /dev/null @@ -1,29 +0,0 @@ -var capitalize = require('./capitalize'), - createCompounder = require('./_createCompounder'); - -/** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ -var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); -}); - -module.exports = camelCase; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/capitalize.js b/fundamentals/bug-challenge-es6/node_modules/lodash/capitalize.js deleted file mode 100644 index 3e1600e7d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/capitalize.js +++ /dev/null @@ -1,23 +0,0 @@ -var toString = require('./toString'), - upperFirst = require('./upperFirst'); - -/** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ -function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); -} - -module.exports = capitalize; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/castArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/castArray.js deleted file mode 100644 index e470bdb9b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/castArray.js +++ /dev/null @@ -1,44 +0,0 @@ -var isArray = require('./isArray'); - -/** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ -function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; -} - -module.exports = castArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/ceil.js b/fundamentals/bug-challenge-es6/node_modules/lodash/ceil.js deleted file mode 100644 index 56c8722cf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/ceil.js +++ /dev/null @@ -1,26 +0,0 @@ -var createRound = require('./_createRound'); - -/** - * Computes `number` rounded up to `precision`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Math - * @param {number} number The number to round up. - * @param {number} [precision=0] The precision to round up to. - * @returns {number} Returns the rounded up number. - * @example - * - * _.ceil(4.006); - * // => 5 - * - * _.ceil(6.004, 2); - * // => 6.01 - * - * _.ceil(6040, -2); - * // => 6100 - */ -var ceil = createRound('ceil'); - -module.exports = ceil; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/chain.js b/fundamentals/bug-challenge-es6/node_modules/lodash/chain.js deleted file mode 100644 index f6cd6475f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/chain.js +++ /dev/null @@ -1,38 +0,0 @@ -var lodash = require('./wrapperLodash'); - -/** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ -function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; -} - -module.exports = chain; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/chunk.js b/fundamentals/bug-challenge-es6/node_modules/lodash/chunk.js deleted file mode 100644 index 5b562fef3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/chunk.js +++ /dev/null @@ -1,50 +0,0 @@ -var baseSlice = require('./_baseSlice'), - isIterateeCall = require('./_isIterateeCall'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ -function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array == null ? 0 : array.length; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; -} - -module.exports = chunk; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/clamp.js b/fundamentals/bug-challenge-es6/node_modules/lodash/clamp.js deleted file mode 100644 index 91a72c978..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/clamp.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseClamp = require('./_baseClamp'), - toNumber = require('./toNumber'); - -/** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ -function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); -} - -module.exports = clamp; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/clone.js b/fundamentals/bug-challenge-es6/node_modules/lodash/clone.js deleted file mode 100644 index dd439d639..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/clone.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_SYMBOLS_FLAG = 4; - -/** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ -function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG); -} - -module.exports = clone; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/cloneDeep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/cloneDeep.js deleted file mode 100644 index 4425fbe8b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/cloneDeep.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ -function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); -} - -module.exports = cloneDeep; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/cloneDeepWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/cloneDeepWith.js deleted file mode 100644 index fd9c6c050..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/cloneDeepWith.js +++ /dev/null @@ -1,40 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1, - CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ -function cloneDeepWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); -} - -module.exports = cloneDeepWith; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/cloneWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/cloneWith.js deleted file mode 100644 index d2f4e756d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/cloneWith.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseClone = require('./_baseClone'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_SYMBOLS_FLAG = 4; - -/** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ -function cloneWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); -} - -module.exports = cloneWith; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/collection.js b/fundamentals/bug-challenge-es6/node_modules/lodash/collection.js deleted file mode 100644 index 77fe837f3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/collection.js +++ /dev/null @@ -1,30 +0,0 @@ -module.exports = { - 'countBy': require('./countBy'), - 'each': require('./each'), - 'eachRight': require('./eachRight'), - 'every': require('./every'), - 'filter': require('./filter'), - 'find': require('./find'), - 'findLast': require('./findLast'), - 'flatMap': require('./flatMap'), - 'flatMapDeep': require('./flatMapDeep'), - 'flatMapDepth': require('./flatMapDepth'), - 'forEach': require('./forEach'), - 'forEachRight': require('./forEachRight'), - 'groupBy': require('./groupBy'), - 'includes': require('./includes'), - 'invokeMap': require('./invokeMap'), - 'keyBy': require('./keyBy'), - 'map': require('./map'), - 'orderBy': require('./orderBy'), - 'partition': require('./partition'), - 'reduce': require('./reduce'), - 'reduceRight': require('./reduceRight'), - 'reject': require('./reject'), - 'sample': require('./sample'), - 'sampleSize': require('./sampleSize'), - 'shuffle': require('./shuffle'), - 'size': require('./size'), - 'some': require('./some'), - 'sortBy': require('./sortBy') -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/commit.js b/fundamentals/bug-challenge-es6/node_modules/lodash/commit.js deleted file mode 100644 index fe4db7178..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/commit.js +++ /dev/null @@ -1,33 +0,0 @@ -var LodashWrapper = require('./_LodashWrapper'); - -/** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ -function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); -} - -module.exports = wrapperCommit; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/compact.js b/fundamentals/bug-challenge-es6/node_modules/lodash/compact.js deleted file mode 100644 index 031fab4e6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/compact.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ -function compact(array) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; -} - -module.exports = compact; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/concat.js b/fundamentals/bug-challenge-es6/node_modules/lodash/concat.js deleted file mode 100644 index 1da48a4fc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/concat.js +++ /dev/null @@ -1,43 +0,0 @@ -var arrayPush = require('./_arrayPush'), - baseFlatten = require('./_baseFlatten'), - copyArray = require('./_copyArray'), - isArray = require('./isArray'); - -/** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ -function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); -} - -module.exports = concat; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/cond.js b/fundamentals/bug-challenge-es6/node_modules/lodash/cond.js deleted file mode 100644 index 64555986a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/cond.js +++ /dev/null @@ -1,60 +0,0 @@ -var apply = require('./_apply'), - arrayMap = require('./_arrayMap'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/** - * Creates a function that iterates over `pairs` and invokes the corresponding - * function of the first predicate to return truthy. The predicate-function - * pairs are invoked with the `this` binding and arguments of the created - * function. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Util - * @param {Array} pairs The predicate-function pairs. - * @returns {Function} Returns the new composite function. - * @example - * - * var func = _.cond([ - * [_.matches({ 'a': 1 }), _.constant('matches A')], - * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], - * [_.stubTrue, _.constant('no match')] - * ]); - * - * func({ 'a': 1, 'b': 2 }); - * // => 'matches A' - * - * func({ 'a': 0, 'b': 1 }); - * // => 'matches B' - * - * func({ 'a': '1', 'b': '2' }); - * // => 'no match' - */ -function cond(pairs) { - var length = pairs == null ? 0 : pairs.length, - toIteratee = baseIteratee; - - pairs = !length ? [] : arrayMap(pairs, function(pair) { - if (typeof pair[1] != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return [toIteratee(pair[0]), pair[1]]; - }); - - return baseRest(function(args) { - var index = -1; - while (++index < length) { - var pair = pairs[index]; - if (apply(pair[0], this, args)) { - return apply(pair[1], this, args); - } - } - }); -} - -module.exports = cond; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/conforms.js b/fundamentals/bug-challenge-es6/node_modules/lodash/conforms.js deleted file mode 100644 index 5501a949a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/conforms.js +++ /dev/null @@ -1,35 +0,0 @@ -var baseClone = require('./_baseClone'), - baseConforms = require('./_baseConforms'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1; - -/** - * Creates a function that invokes the predicate properties of `source` with - * the corresponding property values of a given object, returning `true` if - * all predicates return truthy, else `false`. - * - * **Note:** The created function is equivalent to `_.conformsTo` with - * `source` partially applied. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Util - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - * @example - * - * var objects = [ - * { 'a': 2, 'b': 1 }, - * { 'a': 1, 'b': 2 } - * ]; - * - * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); - * // => [{ 'a': 1, 'b': 2 }] - */ -function conforms(source) { - return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); -} - -module.exports = conforms; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/conformsTo.js b/fundamentals/bug-challenge-es6/node_modules/lodash/conformsTo.js deleted file mode 100644 index b8a93ebf4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/conformsTo.js +++ /dev/null @@ -1,32 +0,0 @@ -var baseConformsTo = require('./_baseConformsTo'), - keys = require('./keys'); - -/** - * Checks if `object` conforms to `source` by invoking the predicate - * properties of `source` with the corresponding property values of `object`. - * - * **Note:** This method is equivalent to `_.conforms` when `source` is - * partially applied. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); - * // => true - * - * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); - * // => false - */ -function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys(source)); -} - -module.exports = conformsTo; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/constant.js b/fundamentals/bug-challenge-es6/node_modules/lodash/constant.js deleted file mode 100644 index 655ece3fb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/constant.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ -function constant(value) { - return function() { - return value; - }; -} - -module.exports = constant; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/core.js b/fundamentals/bug-challenge-es6/node_modules/lodash/core.js deleted file mode 100644 index 59cdc7be3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/core.js +++ /dev/null @@ -1,3839 +0,0 @@ -/** - * @license - * Lodash (Custom Build) - * Build: `lodash core -o ./dist/lodash.core.js` - * Copyright JS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.17.2'; - - /** Error message constants. */ - var FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used to compose bitmasks for value comparisons. */ - var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - - /** Used to compose bitmasks for function metadata. */ - var WRAP_BIND_FLAG = 1, - WRAP_PARTIAL_FLAG = 32; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - asyncTag = '[object AsyncFunction]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - numberTag = '[object Number]', - objectTag = '[object Object]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - stringTag = '[object String]'; - - /** Used to match HTML entities and HTML characters. */ - var reUnescapedHtml = /[&<>"']/g, - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - - /*--------------------------------------------------------------------------*/ - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - array.push.apply(array, values); - return array; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return baseMap(props, function(key) { - return object[key]; - }); - } - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes); - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - - /*--------------------------------------------------------------------------*/ - - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString = objectProto.toString; - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Built-in value references. */ - var objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeIsFinite = root.isFinite, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array of at least `200` elements - * and any iteratees accept only one argument. The heuristic for whether a - * section qualifies for shortcut fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - return value instanceof LodashWrapper - ? value - : new LodashWrapper(value); - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; - }()); - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - } - - LodashWrapper.prototype = baseCreate(lodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Used by `_.defaults` to customize its `_.assignIn` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - object[key] = value; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !false) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return baseFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - return objectToString(value); - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - var baseIsArguments = noop; - - /** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ - function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = baseGetTag(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = baseGetTag(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - stack || (stack = []); - var objStack = find(stack, function(entry) { - return entry[0] == object; - }); - var othStack = find(stack, function(entry) { - return entry[0] == other; - }); - if (objStack && othStack) { - return objStack[1] == other; - } - stack.push([object, other]); - stack.push([other, object]); - if (isSameTag && !objIsObj) { - var result = (objIsArr) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - stack.pop(); - return result; - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - stack.pop(); - return result; - } - } - if (!isSameTag) { - return false; - } - var result = equalObjects(object, other, bitmask, customizer, equalFunc, stack); - stack.pop(); - return result; - } - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(func) { - if (typeof func == 'function') { - return func; - } - if (func == null) { - return identity; - } - return (typeof func == 'object' ? baseMatches : baseProperty)(func); - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var props = nativeKeys(source); - return function(object) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length]; - if (!(key in object && - baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG) - )) { - return false; - } - } - return true; - }; - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, props) { - object = Object(object); - return reduce(props, function(result, key) { - if (key in object) { - result[key] = object[key]; - } - return result; - }, {}); - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source) { - return baseSlice(source, 0, source.length); - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - return reduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = false; - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = false; - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = baseIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartial(func, bitmask, thisArg, partials) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return fn.apply(isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined; - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - var compared; - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!baseSome(other, function(othValue, othIndex) { - if (!indexOf(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - var result = true; - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - var compared; - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - return result; - } - - /** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); - } - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value); - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ - function objectToString(value) { - return nativeObjectToString.call(value); - } - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return func.apply(this, otherArgs); - }; - } - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = identity; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - return baseFilter(array, Boolean); - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index); - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (typeof fromIndex == 'number') { - fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; - } else { - fromIndex = 0; - } - var index = (fromIndex || 0) - 1, - isReflexive = value === value; - - while (++index < length) { - var other = array[index]; - if ((isReflexive ? other === value : other !== other)) { - return index; - } - } - return -1; - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array == null ? 0 : array.length; - start = start == null ? 0 : +start; - end = end === undefined ? length : +end; - return length ? baseSlice(array, start, end) : []; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - predicate = guard ? undefined : predicate; - return baseEvery(collection, baseIteratee(predicate)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ - function filter(collection, predicate) { - return baseFilter(collection, baseIteratee(predicate)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - return baseEach(collection, baseIteratee(iteratee)); - } - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - return baseMap(collection, baseIteratee(iteratee)); - } - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - return baseReduce(collection, baseIteratee(iteratee), accumulator, arguments.length < 3, baseEach); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - collection = isArrayLike(collection) ? collection : nativeKeys(collection); - return collection.length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - predicate = guard ? undefined : predicate; - return baseSome(collection, baseIteratee(predicate)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] - */ - function sortBy(collection, iteratee) { - var index = 0; - iteratee = baseIteratee(iteratee); - - return baseMap(baseMap(collection, function(value, key, collection) { - return { 'value': value, 'index': index++, 'criteria': iteratee(value, key, collection) }; - }).sort(function(object, other) { - return compareAscending(object.criteria, other.criteria) || (object.index - other.index); - }), baseProperty('value')); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = baseRest(function(func, thisArg, partials) { - return createPartial(func, WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG, thisArg, partials); - }); - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - return !predicate.apply(this, args); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // => `createApplication` is invoked once - */ - function once(func) { - return before(2, func); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - if (!isObject(value)) { - return value; - } - return isArray(value) ? copyArray(value) : copyObject(value, nativeKeys(value)); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && baseGetTag(value) == boolTag); - } - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = baseIsDate; - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (isArrayLike(value) && - (isArray(value) || isString(value) || - isFunction(value.splice) || isArguments(value))) { - return !value.length; - } - return !nativeKeys(value).length; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are **not** supported. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && baseGetTag(value) == numberTag); - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = baseIsRegExp; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); - } - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!isArrayLike(value)) { - return values(value); - } - return value.length ? copyArray(value) : []; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - var toInteger = Number; - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - var toNumber = Number; - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - if (typeof value == 'string') { - return value; - } - return value == null ? '' : (value + ''); - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ - var assign = createAssigner(function(object, source) { - copyObject(source, nativeKeys(source), object); - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, nativeKeysIn(source), object); - }); - - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties == null ? result : assign(result, properties); - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function(args) { - args.push(undefined, assignInDefaults); - return assignInWith.apply(undefined, args); - }); - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasOwnProperty.call(object, path); - } - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - var keys = nativeKeys; - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - var keysIn = nativeKeysIn; - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function(object, paths) { - return object == null ? {} : basePick(object, paths); - }); - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - var value = object == null ? undefined : object[path]; - if (value === undefined) { - value = defaultValue; - } - return isFunction(value) ? value.call(object) : value; - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object == null ? [] : baseValues(object, keys(object)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /*------------------------------------------------------------------------*/ - - /** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ - function identity(value) { - return value; - } - - /** - * Creates a function that invokes `func` with the arguments of the created - * function. If `func` is a property name, the created function returns the - * property value for a given element. If `func` is an array or object, the - * created function returns `true` for elements that contain the equivalent - * source properties, otherwise it returns `false`. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Util - * @param {*} [func=_.identity] The value to convert to a callback. - * @returns {Function} Returns the callback. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); - * // => [{ 'user': 'barney', 'age': 36, 'active': true }] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, _.iteratee(['user', 'fred'])); - * // => [{ 'user': 'fred', 'age': 40 }] - * - * // The `_.property` iteratee shorthand. - * _.map(users, _.iteratee('user')); - * // => ['barney', 'fred'] - * - * // Create custom iteratee shorthands. - * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { - * return !_.isRegExp(func) ? iteratee(func) : function(string) { - * return func.test(string); - * }; - * }); - * - * _.filter(['abc', 'def'], /ef/); - * // => ['def'] - */ - var iteratee = baseIteratee; - - /** - * Creates a function that performs a partial deep comparison between a given - * object and `source`, returning `true` if the given object has equivalent - * property values, else `false`. - * - * **Note:** The created function is equivalent to `_.isMatch` with `source` - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - * @example - * - * var objects = [ - * { 'a': 1, 'b': 2, 'c': 3 }, - * { 'a': 4, 'b': 5, 'c': 6 } - * ]; - * - * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); - * // => [{ 'a': 4, 'b': 5, 'c': 6 }] - */ - function matches(source) { - return baseMatches(assign({}, source)); - } - - /** - * Adds all own enumerable string keyed function properties of a source - * object to the destination object. If `object` is a function, then methods - * are added to its prototype as well. - * - * **Note:** Use `_.runInContext` to create a pristine `lodash` function to - * avoid conflicts caused by modifying the original. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {Function|Object} [object=lodash] The destination object. - * @param {Object} source The object of functions to add. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.chain=true] Specify whether mixins are chainable. - * @returns {Function|Object} Returns `object`. - * @example - * - * function vowels(string) { - * return _.filter(string, function(v) { - * return /[aeiou]/i.test(v); - * }); - * } - * - * _.mixin({ 'vowels': vowels }); - * _.vowels('fred'); - * // => ['e'] - * - * _('fred').vowels().value(); - * // => ['e'] - * - * _.mixin({ 'vowels': vowels }, { 'chain': false }); - * _('fred').vowels(); - * // => ['e'] - */ - function mixin(object, source, options) { - var props = keys(source), - methodNames = baseFunctions(source, props); - - if (options == null && - !(isObject(source) && (methodNames.length || !props.length))) { - options = source; - source = object; - object = this; - methodNames = baseFunctions(source, keys(source)); - } - var chain = !(isObject(options) && 'chain' in options) || !!options.chain, - isFunc = isFunction(object); - - baseEach(methodNames, function(methodName) { - var func = source[methodName]; - object[methodName] = func; - if (isFunc) { - object.prototype[methodName] = function() { - var chainAll = this.__chain__; - if (chain || chainAll) { - var result = object(this.__wrapped__), - actions = result.__actions__ = copyArray(this.__actions__); - - actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); - result.__chain__ = chainAll; - return result; - } - return func.apply(object, arrayPush([this.value()], arguments)); - }; - } - }); - - return object; - } - - /** - * Reverts the `_` variable to its previous value and returns a reference to - * the `lodash` function. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @returns {Function} Returns the `lodash` function. - * @example - * - * var lodash = _.noConflict(); - */ - function noConflict() { - if (root._ === this) { - root._ = oldDash; - } - return this; - } - - /** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ - function noop() { - // No operation performed. - } - - /** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ - function uniqueId(prefix) { - var id = ++idCounter; - return toString(prefix) + id; - } - - /*------------------------------------------------------------------------*/ - - /** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ - function max(array) { - return (array && array.length) - ? baseExtremum(array, identity, baseGt) - : undefined; - } - - /** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ - function min(array) { - return (array && array.length) - ? baseExtremum(array, identity, baseLt) - : undefined; - } - - /*------------------------------------------------------------------------*/ - - // Add methods that return wrapped values in chain sequences. - lodash.assignIn = assignIn; - lodash.before = before; - lodash.bind = bind; - lodash.chain = chain; - lodash.compact = compact; - lodash.concat = concat; - lodash.create = create; - lodash.defaults = defaults; - lodash.defer = defer; - lodash.delay = delay; - lodash.filter = filter; - lodash.flatten = flatten; - lodash.flattenDeep = flattenDeep; - lodash.iteratee = iteratee; - lodash.keys = keys; - lodash.map = map; - lodash.matches = matches; - lodash.mixin = mixin; - lodash.negate = negate; - lodash.once = once; - lodash.pick = pick; - lodash.slice = slice; - lodash.sortBy = sortBy; - lodash.tap = tap; - lodash.thru = thru; - lodash.toArray = toArray; - lodash.values = values; - - // Add aliases. - lodash.extend = assignIn; - - // Add methods to `lodash.prototype`. - mixin(lodash, lodash); - - /*------------------------------------------------------------------------*/ - - // Add methods that return unwrapped values in chain sequences. - lodash.clone = clone; - lodash.escape = escape; - lodash.every = every; - lodash.find = find; - lodash.forEach = forEach; - lodash.has = has; - lodash.head = head; - lodash.identity = identity; - lodash.indexOf = indexOf; - lodash.isArguments = isArguments; - lodash.isArray = isArray; - lodash.isBoolean = isBoolean; - lodash.isDate = isDate; - lodash.isEmpty = isEmpty; - lodash.isEqual = isEqual; - lodash.isFinite = isFinite; - lodash.isFunction = isFunction; - lodash.isNaN = isNaN; - lodash.isNull = isNull; - lodash.isNumber = isNumber; - lodash.isObject = isObject; - lodash.isRegExp = isRegExp; - lodash.isString = isString; - lodash.isUndefined = isUndefined; - lodash.last = last; - lodash.max = max; - lodash.min = min; - lodash.noConflict = noConflict; - lodash.noop = noop; - lodash.reduce = reduce; - lodash.result = result; - lodash.size = size; - lodash.some = some; - lodash.uniqueId = uniqueId; - - // Add aliases. - lodash.each = forEach; - lodash.first = head; - - mixin(lodash, (function() { - var source = {}; - baseForOwn(lodash, function(func, methodName) { - if (!hasOwnProperty.call(lodash.prototype, methodName)) { - source[methodName] = func; - } - }); - return source; - }()), { 'chain': false }); - - /*------------------------------------------------------------------------*/ - - /** - * The semantic version number. - * - * @static - * @memberOf _ - * @type {string} - */ - lodash.VERSION = VERSION; - - // Add `Array` methods to `lodash.prototype`. - baseEach(['pop', 'join', 'replace', 'reverse', 'split', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { - var func = (/^(?:replace|split)$/.test(methodName) ? String.prototype : arrayProto)[methodName], - chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', - retUnwrapped = /^(?:pop|join|replace|shift)$/.test(methodName); - - lodash.prototype[methodName] = function() { - var args = arguments; - if (retUnwrapped && !this.__chain__) { - var value = this.value(); - return func.apply(isArray(value) ? value : [], args); - } - return this[chainName](function(value) { - return func.apply(isArray(value) ? value : [], args); - }); - }; - }); - - // Add chain sequence methods to the `lodash` wrapper. - lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; - - /*--------------------------------------------------------------------------*/ - - // Some AMD build optimizers, like r.js, check for condition patterns like: - if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { - // Expose Lodash on the global object to prevent errors when Lodash is - // loaded by a script tag in the presence of an AMD loader. - // See http://requirejs.org/docs/errors.html#mismatch for more details. - // Use `_.noConflict` to remove Lodash from the global object. - root._ = lodash; - - // Define as an anonymous module so, through path mapping, it can be - // referenced as the "underscore" module. - define(function() { - return lodash; - }); - } - // Check for `exports` after `define` in case a build optimizer adds it. - else if (freeModule) { - // Export for Node.js. - (freeModule.exports = lodash)._ = lodash; - // Export for CommonJS support. - freeExports._ = lodash; - } - else { - // Export to the global object. - root._ = lodash; - } -}.call(this)); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/core.min.js b/fundamentals/bug-challenge-es6/node_modules/lodash/core.min.js deleted file mode 100644 index ee223b232..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/core.min.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * @license - * Lodash (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE - * Build: `lodash core -o ./dist/lodash.core.js` - */ -;(function(){function n(n){return K(n)&&pn.call(n,"callee")&&!bn.call(n,"callee")}function t(n,t){return n.push.apply(n,t),n}function r(n){return function(t){return null==t?nn:t[n]}}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return d(t,function(t){return n[t]})}function o(n){return n instanceof i?n:new i(n)}function i(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function c(n,t,r,e){return n===nn||M(n,ln[r])&&!pn.call(e,r)?t:n}function f(n,t,r){ -if(typeof n!="function")throw new TypeError("Expected a function");return setTimeout(function(){n.apply(nn,r)},t)}function a(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function l(n,t,r){for(var e=-1,u=n.length;++et}function b(n,t,r,e,u){return n===t||(null==n||null==t||!H(n)&&!K(t)?n!==n&&t!==t:g(n,t,r,e,b,u))}function g(n,t,r,e,u,o){var i=Nn(n),c=Nn(t),f="[object Array]",a="[object Array]";i||(f=hn.call(n),f="[object Arguments]"==f?"[object Object]":f),c||(a=hn.call(t),a="[object Arguments]"==a?"[object Object]":a);var l="[object Object]"==f,c="[object Object]"==a,a=f==a;o||(o=[]); -var p=An(o,function(t){return t[0]==n}),s=An(o,function(n){return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=B(n,t,r,e,u,o);else n:{switch(f){case"[object Boolean]":case"[object Date]":case"[object Number]":r=M(+n,+t);break n;case"[object Error]":r=n.name==t.name&&n.message==t.message;break n;case"[object RegExp]":case"[object String]":r=n==t+"";break n}r=false}return o.pop(),r}return 1&r||(i=l&&pn.call(n,"__wrapped__"),f=c&&pn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=R(n,t,r,e,u,o), -o.pop(),r):(i=i?n.value():n,f=f?t.value():t,r=u(i,f,r,e,o),o.pop(),r)}function _(n){return typeof n=="function"?n:null==n?Y:(typeof n=="object"?m:r)(n)}function j(n,t){return nt&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++ei))return false;for(var c=-1,f=true,a=2&r?[]:nn;++cr?jn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++rarguments.length,mn); -}function J(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Fn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=nn),r}}function M(n,t){return n===t||n!==n&&t!==t}function U(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1=t),t&&!V(n)}function V(n){return!!H(n)&&(n=hn.call(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function H(n){var t=typeof n; -return null!=n&&("object"==t||"function"==t)}function K(n){return null!=n&&typeof n=="object"}function L(n){return typeof n=="number"||K(n)&&"[object Number]"==hn.call(n)}function Q(n){return typeof n=="string"||!Nn(n)&&K(n)&&"[object String]"==hn.call(n)}function W(n){return typeof n=="string"?n:null==n?"":n+""}function X(n){return null==n?[]:u(n,In(n))}function Y(n){return n}function Z(n,r,e){var u=In(r),o=v(r,u);null!=e||H(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=v(r,In(r)));var i=!(H(e)&&"chain"in e&&!e.chain),c=V(n); -return mn(o,function(e){var u=r[e];n[e]=u,c&&(n.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=n(this.__wrapped__);return(e.__actions__=E(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=r,e}return u.apply(n,t([this.value()],arguments))})}),n}var nn,tn=1/0,rn=/[&<>"']/g,en=RegExp(rn.source),un=typeof self=="object"&&self&&self.Object===Object&&self,on=typeof global=="object"&&global&&global.Object===Object&&global||un||Function("return this")(),cn=(un=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,fn=function(n){ -return function(t){return null==n?nn:n[t]}}({"&":"&","<":"<",">":">",'"':""","'":"'"}),an=Array.prototype,ln=Object.prototype,pn=ln.hasOwnProperty,sn=0,hn=ln.toString,vn=on._,yn=Object.create,bn=ln.propertyIsEnumerable,gn=on.isFinite,_n=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),jn=Math.max,dn=function(){function n(){}return function(t){return H(t)?yn?yn(t):(n.prototype=t,t=new n,n.prototype=nn,t):{}}}();i.prototype=dn(o.prototype),i.prototype.constructor=i; -var mn=function(n,t){return function(r,e){if(null==r)return r;if(!U(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++or&&(r=jn(e+r,0));n:{for(t=_(t),e=n.length,r+=-1;++re||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&r { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ -var countBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - ++result[key]; - } else { - baseAssignValue(result, key, 1); - } -}); - -module.exports = countBy; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/create.js b/fundamentals/bug-challenge-es6/node_modules/lodash/create.js deleted file mode 100644 index 919edb850..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/create.js +++ /dev/null @@ -1,43 +0,0 @@ -var baseAssign = require('./_baseAssign'), - baseCreate = require('./_baseCreate'); - -/** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ -function create(prototype, properties) { - var result = baseCreate(prototype); - return properties == null ? result : baseAssign(result, properties); -} - -module.exports = create; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/curry.js b/fundamentals/bug-challenge-es6/node_modules/lodash/curry.js deleted file mode 100644 index 918db1a4a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/curry.js +++ /dev/null @@ -1,57 +0,0 @@ -var createWrap = require('./_createWrap'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_CURRY_FLAG = 8; - -/** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ -function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curry.placeholder; - return result; -} - -// Assign default placeholders. -curry.placeholder = {}; - -module.exports = curry; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/curryRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/curryRight.js deleted file mode 100644 index c85b6f339..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/curryRight.js +++ /dev/null @@ -1,54 +0,0 @@ -var createWrap = require('./_createWrap'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_CURRY_RIGHT_FLAG = 16; - -/** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ -function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryRight.placeholder; - return result; -} - -// Assign default placeholders. -curryRight.placeholder = {}; - -module.exports = curryRight; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/date.js b/fundamentals/bug-challenge-es6/node_modules/lodash/date.js deleted file mode 100644 index cbf5b4109..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/date.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - 'now': require('./now') -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/debounce.js b/fundamentals/bug-challenge-es6/node_modules/lodash/debounce.js deleted file mode 100644 index 04d7dfd31..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/debounce.js +++ /dev/null @@ -1,188 +0,0 @@ -var isObject = require('./isObject'), - now = require('./now'), - toNumber = require('./toNumber'); - -/** Error message constants. */ -var FUNC_ERROR_TEXT = 'Expected a function'; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ -function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - result = wait - timeSinceLastCall; - - return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; -} - -module.exports = debounce; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/deburr.js b/fundamentals/bug-challenge-es6/node_modules/lodash/deburr.js deleted file mode 100644 index f85e314a0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/deburr.js +++ /dev/null @@ -1,45 +0,0 @@ -var deburrLetter = require('./_deburrLetter'), - toString = require('./toString'); - -/** Used to match Latin Unicode letters (excluding mathematical operators). */ -var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - -/** Used to compose unicode character classes. */ -var rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange; - -/** Used to compose unicode capture groups. */ -var rsCombo = '[' + rsComboRange + ']'; - -/** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ -var reComboMark = RegExp(rsCombo, 'g'); - -/** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ -function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); -} - -module.exports = deburr; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/defaultTo.js b/fundamentals/bug-challenge-es6/node_modules/lodash/defaultTo.js deleted file mode 100644 index 5b333592e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/defaultTo.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Checks `value` to determine whether a default value should be returned in - * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, - * or `undefined`. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Util - * @param {*} value The value to check. - * @param {*} defaultValue The default value. - * @returns {*} Returns the resolved value. - * @example - * - * _.defaultTo(1, 10); - * // => 1 - * - * _.defaultTo(undefined, 10); - * // => 10 - */ -function defaultTo(value, defaultValue) { - return (value == null || value !== value) ? defaultValue : value; -} - -module.exports = defaultTo; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/defaults.js b/fundamentals/bug-challenge-es6/node_modules/lodash/defaults.js deleted file mode 100644 index 5333b4256..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/defaults.js +++ /dev/null @@ -1,32 +0,0 @@ -var apply = require('./_apply'), - assignInDefaults = require('./_assignInDefaults'), - assignInWith = require('./assignInWith'), - baseRest = require('./_baseRest'); - -/** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ -var defaults = baseRest(function(args) { - args.push(undefined, assignInDefaults); - return apply(assignInWith, undefined, args); -}); - -module.exports = defaults; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/defaultsDeep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/defaultsDeep.js deleted file mode 100644 index 41680ed2d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/defaultsDeep.js +++ /dev/null @@ -1,30 +0,0 @@ -var apply = require('./_apply'), - baseRest = require('./_baseRest'), - mergeDefaults = require('./_mergeDefaults'), - mergeWith = require('./mergeWith'); - -/** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); - * // => { 'a': { 'b': 2, 'c': 3 } } - */ -var defaultsDeep = baseRest(function(args) { - args.push(undefined, mergeDefaults); - return apply(mergeWith, undefined, args); -}); - -module.exports = defaultsDeep; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/defer.js b/fundamentals/bug-challenge-es6/node_modules/lodash/defer.js deleted file mode 100644 index f6d6c6fa6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/defer.js +++ /dev/null @@ -1,26 +0,0 @@ -var baseDelay = require('./_baseDelay'), - baseRest = require('./_baseRest'); - -/** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ -var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); -}); - -module.exports = defer; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/delay.js b/fundamentals/bug-challenge-es6/node_modules/lodash/delay.js deleted file mode 100644 index bd554796f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/delay.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseDelay = require('./_baseDelay'), - baseRest = require('./_baseRest'), - toNumber = require('./toNumber'); - -/** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ -var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); -}); - -module.exports = delay; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/difference.js b/fundamentals/bug-challenge-es6/node_modules/lodash/difference.js deleted file mode 100644 index fa28bb301..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/difference.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - baseRest = require('./_baseRest'), - isArrayLikeObject = require('./isArrayLikeObject'); - -/** - * Creates an array of `array` values not included in the other given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * **Note:** Unlike `_.pullAll`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ -var difference = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; -}); - -module.exports = difference; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/differenceBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/differenceBy.js deleted file mode 100644 index 2cd63e7ec..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/differenceBy.js +++ /dev/null @@ -1,44 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'), - isArrayLikeObject = require('./isArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.difference` except that it accepts `iteratee` which - * is invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * **Note:** Unlike `_.pullAllBy`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ -var differenceBy = baseRest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2)) - : []; -}); - -module.exports = differenceBy; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/differenceWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/differenceWith.js deleted file mode 100644 index c0233f4b9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/differenceWith.js +++ /dev/null @@ -1,40 +0,0 @@ -var baseDifference = require('./_baseDifference'), - baseFlatten = require('./_baseFlatten'), - baseRest = require('./_baseRest'), - isArrayLikeObject = require('./isArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. The order and - * references of result values are determined by the first array. The comparator - * is invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.pullAllWith`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ -var differenceWith = baseRest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) - : []; -}); - -module.exports = differenceWith; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/divide.js b/fundamentals/bug-challenge-es6/node_modules/lodash/divide.js deleted file mode 100644 index 8cae0cd1b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/divide.js +++ /dev/null @@ -1,22 +0,0 @@ -var createMathOperation = require('./_createMathOperation'); - -/** - * Divide two numbers. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Math - * @param {number} dividend The first number in a division. - * @param {number} divisor The second number in a division. - * @returns {number} Returns the quotient. - * @example - * - * _.divide(6, 4); - * // => 1.5 - */ -var divide = createMathOperation(function(dividend, divisor) { - return dividend / divisor; -}, 1); - -module.exports = divide; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/drop.js b/fundamentals/bug-challenge-es6/node_modules/lodash/drop.js deleted file mode 100644 index d5c3cbaa4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/drop.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseSlice = require('./_baseSlice'), - toInteger = require('./toInteger'); - -/** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ -function drop(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); -} - -module.exports = drop; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/dropRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/dropRight.js deleted file mode 100644 index 441fe9968..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/dropRight.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseSlice = require('./_baseSlice'), - toInteger = require('./toInteger'); - -/** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ -function dropRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); -} - -module.exports = dropRight; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/dropRightWhile.js b/fundamentals/bug-challenge-es6/node_modules/lodash/dropRightWhile.js deleted file mode 100644 index 9ad36a044..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/dropRightWhile.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - baseWhile = require('./_baseWhile'); - -/** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ -function dropRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, baseIteratee(predicate, 3), true, true) - : []; -} - -module.exports = dropRightWhile; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/dropWhile.js b/fundamentals/bug-challenge-es6/node_modules/lodash/dropWhile.js deleted file mode 100644 index 903ef568c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/dropWhile.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - baseWhile = require('./_baseWhile'); - -/** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ -function dropWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, baseIteratee(predicate, 3), true) - : []; -} - -module.exports = dropWhile; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/each.js b/fundamentals/bug-challenge-es6/node_modules/lodash/each.js deleted file mode 100644 index 8800f4204..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/each.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEach'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/eachRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/eachRight.js deleted file mode 100644 index 3252b2aba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/eachRight.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEachRight'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/endsWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/endsWith.js deleted file mode 100644 index 76fc866e3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/endsWith.js +++ /dev/null @@ -1,43 +0,0 @@ -var baseClamp = require('./_baseClamp'), - baseToString = require('./_baseToString'), - toInteger = require('./toInteger'), - toString = require('./toString'); - -/** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ -function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - - var length = string.length; - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length); - - var end = position; - position -= target.length; - return position >= 0 && string.slice(position, end) == target; -} - -module.exports = endsWith; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/entries.js b/fundamentals/bug-challenge-es6/node_modules/lodash/entries.js deleted file mode 100644 index 7a88df204..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/entries.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairs'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/entriesIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/entriesIn.js deleted file mode 100644 index f6c6331c1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/entriesIn.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairsIn'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/eq.js b/fundamentals/bug-challenge-es6/node_modules/lodash/eq.js deleted file mode 100644 index a94068805..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/eq.js +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -module.exports = eq; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/escape.js b/fundamentals/bug-challenge-es6/node_modules/lodash/escape.js deleted file mode 100644 index 9247e0029..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/escape.js +++ /dev/null @@ -1,43 +0,0 @@ -var escapeHtmlChar = require('./_escapeHtmlChar'), - toString = require('./toString'); - -/** Used to match HTML entities and HTML characters. */ -var reUnescapedHtml = /[&<>"']/g, - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - -/** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ -function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; -} - -module.exports = escape; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/escapeRegExp.js b/fundamentals/bug-challenge-es6/node_modules/lodash/escapeRegExp.js deleted file mode 100644 index 0a58c69fc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/escapeRegExp.js +++ /dev/null @@ -1,32 +0,0 @@ -var toString = require('./toString'); - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); - -/** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ -function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) - ? string.replace(reRegExpChar, '\\$&') - : string; -} - -module.exports = escapeRegExp; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/every.js b/fundamentals/bug-challenge-es6/node_modules/lodash/every.js deleted file mode 100644 index 25080dac4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/every.js +++ /dev/null @@ -1,56 +0,0 @@ -var arrayEvery = require('./_arrayEvery'), - baseEvery = require('./_baseEvery'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ -function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, baseIteratee(predicate, 3)); -} - -module.exports = every; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/extend.js b/fundamentals/bug-challenge-es6/node_modules/lodash/extend.js deleted file mode 100644 index e00166c20..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/extend.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignIn'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/extendWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/extendWith.js deleted file mode 100644 index dbdcb3b4e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/extendWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInWith'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fill.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fill.js deleted file mode 100644 index ae13aa1c9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fill.js +++ /dev/null @@ -1,45 +0,0 @@ -var baseFill = require('./_baseFill'), - isIterateeCall = require('./_isIterateeCall'); - -/** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ -function fill(array, value, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); -} - -module.exports = fill; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/filter.js b/fundamentals/bug-challenge-es6/node_modules/lodash/filter.js deleted file mode 100644 index 52616be8b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/filter.js +++ /dev/null @@ -1,48 +0,0 @@ -var arrayFilter = require('./_arrayFilter'), - baseFilter = require('./_baseFilter'), - baseIteratee = require('./_baseIteratee'), - isArray = require('./isArray'); - -/** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ -function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, baseIteratee(predicate, 3)); -} - -module.exports = filter; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/find.js b/fundamentals/bug-challenge-es6/node_modules/lodash/find.js deleted file mode 100644 index de732ccb4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/find.js +++ /dev/null @@ -1,42 +0,0 @@ -var createFind = require('./_createFind'), - findIndex = require('./findIndex'); - -/** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ -var find = createFind(findIndex); - -module.exports = find; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/findIndex.js b/fundamentals/bug-challenge-es6/node_modules/lodash/findIndex.js deleted file mode 100644 index 4689069f8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/findIndex.js +++ /dev/null @@ -1,55 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIteratee = require('./_baseIteratee'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ -function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index); -} - -module.exports = findIndex; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/findKey.js b/fundamentals/bug-challenge-es6/node_modules/lodash/findKey.js deleted file mode 100644 index cac0248a9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/findKey.js +++ /dev/null @@ -1,44 +0,0 @@ -var baseFindKey = require('./_baseFindKey'), - baseForOwn = require('./_baseForOwn'), - baseIteratee = require('./_baseIteratee'); - -/** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ -function findKey(object, predicate) { - return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn); -} - -module.exports = findKey; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/findLast.js b/fundamentals/bug-challenge-es6/node_modules/lodash/findLast.js deleted file mode 100644 index 70b4271dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/findLast.js +++ /dev/null @@ -1,25 +0,0 @@ -var createFind = require('./_createFind'), - findLastIndex = require('./findLastIndex'); - -/** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ -var findLast = createFind(findLastIndex); - -module.exports = findLast; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/findLastIndex.js b/fundamentals/bug-challenge-es6/node_modules/lodash/findLastIndex.js deleted file mode 100644 index 7da3431f6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/findLastIndex.js +++ /dev/null @@ -1,59 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIteratee = require('./_baseIteratee'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ -function findLastIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index, true); -} - -module.exports = findLastIndex; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/findLastKey.js b/fundamentals/bug-challenge-es6/node_modules/lodash/findLastKey.js deleted file mode 100644 index 66fb9fbce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/findLastKey.js +++ /dev/null @@ -1,44 +0,0 @@ -var baseFindKey = require('./_baseFindKey'), - baseForOwnRight = require('./_baseForOwnRight'), - baseIteratee = require('./_baseIteratee'); - -/** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ -function findLastKey(object, predicate) { - return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight); -} - -module.exports = findLastKey; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/first.js b/fundamentals/bug-challenge-es6/node_modules/lodash/first.js deleted file mode 100644 index 53f4ad13e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/first.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./head'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/flatMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/flatMap.js deleted file mode 100644 index e6685068f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/flatMap.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'); - -/** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ -function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); -} - -module.exports = flatMap; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/flatMapDeep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/flatMapDeep.js deleted file mode 100644 index 4653d6033..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/flatMapDeep.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ -function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); -} - -module.exports = flatMapDeep; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/flatMapDepth.js b/fundamentals/bug-challenge-es6/node_modules/lodash/flatMapDepth.js deleted file mode 100644 index 6d72005c9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/flatMapDepth.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - map = require('./map'), - toInteger = require('./toInteger'); - -/** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ -function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); -} - -module.exports = flatMapDepth; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/flatten.js b/fundamentals/bug-challenge-es6/node_modules/lodash/flatten.js deleted file mode 100644 index 3f09f7f77..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/flatten.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseFlatten = require('./_baseFlatten'); - -/** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ -function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, 1) : []; -} - -module.exports = flatten; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/flattenDeep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/flattenDeep.js deleted file mode 100644 index 8ad585cf4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/flattenDeep.js +++ /dev/null @@ -1,25 +0,0 @@ -var baseFlatten = require('./_baseFlatten'); - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; - -/** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ -function flattenDeep(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, INFINITY) : []; -} - -module.exports = flattenDeep; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/flattenDepth.js b/fundamentals/bug-challenge-es6/node_modules/lodash/flattenDepth.js deleted file mode 100644 index 441fdcc22..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/flattenDepth.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseFlatten = require('./_baseFlatten'), - toInteger = require('./toInteger'); - -/** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ -function flattenDepth(array, depth) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); -} - -module.exports = flattenDepth; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/flip.js b/fundamentals/bug-challenge-es6/node_modules/lodash/flip.js deleted file mode 100644 index c28dd7896..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/flip.js +++ /dev/null @@ -1,28 +0,0 @@ -var createWrap = require('./_createWrap'); - -/** Used to compose bitmasks for function metadata. */ -var WRAP_FLIP_FLAG = 512; - -/** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new flipped function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ -function flip(func) { - return createWrap(func, WRAP_FLIP_FLAG); -} - -module.exports = flip; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/floor.js b/fundamentals/bug-challenge-es6/node_modules/lodash/floor.js deleted file mode 100644 index ab6dfa28a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/floor.js +++ /dev/null @@ -1,26 +0,0 @@ -var createRound = require('./_createRound'); - -/** - * Computes `number` rounded down to `precision`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Math - * @param {number} number The number to round down. - * @param {number} [precision=0] The precision to round down to. - * @returns {number} Returns the rounded down number. - * @example - * - * _.floor(4.006); - * // => 4 - * - * _.floor(0.046, 2); - * // => 0.04 - * - * _.floor(4060, -2); - * // => 4000 - */ -var floor = createRound('floor'); - -module.exports = floor; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/flow.js b/fundamentals/bug-challenge-es6/node_modules/lodash/flow.js deleted file mode 100644 index 74b6b62d4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/flow.js +++ /dev/null @@ -1,27 +0,0 @@ -var createFlow = require('./_createFlow'); - -/** - * Creates a function that returns the result of invoking the given functions - * with the `this` binding of the created function, where each successive - * invocation is supplied the return value of the previous. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {...(Function|Function[])} [funcs] The functions to invoke. - * @returns {Function} Returns the new composite function. - * @see _.flowRight - * @example - * - * function square(n) { - * return n * n; - * } - * - * var addSquare = _.flow([_.add, square]); - * addSquare(1, 2); - * // => 9 - */ -var flow = createFlow(); - -module.exports = flow; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/flowRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/flowRight.js deleted file mode 100644 index 114614105..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/flowRight.js +++ /dev/null @@ -1,26 +0,0 @@ -var createFlow = require('./_createFlow'); - -/** - * This method is like `_.flow` except that it creates a function that - * invokes the given functions from right to left. - * - * @static - * @since 3.0.0 - * @memberOf _ - * @category Util - * @param {...(Function|Function[])} [funcs] The functions to invoke. - * @returns {Function} Returns the new composite function. - * @see _.flow - * @example - * - * function square(n) { - * return n * n; - * } - * - * var addSquare = _.flowRight([square, _.add]); - * addSquare(1, 2); - * // => 9 - */ -var flowRight = createFlow(true); - -module.exports = flowRight; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/forEach.js b/fundamentals/bug-challenge-es6/node_modules/lodash/forEach.js deleted file mode 100644 index c64eaa73f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/forEach.js +++ /dev/null @@ -1,41 +0,0 @@ -var arrayEach = require('./_arrayEach'), - baseEach = require('./_baseEach'), - castFunction = require('./_castFunction'), - isArray = require('./isArray'); - -/** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, castFunction(iteratee)); -} - -module.exports = forEach; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/forEachRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/forEachRight.js deleted file mode 100644 index 7390ebaf8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/forEachRight.js +++ /dev/null @@ -1,31 +0,0 @@ -var arrayEachRight = require('./_arrayEachRight'), - baseEachRight = require('./_baseEachRight'), - castFunction = require('./_castFunction'), - isArray = require('./isArray'); - -/** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ -function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, castFunction(iteratee)); -} - -module.exports = forEachRight; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/forIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/forIn.js deleted file mode 100644 index 583a59638..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/forIn.js +++ /dev/null @@ -1,39 +0,0 @@ -var baseFor = require('./_baseFor'), - castFunction = require('./_castFunction'), - keysIn = require('./keysIn'); - -/** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ -function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, castFunction(iteratee), keysIn); -} - -module.exports = forIn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/forInRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/forInRight.js deleted file mode 100644 index 4aedf58af..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/forInRight.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseForRight = require('./_baseForRight'), - castFunction = require('./_castFunction'), - keysIn = require('./keysIn'); - -/** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ -function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, castFunction(iteratee), keysIn); -} - -module.exports = forInRight; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/forOwn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/forOwn.js deleted file mode 100644 index 94eed8402..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/forOwn.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseForOwn = require('./_baseForOwn'), - castFunction = require('./_castFunction'); - -/** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ -function forOwn(object, iteratee) { - return object && baseForOwn(object, castFunction(iteratee)); -} - -module.exports = forOwn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/forOwnRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/forOwnRight.js deleted file mode 100644 index 86f338f03..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/forOwnRight.js +++ /dev/null @@ -1,34 +0,0 @@ -var baseForOwnRight = require('./_baseForOwnRight'), - castFunction = require('./_castFunction'); - -/** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ -function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, castFunction(iteratee)); -} - -module.exports = forOwnRight; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp.js deleted file mode 100644 index e372dbbdf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp.js +++ /dev/null @@ -1,2 +0,0 @@ -var _ = require('./lodash.min').runInContext(); -module.exports = require('./fp/_baseConvert')(_, _); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/F.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/F.js deleted file mode 100644 index a05a63ad9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/F.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./stubFalse'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/T.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/T.js deleted file mode 100644 index e2ba8ea56..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/T.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./stubTrue'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/__.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/__.js deleted file mode 100644 index 4af98deb4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/__.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./placeholder'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_baseConvert.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_baseConvert.js deleted file mode 100644 index c9d324747..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_baseConvert.js +++ /dev/null @@ -1,567 +0,0 @@ -var mapping = require('./_mapping'), - fallbackHolder = require('./placeholder'); - -/** Built-in value reference. */ -var push = Array.prototype.push; - -/** - * Creates a function, with an arity of `n`, that invokes `func` with the - * arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} n The arity of the new function. - * @returns {Function} Returns the new function. - */ -function baseArity(func, n) { - return n == 2 - ? function(a, b) { return func.apply(undefined, arguments); } - : function(a) { return func.apply(undefined, arguments); }; -} - -/** - * Creates a function that invokes `func`, with up to `n` arguments, ignoring - * any additional arguments. - * - * @private - * @param {Function} func The function to cap arguments for. - * @param {number} n The arity cap. - * @returns {Function} Returns the new function. - */ -function baseAry(func, n) { - return n == 2 - ? function(a, b) { return func(a, b); } - : function(a) { return func(a); }; -} - -/** - * Creates a clone of `array`. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the cloned array. - */ -function cloneArray(array) { - var length = array ? array.length : 0, - result = Array(length); - - while (length--) { - result[length] = array[length]; - } - return result; -} - -/** - * Creates a function that clones a given object using the assignment `func`. - * - * @private - * @param {Function} func The assignment function. - * @returns {Function} Returns the new cloner function. - */ -function createCloner(func) { - return function(object) { - return func({}, object); - }; -} - -/** - * This function is like `_.spread` except that it includes arguments after those spread. - * - * @private - * @param {Function} func The function to spread arguments over. - * @param {number} start The start position of the spread. - * @returns {Function} Returns the new function. - */ -function spread(func, start) { - return function() { - var length = arguments.length, - args = Array(length); - - while (length--) { - args[length] = arguments[length]; - } - var array = args[start], - lastIndex = args.length - 1, - otherArgs = args.slice(0, start); - - if (array) { - push.apply(otherArgs, array); - } - if (start != lastIndex) { - push.apply(otherArgs, args.slice(start + 1)); - } - return func.apply(this, otherArgs); - }; -} - -/** - * Creates a function that wraps `func` and uses `cloner` to clone the first - * argument it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} cloner The function to clone arguments. - * @returns {Function} Returns the new immutable function. - */ -function wrapImmutable(func, cloner) { - return function() { - var length = arguments.length; - if (!length) { - return; - } - var args = Array(length); - while (length--) { - args[length] = arguments[length]; - } - var result = args[0] = cloner.apply(undefined, args); - func.apply(undefined, args); - return result; - }; -} - -/** - * The base implementation of `convert` which accepts a `util` object of methods - * required to perform conversions. - * - * @param {Object} util The util object. - * @param {string} name The name of the function to convert. - * @param {Function} func The function to convert. - * @param {Object} [options] The options object. - * @param {boolean} [options.cap=true] Specify capping iteratee arguments. - * @param {boolean} [options.curry=true] Specify currying. - * @param {boolean} [options.fixed=true] Specify fixed arity. - * @param {boolean} [options.immutable=true] Specify immutable operations. - * @param {boolean} [options.rearg=true] Specify rearranging arguments. - * @returns {Function|Object} Returns the converted function or object. - */ -function baseConvert(util, name, func, options) { - var setPlaceholder, - isLib = typeof name == 'function', - isObj = name === Object(name); - - if (isObj) { - options = func; - func = name; - name = undefined; - } - if (func == null) { - throw new TypeError; - } - options || (options = {}); - - var config = { - 'cap': 'cap' in options ? options.cap : true, - 'curry': 'curry' in options ? options.curry : true, - 'fixed': 'fixed' in options ? options.fixed : true, - 'immutable': 'immutable' in options ? options.immutable : true, - 'rearg': 'rearg' in options ? options.rearg : true - }; - - var forceCurry = ('curry' in options) && options.curry, - forceFixed = ('fixed' in options) && options.fixed, - forceRearg = ('rearg' in options) && options.rearg, - placeholder = isLib ? func : fallbackHolder, - pristine = isLib ? func.runInContext() : undefined; - - var helpers = isLib ? func : { - 'ary': util.ary, - 'assign': util.assign, - 'clone': util.clone, - 'curry': util.curry, - 'forEach': util.forEach, - 'isArray': util.isArray, - 'isFunction': util.isFunction, - 'iteratee': util.iteratee, - 'keys': util.keys, - 'rearg': util.rearg, - 'toInteger': util.toInteger, - 'toPath': util.toPath - }; - - var ary = helpers.ary, - assign = helpers.assign, - clone = helpers.clone, - curry = helpers.curry, - each = helpers.forEach, - isArray = helpers.isArray, - isFunction = helpers.isFunction, - keys = helpers.keys, - rearg = helpers.rearg, - toInteger = helpers.toInteger, - toPath = helpers.toPath; - - var aryMethodKeys = keys(mapping.aryMethod); - - var wrappers = { - 'castArray': function(castArray) { - return function() { - var value = arguments[0]; - return isArray(value) - ? castArray(cloneArray(value)) - : castArray.apply(undefined, arguments); - }; - }, - 'iteratee': function(iteratee) { - return function() { - var func = arguments[0], - arity = arguments[1], - result = iteratee(func, arity), - length = result.length; - - if (config.cap && typeof arity == 'number') { - arity = arity > 2 ? (arity - 2) : 1; - return (length && length <= arity) ? result : baseAry(result, arity); - } - return result; - }; - }, - 'mixin': function(mixin) { - return function(source) { - var func = this; - if (!isFunction(func)) { - return mixin(func, Object(source)); - } - var pairs = []; - each(keys(source), function(key) { - if (isFunction(source[key])) { - pairs.push([key, func.prototype[key]]); - } - }); - - mixin(func, Object(source)); - - each(pairs, function(pair) { - var value = pair[1]; - if (isFunction(value)) { - func.prototype[pair[0]] = value; - } else { - delete func.prototype[pair[0]]; - } - }); - return func; - }; - }, - 'nthArg': function(nthArg) { - return function(n) { - var arity = n < 0 ? 1 : (toInteger(n) + 1); - return curry(nthArg(n), arity); - }; - }, - 'rearg': function(rearg) { - return function(func, indexes) { - var arity = indexes ? indexes.length : 0; - return curry(rearg(func, indexes), arity); - }; - }, - 'runInContext': function(runInContext) { - return function(context) { - return baseConvert(util, runInContext(context), options); - }; - } - }; - - /*--------------------------------------------------------------------------*/ - - /** - * Casts `func` to a function with an arity capped iteratee if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @returns {Function} Returns the cast function. - */ - function castCap(name, func) { - if (config.cap) { - var indexes = mapping.iterateeRearg[name]; - if (indexes) { - return iterateeRearg(func, indexes); - } - var n = !isLib && mapping.iterateeAry[name]; - if (n) { - return iterateeAry(func, n); - } - } - return func; - } - - /** - * Casts `func` to a curried function if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @param {number} n The arity of `func`. - * @returns {Function} Returns the cast function. - */ - function castCurry(name, func, n) { - return (forceCurry || (config.curry && n > 1)) - ? curry(func, n) - : func; - } - - /** - * Casts `func` to a fixed arity function if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @param {number} n The arity cap. - * @returns {Function} Returns the cast function. - */ - function castFixed(name, func, n) { - if (config.fixed && (forceFixed || !mapping.skipFixed[name])) { - var data = mapping.methodSpread[name], - start = data && data.start; - - return start === undefined ? ary(func, n) : spread(func, start); - } - return func; - } - - /** - * Casts `func` to an rearged function if needed. - * - * @private - * @param {string} name The name of the function to inspect. - * @param {Function} func The function to inspect. - * @param {number} n The arity of `func`. - * @returns {Function} Returns the cast function. - */ - function castRearg(name, func, n) { - return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name])) - ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n]) - : func; - } - - /** - * Creates a clone of `object` by `path`. - * - * @private - * @param {Object} object The object to clone. - * @param {Array|string} path The path to clone by. - * @returns {Object} Returns the cloned object. - */ - function cloneByPath(object, path) { - path = toPath(path); - - var index = -1, - length = path.length, - lastIndex = length - 1, - result = clone(Object(object)), - nested = result; - - while (nested != null && ++index < length) { - var key = path[index], - value = nested[key]; - - if (value != null) { - nested[path[index]] = clone(index == lastIndex ? value : Object(value)); - } - nested = nested[key]; - } - return result; - } - - /** - * Converts `lodash` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. - * - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function} Returns the converted `lodash`. - */ - function convertLib(options) { - return _.runInContext.convert(options)(undefined); - } - - /** - * Create a converter function for `func` of `name`. - * - * @param {string} name The name of the function to convert. - * @param {Function} func The function to convert. - * @returns {Function} Returns the new converter function. - */ - function createConverter(name, func) { - var realName = mapping.aliasToReal[name] || name, - methodName = mapping.remap[realName] || realName, - oldOptions = options; - - return function(options) { - var newUtil = isLib ? pristine : helpers, - newFunc = isLib ? pristine[methodName] : func, - newOptions = assign(assign({}, oldOptions), options); - - return baseConvert(newUtil, realName, newFunc, newOptions); - }; - } - - /** - * Creates a function that wraps `func` to invoke its iteratee, with up to `n` - * arguments, ignoring any additional arguments. - * - * @private - * @param {Function} func The function to cap iteratee arguments for. - * @param {number} n The arity cap. - * @returns {Function} Returns the new function. - */ - function iterateeAry(func, n) { - return overArg(func, function(func) { - return typeof func == 'function' ? baseAry(func, n) : func; - }); - } - - /** - * Creates a function that wraps `func` to invoke its iteratee with arguments - * arranged according to the specified `indexes` where the argument value at - * the first index is provided as the first argument, the argument value at - * the second index is provided as the second argument, and so on. - * - * @private - * @param {Function} func The function to rearrange iteratee arguments for. - * @param {number[]} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - */ - function iterateeRearg(func, indexes) { - return overArg(func, function(func) { - var n = indexes.length; - return baseArity(rearg(baseAry(func, n), indexes), n); - }); - } - - /** - * Creates a function that invokes `func` with its first argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function() { - var length = arguments.length; - if (!length) { - return func(); - } - var args = Array(length); - while (length--) { - args[length] = arguments[length]; - } - var index = config.rearg ? 0 : (length - 1); - args[index] = transform(args[index]); - return func.apply(undefined, args); - }; - } - - /** - * Creates a function that wraps `func` and applys the conversions - * rules by `name`. - * - * @private - * @param {string} name The name of the function to wrap. - * @param {Function} func The function to wrap. - * @returns {Function} Returns the converted function. - */ - function wrap(name, func) { - var result, - realName = mapping.aliasToReal[name] || name, - wrapped = func, - wrapper = wrappers[realName]; - - if (wrapper) { - wrapped = wrapper(func); - } - else if (config.immutable) { - if (mapping.mutate.array[realName]) { - wrapped = wrapImmutable(func, cloneArray); - } - else if (mapping.mutate.object[realName]) { - wrapped = wrapImmutable(func, createCloner(func)); - } - else if (mapping.mutate.set[realName]) { - wrapped = wrapImmutable(func, cloneByPath); - } - } - each(aryMethodKeys, function(aryKey) { - each(mapping.aryMethod[aryKey], function(otherName) { - if (realName == otherName) { - var spreadData = mapping.methodSpread[realName], - afterRearg = spreadData && spreadData.afterRearg; - - result = afterRearg - ? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey) - : castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey); - - result = castCap(realName, result); - result = castCurry(realName, result, aryKey); - return false; - } - }); - return !result; - }); - - result || (result = wrapped); - if (result == func) { - result = forceCurry ? curry(result, 1) : function() { - return func.apply(this, arguments); - }; - } - result.convert = createConverter(realName, func); - if (mapping.placeholder[realName]) { - setPlaceholder = true; - result.placeholder = func.placeholder = placeholder; - } - return result; - } - - /*--------------------------------------------------------------------------*/ - - if (!isObj) { - return wrap(name, func); - } - var _ = func; - - // Convert methods by ary cap. - var pairs = []; - each(aryMethodKeys, function(aryKey) { - each(mapping.aryMethod[aryKey], function(key) { - var func = _[mapping.remap[key] || key]; - if (func) { - pairs.push([key, wrap(key, func)]); - } - }); - }); - - // Convert remaining methods. - each(keys(_), function(key) { - var func = _[key]; - if (typeof func == 'function') { - var length = pairs.length; - while (length--) { - if (pairs[length][0] == key) { - return; - } - } - func.convert = createConverter(key, func); - pairs.push([key, func]); - } - }); - - // Assign to `_` leaving `_.prototype` unchanged to allow chaining. - each(pairs, function(pair) { - _[pair[0]] = pair[1]; - }); - - _.convert = convertLib; - if (setPlaceholder) { - _.placeholder = placeholder; - } - // Assign aliases. - each(keys(_), function(key) { - each(mapping.realToAlias[key] || [], function(alias) { - _[alias] = _[key]; - }); - }); - - return _; -} - -module.exports = baseConvert; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_convertBrowser.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_convertBrowser.js deleted file mode 100644 index bde030dc0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_convertBrowser.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseConvert = require('./_baseConvert'); - -/** - * Converts `lodash` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. - * - * @param {Function} lodash The lodash function to convert. - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function} Returns the converted `lodash`. - */ -function browserConvert(lodash, options) { - return baseConvert(lodash, lodash, options); -} - -if (typeof _ == 'function' && typeof _.runInContext == 'function') { - _ = browserConvert(_.runInContext()); -} -module.exports = browserConvert; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_falseOptions.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_falseOptions.js deleted file mode 100644 index 773235e34..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_falseOptions.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - 'cap': false, - 'curry': false, - 'fixed': false, - 'immutable': false, - 'rearg': false -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_mapping.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_mapping.js deleted file mode 100644 index cbbcd99df..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_mapping.js +++ /dev/null @@ -1,367 +0,0 @@ -/** Used to map aliases to their real names. */ -exports.aliasToReal = { - - // Lodash aliases. - 'each': 'forEach', - 'eachRight': 'forEachRight', - 'entries': 'toPairs', - 'entriesIn': 'toPairsIn', - 'extend': 'assignIn', - 'extendAll': 'assignInAll', - 'extendAllWith': 'assignInAllWith', - 'extendWith': 'assignInWith', - 'first': 'head', - - // Methods that are curried variants of others. - 'conforms': 'conformsTo', - 'matches': 'isMatch', - 'property': 'get', - - // Ramda aliases. - '__': 'placeholder', - 'F': 'stubFalse', - 'T': 'stubTrue', - 'all': 'every', - 'allPass': 'overEvery', - 'always': 'constant', - 'any': 'some', - 'anyPass': 'overSome', - 'apply': 'spread', - 'assoc': 'set', - 'assocPath': 'set', - 'complement': 'negate', - 'compose': 'flowRight', - 'contains': 'includes', - 'dissoc': 'unset', - 'dissocPath': 'unset', - 'dropLast': 'dropRight', - 'dropLastWhile': 'dropRightWhile', - 'equals': 'isEqual', - 'identical': 'eq', - 'indexBy': 'keyBy', - 'init': 'initial', - 'invertObj': 'invert', - 'juxt': 'over', - 'omitAll': 'omit', - 'nAry': 'ary', - 'path': 'get', - 'pathEq': 'matchesProperty', - 'pathOr': 'getOr', - 'paths': 'at', - 'pickAll': 'pick', - 'pipe': 'flow', - 'pluck': 'map', - 'prop': 'get', - 'propEq': 'matchesProperty', - 'propOr': 'getOr', - 'props': 'at', - 'symmetricDifference': 'xor', - 'symmetricDifferenceBy': 'xorBy', - 'symmetricDifferenceWith': 'xorWith', - 'takeLast': 'takeRight', - 'takeLastWhile': 'takeRightWhile', - 'unapply': 'rest', - 'unnest': 'flatten', - 'useWith': 'overArgs', - 'where': 'conformsTo', - 'whereEq': 'isMatch', - 'zipObj': 'zipObject' -}; - -/** Used to map ary to method names. */ -exports.aryMethod = { - '1': [ - 'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create', - 'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow', - 'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll', - 'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse', - 'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart', - 'uniqueId', 'words', 'zipAll' - ], - '2': [ - 'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith', - 'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith', - 'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN', - 'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference', - 'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', - 'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex', - 'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach', - 'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get', - 'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection', - 'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy', - 'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty', - 'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit', - 'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial', - 'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll', - 'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove', - 'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex', - 'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy', - 'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', - 'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars', - 'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith', - 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject', - 'zipObjectDeep' - ], - '3': [ - 'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith', - 'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr', - 'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith', - 'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth', - 'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd', - 'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight', - 'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy', - 'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy', - 'xorWith', 'zipWith' - ], - '4': [ - 'fill', 'setWith', 'updateWith' - ] -}; - -/** Used to map ary to rearg configs. */ -exports.aryRearg = { - '2': [1, 0], - '3': [2, 0, 1], - '4': [3, 2, 0, 1] -}; - -/** Used to map method names to their iteratee ary. */ -exports.iterateeAry = { - 'dropRightWhile': 1, - 'dropWhile': 1, - 'every': 1, - 'filter': 1, - 'find': 1, - 'findFrom': 1, - 'findIndex': 1, - 'findIndexFrom': 1, - 'findKey': 1, - 'findLast': 1, - 'findLastFrom': 1, - 'findLastIndex': 1, - 'findLastIndexFrom': 1, - 'findLastKey': 1, - 'flatMap': 1, - 'flatMapDeep': 1, - 'flatMapDepth': 1, - 'forEach': 1, - 'forEachRight': 1, - 'forIn': 1, - 'forInRight': 1, - 'forOwn': 1, - 'forOwnRight': 1, - 'map': 1, - 'mapKeys': 1, - 'mapValues': 1, - 'partition': 1, - 'reduce': 2, - 'reduceRight': 2, - 'reject': 1, - 'remove': 1, - 'some': 1, - 'takeRightWhile': 1, - 'takeWhile': 1, - 'times': 1, - 'transform': 2 -}; - -/** Used to map method names to iteratee rearg configs. */ -exports.iterateeRearg = { - 'mapKeys': [1] -}; - -/** Used to map method names to rearg configs. */ -exports.methodRearg = { - 'assignInAllWith': [1, 0], - 'assignInWith': [1, 2, 0], - 'assignAllWith': [1, 0], - 'assignWith': [1, 2, 0], - 'differenceBy': [1, 2, 0], - 'differenceWith': [1, 2, 0], - 'getOr': [2, 1, 0], - 'intersectionBy': [1, 2, 0], - 'intersectionWith': [1, 2, 0], - 'isEqualWith': [1, 2, 0], - 'isMatchWith': [2, 1, 0], - 'mergeAllWith': [1, 0], - 'mergeWith': [1, 2, 0], - 'padChars': [2, 1, 0], - 'padCharsEnd': [2, 1, 0], - 'padCharsStart': [2, 1, 0], - 'pullAllBy': [2, 1, 0], - 'pullAllWith': [2, 1, 0], - 'rangeStep': [1, 2, 0], - 'rangeStepRight': [1, 2, 0], - 'setWith': [3, 1, 2, 0], - 'sortedIndexBy': [2, 1, 0], - 'sortedLastIndexBy': [2, 1, 0], - 'unionBy': [1, 2, 0], - 'unionWith': [1, 2, 0], - 'updateWith': [3, 1, 2, 0], - 'xorBy': [1, 2, 0], - 'xorWith': [1, 2, 0], - 'zipWith': [1, 2, 0] -}; - -/** Used to map method names to spread configs. */ -exports.methodSpread = { - 'assignAll': { 'start': 0 }, - 'assignAllWith': { 'start': 0 }, - 'assignInAll': { 'start': 0 }, - 'assignInAllWith': { 'start': 0 }, - 'defaultsAll': { 'start': 0 }, - 'defaultsDeepAll': { 'start': 0 }, - 'invokeArgs': { 'start': 2 }, - 'invokeArgsMap': { 'start': 2 }, - 'mergeAll': { 'start': 0 }, - 'mergeAllWith': { 'start': 0 }, - 'partial': { 'start': 1 }, - 'partialRight': { 'start': 1 }, - 'without': { 'start': 1 }, - 'zipAll': { 'start': 0 } -}; - -/** Used to identify methods which mutate arrays or objects. */ -exports.mutate = { - 'array': { - 'fill': true, - 'pull': true, - 'pullAll': true, - 'pullAllBy': true, - 'pullAllWith': true, - 'pullAt': true, - 'remove': true, - 'reverse': true - }, - 'object': { - 'assign': true, - 'assignAll': true, - 'assignAllWith': true, - 'assignIn': true, - 'assignInAll': true, - 'assignInAllWith': true, - 'assignInWith': true, - 'assignWith': true, - 'defaults': true, - 'defaultsAll': true, - 'defaultsDeep': true, - 'defaultsDeepAll': true, - 'merge': true, - 'mergeAll': true, - 'mergeAllWith': true, - 'mergeWith': true, - }, - 'set': { - 'set': true, - 'setWith': true, - 'unset': true, - 'update': true, - 'updateWith': true - } -}; - -/** Used to track methods with placeholder support */ -exports.placeholder = { - 'bind': true, - 'bindKey': true, - 'curry': true, - 'curryRight': true, - 'partial': true, - 'partialRight': true -}; - -/** Used to map real names to their aliases. */ -exports.realToAlias = (function() { - var hasOwnProperty = Object.prototype.hasOwnProperty, - object = exports.aliasToReal, - result = {}; - - for (var key in object) { - var value = object[key]; - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - } - return result; -}()); - -/** Used to map method names to other names. */ -exports.remap = { - 'assignAll': 'assign', - 'assignAllWith': 'assignWith', - 'assignInAll': 'assignIn', - 'assignInAllWith': 'assignInWith', - 'curryN': 'curry', - 'curryRightN': 'curryRight', - 'defaultsAll': 'defaults', - 'defaultsDeepAll': 'defaultsDeep', - 'findFrom': 'find', - 'findIndexFrom': 'findIndex', - 'findLastFrom': 'findLast', - 'findLastIndexFrom': 'findLastIndex', - 'getOr': 'get', - 'includesFrom': 'includes', - 'indexOfFrom': 'indexOf', - 'invokeArgs': 'invoke', - 'invokeArgsMap': 'invokeMap', - 'lastIndexOfFrom': 'lastIndexOf', - 'mergeAll': 'merge', - 'mergeAllWith': 'mergeWith', - 'padChars': 'pad', - 'padCharsEnd': 'padEnd', - 'padCharsStart': 'padStart', - 'propertyOf': 'get', - 'rangeStep': 'range', - 'rangeStepRight': 'rangeRight', - 'restFrom': 'rest', - 'spreadFrom': 'spread', - 'trimChars': 'trim', - 'trimCharsEnd': 'trimEnd', - 'trimCharsStart': 'trimStart', - 'zipAll': 'zip' -}; - -/** Used to track methods that skip fixing their arity. */ -exports.skipFixed = { - 'castArray': true, - 'flow': true, - 'flowRight': true, - 'iteratee': true, - 'mixin': true, - 'rearg': true, - 'runInContext': true -}; - -/** Used to track methods that skip rearranging arguments. */ -exports.skipRearg = { - 'add': true, - 'assign': true, - 'assignIn': true, - 'bind': true, - 'bindKey': true, - 'concat': true, - 'difference': true, - 'divide': true, - 'eq': true, - 'gt': true, - 'gte': true, - 'isEqual': true, - 'lt': true, - 'lte': true, - 'matchesProperty': true, - 'merge': true, - 'multiply': true, - 'overArgs': true, - 'partial': true, - 'partialRight': true, - 'propertyOf': true, - 'random': true, - 'range': true, - 'rangeRight': true, - 'subtract': true, - 'zip': true, - 'zipObject': true, - 'zipObjectDeep': true -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_util.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_util.js deleted file mode 100644 index 708446302..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/_util.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = { - 'ary': require('../ary'), - 'assign': require('../_baseAssign'), - 'clone': require('../clone'), - 'curry': require('../curry'), - 'forEach': require('../_arrayEach'), - 'isArray': require('../isArray'), - 'isFunction': require('../isFunction'), - 'iteratee': require('../iteratee'), - 'keys': require('../_baseKeys'), - 'rearg': require('../rearg'), - 'toInteger': require('../toInteger'), - 'toPath': require('../toPath') -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/add.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/add.js deleted file mode 100644 index 816eeece3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/add.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('add', require('../add')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/after.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/after.js deleted file mode 100644 index 21a0167ab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/after.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('after', require('../after')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/all.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/all.js deleted file mode 100644 index d0839f77e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/all.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./every'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/allPass.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/allPass.js deleted file mode 100644 index 79b73ef84..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/allPass.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./overEvery'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/always.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/always.js deleted file mode 100644 index 988770307..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/always.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./constant'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/any.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/any.js deleted file mode 100644 index 900ac25e8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/any.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./some'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/anyPass.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/anyPass.js deleted file mode 100644 index 2774ab37a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/anyPass.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./overSome'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/apply.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/apply.js deleted file mode 100644 index 2b7571296..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/apply.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./spread'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/array.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/array.js deleted file mode 100644 index fe939c2c2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/array.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../array')); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/ary.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/ary.js deleted file mode 100644 index 8edf18778..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/ary.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('ary', require('../ary')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assign.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assign.js deleted file mode 100644 index 23f47af17..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assign.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assign', require('../assign')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignAll.js deleted file mode 100644 index b1d36c7ef..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignAll', require('../assign')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignAllWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignAllWith.js deleted file mode 100644 index 21e836e6f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignAllWith', require('../assignWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignIn.js deleted file mode 100644 index 6e7c65fad..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignIn', require('../assignIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignInAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignInAll.js deleted file mode 100644 index 7ba75dba1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignInAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignInAll', require('../assignIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignInAllWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignInAllWith.js deleted file mode 100644 index e766903d4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignInAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignInAllWith', require('../assignInWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignInWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignInWith.js deleted file mode 100644 index acb592367..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignInWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignInWith', require('../assignInWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignWith.js deleted file mode 100644 index eb925212d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assignWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('assignWith', require('../assignWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assoc.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assoc.js deleted file mode 100644 index 7648820c9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assoc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./set'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assocPath.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assocPath.js deleted file mode 100644 index 7648820c9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/assocPath.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./set'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/at.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/at.js deleted file mode 100644 index cc39d257c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/at.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('at', require('../at')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/attempt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/attempt.js deleted file mode 100644 index 26ca42ea0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/attempt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('attempt', require('../attempt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/before.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/before.js deleted file mode 100644 index 7a2de65d2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/before.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('before', require('../before')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/bind.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/bind.js deleted file mode 100644 index 5cbe4f302..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/bind.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('bind', require('../bind')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/bindAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/bindAll.js deleted file mode 100644 index 6b4a4a0f2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/bindAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('bindAll', require('../bindAll')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/bindKey.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/bindKey.js deleted file mode 100644 index 6a46c6b19..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/bindKey.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('bindKey', require('../bindKey')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/camelCase.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/camelCase.js deleted file mode 100644 index 87b77b493..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/camelCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('camelCase', require('../camelCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/capitalize.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/capitalize.js deleted file mode 100644 index cac74e14f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/capitalize.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('capitalize', require('../capitalize'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/castArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/castArray.js deleted file mode 100644 index 8681c099e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/castArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('castArray', require('../castArray')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/ceil.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/ceil.js deleted file mode 100644 index f416b7294..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/ceil.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('ceil', require('../ceil')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/chain.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/chain.js deleted file mode 100644 index 604fe398b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/chain.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('chain', require('../chain'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/chunk.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/chunk.js deleted file mode 100644 index 871ab0858..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/chunk.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('chunk', require('../chunk')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/clamp.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/clamp.js deleted file mode 100644 index 3b06c01ce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/clamp.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('clamp', require('../clamp')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/clone.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/clone.js deleted file mode 100644 index cadb59c91..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/clone.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('clone', require('../clone'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/cloneDeep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/cloneDeep.js deleted file mode 100644 index a6107aac9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/cloneDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cloneDeep', require('../cloneDeep'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/cloneDeepWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/cloneDeepWith.js deleted file mode 100644 index 6f01e44a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/cloneDeepWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cloneDeepWith', require('../cloneDeepWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/cloneWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/cloneWith.js deleted file mode 100644 index aa8857810..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/cloneWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cloneWith', require('../cloneWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/collection.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/collection.js deleted file mode 100644 index fc8b328a0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/collection.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../collection')); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/commit.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/commit.js deleted file mode 100644 index 130a894f8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/commit.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('commit', require('../commit'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/compact.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/compact.js deleted file mode 100644 index ce8f7a1ac..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/compact.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('compact', require('../compact'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/complement.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/complement.js deleted file mode 100644 index 93eb462b3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/complement.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./negate'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/compose.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/compose.js deleted file mode 100644 index 1954e9423..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/compose.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./flowRight'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/concat.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/concat.js deleted file mode 100644 index e59346ad9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/concat.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('concat', require('../concat')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/cond.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/cond.js deleted file mode 100644 index 6a0120efd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/cond.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('cond', require('../cond'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/conforms.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/conforms.js deleted file mode 100644 index 3247f64a8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/conforms.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./conformsTo'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/conformsTo.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/conformsTo.js deleted file mode 100644 index aa7f41ec0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/conformsTo.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('conformsTo', require('../conformsTo')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/constant.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/constant.js deleted file mode 100644 index 9e406fc09..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/constant.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('constant', require('../constant'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/contains.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/contains.js deleted file mode 100644 index 594722af5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/contains.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./includes'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/convert.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/convert.js deleted file mode 100644 index 4795dc424..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/convert.js +++ /dev/null @@ -1,18 +0,0 @@ -var baseConvert = require('./_baseConvert'), - util = require('./_util'); - -/** - * Converts `func` of `name` to an immutable auto-curried iteratee-first data-last - * version with conversion `options` applied. If `name` is an object its methods - * will be converted. - * - * @param {string} name The name of the function to wrap. - * @param {Function} [func] The function to wrap. - * @param {Object} [options] The options object. See `baseConvert` for more details. - * @returns {Function|Object} Returns the converted function or object. - */ -function convert(name, func, options) { - return baseConvert(util, name, func, options); -} - -module.exports = convert; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/countBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/countBy.js deleted file mode 100644 index dfa464326..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/countBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('countBy', require('../countBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/create.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/create.js deleted file mode 100644 index 752025fb8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/create.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('create', require('../create')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/curry.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/curry.js deleted file mode 100644 index b0b4168c5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/curry.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curry', require('../curry')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/curryN.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/curryN.js deleted file mode 100644 index 2ae7d00a6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/curryN.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curryN', require('../curry')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/curryRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/curryRight.js deleted file mode 100644 index cb619eb5d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/curryRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curryRight', require('../curryRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/curryRightN.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/curryRightN.js deleted file mode 100644 index 2495afc89..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/curryRightN.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('curryRightN', require('../curryRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/date.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/date.js deleted file mode 100644 index 82cb952bc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/date.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../date')); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/debounce.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/debounce.js deleted file mode 100644 index 26122293a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/debounce.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('debounce', require('../debounce')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/deburr.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/deburr.js deleted file mode 100644 index 96463ab88..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/deburr.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('deburr', require('../deburr'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultTo.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultTo.js deleted file mode 100644 index d6b52a444..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultTo.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultTo', require('../defaultTo')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaults.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaults.js deleted file mode 100644 index e1a8e6e7d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaults.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaults', require('../defaults')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultsAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultsAll.js deleted file mode 100644 index 238fcc3c2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultsAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultsAll', require('../defaults')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultsDeep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultsDeep.js deleted file mode 100644 index 1f172ff94..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultsDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultsDeep', require('../defaultsDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultsDeepAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultsDeepAll.js deleted file mode 100644 index 6835f2f07..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defaultsDeepAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defaultsDeepAll', require('../defaultsDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defer.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defer.js deleted file mode 100644 index ec7990fe2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/defer.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('defer', require('../defer'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/delay.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/delay.js deleted file mode 100644 index 556dbd568..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/delay.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('delay', require('../delay')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/difference.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/difference.js deleted file mode 100644 index 2d0376542..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/difference.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('difference', require('../difference')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/differenceBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/differenceBy.js deleted file mode 100644 index 2f914910a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/differenceBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('differenceBy', require('../differenceBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/differenceWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/differenceWith.js deleted file mode 100644 index bcf5ad2e1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/differenceWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('differenceWith', require('../differenceWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dissoc.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dissoc.js deleted file mode 100644 index 7ec7be190..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dissoc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./unset'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dissocPath.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dissocPath.js deleted file mode 100644 index 7ec7be190..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dissocPath.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./unset'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/divide.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/divide.js deleted file mode 100644 index 82048c5e0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/divide.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('divide', require('../divide')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/drop.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/drop.js deleted file mode 100644 index 2fa9b4faa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/drop.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('drop', require('../drop')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropLast.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropLast.js deleted file mode 100644 index 174e52551..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropLast.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dropRight'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropLastWhile.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropLastWhile.js deleted file mode 100644 index be2a9d24a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropLastWhile.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./dropRightWhile'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropRight.js deleted file mode 100644 index e98881fcd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('dropRight', require('../dropRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropRightWhile.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropRightWhile.js deleted file mode 100644 index cacaa7019..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropRightWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('dropRightWhile', require('../dropRightWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropWhile.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropWhile.js deleted file mode 100644 index 285f864d1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/dropWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('dropWhile', require('../dropWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/each.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/each.js deleted file mode 100644 index 8800f4204..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/each.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEach'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/eachRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/eachRight.js deleted file mode 100644 index 3252b2aba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/eachRight.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./forEachRight'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/endsWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/endsWith.js deleted file mode 100644 index 17dc2a495..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/endsWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('endsWith', require('../endsWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/entries.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/entries.js deleted file mode 100644 index 7a88df204..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/entries.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairs'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/entriesIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/entriesIn.js deleted file mode 100644 index f6c6331c1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/entriesIn.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./toPairsIn'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/eq.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/eq.js deleted file mode 100644 index 9a3d21bf1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/eq.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('eq', require('../eq')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/equals.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/equals.js deleted file mode 100644 index e6a5ce0ca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/equals.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./isEqual'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/escape.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/escape.js deleted file mode 100644 index 52c1fbba6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/escape.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('escape', require('../escape'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/escapeRegExp.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/escapeRegExp.js deleted file mode 100644 index 369b2eff6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/escapeRegExp.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('escapeRegExp', require('../escapeRegExp'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/every.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/every.js deleted file mode 100644 index 95c2776c3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/every.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('every', require('../every')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/extend.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/extend.js deleted file mode 100644 index e00166c20..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/extend.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignIn'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/extendAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/extendAll.js deleted file mode 100644 index cc55b64fc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/extendAll.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInAll'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/extendAllWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/extendAllWith.js deleted file mode 100644 index 6679d208b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/extendAllWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInAllWith'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/extendWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/extendWith.js deleted file mode 100644 index dbdcb3b4e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/extendWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./assignInWith'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/fill.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/fill.js deleted file mode 100644 index b2d47e84e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/fill.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('fill', require('../fill')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/filter.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/filter.js deleted file mode 100644 index 796d501ce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/filter.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('filter', require('../filter')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/find.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/find.js deleted file mode 100644 index f805d336a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/find.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('find', require('../find')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findFrom.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findFrom.js deleted file mode 100644 index da8275e84..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findFrom', require('../find')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findIndex.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findIndex.js deleted file mode 100644 index 8c15fd116..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findIndex', require('../findIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findIndexFrom.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findIndexFrom.js deleted file mode 100644 index 32e98cb95..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findIndexFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findIndexFrom', require('../findIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findKey.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findKey.js deleted file mode 100644 index 475bcfa8a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findKey.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findKey', require('../findKey')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLast.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLast.js deleted file mode 100644 index 093fe94e7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLast.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLast', require('../findLast')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastFrom.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastFrom.js deleted file mode 100644 index 76c38fbad..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastFrom', require('../findLast')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastIndex.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastIndex.js deleted file mode 100644 index 36986df0b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastIndex', require('../findLastIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastIndexFrom.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastIndexFrom.js deleted file mode 100644 index 34c8176cf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastIndexFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastIndexFrom', require('../findLastIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastKey.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastKey.js deleted file mode 100644 index 5f81b604e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/findLastKey.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('findLastKey', require('../findLastKey')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/first.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/first.js deleted file mode 100644 index 53f4ad13e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/first.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./head'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatMap.js deleted file mode 100644 index d01dc4d04..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatMap', require('../flatMap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatMapDeep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatMapDeep.js deleted file mode 100644 index 569c42eb9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatMapDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatMapDeep', require('../flatMapDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatMapDepth.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatMapDepth.js deleted file mode 100644 index 6eb68fdee..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatMapDepth.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatMapDepth', require('../flatMapDepth')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatten.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatten.js deleted file mode 100644 index 30425d896..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flatten.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flatten', require('../flatten'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flattenDeep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flattenDeep.js deleted file mode 100644 index aed5db27c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flattenDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flattenDeep', require('../flattenDeep'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flattenDepth.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flattenDepth.js deleted file mode 100644 index ad65e378e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flattenDepth.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flattenDepth', require('../flattenDepth')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flip.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flip.js deleted file mode 100644 index 0547e7b4e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flip.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flip', require('../flip'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/floor.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/floor.js deleted file mode 100644 index a6cf3358e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/floor.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('floor', require('../floor')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flow.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flow.js deleted file mode 100644 index cd83677a6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flow.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flow', require('../flow')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flowRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flowRight.js deleted file mode 100644 index 972a5b9b1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/flowRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('flowRight', require('../flowRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forEach.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forEach.js deleted file mode 100644 index 2f494521c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forEach.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forEach', require('../forEach')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forEachRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forEachRight.js deleted file mode 100644 index 3ff97336b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forEachRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forEachRight', require('../forEachRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forIn.js deleted file mode 100644 index 9341749b1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forIn', require('../forIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forInRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forInRight.js deleted file mode 100644 index cecf8bbfa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forInRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forInRight', require('../forInRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forOwn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forOwn.js deleted file mode 100644 index 246449e9a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forOwn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forOwn', require('../forOwn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forOwnRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forOwnRight.js deleted file mode 100644 index c5e826e0d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/forOwnRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('forOwnRight', require('../forOwnRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/fromPairs.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/fromPairs.js deleted file mode 100644 index f8cc5968c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/fromPairs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('fromPairs', require('../fromPairs')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/function.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/function.js deleted file mode 100644 index dfe69b1fa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/function.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../function')); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/functions.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/functions.js deleted file mode 100644 index 09d1bb1ba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/functions.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('functions', require('../functions'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/functionsIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/functionsIn.js deleted file mode 100644 index 2cfeb83eb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/functionsIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('functionsIn', require('../functionsIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/get.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/get.js deleted file mode 100644 index 6d3a32863..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/get.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('get', require('../get')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/getOr.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/getOr.js deleted file mode 100644 index 7dbf771f0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/getOr.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('getOr', require('../get')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/groupBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/groupBy.js deleted file mode 100644 index fc0bc78a5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/groupBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('groupBy', require('../groupBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/gt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/gt.js deleted file mode 100644 index 9e57c8085..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/gt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('gt', require('../gt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/gte.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/gte.js deleted file mode 100644 index 458478638..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/gte.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('gte', require('../gte')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/has.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/has.js deleted file mode 100644 index b90129839..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/has.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('has', require('../has')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/hasIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/hasIn.js deleted file mode 100644 index b3c3d1a3f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/hasIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('hasIn', require('../hasIn')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/head.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/head.js deleted file mode 100644 index 2694f0a21..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/head.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('head', require('../head'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/identical.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/identical.js deleted file mode 100644 index 85563f4a4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/identical.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./eq'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/identity.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/identity.js deleted file mode 100644 index 096415a5d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/identity.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('identity', require('../identity'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/inRange.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/inRange.js deleted file mode 100644 index 202d940ba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/inRange.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('inRange', require('../inRange')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/includes.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/includes.js deleted file mode 100644 index 11467805c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/includes.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('includes', require('../includes')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/includesFrom.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/includesFrom.js deleted file mode 100644 index 683afdb46..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/includesFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('includesFrom', require('../includes')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/indexBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/indexBy.js deleted file mode 100644 index 7e64bc0fc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/indexBy.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./keyBy'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/indexOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/indexOf.js deleted file mode 100644 index 524658eb9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/indexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('indexOf', require('../indexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/indexOfFrom.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/indexOfFrom.js deleted file mode 100644 index d99c822f4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/indexOfFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('indexOfFrom', require('../indexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/init.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/init.js deleted file mode 100644 index 2f88d8b0e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/init.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./initial'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/initial.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/initial.js deleted file mode 100644 index b732ba0bd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/initial.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('initial', require('../initial'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/intersection.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/intersection.js deleted file mode 100644 index 52936d560..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/intersection.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('intersection', require('../intersection')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/intersectionBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/intersectionBy.js deleted file mode 100644 index 72629f277..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/intersectionBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('intersectionBy', require('../intersectionBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/intersectionWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/intersectionWith.js deleted file mode 100644 index e064f400f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/intersectionWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('intersectionWith', require('../intersectionWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invert.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invert.js deleted file mode 100644 index 2d5d1f0d4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invert.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invert', require('../invert')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invertBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invertBy.js deleted file mode 100644 index 63ca97ecb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invertBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invertBy', require('../invertBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invertObj.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invertObj.js deleted file mode 100644 index f1d842e49..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invertObj.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./invert'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invoke.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invoke.js deleted file mode 100644 index fcf17f0d5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invoke.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invoke', require('../invoke')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invokeArgs.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invokeArgs.js deleted file mode 100644 index d3f2953fa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invokeArgs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invokeArgs', require('../invoke')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invokeArgsMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invokeArgsMap.js deleted file mode 100644 index eaa9f84ff..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invokeArgsMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invokeArgsMap', require('../invokeMap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invokeMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invokeMap.js deleted file mode 100644 index 6515fd73f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/invokeMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('invokeMap', require('../invokeMap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArguments.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArguments.js deleted file mode 100644 index 1d93c9e59..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArguments.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArguments', require('../isArguments'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArray.js deleted file mode 100644 index ba7ade8dd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArray', require('../isArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArrayBuffer.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArrayBuffer.js deleted file mode 100644 index 5088513fa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArrayBuffer.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArrayBuffer', require('../isArrayBuffer'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArrayLike.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArrayLike.js deleted file mode 100644 index 8f1856bf6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArrayLike.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArrayLike', require('../isArrayLike'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArrayLikeObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArrayLikeObject.js deleted file mode 100644 index 21084984b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isArrayLikeObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isArrayLikeObject', require('../isArrayLikeObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isBoolean.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isBoolean.js deleted file mode 100644 index 9339f75b1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isBoolean.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isBoolean', require('../isBoolean'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isBuffer.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isBuffer.js deleted file mode 100644 index e60b12381..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isBuffer.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isBuffer', require('../isBuffer'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isDate.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isDate.js deleted file mode 100644 index dc41d089e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isDate.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isDate', require('../isDate'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isElement.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isElement.js deleted file mode 100644 index 18ee039a2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isElement.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isElement', require('../isElement'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isEmpty.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isEmpty.js deleted file mode 100644 index 0f4ae841e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isEmpty.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isEmpty', require('../isEmpty'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isEqual.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isEqual.js deleted file mode 100644 index 41383865f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isEqual.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isEqual', require('../isEqual')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isEqualWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isEqualWith.js deleted file mode 100644 index 029ff5cda..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isEqualWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isEqualWith', require('../isEqualWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isError.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isError.js deleted file mode 100644 index 3dfd81ccc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isError.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isError', require('../isError'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isFinite.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isFinite.js deleted file mode 100644 index 0b647b841..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isFinite.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isFinite', require('../isFinite'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isFunction.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isFunction.js deleted file mode 100644 index ff8e5c458..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isFunction.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isFunction', require('../isFunction'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isInteger.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isInteger.js deleted file mode 100644 index 67af4ff6d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isInteger', require('../isInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isLength.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isLength.js deleted file mode 100644 index fc101c5a6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isLength.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isLength', require('../isLength'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isMap.js deleted file mode 100644 index a209aa66f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isMap', require('../isMap'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isMatch.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isMatch.js deleted file mode 100644 index 6264ca17f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isMatch.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isMatch', require('../isMatch')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isMatchWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isMatchWith.js deleted file mode 100644 index d95f31935..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isMatchWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isMatchWith', require('../isMatchWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNaN.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNaN.js deleted file mode 100644 index 66a978f11..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNaN.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNaN', require('../isNaN'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNative.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNative.js deleted file mode 100644 index 3d775ba95..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNative.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNative', require('../isNative'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNil.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNil.js deleted file mode 100644 index 5952c028a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNil.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNil', require('../isNil'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNull.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNull.js deleted file mode 100644 index f201a354b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNull.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNull', require('../isNull'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNumber.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNumber.js deleted file mode 100644 index a2b5fa049..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isNumber.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isNumber', require('../isNumber'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isObject.js deleted file mode 100644 index 231ace03b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isObject', require('../isObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isObjectLike.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isObjectLike.js deleted file mode 100644 index f16082e6f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isObjectLike.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isObjectLike', require('../isObjectLike'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isPlainObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isPlainObject.js deleted file mode 100644 index b5bea90d3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isPlainObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isPlainObject', require('../isPlainObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isRegExp.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isRegExp.js deleted file mode 100644 index 12a1a3d71..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isRegExp.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isRegExp', require('../isRegExp'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isSafeInteger.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isSafeInteger.js deleted file mode 100644 index 7230f5520..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isSafeInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isSafeInteger', require('../isSafeInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isSet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isSet.js deleted file mode 100644 index 35c01f6fa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isSet.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isSet', require('../isSet'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isString.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isString.js deleted file mode 100644 index 1fd0679ef..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isString.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isString', require('../isString'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isSymbol.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isSymbol.js deleted file mode 100644 index 38676956d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isSymbol.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isSymbol', require('../isSymbol'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isTypedArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isTypedArray.js deleted file mode 100644 index 856795387..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isTypedArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isTypedArray', require('../isTypedArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isUndefined.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isUndefined.js deleted file mode 100644 index ddbca31ca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isUndefined.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isUndefined', require('../isUndefined'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isWeakMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isWeakMap.js deleted file mode 100644 index ef60c613c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isWeakMap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isWeakMap', require('../isWeakMap'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isWeakSet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isWeakSet.js deleted file mode 100644 index c99bfaa6d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/isWeakSet.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('isWeakSet', require('../isWeakSet'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/iteratee.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/iteratee.js deleted file mode 100644 index 9f0f71738..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/iteratee.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('iteratee', require('../iteratee')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/join.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/join.js deleted file mode 100644 index a220e003c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/join.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('join', require('../join')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/juxt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/juxt.js deleted file mode 100644 index f71e04e00..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/juxt.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./over'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/kebabCase.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/kebabCase.js deleted file mode 100644 index 60737f17c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/kebabCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('kebabCase', require('../kebabCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/keyBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/keyBy.js deleted file mode 100644 index 9a6a85d42..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/keyBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('keyBy', require('../keyBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/keys.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/keys.js deleted file mode 100644 index e12bb07f1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/keys.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('keys', require('../keys'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/keysIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/keysIn.js deleted file mode 100644 index f3eb36a8d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/keysIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('keysIn', require('../keysIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lang.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lang.js deleted file mode 100644 index 08cc9c14b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lang.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../lang')); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/last.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/last.js deleted file mode 100644 index 0f716993f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/last.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('last', require('../last'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lastIndexOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lastIndexOf.js deleted file mode 100644 index ddf39c301..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lastIndexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lastIndexOf', require('../lastIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lastIndexOfFrom.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lastIndexOfFrom.js deleted file mode 100644 index 1ff6a0b5a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lastIndexOfFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lastIndexOfFrom', require('../lastIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lowerCase.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lowerCase.js deleted file mode 100644 index ea64bc15d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lowerCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lowerCase', require('../lowerCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lowerFirst.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lowerFirst.js deleted file mode 100644 index 539720a3d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lowerFirst.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lowerFirst', require('../lowerFirst'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lt.js deleted file mode 100644 index a31d21ecc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lt', require('../lt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lte.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lte.js deleted file mode 100644 index d795d10ee..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/lte.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('lte', require('../lte')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/map.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/map.js deleted file mode 100644 index cf9879436..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/map.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('map', require('../map')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mapKeys.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mapKeys.js deleted file mode 100644 index 168458709..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mapKeys.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mapKeys', require('../mapKeys')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mapValues.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mapValues.js deleted file mode 100644 index 400497275..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mapValues.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mapValues', require('../mapValues')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/matches.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/matches.js deleted file mode 100644 index 29d1e1e4f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/matches.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./isMatch'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/matchesProperty.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/matchesProperty.js deleted file mode 100644 index 4575bd243..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/matchesProperty.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('matchesProperty', require('../matchesProperty')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/math.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/math.js deleted file mode 100644 index e8f50f792..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/math.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../math')); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/max.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/max.js deleted file mode 100644 index a66acac22..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/max.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('max', require('../max'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/maxBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/maxBy.js deleted file mode 100644 index d083fd64f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/maxBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('maxBy', require('../maxBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mean.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mean.js deleted file mode 100644 index 31172460c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mean.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mean', require('../mean'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/meanBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/meanBy.js deleted file mode 100644 index 556f25edf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/meanBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('meanBy', require('../meanBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/memoize.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/memoize.js deleted file mode 100644 index 638eec63b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/memoize.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('memoize', require('../memoize')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/merge.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/merge.js deleted file mode 100644 index ac66adde1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/merge.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('merge', require('../merge')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mergeAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mergeAll.js deleted file mode 100644 index a3674d671..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mergeAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mergeAll', require('../merge')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mergeAllWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mergeAllWith.js deleted file mode 100644 index 4bd4206dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mergeAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mergeAllWith', require('../mergeWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mergeWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mergeWith.js deleted file mode 100644 index 00d44d5e1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mergeWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mergeWith', require('../mergeWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/method.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/method.js deleted file mode 100644 index f4060c687..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/method.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('method', require('../method')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/methodOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/methodOf.js deleted file mode 100644 index 61399056f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/methodOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('methodOf', require('../methodOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/min.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/min.js deleted file mode 100644 index d12c6b40d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/min.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('min', require('../min'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/minBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/minBy.js deleted file mode 100644 index fdb9e24d8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/minBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('minBy', require('../minBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mixin.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mixin.js deleted file mode 100644 index 332e6fbfd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/mixin.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('mixin', require('../mixin')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/multiply.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/multiply.js deleted file mode 100644 index 4dcf0b0d4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/multiply.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('multiply', require('../multiply')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/nAry.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/nAry.js deleted file mode 100644 index f262a76cc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/nAry.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./ary'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/negate.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/negate.js deleted file mode 100644 index 8b6dc7c5b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/negate.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('negate', require('../negate'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/next.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/next.js deleted file mode 100644 index 140155e23..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/next.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('next', require('../next'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/noop.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/noop.js deleted file mode 100644 index b9e32cc8c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/noop.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('noop', require('../noop'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/now.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/now.js deleted file mode 100644 index 6de2068aa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/now.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('now', require('../now'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/nth.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/nth.js deleted file mode 100644 index da4fda740..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/nth.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('nth', require('../nth')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/nthArg.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/nthArg.js deleted file mode 100644 index fce316594..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/nthArg.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('nthArg', require('../nthArg')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/number.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/number.js deleted file mode 100644 index 5c10b8842..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/number.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../number')); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/object.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/object.js deleted file mode 100644 index ae39a1346..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/object.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../object')); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/omit.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/omit.js deleted file mode 100644 index fd685291e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/omit.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('omit', require('../omit')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/omitAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/omitAll.js deleted file mode 100644 index 144cf4b96..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/omitAll.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./omit'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/omitBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/omitBy.js deleted file mode 100644 index 90df73802..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/omitBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('omitBy', require('../omitBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/once.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/once.js deleted file mode 100644 index f8f0a5c73..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/once.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('once', require('../once'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/orderBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/orderBy.js deleted file mode 100644 index 848e21075..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/orderBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('orderBy', require('../orderBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/over.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/over.js deleted file mode 100644 index 01eba7b98..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/over.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('over', require('../over')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/overArgs.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/overArgs.js deleted file mode 100644 index 738556f0c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/overArgs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('overArgs', require('../overArgs')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/overEvery.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/overEvery.js deleted file mode 100644 index 9f5a032dc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/overEvery.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('overEvery', require('../overEvery')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/overSome.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/overSome.js deleted file mode 100644 index 15939d586..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/overSome.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('overSome', require('../overSome')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pad.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pad.js deleted file mode 100644 index f1dea4a98..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pad.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pad', require('../pad')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padChars.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padChars.js deleted file mode 100644 index d6e0804cd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padChars.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padChars', require('../pad')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padCharsEnd.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padCharsEnd.js deleted file mode 100644 index d4ab79ad3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padCharsEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padCharsEnd', require('../padEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padCharsStart.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padCharsStart.js deleted file mode 100644 index a08a30000..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padCharsStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padCharsStart', require('../padStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padEnd.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padEnd.js deleted file mode 100644 index a8522ec36..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padEnd', require('../padEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padStart.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padStart.js deleted file mode 100644 index f4ca79d4a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/padStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('padStart', require('../padStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/parseInt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/parseInt.js deleted file mode 100644 index 27314ccbc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/parseInt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('parseInt', require('../parseInt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/partial.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/partial.js deleted file mode 100644 index 5d4601598..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/partial.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('partial', require('../partial')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/partialRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/partialRight.js deleted file mode 100644 index 7f05fed0a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/partialRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('partialRight', require('../partialRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/partition.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/partition.js deleted file mode 100644 index 2ebcacc1f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/partition.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('partition', require('../partition')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/path.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/path.js deleted file mode 100644 index b29cfb213..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/path.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./get'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pathEq.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pathEq.js deleted file mode 100644 index 36c027a38..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pathEq.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./matchesProperty'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pathOr.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pathOr.js deleted file mode 100644 index 4ab582091..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pathOr.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./getOr'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/paths.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/paths.js deleted file mode 100644 index 1eb7950ac..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/paths.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./at'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pick.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pick.js deleted file mode 100644 index 197393de1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pick.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pick', require('../pick')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pickAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pickAll.js deleted file mode 100644 index a8ecd4613..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pickAll.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./pick'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pickBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pickBy.js deleted file mode 100644 index d832d16b6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pickBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pickBy', require('../pickBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pipe.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pipe.js deleted file mode 100644 index b2e1e2cc8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pipe.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./flow'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/placeholder.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/placeholder.js deleted file mode 100644 index 1ce17393b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/placeholder.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * The default argument placeholder value for methods. - * - * @type {Object} - */ -module.exports = {}; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/plant.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/plant.js deleted file mode 100644 index eca8f32b4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/plant.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('plant', require('../plant'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pluck.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pluck.js deleted file mode 100644 index 0d1e1abfa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pluck.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./map'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/prop.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/prop.js deleted file mode 100644 index b29cfb213..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/prop.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./get'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/propEq.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/propEq.js deleted file mode 100644 index 36c027a38..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/propEq.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./matchesProperty'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/propOr.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/propOr.js deleted file mode 100644 index 4ab582091..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/propOr.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./getOr'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/property.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/property.js deleted file mode 100644 index b29cfb213..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/property.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./get'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/propertyOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/propertyOf.js deleted file mode 100644 index f6273ee47..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/propertyOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('propertyOf', require('../get')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/props.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/props.js deleted file mode 100644 index 1eb7950ac..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/props.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./at'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pull.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pull.js deleted file mode 100644 index 8d7084f07..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pull.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pull', require('../pull')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAll.js deleted file mode 100644 index 98d5c9a73..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAll', require('../pullAll')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAllBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAllBy.js deleted file mode 100644 index 876bc3bf1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAllBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAllBy', require('../pullAllBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAllWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAllWith.js deleted file mode 100644 index f71ba4d73..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAllWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAllWith', require('../pullAllWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAt.js deleted file mode 100644 index e8b3bb612..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/pullAt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('pullAt', require('../pullAt')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/random.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/random.js deleted file mode 100644 index 99d852e4a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/random.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('random', require('../random')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/range.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/range.js deleted file mode 100644 index a6bb59118..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/range.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('range', require('../range')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rangeRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rangeRight.js deleted file mode 100644 index fdb712f94..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rangeRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rangeRight', require('../rangeRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rangeStep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rangeStep.js deleted file mode 100644 index d72dfc200..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rangeStep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rangeStep', require('../range')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rangeStepRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rangeStepRight.js deleted file mode 100644 index 8b2a67bc6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rangeStepRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rangeStepRight', require('../rangeRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rearg.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rearg.js deleted file mode 100644 index 678e02a32..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rearg.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rearg', require('../rearg')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/reduce.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/reduce.js deleted file mode 100644 index 4cef0a008..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/reduce.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reduce', require('../reduce')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/reduceRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/reduceRight.js deleted file mode 100644 index caf5bb515..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/reduceRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reduceRight', require('../reduceRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/reject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/reject.js deleted file mode 100644 index c16327386..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/reject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reject', require('../reject')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/remove.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/remove.js deleted file mode 100644 index e9d132736..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/remove.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('remove', require('../remove')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/repeat.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/repeat.js deleted file mode 100644 index 08470f247..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/repeat.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('repeat', require('../repeat')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/replace.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/replace.js deleted file mode 100644 index 2227db625..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/replace.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('replace', require('../replace')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rest.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rest.js deleted file mode 100644 index c1f3d64bd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/rest.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('rest', require('../rest')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/restFrom.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/restFrom.js deleted file mode 100644 index 714e42b5d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/restFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('restFrom', require('../rest')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/result.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/result.js deleted file mode 100644 index f86ce0712..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/result.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('result', require('../result')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/reverse.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/reverse.js deleted file mode 100644 index 07c9f5e49..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/reverse.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('reverse', require('../reverse')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/round.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/round.js deleted file mode 100644 index 4c0e5c829..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/round.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('round', require('../round')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sample.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sample.js deleted file mode 100644 index 6bea1254d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sample.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sample', require('../sample'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sampleSize.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sampleSize.js deleted file mode 100644 index 359ed6fcd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sampleSize.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sampleSize', require('../sampleSize')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/seq.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/seq.js deleted file mode 100644 index d8f42b0a4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/seq.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../seq')); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/set.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/set.js deleted file mode 100644 index 0b56a56c8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/set.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('set', require('../set')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/setWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/setWith.js deleted file mode 100644 index 0b584952b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/setWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('setWith', require('../setWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/shuffle.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/shuffle.js deleted file mode 100644 index aa3a1ca5b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/shuffle.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('shuffle', require('../shuffle'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/size.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/size.js deleted file mode 100644 index 7490136e1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/size.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('size', require('../size'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/slice.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/slice.js deleted file mode 100644 index 15945d321..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/slice.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('slice', require('../slice')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/snakeCase.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/snakeCase.js deleted file mode 100644 index a0ff7808e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/snakeCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('snakeCase', require('../snakeCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/some.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/some.js deleted file mode 100644 index a4fa2d006..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/some.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('some', require('../some')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortBy.js deleted file mode 100644 index e0790ad5b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortBy', require('../sortBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedIndex.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedIndex.js deleted file mode 100644 index 364a05435..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedIndex', require('../sortedIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedIndexBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedIndexBy.js deleted file mode 100644 index 9593dbd13..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedIndexBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedIndexBy', require('../sortedIndexBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedIndexOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedIndexOf.js deleted file mode 100644 index c9084cab6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedIndexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedIndexOf', require('../sortedIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedLastIndex.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedLastIndex.js deleted file mode 100644 index 47fe241af..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedLastIndex.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedLastIndex', require('../sortedLastIndex')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedLastIndexBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedLastIndexBy.js deleted file mode 100644 index 0f9a34732..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedLastIndexBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedLastIndexBy', require('../sortedLastIndexBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedLastIndexOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedLastIndexOf.js deleted file mode 100644 index 0d4d93278..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedLastIndexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedLastIndexOf', require('../sortedLastIndexOf')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedUniq.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedUniq.js deleted file mode 100644 index 882d28370..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedUniq.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedUniq', require('../sortedUniq'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedUniqBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedUniqBy.js deleted file mode 100644 index 033db91ca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sortedUniqBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sortedUniqBy', require('../sortedUniqBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/split.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/split.js deleted file mode 100644 index 14de1a7ef..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/split.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('split', require('../split')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/spread.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/spread.js deleted file mode 100644 index 2d11b7072..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/spread.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('spread', require('../spread')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/spreadFrom.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/spreadFrom.js deleted file mode 100644 index 0b630df1b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/spreadFrom.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('spreadFrom', require('../spread')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/startCase.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/startCase.js deleted file mode 100644 index ada98c943..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/startCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('startCase', require('../startCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/startsWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/startsWith.js deleted file mode 100644 index 985e2f294..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/startsWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('startsWith', require('../startsWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/string.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/string.js deleted file mode 100644 index 773b03704..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/string.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../string')); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubArray.js deleted file mode 100644 index cd604cb49..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubArray', require('../stubArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubFalse.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubFalse.js deleted file mode 100644 index 329666454..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubFalse.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubFalse', require('../stubFalse'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubObject.js deleted file mode 100644 index c6c8ec472..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubObject', require('../stubObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubString.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubString.js deleted file mode 100644 index 701051e8b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubString.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubString', require('../stubString'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubTrue.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubTrue.js deleted file mode 100644 index 9249082ce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/stubTrue.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('stubTrue', require('../stubTrue'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/subtract.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/subtract.js deleted file mode 100644 index d32b16d47..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/subtract.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('subtract', require('../subtract')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sum.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sum.js deleted file mode 100644 index 5cce12b32..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sum.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sum', require('../sum'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sumBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sumBy.js deleted file mode 100644 index c8826565f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/sumBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('sumBy', require('../sumBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/symmetricDifference.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/symmetricDifference.js deleted file mode 100644 index 78c16add6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/symmetricDifference.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./xor'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/symmetricDifferenceBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/symmetricDifferenceBy.js deleted file mode 100644 index 298fc7ff6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/symmetricDifferenceBy.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./xorBy'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/symmetricDifferenceWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/symmetricDifferenceWith.js deleted file mode 100644 index 70bc6faf2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/symmetricDifferenceWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./xorWith'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/tail.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/tail.js deleted file mode 100644 index f122f0ac3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/tail.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('tail', require('../tail'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/take.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/take.js deleted file mode 100644 index 9af98a7bd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/take.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('take', require('../take')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeLast.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeLast.js deleted file mode 100644 index e98c84a16..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeLast.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./takeRight'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeLastWhile.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeLastWhile.js deleted file mode 100644 index 5367968a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeLastWhile.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./takeRightWhile'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeRight.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeRight.js deleted file mode 100644 index b82950a69..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeRight.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('takeRight', require('../takeRight')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeRightWhile.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeRightWhile.js deleted file mode 100644 index 8ffb0a285..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeRightWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('takeRightWhile', require('../takeRightWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeWhile.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeWhile.js deleted file mode 100644 index 28136644f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/takeWhile.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('takeWhile', require('../takeWhile')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/tap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/tap.js deleted file mode 100644 index d33ad6ec1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/tap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('tap', require('../tap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/template.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/template.js deleted file mode 100644 index 74857e1c8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/template.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('template', require('../template')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/templateSettings.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/templateSettings.js deleted file mode 100644 index 7bcc0a82b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/templateSettings.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('templateSettings', require('../templateSettings'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/throttle.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/throttle.js deleted file mode 100644 index 77fff1428..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/throttle.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('throttle', require('../throttle')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/thru.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/thru.js deleted file mode 100644 index d42b3b1d8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/thru.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('thru', require('../thru')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/times.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/times.js deleted file mode 100644 index 0dab06dad..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/times.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('times', require('../times')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toArray.js deleted file mode 100644 index f0c360aca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toArray.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toArray', require('../toArray'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toFinite.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toFinite.js deleted file mode 100644 index 3a47687d6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toFinite.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toFinite', require('../toFinite'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toInteger.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toInteger.js deleted file mode 100644 index e0af6a750..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toInteger', require('../toInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toIterator.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toIterator.js deleted file mode 100644 index 65e6baa9d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toIterator.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toIterator', require('../toIterator'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toJSON.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toJSON.js deleted file mode 100644 index 2d718d0bc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toJSON.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toJSON', require('../toJSON'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toLength.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toLength.js deleted file mode 100644 index b97cdd935..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toLength.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toLength', require('../toLength'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toLower.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toLower.js deleted file mode 100644 index 616ef36ad..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toLower.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toLower', require('../toLower'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toNumber.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toNumber.js deleted file mode 100644 index d0c6f4d3d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toNumber.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toNumber', require('../toNumber'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPairs.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPairs.js deleted file mode 100644 index af783786e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPairs.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPairs', require('../toPairs'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPairsIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPairsIn.js deleted file mode 100644 index 66504abf1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPairsIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPairsIn', require('../toPairsIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPath.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPath.js deleted file mode 100644 index b4d5e50fb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPath.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPath', require('../toPath'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPlainObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPlainObject.js deleted file mode 100644 index 278bb8639..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toPlainObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toPlainObject', require('../toPlainObject'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toSafeInteger.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toSafeInteger.js deleted file mode 100644 index 367a26fdd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toSafeInteger.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toSafeInteger', require('../toSafeInteger'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toString.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toString.js deleted file mode 100644 index cec4f8e22..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toString.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toString', require('../toString'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toUpper.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toUpper.js deleted file mode 100644 index 54f9a5605..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/toUpper.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('toUpper', require('../toUpper'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/transform.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/transform.js deleted file mode 100644 index 759d088f1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/transform.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('transform', require('../transform')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trim.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trim.js deleted file mode 100644 index e6319a741..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trim.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trim', require('../trim')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimChars.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimChars.js deleted file mode 100644 index c9294de48..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimChars.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimChars', require('../trim')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimCharsEnd.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimCharsEnd.js deleted file mode 100644 index 284bc2f81..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimCharsEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimCharsEnd', require('../trimEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimCharsStart.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimCharsStart.js deleted file mode 100644 index ff0ee65df..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimCharsStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimCharsStart', require('../trimStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimEnd.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimEnd.js deleted file mode 100644 index 71908805f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimEnd.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimEnd', require('../trimEnd')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimStart.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimStart.js deleted file mode 100644 index fda902c38..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/trimStart.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('trimStart', require('../trimStart')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/truncate.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/truncate.js deleted file mode 100644 index d265c1dec..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/truncate.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('truncate', require('../truncate')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unapply.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unapply.js deleted file mode 100644 index c5dfe779d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unapply.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./rest'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unary.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unary.js deleted file mode 100644 index 286c945fb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unary.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unary', require('../unary'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unescape.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unescape.js deleted file mode 100644 index fddcb46e2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unescape.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unescape', require('../unescape'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/union.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/union.js deleted file mode 100644 index ef8228d74..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/union.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('union', require('../union')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unionBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unionBy.js deleted file mode 100644 index 603687a18..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unionBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unionBy', require('../unionBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unionWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unionWith.js deleted file mode 100644 index 65bb3a792..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unionWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unionWith', require('../unionWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniq.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniq.js deleted file mode 100644 index bc1852490..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniq.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniq', require('../uniq'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniqBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniqBy.js deleted file mode 100644 index 634c6a8bb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniqBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniqBy', require('../uniqBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniqWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniqWith.js deleted file mode 100644 index 0ec601a91..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniqWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniqWith', require('../uniqWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniqueId.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniqueId.js deleted file mode 100644 index aa8fc2f73..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/uniqueId.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('uniqueId', require('../uniqueId')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unnest.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unnest.js deleted file mode 100644 index 5d34060aa..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unnest.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./flatten'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unset.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unset.js deleted file mode 100644 index ea203a0f3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unset.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unset', require('../unset')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unzip.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unzip.js deleted file mode 100644 index cc364b3c5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unzip.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unzip', require('../unzip'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unzipWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unzipWith.js deleted file mode 100644 index 182eaa104..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/unzipWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('unzipWith', require('../unzipWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/update.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/update.js deleted file mode 100644 index b8ce2cc9e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/update.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('update', require('../update')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/updateWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/updateWith.js deleted file mode 100644 index d5e8282d9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/updateWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('updateWith', require('../updateWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/upperCase.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/upperCase.js deleted file mode 100644 index c886f2021..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/upperCase.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('upperCase', require('../upperCase'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/upperFirst.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/upperFirst.js deleted file mode 100644 index d8c04df54..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/upperFirst.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('upperFirst', require('../upperFirst'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/useWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/useWith.js deleted file mode 100644 index d8b3df5a4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/useWith.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./overArgs'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/util.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/util.js deleted file mode 100644 index 18c00baed..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/util.js +++ /dev/null @@ -1,2 +0,0 @@ -var convert = require('./convert'); -module.exports = convert(require('../util')); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/value.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/value.js deleted file mode 100644 index 555eec7a3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/value.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('value', require('../value'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/valueOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/valueOf.js deleted file mode 100644 index f968807d7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/valueOf.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('valueOf', require('../valueOf'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/values.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/values.js deleted file mode 100644 index 2dfc56136..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/values.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('values', require('../values'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/valuesIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/valuesIn.js deleted file mode 100644 index a1b2bb872..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/valuesIn.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('valuesIn', require('../valuesIn'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/where.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/where.js deleted file mode 100644 index 3247f64a8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/where.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./conformsTo'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/whereEq.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/whereEq.js deleted file mode 100644 index 29d1e1e4f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/whereEq.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./isMatch'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/without.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/without.js deleted file mode 100644 index bad9e125b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/without.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('without', require('../without')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/words.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/words.js deleted file mode 100644 index 4a901414b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/words.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('words', require('../words')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrap.js deleted file mode 100644 index e93bd8a1d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrap.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrap', require('../wrap')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperAt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperAt.js deleted file mode 100644 index 8f0a310fe..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperAt.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperAt', require('../wrapperAt'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperChain.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperChain.js deleted file mode 100644 index 2a48ea2b5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperChain.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperChain', require('../wrapperChain'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperLodash.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperLodash.js deleted file mode 100644 index a7162d084..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperLodash.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperLodash', require('../wrapperLodash'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperReverse.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperReverse.js deleted file mode 100644 index e1481aab9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperReverse.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperReverse', require('../wrapperReverse'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperValue.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperValue.js deleted file mode 100644 index 8eb9112f6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/wrapperValue.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('wrapperValue', require('../wrapperValue'), require('./_falseOptions')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/xor.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/xor.js deleted file mode 100644 index 29e281948..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/xor.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('xor', require('../xor')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/xorBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/xorBy.js deleted file mode 100644 index b355686db..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/xorBy.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('xorBy', require('../xorBy')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/xorWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/xorWith.js deleted file mode 100644 index 8e05739ad..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/xorWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('xorWith', require('../xorWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zip.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zip.js deleted file mode 100644 index 69e147a44..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zip.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zip', require('../zip')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipAll.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipAll.js deleted file mode 100644 index efa8ccbfb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipAll.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipAll', require('../zip')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipObj.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipObj.js deleted file mode 100644 index f4a34531b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipObj.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./zipObject'); diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipObject.js deleted file mode 100644 index 462dbb68c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipObject.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipObject', require('../zipObject')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipObjectDeep.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipObjectDeep.js deleted file mode 100644 index 53a5d3380..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipObjectDeep.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipObjectDeep', require('../zipObjectDeep')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipWith.js deleted file mode 100644 index c5cf9e212..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fp/zipWith.js +++ /dev/null @@ -1,5 +0,0 @@ -var convert = require('./convert'), - func = convert('zipWith', require('../zipWith')); - -func.placeholder = require('./placeholder'); -module.exports = func; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/fromPairs.js b/fundamentals/bug-challenge-es6/node_modules/lodash/fromPairs.js deleted file mode 100644 index ee7940d24..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/fromPairs.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['a', 1], ['b', 2]]); - * // => { 'a': 1, 'b': 2 } - */ -function fromPairs(pairs) { - var index = -1, - length = pairs == null ? 0 : pairs.length, - result = {}; - - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; -} - -module.exports = fromPairs; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/function.js b/fundamentals/bug-challenge-es6/node_modules/lodash/function.js deleted file mode 100644 index b0fc6d93e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/function.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - 'after': require('./after'), - 'ary': require('./ary'), - 'before': require('./before'), - 'bind': require('./bind'), - 'bindKey': require('./bindKey'), - 'curry': require('./curry'), - 'curryRight': require('./curryRight'), - 'debounce': require('./debounce'), - 'defer': require('./defer'), - 'delay': require('./delay'), - 'flip': require('./flip'), - 'memoize': require('./memoize'), - 'negate': require('./negate'), - 'once': require('./once'), - 'overArgs': require('./overArgs'), - 'partial': require('./partial'), - 'partialRight': require('./partialRight'), - 'rearg': require('./rearg'), - 'rest': require('./rest'), - 'spread': require('./spread'), - 'throttle': require('./throttle'), - 'unary': require('./unary'), - 'wrap': require('./wrap') -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/functions.js b/fundamentals/bug-challenge-es6/node_modules/lodash/functions.js deleted file mode 100644 index 9722928f5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/functions.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseFunctions = require('./_baseFunctions'), - keys = require('./keys'); - -/** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ -function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); -} - -module.exports = functions; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/functionsIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/functionsIn.js deleted file mode 100644 index f00345d06..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/functionsIn.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseFunctions = require('./_baseFunctions'), - keysIn = require('./keysIn'); - -/** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ -function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); -} - -module.exports = functionsIn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/get.js b/fundamentals/bug-challenge-es6/node_modules/lodash/get.js deleted file mode 100644 index 8805ff92c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/get.js +++ /dev/null @@ -1,33 +0,0 @@ -var baseGet = require('./_baseGet'); - -/** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ -function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; -} - -module.exports = get; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/groupBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/groupBy.js deleted file mode 100644 index babf4f6ba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/groupBy.js +++ /dev/null @@ -1,41 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - createAggregator = require('./_createAggregator'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ -var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } -}); - -module.exports = groupBy; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/gt.js b/fundamentals/bug-challenge-es6/node_modules/lodash/gt.js deleted file mode 100644 index 3a6628288..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/gt.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseGt = require('./_baseGt'), - createRelationalOperation = require('./_createRelationalOperation'); - -/** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ -var gt = createRelationalOperation(baseGt); - -module.exports = gt; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/gte.js b/fundamentals/bug-challenge-es6/node_modules/lodash/gte.js deleted file mode 100644 index 4180a687d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/gte.js +++ /dev/null @@ -1,30 +0,0 @@ -var createRelationalOperation = require('./_createRelationalOperation'); - -/** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ -var gte = createRelationalOperation(function(value, other) { - return value >= other; -}); - -module.exports = gte; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/has.js b/fundamentals/bug-challenge-es6/node_modules/lodash/has.js deleted file mode 100644 index 34df55e8e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/has.js +++ /dev/null @@ -1,35 +0,0 @@ -var baseHas = require('./_baseHas'), - hasPath = require('./_hasPath'); - -/** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ -function has(object, path) { - return object != null && hasPath(object, path, baseHas); -} - -module.exports = has; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/hasIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/hasIn.js deleted file mode 100644 index 06a368654..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/hasIn.js +++ /dev/null @@ -1,34 +0,0 @@ -var baseHasIn = require('./_baseHasIn'), - hasPath = require('./_hasPath'); - -/** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ -function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); -} - -module.exports = hasIn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/head.js b/fundamentals/bug-challenge-es6/node_modules/lodash/head.js deleted file mode 100644 index dee9d1f1e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/head.js +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ -function head(array) { - return (array && array.length) ? array[0] : undefined; -} - -module.exports = head; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/identity.js b/fundamentals/bug-challenge-es6/node_modules/lodash/identity.js deleted file mode 100644 index 2d5d963cd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/identity.js +++ /dev/null @@ -1,21 +0,0 @@ -/** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity(value) { - return value; -} - -module.exports = identity; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/inRange.js b/fundamentals/bug-challenge-es6/node_modules/lodash/inRange.js deleted file mode 100644 index f20728d92..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/inRange.js +++ /dev/null @@ -1,55 +0,0 @@ -var baseInRange = require('./_baseInRange'), - toFinite = require('./toFinite'), - toNumber = require('./toNumber'); - -/** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ -function inRange(number, start, end) { - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - number = toNumber(number); - return baseInRange(number, start, end); -} - -module.exports = inRange; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/includes.js b/fundamentals/bug-challenge-es6/node_modules/lodash/includes.js deleted file mode 100644 index ae0deedc9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/includes.js +++ /dev/null @@ -1,53 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'), - isArrayLike = require('./isArrayLike'), - isString = require('./isString'), - toInteger = require('./toInteger'), - values = require('./values'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'a': 1, 'b': 2 }, 1); - * // => true - * - * _.includes('abcd', 'bc'); - * // => true - */ -function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) - ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); -} - -module.exports = includes; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/index.js b/fundamentals/bug-challenge-es6/node_modules/lodash/index.js deleted file mode 100644 index 5d063e21f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lodash'); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/indexOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/indexOf.js deleted file mode 100644 index 3c644af2e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/indexOf.js +++ /dev/null @@ -1,42 +0,0 @@ -var baseIndexOf = require('./_baseIndexOf'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; - -/** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ -function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); -} - -module.exports = indexOf; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/initial.js b/fundamentals/bug-challenge-es6/node_modules/lodash/initial.js deleted file mode 100644 index f47fc5092..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/initial.js +++ /dev/null @@ -1,22 +0,0 @@ -var baseSlice = require('./_baseSlice'); - -/** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ -function initial(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 0, -1) : []; -} - -module.exports = initial; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/intersection.js b/fundamentals/bug-challenge-es6/node_modules/lodash/intersection.js deleted file mode 100644 index a94c13512..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/intersection.js +++ /dev/null @@ -1,30 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - baseRest = require('./_baseRest'), - castArrayLikeObject = require('./_castArrayLikeObject'); - -/** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ -var intersection = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; -}); - -module.exports = intersection; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/intersectionBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/intersectionBy.js deleted file mode 100644 index 31461aae5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/intersectionBy.js +++ /dev/null @@ -1,45 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - baseIteratee = require('./_baseIteratee'), - baseRest = require('./_baseRest'), - castArrayLikeObject = require('./_castArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ -var intersectionBy = baseRest(function(arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, baseIteratee(iteratee, 2)) - : []; -}); - -module.exports = intersectionBy; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/intersectionWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/intersectionWith.js deleted file mode 100644 index 63cabfaa4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/intersectionWith.js +++ /dev/null @@ -1,41 +0,0 @@ -var arrayMap = require('./_arrayMap'), - baseIntersection = require('./_baseIntersection'), - baseRest = require('./_baseRest'), - castArrayLikeObject = require('./_castArrayLikeObject'), - last = require('./last'); - -/** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. The order and references - * of result values are determined by the first array. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ -var intersectionWith = baseRest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - comparator = typeof comparator == 'function' ? comparator : undefined; - if (comparator) { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, undefined, comparator) - : []; -}); - -module.exports = intersectionWith; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/invert.js b/fundamentals/bug-challenge-es6/node_modules/lodash/invert.js deleted file mode 100644 index 21d10aba3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/invert.js +++ /dev/null @@ -1,27 +0,0 @@ -var constant = require('./constant'), - createInverter = require('./_createInverter'), - identity = require('./identity'); - -/** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ -var invert = createInverter(function(result, value, key) { - result[value] = key; -}, constant(identity)); - -module.exports = invert; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/invertBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/invertBy.js deleted file mode 100644 index e5ba0f709..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/invertBy.js +++ /dev/null @@ -1,44 +0,0 @@ -var baseIteratee = require('./_baseIteratee'), - createInverter = require('./_createInverter'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ -var invertBy = createInverter(function(result, value, key) { - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } -}, baseIteratee); - -module.exports = invertBy; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/invoke.js b/fundamentals/bug-challenge-es6/node_modules/lodash/invoke.js deleted file mode 100644 index 97d51eb5b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/invoke.js +++ /dev/null @@ -1,24 +0,0 @@ -var baseInvoke = require('./_baseInvoke'), - baseRest = require('./_baseRest'); - -/** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ -var invoke = baseRest(baseInvoke); - -module.exports = invoke; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/invokeMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/invokeMap.js deleted file mode 100644 index 8da5126c6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/invokeMap.js +++ /dev/null @@ -1,41 +0,0 @@ -var apply = require('./_apply'), - baseEach = require('./_baseEach'), - baseInvoke = require('./_baseInvoke'), - baseRest = require('./_baseRest'), - isArrayLike = require('./isArrayLike'); - -/** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `path` is a function, it's invoked - * for, and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ -var invokeMap = baseRest(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); - }); - return result; -}); - -module.exports = invokeMap; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isArguments.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isArguments.js deleted file mode 100644 index 8b9ed66cd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isArguments.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseIsArguments = require('./_baseIsArguments'), - isObjectLike = require('./isObjectLike'); - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto.propertyIsEnumerable; - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; - -module.exports = isArguments; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isArray.js deleted file mode 100644 index 88ab55fd0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isArray.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -module.exports = isArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isArrayBuffer.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isArrayBuffer.js deleted file mode 100644 index 12904a64b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isArrayBuffer.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsArrayBuffer = require('./_baseIsArrayBuffer'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer; - -/** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ -var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - -module.exports = isArrayBuffer; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isArrayLike.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isArrayLike.js deleted file mode 100644 index 0f9668056..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isArrayLike.js +++ /dev/null @@ -1,33 +0,0 @@ -var isFunction = require('./isFunction'), - isLength = require('./isLength'); - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -module.exports = isArrayLike; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isArrayLikeObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isArrayLikeObject.js deleted file mode 100644 index 6c4812a8d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isArrayLikeObject.js +++ /dev/null @@ -1,33 +0,0 @@ -var isArrayLike = require('./isArrayLike'), - isObjectLike = require('./isObjectLike'); - -/** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ -function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); -} - -module.exports = isArrayLikeObject; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isBoolean.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isBoolean.js deleted file mode 100644 index a43ed4b8f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isBoolean.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var boolTag = '[object Boolean]'; - -/** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ -function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && baseGetTag(value) == boolTag); -} - -module.exports = isBoolean; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isBuffer.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isBuffer.js deleted file mode 100644 index c103cc74e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isBuffer.js +++ /dev/null @@ -1,38 +0,0 @@ -var root = require('./_root'), - stubFalse = require('./stubFalse'); - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Built-in value references. */ -var Buffer = moduleExports ? root.Buffer : undefined; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = nativeIsBuffer || stubFalse; - -module.exports = isBuffer; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isDate.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isDate.js deleted file mode 100644 index 7f0209fca..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isDate.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsDate = require('./_baseIsDate'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsDate = nodeUtil && nodeUtil.isDate; - -/** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ -var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - -module.exports = isDate; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isElement.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isElement.js deleted file mode 100644 index 76ae29c3b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isElement.js +++ /dev/null @@ -1,25 +0,0 @@ -var isObjectLike = require('./isObjectLike'), - isPlainObject = require('./isPlainObject'); - -/** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ -function isElement(value) { - return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); -} - -module.exports = isElement; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isEmpty.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isEmpty.js deleted file mode 100644 index 3597294a4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isEmpty.js +++ /dev/null @@ -1,77 +0,0 @@ -var baseKeys = require('./_baseKeys'), - getTag = require('./_getTag'), - isArguments = require('./isArguments'), - isArray = require('./isArray'), - isArrayLike = require('./isArrayLike'), - isBuffer = require('./isBuffer'), - isPrototype = require('./_isPrototype'), - isTypedArray = require('./isTypedArray'); - -/** `Object#toString` result references. */ -var mapTag = '[object Map]', - setTag = '[object Set]'; - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ -function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; -} - -module.exports = isEmpty; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isEqual.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isEqual.js deleted file mode 100644 index 8a5412621..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isEqual.js +++ /dev/null @@ -1,35 +0,0 @@ -var baseIsEqual = require('./_baseIsEqual'); - -/** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are **not** supported. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ -function isEqual(value, other) { - return baseIsEqual(value, other); -} - -module.exports = isEqual; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isEqualWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isEqualWith.js deleted file mode 100644 index 21bdc7ffe..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isEqualWith.js +++ /dev/null @@ -1,41 +0,0 @@ -var baseIsEqual = require('./_baseIsEqual'); - -/** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ -function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; -} - -module.exports = isEqualWith; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isError.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isError.js deleted file mode 100644 index b4f41e000..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isError.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'), - isPlainObject = require('./isPlainObject'); - -/** `Object#toString` result references. */ -var domExcTag = '[object DOMException]', - errorTag = '[object Error]'; - -/** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ -function isError(value) { - if (!isObjectLike(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == errorTag || tag == domExcTag || - (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); -} - -module.exports = isError; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isFinite.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isFinite.js deleted file mode 100644 index 601842bc4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isFinite.js +++ /dev/null @@ -1,36 +0,0 @@ -var root = require('./_root'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsFinite = root.isFinite; - -/** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ -function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); -} - -module.exports = isFinite; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isFunction.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isFunction.js deleted file mode 100644 index 907a8cd8b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isFunction.js +++ /dev/null @@ -1,37 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObject = require('./isObject'); - -/** `Object#toString` result references. */ -var asyncTag = '[object AsyncFunction]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; -} - -module.exports = isFunction; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isInteger.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isInteger.js deleted file mode 100644 index 66aa87d57..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isInteger.js +++ /dev/null @@ -1,33 +0,0 @@ -var toInteger = require('./toInteger'); - -/** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ -function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); -} - -module.exports = isInteger; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isLength.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isLength.js deleted file mode 100644 index 3a95caa96..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isLength.js +++ /dev/null @@ -1,35 +0,0 @@ -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -module.exports = isLength; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isMap.js deleted file mode 100644 index 44f8517ee..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isMap.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsMap = require('./_baseIsMap'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsMap = nodeUtil && nodeUtil.isMap; - -/** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ -var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - -module.exports = isMap; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isMatch.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isMatch.js deleted file mode 100644 index 9773a18cd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isMatch.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'); - -/** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. - * - * **Note:** This method is equivalent to `_.matches` when `source` is - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.isMatch(object, { 'b': 2 }); - * // => true - * - * _.isMatch(object, { 'b': 1 }); - * // => false - */ -function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); -} - -module.exports = isMatch; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isMatchWith.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isMatchWith.js deleted file mode 100644 index 187b6a61d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isMatchWith.js +++ /dev/null @@ -1,41 +0,0 @@ -var baseIsMatch = require('./_baseIsMatch'), - getMatchData = require('./_getMatchData'); - -/** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ -function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); -} - -module.exports = isMatchWith; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isNaN.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isNaN.js deleted file mode 100644 index 7d0d783ba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isNaN.js +++ /dev/null @@ -1,38 +0,0 @@ -var isNumber = require('./isNumber'); - -/** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ -function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; -} - -module.exports = isNaN; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isNative.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isNative.js deleted file mode 100644 index f0cb8d580..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isNative.js +++ /dev/null @@ -1,40 +0,0 @@ -var baseIsNative = require('./_baseIsNative'), - isMaskable = require('./_isMaskable'); - -/** Error message constants. */ -var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.'; - -/** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the presence - * of the core-js package because core-js circumvents this kind of detection. - * Despite multiple requests, the core-js maintainer has made it clear: any - * attempt to fix the detection will be obstructed. As a result, we're left - * with little choice but to throw an error. Unfortunately, this also affects - * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on core-js. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ -function isNative(value) { - if (isMaskable(value)) { - throw new Error(CORE_ERROR_TEXT); - } - return baseIsNative(value); -} - -module.exports = isNative; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isNil.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isNil.js deleted file mode 100644 index 79f05052c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isNil.js +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ -function isNil(value) { - return value == null; -} - -module.exports = isNil; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isNull.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isNull.js deleted file mode 100644 index c0a374d7d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isNull.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ -function isNull(value) { - return value === null; -} - -module.exports = isNull; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isNumber.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isNumber.js deleted file mode 100644 index cd34ee464..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isNumber.js +++ /dev/null @@ -1,38 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var numberTag = '[object Number]'; - -/** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ -function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && baseGetTag(value) == numberTag); -} - -module.exports = isNumber; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isObject.js deleted file mode 100644 index 1dc893918..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isObject.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} - -module.exports = isObject; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isObjectLike.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isObjectLike.js deleted file mode 100644 index 301716b5a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isObjectLike.js +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -module.exports = isObjectLike; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isPlainObject.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isPlainObject.js deleted file mode 100644 index 238737313..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isPlainObject.js +++ /dev/null @@ -1,62 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - getPrototype = require('./_getPrototype'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var objectTag = '[object Object]'; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** Used to infer the `Object` constructor. */ -var objectCtorString = funcToString.call(Object); - -/** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ -function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return typeof Ctor == 'function' && Ctor instanceof Ctor && - funcToString.call(Ctor) == objectCtorString; -} - -module.exports = isPlainObject; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isRegExp.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isRegExp.js deleted file mode 100644 index 76c9b6e9c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isRegExp.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsRegExp = require('./_baseIsRegExp'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; - -/** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ -var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - -module.exports = isRegExp; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isSafeInteger.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isSafeInteger.js deleted file mode 100644 index 2a48526e1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isSafeInteger.js +++ /dev/null @@ -1,37 +0,0 @@ -var isInteger = require('./isInteger'); - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ -function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; -} - -module.exports = isSafeInteger; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isSet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isSet.js deleted file mode 100644 index ab88bdf81..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isSet.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsSet = require('./_baseIsSet'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsSet = nodeUtil && nodeUtil.isSet; - -/** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ -var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - -module.exports = isSet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isString.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isString.js deleted file mode 100644 index 627eb9c38..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isString.js +++ /dev/null @@ -1,30 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isArray = require('./isArray'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); -} - -module.exports = isString; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isSymbol.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isSymbol.js deleted file mode 100644 index dfb60b97f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isSymbol.js +++ /dev/null @@ -1,29 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); -} - -module.exports = isSymbol; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isTypedArray.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isTypedArray.js deleted file mode 100644 index da3f8dd19..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isTypedArray.js +++ /dev/null @@ -1,27 +0,0 @@ -var baseIsTypedArray = require('./_baseIsTypedArray'), - baseUnary = require('./_baseUnary'), - nodeUtil = require('./_nodeUtil'); - -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - -module.exports = isTypedArray; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isUndefined.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isUndefined.js deleted file mode 100644 index 377d121ab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isUndefined.js +++ /dev/null @@ -1,22 +0,0 @@ -/** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ -function isUndefined(value) { - return value === undefined; -} - -module.exports = isUndefined; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isWeakMap.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isWeakMap.js deleted file mode 100644 index 8d36f6638..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isWeakMap.js +++ /dev/null @@ -1,28 +0,0 @@ -var getTag = require('./_getTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var weakMapTag = '[object WeakMap]'; - -/** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ -function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; -} - -module.exports = isWeakMap; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/isWeakSet.js b/fundamentals/bug-challenge-es6/node_modules/lodash/isWeakSet.js deleted file mode 100644 index e628b261c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/isWeakSet.js +++ /dev/null @@ -1,28 +0,0 @@ -var baseGetTag = require('./_baseGetTag'), - isObjectLike = require('./isObjectLike'); - -/** `Object#toString` result references. */ -var weakSetTag = '[object WeakSet]'; - -/** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ -function isWeakSet(value) { - return isObjectLike(value) && baseGetTag(value) == weakSetTag; -} - -module.exports = isWeakSet; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/iteratee.js b/fundamentals/bug-challenge-es6/node_modules/lodash/iteratee.js deleted file mode 100644 index 61b73a8c0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/iteratee.js +++ /dev/null @@ -1,53 +0,0 @@ -var baseClone = require('./_baseClone'), - baseIteratee = require('./_baseIteratee'); - -/** Used to compose bitmasks for cloning. */ -var CLONE_DEEP_FLAG = 1; - -/** - * Creates a function that invokes `func` with the arguments of the created - * function. If `func` is a property name, the created function returns the - * property value for a given element. If `func` is an array or object, the - * created function returns `true` for elements that contain the equivalent - * source properties, otherwise it returns `false`. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Util - * @param {*} [func=_.identity] The value to convert to a callback. - * @returns {Function} Returns the callback. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); - * // => [{ 'user': 'barney', 'age': 36, 'active': true }] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, _.iteratee(['user', 'fred'])); - * // => [{ 'user': 'fred', 'age': 40 }] - * - * // The `_.property` iteratee shorthand. - * _.map(users, _.iteratee('user')); - * // => ['barney', 'fred'] - * - * // Create custom iteratee shorthands. - * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { - * return !_.isRegExp(func) ? iteratee(func) : function(string) { - * return func.test(string); - * }; - * }); - * - * _.filter(['abc', 'def'], /ef/); - * // => ['def'] - */ -function iteratee(func) { - return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); -} - -module.exports = iteratee; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/join.js b/fundamentals/bug-challenge-es6/node_modules/lodash/join.js deleted file mode 100644 index 45de079ff..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/join.js +++ /dev/null @@ -1,26 +0,0 @@ -/** Used for built-in method references. */ -var arrayProto = Array.prototype; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeJoin = arrayProto.join; - -/** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ -function join(array, separator) { - return array == null ? '' : nativeJoin.call(array, separator); -} - -module.exports = join; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/kebabCase.js b/fundamentals/bug-challenge-es6/node_modules/lodash/kebabCase.js deleted file mode 100644 index 8a52be645..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/kebabCase.js +++ /dev/null @@ -1,28 +0,0 @@ -var createCompounder = require('./_createCompounder'); - -/** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ -var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); -}); - -module.exports = kebabCase; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/keyBy.js b/fundamentals/bug-challenge-es6/node_modules/lodash/keyBy.js deleted file mode 100644 index acc007a0a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/keyBy.js +++ /dev/null @@ -1,36 +0,0 @@ -var baseAssignValue = require('./_baseAssignValue'), - createAggregator = require('./_createAggregator'); - -/** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ -var keyBy = createAggregator(function(result, value, key) { - baseAssignValue(result, key, value); -}); - -module.exports = keyBy; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/keys.js b/fundamentals/bug-challenge-es6/node_modules/lodash/keys.js deleted file mode 100644 index d143c7186..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/keys.js +++ /dev/null @@ -1,37 +0,0 @@ -var arrayLikeKeys = require('./_arrayLikeKeys'), - baseKeys = require('./_baseKeys'), - isArrayLike = require('./isArrayLike'); - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); -} - -module.exports = keys; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/keysIn.js b/fundamentals/bug-challenge-es6/node_modules/lodash/keysIn.js deleted file mode 100644 index a62308f2c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/keysIn.js +++ /dev/null @@ -1,32 +0,0 @@ -var arrayLikeKeys = require('./_arrayLikeKeys'), - baseKeysIn = require('./_baseKeysIn'), - isArrayLike = require('./isArrayLike'); - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); -} - -module.exports = keysIn; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/lang.js b/fundamentals/bug-challenge-es6/node_modules/lodash/lang.js deleted file mode 100644 index a3962169a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/lang.js +++ /dev/null @@ -1,58 +0,0 @@ -module.exports = { - 'castArray': require('./castArray'), - 'clone': require('./clone'), - 'cloneDeep': require('./cloneDeep'), - 'cloneDeepWith': require('./cloneDeepWith'), - 'cloneWith': require('./cloneWith'), - 'conformsTo': require('./conformsTo'), - 'eq': require('./eq'), - 'gt': require('./gt'), - 'gte': require('./gte'), - 'isArguments': require('./isArguments'), - 'isArray': require('./isArray'), - 'isArrayBuffer': require('./isArrayBuffer'), - 'isArrayLike': require('./isArrayLike'), - 'isArrayLikeObject': require('./isArrayLikeObject'), - 'isBoolean': require('./isBoolean'), - 'isBuffer': require('./isBuffer'), - 'isDate': require('./isDate'), - 'isElement': require('./isElement'), - 'isEmpty': require('./isEmpty'), - 'isEqual': require('./isEqual'), - 'isEqualWith': require('./isEqualWith'), - 'isError': require('./isError'), - 'isFinite': require('./isFinite'), - 'isFunction': require('./isFunction'), - 'isInteger': require('./isInteger'), - 'isLength': require('./isLength'), - 'isMap': require('./isMap'), - 'isMatch': require('./isMatch'), - 'isMatchWith': require('./isMatchWith'), - 'isNaN': require('./isNaN'), - 'isNative': require('./isNative'), - 'isNil': require('./isNil'), - 'isNull': require('./isNull'), - 'isNumber': require('./isNumber'), - 'isObject': require('./isObject'), - 'isObjectLike': require('./isObjectLike'), - 'isPlainObject': require('./isPlainObject'), - 'isRegExp': require('./isRegExp'), - 'isSafeInteger': require('./isSafeInteger'), - 'isSet': require('./isSet'), - 'isString': require('./isString'), - 'isSymbol': require('./isSymbol'), - 'isTypedArray': require('./isTypedArray'), - 'isUndefined': require('./isUndefined'), - 'isWeakMap': require('./isWeakMap'), - 'isWeakSet': require('./isWeakSet'), - 'lt': require('./lt'), - 'lte': require('./lte'), - 'toArray': require('./toArray'), - 'toFinite': require('./toFinite'), - 'toInteger': require('./toInteger'), - 'toLength': require('./toLength'), - 'toNumber': require('./toNumber'), - 'toPlainObject': require('./toPlainObject'), - 'toSafeInteger': require('./toSafeInteger'), - 'toString': require('./toString') -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/last.js b/fundamentals/bug-challenge-es6/node_modules/lodash/last.js deleted file mode 100644 index cad1eafaf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/last.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ -function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; -} - -module.exports = last; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/lastIndexOf.js b/fundamentals/bug-challenge-es6/node_modules/lodash/lastIndexOf.js deleted file mode 100644 index dabfb613a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/lastIndexOf.js +++ /dev/null @@ -1,46 +0,0 @@ -var baseFindIndex = require('./_baseFindIndex'), - baseIsNaN = require('./_baseIsNaN'), - strictLastIndexOf = require('./_strictLastIndexOf'), - toInteger = require('./toInteger'); - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max, - nativeMin = Math.min; - -/** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ -function lastIndexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return value === value - ? strictLastIndexOf(array, value, index) - : baseFindIndex(array, baseIsNaN, index, true); -} - -module.exports = lastIndexOf; diff --git a/fundamentals/bug-challenge-es6/node_modules/lodash/lodash.js b/fundamentals/bug-challenge-es6/node_modules/lodash/lodash.js deleted file mode 100644 index ebd96718f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/lodash/lodash.js +++ /dev/null @@ -1,17065 +0,0 @@ -/** - * @license - * Lodash - * Copyright JS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.17.2'; - - /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; - - /** Error message constants. */ - var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', - FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__'; - - /** Used as the maximum memoize cache size. */ - var MAX_MEMOIZE_SIZE = 500; - - /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; - - /** Used to compose bitmasks for cloning. */ - var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - - /** Used to compose bitmasks for value comparisons. */ - var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - - /** Used to compose bitmasks for function metadata. */ - var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_BOUND_FLAG = 4, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256, - WRAP_FLIP_FLAG = 512; - - /** Used as default options for `_.truncate`. */ - var DEFAULT_TRUNC_LENGTH = 30, - DEFAULT_TRUNC_OMISSION = '...'; - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 800, - HOT_SPAN = 16; - - /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2, - LAZY_WHILE_FLAG = 3; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991, - MAX_INTEGER = 1.7976931348623157e+308, - NAN = 0 / 0; - - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - - /** Used to associate wrap methods with their bit flags. */ - var wrapFlags = [ - ['ary', WRAP_ARY_FLAG], - ['bind', WRAP_BIND_FLAG], - ['bindKey', WRAP_BIND_KEY_FLAG], - ['curry', WRAP_CURRY_FLAG], - ['curryRight', WRAP_CURRY_RIGHT_FLAG], - ['flip', WRAP_FLIP_FLAG], - ['partial', WRAP_PARTIAL_FLAG], - ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], - ['rearg', WRAP_REARG_FLAG] - ]; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - asyncTag = '[object AsyncFunction]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - domExcTag = '[object DOMException]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - nullTag = '[object Null]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - undefinedTag = '[object Undefined]', - weakMapTag = '[object WeakMap]', - weakSetTag = '[object WeakSet]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to match empty string literals in compiled template source. */ - var reEmptyStringLeading = /\b__p \+= '';/g, - reEmptyStringMiddle = /\b(__p \+=) '' \+/g, - reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - - /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, - reUnescapedHtml = /[&<>"']/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to match template delimiters. */ - var reEscape = /<%-([\s\S]+?)%>/g, - reEvaluate = /<%([\s\S]+?)%>/g, - reInterpolate = /<%=([\s\S]+?)%>/g; - - /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - reLeadingDot = /^\./, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, - reHasRegExpChar = RegExp(reRegExpChar.source); - - /** Used to match leading and trailing whitespace. */ - var reTrim = /^\s+|\s+$/g, - reTrimStart = /^\s+/, - reTrimEnd = /\s+$/; - - /** Used to match wrap detail comments. */ - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, - reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & /; - - /** Used to match words composed of alphanumeric characters. */ - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - - /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; - - /** - * Used to match - * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). - */ - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** Used to match Latin Unicode letters (excluding mathematical operators). */ - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - - /** Used to ensure capturing order of template delimiters. */ - var reNoMatch = /($^)/; - - /** Used to match unescaped characters in compiled string literals. */ - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsDingbatRange = '\\u2700-\\u27bf', - rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', - rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', - rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', - rsPunctuationRange = '\\u2000-\\u206f', - rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', - rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', - rsVarRange = '\\ufe0e\\ufe0f', - rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - - /** Used to compose unicode capture groups. */ - var rsApos = "['\u2019]", - rsAstral = '[' + rsAstralRange + ']', - rsBreak = '[' + rsBreakRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsDigits = '\\d+', - rsDingbat = '[' + rsDingbatRange + ']', - rsLower = '[' + rsLowerRange + ']', - rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsUpper = '[' + rsUpperRange + ']', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', - rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', - rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', - rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', - reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsOrdLower = '\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)', - rsOrdUpper = '\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - - /** Used to match apostrophes. */ - var reApos = RegExp(rsApos, 'g'); - - /** - * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and - * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). - */ - var reComboMark = RegExp(rsCombo, 'g'); - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - - /** Used to match complex or compound words. */ - var reUnicodeWord = RegExp([ - rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', - rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, - rsUpper + '+' + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji - ].join('|'), 'g'); - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - - /** Used to detect strings that need a more robust regexp to match words. */ - var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - - /** Used to assign default `context` object properties. */ - var contextProps = [ - 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', - 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', - 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', - 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', - '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' - ]; - - /** Used to make template sourceURLs easier to identify. */ - var templateCounter = -1; - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = - typedArrayTags[errorTag] = typedArrayTags[funcTag] = - typedArrayTags[mapTag] = typedArrayTags[numberTag] = - typedArrayTags[objectTag] = typedArrayTags[regexpTag] = - typedArrayTags[setTag] = typedArrayTags[stringTag] = - typedArrayTags[weakMapTag] = false; - - /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = - cloneableTags[boolTag] = cloneableTags[dateTag] = - cloneableTags[float32Tag] = cloneableTags[float64Tag] = - cloneableTags[int8Tag] = cloneableTags[int16Tag] = - cloneableTags[int32Tag] = cloneableTags[mapTag] = - cloneableTags[numberTag] = cloneableTags[objectTag] = - cloneableTags[regexpTag] = cloneableTags[setTag] = - cloneableTags[stringTag] = cloneableTags[symbolTag] = - cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[weakMapTag] = false; - - /** Used to map Latin Unicode letters to basic Latin letters. */ - var deburredLetters = { - // Latin-1 Supplement block. - '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', - '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', - '\xc7': 'C', '\xe7': 'c', - '\xd0': 'D', '\xf0': 'd', - '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', - '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', - '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', - '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', - '\xd1': 'N', '\xf1': 'n', - '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', - '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', - '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', - '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', - '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', - '\xc6': 'Ae', '\xe6': 'ae', - '\xde': 'Th', '\xfe': 'th', - '\xdf': 'ss', - // Latin Extended-A block. - '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', - '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', - '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', - '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', - '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', - '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', - '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', - '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', - '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', - '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', - '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', - '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', - '\u0134': 'J', '\u0135': 'j', - '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', - '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', - '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', - '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', - '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', - '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', - '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', - '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', - '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', - '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', - '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', - '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', - '\u0163': 't', '\u0165': 't', '\u0167': 't', - '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', - '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', - '\u0174': 'W', '\u0175': 'w', - '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', - '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', - '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', - '\u0132': 'IJ', '\u0133': 'ij', - '\u0152': 'Oe', '\u0153': 'oe', - '\u0149': "'n", '\u017f': 's' - }; - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" - }; - - /** Used to escape characters for inclusion in compiled string literals. */ - var stringEscapes = { - '\\': '\\', - "'": "'", - '\n': 'n', - '\r': 'r', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat, - freeParseInt = parseInt; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; - - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process; - - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function() { - try { - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} - }()); - - /* Node.js helper references. */ - var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, - nodeIsDate = nodeUtil && nodeUtil.isDate, - nodeIsMap = nodeUtil && nodeUtil.isMap, - nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, - nodeIsSet = nodeUtil && nodeUtil.isSet, - nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - - /*--------------------------------------------------------------------------*/ - - /** - * Adds the key-value `pair` to `map`. - * - * @private - * @param {Object} map The map to modify. - * @param {Array} pair The key-value pair to add. - * @returns {Object} Returns `map`. - */ - function addMapEntry(map, pair) { - // Don't return `map.set` because it's not chainable in IE 11. - map.set(pair[0], pair[1]); - return map; - } - - /** - * Adds `value` to `set`. - * - * @private - * @param {Object} set The set to modify. - * @param {*} value The value to add. - * @returns {Object} Returns `set`. - */ - function addSetEntry(set, value) { - // Don't return `set.add` because it's not chainable in IE 11. - set.add(value); - return set; - } - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - - /** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; - } - - /** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.forEachRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEachRight(array, iteratee) { - var length = array == null ? 0 : array.length; - - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ - function arrayEvery(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } - - /** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && baseIndexOf(array, value, 0) > -1; - } - - /** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; - } - - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } - - /** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } - - /** - * A specialized version of `_.reduceRight` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the last element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array == null ? 0 : array.length; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; - } - - /** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } - - /** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - var asciiSize = baseProperty('length'); - - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split(''); - } - - /** - * Splits an ASCII `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function asciiWords(string) { - return string.match(reAsciiWord) || []; - } - - /** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; - return false; - } - }); - return result; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex); - } - - /** - * This function is like `baseIndexOf` except that it accepts a comparator. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @param {Function} comparator The comparator invoked per element. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ - function baseIsNaN(value) { - return value !== value; - } - - /** - * The base implementation of `_.mean` and `_.meanBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the mean. - */ - function baseMean(array, iteratee) { - var length = array == null ? 0 : array.length; - return length ? (baseSum(array, iteratee) / length) : NAN; - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; - }; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ - function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } - - /** - * The base implementation of `_.sum` and `_.sumBy` without support for - * iteratee shorthands. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {number} Returns the sum. - */ - function baseSum(array, iteratee) { - var result, - index = -1, - length = array.length; - - while (++index < length) { - var current = iteratee(array[index]); - if (current !== undefined) { - result = result === undefined ? current : (result + current); - } - } - return result; - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - - /** - * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array - * of key-value pairs for `object` corresponding to the property names of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the key-value pairs. - */ - function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); - } - - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - - /** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function cacheHas(cache, key) { - return cache.has(key); - } - - /** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; - - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ - function countHolders(array, placeholder) { - var length = array.length, - result = 0; - - while (length--) { - if (array[length] === placeholder) { - ++result; - } - } - return result; - } - - /** - * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A - * letters to basic Latin letters. - * - * @private - * @param {string} letter The matched letter to deburr. - * @returns {string} Returns the deburred letter. - */ - var deburrLetter = basePropertyOf(deburredLetters); - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes); - - /** - * Used by `_.template` to escape characters for inclusion in compiled string literals. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - function escapeStringChar(chr) { - return '\\' + stringEscapes[chr]; - } - - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; - } - - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string); - } - - /** - * Checks if `string` contains a word composed of Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a word is found, else `false`. - */ - function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); - } - - /** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ - function iteratorToArray(iterator) { - var data, - result = []; - - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; - } - - /** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ - function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - - /** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; - } - - /** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ - function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; - } - - /** - * Converts `set` to its value-value pairs. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the value-value pairs. - */ - function setToPairs(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; - } - - /** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * A specialized version of `_.lastIndexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array[index] === value) { - return index; - } - } - return index; - } - - /** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ - function stringSize(string) { - return hasUnicode(string) - ? unicodeSize(string) - : asciiSize(string); - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); - } - - /** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - - /** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; - } - - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } - - /** - * Splits a Unicode `string` into an array of its words. - * - * @private - * @param {string} The string to inspect. - * @returns {Array} Returns the words of `string`. - */ - function unicodeWords(string) { - return string.match(reUnicodeWord) || []; - } - - /*--------------------------------------------------------------------------*/ - - /** - * Create a new pristine `lodash` function using the `context` object. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Util - * @param {Object} [context=root] The context object. - * @returns {Function} Returns a new `lodash` function. - * @example - * - * _.mixin({ 'foo': _.constant('foo') }); - * - * var lodash = _.runInContext(); - * lodash.mixin({ 'bar': lodash.constant('bar') }); - * - * _.isFunction(_.foo); - * // => true - * _.isFunction(_.bar); - * // => false - * - * lodash.isFunction(lodash.foo); - * // => false - * lodash.isFunction(lodash.bar); - * // => true - * - * // Create a suped-up `defer` in Node.js. - * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; - */ - var runInContext = (function runInContext(context) { - context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); - - /** Built-in constructor references. */ - var Array = context.Array, - Date = context.Date, - Error = context.Error, - Function = context.Function, - Math = context.Math, - Object = context.Object, - RegExp = context.RegExp, - String = context.String, - TypeError = context.TypeError; - - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; - - /** Used to detect overreaching core-js shims. */ - var coreJsData = context['__core-js_shared__']; - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString = objectProto.toString; - - /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object); - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** Built-in value references. */ - var Buffer = moduleExports ? context.Buffer : undefined, - Symbol = context.Symbol, - Uint8Array = context.Uint8Array, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, - getPrototype = overArg(Object.getPrototypeOf, Object), - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice, - spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, - symIterator = Symbol ? Symbol.iterator : undefined, - symToStringTag = Symbol ? Symbol.toStringTag : undefined; - - var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} - }()); - - /** Mocked built-ins. */ - var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, - ctxNow = Date && Date.now !== root.Date.now && Date.now, - ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeFloor = Math.floor, - nativeGetSymbols = Object.getOwnPropertySymbols, - nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, - nativeIsFinite = context.isFinite, - nativeJoin = arrayProto.join, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max, - nativeMin = Math.min, - nativeNow = Date.now, - nativeParseInt = context.parseInt, - nativeRandom = Math.random, - nativeReverse = arrayProto.reverse; - - /* Built-in method references that are verified to be native. */ - var DataView = getNative(context, 'DataView'), - Map = getNative(context, 'Map'), - Promise = getNative(context, 'Promise'), - Set = getNative(context, 'Set'), - WeakMap = getNative(context, 'WeakMap'), - nativeCreate = getNative(Object, 'create'); - - /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap; - - /** Used to lookup unminified function names. */ - var realNames = {}; - - /** Used to detect maps, sets, and weakmaps. */ - var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array of at least `200` elements - * and any iteratees accept only one argument. The heuristic for whether a - * section qualifies for shortcut fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; - }; - }()); - - /** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ - function baseLodash() { - // No operation performed. - } - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; - } - - /** - * By default, the template delimiters used by lodash are like those in - * embedded Ruby (ERB). Change the following template settings to use - * alternative delimiters. - * - * @static - * @memberOf _ - * @type {Object} - */ - lodash.templateSettings = { - - /** - * Used to detect `data` property values to be HTML-escaped. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'escape': reEscape, - - /** - * Used to detect code to be evaluated. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'evaluate': reEvaluate, - - /** - * Used to detect `data` property values to inject. - * - * @memberOf _.templateSettings - * @type {RegExp} - */ - 'interpolate': reInterpolate, - - /** - * Used to reference the data object in the template text. - * - * @memberOf _.templateSettings - * @type {string} - */ - 'variable': '', - - /** - * Used to import variables into the compiled template. - * - * @memberOf _.templateSettings - * @type {Object} - */ - 'imports': { - - /** - * A reference to the `lodash` function. - * - * @memberOf _.templateSettings.imports - * @type {Function} - */ - '_': lodash - } - }; - - // Ensure wrappers are instances of `baseLodash`. - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; - - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } - - /** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; - } - - /** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } - - /** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || arrLength < LARGE_ARRAY_SIZE || - (arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; - } - - // Ensure `LazyWrapper` is an instance of `baseLodash`. - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; - } - - /** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; - } - - /** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; - } - - /** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); - } - - /** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ - function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; - } - - // Add methods to `Hash`. - Hash.prototype.clear = hashClear; - Hash.prototype['delete'] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ - function listCacheClear() { - this.__data__ = []; - this.size = 0; - } - - /** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; - } - - /** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; - } - - /** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } - - /** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ - function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; - } - - // Add methods to `ListCache`. - ListCache.prototype.clear = listCacheClear; - ListCache.prototype['delete'] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ - function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash - }; - } - - /** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; - } - - /** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } - - /** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } - - /** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ - function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; - } - - // Add methods to `MapCache`. - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype['delete'] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ - function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } - } - - /** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } - - /** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ - function setCacheHas(value) { - return this.__data__.has(value); - } - - // Add methods to `SetCache`. - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; - } - - /** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ - function stackClear() { - this.__data__ = new ListCache; - this.size = 0; - } - - /** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; - } - - /** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function stackGet(key) { - return this.__data__.get(key); - } - - /** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function stackHas(key) { - return this.__data__.has(key); - } - - /** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ - function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; - } - - // Add methods to `Stack`. - Stack.prototype.clear = stackClear; - Stack.prototype['delete'] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; - } - - /** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ - function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; - } - - /** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); - } - - /** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } - - /** - * Used by `_.defaults` to customize its `_.assignIn` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to assign. - * @param {Object} object The parent object of `objValue`. - * @returns {*} Returns the value to assign. - */ - function assignInDefaults(objValue, srcValue, key, object) { - if (objValue === undefined || - (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { - return srcValue; - } - return objValue; - } - - /** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; - } - - /** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } - - /** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object); - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } - } - - /** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths to pick. - * @returns {Array} Returns the picked elements. - */ - function baseAt(object, paths) { - var index = -1, - length = paths.length, - result = Array(length), - skip = object == null; - - while (++index < length) { - result[index] = skip ? undefined : get(object, paths[index]); - } - return result; - } - - /** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; - } - - /** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat - ? copySymbolsIn(value, baseAssignIn(result, value)) - : copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, baseClone, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - var keysFunc = isFull - ? (isFlat ? getAllKeysIn : getAllKeys) - : (isFlat ? keysIn : keys); - - var props = isArr ? undefined : keysFunc(value); - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - return result; - } - - /** - * The base implementation of `_.conforms` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property predicates to conform to. - * @returns {Function} Returns the new spec function. - */ - function baseConforms(source) { - var props = keys(source); - return function(object) { - return baseConformsTo(object, source, props); - }; - } - - /** - * The base implementation of `_.conformsTo` which accepts `props` to check. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - */ - function baseConformsTo(object, source, props) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length], - predicate = source[key], - value = object[key]; - - if ((value === undefined && !(key in object)) || !predicate(value)) { - return false; - } - } - return true; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ - function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee == null ? value : iteratee(value); - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.forEachRight` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEachRight = createBaseEach(baseForOwnRight, true); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; - }); - return result; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !isSymbol(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of `_.fill` without an iteratee call guard. - * - * @private - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - */ - function baseFill(array, value, start, end) { - var length = array.length; - - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseForRight = createBaseFor(true); - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - /** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ - function baseGet(object, path) { - path = castPath(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; - } - - /** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); - } - - /** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - value = Object(value); - return (symToStringTag && symToStringTag in value) - ? getRawTag(value) - : objectToString(value); - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } - - /** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); - } - - /** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHasIn(object, key) { - return object != null && key in Object(object); - } - - /** - * The base implementation of `_.inRange` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to check. - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - */ - function baseInRange(number, start, end) { - return number >= nativeMin(start, end) && number < nativeMax(start, end); - } - - /** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; - - var index = -1, - seen = caches[0]; - - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); - }); - return accumulator; - } - - /** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ - function baseInvoke(object, path, args) { - path = castPath(path, object); - object = parent(object, path); - var func = object == null ? object : object[toKey(last(path))]; - return func == null ? undefined : apply(func, object, args); - } - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; - } - - /** - * The base implementation of `_.isArrayBuffer` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - */ - function baseIsArrayBuffer(value) { - return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; - } - - /** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ - function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = getTag(object); - objTag = objTag == argsTag ? objectTag : objTag; - } - if (!othIsArr) { - othTag = getTag(other); - othTag = othTag == argsTag ? objectTag : othTag; - } - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; - - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); - } - - /** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ - function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; - } - - /** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; - } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; - } - - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - - /** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ - function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; - } - - /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ - function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); - } - - /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; - } - - /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); - }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } - - /** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; - } - - /** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - if (isObject(srcValue)) { - stack || (stack = new Stack); - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(object[key], srcValue, (key + ''), object, source, stack) - : undefined; - - if (newValue === undefined) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); - } - - /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = object[key], - srcValue = source[key], - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); - - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { - newValue = initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); - } - - /** - * The base implementation of `_.nth` which doesn't coerce arguments. - * - * @private - * @param {Array} array The array to query. - * @param {number} n The index of the element to return. - * @returns {*} Returns the nth element of `array`. - */ - function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : undefined; - } - - /** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ - function baseOrderBy(collection, iteratees, orders) { - var index = -1; - iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); - - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; - }); - - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, paths) { - object = Object(object); - return basePickBy(object, paths, function(value, path) { - return hasIn(object, path); - }); - } - - /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ - function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = baseGet(object, path); - - if (predicate(value, path)) { - baseSet(result, castPath(path, object), value); - } - } - return result; - } - - /** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; - } - - /** - * The base implementation of `_.pullAllBy` without support for iteratee - * shorthands. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - */ - function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, - index = -1, - length = values.length, - seen = array; - - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, - value = values[index], - computed = iteratee ? iteratee(value) : value; - - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice.call(seen, fromIndex, 1); - } - splice.call(array, fromIndex, 1); - } - } - return array; - } - - /** - * The base implementation of `_.pullAt` without support for individual - * indexes or capturing the removed elements. - * - * @private - * @param {Array} array The array to modify. - * @param {number[]} indexes The indexes of elements to remove. - * @returns {Array} Returns `array`. - */ - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, - lastIndex = length - 1; - - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } else { - baseUnset(array, index); - } - } - } - return array; - } - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } - - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } - - /** - * The base implementation of `_.repeat` which doesn't coerce arguments. - * - * @private - * @param {string} string The string to repeat. - * @param {number} n The number of times to repeat the string. - * @returns {string} Returns the repeated string. - */ - function baseRepeat(string, n) { - var result = ''; - if (!string || n < 1 || n > MAX_SAFE_INTEGER) { - return result; - } - // Leverage the exponentiation by squaring algorithm for a faster repeat. - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. - do { - if (n % 2) { - result += string; - } - n = nativeFloor(n / 2); - if (n) { - string += string; - } - } while (n); - - return result; - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ - function baseSample(collection) { - return arraySample(values(collection)); - } - - /** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function baseSampleSize(collection, n) { - var array = values(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); - } - - /** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = castPath(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; - } - - /** - * The base implementation of `setData` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; - - /** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); - }; - - /** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function baseShuffle(collection) { - return shuffleSelf(values(collection)); - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which - * performs a binary search of `array` to determine the index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndex(array, value, retHighest) { - var low = 0, - high = array == null ? low : array.length; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if (computed !== null && !isSymbol(computed) && - (retHighest ? (computed <= value) : (computed < value))) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); - } - - /** - * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` - * which invokes `iteratee` for `value` and each element of `array` to compute - * their sort ranking. The iteratee is invoked with one argument; (value). - * - * @private - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} iteratee The iteratee invoked per element. - * @param {boolean} [retHighest] Specify returning the highest qualified index. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - */ - function baseSortedIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array == null ? 0 : array.length, - valIsNaN = value !== value, - valIsNull = value === null, - valIsSymbol = isSymbol(value), - valIsUndefined = value === undefined; - - while (low < high) { - var mid = nativeFloor((low + high) / 2), - computed = iteratee(array[mid]), - othIsDefined = computed !== undefined, - othIsNull = computed === null, - othIsReflexive = computed === computed, - othIsSymbol = isSymbol(computed); - - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } - - /** - * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseSortedUniq(array, iteratee) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; - } - - /** - * The base implementation of `_.toNumber` which doesn't ensure correct - * conversions of binary, hexadecimal, or octal string values. - * - * @private - * @param {*} value The value to process. - * @returns {number} Returns the number. - */ - function baseToNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - return +value; - } - - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The property path to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ - function baseUnset(object, path) { - path = castPath(path, object); - object = parent(object, path); - return object == null || delete object[toKey(last(path))]; - } - - /** - * The base implementation of `_.update`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to update. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); - } - - /** - * The base implementation of methods like `_.dropWhile` and `_.takeWhile` - * without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to query. - * @param {Function} predicate The function invoked per iteration. - * @param {boolean} [isDrop] Specify dropping elements instead of taking them. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the slice of `array`. - */ - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length) && - predicate(array[index], index, array)) {} - - return isDrop - ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) - : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } - - /** - * The base implementation of methods like `_.xor`, without support for - * iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of values. - */ - function baseXor(arrays, iteratee, comparator) { - var length = arrays.length; - if (length < 2) { - return length ? baseUniq(arrays[0]) : []; - } - var index = -1, - result = Array(length); - - while (++index < length) { - var array = arrays[index], - othIndex = -1; - - while (++othIndex < length) { - if (othIndex != index) { - result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); - } - } - } - return baseUniq(baseFlatten(result, 1), iteratee, comparator); - } - - /** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ - function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; - } - - /** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } - - /** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ - function castFunction(value) { - return typeof value == 'function' ? value : identity; - } - - /** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ - function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); - } - - /** - * A `baseRest` alias which can be replaced with `identity` by module - * replacement plugins. - * - * @private - * @type {Function} - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - var castRest = baseRest; - - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } - - /** - * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). - * - * @private - * @param {number|Object} id The timer id or timeout object of the timer to clear. - */ - var clearTimeout = ctxClearTimeout || function(id) { - return root.clearTimeout(id); - }; - - /** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - - buffer.copy(result); - return result; - } - - /** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; - } - - /** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } - - /** - * Creates a clone of `map`. - * - * @private - * @param {Object} map The map to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned map. - */ - function cloneMap(map, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map); - return arrayReduce(array, addMapEntry, new map.constructor); - } - - /** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ - function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; - } - - /** - * Creates a clone of `set`. - * - * @private - * @param {Object} set The set to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned set. - */ - function cloneSet(set, isDeep, cloneFunc) { - var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set); - return arrayReduce(array, addSetEntry, new set.constructor); - } - - /** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ - function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; - } - - /** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; - } - - /** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; - } - - /** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } - - /** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } - - /** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object); - } - - /** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, getIteratee(iteratee, 2), accumulator); - }; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } - - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; - } - - /** - * Creates a function like `_.camelCase`. - * - * @private - * @param {Function} callback The function to combine each word. - * @returns {Function} Returns the new compounder function. - */ - function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); - }; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); - - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - if (length < arity) { - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = getIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; - } - - /** - * Creates a `_.flow` or `_.flowRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new flow function. - */ - function createFlow(fromRight) { - return flatRest(function(funcs) { - var length = funcs.length, - index = length, - prereq = LodashWrapper.prototype.thru; - - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (prereq && !wrapper && getFuncName(func) == 'wrapper') { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - - var funcName = getFuncName(func), - data = funcName == 'wrapper' ? getData(func) : undefined; - - if (data && isLaziable(data[0]) && - data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && - !data[4].length && data[9] == 1 - ) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = (func.length == 1 && isLaziable(func)) - ? wrapper[funcName]() - : wrapper.thru(func); - } - } - return function() { - var args = arguments, - value = args[0]; - - if (wrapper && args.length == 1 && - isArray(value) && value.length >= LARGE_ARRAY_SIZE) { - return wrapper.plant(value).value(); - } - var index = 0, - result = length ? funcs[index].apply(this, args) : value; - - while (++index < length) { - result = funcs[index].call(this, result); - } - return result; - }; - }); - } - - /** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & WRAP_ARY_FLAG, - isBind = bitmask & WRAP_BIND_FLAG, - isBindKey = bitmask & WRAP_BIND_KEY_FLAG, - isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), - isFlip = bitmask & WRAP_FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, thisArg, - args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - - /** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ - function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; - } - - /** - * Creates a function that performs a mathematical operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @param {number} [defaultValue] The value used for `undefined` arguments. - * @returns {Function} Returns the new mathematical operation function. - */ - function createMathOperation(operator, defaultValue) { - return function(value, other) { - var result; - if (value === undefined && other === undefined) { - return defaultValue; - } - if (value !== undefined) { - result = value; - } - if (other !== undefined) { - if (result === undefined) { - return other; - } - if (typeof value == 'string' || typeof other == 'string') { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; - } - - /** - * Creates a function like `_.over`. - * - * @private - * @param {Function} arrayFunc The function to iterate over iteratees. - * @returns {Function} Returns the new over function. - */ - function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(getIteratee())); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); - } - - /** - * Creates the padding for `string` based on `length`. The `chars` string - * is truncated if the number of characters exceeds `length`. - * - * @private - * @param {number} length The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padding for `string`. - */ - function createPadding(length, chars) { - chars = chars === undefined ? ' ' : baseToString(chars); - - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); - return hasUnicode(chars) - ? castSlice(stringToArray(result), 0, length).join('') - : result.slice(0, length); - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - - /** - * Creates a function that performs a relational operation on two values. - * - * @private - * @param {Function} operator The function to perform the operation. - * @returns {Function} Returns the new relational operation function. - */ - function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == 'string' && typeof other == 'string')) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; - } - - /** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & WRAP_CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); - - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; - - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); - } - - /** - * Creates a function like `_.round`. - * - * @private - * @param {string} methodName The name of the `Math` method to use when rounding. - * @returns {Function} Returns the new round function. - */ - function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = nativeMin(toInteger(precision), 292); - if (precision) { - // Shift with exponential notation to avoid floating-point issues. - // See [MDN](https://mdn.io/round#Examples) for more details. - var pair = (toString(number) + 'e').split('e'), - value = func(pair[0] + 'e' + (+pair[1] + precision)); - - pair = (toString(value) + 'e').split('e'); - return +(pair[0] + 'e' + (+pair[1] - precision)); - } - return func(number); - }; - } - - /** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ - var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); - }; - - /** - * Creates a `_.toPairs` or `_.toPairsIn` function. - * - * @private - * @param {Function} keysFunc The function to get the keys of a given object. - * @returns {Function} Returns the new pairs function. - */ - function createToPairs(keysFunc) { - return function(object) { - var tag = getTag(object); - if (tag == mapTag) { - return mapToArray(object); - } - if (tag == setTag) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; - } - - /** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; - - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] == null - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); - - if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { - bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG) { - var result = createBind(func, bitmask, thisArg); - } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { - result = createCurry(func, bitmask, arity); - } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked && stack.get(other)) { - return stacked == other; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); - - case errorTag: - return object.name == other.name && object.message == other.message; - - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); - - case mapTag: - var convert = mapToArray; - - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); - - if (object.size != other.size && !isPartial) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG; - - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; - - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked && stack.get(other)) { - return stacked == other; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; - } - - /** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); - } - - /** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); - } - - /** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } - - /** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; - - /** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ - function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; - } - - /** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ - function getHolder(func) { - var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; - return object.placeholder; - } - - /** - * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, - * this function returns the custom method, otherwise it returns `baseIteratee`. - * If arguments are provided, the chosen function is invoked with them and - * its result is returned. - * - * @private - * @param {*} [value] The value to convert to an iteratee. - * @param {number} [arity] The arity of the created iteratee. - * @returns {Function} Returns the chosen function or its result. - */ - function getIteratee() { - var result = lodash.iteratee || iteratee; - result = result === iteratee ? baseIteratee : result; - return arguments.length ? result(arguments[0], arguments[1]) : result; - } - - /** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ - function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; - } - - /** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ - function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; - } - - /** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ - function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; - - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; - } - - /** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray; - - /** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; - }; - - /** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - var getTag = baseGetTag; - - // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. - if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; - } - - /** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; - } - - /** - * Extracts wrapper details from the `source` body comment. - * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. - */ - function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; - } - - /** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ - function hasPath(object, path, hasFunc) { - path = castPath(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); - } - - /** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ - function initCloneArray(array) { - var length = array.length, - result = array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } - - /** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; - } - - /** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {Function} cloneFunc The function to clone values. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneByTag(object, tag, cloneFunc, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); - - case mapTag: - return cloneMap(object, isDeep, cloneFunc); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return cloneSet(object, isDeep, cloneFunc); - - case symbolTag: - return cloneSymbol(object); - } - } - - /** - * Inserts wrapper `details` in a comment at the top of the `source` body. - * - * @private - * @param {string} source The source to modify. - * @returns {Array} details The details to insert. - * @returns {string} Returns the modified source. - */ - function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; - details = details.join(length > 2 ? ', ' : ' '); - return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); - } - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); - } - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - length = length == null ? MAX_SAFE_INTEGER : length; - return !!length && - (typeof value == 'number' || reIsUint.test(value)) && - (value > -1 && value % 1 == 0 && value < length); - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } - - /** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ - function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); - } - - /** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ - function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); - } - - /** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ - function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; - - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } - - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); - } - - /** - * Checks if `func` is capable of being masked. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `func` is maskable, else `false`. - */ - var isMaskable = coreJsData ? isFunction : stubFalse; - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; - } - - /** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ - function isStrictComparable(value) { - return value === value && !isObject(value); - } - - /** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; - } - - /** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ - function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - - var cache = result.cache; - return result; - } - - /** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); - - var isCombo = - ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || - ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || - ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & WRAP_BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & WRAP_ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; - } - - /** - * Used by `_.defaultsDeep` to customize its `_.merge` use. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ - function mergeDefaults(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined, mergeDefaults, stack); - stack['delete'](srcValue); - } - return objValue; - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ - function objectToString(value) { - return nativeObjectToString.call(value); - } - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } - - /** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ - function parent(object, path) { - return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); - } - - /** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; - } - - /** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var setData = shortOut(baseSetData); - - /** - * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @returns {number|Object} Returns the timer id or timeout object. - */ - var setTimeout = ctxSetTimeout || function(func, wait) { - return root.setTimeout(func, wait); - }; - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = shortOut(baseSetToString); - - /** - * Sets the `toString` method of `wrapper` to mimic the source of `reference` - * with wrapper details in a comment at the top of the source body. - * - * @private - * @param {Function} wrapper The function to modify. - * @param {Function} reference The reference function. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Function} Returns `wrapper`. - */ - function setWrapToString(wrapper, reference, bitmask) { - var source = (reference + ''); - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); - } - - /** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ - function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; - } - - /** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ - function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; - } - - /** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ - var stringToPath = memoizeCapped(function(string) { - var result = []; - if (reLeadingDot.test(string)) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - }); - - /** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ - function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; - } - - /** - * Updates wrapper `details` based on `bitmask` flags. - * - * @private - * @returns {Array} details The details to modify. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Array} Returns `details`. - */ - function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = '_.' + pair[0]; - if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); - } - - /** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of elements split into groups the length of `size`. - * If `array` can't be split evenly, the final chunk will be the remaining - * elements. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to process. - * @param {number} [size=1] The length of each chunk - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the new array of chunks. - * @example - * - * _.chunk(['a', 'b', 'c', 'd'], 2); - * // => [['a', 'b'], ['c', 'd']] - * - * _.chunk(['a', 'b', 'c', 'd'], 3); - * // => [['a', 'b', 'c'], ['d']] - */ - function chunk(array, size, guard) { - if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { - size = 1; - } else { - size = nativeMax(toInteger(size), 0); - } - var length = array == null ? 0 : array.length; - if (!length || size < 1) { - return []; - } - var index = 0, - resIndex = 0, - result = Array(nativeCeil(length / size)); - - while (index < length) { - result[resIndex++] = baseSlice(array, index, (index += size)); - } - return result; - } - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } - - /** - * Creates an array of `array` values not included in the other given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * **Note:** Unlike `_.pullAll`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ - var difference = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; - }); - - /** - * This method is like `_.difference` except that it accepts `iteratee` which - * is invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * **Note:** Unlike `_.pullAllBy`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2] - * - * // The `_.property` iteratee shorthand. - * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var differenceBy = baseRest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) - : []; - }); - - /** - * This method is like `_.difference` except that it accepts `comparator` - * which is invoked to compare elements of `array` to `values`. The order and - * references of result values are determined by the first array. The comparator - * is invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.pullAllWith`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * - * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); - * // => [{ 'x': 2, 'y': 1 }] - */ - var differenceWith = baseRest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = undefined; - } - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) - : []; - }); - - /** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function drop(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with `n` elements dropped from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.dropRight([1, 2, 3]); - * // => [1, 2] - * - * _.dropRight([1, 2, 3], 2); - * // => [1] - * - * _.dropRight([1, 2, 3], 5); - * // => [] - * - * _.dropRight([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function dropRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` excluding elements dropped from the end. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.dropRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney'] - * - * // The `_.matches` iteratee shorthand. - * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropRightWhile(users, ['active', false]); - * // => objects for ['barney'] - * - * // The `_.property` iteratee shorthand. - * _.dropRightWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true, true) - : []; - } - - /** - * Creates a slice of `array` excluding elements dropped from the beginning. - * Elements are dropped until `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.dropWhile(users, function(o) { return !o.active; }); - * // => objects for ['pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.dropWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.dropWhile(users, ['active', false]); - * // => objects for ['pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.dropWhile(users, 'active'); - * // => objects for ['barney', 'fred', 'pebbles'] - */ - function dropWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), true) - : []; - } - - /** - * Fills elements of `array` with `value` from `start` up to, but not - * including, `end`. - * - * **Note:** This method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Array - * @param {Array} array The array to fill. - * @param {*} value The value to fill `array` with. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.fill(array, 'a'); - * console.log(array); - * // => ['a', 'a', 'a'] - * - * _.fill(Array(3), 2); - * // => [2, 2, 2] - * - * _.fill([4, 6, 8, 10], '*', 1, 3); - * // => [4, '*', '*', 10] - */ - function fill(array, value, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, getIteratee(predicate, 3), index); - } - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ - function findLastIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, getIteratee(predicate, 3), index, true); - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Recursively flatten `array` up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Array - * @param {Array} array The array to flatten. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * var array = [1, [2, [3, [4]], 5]]; - * - * _.flattenDepth(array, 1); - * // => [1, 2, [3, [4]], 5] - * - * _.flattenDepth(array, 2); - * // => [1, 2, 3, [4], 5] - */ - function flattenDepth(array, depth) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(array, depth); - } - - /** - * The inverse of `_.toPairs`; this method returns an object composed - * from key-value `pairs`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} pairs The key-value pairs. - * @returns {Object} Returns the new object. - * @example - * - * _.fromPairs([['a', 1], ['b', 2]]); - * // => { 'a': 1, 'b': 2 } - */ - function fromPairs(pairs) { - var index = -1, - length = pairs == null ? 0 : pairs.length, - result = {}; - - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); - } - - /** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ - function initial(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 0, -1) : []; - } - - /** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ - var intersection = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `iteratee` - * which is invoked for each element of each `arrays` to generate the criterion - * by which they're compared. The order and references of result values are - * determined by the first array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [2.1] - * - * // The `_.property` iteratee shorthand. - * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }] - */ - var intersectionBy = baseRest(function(arrays) { - var iteratee = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - if (iteratee === last(mapped)) { - iteratee = undefined; - } else { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, getIteratee(iteratee, 2)) - : []; - }); - - /** - * This method is like `_.intersection` except that it accepts `comparator` - * which is invoked to compare elements of `arrays`. The order and references - * of result values are determined by the first array. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.intersectionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }] - */ - var intersectionWith = baseRest(function(arrays) { - var comparator = last(arrays), - mapped = arrayMap(arrays, castArrayLikeObject); - - comparator = typeof comparator == 'function' ? comparator : undefined; - if (comparator) { - mapped.pop(); - } - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped, undefined, comparator) - : []; - }); - - /** - * Converts all elements in `array` into a string separated by `separator`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to convert. - * @param {string} [separator=','] The element separator. - * @returns {string} Returns the joined string. - * @example - * - * _.join(['a', 'b', 'c'], '~'); - * // => 'a~b~c' - */ - function join(array, separator) { - return array == null ? '' : nativeJoin.call(array, separator); - } - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; - } - - /** - * This method is like `_.indexOf` except that it iterates over elements of - * `array` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.lastIndexOf([1, 2, 1, 2], 2); - * // => 3 - * - * // Search from the `fromIndex`. - * _.lastIndexOf([1, 2, 1, 2], 2, 2); - * // => 1 - */ - function lastIndexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); - } - return value === value - ? strictLastIndexOf(array, value, index) - : baseFindIndex(array, baseIsNaN, index, true); - } - - /** - * Gets the element at index `n` of `array`. If `n` is negative, the nth - * element from the end is returned. - * - * @static - * @memberOf _ - * @since 4.11.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=0] The index of the element to return. - * @returns {*} Returns the nth element of `array`. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * - * _.nth(array, 1); - * // => 'b' - * - * _.nth(array, -2); - * // => 'c'; - */ - function nth(array, n) { - return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; - } - - /** - * Removes all given values from `array` using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` - * to remove elements from an array by predicate. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...*} [values] The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pull(array, 'a', 'c'); - * console.log(array); - * // => ['b', 'b'] - */ - var pull = baseRest(pullAll); - - /** - * This method is like `_.pull` except that it accepts an array of values to remove. - * - * **Note:** Unlike `_.difference`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @returns {Array} Returns `array`. - * @example - * - * var array = ['a', 'b', 'c', 'a', 'b', 'c']; - * - * _.pullAll(array, ['a', 'c']); - * console.log(array); - * // => ['b', 'b'] - */ - function pullAll(array, values) { - return (array && array.length && values && values.length) - ? basePullAll(array, values) - : array; - } - - /** - * This method is like `_.pullAll` except that it accepts `iteratee` which is - * invoked for each element of `array` and `values` to generate the criterion - * by which they're compared. The iteratee is invoked with one argument: (value). - * - * **Note:** Unlike `_.differenceBy`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; - * - * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); - * console.log(array); - * // => [{ 'x': 2 }] - */ - function pullAllBy(array, values, iteratee) { - return (array && array.length && values && values.length) - ? basePullAll(array, values, getIteratee(iteratee, 2)) - : array; - } - - /** - * This method is like `_.pullAll` except that it accepts `comparator` which - * is invoked to compare elements of `array` to `values`. The comparator is - * invoked with two arguments: (arrVal, othVal). - * - * **Note:** Unlike `_.differenceWith`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Array} values The values to remove. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns `array`. - * @example - * - * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; - * - * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); - * console.log(array); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] - */ - function pullAllWith(array, values, comparator) { - return (array && array.length && values && values.length) - ? basePullAll(array, values, undefined, comparator) - : array; - } - - /** - * Removes elements from `array` corresponding to `indexes` and returns an - * array of removed elements. - * - * **Note:** Unlike `_.at`, this method mutates `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {...(number|number[])} [indexes] The indexes of elements to remove. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = ['a', 'b', 'c', 'd']; - * var pulled = _.pullAt(array, [1, 3]); - * - * console.log(array); - * // => ['a', 'c'] - * - * console.log(pulled); - * // => ['b', 'd'] - */ - var pullAt = flatRest(function(array, indexes) { - var length = array == null ? 0 : array.length, - result = baseAt(array, indexes); - - basePullAt(array, arrayMap(indexes, function(index) { - return isIndex(index, length) ? +index : index; - }).sort(compareAscending)); - - return result; - }); - - /** - * Removes all elements from `array` that `predicate` returns truthy for - * and returns an array of the removed elements. The predicate is invoked - * with three arguments: (value, index, array). - * - * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` - * to pull elements from an array by value. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to modify. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new array of removed elements. - * @example - * - * var array = [1, 2, 3, 4]; - * var evens = _.remove(array, function(n) { - * return n % 2 == 0; - * }); - * - * console.log(array); - * // => [1, 3] - * - * console.log(evens); - * // => [2, 4] - */ - function remove(array, predicate) { - var result = []; - if (!(array && array.length)) { - return result; - } - var index = -1, - indexes = [], - length = array.length; - - predicate = getIteratee(predicate, 3); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; - } - - /** - * Reverses `array` so that the first element becomes the last, the second - * element becomes the second to last, and so on. - * - * **Note:** This method mutates `array` and is based on - * [`Array#reverse`](https://mdn.io/Array/reverse). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.reverse(array); - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function reverse(array) { - return array == null ? array : nativeReverse.call(array); - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } - else { - start = start == null ? 0 : toInteger(start); - end = end === undefined ? length : toInteger(end); - } - return baseSlice(array, start, end); - } - - /** - * Uses a binary search to determine the lowest index at which `value` - * should be inserted into `array` in order to maintain its sort order. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedIndex([30, 50], 40); - * // => 1 - */ - function sortedIndex(array, value) { - return baseSortedIndex(array, value); - } - - /** - * This method is like `_.sortedIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); - * // => 0 - */ - function sortedIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); - } - - /** - * This method is like `_.indexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedIndexOf([4, 5, 5, 5, 6], 5); - * // => 1 - */ - function sortedIndexOf(array, value) { - var length = array == null ? 0 : array.length; - if (length) { - var index = baseSortedIndex(array, value); - if (index < length && eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.sortedIndex` except that it returns the highest - * index at which `value` should be inserted into `array` in order to - * maintain its sort order. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * _.sortedLastIndex([4, 5, 5, 5, 6], 5); - * // => 4 - */ - function sortedLastIndex(array, value) { - return baseSortedIndex(array, value, true); - } - - /** - * This method is like `_.sortedLastIndex` except that it accepts `iteratee` - * which is invoked for `value` and each element of `array` to compute their - * sort ranking. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The sorted array to inspect. - * @param {*} value The value to evaluate. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {number} Returns the index at which `value` should be inserted - * into `array`. - * @example - * - * var objects = [{ 'x': 4 }, { 'x': 5 }]; - * - * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); - * // => 1 - * - * // The `_.property` iteratee shorthand. - * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); - * // => 1 - */ - function sortedLastIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); - } - - /** - * This method is like `_.lastIndexOf` except that it performs a binary - * search on a sorted `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); - * // => 3 - */ - function sortedLastIndexOf(array, value) { - var length = array == null ? 0 : array.length; - if (length) { - var index = baseSortedIndex(array, value, true) - 1; - if (eq(array[index], value)) { - return index; - } - } - return -1; - } - - /** - * This method is like `_.uniq` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniq([1, 1, 2]); - * // => [1, 2] - */ - function sortedUniq(array) { - return (array && array.length) - ? baseSortedUniq(array) - : []; - } - - /** - * This method is like `_.uniqBy` except that it's designed and optimized - * for sorted arrays. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); - * // => [1.1, 2.3] - */ - function sortedUniqBy(array, iteratee) { - return (array && array.length) - ? baseSortedUniq(array, getIteratee(iteratee, 2)) - : []; - } - - /** - * Gets all but the first element of `array`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.tail([1, 2, 3]); - * // => [2, 3] - */ - function tail(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 1, length) : []; - } - - /** - * Creates a slice of `array` with `n` elements taken from the beginning. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.take([1, 2, 3]); - * // => [1] - * - * _.take([1, 2, 3], 2); - * // => [1, 2] - * - * _.take([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.take([1, 2, 3], 0); - * // => [] - */ - function take(array, n, guard) { - if (!(array && array.length)) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` with `n` elements taken from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeRight([1, 2, 3]); - * // => [3] - * - * _.takeRight([1, 2, 3], 2); - * // => [2, 3] - * - * _.takeRight([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.takeRight([1, 2, 3], 0); - * // => [] - */ - function takeRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates a slice of `array` with elements taken from the end. Elements are - * taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.takeRightWhile(users, function(o) { return !o.active; }); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.matches` iteratee shorthand. - * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); - * // => objects for ['pebbles'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeRightWhile(users, ['active', false]); - * // => objects for ['fred', 'pebbles'] - * - * // The `_.property` iteratee shorthand. - * _.takeRightWhile(users, 'active'); - * // => [] - */ - function takeRightWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3), false, true) - : []; - } - - /** - * Creates a slice of `array` with elements taken from the beginning. Elements - * are taken until `predicate` returns falsey. The predicate is invoked with - * three arguments: (value, index, array). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the slice of `array`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false}, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.takeWhile(users, function(o) { return !o.active; }); - * // => objects for ['barney', 'fred'] - * - * // The `_.matches` iteratee shorthand. - * _.takeWhile(users, { 'user': 'barney', 'active': false }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.takeWhile(users, ['active', false]); - * // => objects for ['barney', 'fred'] - * - * // The `_.property` iteratee shorthand. - * _.takeWhile(users, 'active'); - * // => [] - */ - function takeWhile(array, predicate) { - return (array && array.length) - ? baseWhile(array, getIteratee(predicate, 3)) - : []; - } - - /** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ - var union = baseRest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); - - /** - * This method is like `_.union` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which uniqueness is computed. Result values are chosen from the first - * array in which the value occurs. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.unionBy([2.1], [1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - var unionBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); - }); - - /** - * This method is like `_.union` except that it accepts `comparator` which - * is invoked to compare elements of `arrays`. Result values are chosen from - * the first array in which the value occurs. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of combined values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.unionWith(objects, others, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var unionWith = baseRest(function(arrays) { - var comparator = last(arrays); - comparator = typeof comparator == 'function' ? comparator : undefined; - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); - }); - - /** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurrence of each element - * is kept. The order of result values is determined by the order they occur - * in the array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniq([2, 1, 2]); - * // => [2, 1] - */ - function uniq(array) { - return (array && array.length) ? baseUniq(array) : []; - } - - /** - * This method is like `_.uniq` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * uniqueness is computed. The order of result values is determined by the - * order they occur in the array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniqBy([2.1, 1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniqBy(array, iteratee) { - return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; - } - - /** - * This method is like `_.uniq` except that it accepts `comparator` which - * is invoked to compare elements of `array`. The order of result values is - * determined by the order they occur in the array.The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.uniqWith(objects, _.isEqual); - * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] - */ - function uniqWith(array, comparator) { - comparator = typeof comparator == 'function' ? comparator : undefined; - return (array && array.length) ? baseUniq(array, undefined, comparator) : []; - } - - /** - * This method is like `_.zip` except that it accepts an array of grouped - * elements and creates an array regrouping the elements to their pre-zip - * configuration. - * - * @static - * @memberOf _ - * @since 1.2.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - * - * _.unzip(zipped); - * // => [['a', 'b'], [1, 2], [true, false]] - */ - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length = 0; - array = arrayFilter(array, function(group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length); - return true; - } - }); - return baseTimes(length, function(index) { - return arrayMap(array, baseProperty(index)); - }); - } - - /** - * This method is like `_.unzip` except that it accepts `iteratee` to specify - * how regrouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @param {Function} [iteratee=_.identity] The function to combine - * regrouped values. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip([1, 2], [10, 20], [100, 200]); - * // => [[1, 10, 100], [2, 20, 200]] - * - * _.unzipWith(zipped, _.add); - * // => [3, 30, 300] - */ - function unzipWith(array, iteratee) { - if (!(array && array.length)) { - return []; - } - var result = unzip(array); - if (iteratee == null) { - return result; - } - return arrayMap(result, function(group) { - return apply(iteratee, undefined, group); - }); - } - - /** - * Creates an array excluding all given values using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.pull`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...*} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.xor - * @example - * - * _.without([2, 1, 2, 3], 1, 2); - * // => [3] - */ - var without = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, values) - : []; - }); - - /** - * Creates an array of unique values that is the - * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) - * of the given arrays. The order of result values is determined by the order - * they occur in the arrays. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.without - * @example - * - * _.xor([2, 1], [2, 3]); - * // => [1, 3] - */ - var xor = baseRest(function(arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); - - /** - * This method is like `_.xor` except that it accepts `iteratee` which is - * invoked for each element of each `arrays` to generate the criterion by - * which by which they're compared. The order of result values is determined - * by the order they occur in the arrays. The iteratee is invoked with one - * argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); - * // => [1.2, 3.4] - * - * // The `_.property` iteratee shorthand. - * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 2 }] - */ - var xorBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = undefined; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); - }); - - /** - * This method is like `_.xor` except that it accepts `comparator` which is - * invoked to compare elements of `arrays`. The order of result values is - * determined by the order they occur in the arrays. The comparator is invoked - * with two arguments: (arrVal, othVal). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; - * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; - * - * _.xorWith(objects, others, _.isEqual); - * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] - */ - var xorWith = baseRest(function(arrays) { - var comparator = last(arrays); - comparator = typeof comparator == 'function' ? comparator : undefined; - return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); - }); - - /** - * Creates an array of grouped elements, the first of which contains the - * first elements of the given arrays, the second of which contains the - * second elements of the given arrays, and so on. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - */ - var zip = baseRest(unzip); - - /** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ - function zipObject(props, values) { - return baseZipObject(props || [], values || [], assignValue); - } - - /** - * This method is like `_.zipObject` except that it supports property paths. - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); - * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } - */ - function zipObjectDeep(props, values) { - return baseZipObject(props || [], values || [], baseSet); - } - - /** - * This method is like `_.zip` except that it accepts `iteratee` to specify - * how grouped values should be combined. The iteratee is invoked with the - * elements of each group: (...group). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @param {Function} [iteratee=_.identity] The function to combine - * grouped values. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { - * return a + b + c; - * }); - * // => [111, 222] - */ - var zipWith = baseRest(function(arrays) { - var length = arrays.length, - iteratee = length > 1 ? arrays[length - 1] : undefined; - - iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; - return unzipWith(arrays, iteratee); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * This method is the wrapper version of `_.at`. - * - * @name at - * @memberOf _ - * @since 1.0.0 - * @category Seq - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _(object).at(['a[0].b.c', 'a[1]']).value(); - * // => [3, 4] - */ - var wrapperAt = flatRest(function(paths) { - var length = paths.length, - start = length ? paths[0] : 0, - value = this.__wrapped__, - interceptor = function(object) { return baseAt(object, paths); }; - - if (length > 1 || this.__actions__.length || - !(value instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - 'func': thru, - 'args': [interceptor], - 'thisArg': undefined - }); - return new LodashWrapper(value, this.__chain__).thru(function(array) { - if (length && !array.length) { - array.push(undefined); - } - return array; - }); - }); - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - - /** - * Gets the next value on a wrapped object following the - * [iterator protocol](https://mdn.io/iteration_protocols#iterator). - * - * @name next - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the next iterator value. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped.next(); - * // => { 'done': false, 'value': 1 } - * - * wrapped.next(); - * // => { 'done': false, 'value': 2 } - * - * wrapped.next(); - * // => { 'done': true, 'value': undefined } - */ - function wrapperNext() { - if (this.__values__ === undefined) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, - value = done ? undefined : this.__values__[this.__index__++]; - - return { 'done': done, 'value': value }; - } - - /** - * Enables the wrapper to be iterable. - * - * @name Symbol.iterator - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the wrapper object. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped[Symbol.iterator]() === wrapped; - * // => true - * - * Array.from(wrapped); - * // => [1, 2] - */ - function wrapperToIterator() { - return this; - } - - /** - * Creates a clone of the chain sequence planting `value` as the wrapped value. - * - * @name plant - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @param {*} value The value to plant. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2]).map(square); - * var other = wrapped.plant([3, 4]); - * - * other.value(); - * // => [9, 16] - * - * wrapped.value(); - * // => [1, 4] - */ - function wrapperPlant(value) { - var result, - parent = this; - - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - clone.__index__ = 0; - clone.__values__ = undefined; - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } - - /** - * This method is the wrapper version of `_.reverse`. - * - * **Note:** This method mutates the wrapped array. - * - * @name reverse - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2, 3]; - * - * _(array).reverse().value() - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - 'func': thru, - 'args': [reverse], - 'thisArg': undefined - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the number of times the key was returned by `iteratee`. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - ++result[key]; - } else { - baseAssignValue(result, key, 1); - } - }); - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); - - /** - * This method is like `_.find` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=collection.length-1] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * _.findLast([1, 2, 3, 4], function(n) { - * return n % 2 == 1; - * }); - * // => 3 - */ - var findLast = createFind(findLastIndex); - - /** - * Creates a flattened array of values by running each element in `collection` - * thru `iteratee` and flattening the mapped results. The iteratee is invoked - * with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [n, n]; - * } - * - * _.flatMap([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDeep([1, 2], duplicate); - * // => [1, 1, 2, 2] - */ - function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY); - } - - /** - * This method is like `_.flatMap` except that it recursively flattens the - * mapped results up to `depth` times. - * - * @static - * @memberOf _ - * @since 4.7.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {number} [depth=1] The maximum recursion depth. - * @returns {Array} Returns the new flattened array. - * @example - * - * function duplicate(n) { - * return [[[n, n]]]; - * } - * - * _.flatMapDepth([1, 2], duplicate, 2); - * // => [[1, 1], [2, 2]] - */ - function flatMapDepth(collection, iteratee, depth) { - depth = depth === undefined ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); - } - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forEach` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @alias eachRight - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEach - * @example - * - * _.forEachRight([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `2` then `1`. - */ - function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } - }); - - /** - * Checks if `value` is in `collection`. If `collection` is a string, it's - * checked for a substring of `value`, otherwise - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * is used for equality comparisons. If `fromIndex` is negative, it's used as - * the offset from the end of `collection`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {boolean} Returns `true` if `value` is found, else `false`. - * @example - * - * _.includes([1, 2, 3], 1); - * // => true - * - * _.includes([1, 2, 3], 1, 2); - * // => false - * - * _.includes({ 'a': 1, 'b': 2 }, 1); - * // => true - * - * _.includes('abcd', 'bc'); - * // => true - */ - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; - - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax(length + fromIndex, 0); - } - return isString(collection) - ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) - : (!!length && baseIndexOf(collection, value, fromIndex) > -1); - } - - /** - * Invokes the method at `path` of each element in `collection`, returning - * an array of the results of each invoked method. Any additional arguments - * are provided to each invoked method. If `path` is a function, it's invoked - * for, and `this` bound to, each element in `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array|Function|string} path The path of the method to invoke or - * the function invoked per iteration. - * @param {...*} [args] The arguments to invoke each method with. - * @returns {Array} Returns the array of results. - * @example - * - * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); - * // => [[1, 5, 7], [1, 2, 3]] - * - * _.invokeMap([123, 456], String.prototype.split, ''); - * // => [['1', '2', '3'], ['4', '5', '6']] - */ - var invokeMap = baseRest(function(collection, path, args) { - var index = -1, - isFunc = typeof path == 'function', - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value) { - result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); - }); - return result; - }); - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the last element responsible for generating the key. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * var array = [ - * { 'dir': 'left', 'code': 97 }, - * { 'dir': 'right', 'code': 100 } - * ]; - * - * _.keyBy(array, function(o) { - * return String.fromCharCode(o.code); - * }); - * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } - * - * _.keyBy(array, 'dir'); - * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } - */ - var keyBy = createAggregator(function(result, value, key) { - baseAssignValue(result, key, value); - }); - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.sortBy` except that it allows specifying the sort - * orders of the iteratees to sort by. If `orders` is unspecified, all values - * are sorted in ascending order. Otherwise, specify an order of "desc" for - * descending or "asc" for ascending sort order of corresponding values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] - * The iteratees to sort by. - * @param {string[]} [orders] The sort orders of `iteratees`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 34 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 36 } - * ]; - * - * // Sort by `user` in ascending order and by `age` in descending order. - * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - */ - function orderBy(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? undefined : orders; - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } - - /** - * Creates an array of elements split into two groups, the first of which - * contains elements `predicate` returns truthy for, the second of which - * contains elements `predicate` returns falsey for. The predicate is - * invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the array of grouped elements. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true }, - * { 'user': 'pebbles', 'age': 1, 'active': false } - * ]; - * - * _.partition(users, function(o) { return o.active; }); - * // => objects for [['fred'], ['barney', 'pebbles']] - * - * // The `_.matches` iteratee shorthand. - * _.partition(users, { 'age': 1, 'active': false }); - * // => objects for [['pebbles'], ['barney', 'fred']] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.partition(users, ['active', false]); - * // => objects for [['barney', 'pebbles'], ['fred']] - * - * // The `_.property` iteratee shorthand. - * _.partition(users, 'active'); - * // => objects for [['fred'], ['barney', 'pebbles']] - */ - var partition = createAggregator(function(result, value, key) { - result[key ? 0 : 1].push(value); - }, function() { return [[], []]; }); - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); - } - - /** - * This method is like `_.reduce` except that it iterates over elements of - * `collection` from right to left. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduce - * @example - * - * var array = [[0, 1], [2, 3], [4, 5]]; - * - * _.reduceRight(array, function(flattened, other) { - * return flattened.concat(other); - * }, []); - * // => [4, 5, 2, 3, 0, 1] - */ - function reduceRight(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); - } - - /** - * The opposite of `_.filter`; this method returns the elements of `collection` - * that `predicate` does **not** return truthy for. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.filter - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true } - * ]; - * - * _.reject(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.reject(users, { 'age': 40, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.reject(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.reject(users, 'active'); - * // => objects for ['barney'] - */ - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, negate(getIteratee(predicate, 3))); - } - - /** - * Gets a random element from `collection`. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - */ - function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample; - return func(collection); - } - - /** - * Gets `n` random elements at unique keys from `collection` up to the - * size of `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @param {number} [n=1] The number of elements to sample. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the random elements. - * @example - * - * _.sampleSize([1, 2, 3], 2); - * // => [3, 1] - * - * _.sampleSize([1, 2, 3], 4); - * // => [2, 3, 1] - */ - function sampleSize(collection, n, guard) { - if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n); - } - - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - return isString(collection) ? stringSize(collection) : collection.length; - } - var tag = getTag(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return baseKeys(collection).length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, getIteratee(predicate, 3)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] - */ - var sortBy = baseRest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ - var now = ctxNow || function() { - return root.Date.now(); - }; - - /*------------------------------------------------------------------------*/ - - /** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ - function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that invokes `func`, with up to `n` arguments, - * ignoring any additional arguments. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @param {number} [n=func.length] The arity cap. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.ary(parseInt, 1)); - * // => [6, 8, 10] - */ - function ary(func, n, guard) { - n = guard ? undefined : n; - n = (func && n == null) ? func.length : n; - return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); - } - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = baseRest(function(func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); - }); - - /** - * Creates a function that invokes the method at `object[key]` with `partials` - * prepended to the arguments it receives. - * - * This method differs from `_.bind` by allowing bound functions to reference - * methods that may be redefined or don't yet exist. See - * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) - * for more details. - * - * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Function - * @param {Object} object The object to invoke the method on. - * @param {string} key The key of the method. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * var object = { - * 'user': 'fred', - * 'greet': function(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * }; - * - * var bound = _.bindKey(object, 'greet', 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * object.greet = function(greeting, punctuation) { - * return greeting + 'ya ' + this.user + punctuation; - * }; - * - * bound('!'); - * // => 'hiya fred!' - * - * // Bound with placeholders. - * var bound = _.bindKey(object, 'greet', _, '!'); - * bound('hi'); - * // => 'hiya fred!' - */ - var bindKey = baseRest(function(object, key, partials) { - var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(key, bitmask, object, partials, holders); - }); - - /** - * Creates a function that accepts arguments of `func` and either invokes - * `func` returning its result, if at least `arity` number of arguments have - * been provided, or returns a function that accepts the remaining `func` - * arguments, and so on. The arity of `func` may be specified if `func.length` - * is not sufficient. - * - * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curry(abc); - * - * curried(1)(2)(3); - * // => [1, 2, 3] - * - * curried(1, 2)(3); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(1)(_, 3)(2); - * // => [1, 2, 3] - */ - function curry(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curry.placeholder; - return result; - } - - /** - * This method is like `_.curry` except that arguments are applied to `func` - * in the manner of `_.partialRight` instead of `_.partial`. - * - * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for provided arguments. - * - * **Note:** This method doesn't set the "length" property of curried functions. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to curry. - * @param {number} [arity=func.length] The arity of `func`. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the new curried function. - * @example - * - * var abc = function(a, b, c) { - * return [a, b, c]; - * }; - * - * var curried = _.curryRight(abc); - * - * curried(3)(2)(1); - * // => [1, 2, 3] - * - * curried(2, 3)(1); - * // => [1, 2, 3] - * - * curried(1, 2, 3); - * // => [1, 2, 3] - * - * // Curried with placeholders. - * curried(3)(1, _)(2); - * // => [1, 2, 3] - */ - function curryRight(func, arity, guard) { - arity = guard ? undefined : arity; - var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); - result.placeholder = curryRight.placeholder; - return result; - } - - /** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ - function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - result = wait - timeSinceLastCall; - - return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that invokes `func` with arguments reversed. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to flip arguments for. - * @returns {Function} Returns the new flipped function. - * @example - * - * var flipped = _.flip(function() { - * return _.toArray(arguments); - * }); - * - * flipped('a', 'b', 'c', 'd'); - * // => ['d', 'c', 'b', 'a'] - */ - function flip(func) { - return createWrap(func, WRAP_FLIP_FLAG); - } - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `clear`, `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ - function memoize(func, resolver) { - if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; - } - - // Expose `MapCache`. - memoize.Cache = MapCache; - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - switch (args.length) { - case 0: return !predicate.call(this); - case 1: return !predicate.call(this, args[0]); - case 2: return !predicate.call(this, args[0], args[1]); - case 3: return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // => `createApplication` is invoked once - */ - function once(func) { - return before(2, func); - } - - /** - * Creates a function that invokes `func` with its arguments transformed. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Function - * @param {Function} func The function to wrap. - * @param {...(Function|Function[])} [transforms=[_.identity]] - * The argument transforms. - * @returns {Function} Returns the new function. - * @example - * - * function doubled(n) { - * return n * 2; - * } - * - * function square(n) { - * return n * n; - * } - * - * var func = _.overArgs(function(x, y) { - * return [x, y]; - * }, [square, doubled]); - * - * func(9, 3); - * // => [81, 6] - * - * func(10, 5); - * // => [100, 10] - */ - var overArgs = castRest(function(func, transforms) { - transforms = (transforms.length == 1 && isArray(transforms[0])) - ? arrayMap(transforms[0], baseUnary(getIteratee())) - : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); - - var funcsLength = transforms.length; - return baseRest(function(args) { - var index = -1, - length = nativeMin(args.length, funcsLength); - - while (++index < length) { - args[index] = transforms[index].call(this, args[index]); - } - return apply(func, this, args); - }); - }); - - /** - * Creates a function that invokes `func` with `partials` prepended to the - * arguments it receives. This method is like `_.bind` except it does **not** - * alter the `this` binding. - * - * The `_.partial.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 0.2.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var sayHelloTo = _.partial(greet, 'hello'); - * sayHelloTo('fred'); - * // => 'hello fred' - * - * // Partially applied with placeholders. - * var greetFred = _.partial(greet, _, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - */ - var partial = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partial)); - return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); - }); - - /** - * This method is like `_.partial` except that partially applied arguments - * are appended to the arguments it receives. - * - * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic - * builds, may be used as a placeholder for partially applied arguments. - * - * **Note:** This method doesn't set the "length" property of partially - * applied functions. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Function - * @param {Function} func The function to partially apply arguments to. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new partially applied function. - * @example - * - * function greet(greeting, name) { - * return greeting + ' ' + name; - * } - * - * var greetFred = _.partialRight(greet, 'fred'); - * greetFred('hi'); - * // => 'hi fred' - * - * // Partially applied with placeholders. - * var sayHelloTo = _.partialRight(greet, 'hello', _); - * sayHelloTo('fred'); - * // => 'hello fred' - */ - var partialRight = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)); - return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); - }); - - /** - * Creates a function that invokes `func` with arguments arranged according - * to the specified `indexes` where the argument value at the first index is - * provided as the first argument, the argument value at the second index is - * provided as the second argument, and so on. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} func The function to rearrange arguments for. - * @param {...(number|number[])} indexes The arranged argument indexes. - * @returns {Function} Returns the new function. - * @example - * - * var rearged = _.rearg(function(a, b, c) { - * return [a, b, c]; - * }, [2, 0, 1]); - * - * rearged('b', 'c', 'a') - * // => ['a', 'b', 'c'] - */ - var rearg = flatRest(function(func, indexes) { - return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); - }); - - /** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as - * an array. - * - * **Note:** This method is based on the - * [rest parameter](https://mdn.io/rest_parameters). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.rest(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ - function rest(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? start : toInteger(start); - return baseRest(func, start); - } - - /** - * Creates a function that invokes `func` with the `this` binding of the - * create function and an array of arguments much like - * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). - * - * **Note:** This method is based on the - * [spread operator](https://mdn.io/spread_operator). - * - * @static - * @memberOf _ - * @since 3.2.0 - * @category Function - * @param {Function} func The function to spread arguments over. - * @param {number} [start=0] The start position of the spread. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.spread(function(who, what) { - * return who + ' says ' + what; - * }); - * - * say(['fred', 'hello']); - * // => 'fred says hello' - * - * var numbers = Promise.all([ - * Promise.resolve(40), - * Promise.resolve(36) - * ]); - * - * numbers.then(_.spread(function(x, y) { - * return x + y; - * })); - * // => a Promise of 76 - */ - function spread(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? 0 : nativeMax(toInteger(start), 0); - return baseRest(function(args) { - var array = args[start], - otherArgs = castSlice(args, 0, start); - - if (array) { - arrayPush(otherArgs, array); - } - return apply(func, this, otherArgs); - }); - } - - /** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed `func` invocations and a `flush` method to - * immediately invoke them. Provide `options` to indicate whether `func` - * should be invoked on the leading and/or trailing edge of the `wait` - * timeout. The `func` is invoked with the last arguments provided to the - * throttled function. Subsequent calls to the throttled function return the - * result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the throttled function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=true] - * Specify invoking on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // Avoid excessively updating the position while scrolling. - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. - * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); - * jQuery(element).on('click', throttled); - * - * // Cancel the trailing throttled invocation. - * jQuery(window).on('popstate', throttled.cancel); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - 'leading': leading, - 'maxWait': wait, - 'trailing': trailing - }); - } - - /** - * Creates a function that accepts up to one argument, ignoring any - * additional arguments. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - * @example - * - * _.map(['6', '8', '10'], _.unary(parseInt)); - * // => [6, 8, 10] - */ - function unary(func) { - return ary(func, 1); - } - - /** - * Creates a function that provides `value` to `wrapper` as its first - * argument. Any additional arguments provided to the function are appended - * to those provided to the `wrapper`. The wrapper is invoked with the `this` - * binding of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {*} value The value to wrap. - * @param {Function} [wrapper=identity] The wrapper function. - * @returns {Function} Returns the new function. - * @example - * - * var p = _.wrap(_.escape, function(func, text) { - * return '

' + func(text) + '

'; - * }); - * - * p('fred, barney, & pebbles'); - * // => '

fred, barney, & pebbles

' - */ - function wrap(value, wrapper) { - return partial(castFunction(wrapper), value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ - function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG); - } - - /** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ - function cloneWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); - } - - /** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ - function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); - } - - /** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ - function cloneDeepWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); - } - - /** - * Checks if `object` conforms to `source` by invoking the predicate - * properties of `source` with the corresponding property values of `object`. - * - * **Note:** This method is equivalent to `_.conforms` when `source` is - * partially applied. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); - * // => true - * - * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); - * // => false - */ - function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys(source)); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ - var gt = createRelationalOperation(baseGt); - - /** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ - var gte = createRelationalOperation(function(value, other) { - return value >= other; - }); - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ - var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && baseGetTag(value) == boolTag); - } - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse; - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - - /** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ - function isElement(value) { - return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); - } - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are **not** supported. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; - } - - /** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == errorTag || tag == domExcTag || - (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; - } - - /** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ - function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - - /** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. - * - * **Note:** This method is equivalent to `_.matches` when `source` is - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.isMatch(object, { 'b': 2 }); - * // => true - * - * _.isMatch(object, { 'b': 1 }); - * // => false - */ - function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); - } - - /** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the presence - * of the core-js package because core-js circumvents this kind of detection. - * Despite multiple requests, the core-js maintainer has made it clear: any - * attempt to fix the detection will be obstructed. As a result, we're left - * with little choice but to throw an error. Unfortunately, this also affects - * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on core-js. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ - function isNative(value) { - if (isMaskable(value)) { - throw new Error(CORE_ERROR_TEXT); - } - return baseIsNative(value); - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ - function isNil(value) { - return value == null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && baseGetTag(value) == numberTag); - } - - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return typeof Ctor == 'function' && Ctor instanceof Ctor && - funcToString.call(Ctor) == objectCtorString; - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - - /** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ - function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); - } - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); - } - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; - } - - /** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ - function isWeakSet(value) { - return isObjectLike(value) && baseGetTag(value) == weakSetTag; - } - - /** - * Checks if `value` is less than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - * @see _.gt - * @example - * - * _.lt(1, 3); - * // => true - * - * _.lt(3, 3); - * // => false - * - * _.lt(3, 1); - * // => false - */ - var lt = createRelationalOperation(baseLt); - - /** - * Checks if `value` is less than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than or equal to - * `other`, else `false`. - * @see _.gte - * @example - * - * _.lte(1, 3); - * // => true - * - * _.lte(3, 3); - * // => true - * - * _.lte(3, 1); - * // => false - */ - var lte = createRelationalOperation(function(value, other) { - return value <= other; - }); - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (symIterator && value[symIterator]) { - return iteratorToArray(value[symIterator]()); - } - var tag = getTag(value), - func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); - - return func(value); - } - - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; - } - - /** - * Converts `value` to an integer suitable for use as the length of an - * array-like object. - * - * **Note:** This method is based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toLength(3.2); - * // => 3 - * - * _.toLength(Number.MIN_VALUE); - * // => 0 - * - * _.toLength(Infinity); - * // => 4294967295 - * - * _.toLength('3.2'); - * // => 3 - */ - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; - } - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = value.replace(reTrim, ''); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } - - /** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - - /** - * Converts `value` to a safe integer. A safe integer can be compared and - * represented correctly. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toSafeInteger(3.2); - * // => 3 - * - * _.toSafeInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toSafeInteger(Infinity); - * // => 9007199254740991 - * - * _.toSafeInteger('3.2'); - * // => 3 - */ - function toSafeInteger(value) { - return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER); - } - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ - var assign = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - - /** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); - }); - - /** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ - var at = flatRest(baseAt); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties == null ? result : baseAssign(result, properties); - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function(args) { - args.push(undefined, assignInDefaults); - return apply(assignInWith, undefined, args); - }); - - /** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); - * // => { 'a': { 'b': 2, 'c': 3 } } - */ - var defaultsDeep = baseRest(function(args) { - args.push(undefined, mergeDefaults); - return apply(mergeWith, undefined, args); - }); - - /** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ - function findKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); - } - - /** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ - function findLastKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); - } - - /** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ - function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ - function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forOwn(object, iteratee) { - return object && baseForOwn(object, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ - function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, getIteratee(iteratee, 3)); - } - - /** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); - } - - /** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); - } - - /** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; - } - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasPath(object, path, baseHas); - } - - /** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); - } - - /** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ - var invert = createInverter(function(result, value, key) { - result[value] = key; - }, constant(identity)); - - /** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ - var invertBy = createInverter(function(result, value, key) { - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - }, getIteratee); - - /** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ - var invoke = baseRest(baseInvoke); - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - - /** - * The opposite of `_.mapValues`; this method creates an object with the - * same values as `object` and keys generated by running each own enumerable - * string keyed property of `object` thru `iteratee`. The iteratee is invoked - * with three arguments: (value, key, object). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapValues - * @example - * - * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { - * return key + value; - * }); - * // => { 'a1': 1, 'b2': 2 } - */ - function mapKeys(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, iteratee(value, key, object), value); - }); - return result; - } - - /** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ - function mapValues(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, key, iteratee(value, key, object)); - }); - return result; - } - - /** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; - * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } - */ - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - - /** - * This method is like `_.merge` except that it accepts `customizer` which - * is invoked to produce the merged values of the destination and source - * properties. If `customizer` returns `undefined`, merging is handled by the - * method instead. The `customizer` is invoked with six arguments: - * (objValue, srcValue, key, object, source, stack). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * if (_.isArray(objValue)) { - * return objValue.concat(srcValue); - * } - * } - * - * var object = { 'a': [1], 'b': [2] }; - * var other = { 'a': [3], 'b': [4] }; - * - * _.mergeWith(object, other, customizer); - * // => { 'a': [1, 3], 'b': [2, 4] } - */ - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); - - /** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable property paths of `object` that are not omitted. - * - * **Note:** This method is considerably slower than `_.pick`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to omit. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omit(object, ['a', 'c']); - * // => { 'b': '2' } - */ - var omit = flatRest(function(object, paths) { - var result = {}; - if (object == null) { - return result; - } - var isDeep = false; - paths = arrayMap(paths, function(path) { - path = castPath(path, object); - isDeep || (isDeep = path.length > 1); - return path; - }); - copyObject(object, getAllKeysIn(object), result); - if (isDeep) { - result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG); - } - var length = paths.length; - while (length--) { - baseUnset(result, paths[length]); - } - return result; - }); - - /** - * The opposite of `_.pickBy`; this method creates an object composed of - * the own and inherited enumerable string keyed properties of `object` that - * `predicate` doesn't return truthy for. The predicate is invoked with two - * arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omitBy(object, _.isNumber); - * // => { 'b': '2' } - */ - function omitBy(object, predicate) { - return pickBy(object, negate(getIteratee(predicate))); - } - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function(object, paths) { - return object == null ? {} : basePick(object, paths); - }); - - /** - * Creates an object composed of the `object` properties `predicate` returns - * truthy for. The predicate is invoked with two arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pickBy(object, _.isNumber); - * // => { 'a': 1, 'c': 3 } - */ - function pickBy(object, predicate) { - if (object == null) { - return {}; - } - var props = arrayMap(getAllKeysIn(object), function(prop) { - return [prop]; - }); - predicate = getIteratee(predicate); - return basePickBy(object, props, function(value, path) { - return predicate(value, path[0]); - }); - } - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - path = castPath(path, object); - - var index = -1, - length = path.length; - - // Ensure the loop is entered when path is empty. - if (!length) { - length = 1; - object = undefined; - } - while (++index < length) { - var value = object == null ? undefined : object[toKey(path[index])]; - if (value === undefined) { - index = length; - value = defaultValue; - } - object = isFunction(value) ? value.call(object) : value; - } - return object; - } - - /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } - - /** - * This method is like `_.set` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.setWith(object, '[0][1]', 'a', Object); - * // => { '0': { '1': 'a' } } - */ - function setWith(object, path, value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseSet(object, path, value, customizer); - } - - /** - * Creates an array of own enumerable string keyed-value pairs for `object` - * which can be consumed by `_.fromPairs`. If `object` is a map or set, its - * entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entries - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairs(new Foo); - * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) - */ - var toPairs = createToPairs(keys); - - /** - * Creates an array of own and inherited enumerable string keyed-value pairs - * for `object` which can be consumed by `_.fromPairs`. If `object` is a map - * or set, its entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entriesIn - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairsIn(new Foo); - * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) - */ - var toPairsIn = createToPairs(keysIn); - - /** - * An alternative to `_.reduce`; this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable string keyed properties thru `iteratee`, with each invocation - * potentially mutating the `accumulator` object. If `accumulator` is not - * provided, a new object with the same `[[Prototype]]` will be used. The - * iteratee is invoked with four arguments: (accumulator, value, key, object). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @returns {*} Returns the accumulated value. - * @example - * - * _.transform([2, 3, 4], function(result, n) { - * result.push(n *= n); - * return n % 2 == 0; - * }, []); - * // => [4, 9] - * - * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } - */ - function transform(object, iteratee, accumulator) { - var isArr = isArray(object), - isArrLike = isArr || isBuffer(object) || isTypedArray(object); - - iteratee = getIteratee(iteratee, 4); - if (accumulator == null) { - var Ctor = object && object.constructor; - if (isArrLike) { - accumulator = isArr ? new Ctor : []; - } - else if (isObject(object)) { - accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; - } - else { - accumulator = {}; - } - } - (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { - return iteratee(accumulator, value, index, object); - }); - return accumulator; - } - - /** - * Removes the property at `path` of `object`. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 7 } }] }; - * _.unset(object, 'a[0].b.c'); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - * - * _.unset(object, ['a', '0', 'b', 'c']); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - */ - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } - - /** - * This method is like `_.set` except that accepts `updater` to produce the - * value to set. Use `_.updateWith` to customize `path` creation. The `updater` - * is invoked with one argument: (value). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.update(object, 'a[0].b.c', function(n) { return n * n; }); - * console.log(object.a[0].b.c); - * // => 9 - * - * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); - * console.log(object.x[0].y.z); - * // => 0 - */ - function update(object, path, updater) { - return object == null ? object : baseUpdate(object, path, castFunction(updater)); - } - - /** - * This method is like `_.update` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.updateWith(object, '[0][1]', _.constant('a'), Object); - * // => { '0': { '1': 'a' } } - */ - function updateWith(object, path, updater, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object == null ? [] : baseValues(object, keys(object)); - } - - /** - * Creates an array of the own and inherited enumerable string keyed property - * values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.valuesIn(new Foo); - * // => [1, 2, 3] (iteration order is not guaranteed) - */ - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ - function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } - - /** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ - function inRange(number, start, end) { - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - number = toNumber(number); - return baseInRange(number, start, end); - } - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); - }); - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } - - /** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ - function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); - } - - /** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ - function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - - var length = string.length; - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length); - - var end = position; - position -= target.length; - return position >= 0 && string.slice(position, end) == target; - } - - /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ - function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) - ? string.replace(reRegExpChar, '\\$&') - : string; - } - - /** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ - var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); - }); - - /** - * Converts `string`, as space separated words, to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the lower cased string. - * @example - * - * _.lowerCase('--Foo-Bar--'); - * // => 'foo bar' - * - * _.lowerCase('fooBar'); - * // => 'foo bar' - * - * _.lowerCase('__FOO_BAR__'); - * // => 'foo bar' - */ - var lowerCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + word.toLowerCase(); - }); - - /** - * Converts the first character of `string` to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.lowerFirst('Fred'); - * // => 'fred' - * - * _.lowerFirst('FRED'); - * // => 'fRED' - */ - var lowerFirst = createCaseFirst('toLowerCase'); - - /** - * Pads `string` on the left and right sides if it's shorter than `length`. - * Padding characters are truncated if they can't be evenly divided by `length`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.pad('abc', 8); - * // => ' abc ' - * - * _.pad('abc', 8, '_-'); - * // => '_-abc_-_' - * - * _.pad('abc', 3); - * // => 'abc' - */ - function pad(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - if (!length || strLength >= length) { - return string; - } - var mid = (length - strLength) / 2; - return ( - createPadding(nativeFloor(mid), chars) + - string + - createPadding(nativeCeil(mid), chars) - ); - } - - /** - * Pads `string` on the right side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padEnd('abc', 6); - * // => 'abc ' - * - * _.padEnd('abc', 6, '_-'); - * // => 'abc_-_' - * - * _.padEnd('abc', 3); - * // => 'abc' - */ - function padEnd(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (string + createPadding(length - strLength, chars)) - : string; - } - - /** - * Pads `string` on the left side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padStart('abc', 6); - * // => ' abc' - * - * _.padStart('abc', 6, '_-'); - * // => '_-_abc' - * - * _.padStart('abc', 3); - * // => 'abc' - */ - function padStart(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (createPadding(length - strLength, chars) + string) - : string; - } - - /** - * Converts `string` to an integer of the specified radix. If `radix` is - * `undefined` or `0`, a `radix` of `10` is used unless `value` is a - * hexadecimal, in which case a `radix` of `16` is used. - * - * **Note:** This method aligns with the - * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category String - * @param {string} string The string to convert. - * @param {number} [radix=10] The radix to interpret `value` by. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {number} Returns the converted integer. - * @example - * - * _.parseInt('08'); - * // => 8 - * - * _.map(['6', '08', '10'], _.parseInt); - * // => [6, 8, 10] - */ - function parseInt(string, radix, guard) { - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); - } - - /** - * Repeats the given string `n` times. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to repeat. - * @param {number} [n=1] The number of times to repeat the string. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {string} Returns the repeated string. - * @example - * - * _.repeat('*', 3); - * // => '***' - * - * _.repeat('abc', 2); - * // => 'abcabc' - * - * _.repeat('abc', 0); - * // => '' - */ - function repeat(string, n, guard) { - if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - return baseRepeat(toString(string), n); - } - - /** - * Replaces matches for `pattern` in `string` with `replacement`. - * - * **Note:** This method is based on - * [`String#replace`](https://mdn.io/String/replace). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to modify. - * @param {RegExp|string} pattern The pattern to replace. - * @param {Function|string} replacement The match replacement. - * @returns {string} Returns the modified string. - * @example - * - * _.replace('Hi Fred', 'Fred', 'Barney'); - * // => 'Hi Barney' - */ - function replace() { - var args = arguments, - string = toString(args[0]); - - return args.length < 3 ? string : string.replace(args[1], args[2]); - } - - /** - * Converts `string` to - * [snake case](https://en.wikipedia.org/wiki/Snake_case). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the snake cased string. - * @example - * - * _.snakeCase('Foo Bar'); - * // => 'foo_bar' - * - * _.snakeCase('fooBar'); - * // => 'foo_bar' - * - * _.snakeCase('--FOO-BAR--'); - * // => 'foo_bar' - */ - var snakeCase = createCompounder(function(result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase(); - }); - - /** - * Splits `string` by `separator`. - * - * **Note:** This method is based on - * [`String#split`](https://mdn.io/String/split). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to split. - * @param {RegExp|string} separator The separator pattern to split by. - * @param {number} [limit] The length to truncate results to. - * @returns {Array} Returns the string segments. - * @example - * - * _.split('a-b-c', '-', 2); - * // => ['a', 'b'] - */ - function split(string, separator, limit) { - if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { - separator = limit = undefined; - } - limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; - if (!limit) { - return []; - } - string = toString(string); - if (string && ( - typeof separator == 'string' || - (separator != null && !isRegExp(separator)) - )) { - separator = baseToString(separator); - if (!separator && hasUnicode(string)) { - return castSlice(stringToArray(string), 0, limit); - } - } - return string.split(separator, limit); - } - - /** - * Converts `string` to - * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). - * - * @static - * @memberOf _ - * @since 3.1.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the start cased string. - * @example - * - * _.startCase('--foo-bar--'); - * // => 'Foo Bar' - * - * _.startCase('fooBar'); - * // => 'Foo Bar' - * - * _.startCase('__FOO_BAR__'); - * // => 'FOO BAR' - */ - var startCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + upperFirst(word); - }); - - /** - * Checks if `string` starts with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=0] The position to search from. - * @returns {boolean} Returns `true` if `string` starts with `target`, - * else `false`. - * @example - * - * _.startsWith('abc', 'a'); - * // => true - * - * _.startsWith('abc', 'b'); - * // => false - * - * _.startsWith('abc', 'b', 1); - * // => true - */ - function startsWith(string, target, position) { - string = toString(string); - position = baseClamp(toInteger(position), 0, string.length); - target = baseToString(target); - return string.slice(position, position + target.length) == target; - } - - /** - * Creates a compiled template function that can interpolate data properties - * in "interpolate" delimiters, HTML-escape interpolated data properties in - * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data - * properties may be accessed as free variables in the template. If a setting - * object is given, it takes precedence over `_.templateSettings` values. - * - * **Note:** In the development build `_.template` utilizes - * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) - * for easier debugging. - * - * For more information on precompiling templates see - * [lodash's custom builds documentation](https://lodash.com/custom-builds). - * - * For more information on Chrome extension sandboxes see - * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The template string. - * @param {Object} [options={}] The options object. - * @param {RegExp} [options.escape=_.templateSettings.escape] - * The HTML "escape" delimiter. - * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] - * The "evaluate" delimiter. - * @param {Object} [options.imports=_.templateSettings.imports] - * An object to import into the template as free variables. - * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] - * The "interpolate" delimiter. - * @param {string} [options.sourceURL='lodash.templateSources[n]'] - * The sourceURL of the compiled template. - * @param {string} [options.variable='obj'] - * The data object variable name. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the compiled template function. - * @example - * - * // Use the "interpolate" delimiter to create a compiled template. - * var compiled = _.template('hello <%= user %>!'); - * compiled({ 'user': 'fred' }); - * // => 'hello fred!' - * - * // Use the HTML "escape" delimiter to escape data property values. - * var compiled = _.template('<%- value %>'); - * compiled({ 'value': ' - - -
- - - -``` - -## marked(markdownString [,options] [,callback]) - -### markdownString - -Type: `string` - -String of markdown source to be compiled. - -### options - -Type: `object` - -Hash of options. Can also be set using the `marked.setOptions` method as seen -above. - -### callback - -Type: `function` - -Function called when the `markdownString` has been fully parsed when using -async highlighting. If the `options` argument is omitted, this can be used as -the second argument. - -## Options - -### highlight - -Type: `function` - -A function to highlight code blocks. The first example below uses async highlighting with -[node-pygmentize-bundled][pygmentize], and the second is a synchronous example using -[highlight.js][highlight]: - -```js -var marked = require('marked'); - -var markdownString = '```js\n console.log("hello"); \n```'; - -// Async highlighting with pygmentize-bundled -marked.setOptions({ - highlight: function (code, lang, callback) { - require('pygmentize-bundled')({ lang: lang, format: 'html' }, code, function (err, result) { - callback(err, result.toString()); - }); - } -}); - -// Using async version of marked -marked(markdownString, function (err, content) { - if (err) throw err; - console.log(content); -}); - -// Synchronous highlighting with highlight.js -marked.setOptions({ - highlight: function (code) { - return require('highlight.js').highlightAuto(code).value; - } -}); - -console.log(marked(markdownString)); -``` - -#### highlight arguments - -`code` - -Type: `string` - -The section of code to pass to the highlighter. - -`lang` - -Type: `string` - -The programming language specified in the code block. - -`callback` - -Type: `function` - -The callback function to call when using an async highlighter. - -### renderer - -Type: `object` -Default: `new Renderer()` - -An object containing functions to render tokens to HTML. - -#### Overriding renderer methods - -The renderer option allows you to render tokens in a custom manner. Here is an -example of overriding the default heading token rendering by adding an embedded anchor tag like on GitHub: - -```javascript -var marked = require('marked'); -var renderer = new marked.Renderer(); - -renderer.heading = function (text, level) { - var escapedText = text.toLowerCase().replace(/[^\w]+/g, '-'); - - return '
' + - text + ''; -}, - -console.log(marked('# heading+', { renderer: renderer })); -``` -This code will output the following HTML: -```html -

- - - - heading+ -

-``` - -#### Block level renderer methods - -- code(*string* code, *string* language) -- blockquote(*string* quote) -- html(*string* html) -- heading(*string* text, *number* level) -- hr() -- list(*string* body, *boolean* ordered) -- listitem(*string* text) -- paragraph(*string* text) -- table(*string* header, *string* body) -- tablerow(*string* content) -- tablecell(*string* content, *object* flags) - -`flags` has the following properties: - -```js -{ - header: true || false, - align: 'center' || 'left' || 'right' -} -``` - -#### Inline level renderer methods - -- strong(*string* text) -- em(*string* text) -- codespan(*string* code) -- br() -- del(*string* text) -- link(*string* href, *string* title, *string* text) -- image(*string* href, *string* title, *string* text) - -### gfm - -Type: `boolean` -Default: `true` - -Enable [GitHub flavored markdown][gfm]. - -### tables - -Type: `boolean` -Default: `true` - -Enable GFM [tables][tables]. -This option requires the `gfm` option to be true. - -### breaks - -Type: `boolean` -Default: `false` - -Enable GFM [line breaks][breaks]. -This option requires the `gfm` option to be true. - -### pedantic - -Type: `boolean` -Default: `false` - -Conform to obscure parts of `markdown.pl` as much as possible. Don't fix any of -the original markdown bugs or poor behavior. - -### sanitize - -Type: `boolean` -Default: `false` - -Sanitize the output. Ignore any HTML that has been input. - -### smartLists - -Type: `boolean` -Default: `true` - -Use smarter list behavior than the original markdown. May eventually be -default with the old behavior moved into `pedantic`. - -### smartypants - -Type: `boolean` -Default: `false` - -Use "smart" typograhic punctuation for things like quotes and dashes. - -## Access to lexer and parser - -You also have direct access to the lexer and parser if you so desire. - -``` js -var tokens = marked.lexer(text, options); -console.log(marked.parser(tokens)); -``` - -``` js -var lexer = new marked.Lexer(options); -var tokens = lexer.lex(text); -console.log(tokens); -console.log(lexer.rules); -``` - -## CLI - -``` bash -$ marked -o hello.html -hello world -^D -$ cat hello.html -

hello world

-``` - -## Philosophy behind marked - -The point of marked was to create a markdown compiler where it was possible to -frequently parse huge chunks of markdown without having to worry about -caching the compiled output somehow...or blocking for an unnecesarily long time. - -marked is very concise and still implements all markdown features. It is also -now fully compatible with the client-side. - -marked more or less passes the official markdown test suite in its -entirety. This is important because a surprising number of markdown compilers -cannot pass more than a few tests. It was very difficult to get marked as -compliant as it is. It could have cut corners in several areas for the sake -of performance, but did not in order to be exactly what you expect in terms -of a markdown rendering. In fact, this is why marked could be considered at a -disadvantage in the benchmarks above. - -Along with implementing every markdown feature, marked also implements [GFM -features][gfmf]. - -## Benchmarks - -node v0.8.x - -``` bash -$ node test --bench -marked completed in 3411ms. -marked (gfm) completed in 3727ms. -marked (pedantic) completed in 3201ms. -robotskirt completed in 808ms. -showdown (reuse converter) completed in 11954ms. -showdown (new converter) completed in 17774ms. -markdown-js completed in 17191ms. -``` - -__Marked is now faster than Discount, which is written in C.__ - -For those feeling skeptical: These benchmarks run the entire markdown test suite 1000 times. The test suite tests every feature. It doesn't cater to specific aspects. - -### Pro level - -You also have direct access to the lexer and parser if you so desire. - -``` js -var tokens = marked.lexer(text, options); -console.log(marked.parser(tokens)); -``` - -``` js -var lexer = new marked.Lexer(options); -var tokens = lexer.lex(text); -console.log(tokens); -console.log(lexer.rules); -``` - -``` bash -$ node -> require('marked').lexer('> i am using marked.') -[ { type: 'blockquote_start' }, - { type: 'paragraph', - text: 'i am using marked.' }, - { type: 'blockquote_end' }, - links: {} ] -``` - -## Running Tests & Contributing - -If you want to submit a pull request, make sure your changes pass the test -suite. If you're adding a new feature, be sure to add your own test. - -The marked test suite is set up slightly strangely: `test/new` is for all tests -that are not part of the original markdown.pl test suite (this is where your -test should go if you make one). `test/original` is only for the original -markdown.pl tests. `test/tests` houses both types of tests after they have been -combined and moved/generated by running `node test --fix` or `marked --test ---fix`. - -In other words, if you have a test to add, add it to `test/new/` and then -regenerate the tests with `node test --fix`. Commit the result. If your test -uses a certain feature, for example, maybe it assumes GFM is *not* enabled, you -can add `.nogfm` to the filename. So, `my-test.text` becomes -`my-test.nogfm.text`. You can do this with any marked option. Say you want -line breaks and smartypants enabled, your filename should be: -`my-test.breaks.smartypants.text`. - -To run the tests: - -``` bash -cd marked/ -node test -``` - -### Contribution and License Agreement - -If you contribute code to this project, you are implicitly allowing your code -to be distributed under the MIT license. You are also implicitly verifying that -all code is your original work. `` - -## License - -Copyright (c) 2011-2014, Christopher Jeffrey. (MIT License) - -See LICENSE for more info. - -[gfm]: https://help.github.com/articles/github-flavored-markdown -[gfmf]: http://github.github.com/github-flavored-markdown/ -[pygmentize]: https://github.com/rvagg/node-pygmentize-bundled -[highlight]: https://github.com/isagalaev/highlight.js -[badge]: http://badge.fury.io/js/marked -[tables]: https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#wiki-tables -[breaks]: https://help.github.com/articles/github-flavored-markdown#newlines diff --git a/fundamentals/bug-challenge-es6/node_modules/marked/bin/marked b/fundamentals/bug-challenge-es6/node_modules/marked/bin/marked deleted file mode 100755 index 64254fc3e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/marked/bin/marked +++ /dev/null @@ -1,187 +0,0 @@ -#!/usr/bin/env node - -/** - * Marked CLI - * Copyright (c) 2011-2013, Christopher Jeffrey (MIT License) - */ - -var fs = require('fs') - , util = require('util') - , marked = require('../'); - -/** - * Man Page - */ - -function help() { - var spawn = require('child_process').spawn; - - var options = { - cwd: process.cwd(), - env: process.env, - setsid: false, - customFds: [0, 1, 2] - }; - - spawn('man', - [__dirname + '/../man/marked.1'], - options); -} - -/** - * Main - */ - -function main(argv, callback) { - var files = [] - , options = {} - , input - , output - , arg - , tokens - , opt; - - function getarg() { - var arg = argv.shift(); - - if (arg.indexOf('--') === 0) { - // e.g. --opt - arg = arg.split('='); - if (arg.length > 1) { - // e.g. --opt=val - argv.unshift(arg.slice(1).join('=')); - } - arg = arg[0]; - } else if (arg[0] === '-') { - if (arg.length > 2) { - // e.g. -abc - argv = arg.substring(1).split('').map(function(ch) { - return '-' + ch; - }).concat(argv); - arg = argv.shift(); - } else { - // e.g. -a - } - } else { - // e.g. foo - } - - return arg; - } - - while (argv.length) { - arg = getarg(); - switch (arg) { - case '--test': - return require('../test').main(process.argv.slice()); - case '-o': - case '--output': - output = argv.shift(); - break; - case '-i': - case '--input': - input = argv.shift(); - break; - case '-t': - case '--tokens': - tokens = true; - break; - case '-h': - case '--help': - return help(); - default: - if (arg.indexOf('--') === 0) { - opt = camelize(arg.replace(/^--(no-)?/, '')); - if (!marked.defaults.hasOwnProperty(opt)) { - continue; - } - if (arg.indexOf('--no-') === 0) { - options[opt] = typeof marked.defaults[opt] !== 'boolean' - ? null - : false; - } else { - options[opt] = typeof marked.defaults[opt] !== 'boolean' - ? argv.shift() - : true; - } - } else { - files.push(arg); - } - break; - } - } - - function getData(callback) { - if (!input) { - if (files.length <= 2) { - return getStdin(callback); - } - input = files.pop(); - } - return fs.readFile(input, 'utf8', callback); - } - - return getData(function(err, data) { - if (err) return callback(err); - - data = tokens - ? JSON.stringify(marked.lexer(data, options), null, 2) - : marked(data, options); - - if (!output) { - process.stdout.write(data + '\n'); - return callback(); - } - - return fs.writeFile(output, data, callback); - }); -} - -/** - * Helpers - */ - -function getStdin(callback) { - var stdin = process.stdin - , buff = ''; - - stdin.setEncoding('utf8'); - - stdin.on('data', function(data) { - buff += data; - }); - - stdin.on('error', function(err) { - return callback(err); - }); - - stdin.on('end', function() { - return callback(null, buff); - }); - - try { - stdin.resume(); - } catch (e) { - callback(e); - } -} - -function camelize(text) { - return text.replace(/(\w)-(\w)/g, function(_, a, b) { - return a + b.toUpperCase(); - }); -} - -/** - * Expose / Entry Point - */ - -if (!module.parent) { - process.title = 'marked'; - main(process.argv.slice(), function(err, code) { - if (err) throw err; - return process.exit(code || 0); - }); -} else { - module.exports = main; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/marked/bower.json b/fundamentals/bug-challenge-es6/node_modules/marked/bower.json deleted file mode 100644 index a2a818775..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/marked/bower.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "marked", - "version": "0.3.4", - "homepage": "https://github.com/chjj/marked", - "authors": [ - "Christopher Jeffrey " - ], - "description": "A markdown parser built for speed", - "keywords": [ - "markdown", - "markup", - "html" - ], - "main": "lib/marked.js", - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "app/bower_components", - "test", - "tests" - ] -} diff --git a/fundamentals/bug-challenge-es6/node_modules/marked/component.json b/fundamentals/bug-challenge-es6/node_modules/marked/component.json deleted file mode 100644 index 1d672877f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/marked/component.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "marked", - "version": "0.3.4", - "repo": "chjj/marked", - "description": "A markdown parser built for speed", - "keywords": ["markdown", "markup", "html"], - "scripts": ["lib/marked.js"], - "main": "lib/marked.js", - "license": "MIT" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/marked/doc/broken.md b/fundamentals/bug-challenge-es6/node_modules/marked/doc/broken.md deleted file mode 100644 index 7bfa49e8a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/marked/doc/broken.md +++ /dev/null @@ -1,426 +0,0 @@ -# Markdown is broken - -I have a lot of scraps of markdown engine oddities that I've collected over the -years. What you see below is slightly messy, but it's what I've managed to -cobble together to illustrate the differences between markdown engines, and -why, if there ever is a markdown specification, it has to be absolutely -thorough. There are a lot more of these little differences I have documented -elsewhere. I know I will find them lingering on my disk one day, but until -then, I'll continue to add whatever strange nonsensical things I find. - -Some of these examples may only mention a particular engine compared to marked. -However, the examples with markdown.pl could easily be swapped out for -discount, upskirt, or markdown.js, and you would very easily see even more -inconsistencies. - -A lot of this was written when I was very unsatisfied with the inconsistencies -between markdown engines. Please excuse the frustration noticeable in my -writing. - -## Examples of markdown's "stupid" list parsing - -``` -$ markdown.pl - - * item1 - - * item2 - - text -^D -
    -
  • item1

    - -
      -
    • item2
    • -
    - -

    text

  • -

-``` - - -``` -$ marked - * item1 - - * item2 - - text -^D -
    -
  • item1

    -
      -
    • item2
    • -
    -

    text

    -
  • -
-``` - -Which looks correct to you? - -- - - - -``` -$ markdown.pl -* hello - > world -^D -

    -
  • hello

    - -
    -

    world

  • -

- -``` - -``` -$ marked -* hello - > world -^D -
    -
  • hello
    -

    world

    -
    -
  • -
-``` - -Again, which looks correct to you? - -- - - - -EXAMPLE: - -``` -$ markdown.pl -* hello - * world - * hi - code -^D -
    -
  • hello -
      -
    • world
    • -
    • hi - code
    • -
  • -
-``` - -The code isn't a code block even though it's after the bullet margin. I know, -lets give it two more spaces, effectively making it 8 spaces past the bullet. - -``` -$ markdown.pl -* hello - * world - * hi - code -^D -
    -
  • hello -
      -
    • world
    • -
    • hi - code
    • -
  • -
-``` - -And, it's still not a code block. Did you also notice that the 3rd item isn't -even its own list? Markdown screws that up too because of its indentation -unaware parsing. - -- - - - -Let's look at some more examples of markdown's list parsing: - -``` -$ markdown.pl - - * item1 - - * item2 - - text -^D -
    -
  • item1

    - -
      -
    • item2
    • -
    - -

    text

  • -

-``` - -Misnested tags. - - -``` -$ marked - * item1 - - * item2 - - text -^D -
    -
  • item1

    -
      -
    • item2
    • -
    -

    text

    -
  • -
-``` - -Which looks correct to you? - -- - - - -``` -$ markdown.pl -* hello - > world -^D -

    -
  • hello

    - -
    -

    world

  • -

- -``` - -More misnested tags. - - -``` -$ marked -* hello - > world -^D -
    -
  • hello
    -

    world

    -
    -
  • -
-``` - -Again, which looks correct to you? - -- - - - -# Why quality matters - Part 2 - -``` bash -$ markdown.pl -* hello - > world -^D -

    -
  • hello

    - -
    -

    world

  • -

- -``` - -``` bash -$ sundown # upskirt -* hello - > world -^D -
    -
  • hello -> world
  • -
-``` - -``` bash -$ marked -* hello - > world -^D -
  • hello

    world

-``` - -Which looks correct to you? - -- - - - -See: https://github.com/evilstreak/markdown-js/issues/23 - -``` bash -$ markdown.pl # upskirt/markdown.js/discount -* hello - var a = 1; -* world -^D -
    -
  • hello -var a = 1;
  • -
  • world
  • -
-``` - -``` bash -$ marked -* hello - var a = 1; -* world -^D -
  • hello -
    code>var a = 1;
  • -
  • world
-``` - -Which looks more reasonable? Why shouldn't code blocks be able to appear in -list items in a sane way? - -- - - - -``` bash -$ markdown.js -
hello
- -hello -^D -

<div>hello</div>

- -

<span>hello</span>

-``` - -``` bash -$ marked -
hello
- -hello -^D -
hello
- - -

hello -

-``` - -- - - - -See: https://github.com/evilstreak/markdown-js/issues/27 - -``` bash -$ markdown.js -[![an image](/image)](/link) -^D -

![an image

-``` - -``` bash -$ marked -[![an image](/image)](/link) -^D -

an image -

-``` - -- - - - -See: https://github.com/evilstreak/markdown-js/issues/24 - -``` bash -$ markdown.js -> a - -> b - -> c -^D -

a

bundefined> c

-``` - -``` bash -$ marked -> a - -> b - -> c -^D -

a - -

-

b - -

-

c -

-``` - -- - - - -``` bash -$ markdown.pl -* hello - * world - how - - are - you - - * today -* hi -^D -
    -
  • hello

    - -
      -
    • world -how
    • -
    - -

    are -you

    - -
      -
    • today
    • -
  • -
  • hi
  • -
-``` - -``` bash -$ marked -* hello - * world - how - - are - you - - * today -* hi -^D -
    -
  • hello

    -
      -
    • world -how

      -

      are -you

      -
    • -
    • today

      -
    • -
    -
  • -
  • hi
  • -
-``` diff --git a/fundamentals/bug-challenge-es6/node_modules/marked/doc/todo.md b/fundamentals/bug-challenge-es6/node_modules/marked/doc/todo.md deleted file mode 100644 index 2e60b162a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/marked/doc/todo.md +++ /dev/null @@ -1,2 +0,0 @@ -# Todo - diff --git a/fundamentals/bug-challenge-es6/node_modules/marked/index.js b/fundamentals/bug-challenge-es6/node_modules/marked/index.js deleted file mode 100644 index a12f90569..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/marked/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/marked'); diff --git a/fundamentals/bug-challenge-es6/node_modules/marked/lib/marked.js b/fundamentals/bug-challenge-es6/node_modules/marked/lib/marked.js deleted file mode 100644 index 9f1584bb3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/marked/lib/marked.js +++ /dev/null @@ -1,1286 +0,0 @@ -/** - * marked - a markdown parser - * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) - * https://github.com/chjj/marked - */ - -;(function() { - -/** - * Block-Level Grammar - */ - -var block = { - newline: /^\n+/, - code: /^( {4}[^\n]+\n*)+/, - fences: noop, - hr: /^( *[-*_]){3,} *(?:\n+|$)/, - heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, - nptable: noop, - lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, - blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/, - list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, - html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/, - def: /^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, - table: noop, - paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/, - text: /^[^\n]+/ -}; - -block.bullet = /(?:[*+-]|\d+\.)/; -block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; -block.item = replace(block.item, 'gm') - (/bull/g, block.bullet) - (); - -block.list = replace(block.list) - (/bull/g, block.bullet) - ('hr', '\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))') - ('def', '\\n+(?=' + block.def.source + ')') - (); - -block.blockquote = replace(block.blockquote) - ('def', block.def) - (); - -block._tag = '(?!(?:' - + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code' - + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo' - + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b'; - -block.html = replace(block.html) - ('comment', //) - ('closed', /<(tag)[\s\S]+?<\/\1>/) - ('closing', /])*?>/) - (/tag/g, block._tag) - (); - -block.paragraph = replace(block.paragraph) - ('hr', block.hr) - ('heading', block.heading) - ('lheading', block.lheading) - ('blockquote', block.blockquote) - ('tag', '<' + block._tag) - ('def', block.def) - (); - -/** - * Normal Block Grammar - */ - -block.normal = merge({}, block); - -/** - * GFM Block Grammar - */ - -block.gfm = merge({}, block.normal, { - fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/, - paragraph: /^/, - heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/ -}); - -block.gfm.paragraph = replace(block.paragraph) - ('(?!', '(?!' - + block.gfm.fences.source.replace('\\1', '\\2') + '|' - + block.list.source.replace('\\1', '\\3') + '|') - (); - -/** - * GFM + Tables Block Grammar - */ - -block.tables = merge({}, block.gfm, { - nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, - table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ -}); - -/** - * Block Lexer - */ - -function Lexer(options) { - this.tokens = []; - this.tokens.links = {}; - this.options = options || marked.defaults; - this.rules = block.normal; - - if (this.options.gfm) { - if (this.options.tables) { - this.rules = block.tables; - } else { - this.rules = block.gfm; - } - } -} - -/** - * Expose Block Rules - */ - -Lexer.rules = block; - -/** - * Static Lex Method - */ - -Lexer.lex = function(src, options) { - var lexer = new Lexer(options); - return lexer.lex(src); -}; - -/** - * Preprocessing - */ - -Lexer.prototype.lex = function(src) { - src = src - .replace(/\r\n|\r/g, '\n') - .replace(/\t/g, ' ') - .replace(/\u00a0/g, ' ') - .replace(/\u2424/g, '\n'); - - return this.token(src, true); -}; - -/** - * Lexing - */ - -Lexer.prototype.token = function(src, top, bq) { - var src = src.replace(/^ +$/gm, '') - , next - , loose - , cap - , bull - , b - , item - , space - , i - , l; - - while (src) { - // newline - if (cap = this.rules.newline.exec(src)) { - src = src.substring(cap[0].length); - if (cap[0].length > 1) { - this.tokens.push({ - type: 'space' - }); - } - } - - // code - if (cap = this.rules.code.exec(src)) { - src = src.substring(cap[0].length); - cap = cap[0].replace(/^ {4}/gm, ''); - this.tokens.push({ - type: 'code', - text: !this.options.pedantic - ? cap.replace(/\n+$/, '') - : cap - }); - continue; - } - - // fences (gfm) - if (cap = this.rules.fences.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'code', - lang: cap[2], - text: cap[3] || '' - }); - continue; - } - - // heading - if (cap = this.rules.heading.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'heading', - depth: cap[1].length, - text: cap[2] - }); - continue; - } - - // table no leading pipe (gfm) - if (top && (cap = this.rules.nptable.exec(src))) { - src = src.substring(cap[0].length); - - item = { - type: 'table', - header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), - align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), - cells: cap[3].replace(/\n$/, '').split('\n') - }; - - for (i = 0; i < item.align.length; i++) { - if (/^ *-+: *$/.test(item.align[i])) { - item.align[i] = 'right'; - } else if (/^ *:-+: *$/.test(item.align[i])) { - item.align[i] = 'center'; - } else if (/^ *:-+ *$/.test(item.align[i])) { - item.align[i] = 'left'; - } else { - item.align[i] = null; - } - } - - for (i = 0; i < item.cells.length; i++) { - item.cells[i] = item.cells[i].split(/ *\| */); - } - - this.tokens.push(item); - - continue; - } - - // lheading - if (cap = this.rules.lheading.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'heading', - depth: cap[2] === '=' ? 1 : 2, - text: cap[1] - }); - continue; - } - - // hr - if (cap = this.rules.hr.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'hr' - }); - continue; - } - - // blockquote - if (cap = this.rules.blockquote.exec(src)) { - src = src.substring(cap[0].length); - - this.tokens.push({ - type: 'blockquote_start' - }); - - cap = cap[0].replace(/^ *> ?/gm, ''); - - // Pass `top` to keep the current - // "toplevel" state. This is exactly - // how markdown.pl works. - this.token(cap, top, true); - - this.tokens.push({ - type: 'blockquote_end' - }); - - continue; - } - - // list - if (cap = this.rules.list.exec(src)) { - src = src.substring(cap[0].length); - bull = cap[2]; - - this.tokens.push({ - type: 'list_start', - ordered: bull.length > 1 - }); - - // Get each top-level item. - cap = cap[0].match(this.rules.item); - - next = false; - l = cap.length; - i = 0; - - for (; i < l; i++) { - item = cap[i]; - - // Remove the list item's bullet - // so it is seen as the next token. - space = item.length; - item = item.replace(/^ *([*+-]|\d+\.) +/, ''); - - // Outdent whatever the - // list item contains. Hacky. - if (~item.indexOf('\n ')) { - space -= item.length; - item = !this.options.pedantic - ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '') - : item.replace(/^ {1,4}/gm, ''); - } - - // Determine whether the next list item belongs here. - // Backpedal if it does not belong in this list. - if (this.options.smartLists && i !== l - 1) { - b = block.bullet.exec(cap[i + 1])[0]; - if (bull !== b && !(bull.length > 1 && b.length > 1)) { - src = cap.slice(i + 1).join('\n') + src; - i = l - 1; - } - } - - // Determine whether item is loose or not. - // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/ - // for discount behavior. - loose = next || /\n\n(?!\s*$)/.test(item); - if (i !== l - 1) { - next = item.charAt(item.length - 1) === '\n'; - if (!loose) loose = next; - } - - this.tokens.push({ - type: loose - ? 'loose_item_start' - : 'list_item_start' - }); - - // Recurse. - this.token(item, false, bq); - - this.tokens.push({ - type: 'list_item_end' - }); - } - - this.tokens.push({ - type: 'list_end' - }); - - continue; - } - - // html - if (cap = this.rules.html.exec(src)) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: this.options.sanitize - ? 'paragraph' - : 'html', - pre: !this.options.sanitizer - && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'), - text: cap[0] - }); - continue; - } - - // def - if ((!bq && top) && (cap = this.rules.def.exec(src))) { - src = src.substring(cap[0].length); - this.tokens.links[cap[1].toLowerCase()] = { - href: cap[2], - title: cap[3] - }; - continue; - } - - // table (gfm) - if (top && (cap = this.rules.table.exec(src))) { - src = src.substring(cap[0].length); - - item = { - type: 'table', - header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */), - align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */), - cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n') - }; - - for (i = 0; i < item.align.length; i++) { - if (/^ *-+: *$/.test(item.align[i])) { - item.align[i] = 'right'; - } else if (/^ *:-+: *$/.test(item.align[i])) { - item.align[i] = 'center'; - } else if (/^ *:-+ *$/.test(item.align[i])) { - item.align[i] = 'left'; - } else { - item.align[i] = null; - } - } - - for (i = 0; i < item.cells.length; i++) { - item.cells[i] = item.cells[i] - .replace(/^ *\| *| *\| *$/g, '') - .split(/ *\| */); - } - - this.tokens.push(item); - - continue; - } - - // top-level paragraph - if (top && (cap = this.rules.paragraph.exec(src))) { - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'paragraph', - text: cap[1].charAt(cap[1].length - 1) === '\n' - ? cap[1].slice(0, -1) - : cap[1] - }); - continue; - } - - // text - if (cap = this.rules.text.exec(src)) { - // Top-level should never reach here. - src = src.substring(cap[0].length); - this.tokens.push({ - type: 'text', - text: cap[0] - }); - continue; - } - - if (src) { - throw new - Error('Infinite loop on byte: ' + src.charCodeAt(0)); - } - } - - return this.tokens; -}; - -/** - * Inline-Level Grammar - */ - -var inline = { - escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, - autolink: /^<([^ >]+(@|:\/)[^ >]+)>/, - url: noop, - tag: /^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/, - link: /^!?\[(inside)\]\(href\)/, - reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, - nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, - strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, - em: /^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, - code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/, - br: /^ {2,}\n(?!\s*$)/, - del: noop, - text: /^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/; - -inline.link = replace(inline.link) - ('inside', inline._inside) - ('href', inline._href) - (); - -inline.reflink = replace(inline.reflink) - ('inside', inline._inside) - (); - -/** - * Normal Inline Grammar - */ - -inline.normal = merge({}, inline); - -/** - * Pedantic Inline Grammar - */ - -inline.pedantic = merge({}, inline.normal, { - strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, - em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ -}); - -/** - * GFM Inline Grammar - */ - -inline.gfm = merge({}, inline.normal, { - escape: replace(inline.escape)('])', '~|])')(), - url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/, - del: /^~~(?=\S)([\s\S]*?\S)~~/, - text: replace(inline.text) - (']|', '~]|') - ('|', '|https?://|') - () -}); - -/** - * GFM + Line Breaks Inline Grammar - */ - -inline.breaks = merge({}, inline.gfm, { - br: replace(inline.br)('{2,}', '*')(), - text: replace(inline.gfm.text)('{2,}', '*')() -}); - -/** - * Inline Lexer & Compiler - */ - -function InlineLexer(links, options) { - this.options = options || marked.defaults; - this.links = links; - this.rules = inline.normal; - this.renderer = this.options.renderer || new Renderer; - this.renderer.options = this.options; - - if (!this.links) { - throw new - Error('Tokens array requires a `links` property.'); - } - - if (this.options.gfm) { - if (this.options.breaks) { - this.rules = inline.breaks; - } else { - this.rules = inline.gfm; - } - } else if (this.options.pedantic) { - this.rules = inline.pedantic; - } -} - -/** - * Expose Inline Rules - */ - -InlineLexer.rules = inline; - -/** - * Static Lexing/Compiling Method - */ - -InlineLexer.output = function(src, links, options) { - var inline = new InlineLexer(links, options); - return inline.output(src); -}; - -/** - * Lexing/Compiling - */ - -InlineLexer.prototype.output = function(src) { - var out = '' - , link - , text - , href - , cap; - - while (src) { - // escape - if (cap = this.rules.escape.exec(src)) { - src = src.substring(cap[0].length); - out += cap[1]; - continue; - } - - // autolink - if (cap = this.rules.autolink.exec(src)) { - src = src.substring(cap[0].length); - if (cap[2] === '@') { - text = cap[1].charAt(6) === ':' - ? this.mangle(cap[1].substring(7)) - : this.mangle(cap[1]); - href = this.mangle('mailto:') + text; - } else { - text = escape(cap[1]); - href = text; - } - out += this.renderer.link(href, null, text); - continue; - } - - // url (gfm) - if (!this.inLink && (cap = this.rules.url.exec(src))) { - src = src.substring(cap[0].length); - text = escape(cap[1]); - href = text; - out += this.renderer.link(href, null, text); - continue; - } - - // tag - if (cap = this.rules.tag.exec(src)) { - if (!this.inLink && /^/i.test(cap[0])) { - this.inLink = false; - } - src = src.substring(cap[0].length); - out += this.options.sanitize - ? this.options.sanitizer - ? this.options.sanitizer(cap[0]) - : escape(cap[0]) - : cap[0] - continue; - } - - // link - if (cap = this.rules.link.exec(src)) { - src = src.substring(cap[0].length); - this.inLink = true; - out += this.outputLink(cap, { - href: cap[2], - title: cap[3] - }); - this.inLink = false; - continue; - } - - // reflink, nolink - if ((cap = this.rules.reflink.exec(src)) - || (cap = this.rules.nolink.exec(src))) { - src = src.substring(cap[0].length); - link = (cap[2] || cap[1]).replace(/\s+/g, ' '); - link = this.links[link.toLowerCase()]; - if (!link || !link.href) { - out += cap[0].charAt(0); - src = cap[0].substring(1) + src; - continue; - } - this.inLink = true; - out += this.outputLink(cap, link); - this.inLink = false; - continue; - } - - // strong - if (cap = this.rules.strong.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.strong(this.output(cap[2] || cap[1])); - continue; - } - - // em - if (cap = this.rules.em.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.em(this.output(cap[2] || cap[1])); - continue; - } - - // code - if (cap = this.rules.code.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.codespan(escape(cap[2], true)); - continue; - } - - // br - if (cap = this.rules.br.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.br(); - continue; - } - - // del (gfm) - if (cap = this.rules.del.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.del(this.output(cap[1])); - continue; - } - - // text - if (cap = this.rules.text.exec(src)) { - src = src.substring(cap[0].length); - out += this.renderer.text(escape(this.smartypants(cap[0]))); - continue; - } - - if (src) { - throw new - Error('Infinite loop on byte: ' + src.charCodeAt(0)); - } - } - - return out; -}; - -/** - * Compile Link - */ - -InlineLexer.prototype.outputLink = function(cap, link) { - var href = escape(link.href) - , title = link.title ? escape(link.title) : null; - - return cap[0].charAt(0) !== '!' - ? this.renderer.link(href, title, this.output(cap[1])) - : this.renderer.image(href, title, escape(cap[1])); -}; - -/** - * Smartypants Transformations - */ - -InlineLexer.prototype.smartypants = function(text) { - if (!this.options.smartypants) return text; - return text - // em-dashes - .replace(/---/g, '\u2014') - // en-dashes - .replace(/--/g, '\u2013') - // opening singles - .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018') - // closing singles & apostrophes - .replace(/'/g, '\u2019') - // opening doubles - .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c') - // closing doubles - .replace(/"/g, '\u201d') - // ellipses - .replace(/\.{3}/g, '\u2026'); -}; - -/** - * Mangle Links - */ - -InlineLexer.prototype.mangle = function(text) { - if (!this.options.mangle) return text; - var out = '' - , l = text.length - , i = 0 - , ch; - - for (; i < l; i++) { - ch = text.charCodeAt(i); - if (Math.random() > 0.5) { - ch = 'x' + ch.toString(16); - } - out += '&#' + ch + ';'; - } - - return out; -}; - -/** - * Renderer - */ - -function Renderer(options) { - this.options = options || {}; -} - -Renderer.prototype.code = function(code, lang, escaped) { - if (this.options.highlight) { - var out = this.options.highlight(code, lang); - if (out != null && out !== code) { - escaped = true; - code = out; - } - } - - if (!lang) { - return '
'
-      + (escaped ? code : escape(code, true))
-      + '\n
'; - } - - return '
'
-    + (escaped ? code : escape(code, true))
-    + '\n
\n'; -}; - -Renderer.prototype.blockquote = function(quote) { - return '
\n' + quote + '
\n'; -}; - -Renderer.prototype.html = function(html) { - return html; -}; - -Renderer.prototype.heading = function(text, level, raw) { - return '' - + text - + '\n'; -}; - -Renderer.prototype.hr = function() { - return this.options.xhtml ? '
\n' : '
\n'; -}; - -Renderer.prototype.list = function(body, ordered) { - var type = ordered ? 'ol' : 'ul'; - return '<' + type + '>\n' + body + '\n'; -}; - -Renderer.prototype.listitem = function(text) { - return '
  • ' + text + '
  • \n'; -}; - -Renderer.prototype.paragraph = function(text) { - return '

    ' + text + '

    \n'; -}; - -Renderer.prototype.table = function(header, body) { - return '\n' - + '\n' - + header - + '\n' - + '\n' - + body - + '\n' - + '
    \n'; -}; - -Renderer.prototype.tablerow = function(content) { - return '\n' + content + '\n'; -}; - -Renderer.prototype.tablecell = function(content, flags) { - var type = flags.header ? 'th' : 'td'; - var tag = flags.align - ? '<' + type + ' style="text-align:' + flags.align + '">' - : '<' + type + '>'; - return tag + content + '\n'; -}; - -// span level renderer -Renderer.prototype.strong = function(text) { - return '' + text + ''; -}; - -Renderer.prototype.em = function(text) { - return '' + text + ''; -}; - -Renderer.prototype.codespan = function(text) { - return '' + text + ''; -}; - -Renderer.prototype.br = function() { - return this.options.xhtml ? '
    ' : '
    '; -}; - -Renderer.prototype.del = function(text) { - return '' + text + ''; -}; - -Renderer.prototype.link = function(href, title, text) { - if (this.options.sanitize) { - try { - var prot = decodeURIComponent(unescape(href)) - .replace(/[^\w:]/g, '') - .toLowerCase(); - } catch (e) { - return ''; - } - if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0) { - return ''; - } - } - var out = '
    '; - return out; -}; - -Renderer.prototype.image = function(href, title, text) { - var out = '' + text + '' : '>'; - return out; -}; - -Renderer.prototype.text = function(text) { - return text; -}; - -/** - * Parsing & Compiling - */ - -function Parser(options) { - this.tokens = []; - this.token = null; - this.options = options || marked.defaults; - this.options.renderer = this.options.renderer || new Renderer; - this.renderer = this.options.renderer; - this.renderer.options = this.options; -} - -/** - * Static Parse Method - */ - -Parser.parse = function(src, options, renderer) { - var parser = new Parser(options, renderer); - return parser.parse(src); -}; - -/** - * Parse Loop - */ - -Parser.prototype.parse = function(src) { - this.inline = new InlineLexer(src.links, this.options, this.renderer); - this.tokens = src.reverse(); - - var out = ''; - while (this.next()) { - out += this.tok(); - } - - return out; -}; - -/** - * Next Token - */ - -Parser.prototype.next = function() { - return this.token = this.tokens.pop(); -}; - -/** - * Preview Next Token - */ - -Parser.prototype.peek = function() { - return this.tokens[this.tokens.length - 1] || 0; -}; - -/** - * Parse Text Tokens - */ - -Parser.prototype.parseText = function() { - var body = this.token.text; - - while (this.peek().type === 'text') { - body += '\n' + this.next().text; - } - - return this.inline.output(body); -}; - -/** - * Parse Current Token - */ - -Parser.prototype.tok = function() { - switch (this.token.type) { - case 'space': { - return ''; - } - case 'hr': { - return this.renderer.hr(); - } - case 'heading': { - return this.renderer.heading( - this.inline.output(this.token.text), - this.token.depth, - this.token.text); - } - case 'code': { - return this.renderer.code(this.token.text, - this.token.lang, - this.token.escaped); - } - case 'table': { - var header = '' - , body = '' - , i - , row - , cell - , flags - , j; - - // header - cell = ''; - for (i = 0; i < this.token.header.length; i++) { - flags = { header: true, align: this.token.align[i] }; - cell += this.renderer.tablecell( - this.inline.output(this.token.header[i]), - { header: true, align: this.token.align[i] } - ); - } - header += this.renderer.tablerow(cell); - - for (i = 0; i < this.token.cells.length; i++) { - row = this.token.cells[i]; - - cell = ''; - for (j = 0; j < row.length; j++) { - cell += this.renderer.tablecell( - this.inline.output(row[j]), - { header: false, align: this.token.align[j] } - ); - } - - body += this.renderer.tablerow(cell); - } - return this.renderer.table(header, body); - } - case 'blockquote_start': { - var body = ''; - - while (this.next().type !== 'blockquote_end') { - body += this.tok(); - } - - return this.renderer.blockquote(body); - } - case 'list_start': { - var body = '' - , ordered = this.token.ordered; - - while (this.next().type !== 'list_end') { - body += this.tok(); - } - - return this.renderer.list(body, ordered); - } - case 'list_item_start': { - var body = ''; - - while (this.next().type !== 'list_item_end') { - body += this.token.type === 'text' - ? this.parseText() - : this.tok(); - } - - return this.renderer.listitem(body); - } - case 'loose_item_start': { - var body = ''; - - while (this.next().type !== 'list_item_end') { - body += this.tok(); - } - - return this.renderer.listitem(body); - } - case 'html': { - var html = !this.token.pre && !this.options.pedantic - ? this.inline.output(this.token.text) - : this.token.text; - return this.renderer.html(html); - } - case 'paragraph': { - return this.renderer.paragraph(this.inline.output(this.token.text)); - } - case 'text': { - return this.renderer.paragraph(this.parseText()); - } - } -}; - -/** - * Helpers - */ - -function escape(html, encode) { - return html - .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&') - .replace(//g, '>') - .replace(/"/g, '"') - .replace(/'/g, '''); -} - -function unescape(html) { - // explicitly match decimal, hex, and named HTML entities - return html.replace(/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/g, function(_, n) { - n = n.toLowerCase(); - if (n === 'colon') return ':'; - if (n.charAt(0) === '#') { - return n.charAt(1) === 'x' - ? String.fromCharCode(parseInt(n.substring(2), 16)) - : String.fromCharCode(+n.substring(1)); - } - return ''; - }); -} - -function replace(regex, opt) { - regex = regex.source; - opt = opt || ''; - return function self(name, val) { - if (!name) return new RegExp(regex, opt); - val = val.source || val; - val = val.replace(/(^|[^\[])\^/g, '$1'); - regex = regex.replace(name, val); - return self; - }; -} - -function noop() {} -noop.exec = noop; - -function merge(obj) { - var i = 1 - , target - , key; - - for (; i < arguments.length; i++) { - target = arguments[i]; - for (key in target) { - if (Object.prototype.hasOwnProperty.call(target, key)) { - obj[key] = target[key]; - } - } - } - - return obj; -} - - -/** - * Marked - */ - -function marked(src, opt, callback) { - if (callback || typeof opt === 'function') { - if (!callback) { - callback = opt; - opt = null; - } - - opt = merge({}, marked.defaults, opt || {}); - - var highlight = opt.highlight - , tokens - , pending - , i = 0; - - try { - tokens = Lexer.lex(src, opt) - } catch (e) { - return callback(e); - } - - pending = tokens.length; - - var done = function(err) { - if (err) { - opt.highlight = highlight; - return callback(err); - } - - var out; - - try { - out = Parser.parse(tokens, opt); - } catch (e) { - err = e; - } - - opt.highlight = highlight; - - return err - ? callback(err) - : callback(null, out); - }; - - if (!highlight || highlight.length < 3) { - return done(); - } - - delete opt.highlight; - - if (!pending) return done(); - - for (; i < tokens.length; i++) { - (function(token) { - if (token.type !== 'code') { - return --pending || done(); - } - return highlight(token.text, token.lang, function(err, code) { - if (err) return done(err); - if (code == null || code === token.text) { - return --pending || done(); - } - token.text = code; - token.escaped = true; - --pending || done(); - }); - })(tokens[i]); - } - - return; - } - try { - if (opt) opt = merge({}, marked.defaults, opt); - return Parser.parse(Lexer.lex(src, opt), opt); - } catch (e) { - e.message += '\nPlease report this to https://github.com/chjj/marked.'; - if ((opt || marked.defaults).silent) { - return '

    An error occured:

    '
    -        + escape(e.message + '', true)
    -        + '
    '; - } - throw e; - } -} - -/** - * Options - */ - -marked.options = -marked.setOptions = function(opt) { - merge(marked.defaults, opt); - return marked; -}; - -marked.defaults = { - gfm: true, - tables: true, - breaks: false, - pedantic: false, - sanitize: false, - sanitizer: null, - mangle: true, - smartLists: false, - silent: false, - highlight: null, - langPrefix: 'lang-', - smartypants: false, - headerPrefix: '', - renderer: new Renderer, - xhtml: false -}; - -/** - * Expose - */ - -marked.Parser = Parser; -marked.parser = Parser.parse; - -marked.Renderer = Renderer; - -marked.Lexer = Lexer; -marked.lexer = Lexer.lex; - -marked.InlineLexer = InlineLexer; -marked.inlineLexer = InlineLexer.output; - -marked.parse = marked; - -if (typeof module !== 'undefined' && typeof exports === 'object') { - module.exports = marked; -} else if (typeof define === 'function' && define.amd) { - define(function() { return marked; }); -} else { - this.marked = marked; -} - -}).call(function() { - return this || (typeof window !== 'undefined' ? window : global); -}()); diff --git a/fundamentals/bug-challenge-es6/node_modules/marked/man/marked.1 b/fundamentals/bug-challenge-es6/node_modules/marked/man/marked.1 deleted file mode 100644 index b9bdc8c21..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/marked/man/marked.1 +++ /dev/null @@ -1,91 +0,0 @@ -.ds q \N'34' -.TH marked 1 "2014-01-31" "v0.3.1" "marked.js" - -.SH NAME -marked \- a javascript markdown parser - -.SH SYNOPSIS -.B marked -[\-o \fI\fP] [\-i \fI\fP] [\-\-help] -[\-\-tokens] [\-\-pedantic] [\-\-gfm] -[\-\-breaks] [\-\-tables] [\-\-sanitize] -[\-\-smart\-lists] [\-\-lang\-prefix \fI\fP] -[\-\-no\-etc...] [\-\-silent] [\fIfilename\fP] - -.SH DESCRIPTION -.B marked -is a full-featured javascript markdown parser, built for speed. It also includes -multiple GFM features. - -.SH EXAMPLES -.TP -cat in.md | marked > out.html -.TP -echo "hello *world*" | marked -.TP -marked \-o out.html in.md \-\-gfm -.TP -marked \-\-output="hello world.html" \-i in.md \-\-no-breaks - -.SH OPTIONS -.TP -.BI \-o,\ \-\-output\ [\fIoutput\fP] -Specify file output. If none is specified, write to stdout. -.TP -.BI \-i,\ \-\-input\ [\fIinput\fP] -Specify file input, otherwise use last argument as input file. If no input file -is specified, read from stdin. -.TP -.BI \-t,\ \-\-tokens -Output a token stream instead of html. -.TP -.BI \-\-pedantic -Conform to obscure parts of markdown.pl as much as possible. Don't fix original -markdown bugs. -.TP -.BI \-\-gfm -Enable github flavored markdown. -.TP -.BI \-\-breaks -Enable GFM line breaks. Only works with the gfm option. -.TP -.BI \-\-tables -Enable GFM tables. Only works with the gfm option. -.TP -.BI \-\-sanitize -Sanitize output. Ignore any HTML input. -.TP -.BI \-\-smart\-lists -Use smarter list behavior than the original markdown. -.TP -.BI \-\-lang\-prefix\ [\fIprefix\fP] -Set the prefix for code block classes. -.TP -.BI \-\-mangle -Mangle email addresses. -.TP -.BI \-\-no\-sanitize,\ \-no-etc... -The inverse of any of the marked options above. -.TP -.BI \-\-silent -Silence error output. -.TP -.BI \-h,\ \-\-help -Display help information. - -.SH CONFIGURATION -For configuring and running programmatically. - -.B Example - - require('marked')('*foo*', { gfm: true }); - -.SH BUGS -Please report any bugs to https://github.com/chjj/marked. - -.SH LICENSE -Copyright (c) 2011-2014, Christopher Jeffrey (MIT License). - -.SH "SEE ALSO" -.BR markdown(1), -.BR node.js(1) diff --git a/fundamentals/bug-challenge-es6/node_modules/marked/marked.min.js b/fundamentals/bug-challenge-es6/node_modules/marked/marked.min.js deleted file mode 100644 index 555c1dc1d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/marked/marked.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * marked - a markdown parser - * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) - * https://github.com/chjj/marked - */ -(function(){var block={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:noop,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:noop,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:noop,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};block.bullet=/(?:[*+-]|\d+\.)/;block.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;block.item=replace(block.item,"gm")(/bull/g,block.bullet)();block.list=replace(block.list)(/bull/g,block.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+block.def.source+")")();block.blockquote=replace(block.blockquote)("def",block.def)();block._tag="(?!(?:"+"a|em|strong|small|s|cite|q|dfn|abbr|data|time|code"+"|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo"+"|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b";block.html=replace(block.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,block._tag)();block.paragraph=replace(block.paragraph)("hr",block.hr)("heading",block.heading)("lheading",block.lheading)("blockquote",block.blockquote)("tag","<"+block._tag)("def",block.def)();block.normal=merge({},block);block.gfm=merge({},block.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/});block.gfm.paragraph=replace(block.paragraph)("(?!","(?!"+block.gfm.fences.source.replace("\\1","\\2")+"|"+block.list.source.replace("\\1","\\3")+"|")();block.tables=merge({},block.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/});function Lexer(options){this.tokens=[];this.tokens.links={};this.options=options||marked.defaults;this.rules=block.normal;if(this.options.gfm){if(this.options.tables){this.rules=block.tables}else{this.rules=block.gfm}}}Lexer.rules=block;Lexer.lex=function(src,options){var lexer=new Lexer(options);return lexer.lex(src)};Lexer.prototype.lex=function(src){src=src.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n");return this.token(src,true)};Lexer.prototype.token=function(src,top,bq){var src=src.replace(/^ +$/gm,""),next,loose,cap,bull,b,item,space,i,l;while(src){if(cap=this.rules.newline.exec(src)){src=src.substring(cap[0].length);if(cap[0].length>1){this.tokens.push({type:"space"})}}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);cap=cap[0].replace(/^ {4}/gm,"");this.tokens.push({type:"code",text:!this.options.pedantic?cap.replace(/\n+$/,""):cap});continue}if(cap=this.rules.fences.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"code",lang:cap[2],text:cap[3]||""});continue}if(cap=this.rules.heading.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:"heading",depth:cap[1].length,text:cap[2]});continue}if(top&&(cap=this.rules.nptable.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/\n$/,"").split("\n")};for(i=0;i ?/gm,"");this.token(cap,top,true);this.tokens.push({type:"blockquote_end"});continue}if(cap=this.rules.list.exec(src)){src=src.substring(cap[0].length);bull=cap[2];this.tokens.push({type:"list_start",ordered:bull.length>1});cap=cap[0].match(this.rules.item);next=false;l=cap.length;i=0;for(;i1&&b.length>1)){src=cap.slice(i+1).join("\n")+src;i=l-1}}loose=next||/\n\n(?!\s*$)/.test(item);if(i!==l-1){next=item.charAt(item.length-1)==="\n";if(!loose)loose=next}this.tokens.push({type:loose?"loose_item_start":"list_item_start"});this.token(item,false,bq);this.tokens.push({type:"list_item_end"})}this.tokens.push({type:"list_end"});continue}if(cap=this.rules.html.exec(src)){src=src.substring(cap[0].length);this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&(cap[1]==="pre"||cap[1]==="script"||cap[1]==="style"),text:cap[0]});continue}if(!bq&&top&&(cap=this.rules.def.exec(src))){src=src.substring(cap[0].length);this.tokens.links[cap[1].toLowerCase()]={href:cap[2],title:cap[3]};continue}if(top&&(cap=this.rules.table.exec(src))){src=src.substring(cap[0].length);item={type:"table",header:cap[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:cap[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:cap[3].replace(/(?: *\| *)?\n$/,"").split("\n")};for(i=0;i])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:noop,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:noop,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/;inline.link=replace(inline.link)("inside",inline._inside)("href",inline._href)();inline.reflink=replace(inline.reflink)("inside",inline._inside)();inline.normal=merge({},inline);inline.pedantic=merge({},inline.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/});inline.gfm=merge({},inline.normal,{escape:replace(inline.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:replace(inline.text)("]|","~]|")("|","|https?://|")()});inline.breaks=merge({},inline.gfm,{br:replace(inline.br)("{2,}","*")(),text:replace(inline.gfm.text)("{2,}","*")()});function InlineLexer(links,options){this.options=options||marked.defaults;this.links=links;this.rules=inline.normal;this.renderer=this.options.renderer||new Renderer;this.renderer.options=this.options;if(!this.links){throw new Error("Tokens array requires a `links` property.")}if(this.options.gfm){if(this.options.breaks){this.rules=inline.breaks}else{this.rules=inline.gfm}}else if(this.options.pedantic){this.rules=inline.pedantic}}InlineLexer.rules=inline;InlineLexer.output=function(src,links,options){var inline=new InlineLexer(links,options);return inline.output(src)};InlineLexer.prototype.output=function(src){var out="",link,text,href,cap;while(src){if(cap=this.rules.escape.exec(src)){src=src.substring(cap[0].length);out+=cap[1];continue}if(cap=this.rules.autolink.exec(src)){src=src.substring(cap[0].length);if(cap[2]==="@"){text=cap[1].charAt(6)===":"?this.mangle(cap[1].substring(7)):this.mangle(cap[1]);href=this.mangle("mailto:")+text}else{text=escape(cap[1]);href=text}out+=this.renderer.link(href,null,text);continue}if(!this.inLink&&(cap=this.rules.url.exec(src))){src=src.substring(cap[0].length);text=escape(cap[1]);href=text;out+=this.renderer.link(href,null,text);continue}if(cap=this.rules.tag.exec(src)){if(!this.inLink&&/^
    /i.test(cap[0])){this.inLink=false}src=src.substring(cap[0].length);out+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(cap[0]):escape(cap[0]):cap[0];continue}if(cap=this.rules.link.exec(src)){src=src.substring(cap[0].length);this.inLink=true;out+=this.outputLink(cap,{href:cap[2],title:cap[3]});this.inLink=false;continue}if((cap=this.rules.reflink.exec(src))||(cap=this.rules.nolink.exec(src))){src=src.substring(cap[0].length);link=(cap[2]||cap[1]).replace(/\s+/g," ");link=this.links[link.toLowerCase()];if(!link||!link.href){out+=cap[0].charAt(0);src=cap[0].substring(1)+src;continue}this.inLink=true;out+=this.outputLink(cap,link);this.inLink=false;continue}if(cap=this.rules.strong.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.strong(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.em.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.em(this.output(cap[2]||cap[1]));continue}if(cap=this.rules.code.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.codespan(escape(cap[2],true));continue}if(cap=this.rules.br.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.br();continue}if(cap=this.rules.del.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.del(this.output(cap[1]));continue}if(cap=this.rules.text.exec(src)){src=src.substring(cap[0].length);out+=this.renderer.text(escape(this.smartypants(cap[0])));continue}if(src){throw new Error("Infinite loop on byte: "+src.charCodeAt(0))}}return out};InlineLexer.prototype.outputLink=function(cap,link){var href=escape(link.href),title=link.title?escape(link.title):null;return cap[0].charAt(0)!=="!"?this.renderer.link(href,title,this.output(cap[1])):this.renderer.image(href,title,escape(cap[1]))};InlineLexer.prototype.smartypants=function(text){if(!this.options.smartypants)return text;return text.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…")};InlineLexer.prototype.mangle=function(text){if(!this.options.mangle)return text;var out="",l=text.length,i=0,ch;for(;i.5){ch="x"+ch.toString(16)}out+="&#"+ch+";"}return out};function Renderer(options){this.options=options||{}}Renderer.prototype.code=function(code,lang,escaped){if(this.options.highlight){var out=this.options.highlight(code,lang);if(out!=null&&out!==code){escaped=true;code=out}}if(!lang){return"
    "+(escaped?code:escape(code,true))+"\n
    "}return'
    '+(escaped?code:escape(code,true))+"\n
    \n"};Renderer.prototype.blockquote=function(quote){return"
    \n"+quote+"
    \n"};Renderer.prototype.html=function(html){return html};Renderer.prototype.heading=function(text,level,raw){return"'+text+"\n"};Renderer.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"};Renderer.prototype.list=function(body,ordered){var type=ordered?"ol":"ul";return"<"+type+">\n"+body+"\n"};Renderer.prototype.listitem=function(text){return"
  • "+text+"
  • \n"};Renderer.prototype.paragraph=function(text){return"

    "+text+"

    \n"};Renderer.prototype.table=function(header,body){return"\n"+"\n"+header+"\n"+"\n"+body+"\n"+"
    \n"};Renderer.prototype.tablerow=function(content){return"\n"+content+"\n"};Renderer.prototype.tablecell=function(content,flags){var type=flags.header?"th":"td";var tag=flags.align?"<"+type+' style="text-align:'+flags.align+'">':"<"+type+">";return tag+content+"\n"};Renderer.prototype.strong=function(text){return""+text+""};Renderer.prototype.em=function(text){return""+text+""};Renderer.prototype.codespan=function(text){return""+text+""};Renderer.prototype.br=function(){return this.options.xhtml?"
    ":"
    "};Renderer.prototype.del=function(text){return""+text+""};Renderer.prototype.link=function(href,title,text){if(this.options.sanitize){try{var prot=decodeURIComponent(unescape(href)).replace(/[^\w:]/g,"").toLowerCase()}catch(e){return""}if(prot.indexOf("javascript:")===0||prot.indexOf("vbscript:")===0){return""}}var out='
    ";return out};Renderer.prototype.image=function(href,title,text){var out=''+text+'":">";return out};Renderer.prototype.text=function(text){return text};function Parser(options){this.tokens=[];this.token=null;this.options=options||marked.defaults;this.options.renderer=this.options.renderer||new Renderer;this.renderer=this.options.renderer;this.renderer.options=this.options}Parser.parse=function(src,options,renderer){var parser=new Parser(options,renderer);return parser.parse(src)};Parser.prototype.parse=function(src){this.inline=new InlineLexer(src.links,this.options,this.renderer);this.tokens=src.reverse();var out="";while(this.next()){out+=this.tok()}return out};Parser.prototype.next=function(){return this.token=this.tokens.pop()};Parser.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0};Parser.prototype.parseText=function(){var body=this.token.text;while(this.peek().type==="text"){body+="\n"+this.next().text}return this.inline.output(body)};Parser.prototype.tok=function(){switch(this.token.type){case"space":{return""}case"hr":{return this.renderer.hr()}case"heading":{return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text)}case"code":{return this.renderer.code(this.token.text,this.token.lang,this.token.escaped)}case"table":{var header="",body="",i,row,cell,flags,j;cell="";for(i=0;i/g,">").replace(/"/g,""").replace(/'/g,"'")}function unescape(html){return html.replace(/&([#\w]+);/g,function(_,n){n=n.toLowerCase();if(n==="colon")return":";if(n.charAt(0)==="#"){return n.charAt(1)==="x"?String.fromCharCode(parseInt(n.substring(2),16)):String.fromCharCode(+n.substring(1))}return""})}function replace(regex,opt){regex=regex.source;opt=opt||"";return function self(name,val){if(!name)return new RegExp(regex,opt);val=val.source||val;val=val.replace(/(^|[^\[])\^/g,"$1");regex=regex.replace(name,val);return self}}function noop(){}noop.exec=noop;function merge(obj){var i=1,target,key;for(;iAn error occured:

    "+escape(e.message+"",true)+"
    "}throw e}}marked.options=marked.setOptions=function(opt){merge(marked.defaults,opt);return marked};marked.defaults={gfm:true,tables:true,breaks:false,pedantic:false,sanitize:false,sanitizer:null,mangle:true,smartLists:false,silent:false,highlight:null,langPrefix:"lang-",smartypants:false,headerPrefix:"",renderer:new Renderer,xhtml:false};marked.Parser=Parser;marked.parser=Parser.parse;marked.Renderer=Renderer;marked.Lexer=Lexer;marked.lexer=Lexer.lex;marked.InlineLexer=InlineLexer;marked.inlineLexer=InlineLexer.output;marked.parse=marked;if(typeof module!=="undefined"&&typeof exports==="object"){module.exports=marked}else if(typeof define==="function"&&define.amd){define(function(){return marked})}else{this.marked=marked}}).call(function(){return this||(typeof window!=="undefined"?window:global)}()); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/marked/package.json b/fundamentals/bug-challenge-es6/node_modules/marked/package.json deleted file mode 100644 index b520a080f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/marked/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "_args": [ - [ - "marked@^0.3.6", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/cli-usage" - ] - ], - "_from": "marked@>=0.3.6 <0.4.0", - "_id": "marked@0.3.6", - "_inCache": true, - "_installable": true, - "_location": "/marked", - "_nodeVersion": "6.3.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/marked-0.3.6.tgz_1469848215797_0.5454847207292914" - }, - "_npmUser": { - "email": "chjjeffrey@gmail.com", - "name": "chjj" - }, - "_npmVersion": "3.10.5", - "_phantomChildren": {}, - "_requested": { - "name": "marked", - "raw": "marked@^0.3.6", - "rawSpec": "^0.3.6", - "scope": null, - "spec": ">=0.3.6 <0.4.0", - "type": "range" - }, - "_requiredBy": [ - "/cli-usage" - ], - "_resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz", - "_shasum": "b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7", - "_shrinkwrap": null, - "_spec": "marked@^0.3.6", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/cli-usage", - "author": { - "name": "Christopher Jeffrey" - }, - "bin": { - "marked": "./bin/marked" - }, - "bugs": { - "url": "http://github.com/chjj/marked/issues" - }, - "dependencies": {}, - "description": "A markdown parser built for speed", - "devDependencies": { - "gulp": "^3.8.11", - "gulp-concat": "^2.5.2", - "gulp-uglify": "^1.1.0", - "markdown": "*", - "showdown": "*" - }, - "directories": {}, - "dist": { - "shasum": "b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7", - "tarball": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz" - }, - "gitHead": "eddec20467c2d10c7769061ee9074e268500966f", - "homepage": "https://github.com/chjj/marked", - "keywords": [ - "markdown", - "markup", - "html" - ], - "license": "MIT", - "main": "./lib/marked.js", - "maintainers": [ - { - "email": "chjjeffrey@gmail.com", - "name": "chjj" - } - ], - "man": [ - "./man/marked.1" - ], - "name": "marked", - "optionalDependencies": {}, - "preferGlobal": true, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/chjj/marked.git" - }, - "scripts": { - "bench": "node test --bench", - "test": "node test" - }, - "tags": [ - "markdown", - "markup", - "html" - ], - "version": "0.3.6" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/merge/.npmignore b/fundamentals/bug-challenge-es6/node_modules/merge/.npmignore deleted file mode 100644 index 3598c3003..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/merge/.npmignore +++ /dev/null @@ -1 +0,0 @@ -tests \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/merge/LICENSE b/fundamentals/bug-challenge-es6/node_modules/merge/LICENSE deleted file mode 100644 index 535189427..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/merge/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 yeikos - http://www.yeikos.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/merge/README.md b/fundamentals/bug-challenge-es6/node_modules/merge/README.md deleted file mode 100644 index 317b13975..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/merge/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# Merge - -Merge multiple objects into one, optionally creating a new cloned object. -Similar to the jQuery.extend but more flexible. Works in Node.js and the -browser. - -## Node.js Usage - -```sh -npm install merge --save -``` - -```js -var merge = require('merge'), original, cloned; - -console.log(merge({one:'hello'}, {two: 'world'})); -// -> {"one": "hello", "two": "world"} - -original = { x: { y: 1 } }; -cloned = merge(true, original); -cloned.x.y++; - -console.log(original.x.y, cloned.x.y); -// -> 1, 2 - -console.log(merge.recursive(true, original, { x: { z: 2 } })); -// -> {"x": { "y": 1, "z": 2 } } - -``` - -## Browser Usage - -```html - - -``` - -## Tests - -```sh -npm test -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/merge/bower.json b/fundamentals/bug-challenge-es6/node_modules/merge/bower.json deleted file mode 100644 index bd5de03e9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/merge/bower.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "merge", - "version": "1.2.0", - "homepage": "https://github.com/yeikos/js.merge", - "authors": [ - "yeikos " - ], - "description": "Merge multiple objects into one, optionally creating a new cloned object. Similar to the jQuery.extend but more flexible. Works in Node.js and the browser.", - "main": "merge.js", - "keywords": [ - "merge", - "recursive", - "extend", - "clone", - "object", - "browser" - ], - "license": "MIT", - "ignore": [ - "tests" - ] -} diff --git a/fundamentals/bug-challenge-es6/node_modules/merge/merge.js b/fundamentals/bug-challenge-es6/node_modules/merge/merge.js deleted file mode 100644 index 43089c80f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/merge/merge.js +++ /dev/null @@ -1,175 +0,0 @@ -/*! - * @name JavaScript/NodeJS Merge v1.2.0 - * @author yeikos - * @repository https://github.com/yeikos/js.merge - - * Copyright 2014 yeikos - MIT license - * https://raw.github.com/yeikos/js.merge/master/LICENSE - */ - -;(function(isNode) { - - /** - * Merge one or more objects - * @param bool? clone - * @param mixed,... arguments - * @return object - */ - - var Public = function(clone) { - - return merge(clone === true, false, arguments); - - }, publicName = 'merge'; - - /** - * Merge two or more objects recursively - * @param bool? clone - * @param mixed,... arguments - * @return object - */ - - Public.recursive = function(clone) { - - return merge(clone === true, true, arguments); - - }; - - /** - * Clone the input removing any reference - * @param mixed input - * @return mixed - */ - - Public.clone = function(input) { - - var output = input, - type = typeOf(input), - index, size; - - if (type === 'array') { - - output = []; - size = input.length; - - for (index=0;index=1.1.3 <2.0.0", - "_id": "merge@1.2.0", - "_inCache": true, - "_installable": true, - "_location": "/merge", - "_npmUser": { - "email": "yeikos@gmail.com", - "name": "yeikos" - }, - "_npmVersion": "1.4.21", - "_phantomChildren": {}, - "_requested": { - "name": "merge", - "raw": "merge@^1.1.3", - "rawSpec": "^1.1.3", - "scope": null, - "spec": ">=1.1.3 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/exec-sh" - ], - "_resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "_shasum": "7531e39d4949c281a66b8c5a6e0265e8b05894da", - "_shrinkwrap": null, - "_spec": "merge@^1.1.3", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/exec-sh", - "author": { - "name": "yeikos", - "url": "http://www.yeikos.com" - }, - "bugs": { - "url": "https://github.com/yeikos/js.merge/issues" - }, - "dependencies": {}, - "description": "Merge multiple objects into one, optionally creating a new cloned object. Similar to the jQuery.extend but more flexible. Works in Node.js and the browser.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "7531e39d4949c281a66b8c5a6e0265e8b05894da", - "tarball": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz" - }, - "gitHead": "6fc27c23e1ebf54a4f6ba8a7224dd48dfd9faf7c", - "homepage": "https://github.com/yeikos/js.merge", - "keywords": [ - "merge", - "recursive", - "extend", - "clone", - "object", - "browser" - ], - "license": "MIT", - "main": "merge.js", - "maintainers": [ - { - "email": "yeikos@gmail.com", - "name": "yeikos" - } - ], - "name": "merge", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/yeikos/js.merge.git" - }, - "scripts": { - "test": "cd tests; node index.js" - }, - "version": "1.2.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/micromatch/LICENSE b/fundamentals/bug-challenge-es6/node_modules/micromatch/LICENSE deleted file mode 100755 index fa30c4cb3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/micromatch/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/micromatch/README.md b/fundamentals/bug-challenge-es6/node_modules/micromatch/README.md deleted file mode 100644 index 8fb391910..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/micromatch/README.md +++ /dev/null @@ -1,689 +0,0 @@ -# micromatch [![NPM version](https://img.shields.io/npm/v/micromatch.svg?style=flat)](https://www.npmjs.com/package/micromatch) [![NPM downloads](https://img.shields.io/npm/dm/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![Build Status](https://img.shields.io/travis/jonschlinkert/micromatch.svg?style=flat)](https://travis-ci.org/jonschlinkert/micromatch) - -> Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. - -Micromatch supports all of the same matching features as [minimatch](https://github.com/isaacs/minimatch) and [multimatch](https://github.com/sindresorhus/multimatch). - -* [mm()](#usage) is the same as [multimatch()](https://github.com/sindresorhus/multimatch) -* [mm.match()](#match) is the same as [minimatch.match()](https://github.com/isaacs/minimatch) -* use [mm.isMatch()](#ismatch) instead of [minimatch()](https://github.com/isaacs/minimatch) - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save micromatch -``` - -## Start matching! - -```js -var mm = require('micromatch'); -console.log(mm([''])) -``` - -*** - -### Features - -* [Drop-in replacement](#switch-from-minimatch) for [minimatch](https://github.com/isaacs/minimatch) and [multimatch](https://github.com/sindresorhus/multimatch) -* Built-in support for multiple glob patterns, like `['foo/*.js', '!bar.js']` -* [Brace Expansion](https://github.com/jonschlinkert/braces) (`foo/bar-{1..5}.md`, `one/{two,three}/four.md`) -* Typical glob patterns, like `**/*`, `a/b/*.js`, or `['foo/*.js', '!bar.js']` -* Methods like `.isMatch()`, `.contains()` and `.any()` - -**Extended globbing features:** - -* Logical `OR` (`foo/bar/(abc|xyz).js`) -* Regex character classes (`foo/bar/baz-[1-5].js`) -* POSIX [bracket expressions](https://github.com/jonschlinkert/expand-brackets) (`**/[[:alpha:][:digit:]]/`) -* [extglobs](https://github.com/jonschlinkert/extglob) (`**/+(x|y)`, `!(a|b)`, etc). - -You can combine these to create whatever matching patterns you need. - -**Example** - -```js -// double-negation! -mm(['fa', 'fb', 'f', 'fo'], '!(f!(o))'); -//=> ['fo'] -``` - -## Why switch to micromatch? - -* Native support for multiple glob patterns, no need for wrappers like [multimatch](https://github.com/sindresorhus/multimatch) -* [10-55x faster](#benchmarks) and more performant than [minimatch](https://github.com/isaacs/minimatch) and [multimatch](https://github.com/sindresorhus/multimatch). This is achieved through a combination of caching and regex optimization strategies, a fundamentally different approach than minimatch. -* More extensive support for the Bash 4.3 specification -* More complete extglob support -* Extensive [unit tests](./test) (approx. 1,300 tests). Minimatch fails many of the tests. - -### Switch from minimatch - -Use `mm.isMatch()` instead of `minimatch()`: - -```js -mm.isMatch('foo', 'b*'); -//=> false -``` - -Use `mm.match()` instead of `minimatch.match()`: - -```js -mm.match(['foo', 'bar'], 'b*'); -//=> 'bar' -``` - -### Switch from multimatch - -Same signature: - -```js -mm(['foo', 'bar', 'baz'], ['f*', '*z']); -//=> ['foo', 'baz'] -``` - -*** - -## Usage - -Add micromatch to your node.js project: - -```js -var mm = require('micromatch'); -``` - -**Signature** - -```js -mm(array_of_strings, glob_patterns[, options]); -``` - -**Example** - -```js -mm(['foo', 'bar', 'baz'], 'b*'); -//=> ['bar', 'baz'] -``` - -### Usage examples - -**Brace expansion** - -Match files with `.js` or `.txt` extensions. - -```js -mm(['a.js', 'b.md', 'c.txt'], '*.{js,txt}'); -//=> ['a.js', 'c.txt'] -``` - -**Extglobs** - -Match anything except for files with the `.md` extension. - -```js -mm(files, '**/*.!(md)'); - -//=> ['a.js', 'c.txt'] -``` - -**Multiple patterns** - -Match using an array of patterns. - -```js -mm(['a.md', 'b.js', 'c.txt', 'd.json'], ['*.md', '*.txt']); -//=> ['a.md', 'c.txt'] -``` - -**Negation patterns:** - -Behavior is designed to be what users would expect, based on conventions that are already well-established. - -* [minimatch](https://github.com/isaacs/minimatch) behavior is used when the pattern is a string, so patterns are **inclusive by default**. -* [multimatch](https://github.com/sindresorhus/multimatch) behavior is used when an array of patterns is passed, so patterns are **exclusive by default**. - -```js -mm(['a.js', 'b.md', 'c.txt'], '!*.{js,txt}'); -//=> ['b.md'] - -mm(['a.md', 'b.js', 'c.txt', 'd.json'], ['*.*', '!*.{js,txt}']); -//=> ['a.md', 'd.json'] -``` - -*** - -## API methods - -```js -var mm = require('micromatch'); -``` - -### .match - -```js -mm.match(array, globString); -``` - -Return an array of files that match the given glob pattern. Useful if you only need to use a single glob pattern. - -**Example** - -```js -mm.match(['ab', 'a/b', 'bb', 'b/c'], '?b'); -//=> ['ab', 'bb'] - -mm.match(['ab', 'a/b', 'bb', 'b/c'], '*/b'); -//=> ['a/b'] -``` - -### .isMatch - -```js -mm.isMatch(filepath, globString); -``` - -Returns true if a file path matches the given glob pattern. - -**Example** - -```js -mm.isMatch('.verb.md', '*.md'); -//=> false - -mm.isMatch('.verb.md', '*.md', {dot: true}); -//=> true -``` - -### .contains - -Returns true if any part of a file path matches the given glob pattern. Think of this is "has path" versus "is path". - -**Example** - -`.isMatch()` would return false for both of the following: - -```js -mm.contains('a/b/c', 'a/b'); -//=> true - -mm.contains('a/b/c', 'a/*'); -//=> true -``` - -### .matcher - -Returns a function for matching using the supplied pattern. e.g. create your own "matcher". The advantage of this method is that the pattern can be compiled outside of a loop. - -**Pattern** - -Can be any of the following: - -* `glob/string` -* `regex` -* `function` - -**Example** - -```js -var isMatch = mm.matcher('*.md'); -var files = []; - -['a.md', 'b.txt', 'c.md'].forEach(function(fp) { - if (isMatch(fp)) { - files.push(fp); - } -}); -``` - -### .filter - -Returns a function that can be passed to `Array#filter()`. - -**Params** - -* `patterns` **{String|Array}**: - -**Examples** - -Single glob: - -```js -var fn = mm.filter('*.md'); -['a.js', 'b.txt', 'c.md'].filter(fn); -//=> ['c.md'] - -var fn = mm.filter('[a-c]'); -['a', 'b', 'c', 'd', 'e'].filter(fn); -//=> ['a', 'b', 'c'] -``` - -Array of glob patterns: - -```js -var arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; - -var fn = mm.filter(['{1..10}', '![7-9]', '!{3..4}']); -arr.filter(fn); -//=> [1, 2, 5, 6, 10] -``` - -_(Internally this function generates the matching function by using the [matcher](#matcher) method. You can use the [matcher](#matcher) method directly to create your own filter function)_ - -### .any - -Returns true if a file path matches any of the given patterns. - -```js -mm.any(filepath, patterns, options); -``` - -**Params** - -* filepath `{String}`: The file path to test. -* patterns `{String|Array}`: One or more glob patterns -* options: `{Object}`: options to pass to the `.matcher()` method. - -**Example** - -```js -mm.any('abc', ['!*z']); -//=> true -mm.any('abc', ['a*', 'z*']); -//=> true -mm.any('abc', 'a*'); -//=> true -mm.any('abc', ['z*']); -//=> false -``` - -### .expand - -Returns an object with a regex-compatible string and tokens. - -```js -mm.expand('*.js'); - -// when `track` is enabled (for debugging), the `history` array is used -// to record each mutation to the glob pattern as it's converted to regex -{ options: { track: false, dot: undefined, makeRe: true, negated: false }, - pattern: '(.*\\/|^)bar\\/(?:(?!(?:^|\\/)\\.).)*?', - history: [], - tokens: - { path: - { whole: '**/bar/**', - dirname: '**/bar/', - filename: '**', - basename: '**', - extname: '', - ext: '' }, - is: - { glob: true, - negated: false, - globstar: true, - dotfile: false, - dotdir: false }, - match: {}, - original: '**/bar/**', - pattern: '**/bar/**', - base: '' } } -``` - -### .makeRe - -Create a regular expression for matching file paths based on the given pattern: - -```js -mm.makeRe('*.js'); -//=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/ -``` - -## Options - -### options.unixify - -Normalize slashes in file paths and glob patterns to forward slashes. - -Type: `{Boolean}` - -Default: `undefined` on non-windows, `true` on windows. - -### options.dot - -Match dotfiles. Same behavior as [minimatch](https://github.com/isaacs/minimatch). - -Type: `{Boolean}` - -Default: `false` - -### options.unescape - -Unescape slashes in glob patterns. Use cautiously, especially on windows. - -Type: `{Boolean}` - -Default: `undefined` - -**Example** - -```js -mm.isMatch('abc', '\\a\\b\\c', {unescape: true}); -//=> true -``` - -### options.nodupes - -Remove duplicate elements from the result array. - -Type: `{Boolean}` - -Default: `undefined` - -**Example** - -Example of using the `unescape` and `nodupes` options together: - -```js -mm.match(['abc', '\\a\\b\\c'], '\\a\\b\\c', {unescape: true}); -//=> ['abc', 'abc'] - -mm.match(['abc', '\\a\\b\\c'], '\\a\\b\\c', {unescape: true, nodupes: true}); -//=> ['abc'] -``` - -### options.matchBase - -Allow glob patterns without slashes to match a file path based on its basename. . Same behavior as [minimatch](https://github.com/isaacs/minimatch). - -Type: `{Boolean}` - -Default: `false` - -**Example** - -```js -mm(['a/b.js', 'a/c.md'], '*.js'); -//=> [] - -mm(['a/b.js', 'a/c.md'], '*.js', {matchBase: true}); -//=> ['a/b.js'] -``` - -### options.nobraces - -Don't expand braces in glob patterns. Same behavior as [minimatch](https://github.com/isaacs/minimatch) `nobrace`. - -Type: `{Boolean}` - -Default: `undefined` - -See [braces](https://github.com/jonschlinkert/braces) for more information about extended brace expansion. - -### options.nobrackets - -Don't expand POSIX bracket expressions. - -Type: `{Boolean}` - -Default: `undefined` - -See [expand-brackets](https://github.com/jonschlinkert/expand-brackets) for more information about extended bracket expressions. - -### options.noextglob - -Don't expand extended globs. - -Type: `{Boolean}` - -Default: `undefined` - -See [extglob](https://github.com/jonschlinkert/extglob) for more information about extended globs. - -### options.nocase - -Use a case-insensitive regex for matching files. Same behavior as [minimatch](https://github.com/isaacs/minimatch). - -Type: `{Boolean}` - -Default: `false` - -### options.nonegate - -Disallow negation (`!`) patterns. - -Type: `{Boolean}` - -Default: `false` - -### options.nonull - -If `true`, when no matches are found the actual (array-ified) glob pattern is returned instead of an empty array. Same behavior as [minimatch](https://github.com/isaacs/minimatch). - -Type: `{Boolean}` - -Default: `false` - -### options.cache - -Cache the platform (e.g. `win32`) to prevent this from being looked up for every filepath. - -Type: `{Boolean}` - -Default: `true` - -*** - -## Other features - -Micromatch also supports the following. - -### Extended globbing - -#### extglobs - -Extended globbing, as described by the bash man page: - -| **pattern** | **regex equivalent** | **description** | -| --- | --- | --- | -| `?(pattern-list)` | `(... | ...)?` | Matches zero or one occurrence of the given patterns | -| `*(pattern-list)` | `(... | ...)*` | Matches zero or more occurrences of the given patterns | -| `+(pattern-list)` | `(... | ...)+` | Matches one or more occurrences of the given patterns | -| `@(pattern-list)` | `(... | ...)` * | Matches one of the given patterns | -| `!(pattern-list)` | N/A | Matches anything except one of the given patterns | - -* `@` isn't a RegEx character. - -Powered by [extglob](https://github.com/jonschlinkert/extglob). Visit that library for the full range of options or to report extglob related issues. - -See [extglob](https://github.com/jonschlinkert/extglob) for more information about extended globs. - -#### brace expansion - -In simple cases, brace expansion appears to work the same way as the logical `OR` operator. For example, `(a|b)` will achieve the same result as `{a,b}`. - -Here are some powerful features unique to brace expansion (versus character classes): - -* range expansion: `a{1..3}b/*.js` expands to: `['a1b/*.js', 'a2b/*.js', 'a3b/*.js']` -* nesting: `a{c,{d,e}}b/*.js` expands to: `['acb/*.js', 'adb/*.js', 'aeb/*.js']` - -Visit [braces](https://github.com/jonschlinkert/braces) to ask questions and create an issue related to brace-expansion, or to see the full range of features and options related to brace expansion. - -#### regex character classes - -With the exception of brace expansion (`{a,b}`, `{1..5}`, etc), most of the special characters convert directly to regex, so you can expect them to follow the same rules and produce the same results as regex. - -For example, given the list: `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`: - -* `[ac].js`: matches both `a` and `c`, returning `['a.js', 'c.js']` -* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']` -* `[b-d].js`: matches from `b` to `d`, returning `['b.js', 'c.js', 'd.js']` -* `a/[A-Z].js`: matches and uppercase letter, returning `['a/E.md']` - -Learn about [regex character classes](http://www.regular-expressions.info/charclass.html). - -#### regex groups - -Given `['a.js', 'b.js', 'c.js', 'd.js', 'E.js']`: - -* `(a|c).js`: would match either `a` or `c`, returning `['a.js', 'c.js']` -* `(b|d).js`: would match either `b` or `d`, returning `['b.js', 'd.js']` -* `(b|[A-Z]).js`: would match either `b` or an uppercase letter, returning `['b.js', 'E.js']` - -As with regex, parenthese can be nested, so patterns like `((a|b)|c)/b` will work. But it might be easier to achieve your goal using brace expansion. - -#### POSIX bracket expressions - -**Example** - -```js -mm.isMatch('a1', '[[:alpha:][:digit:]]'); -//=> true -``` - -See [expand-brackets](https://github.com/jonschlinkert/expand-brackets) for more information about extended bracket expressions. - -*** - -## Notes - -Whenever possible parsing behavior for patterns is based on globbing specifications in Bash 4.3. Patterns that aren't described by Bash follow wildmatch spec (used by git). - -## Benchmarks - -Run the [benchmarks](./benchmark): - -```bash -node benchmark -``` - -As of July 15, 2016: - -```bash -#1: basename-braces - micromatch x 26,420 ops/sec ±0.89% (91 runs sampled) - minimatch x 3,507 ops/sec ±0.64% (97 runs sampled) - -#2: basename - micromatch x 25,315 ops/sec ±0.82% (93 runs sampled) - minimatch x 4,398 ops/sec ±0.86% (94 runs sampled) - -#3: braces-no-glob - micromatch x 341,254 ops/sec ±0.78% (93 runs sampled) - minimatch x 30,197 ops/sec ±1.12% (91 runs sampled) - -#4: braces - micromatch x 54,649 ops/sec ±0.74% (94 runs sampled) - minimatch x 3,095 ops/sec ±0.82% (95 runs sampled) - -#5: immediate - micromatch x 16,719 ops/sec ±0.79% (95 runs sampled) - minimatch x 4,348 ops/sec ±0.86% (96 runs sampled) - -#6: large - micromatch x 721 ops/sec ±0.77% (94 runs sampled) - minimatch x 17.73 ops/sec ±1.08% (50 runs sampled) - -#7: long - micromatch x 5,051 ops/sec ±0.87% (97 runs sampled) - minimatch x 628 ops/sec ±0.83% (94 runs sampled) - -#8: mid - micromatch x 51,280 ops/sec ±0.80% (95 runs sampled) - minimatch x 1,923 ops/sec ±0.84% (95 runs sampled) - -#9: multi-patterns - micromatch x 22,440 ops/sec ±0.97% (94 runs sampled) - minimatch x 2,481 ops/sec ±1.10% (94 runs sampled) - -#10: no-glob - micromatch x 722,823 ops/sec ±1.30% (87 runs sampled) - minimatch x 52,967 ops/sec ±1.09% (94 runs sampled) - -#11: range - micromatch x 243,471 ops/sec ±0.79% (94 runs sampled) - minimatch x 11,736 ops/sec ±0.82% (96 runs sampled) - -#12: shallow - micromatch x 190,874 ops/sec ±0.98% (95 runs sampled) - minimatch x 21,699 ops/sec ±0.81% (97 runs sampled) - -#13: short - micromatch x 496,393 ops/sec ±3.86% (90 runs sampled) - minimatch x 53,765 ops/sec ±0.75% (95 runs sampled) -``` - -## Tests - -### Running tests - -Install dev dependencies: - -```sh -$ npm install -d && npm test -``` - -### Coverage - -As of July 15, 2016: - -```sh -Statements : 100% (441/441) -Branches : 100% (270/270) -Functions : 100% (54/54) -Lines : 100% (429/429) -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -Please be sure to run the benchmarks before/after any code changes to judge the impact before you do a PR. thanks! - -## Related - -* [braces](https://www.npmjs.com/package/braces): Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces… [more](https://github.com/jonschlinkert/braces) | [homepage](https://github.com/jonschlinkert/braces "Fastest brace expansion for node.js, with the most complete support for the Bash 4.3 braces specification.") -* [expand-brackets](https://www.npmjs.com/package/expand-brackets): Expand POSIX bracket expressions (character classes) in glob patterns. | [homepage](https://github.com/jonschlinkert/expand-brackets "Expand POSIX bracket expressions (character classes) in glob patterns.") -* [expand-range](https://www.npmjs.com/package/expand-range): Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See… [more](https://github.com/jonschlinkert/expand-range) | [homepage](https://github.com/jonschlinkert/expand-range "Fast, bash-like range expansion. Expand a range of numbers or letters, uppercase or lowercase. See the benchmarks. Used by micromatch.") -* [extglob](https://www.npmjs.com/package/extglob): Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to… [more](https://github.com/jonschlinkert/extglob) | [homepage](https://github.com/jonschlinkert/extglob "Convert extended globs to regex-compatible strings. Add (almost) the expressive power of regular expressions to glob patterns.") -* [fill-range](https://www.npmjs.com/package/fill-range): Fill in a range of numbers or letters, optionally passing an increment or multiplier to… [more](https://github.com/jonschlinkert/fill-range) | [homepage](https://github.com/jonschlinkert/fill-range "Fill in a range of numbers or letters, optionally passing an increment or multiplier to use.") -* [gulp-micromatch](https://www.npmjs.com/package/gulp-micromatch): Filter vinyl files with glob patterns, string, regexp, array, object or matcher function. micromatch stream. | [homepage](https://github.com/tunnckocore/gulp-micromatch#readme "Filter vinyl files with glob patterns, string, regexp, array, object or matcher function. micromatch stream.") -* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet") -* [parse-glob](https://www.npmjs.com/package/parse-glob): Parse a glob pattern into an object of tokens. | [homepage](https://github.com/jonschlinkert/parse-glob "Parse a glob pattern into an object of tokens.") - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -## Building docs - -_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_ - -To generate the readme and API documentation with [verb](https://github.com/verbose/verb): - -```sh -$ npm install -g verb verb-generate-readme && verb -``` - -## Running tests - -Install dev dependencies: - -```sh -$ npm install -d && npm test -``` - -## Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). -Released under the [MIT license](https://github.com/jonschlinkert/micromatch/blob/master/LICENSE). - -*** - -_This file was generated by [verb](https://github.com/verbose/verb), v0.9.0, on July 15, 2016._ \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/micromatch/index.js b/fundamentals/bug-challenge-es6/node_modules/micromatch/index.js deleted file mode 100755 index f898ec176..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/micromatch/index.js +++ /dev/null @@ -1,431 +0,0 @@ -/*! - * micromatch - * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var expand = require('./lib/expand'); -var utils = require('./lib/utils'); - -/** - * The main function. Pass an array of filepaths, - * and a string or array of glob patterns - * - * @param {Array|String} `files` - * @param {Array|String} `patterns` - * @param {Object} `opts` - * @return {Array} Array of matches - */ - -function micromatch(files, patterns, opts) { - if (!files || !patterns) return []; - opts = opts || {}; - - if (typeof opts.cache === 'undefined') { - opts.cache = true; - } - - if (!Array.isArray(patterns)) { - return match(files, patterns, opts); - } - - var len = patterns.length, i = 0; - var omit = [], keep = []; - - while (len--) { - var glob = patterns[i++]; - if (typeof glob === 'string' && glob.charCodeAt(0) === 33 /* ! */) { - omit.push.apply(omit, match(files, glob.slice(1), opts)); - } else { - keep.push.apply(keep, match(files, glob, opts)); - } - } - return utils.diff(keep, omit); -} - -/** - * Return an array of files that match the given glob pattern. - * - * This function is called by the main `micromatch` function If you only - * need to pass a single pattern you might get very minor speed improvements - * using this function. - * - * @param {Array} `files` - * @param {String} `pattern` - * @param {Object} `options` - * @return {Array} - */ - -function match(files, pattern, opts) { - if (utils.typeOf(files) !== 'string' && !Array.isArray(files)) { - throw new Error(msg('match', 'files', 'a string or array')); - } - - files = utils.arrayify(files); - opts = opts || {}; - - var negate = opts.negate || false; - var orig = pattern; - - if (typeof pattern === 'string') { - negate = pattern.charAt(0) === '!'; - if (negate) { - pattern = pattern.slice(1); - } - - // we need to remove the character regardless, - // so the above logic is still needed - if (opts.nonegate === true) { - negate = false; - } - } - - var _isMatch = matcher(pattern, opts); - var len = files.length, i = 0; - var res = []; - - while (i < len) { - var file = files[i++]; - var fp = utils.unixify(file, opts); - - if (!_isMatch(fp)) { continue; } - res.push(fp); - } - - if (res.length === 0) { - if (opts.failglob === true) { - throw new Error('micromatch.match() found no matches for: "' + orig + '".'); - } - - if (opts.nonull || opts.nullglob) { - res.push(utils.unescapeGlob(orig)); - } - } - - // if `negate` was defined, diff negated files - if (negate) { res = utils.diff(files, res); } - - // if `ignore` was defined, diff ignored filed - if (opts.ignore && opts.ignore.length) { - pattern = opts.ignore; - opts = utils.omit(opts, ['ignore']); - res = utils.diff(res, micromatch(res, pattern, opts)); - } - - if (opts.nodupes) { - return utils.unique(res); - } - return res; -} - -/** - * Returns a function that takes a glob pattern or array of glob patterns - * to be used with `Array#filter()`. (Internally this function generates - * the matching function using the [matcher] method). - * - * ```js - * var fn = mm.filter('[a-c]'); - * ['a', 'b', 'c', 'd', 'e'].filter(fn); - * //=> ['a', 'b', 'c'] - * ``` - * @param {String|Array} `patterns` Can be a glob or array of globs. - * @param {Options} `opts` Options to pass to the [matcher] method. - * @return {Function} Filter function to be passed to `Array#filter()`. - */ - -function filter(patterns, opts) { - if (!Array.isArray(patterns) && typeof patterns !== 'string') { - throw new TypeError(msg('filter', 'patterns', 'a string or array')); - } - - patterns = utils.arrayify(patterns); - var len = patterns.length, i = 0; - var patternMatchers = Array(len); - while (i < len) { - patternMatchers[i] = matcher(patterns[i++], opts); - } - - return function(fp) { - if (fp == null) return []; - var len = patternMatchers.length, i = 0; - var res = true; - - fp = utils.unixify(fp, opts); - while (i < len) { - var fn = patternMatchers[i++]; - if (!fn(fp)) { - res = false; - break; - } - } - return res; - }; -} - -/** - * Returns true if the filepath contains the given - * pattern. Can also return a function for matching. - * - * ```js - * isMatch('foo.md', '*.md', {}); - * //=> true - * - * isMatch('*.md', {})('foo.md') - * //=> true - * ``` - * @param {String} `fp` - * @param {String} `pattern` - * @param {Object} `opts` - * @return {Boolean} - */ - -function isMatch(fp, pattern, opts) { - if (typeof fp !== 'string') { - throw new TypeError(msg('isMatch', 'filepath', 'a string')); - } - - fp = utils.unixify(fp, opts); - if (utils.typeOf(pattern) === 'object') { - return matcher(fp, pattern); - } - return matcher(pattern, opts)(fp); -} - -/** - * Returns true if the filepath matches the - * given pattern. - */ - -function contains(fp, pattern, opts) { - if (typeof fp !== 'string') { - throw new TypeError(msg('contains', 'pattern', 'a string')); - } - - opts = opts || {}; - opts.contains = (pattern !== ''); - fp = utils.unixify(fp, opts); - - if (opts.contains && !utils.isGlob(pattern)) { - return fp.indexOf(pattern) !== -1; - } - return matcher(pattern, opts)(fp); -} - -/** - * Returns true if a file path matches any of the - * given patterns. - * - * @param {String} `fp` The filepath to test. - * @param {String|Array} `patterns` Glob patterns to use. - * @param {Object} `opts` Options to pass to the `matcher()` function. - * @return {String} - */ - -function any(fp, patterns, opts) { - if (!Array.isArray(patterns) && typeof patterns !== 'string') { - throw new TypeError(msg('any', 'patterns', 'a string or array')); - } - - patterns = utils.arrayify(patterns); - var len = patterns.length; - - fp = utils.unixify(fp, opts); - while (len--) { - var isMatch = matcher(patterns[len], opts); - if (isMatch(fp)) { - return true; - } - } - return false; -} - -/** - * Filter the keys of an object with the given `glob` pattern - * and `options` - * - * @param {Object} `object` - * @param {Pattern} `object` - * @return {Array} - */ - -function matchKeys(obj, glob, options) { - if (utils.typeOf(obj) !== 'object') { - throw new TypeError(msg('matchKeys', 'first argument', 'an object')); - } - - var fn = matcher(glob, options); - var res = {}; - - for (var key in obj) { - if (obj.hasOwnProperty(key) && fn(key)) { - res[key] = obj[key]; - } - } - return res; -} - -/** - * Return a function for matching based on the - * given `pattern` and `options`. - * - * @param {String} `pattern` - * @param {Object} `options` - * @return {Function} - */ - -function matcher(pattern, opts) { - // pattern is a function - if (typeof pattern === 'function') { - return pattern; - } - // pattern is a regex - if (pattern instanceof RegExp) { - return function(fp) { - return pattern.test(fp); - }; - } - - if (typeof pattern !== 'string') { - throw new TypeError(msg('matcher', 'pattern', 'a string, regex, or function')); - } - - // strings, all the way down... - pattern = utils.unixify(pattern, opts); - - // pattern is a non-glob string - if (!utils.isGlob(pattern)) { - return utils.matchPath(pattern, opts); - } - // pattern is a glob string - var re = makeRe(pattern, opts); - - // `matchBase` is defined - if (opts && opts.matchBase) { - return utils.hasFilename(re, opts); - } - // `matchBase` is not defined - return function(fp) { - fp = utils.unixify(fp, opts); - return re.test(fp); - }; -} - -/** - * Create and cache a regular expression for matching - * file paths. - * - * If the leading character in the `glob` is `!`, a negation - * regex is returned. - * - * @param {String} `glob` - * @param {Object} `options` - * @return {RegExp} - */ - -function toRegex(glob, options) { - // clone options to prevent mutating the original object - var opts = Object.create(options || {}); - var flags = opts.flags || ''; - if (opts.nocase && flags.indexOf('i') === -1) { - flags += 'i'; - } - - var parsed = expand(glob, opts); - - // pass in tokens to avoid parsing more than once - opts.negated = opts.negated || parsed.negated; - opts.negate = opts.negated; - glob = wrapGlob(parsed.pattern, opts); - var re; - - try { - re = new RegExp(glob, flags); - return re; - } catch (err) { - err.reason = 'micromatch invalid regex: (' + re + ')'; - if (opts.strict) throw new SyntaxError(err); - } - - // we're only here if a bad pattern was used and the user - // passed `options.silent`, so match nothing - return /$^/; -} - -/** - * Create the regex to do the matching. If the leading - * character in the `glob` is `!` a negation regex is returned. - * - * @param {String} `glob` - * @param {Boolean} `negate` - */ - -function wrapGlob(glob, opts) { - var prefix = (opts && !opts.contains) ? '^' : ''; - var after = (opts && !opts.contains) ? '$' : ''; - glob = ('(?:' + glob + ')' + after); - if (opts && opts.negate) { - return prefix + ('(?!^' + glob + ').*$'); - } - return prefix + glob; -} - -/** - * Create and cache a regular expression for matching file paths. - * If the leading character in the `glob` is `!`, a negation - * regex is returned. - * - * @param {String} `glob` - * @param {Object} `options` - * @return {RegExp} - */ - -function makeRe(glob, opts) { - if (utils.typeOf(glob) !== 'string') { - throw new Error(msg('makeRe', 'glob', 'a string')); - } - return utils.cache(toRegex, glob, opts); -} - -/** - * Make error messages consistent. Follows this format: - * - * ```js - * msg(methodName, argNumber, nativeType); - * // example: - * msg('matchKeys', 'first', 'an object'); - * ``` - * - * @param {String} `method` - * @param {String} `num` - * @param {String} `type` - * @return {String} - */ - -function msg(method, what, type) { - return 'micromatch.' + method + '(): ' + what + ' should be ' + type + '.'; -} - -/** - * Public methods - */ - -/* eslint no-multi-spaces: 0 */ -micromatch.any = any; -micromatch.braces = micromatch.braceExpand = utils.braces; -micromatch.contains = contains; -micromatch.expand = expand; -micromatch.filter = filter; -micromatch.isMatch = isMatch; -micromatch.makeRe = makeRe; -micromatch.match = match; -micromatch.matcher = matcher; -micromatch.matchKeys = matchKeys; - -/** - * Expose `micromatch` - */ - -module.exports = micromatch; diff --git a/fundamentals/bug-challenge-es6/node_modules/micromatch/lib/chars.js b/fundamentals/bug-challenge-es6/node_modules/micromatch/lib/chars.js deleted file mode 100644 index a1ffe3714..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/micromatch/lib/chars.js +++ /dev/null @@ -1,67 +0,0 @@ -'use strict'; - -var chars = {}, unesc, temp; - -function reverse(object, prepender) { - return Object.keys(object).reduce(function(reversed, key) { - var newKey = prepender ? prepender + key : key; // Optionally prepend a string to key. - reversed[object[key]] = newKey; // Swap key and value. - return reversed; // Return the result. - }, {}); -} - -/** - * Regex for common characters - */ - -chars.escapeRegex = { - '?': /\?/g, - '@': /\@/g, - '!': /\!/g, - '+': /\+/g, - '*': /\*/g, - '(': /\(/g, - ')': /\)/g, - '[': /\[/g, - ']': /\]/g -}; - -/** - * Escape characters - */ - -chars.ESC = { - '?': '__UNESC_QMRK__', - '@': '__UNESC_AMPE__', - '!': '__UNESC_EXCL__', - '+': '__UNESC_PLUS__', - '*': '__UNESC_STAR__', - ',': '__UNESC_COMMA__', - '(': '__UNESC_LTPAREN__', - ')': '__UNESC_RTPAREN__', - '[': '__UNESC_LTBRACK__', - ']': '__UNESC_RTBRACK__' -}; - -/** - * Unescape characters - */ - -chars.UNESC = unesc || (unesc = reverse(chars.ESC, '\\')); - -chars.ESC_TEMP = { - '?': '__TEMP_QMRK__', - '@': '__TEMP_AMPE__', - '!': '__TEMP_EXCL__', - '*': '__TEMP_STAR__', - '+': '__TEMP_PLUS__', - ',': '__TEMP_COMMA__', - '(': '__TEMP_LTPAREN__', - ')': '__TEMP_RTPAREN__', - '[': '__TEMP_LTBRACK__', - ']': '__TEMP_RTBRACK__' -}; - -chars.TEMP = temp || (temp = reverse(chars.ESC_TEMP)); - -module.exports = chars; diff --git a/fundamentals/bug-challenge-es6/node_modules/micromatch/lib/expand.js b/fundamentals/bug-challenge-es6/node_modules/micromatch/lib/expand.js deleted file mode 100644 index e99b081eb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/micromatch/lib/expand.js +++ /dev/null @@ -1,304 +0,0 @@ -/*! - * micromatch - * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var utils = require('./utils'); -var Glob = require('./glob'); - -/** - * Expose `expand` - */ - -module.exports = expand; - -/** - * Expand a glob pattern to resolve braces and - * similar patterns before converting to regex. - * - * @param {String|Array} `pattern` - * @param {Array} `files` - * @param {Options} `opts` - * @return {Array} - */ - -function expand(pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('micromatch.expand(): argument should be a string.'); - } - - var glob = new Glob(pattern, options || {}); - var opts = glob.options; - - if (!utils.isGlob(pattern)) { - glob.pattern = glob.pattern.replace(/([\/.])/g, '\\$1'); - return glob; - } - - glob.pattern = glob.pattern.replace(/(\+)(?!\()/g, '\\$1'); - glob.pattern = glob.pattern.split('$').join('\\$'); - - if (typeof opts.braces !== 'boolean' && typeof opts.nobraces !== 'boolean') { - opts.braces = true; - } - - if (glob.pattern === '.*') { - return { - pattern: '\\.' + star, - tokens: tok, - options: opts - }; - } - - if (glob.pattern === '*') { - return { - pattern: oneStar(opts.dot), - tokens: tok, - options: opts - }; - } - - // parse the glob pattern into tokens - glob.parse(); - var tok = glob.tokens; - tok.is.negated = opts.negated; - - // dotfile handling - if ((opts.dotfiles === true || tok.is.dotfile) && opts.dot !== false) { - opts.dotfiles = true; - opts.dot = true; - } - - if ((opts.dotdirs === true || tok.is.dotdir) && opts.dot !== false) { - opts.dotdirs = true; - opts.dot = true; - } - - // check for braces with a dotfile pattern - if (/[{,]\./.test(glob.pattern)) { - opts.makeRe = false; - opts.dot = true; - } - - if (opts.nonegate !== true) { - opts.negated = glob.negated; - } - - // if the leading character is a dot or a slash, escape it - if (glob.pattern.charAt(0) === '.' && glob.pattern.charAt(1) !== '/') { - glob.pattern = '\\' + glob.pattern; - } - - /** - * Extended globs - */ - - // expand braces, e.g `{1..5}` - glob.track('before braces'); - if (tok.is.braces) { - glob.braces(); - } - glob.track('after braces'); - - // expand extglobs, e.g `foo/!(a|b)` - glob.track('before extglob'); - if (tok.is.extglob) { - glob.extglob(); - } - glob.track('after extglob'); - - // expand brackets, e.g `[[:alpha:]]` - glob.track('before brackets'); - if (tok.is.brackets) { - glob.brackets(); - } - glob.track('after brackets'); - - // special patterns - glob._replace('[!', '[^'); - glob._replace('(?', '(%~'); - glob._replace(/\[\]/, '\\[\\]'); - glob._replace('/[', '/' + (opts.dot ? dotfiles : nodot) + '[', true); - glob._replace('/?', '/' + (opts.dot ? dotfiles : nodot) + '[^/]', true); - glob._replace('/.', '/(?=.)\\.', true); - - // windows drives - glob._replace(/^(\w):([\\\/]+?)/gi, '(?=.)$1:$2', true); - - // negate slashes in exclusion ranges - if (glob.pattern.indexOf('[^') !== -1) { - glob.pattern = negateSlash(glob.pattern); - } - - if (opts.globstar !== false && glob.pattern === '**') { - glob.pattern = globstar(opts.dot); - - } else { - glob.pattern = balance(glob.pattern, '[', ']'); - glob.escape(glob.pattern); - - // if the pattern has `**` - if (tok.is.globstar) { - glob.pattern = collapse(glob.pattern, '/**'); - glob.pattern = collapse(glob.pattern, '**/'); - glob._replace('/**/', '(?:/' + globstar(opts.dot) + '/|/)', true); - glob._replace(/\*{2,}/g, '**'); - - // 'foo/*' - glob._replace(/(\w+)\*(?!\/)/g, '$1[^/]*?', true); - glob._replace(/\*\*\/\*(\w)/g, globstar(opts.dot) + '\\/' + (opts.dot ? dotfiles : nodot) + '[^/]*?$1', true); - - if (opts.dot !== true) { - glob._replace(/\*\*\/(.)/g, '(?:**\\/|)$1'); - } - - // 'foo/**' or '{**,*}', but not 'foo**' - if (tok.path.dirname !== '' || /,\*\*|\*\*,/.test(glob.orig)) { - glob._replace('**', globstar(opts.dot), true); - } - } - - // ends with /* - glob._replace(/\/\*$/, '\\/' + oneStar(opts.dot), true); - // ends with *, no slashes - glob._replace(/(?!\/)\*$/, star, true); - // has 'n*.' (partial wildcard w/ file extension) - glob._replace(/([^\/]+)\*/, '$1' + oneStar(true), true); - // has '*' - glob._replace('*', oneStar(opts.dot), true); - glob._replace('?.', '?\\.', true); - glob._replace('?:', '?:', true); - - glob._replace(/\?+/g, function(match) { - var len = match.length; - if (len === 1) { - return qmark; - } - return qmark + '{' + len + '}'; - }); - - // escape '.abc' => '\\.abc' - glob._replace(/\.([*\w]+)/g, '\\.$1'); - // fix '[^\\\\/]' - glob._replace(/\[\^[\\\/]+\]/g, qmark); - // '///' => '\/' - glob._replace(/\/+/g, '\\/'); - // '\\\\\\' => '\\' - glob._replace(/\\{2,}/g, '\\'); - } - - // unescape previously escaped patterns - glob.unescape(glob.pattern); - glob._replace('__UNESC_STAR__', '*'); - - // escape dots that follow qmarks - glob._replace('?.', '?\\.'); - - // remove unnecessary slashes in character classes - glob._replace('[^\\/]', qmark); - - if (glob.pattern.length > 1) { - if (/^[\[?*]/.test(glob.pattern)) { - // only prepend the string if we don't want to match dotfiles - glob.pattern = (opts.dot ? dotfiles : nodot) + glob.pattern; - } - } - - return glob; -} - -/** - * Collapse repeated character sequences. - * - * ```js - * collapse('a/../../../b', '../'); - * //=> 'a/../b' - * ``` - * - * @param {String} `str` - * @param {String} `ch` Character sequence to collapse - * @return {String} - */ - -function collapse(str, ch) { - var res = str.split(ch); - var isFirst = res[0] === ''; - var isLast = res[res.length - 1] === ''; - res = res.filter(Boolean); - if (isFirst) res.unshift(''); - if (isLast) res.push(''); - return res.join(ch); -} - -/** - * Negate slashes in exclusion ranges, per glob spec: - * - * ```js - * negateSlash('[^foo]'); - * //=> '[^\\/foo]' - * ``` - * - * @param {String} `str` glob pattern - * @return {String} - */ - -function negateSlash(str) { - return str.replace(/\[\^([^\]]*?)\]/g, function(match, inner) { - if (inner.indexOf('/') === -1) { - inner = '\\/' + inner; - } - return '[^' + inner + ']'; - }); -} - -/** - * Escape imbalanced braces/bracket. This is a very - * basic, naive implementation that only does enough - * to serve the purpose. - */ - -function balance(str, a, b) { - var aarr = str.split(a); - var alen = aarr.join('').length; - var blen = str.split(b).join('').length; - - if (alen !== blen) { - str = aarr.join('\\' + a); - return str.split(b).join('\\' + b); - } - return str; -} - -/** - * Special patterns to be converted to regex. - * Heuristics are used to simplify patterns - * and speed up processing. - */ - -/* eslint no-multi-spaces: 0 */ -var qmark = '[^/]'; -var star = qmark + '*?'; -var nodot = '(?!\\.)(?=.)'; -var dotfileGlob = '(?:\\/|^)\\.{1,2}($|\\/)'; -var dotfiles = '(?!' + dotfileGlob + ')(?=.)'; -var twoStarDot = '(?:(?!' + dotfileGlob + ').)*?'; - -/** - * Create a regex for `*`. - * - * If `dot` is true, or the pattern does not begin with - * a leading star, then return the simpler regex. - */ - -function oneStar(dotfile) { - return dotfile ? '(?!' + dotfileGlob + ')(?=.)' + star : (nodot + star); -} - -function globstar(dotfile) { - if (dotfile) { return twoStarDot; } - return '(?:(?!(?:\\/|^)\\.).)*?'; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/micromatch/lib/glob.js b/fundamentals/bug-challenge-es6/node_modules/micromatch/lib/glob.js deleted file mode 100644 index c61332673..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/micromatch/lib/glob.js +++ /dev/null @@ -1,193 +0,0 @@ -'use strict'; - -var chars = require('./chars'); -var utils = require('./utils'); - -/** - * Expose `Glob` - */ - -var Glob = module.exports = function Glob(pattern, options) { - if (!(this instanceof Glob)) { - return new Glob(pattern, options); - } - this.options = options || {}; - this.pattern = pattern; - this.history = []; - this.tokens = {}; - this.init(pattern); -}; - -/** - * Initialize defaults - */ - -Glob.prototype.init = function(pattern) { - this.orig = pattern; - this.negated = this.isNegated(); - this.options.track = this.options.track || false; - this.options.makeRe = true; -}; - -/** - * Push a change into `glob.history`. Useful - * for debugging. - */ - -Glob.prototype.track = function(msg) { - if (this.options.track) { - this.history.push({msg: msg, pattern: this.pattern}); - } -}; - -/** - * Return true if `glob.pattern` was negated - * with `!`, also remove the `!` from the pattern. - * - * @return {Boolean} - */ - -Glob.prototype.isNegated = function() { - if (this.pattern.charCodeAt(0) === 33 /* '!' */) { - this.pattern = this.pattern.slice(1); - return true; - } - return false; -}; - -/** - * Expand braces in the given glob pattern. - * - * We only need to use the [braces] lib when - * patterns are nested. - */ - -Glob.prototype.braces = function() { - if (this.options.nobraces !== true && this.options.nobrace !== true) { - // naive/fast check for imbalanced characters - var a = this.pattern.match(/[\{\(\[]/g); - var b = this.pattern.match(/[\}\)\]]/g); - - // if imbalanced, don't optimize the pattern - if (a && b && (a.length !== b.length)) { - this.options.makeRe = false; - } - - // expand brace patterns and join the resulting array - var expanded = utils.braces(this.pattern, this.options); - this.pattern = expanded.join('|'); - } -}; - -/** - * Expand bracket expressions in `glob.pattern` - */ - -Glob.prototype.brackets = function() { - if (this.options.nobrackets !== true) { - this.pattern = utils.brackets(this.pattern); - } -}; - -/** - * Expand bracket expressions in `glob.pattern` - */ - -Glob.prototype.extglob = function() { - if (this.options.noextglob === true) return; - - if (utils.isExtglob(this.pattern)) { - this.pattern = utils.extglob(this.pattern, {escape: true}); - } -}; - -/** - * Parse the given pattern - */ - -Glob.prototype.parse = function(pattern) { - this.tokens = utils.parseGlob(pattern || this.pattern, true); - return this.tokens; -}; - -/** - * Replace `a` with `b`. Also tracks the change before and - * after each replacement. This is disabled by default, but - * can be enabled by setting `options.track` to true. - * - * Also, when the pattern is a string, `.split()` is used, - * because it's much faster than replace. - * - * @param {RegExp|String} `a` - * @param {String} `b` - * @param {Boolean} `escape` When `true`, escapes `*` and `?` in the replacement. - * @return {String} - */ - -Glob.prototype._replace = function(a, b, escape) { - this.track('before (find): "' + a + '" (replace with): "' + b + '"'); - if (escape) b = esc(b); - if (a && b && typeof a === 'string') { - this.pattern = this.pattern.split(a).join(b); - } else { - this.pattern = this.pattern.replace(a, b); - } - this.track('after'); -}; - -/** - * Escape special characters in the given string. - * - * @param {String} `str` Glob pattern - * @return {String} - */ - -Glob.prototype.escape = function(str) { - this.track('before escape: '); - var re = /["\\](['"]?[^"'\\]['"]?)/g; - - this.pattern = str.replace(re, function($0, $1) { - var o = chars.ESC; - var ch = o && o[$1]; - if (ch) { - return ch; - } - if (/[a-z]/i.test($0)) { - return $0.split('\\').join(''); - } - return $0; - }); - - this.track('after escape: '); -}; - -/** - * Unescape special characters in the given string. - * - * @param {String} `str` - * @return {String} - */ - -Glob.prototype.unescape = function(str) { - var re = /__([A-Z]+)_([A-Z]+)__/g; - this.pattern = str.replace(re, function($0, $1) { - return chars[$1][$0]; - }); - this.pattern = unesc(this.pattern); -}; - -/** - * Escape/unescape utils - */ - -function esc(str) { - str = str.split('?').join('%~'); - str = str.split('*').join('%%'); - return str; -} - -function unesc(str) { - str = str.split('%~').join('?'); - str = str.split('%%').join('*'); - return str; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/micromatch/lib/utils.js b/fundamentals/bug-challenge-es6/node_modules/micromatch/lib/utils.js deleted file mode 100644 index 7c24a5106..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/micromatch/lib/utils.js +++ /dev/null @@ -1,149 +0,0 @@ -'use strict'; - -var win32 = process && process.platform === 'win32'; -var path = require('path'); -var fileRe = require('filename-regex'); -var utils = module.exports; - -/** - * Module dependencies - */ - -utils.diff = require('arr-diff'); -utils.unique = require('array-unique'); -utils.braces = require('braces'); -utils.brackets = require('expand-brackets'); -utils.extglob = require('extglob'); -utils.isExtglob = require('is-extglob'); -utils.isGlob = require('is-glob'); -utils.typeOf = require('kind-of'); -utils.normalize = require('normalize-path'); -utils.omit = require('object.omit'); -utils.parseGlob = require('parse-glob'); -utils.cache = require('regex-cache'); - -/** - * Get the filename of a filepath - * - * @param {String} `string` - * @return {String} - */ - -utils.filename = function filename(fp) { - var seg = fp.match(fileRe()); - return seg && seg[0]; -}; - -/** - * Returns a function that returns true if the given - * pattern is the same as a given `filepath` - * - * @param {String} `pattern` - * @return {Function} - */ - -utils.isPath = function isPath(pattern, opts) { - opts = opts || {}; - return function(fp) { - var unixified = utils.unixify(fp, opts); - if(opts.nocase){ - return pattern.toLowerCase() === unixified.toLowerCase(); - } - return pattern === unixified; - }; -}; - -/** - * Returns a function that returns true if the given - * pattern contains a `filepath` - * - * @param {String} `pattern` - * @return {Function} - */ - -utils.hasPath = function hasPath(pattern, opts) { - return function(fp) { - return utils.unixify(pattern, opts).indexOf(fp) !== -1; - }; -}; - -/** - * Returns a function that returns true if the given - * pattern matches or contains a `filepath` - * - * @param {String} `pattern` - * @return {Function} - */ - -utils.matchPath = function matchPath(pattern, opts) { - var fn = (opts && opts.contains) - ? utils.hasPath(pattern, opts) - : utils.isPath(pattern, opts); - return fn; -}; - -/** - * Returns a function that returns true if the given - * regex matches the `filename` of a file path. - * - * @param {RegExp} `re` - * @return {Boolean} - */ - -utils.hasFilename = function hasFilename(re) { - return function(fp) { - var name = utils.filename(fp); - return name && re.test(name); - }; -}; - -/** - * Coerce `val` to an array - * - * @param {*} val - * @return {Array} - */ - -utils.arrayify = function arrayify(val) { - return !Array.isArray(val) - ? [val] - : val; -}; - -/** - * Normalize all slashes in a file path or glob pattern to - * forward slashes. - */ - -utils.unixify = function unixify(fp, opts) { - if (opts && opts.unixify === false) return fp; - if (opts && opts.unixify === true || win32 || path.sep === '\\') { - return utils.normalize(fp, false); - } - if (opts && opts.unescape === true) { - return fp ? fp.toString().replace(/\\(\w)/g, '$1') : ''; - } - return fp; -}; - -/** - * Escape/unescape utils - */ - -utils.escapePath = function escapePath(fp) { - return fp.replace(/[\\.]/g, '\\$&'); -}; - -utils.unescapeGlob = function unescapeGlob(fp) { - return fp.replace(/[\\"']/g, ''); -}; - -utils.escapeRe = function escapeRe(str) { - return str.replace(/[-[\\$*+?.#^\s{}(|)\]]/g, '\\$&'); -}; - -/** - * Expose `utils` - */ - -module.exports = utils; diff --git a/fundamentals/bug-challenge-es6/node_modules/micromatch/package.json b/fundamentals/bug-challenge-es6/node_modules/micromatch/package.json deleted file mode 100644 index 2778e81f3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/micromatch/package.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "_args": [ - [ - "micromatch@^2.3.11", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/test-exclude" - ] - ], - "_from": "micromatch@>=2.3.11 <3.0.0", - "_id": "micromatch@2.3.11", - "_inCache": true, - "_installable": true, - "_location": "/micromatch", - "_nodeVersion": "6.3.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/micromatch-2.3.11.tgz_1468602931475_0.3629888044670224" - }, - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "micromatch", - "raw": "micromatch@^2.3.11", - "rawSpec": "^2.3.11", - "scope": null, - "spec": ">=2.3.11 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/test-exclude" - ], - "_resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "_shasum": "86677c97d1720b363431d04d0d15293bd38c1565", - "_shrinkwrap": null, - "_spec": "micromatch@^2.3.11", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/test-exclude", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/micromatch/issues" - }, - "dependencies": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - }, - "description": "Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch.", - "devDependencies": { - "benchmarked": "^0.1.4", - "chalk": "^1.1.1", - "gulp": "^3.9.0", - "gulp-eslint": "^1.1.1", - "gulp-format-md": "^0.1.8", - "gulp-istanbul": "^0.10.1", - "gulp-mocha": "^2.1.3", - "minimatch": "^3.0.0", - "minimist": "^1.2.0", - "mocha": "^2", - "multimatch": "^2.0.0", - "should": "^8", - "write": "^0.2.1" - }, - "directories": {}, - "dist": { - "shasum": "86677c97d1720b363431d04d0d15293bd38c1565", - "tarball": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js", - "lib" - ], - "gitHead": "f194c187d04677b03047bb7d8d25643725f7a577", - "homepage": "https://github.com/jonschlinkert/micromatch", - "keywords": [ - "bash", - "expand", - "expansion", - "expression", - "file", - "files", - "filter", - "find", - "glob", - "globbing", - "globs", - "globstar", - "match", - "matcher", - "matches", - "matching", - "minimatch", - "multimatch", - "path", - "pattern", - "patterns", - "regex", - "regexp", - "regular", - "shell", - "wildcard" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - }, - { - "email": "elan.shanker+npm@gmail.com", - "name": "es128" - } - ], - "name": "micromatch", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/micromatch.git" - }, - "scripts": { - "test": "mocha" - }, - "verb": { - "layout": false, - "lint": { - "reflinks": true - }, - "plugins": [ - "gulp-format-md" - ], - "reflinks": [ - "braces", - "expand-brackets", - "extglob", - "minimatch", - "multimatch", - "verb" - ], - "related": { - "list": [ - "braces", - "expand-brackets", - "expand-range", - "extglob", - "fill-range", - "gulp-micromatch", - "is-glob", - "parse-glob" - ] - }, - "tasks": [ - "readme" - ], - "toc": false - }, - "version": "2.3.11" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/mime-db/HISTORY.md b/fundamentals/bug-challenge-es6/node_modules/mime-db/HISTORY.md deleted file mode 100644 index 01fa85c28..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mime-db/HISTORY.md +++ /dev/null @@ -1,375 +0,0 @@ -1.25.0 / 2016-11-11 -=================== - - * Add `application/dicom+json` - * Add `application/dicom+xml` - * Add `application/vnd.openstreetmap.data+xml` - * Add `application/vnd.tri.onesource` - * Add `application/yang-data+json` - * Add `application/yang-data+xml` - -1.24.0 / 2016-09-18 -=================== - - * Add `application/clue_info+xml` - * Add `application/geo+json` - * Add `application/lgr+xml` - * Add `application/vnd.amazon.mobi8-ebook` - * Add `application/vnd.chess-pgn` - * Add `application/vnd.comicbook+zip` - * Add `application/vnd.d2l.coursepackage1p0+zip` - * Add `application/vnd.espass-espass+zip` - * Add `application/vnd.nearst.inv+json` - * Add `application/vnd.oma.lwm2m+json` - * Add `application/vnd.oma.lwm2m+tlv` - * Add `application/vnd.quarantainenet` - * Add `application/vnd.rar` - * Add `audio/mp3` - * Add `image/dicom-rle` - * Add `image/emf` - * Add `image/jls` - * Add `image/wmf` - * Add `model/gltf+json` - * Add `text/vnd.ascii-art` - -1.23.0 / 2016-05-01 -=================== - - * Add `application/efi` - * Add `application/vnd.3gpp.sms+xml` - * Add `application/vnd.3lightssoftware.imagescal` - * Add `application/vnd.coreos.ignition+json` - * Add `application/vnd.desmume.movie` - * Add `application/vnd.onepager` - * Add `application/vnd.vel+json` - * Add `text/prs.prop.logic` - * Add `video/encaprtp` - * Add `video/h265` - * Add `video/iso.segment` - * Add `video/raptorfec` - * Add `video/rtploopback` - * Add `video/vnd.radgamettools.bink` - * Add `video/vnd.radgamettools.smacker` - * Add `video/vp8` - * Add extension `.3gpp` to `audio/3gpp` - -1.22.0 / 2016-02-15 -=================== - - * Add `application/ppsp-tracker+json` - * Add `application/problem+json` - * Add `application/problem+xml` - * Add `application/vnd.hdt` - * Add `application/vnd.ms-printschematicket+xml` - * Add `model/vnd.rosette.annotated-data-model` - * Add `text/slim` - * Add extension `.rng` to `application/xml` - * Fix extension of `application/dash+xml` to be `.mpd` - * Update primary extension to `.m4a` for `audio/mp4` - -1.21.0 / 2016-01-06 -=================== - - * Add `application/emergencycalldata.comment+xml` - * Add `application/emergencycalldata.deviceinfo+xml` - * Add `application/emergencycalldata.providerinfo+xml` - * Add `application/emergencycalldata.serviceinfo+xml` - * Add `application/emergencycalldata.subscriberinfo+xml` - * Add `application/vnd.filmit.zfc` - * Add `application/vnd.google-apps.document` - * Add `application/vnd.google-apps.presentation` - * Add `application/vnd.google-apps.spreadsheet` - * Add `application/vnd.mapbox-vector-tile` - * Add `application/vnd.ms-printdevicecapabilities+xml` - * Add `application/vnd.ms-windows.devicepairing` - * Add `application/vnd.ms-windows.nwprinting.oob` - * Add `application/vnd.tml` - * Add `audio/evs` - -1.20.0 / 2015-11-10 -=================== - - * Add `application/cdni` - * Add `application/csvm+json` - * Add `application/rfc+xml` - * Add `application/vnd.3gpp.access-transfer-events+xml` - * Add `application/vnd.3gpp.srvcc-ext+xml` - * Add `application/vnd.ms-windows.wsd.oob` - * Add `application/vnd.oxli.countgraph` - * Add `application/vnd.pagerduty+json` - * Add `text/x-suse-ymp` - -1.19.0 / 2015-09-17 -=================== - - * Add `application/vnd.3gpp-prose-pc3ch+xml` - * Add `application/vnd.3gpp.srvcc-info+xml` - * Add `application/vnd.apple.pkpass` - * Add `application/vnd.drive+json` - -1.18.0 / 2015-09-03 -=================== - - * Add `application/pkcs12` - * Add `application/vnd.3gpp-prose+xml` - * Add `application/vnd.3gpp.mid-call+xml` - * Add `application/vnd.3gpp.state-and-event-info+xml` - * Add `application/vnd.anki` - * Add `application/vnd.firemonkeys.cloudcell` - * Add `application/vnd.openblox.game+xml` - * Add `application/vnd.openblox.game-binary` - -1.17.0 / 2015-08-13 -=================== - - * Add `application/x-msdos-program` - * Add `audio/g711-0` - * Add `image/vnd.mozilla.apng` - * Add extension `.exe` to `application/x-msdos-program` - -1.16.0 / 2015-07-29 -=================== - - * Add `application/vnd.uri-map` - -1.15.0 / 2015-07-13 -=================== - - * Add `application/x-httpd-php` - -1.14.0 / 2015-06-25 -=================== - - * Add `application/scim+json` - * Add `application/vnd.3gpp.ussd+xml` - * Add `application/vnd.biopax.rdf+xml` - * Add `text/x-processing` - -1.13.0 / 2015-06-07 -=================== - - * Add nginx as a source - * Add `application/x-cocoa` - * Add `application/x-java-archive-diff` - * Add `application/x-makeself` - * Add `application/x-perl` - * Add `application/x-pilot` - * Add `application/x-redhat-package-manager` - * Add `application/x-sea` - * Add `audio/x-m4a` - * Add `audio/x-realaudio` - * Add `image/x-jng` - * Add `text/mathml` - -1.12.0 / 2015-06-05 -=================== - - * Add `application/bdoc` - * Add `application/vnd.hyperdrive+json` - * Add `application/x-bdoc` - * Add extension `.rtf` to `text/rtf` - -1.11.0 / 2015-05-31 -=================== - - * Add `audio/wav` - * Add `audio/wave` - * Add extension `.litcoffee` to `text/coffeescript` - * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data` - * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install` - -1.10.0 / 2015-05-19 -=================== - - * Add `application/vnd.balsamiq.bmpr` - * Add `application/vnd.microsoft.portable-executable` - * Add `application/x-ns-proxy-autoconfig` - -1.9.1 / 2015-04-19 -================== - - * Remove `.json` extension from `application/manifest+json` - - This is causing bugs downstream - -1.9.0 / 2015-04-19 -================== - - * Add `application/manifest+json` - * Add `application/vnd.micro+json` - * Add `image/vnd.zbrush.pcx` - * Add `image/x-ms-bmp` - -1.8.0 / 2015-03-13 -================== - - * Add `application/vnd.citationstyles.style+xml` - * Add `application/vnd.fastcopy-disk-image` - * Add `application/vnd.gov.sk.xmldatacontainer+xml` - * Add extension `.jsonld` to `application/ld+json` - -1.7.0 / 2015-02-08 -================== - - * Add `application/vnd.gerber` - * Add `application/vnd.msa-disk-image` - -1.6.1 / 2015-02-05 -================== - - * Community extensions ownership transferred from `node-mime` - -1.6.0 / 2015-01-29 -================== - - * Add `application/jose` - * Add `application/jose+json` - * Add `application/json-seq` - * Add `application/jwk+json` - * Add `application/jwk-set+json` - * Add `application/jwt` - * Add `application/rdap+json` - * Add `application/vnd.gov.sk.e-form+xml` - * Add `application/vnd.ims.imsccv1p3` - -1.5.0 / 2014-12-30 -================== - - * Add `application/vnd.oracle.resource+json` - * Fix various invalid MIME type entries - - `application/mbox+xml` - - `application/oscp-response` - - `application/vwg-multiplexed` - - `audio/g721` - -1.4.0 / 2014-12-21 -================== - - * Add `application/vnd.ims.imsccv1p2` - * Fix various invalid MIME type entries - - `application/vnd-acucobol` - - `application/vnd-curl` - - `application/vnd-dart` - - `application/vnd-dxr` - - `application/vnd-fdf` - - `application/vnd-mif` - - `application/vnd-sema` - - `application/vnd-wap-wmlc` - - `application/vnd.adobe.flash-movie` - - `application/vnd.dece-zip` - - `application/vnd.dvb_service` - - `application/vnd.micrografx-igx` - - `application/vnd.sealed-doc` - - `application/vnd.sealed-eml` - - `application/vnd.sealed-mht` - - `application/vnd.sealed-ppt` - - `application/vnd.sealed-tiff` - - `application/vnd.sealed-xls` - - `application/vnd.sealedmedia.softseal-html` - - `application/vnd.sealedmedia.softseal-pdf` - - `application/vnd.wap-slc` - - `application/vnd.wap-wbxml` - - `audio/vnd.sealedmedia.softseal-mpeg` - - `image/vnd-djvu` - - `image/vnd-svf` - - `image/vnd-wap-wbmp` - - `image/vnd.sealed-png` - - `image/vnd.sealedmedia.softseal-gif` - - `image/vnd.sealedmedia.softseal-jpg` - - `model/vnd-dwf` - - `model/vnd.parasolid.transmit-binary` - - `model/vnd.parasolid.transmit-text` - - `text/vnd-a` - - `text/vnd-curl` - - `text/vnd.wap-wml` - * Remove example template MIME types - - `application/example` - - `audio/example` - - `image/example` - - `message/example` - - `model/example` - - `multipart/example` - - `text/example` - - `video/example` - -1.3.1 / 2014-12-16 -================== - - * Fix missing extensions - - `application/json5` - - `text/hjson` - -1.3.0 / 2014-12-07 -================== - - * Add `application/a2l` - * Add `application/aml` - * Add `application/atfx` - * Add `application/atxml` - * Add `application/cdfx+xml` - * Add `application/dii` - * Add `application/json5` - * Add `application/lxf` - * Add `application/mf4` - * Add `application/vnd.apache.thrift.compact` - * Add `application/vnd.apache.thrift.json` - * Add `application/vnd.coffeescript` - * Add `application/vnd.enphase.envoy` - * Add `application/vnd.ims.imsccv1p1` - * Add `text/csv-schema` - * Add `text/hjson` - * Add `text/markdown` - * Add `text/yaml` - -1.2.0 / 2014-11-09 -================== - - * Add `application/cea` - * Add `application/dit` - * Add `application/vnd.gov.sk.e-form+zip` - * Add `application/vnd.tmd.mediaflex.api+xml` - * Type `application/epub+zip` is now IANA-registered - -1.1.2 / 2014-10-23 -================== - - * Rebuild database for `application/x-www-form-urlencoded` change - -1.1.1 / 2014-10-20 -================== - - * Mark `application/x-www-form-urlencoded` as compressible. - -1.1.0 / 2014-09-28 -================== - - * Add `application/font-woff2` - -1.0.3 / 2014-09-25 -================== - - * Fix engine requirement in package - -1.0.2 / 2014-09-25 -================== - - * Add `application/coap-group+json` - * Add `application/dcd` - * Add `application/vnd.apache.thrift.binary` - * Add `image/vnd.tencent.tap` - * Mark all JSON-derived types as compressible - * Update `text/vtt` data - -1.0.1 / 2014-08-30 -================== - - * Fix extension ordering - -1.0.0 / 2014-08-30 -================== - - * Add `application/atf` - * Add `application/merge-patch+json` - * Add `multipart/x-mixed-replace` - * Add `source: 'apache'` metadata - * Add `source: 'iana'` metadata - * Remove badly-assumed charset data diff --git a/fundamentals/bug-challenge-es6/node_modules/mime-db/LICENSE b/fundamentals/bug-challenge-es6/node_modules/mime-db/LICENSE deleted file mode 100644 index a7ae8ee9b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mime-db/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/mime-db/README.md b/fundamentals/bug-challenge-es6/node_modules/mime-db/README.md deleted file mode 100644 index 7662440bb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mime-db/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# mime-db - -[![NPM Version][npm-version-image]][npm-url] -[![NPM Downloads][npm-downloads-image]][npm-url] -[![Node.js Version][node-image]][node-url] -[![Build Status][travis-image]][travis-url] -[![Coverage Status][coveralls-image]][coveralls-url] - -This is a database of all mime types. -It consists of a single, public JSON file and does not include any logic, -allowing it to remain as un-opinionated as possible with an API. -It aggregates data from the following sources: - -- http://www.iana.org/assignments/media-types/media-types.xhtml -- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types -- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types - -## Installation - -```bash -npm install mime-db -``` - -### Database Download - -If you're crazy enough to use this in the browser, you can just grab the -JSON file using [RawGit](https://rawgit.com/). It is recommended to replace -`master` with [a release tag](https://github.com/jshttp/mime-db/tags) as the -JSON format may change in the future. - -``` -https://cdn.rawgit.com/jshttp/mime-db/master/db.json -``` - -## Usage - -```js -var db = require('mime-db'); - -// grab data on .js files -var data = db['application/javascript']; -``` - -## Data Structure - -The JSON file is a map lookup for lowercased mime types. -Each mime type has the following properties: - -- `.source` - where the mime type is defined. - If not set, it's probably a custom media type. - - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) - - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml) - - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types) -- `.extensions[]` - known extensions associated with this mime type. -- `.compressible` - whether a file of this type can be gzipped. -- `.charset` - the default charset associated with this type, if any. - -If unknown, every property could be `undefined`. - -## Contributing - -To edit the database, only make PRs against `src/custom.json` or -`src/custom-suffix.json`. - -To update the build, run `npm run build`. - -## Adding Custom Media Types - -The best way to get new media types included in this library is to register -them with the IANA. The community registration procedure is outlined in -[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types -registered with the IANA are automatically pulled into this library. - -[npm-version-image]: https://img.shields.io/npm/v/mime-db.svg -[npm-downloads-image]: https://img.shields.io/npm/dm/mime-db.svg -[npm-url]: https://npmjs.org/package/mime-db -[travis-image]: https://img.shields.io/travis/jshttp/mime-db/master.svg -[travis-url]: https://travis-ci.org/jshttp/mime-db -[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-db/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master -[node-image]: https://img.shields.io/node/v/mime-db.svg -[node-url]: http://nodejs.org/download/ diff --git a/fundamentals/bug-challenge-es6/node_modules/mime-db/db.json b/fundamentals/bug-challenge-es6/node_modules/mime-db/db.json deleted file mode 100644 index 94384d313..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mime-db/db.json +++ /dev/null @@ -1,6712 +0,0 @@ -{ - "application/1d-interleaved-parityfec": { - "source": "iana" - }, - "application/3gpdash-qoe-report+xml": { - "source": "iana" - }, - "application/3gpp-ims+xml": { - "source": "iana" - }, - "application/a2l": { - "source": "iana" - }, - "application/activemessage": { - "source": "iana" - }, - "application/alto-costmap+json": { - "source": "iana", - "compressible": true - }, - "application/alto-costmapfilter+json": { - "source": "iana", - "compressible": true - }, - "application/alto-directory+json": { - "source": "iana", - "compressible": true - }, - "application/alto-endpointcost+json": { - "source": "iana", - "compressible": true - }, - "application/alto-endpointcostparams+json": { - "source": "iana", - "compressible": true - }, - "application/alto-endpointprop+json": { - "source": "iana", - "compressible": true - }, - "application/alto-endpointpropparams+json": { - "source": "iana", - "compressible": true - }, - "application/alto-error+json": { - "source": "iana", - "compressible": true - }, - "application/alto-networkmap+json": { - "source": "iana", - "compressible": true - }, - "application/alto-networkmapfilter+json": { - "source": "iana", - "compressible": true - }, - "application/aml": { - "source": "iana" - }, - "application/andrew-inset": { - "source": "iana", - "extensions": ["ez"] - }, - "application/applefile": { - "source": "iana" - }, - "application/applixware": { - "source": "apache", - "extensions": ["aw"] - }, - "application/atf": { - "source": "iana" - }, - "application/atfx": { - "source": "iana" - }, - "application/atom+xml": { - "source": "iana", - "compressible": true, - "extensions": ["atom"] - }, - "application/atomcat+xml": { - "source": "iana", - "extensions": ["atomcat"] - }, - "application/atomdeleted+xml": { - "source": "iana" - }, - "application/atomicmail": { - "source": "iana" - }, - "application/atomsvc+xml": { - "source": "iana", - "extensions": ["atomsvc"] - }, - "application/atxml": { - "source": "iana" - }, - "application/auth-policy+xml": { - "source": "iana" - }, - "application/bacnet-xdd+zip": { - "source": "iana" - }, - "application/batch-smtp": { - "source": "iana" - }, - "application/bdoc": { - "compressible": false, - "extensions": ["bdoc"] - }, - "application/beep+xml": { - "source": "iana" - }, - "application/calendar+json": { - "source": "iana", - "compressible": true - }, - "application/calendar+xml": { - "source": "iana" - }, - "application/call-completion": { - "source": "iana" - }, - "application/cals-1840": { - "source": "iana" - }, - "application/cbor": { - "source": "iana" - }, - "application/ccmp+xml": { - "source": "iana" - }, - "application/ccxml+xml": { - "source": "iana", - "extensions": ["ccxml"] - }, - "application/cdfx+xml": { - "source": "iana" - }, - "application/cdmi-capability": { - "source": "iana", - "extensions": ["cdmia"] - }, - "application/cdmi-container": { - "source": "iana", - "extensions": ["cdmic"] - }, - "application/cdmi-domain": { - "source": "iana", - "extensions": ["cdmid"] - }, - "application/cdmi-object": { - "source": "iana", - "extensions": ["cdmio"] - }, - "application/cdmi-queue": { - "source": "iana", - "extensions": ["cdmiq"] - }, - "application/cdni": { - "source": "iana" - }, - "application/cea": { - "source": "iana" - }, - "application/cea-2018+xml": { - "source": "iana" - }, - "application/cellml+xml": { - "source": "iana" - }, - "application/cfw": { - "source": "iana" - }, - "application/clue_info+xml": { - "source": "iana" - }, - "application/cms": { - "source": "iana" - }, - "application/cnrp+xml": { - "source": "iana" - }, - "application/coap-group+json": { - "source": "iana", - "compressible": true - }, - "application/commonground": { - "source": "iana" - }, - "application/conference-info+xml": { - "source": "iana" - }, - "application/cpl+xml": { - "source": "iana" - }, - "application/csrattrs": { - "source": "iana" - }, - "application/csta+xml": { - "source": "iana" - }, - "application/cstadata+xml": { - "source": "iana" - }, - "application/csvm+json": { - "source": "iana", - "compressible": true - }, - "application/cu-seeme": { - "source": "apache", - "extensions": ["cu"] - }, - "application/cybercash": { - "source": "iana" - }, - "application/dart": { - "compressible": true - }, - "application/dash+xml": { - "source": "iana", - "extensions": ["mpd"] - }, - "application/dashdelta": { - "source": "iana" - }, - "application/davmount+xml": { - "source": "iana", - "extensions": ["davmount"] - }, - "application/dca-rft": { - "source": "iana" - }, - "application/dcd": { - "source": "iana" - }, - "application/dec-dx": { - "source": "iana" - }, - "application/dialog-info+xml": { - "source": "iana" - }, - "application/dicom": { - "source": "iana" - }, - "application/dicom+json": { - "source": "iana", - "compressible": true - }, - "application/dicom+xml": { - "source": "iana" - }, - "application/dii": { - "source": "iana" - }, - "application/dit": { - "source": "iana" - }, - "application/dns": { - "source": "iana" - }, - "application/docbook+xml": { - "source": "apache", - "extensions": ["dbk"] - }, - "application/dskpp+xml": { - "source": "iana" - }, - "application/dssc+der": { - "source": "iana", - "extensions": ["dssc"] - }, - "application/dssc+xml": { - "source": "iana", - "extensions": ["xdssc"] - }, - "application/dvcs": { - "source": "iana" - }, - "application/ecmascript": { - "source": "iana", - "compressible": true, - "extensions": ["ecma"] - }, - "application/edi-consent": { - "source": "iana" - }, - "application/edi-x12": { - "source": "iana", - "compressible": false - }, - "application/edifact": { - "source": "iana", - "compressible": false - }, - "application/efi": { - "source": "iana" - }, - "application/emergencycalldata.comment+xml": { - "source": "iana" - }, - "application/emergencycalldata.deviceinfo+xml": { - "source": "iana" - }, - "application/emergencycalldata.providerinfo+xml": { - "source": "iana" - }, - "application/emergencycalldata.serviceinfo+xml": { - "source": "iana" - }, - "application/emergencycalldata.subscriberinfo+xml": { - "source": "iana" - }, - "application/emma+xml": { - "source": "iana", - "extensions": ["emma"] - }, - "application/emotionml+xml": { - "source": "iana" - }, - "application/encaprtp": { - "source": "iana" - }, - "application/epp+xml": { - "source": "iana" - }, - "application/epub+zip": { - "source": "iana", - "extensions": ["epub"] - }, - "application/eshop": { - "source": "iana" - }, - "application/exi": { - "source": "iana", - "extensions": ["exi"] - }, - "application/fastinfoset": { - "source": "iana" - }, - "application/fastsoap": { - "source": "iana" - }, - "application/fdt+xml": { - "source": "iana" - }, - "application/fits": { - "source": "iana" - }, - "application/font-sfnt": { - "source": "iana" - }, - "application/font-tdpfr": { - "source": "iana", - "extensions": ["pfr"] - }, - "application/font-woff": { - "source": "iana", - "compressible": false, - "extensions": ["woff"] - }, - "application/font-woff2": { - "compressible": false, - "extensions": ["woff2"] - }, - "application/framework-attributes+xml": { - "source": "iana" - }, - "application/geo+json": { - "source": "iana", - "compressible": true - }, - "application/gml+xml": { - "source": "apache", - "extensions": ["gml"] - }, - "application/gpx+xml": { - "source": "apache", - "extensions": ["gpx"] - }, - "application/gxf": { - "source": "apache", - "extensions": ["gxf"] - }, - "application/gzip": { - "source": "iana", - "compressible": false - }, - "application/h224": { - "source": "iana" - }, - "application/held+xml": { - "source": "iana" - }, - "application/http": { - "source": "iana" - }, - "application/hyperstudio": { - "source": "iana", - "extensions": ["stk"] - }, - "application/ibe-key-request+xml": { - "source": "iana" - }, - "application/ibe-pkg-reply+xml": { - "source": "iana" - }, - "application/ibe-pp-data": { - "source": "iana" - }, - "application/iges": { - "source": "iana" - }, - "application/im-iscomposing+xml": { - "source": "iana" - }, - "application/index": { - "source": "iana" - }, - "application/index.cmd": { - "source": "iana" - }, - "application/index.obj": { - "source": "iana" - }, - "application/index.response": { - "source": "iana" - }, - "application/index.vnd": { - "source": "iana" - }, - "application/inkml+xml": { - "source": "iana", - "extensions": ["ink","inkml"] - }, - "application/iotp": { - "source": "iana" - }, - "application/ipfix": { - "source": "iana", - "extensions": ["ipfix"] - }, - "application/ipp": { - "source": "iana" - }, - "application/isup": { - "source": "iana" - }, - "application/its+xml": { - "source": "iana" - }, - "application/java-archive": { - "source": "apache", - "compressible": false, - "extensions": ["jar","war","ear"] - }, - "application/java-serialized-object": { - "source": "apache", - "compressible": false, - "extensions": ["ser"] - }, - "application/java-vm": { - "source": "apache", - "compressible": false, - "extensions": ["class"] - }, - "application/javascript": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["js"] - }, - "application/jose": { - "source": "iana" - }, - "application/jose+json": { - "source": "iana", - "compressible": true - }, - "application/jrd+json": { - "source": "iana", - "compressible": true - }, - "application/json": { - "source": "iana", - "charset": "UTF-8", - "compressible": true, - "extensions": ["json","map"] - }, - "application/json-patch+json": { - "source": "iana", - "compressible": true - }, - "application/json-seq": { - "source": "iana" - }, - "application/json5": { - "extensions": ["json5"] - }, - "application/jsonml+json": { - "source": "apache", - "compressible": true, - "extensions": ["jsonml"] - }, - "application/jwk+json": { - "source": "iana", - "compressible": true - }, - "application/jwk-set+json": { - "source": "iana", - "compressible": true - }, - "application/jwt": { - "source": "iana" - }, - "application/kpml-request+xml": { - "source": "iana" - }, - "application/kpml-response+xml": { - "source": "iana" - }, - "application/ld+json": { - "source": "iana", - "compressible": true, - "extensions": ["jsonld"] - }, - "application/lgr+xml": { - "source": "iana" - }, - "application/link-format": { - "source": "iana" - }, - "application/load-control+xml": { - "source": "iana" - }, - "application/lost+xml": { - "source": "iana", - "extensions": ["lostxml"] - }, - "application/lostsync+xml": { - "source": "iana" - }, - "application/lxf": { - "source": "iana" - }, - "application/mac-binhex40": { - "source": "iana", - "extensions": ["hqx"] - }, - "application/mac-compactpro": { - "source": "apache", - "extensions": ["cpt"] - }, - "application/macwriteii": { - "source": "iana" - }, - "application/mads+xml": { - "source": "iana", - "extensions": ["mads"] - }, - "application/manifest+json": { - "charset": "UTF-8", - "compressible": true, - "extensions": ["webmanifest"] - }, - "application/marc": { - "source": "iana", - "extensions": ["mrc"] - }, - "application/marcxml+xml": { - "source": "iana", - "extensions": ["mrcx"] - }, - "application/mathematica": { - "source": "iana", - "extensions": ["ma","nb","mb"] - }, - "application/mathml+xml": { - "source": "iana", - "extensions": ["mathml"] - }, - "application/mathml-content+xml": { - "source": "iana" - }, - "application/mathml-presentation+xml": { - "source": "iana" - }, - "application/mbms-associated-procedure-description+xml": { - "source": "iana" - }, - "application/mbms-deregister+xml": { - "source": "iana" - }, - "application/mbms-envelope+xml": { - "source": "iana" - }, - "application/mbms-msk+xml": { - "source": "iana" - }, - "application/mbms-msk-response+xml": { - "source": "iana" - }, - "application/mbms-protection-description+xml": { - "source": "iana" - }, - "application/mbms-reception-report+xml": { - "source": "iana" - }, - "application/mbms-register+xml": { - "source": "iana" - }, - "application/mbms-register-response+xml": { - "source": "iana" - }, - "application/mbms-schedule+xml": { - "source": "iana" - }, - "application/mbms-user-service-description+xml": { - "source": "iana" - }, - "application/mbox": { - "source": "iana", - "extensions": ["mbox"] - }, - "application/media-policy-dataset+xml": { - "source": "iana" - }, - "application/media_control+xml": { - "source": "iana" - }, - "application/mediaservercontrol+xml": { - "source": "iana", - "extensions": ["mscml"] - }, - "application/merge-patch+json": { - "source": "iana", - "compressible": true - }, - "application/metalink+xml": { - "source": "apache", - "extensions": ["metalink"] - }, - "application/metalink4+xml": { - "source": "iana", - "extensions": ["meta4"] - }, - "application/mets+xml": { - "source": "iana", - "extensions": ["mets"] - }, - "application/mf4": { - "source": "iana" - }, - "application/mikey": { - "source": "iana" - }, - "application/mods+xml": { - "source": "iana", - "extensions": ["mods"] - }, - "application/moss-keys": { - "source": "iana" - }, - "application/moss-signature": { - "source": "iana" - }, - "application/mosskey-data": { - "source": "iana" - }, - "application/mosskey-request": { - "source": "iana" - }, - "application/mp21": { - "source": "iana", - "extensions": ["m21","mp21"] - }, - "application/mp4": { - "source": "iana", - "extensions": ["mp4s","m4p"] - }, - "application/mpeg4-generic": { - "source": "iana" - }, - "application/mpeg4-iod": { - "source": "iana" - }, - "application/mpeg4-iod-xmt": { - "source": "iana" - }, - "application/mrb-consumer+xml": { - "source": "iana" - }, - "application/mrb-publish+xml": { - "source": "iana" - }, - "application/msc-ivr+xml": { - "source": "iana" - }, - "application/msc-mixer+xml": { - "source": "iana" - }, - "application/msword": { - "source": "iana", - "compressible": false, - "extensions": ["doc","dot"] - }, - "application/mxf": { - "source": "iana", - "extensions": ["mxf"] - }, - "application/nasdata": { - "source": "iana" - }, - "application/news-checkgroups": { - "source": "iana" - }, - "application/news-groupinfo": { - "source": "iana" - }, - "application/news-transmission": { - "source": "iana" - }, - "application/nlsml+xml": { - "source": "iana" - }, - "application/nss": { - "source": "iana" - }, - "application/ocsp-request": { - "source": "iana" - }, - "application/ocsp-response": { - "source": "iana" - }, - "application/octet-stream": { - "source": "iana", - "compressible": false, - "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"] - }, - "application/oda": { - "source": "iana", - "extensions": ["oda"] - }, - "application/odx": { - "source": "iana" - }, - "application/oebps-package+xml": { - "source": "iana", - "extensions": ["opf"] - }, - "application/ogg": { - "source": "iana", - "compressible": false, - "extensions": ["ogx"] - }, - "application/omdoc+xml": { - "source": "apache", - "extensions": ["omdoc"] - }, - "application/onenote": { - "source": "apache", - "extensions": ["onetoc","onetoc2","onetmp","onepkg"] - }, - "application/oxps": { - "source": "iana", - "extensions": ["oxps"] - }, - "application/p2p-overlay+xml": { - "source": "iana" - }, - "application/parityfec": { - "source": "iana" - }, - "application/patch-ops-error+xml": { - "source": "iana", - "extensions": ["xer"] - }, - "application/pdf": { - "source": "iana", - "compressible": false, - "extensions": ["pdf"] - }, - "application/pdx": { - "source": "iana" - }, - "application/pgp-encrypted": { - "source": "iana", - "compressible": false, - "extensions": ["pgp"] - }, - "application/pgp-keys": { - "source": "iana" - }, - "application/pgp-signature": { - "source": "iana", - "extensions": ["asc","sig"] - }, - "application/pics-rules": { - "source": "apache", - "extensions": ["prf"] - }, - "application/pidf+xml": { - "source": "iana" - }, - "application/pidf-diff+xml": { - "source": "iana" - }, - "application/pkcs10": { - "source": "iana", - "extensions": ["p10"] - }, - "application/pkcs12": { - "source": "iana" - }, - "application/pkcs7-mime": { - "source": "iana", - "extensions": ["p7m","p7c"] - }, - "application/pkcs7-signature": { - "source": "iana", - "extensions": ["p7s"] - }, - "application/pkcs8": { - "source": "iana", - "extensions": ["p8"] - }, - "application/pkix-attr-cert": { - "source": "iana", - "extensions": ["ac"] - }, - "application/pkix-cert": { - "source": "iana", - "extensions": ["cer"] - }, - "application/pkix-crl": { - "source": "iana", - "extensions": ["crl"] - }, - "application/pkix-pkipath": { - "source": "iana", - "extensions": ["pkipath"] - }, - "application/pkixcmp": { - "source": "iana", - "extensions": ["pki"] - }, - "application/pls+xml": { - "source": "iana", - "extensions": ["pls"] - }, - "application/poc-settings+xml": { - "source": "iana" - }, - "application/postscript": { - "source": "iana", - "compressible": true, - "extensions": ["ai","eps","ps"] - }, - "application/ppsp-tracker+json": { - "source": "iana", - "compressible": true - }, - "application/problem+json": { - "source": "iana", - "compressible": true - }, - "application/problem+xml": { - "source": "iana" - }, - "application/provenance+xml": { - "source": "iana" - }, - "application/prs.alvestrand.titrax-sheet": { - "source": "iana" - }, - "application/prs.cww": { - "source": "iana", - "extensions": ["cww"] - }, - "application/prs.hpub+zip": { - "source": "iana" - }, - "application/prs.nprend": { - "source": "iana" - }, - "application/prs.plucker": { - "source": "iana" - }, - "application/prs.rdf-xml-crypt": { - "source": "iana" - }, - "application/prs.xsf+xml": { - "source": "iana" - }, - "application/pskc+xml": { - "source": "iana", - "extensions": ["pskcxml"] - }, - "application/qsig": { - "source": "iana" - }, - "application/raptorfec": { - "source": "iana" - }, - "application/rdap+json": { - "source": "iana", - "compressible": true - }, - "application/rdf+xml": { - "source": "iana", - "compressible": true, - "extensions": ["rdf"] - }, - "application/reginfo+xml": { - "source": "iana", - "extensions": ["rif"] - }, - "application/relax-ng-compact-syntax": { - "source": "iana", - "extensions": ["rnc"] - }, - "application/remote-printing": { - "source": "iana" - }, - "application/reputon+json": { - "source": "iana", - "compressible": true - }, - "application/resource-lists+xml": { - "source": "iana", - "extensions": ["rl"] - }, - "application/resource-lists-diff+xml": { - "source": "iana", - "extensions": ["rld"] - }, - "application/rfc+xml": { - "source": "iana" - }, - "application/riscos": { - "source": "iana" - }, - "application/rlmi+xml": { - "source": "iana" - }, - "application/rls-services+xml": { - "source": "iana", - "extensions": ["rs"] - }, - "application/rpki-ghostbusters": { - "source": "iana", - "extensions": ["gbr"] - }, - "application/rpki-manifest": { - "source": "iana", - "extensions": ["mft"] - }, - "application/rpki-roa": { - "source": "iana", - "extensions": ["roa"] - }, - "application/rpki-updown": { - "source": "iana" - }, - "application/rsd+xml": { - "source": "apache", - "extensions": ["rsd"] - }, - "application/rss+xml": { - "source": "apache", - "compressible": true, - "extensions": ["rss"] - }, - "application/rtf": { - "source": "iana", - "compressible": true, - "extensions": ["rtf"] - }, - "application/rtploopback": { - "source": "iana" - }, - "application/rtx": { - "source": "iana" - }, - "application/samlassertion+xml": { - "source": "iana" - }, - "application/samlmetadata+xml": { - "source": "iana" - }, - "application/sbml+xml": { - "source": "iana", - "extensions": ["sbml"] - }, - "application/scaip+xml": { - "source": "iana" - }, - "application/scim+json": { - "source": "iana", - "compressible": true - }, - "application/scvp-cv-request": { - "source": "iana", - "extensions": ["scq"] - }, - "application/scvp-cv-response": { - "source": "iana", - "extensions": ["scs"] - }, - "application/scvp-vp-request": { - "source": "iana", - "extensions": ["spq"] - }, - "application/scvp-vp-response": { - "source": "iana", - "extensions": ["spp"] - }, - "application/sdp": { - "source": "iana", - "extensions": ["sdp"] - }, - "application/sep+xml": { - "source": "iana" - }, - "application/sep-exi": { - "source": "iana" - }, - "application/session-info": { - "source": "iana" - }, - "application/set-payment": { - "source": "iana" - }, - "application/set-payment-initiation": { - "source": "iana", - "extensions": ["setpay"] - }, - "application/set-registration": { - "source": "iana" - }, - "application/set-registration-initiation": { - "source": "iana", - "extensions": ["setreg"] - }, - "application/sgml": { - "source": "iana" - }, - "application/sgml-open-catalog": { - "source": "iana" - }, - "application/shf+xml": { - "source": "iana", - "extensions": ["shf"] - }, - "application/sieve": { - "source": "iana" - }, - "application/simple-filter+xml": { - "source": "iana" - }, - "application/simple-message-summary": { - "source": "iana" - }, - "application/simplesymbolcontainer": { - "source": "iana" - }, - "application/slate": { - "source": "iana" - }, - "application/smil": { - "source": "iana" - }, - "application/smil+xml": { - "source": "iana", - "extensions": ["smi","smil"] - }, - "application/smpte336m": { - "source": "iana" - }, - "application/soap+fastinfoset": { - "source": "iana" - }, - "application/soap+xml": { - "source": "iana", - "compressible": true - }, - "application/sparql-query": { - "source": "iana", - "extensions": ["rq"] - }, - "application/sparql-results+xml": { - "source": "iana", - "extensions": ["srx"] - }, - "application/spirits-event+xml": { - "source": "iana" - }, - "application/sql": { - "source": "iana" - }, - "application/srgs": { - "source": "iana", - "extensions": ["gram"] - }, - "application/srgs+xml": { - "source": "iana", - "extensions": ["grxml"] - }, - "application/sru+xml": { - "source": "iana", - "extensions": ["sru"] - }, - "application/ssdl+xml": { - "source": "apache", - "extensions": ["ssdl"] - }, - "application/ssml+xml": { - "source": "iana", - "extensions": ["ssml"] - }, - "application/tamp-apex-update": { - "source": "iana" - }, - "application/tamp-apex-update-confirm": { - "source": "iana" - }, - "application/tamp-community-update": { - "source": "iana" - }, - "application/tamp-community-update-confirm": { - "source": "iana" - }, - "application/tamp-error": { - "source": "iana" - }, - "application/tamp-sequence-adjust": { - "source": "iana" - }, - "application/tamp-sequence-adjust-confirm": { - "source": "iana" - }, - "application/tamp-status-query": { - "source": "iana" - }, - "application/tamp-status-response": { - "source": "iana" - }, - "application/tamp-update": { - "source": "iana" - }, - "application/tamp-update-confirm": { - "source": "iana" - }, - "application/tar": { - "compressible": true - }, - "application/tei+xml": { - "source": "iana", - "extensions": ["tei","teicorpus"] - }, - "application/thraud+xml": { - "source": "iana", - "extensions": ["tfi"] - }, - "application/timestamp-query": { - "source": "iana" - }, - "application/timestamp-reply": { - "source": "iana" - }, - "application/timestamped-data": { - "source": "iana", - "extensions": ["tsd"] - }, - "application/ttml+xml": { - "source": "iana" - }, - "application/tve-trigger": { - "source": "iana" - }, - "application/ulpfec": { - "source": "iana" - }, - "application/urc-grpsheet+xml": { - "source": "iana" - }, - "application/urc-ressheet+xml": { - "source": "iana" - }, - "application/urc-targetdesc+xml": { - "source": "iana" - }, - "application/urc-uisocketdesc+xml": { - "source": "iana" - }, - "application/vcard+json": { - "source": "iana", - "compressible": true - }, - "application/vcard+xml": { - "source": "iana" - }, - "application/vemmi": { - "source": "iana" - }, - "application/vividence.scriptfile": { - "source": "apache" - }, - "application/vnd.3gpp-prose+xml": { - "source": "iana" - }, - "application/vnd.3gpp-prose-pc3ch+xml": { - "source": "iana" - }, - "application/vnd.3gpp.access-transfer-events+xml": { - "source": "iana" - }, - "application/vnd.3gpp.bsf+xml": { - "source": "iana" - }, - "application/vnd.3gpp.mid-call+xml": { - "source": "iana" - }, - "application/vnd.3gpp.pic-bw-large": { - "source": "iana", - "extensions": ["plb"] - }, - "application/vnd.3gpp.pic-bw-small": { - "source": "iana", - "extensions": ["psb"] - }, - "application/vnd.3gpp.pic-bw-var": { - "source": "iana", - "extensions": ["pvb"] - }, - "application/vnd.3gpp.sms": { - "source": "iana" - }, - "application/vnd.3gpp.sms+xml": { - "source": "iana" - }, - "application/vnd.3gpp.srvcc-ext+xml": { - "source": "iana" - }, - "application/vnd.3gpp.srvcc-info+xml": { - "source": "iana" - }, - "application/vnd.3gpp.state-and-event-info+xml": { - "source": "iana" - }, - "application/vnd.3gpp.ussd+xml": { - "source": "iana" - }, - "application/vnd.3gpp2.bcmcsinfo+xml": { - "source": "iana" - }, - "application/vnd.3gpp2.sms": { - "source": "iana" - }, - "application/vnd.3gpp2.tcap": { - "source": "iana", - "extensions": ["tcap"] - }, - "application/vnd.3lightssoftware.imagescal": { - "source": "iana" - }, - "application/vnd.3m.post-it-notes": { - "source": "iana", - "extensions": ["pwn"] - }, - "application/vnd.accpac.simply.aso": { - "source": "iana", - "extensions": ["aso"] - }, - "application/vnd.accpac.simply.imp": { - "source": "iana", - "extensions": ["imp"] - }, - "application/vnd.acucobol": { - "source": "iana", - "extensions": ["acu"] - }, - "application/vnd.acucorp": { - "source": "iana", - "extensions": ["atc","acutc"] - }, - "application/vnd.adobe.air-application-installer-package+zip": { - "source": "apache", - "extensions": ["air"] - }, - "application/vnd.adobe.flash.movie": { - "source": "iana" - }, - "application/vnd.adobe.formscentral.fcdt": { - "source": "iana", - "extensions": ["fcdt"] - }, - "application/vnd.adobe.fxp": { - "source": "iana", - "extensions": ["fxp","fxpl"] - }, - "application/vnd.adobe.partial-upload": { - "source": "iana" - }, - "application/vnd.adobe.xdp+xml": { - "source": "iana", - "extensions": ["xdp"] - }, - "application/vnd.adobe.xfdf": { - "source": "iana", - "extensions": ["xfdf"] - }, - "application/vnd.aether.imp": { - "source": "iana" - }, - "application/vnd.ah-barcode": { - "source": "iana" - }, - "application/vnd.ahead.space": { - "source": "iana", - "extensions": ["ahead"] - }, - "application/vnd.airzip.filesecure.azf": { - "source": "iana", - "extensions": ["azf"] - }, - "application/vnd.airzip.filesecure.azs": { - "source": "iana", - "extensions": ["azs"] - }, - "application/vnd.amazon.ebook": { - "source": "apache", - "extensions": ["azw"] - }, - "application/vnd.amazon.mobi8-ebook": { - "source": "iana" - }, - "application/vnd.americandynamics.acc": { - "source": "iana", - "extensions": ["acc"] - }, - "application/vnd.amiga.ami": { - "source": "iana", - "extensions": ["ami"] - }, - "application/vnd.amundsen.maze+xml": { - "source": "iana" - }, - "application/vnd.android.package-archive": { - "source": "apache", - "compressible": false, - "extensions": ["apk"] - }, - "application/vnd.anki": { - "source": "iana" - }, - "application/vnd.anser-web-certificate-issue-initiation": { - "source": "iana", - "extensions": ["cii"] - }, - "application/vnd.anser-web-funds-transfer-initiation": { - "source": "apache", - "extensions": ["fti"] - }, - "application/vnd.antix.game-component": { - "source": "iana", - "extensions": ["atx"] - }, - "application/vnd.apache.thrift.binary": { - "source": "iana" - }, - "application/vnd.apache.thrift.compact": { - "source": "iana" - }, - "application/vnd.apache.thrift.json": { - "source": "iana" - }, - "application/vnd.api+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.apple.installer+xml": { - "source": "iana", - "extensions": ["mpkg"] - }, - "application/vnd.apple.mpegurl": { - "source": "iana", - "extensions": ["m3u8"] - }, - "application/vnd.apple.pkpass": { - "compressible": false, - "extensions": ["pkpass"] - }, - "application/vnd.arastra.swi": { - "source": "iana" - }, - "application/vnd.aristanetworks.swi": { - "source": "iana", - "extensions": ["swi"] - }, - "application/vnd.artsquare": { - "source": "iana" - }, - "application/vnd.astraea-software.iota": { - "source": "iana", - "extensions": ["iota"] - }, - "application/vnd.audiograph": { - "source": "iana", - "extensions": ["aep"] - }, - "application/vnd.autopackage": { - "source": "iana" - }, - "application/vnd.avistar+xml": { - "source": "iana" - }, - "application/vnd.balsamiq.bmml+xml": { - "source": "iana" - }, - "application/vnd.balsamiq.bmpr": { - "source": "iana" - }, - "application/vnd.bekitzur-stech+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.biopax.rdf+xml": { - "source": "iana" - }, - "application/vnd.blueice.multipass": { - "source": "iana", - "extensions": ["mpm"] - }, - "application/vnd.bluetooth.ep.oob": { - "source": "iana" - }, - "application/vnd.bluetooth.le.oob": { - "source": "iana" - }, - "application/vnd.bmi": { - "source": "iana", - "extensions": ["bmi"] - }, - "application/vnd.businessobjects": { - "source": "iana", - "extensions": ["rep"] - }, - "application/vnd.cab-jscript": { - "source": "iana" - }, - "application/vnd.canon-cpdl": { - "source": "iana" - }, - "application/vnd.canon-lips": { - "source": "iana" - }, - "application/vnd.cendio.thinlinc.clientconf": { - "source": "iana" - }, - "application/vnd.century-systems.tcp_stream": { - "source": "iana" - }, - "application/vnd.chemdraw+xml": { - "source": "iana", - "extensions": ["cdxml"] - }, - "application/vnd.chess-pgn": { - "source": "iana" - }, - "application/vnd.chipnuts.karaoke-mmd": { - "source": "iana", - "extensions": ["mmd"] - }, - "application/vnd.cinderella": { - "source": "iana", - "extensions": ["cdy"] - }, - "application/vnd.cirpack.isdn-ext": { - "source": "iana" - }, - "application/vnd.citationstyles.style+xml": { - "source": "iana" - }, - "application/vnd.claymore": { - "source": "iana", - "extensions": ["cla"] - }, - "application/vnd.cloanto.rp9": { - "source": "iana", - "extensions": ["rp9"] - }, - "application/vnd.clonk.c4group": { - "source": "iana", - "extensions": ["c4g","c4d","c4f","c4p","c4u"] - }, - "application/vnd.cluetrust.cartomobile-config": { - "source": "iana", - "extensions": ["c11amc"] - }, - "application/vnd.cluetrust.cartomobile-config-pkg": { - "source": "iana", - "extensions": ["c11amz"] - }, - "application/vnd.coffeescript": { - "source": "iana" - }, - "application/vnd.collection+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.collection.doc+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.collection.next+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.comicbook+zip": { - "source": "iana" - }, - "application/vnd.commerce-battelle": { - "source": "iana" - }, - "application/vnd.commonspace": { - "source": "iana", - "extensions": ["csp"] - }, - "application/vnd.contact.cmsg": { - "source": "iana", - "extensions": ["cdbcmsg"] - }, - "application/vnd.coreos.ignition+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.cosmocaller": { - "source": "iana", - "extensions": ["cmc"] - }, - "application/vnd.crick.clicker": { - "source": "iana", - "extensions": ["clkx"] - }, - "application/vnd.crick.clicker.keyboard": { - "source": "iana", - "extensions": ["clkk"] - }, - "application/vnd.crick.clicker.palette": { - "source": "iana", - "extensions": ["clkp"] - }, - "application/vnd.crick.clicker.template": { - "source": "iana", - "extensions": ["clkt"] - }, - "application/vnd.crick.clicker.wordbank": { - "source": "iana", - "extensions": ["clkw"] - }, - "application/vnd.criticaltools.wbs+xml": { - "source": "iana", - "extensions": ["wbs"] - }, - "application/vnd.ctc-posml": { - "source": "iana", - "extensions": ["pml"] - }, - "application/vnd.ctct.ws+xml": { - "source": "iana" - }, - "application/vnd.cups-pdf": { - "source": "iana" - }, - "application/vnd.cups-postscript": { - "source": "iana" - }, - "application/vnd.cups-ppd": { - "source": "iana", - "extensions": ["ppd"] - }, - "application/vnd.cups-raster": { - "source": "iana" - }, - "application/vnd.cups-raw": { - "source": "iana" - }, - "application/vnd.curl": { - "source": "iana" - }, - "application/vnd.curl.car": { - "source": "apache", - "extensions": ["car"] - }, - "application/vnd.curl.pcurl": { - "source": "apache", - "extensions": ["pcurl"] - }, - "application/vnd.cyan.dean.root+xml": { - "source": "iana" - }, - "application/vnd.cybank": { - "source": "iana" - }, - "application/vnd.d2l.coursepackage1p0+zip": { - "source": "iana" - }, - "application/vnd.dart": { - "source": "iana", - "compressible": true, - "extensions": ["dart"] - }, - "application/vnd.data-vision.rdz": { - "source": "iana", - "extensions": ["rdz"] - }, - "application/vnd.debian.binary-package": { - "source": "iana" - }, - "application/vnd.dece.data": { - "source": "iana", - "extensions": ["uvf","uvvf","uvd","uvvd"] - }, - "application/vnd.dece.ttml+xml": { - "source": "iana", - "extensions": ["uvt","uvvt"] - }, - "application/vnd.dece.unspecified": { - "source": "iana", - "extensions": ["uvx","uvvx"] - }, - "application/vnd.dece.zip": { - "source": "iana", - "extensions": ["uvz","uvvz"] - }, - "application/vnd.denovo.fcselayout-link": { - "source": "iana", - "extensions": ["fe_launch"] - }, - "application/vnd.desmume-movie": { - "source": "iana" - }, - "application/vnd.desmume.movie": { - "source": "apache" - }, - "application/vnd.dir-bi.plate-dl-nosuffix": { - "source": "iana" - }, - "application/vnd.dm.delegation+xml": { - "source": "iana" - }, - "application/vnd.dna": { - "source": "iana", - "extensions": ["dna"] - }, - "application/vnd.document+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.dolby.mlp": { - "source": "apache", - "extensions": ["mlp"] - }, - "application/vnd.dolby.mobile.1": { - "source": "iana" - }, - "application/vnd.dolby.mobile.2": { - "source": "iana" - }, - "application/vnd.doremir.scorecloud-binary-document": { - "source": "iana" - }, - "application/vnd.dpgraph": { - "source": "iana", - "extensions": ["dpg"] - }, - "application/vnd.dreamfactory": { - "source": "iana", - "extensions": ["dfac"] - }, - "application/vnd.drive+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ds-keypoint": { - "source": "apache", - "extensions": ["kpxx"] - }, - "application/vnd.dtg.local": { - "source": "iana" - }, - "application/vnd.dtg.local.flash": { - "source": "iana" - }, - "application/vnd.dtg.local.html": { - "source": "iana" - }, - "application/vnd.dvb.ait": { - "source": "iana", - "extensions": ["ait"] - }, - "application/vnd.dvb.dvbj": { - "source": "iana" - }, - "application/vnd.dvb.esgcontainer": { - "source": "iana" - }, - "application/vnd.dvb.ipdcdftnotifaccess": { - "source": "iana" - }, - "application/vnd.dvb.ipdcesgaccess": { - "source": "iana" - }, - "application/vnd.dvb.ipdcesgaccess2": { - "source": "iana" - }, - "application/vnd.dvb.ipdcesgpdd": { - "source": "iana" - }, - "application/vnd.dvb.ipdcroaming": { - "source": "iana" - }, - "application/vnd.dvb.iptv.alfec-base": { - "source": "iana" - }, - "application/vnd.dvb.iptv.alfec-enhancement": { - "source": "iana" - }, - "application/vnd.dvb.notif-aggregate-root+xml": { - "source": "iana" - }, - "application/vnd.dvb.notif-container+xml": { - "source": "iana" - }, - "application/vnd.dvb.notif-generic+xml": { - "source": "iana" - }, - "application/vnd.dvb.notif-ia-msglist+xml": { - "source": "iana" - }, - "application/vnd.dvb.notif-ia-registration-request+xml": { - "source": "iana" - }, - "application/vnd.dvb.notif-ia-registration-response+xml": { - "source": "iana" - }, - "application/vnd.dvb.notif-init+xml": { - "source": "iana" - }, - "application/vnd.dvb.pfr": { - "source": "iana" - }, - "application/vnd.dvb.service": { - "source": "iana", - "extensions": ["svc"] - }, - "application/vnd.dxr": { - "source": "iana" - }, - "application/vnd.dynageo": { - "source": "iana", - "extensions": ["geo"] - }, - "application/vnd.dzr": { - "source": "iana" - }, - "application/vnd.easykaraoke.cdgdownload": { - "source": "iana" - }, - "application/vnd.ecdis-update": { - "source": "iana" - }, - "application/vnd.ecowin.chart": { - "source": "iana", - "extensions": ["mag"] - }, - "application/vnd.ecowin.filerequest": { - "source": "iana" - }, - "application/vnd.ecowin.fileupdate": { - "source": "iana" - }, - "application/vnd.ecowin.series": { - "source": "iana" - }, - "application/vnd.ecowin.seriesrequest": { - "source": "iana" - }, - "application/vnd.ecowin.seriesupdate": { - "source": "iana" - }, - "application/vnd.emclient.accessrequest+xml": { - "source": "iana" - }, - "application/vnd.enliven": { - "source": "iana", - "extensions": ["nml"] - }, - "application/vnd.enphase.envoy": { - "source": "iana" - }, - "application/vnd.eprints.data+xml": { - "source": "iana" - }, - "application/vnd.epson.esf": { - "source": "iana", - "extensions": ["esf"] - }, - "application/vnd.epson.msf": { - "source": "iana", - "extensions": ["msf"] - }, - "application/vnd.epson.quickanime": { - "source": "iana", - "extensions": ["qam"] - }, - "application/vnd.epson.salt": { - "source": "iana", - "extensions": ["slt"] - }, - "application/vnd.epson.ssf": { - "source": "iana", - "extensions": ["ssf"] - }, - "application/vnd.ericsson.quickcall": { - "source": "iana" - }, - "application/vnd.espass-espass+zip": { - "source": "iana" - }, - "application/vnd.eszigno3+xml": { - "source": "iana", - "extensions": ["es3","et3"] - }, - "application/vnd.etsi.aoc+xml": { - "source": "iana" - }, - "application/vnd.etsi.asic-e+zip": { - "source": "iana" - }, - "application/vnd.etsi.asic-s+zip": { - "source": "iana" - }, - "application/vnd.etsi.cug+xml": { - "source": "iana" - }, - "application/vnd.etsi.iptvcommand+xml": { - "source": "iana" - }, - "application/vnd.etsi.iptvdiscovery+xml": { - "source": "iana" - }, - "application/vnd.etsi.iptvprofile+xml": { - "source": "iana" - }, - "application/vnd.etsi.iptvsad-bc+xml": { - "source": "iana" - }, - "application/vnd.etsi.iptvsad-cod+xml": { - "source": "iana" - }, - "application/vnd.etsi.iptvsad-npvr+xml": { - "source": "iana" - }, - "application/vnd.etsi.iptvservice+xml": { - "source": "iana" - }, - "application/vnd.etsi.iptvsync+xml": { - "source": "iana" - }, - "application/vnd.etsi.iptvueprofile+xml": { - "source": "iana" - }, - "application/vnd.etsi.mcid+xml": { - "source": "iana" - }, - "application/vnd.etsi.mheg5": { - "source": "iana" - }, - "application/vnd.etsi.overload-control-policy-dataset+xml": { - "source": "iana" - }, - "application/vnd.etsi.pstn+xml": { - "source": "iana" - }, - "application/vnd.etsi.sci+xml": { - "source": "iana" - }, - "application/vnd.etsi.simservs+xml": { - "source": "iana" - }, - "application/vnd.etsi.timestamp-token": { - "source": "iana" - }, - "application/vnd.etsi.tsl+xml": { - "source": "iana" - }, - "application/vnd.etsi.tsl.der": { - "source": "iana" - }, - "application/vnd.eudora.data": { - "source": "iana" - }, - "application/vnd.ezpix-album": { - "source": "iana", - "extensions": ["ez2"] - }, - "application/vnd.ezpix-package": { - "source": "iana", - "extensions": ["ez3"] - }, - "application/vnd.f-secure.mobile": { - "source": "iana" - }, - "application/vnd.fastcopy-disk-image": { - "source": "iana" - }, - "application/vnd.fdf": { - "source": "iana", - "extensions": ["fdf"] - }, - "application/vnd.fdsn.mseed": { - "source": "iana", - "extensions": ["mseed"] - }, - "application/vnd.fdsn.seed": { - "source": "iana", - "extensions": ["seed","dataless"] - }, - "application/vnd.ffsns": { - "source": "iana" - }, - "application/vnd.filmit.zfc": { - "source": "iana" - }, - "application/vnd.fints": { - "source": "iana" - }, - "application/vnd.firemonkeys.cloudcell": { - "source": "iana" - }, - "application/vnd.flographit": { - "source": "iana", - "extensions": ["gph"] - }, - "application/vnd.fluxtime.clip": { - "source": "iana", - "extensions": ["ftc"] - }, - "application/vnd.font-fontforge-sfd": { - "source": "iana" - }, - "application/vnd.framemaker": { - "source": "iana", - "extensions": ["fm","frame","maker","book"] - }, - "application/vnd.frogans.fnc": { - "source": "iana", - "extensions": ["fnc"] - }, - "application/vnd.frogans.ltf": { - "source": "iana", - "extensions": ["ltf"] - }, - "application/vnd.fsc.weblaunch": { - "source": "iana", - "extensions": ["fsc"] - }, - "application/vnd.fujitsu.oasys": { - "source": "iana", - "extensions": ["oas"] - }, - "application/vnd.fujitsu.oasys2": { - "source": "iana", - "extensions": ["oa2"] - }, - "application/vnd.fujitsu.oasys3": { - "source": "iana", - "extensions": ["oa3"] - }, - "application/vnd.fujitsu.oasysgp": { - "source": "iana", - "extensions": ["fg5"] - }, - "application/vnd.fujitsu.oasysprs": { - "source": "iana", - "extensions": ["bh2"] - }, - "application/vnd.fujixerox.art-ex": { - "source": "iana" - }, - "application/vnd.fujixerox.art4": { - "source": "iana" - }, - "application/vnd.fujixerox.ddd": { - "source": "iana", - "extensions": ["ddd"] - }, - "application/vnd.fujixerox.docuworks": { - "source": "iana", - "extensions": ["xdw"] - }, - "application/vnd.fujixerox.docuworks.binder": { - "source": "iana", - "extensions": ["xbd"] - }, - "application/vnd.fujixerox.docuworks.container": { - "source": "iana" - }, - "application/vnd.fujixerox.hbpl": { - "source": "iana" - }, - "application/vnd.fut-misnet": { - "source": "iana" - }, - "application/vnd.fuzzysheet": { - "source": "iana", - "extensions": ["fzs"] - }, - "application/vnd.genomatix.tuxedo": { - "source": "iana", - "extensions": ["txd"] - }, - "application/vnd.geo+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.geocube+xml": { - "source": "iana" - }, - "application/vnd.geogebra.file": { - "source": "iana", - "extensions": ["ggb"] - }, - "application/vnd.geogebra.tool": { - "source": "iana", - "extensions": ["ggt"] - }, - "application/vnd.geometry-explorer": { - "source": "iana", - "extensions": ["gex","gre"] - }, - "application/vnd.geonext": { - "source": "iana", - "extensions": ["gxt"] - }, - "application/vnd.geoplan": { - "source": "iana", - "extensions": ["g2w"] - }, - "application/vnd.geospace": { - "source": "iana", - "extensions": ["g3w"] - }, - "application/vnd.gerber": { - "source": "iana" - }, - "application/vnd.globalplatform.card-content-mgt": { - "source": "iana" - }, - "application/vnd.globalplatform.card-content-mgt-response": { - "source": "iana" - }, - "application/vnd.gmx": { - "source": "iana", - "extensions": ["gmx"] - }, - "application/vnd.google-apps.document": { - "compressible": false, - "extensions": ["gdoc"] - }, - "application/vnd.google-apps.presentation": { - "compressible": false, - "extensions": ["gslides"] - }, - "application/vnd.google-apps.spreadsheet": { - "compressible": false, - "extensions": ["gsheet"] - }, - "application/vnd.google-earth.kml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["kml"] - }, - "application/vnd.google-earth.kmz": { - "source": "iana", - "compressible": false, - "extensions": ["kmz"] - }, - "application/vnd.gov.sk.e-form+xml": { - "source": "iana" - }, - "application/vnd.gov.sk.e-form+zip": { - "source": "iana" - }, - "application/vnd.gov.sk.xmldatacontainer+xml": { - "source": "iana" - }, - "application/vnd.grafeq": { - "source": "iana", - "extensions": ["gqf","gqs"] - }, - "application/vnd.gridmp": { - "source": "iana" - }, - "application/vnd.groove-account": { - "source": "iana", - "extensions": ["gac"] - }, - "application/vnd.groove-help": { - "source": "iana", - "extensions": ["ghf"] - }, - "application/vnd.groove-identity-message": { - "source": "iana", - "extensions": ["gim"] - }, - "application/vnd.groove-injector": { - "source": "iana", - "extensions": ["grv"] - }, - "application/vnd.groove-tool-message": { - "source": "iana", - "extensions": ["gtm"] - }, - "application/vnd.groove-tool-template": { - "source": "iana", - "extensions": ["tpl"] - }, - "application/vnd.groove-vcard": { - "source": "iana", - "extensions": ["vcg"] - }, - "application/vnd.hal+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hal+xml": { - "source": "iana", - "extensions": ["hal"] - }, - "application/vnd.handheld-entertainment+xml": { - "source": "iana", - "extensions": ["zmm"] - }, - "application/vnd.hbci": { - "source": "iana", - "extensions": ["hbci"] - }, - "application/vnd.hcl-bireports": { - "source": "iana" - }, - "application/vnd.hdt": { - "source": "iana" - }, - "application/vnd.heroku+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hhe.lesson-player": { - "source": "iana", - "extensions": ["les"] - }, - "application/vnd.hp-hpgl": { - "source": "iana", - "extensions": ["hpgl"] - }, - "application/vnd.hp-hpid": { - "source": "iana", - "extensions": ["hpid"] - }, - "application/vnd.hp-hps": { - "source": "iana", - "extensions": ["hps"] - }, - "application/vnd.hp-jlyt": { - "source": "iana", - "extensions": ["jlt"] - }, - "application/vnd.hp-pcl": { - "source": "iana", - "extensions": ["pcl"] - }, - "application/vnd.hp-pclxl": { - "source": "iana", - "extensions": ["pclxl"] - }, - "application/vnd.httphone": { - "source": "iana" - }, - "application/vnd.hydrostatix.sof-data": { - "source": "iana", - "extensions": ["sfd-hdstx"] - }, - "application/vnd.hyperdrive+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.hzn-3d-crossword": { - "source": "iana" - }, - "application/vnd.ibm.afplinedata": { - "source": "iana" - }, - "application/vnd.ibm.electronic-media": { - "source": "iana" - }, - "application/vnd.ibm.minipay": { - "source": "iana", - "extensions": ["mpy"] - }, - "application/vnd.ibm.modcap": { - "source": "iana", - "extensions": ["afp","listafp","list3820"] - }, - "application/vnd.ibm.rights-management": { - "source": "iana", - "extensions": ["irm"] - }, - "application/vnd.ibm.secure-container": { - "source": "iana", - "extensions": ["sc"] - }, - "application/vnd.iccprofile": { - "source": "iana", - "extensions": ["icc","icm"] - }, - "application/vnd.ieee.1905": { - "source": "iana" - }, - "application/vnd.igloader": { - "source": "iana", - "extensions": ["igl"] - }, - "application/vnd.immervision-ivp": { - "source": "iana", - "extensions": ["ivp"] - }, - "application/vnd.immervision-ivu": { - "source": "iana", - "extensions": ["ivu"] - }, - "application/vnd.ims.imsccv1p1": { - "source": "iana" - }, - "application/vnd.ims.imsccv1p2": { - "source": "iana" - }, - "application/vnd.ims.imsccv1p3": { - "source": "iana" - }, - "application/vnd.ims.lis.v2.result+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolconsumerprofile+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolproxy+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolproxy.id+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolsettings+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.ims.lti.v2.toolsettings.simple+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.informedcontrol.rms+xml": { - "source": "iana" - }, - "application/vnd.informix-visionary": { - "source": "iana" - }, - "application/vnd.infotech.project": { - "source": "iana" - }, - "application/vnd.infotech.project+xml": { - "source": "iana" - }, - "application/vnd.innopath.wamp.notification": { - "source": "iana" - }, - "application/vnd.insors.igm": { - "source": "iana", - "extensions": ["igm"] - }, - "application/vnd.intercon.formnet": { - "source": "iana", - "extensions": ["xpw","xpx"] - }, - "application/vnd.intergeo": { - "source": "iana", - "extensions": ["i2g"] - }, - "application/vnd.intertrust.digibox": { - "source": "iana" - }, - "application/vnd.intertrust.nncp": { - "source": "iana" - }, - "application/vnd.intu.qbo": { - "source": "iana", - "extensions": ["qbo"] - }, - "application/vnd.intu.qfx": { - "source": "iana", - "extensions": ["qfx"] - }, - "application/vnd.iptc.g2.catalogitem+xml": { - "source": "iana" - }, - "application/vnd.iptc.g2.conceptitem+xml": { - "source": "iana" - }, - "application/vnd.iptc.g2.knowledgeitem+xml": { - "source": "iana" - }, - "application/vnd.iptc.g2.newsitem+xml": { - "source": "iana" - }, - "application/vnd.iptc.g2.newsmessage+xml": { - "source": "iana" - }, - "application/vnd.iptc.g2.packageitem+xml": { - "source": "iana" - }, - "application/vnd.iptc.g2.planningitem+xml": { - "source": "iana" - }, - "application/vnd.ipunplugged.rcprofile": { - "source": "iana", - "extensions": ["rcprofile"] - }, - "application/vnd.irepository.package+xml": { - "source": "iana", - "extensions": ["irp"] - }, - "application/vnd.is-xpr": { - "source": "iana", - "extensions": ["xpr"] - }, - "application/vnd.isac.fcs": { - "source": "iana", - "extensions": ["fcs"] - }, - "application/vnd.jam": { - "source": "iana", - "extensions": ["jam"] - }, - "application/vnd.japannet-directory-service": { - "source": "iana" - }, - "application/vnd.japannet-jpnstore-wakeup": { - "source": "iana" - }, - "application/vnd.japannet-payment-wakeup": { - "source": "iana" - }, - "application/vnd.japannet-registration": { - "source": "iana" - }, - "application/vnd.japannet-registration-wakeup": { - "source": "iana" - }, - "application/vnd.japannet-setstore-wakeup": { - "source": "iana" - }, - "application/vnd.japannet-verification": { - "source": "iana" - }, - "application/vnd.japannet-verification-wakeup": { - "source": "iana" - }, - "application/vnd.jcp.javame.midlet-rms": { - "source": "iana", - "extensions": ["rms"] - }, - "application/vnd.jisp": { - "source": "iana", - "extensions": ["jisp"] - }, - "application/vnd.joost.joda-archive": { - "source": "iana", - "extensions": ["joda"] - }, - "application/vnd.jsk.isdn-ngn": { - "source": "iana" - }, - "application/vnd.kahootz": { - "source": "iana", - "extensions": ["ktz","ktr"] - }, - "application/vnd.kde.karbon": { - "source": "iana", - "extensions": ["karbon"] - }, - "application/vnd.kde.kchart": { - "source": "iana", - "extensions": ["chrt"] - }, - "application/vnd.kde.kformula": { - "source": "iana", - "extensions": ["kfo"] - }, - "application/vnd.kde.kivio": { - "source": "iana", - "extensions": ["flw"] - }, - "application/vnd.kde.kontour": { - "source": "iana", - "extensions": ["kon"] - }, - "application/vnd.kde.kpresenter": { - "source": "iana", - "extensions": ["kpr","kpt"] - }, - "application/vnd.kde.kspread": { - "source": "iana", - "extensions": ["ksp"] - }, - "application/vnd.kde.kword": { - "source": "iana", - "extensions": ["kwd","kwt"] - }, - "application/vnd.kenameaapp": { - "source": "iana", - "extensions": ["htke"] - }, - "application/vnd.kidspiration": { - "source": "iana", - "extensions": ["kia"] - }, - "application/vnd.kinar": { - "source": "iana", - "extensions": ["kne","knp"] - }, - "application/vnd.koan": { - "source": "iana", - "extensions": ["skp","skd","skt","skm"] - }, - "application/vnd.kodak-descriptor": { - "source": "iana", - "extensions": ["sse"] - }, - "application/vnd.las.las+xml": { - "source": "iana", - "extensions": ["lasxml"] - }, - "application/vnd.liberty-request+xml": { - "source": "iana" - }, - "application/vnd.llamagraphics.life-balance.desktop": { - "source": "iana", - "extensions": ["lbd"] - }, - "application/vnd.llamagraphics.life-balance.exchange+xml": { - "source": "iana", - "extensions": ["lbe"] - }, - "application/vnd.lotus-1-2-3": { - "source": "iana", - "extensions": ["123"] - }, - "application/vnd.lotus-approach": { - "source": "iana", - "extensions": ["apr"] - }, - "application/vnd.lotus-freelance": { - "source": "iana", - "extensions": ["pre"] - }, - "application/vnd.lotus-notes": { - "source": "iana", - "extensions": ["nsf"] - }, - "application/vnd.lotus-organizer": { - "source": "iana", - "extensions": ["org"] - }, - "application/vnd.lotus-screencam": { - "source": "iana", - "extensions": ["scm"] - }, - "application/vnd.lotus-wordpro": { - "source": "iana", - "extensions": ["lwp"] - }, - "application/vnd.macports.portpkg": { - "source": "iana", - "extensions": ["portpkg"] - }, - "application/vnd.mapbox-vector-tile": { - "source": "iana" - }, - "application/vnd.marlin.drm.actiontoken+xml": { - "source": "iana" - }, - "application/vnd.marlin.drm.conftoken+xml": { - "source": "iana" - }, - "application/vnd.marlin.drm.license+xml": { - "source": "iana" - }, - "application/vnd.marlin.drm.mdcf": { - "source": "iana" - }, - "application/vnd.mason+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.maxmind.maxmind-db": { - "source": "iana" - }, - "application/vnd.mcd": { - "source": "iana", - "extensions": ["mcd"] - }, - "application/vnd.medcalcdata": { - "source": "iana", - "extensions": ["mc1"] - }, - "application/vnd.mediastation.cdkey": { - "source": "iana", - "extensions": ["cdkey"] - }, - "application/vnd.meridian-slingshot": { - "source": "iana" - }, - "application/vnd.mfer": { - "source": "iana", - "extensions": ["mwf"] - }, - "application/vnd.mfmp": { - "source": "iana", - "extensions": ["mfm"] - }, - "application/vnd.micro+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.micrografx.flo": { - "source": "iana", - "extensions": ["flo"] - }, - "application/vnd.micrografx.igx": { - "source": "iana", - "extensions": ["igx"] - }, - "application/vnd.microsoft.portable-executable": { - "source": "iana" - }, - "application/vnd.miele+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.mif": { - "source": "iana", - "extensions": ["mif"] - }, - "application/vnd.minisoft-hp3000-save": { - "source": "iana" - }, - "application/vnd.mitsubishi.misty-guard.trustweb": { - "source": "iana" - }, - "application/vnd.mobius.daf": { - "source": "iana", - "extensions": ["daf"] - }, - "application/vnd.mobius.dis": { - "source": "iana", - "extensions": ["dis"] - }, - "application/vnd.mobius.mbk": { - "source": "iana", - "extensions": ["mbk"] - }, - "application/vnd.mobius.mqy": { - "source": "iana", - "extensions": ["mqy"] - }, - "application/vnd.mobius.msl": { - "source": "iana", - "extensions": ["msl"] - }, - "application/vnd.mobius.plc": { - "source": "iana", - "extensions": ["plc"] - }, - "application/vnd.mobius.txf": { - "source": "iana", - "extensions": ["txf"] - }, - "application/vnd.mophun.application": { - "source": "iana", - "extensions": ["mpn"] - }, - "application/vnd.mophun.certificate": { - "source": "iana", - "extensions": ["mpc"] - }, - "application/vnd.motorola.flexsuite": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.adsi": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.fis": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.gotap": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.kmr": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.ttc": { - "source": "iana" - }, - "application/vnd.motorola.flexsuite.wem": { - "source": "iana" - }, - "application/vnd.motorola.iprm": { - "source": "iana" - }, - "application/vnd.mozilla.xul+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xul"] - }, - "application/vnd.ms-3mfdocument": { - "source": "iana" - }, - "application/vnd.ms-artgalry": { - "source": "iana", - "extensions": ["cil"] - }, - "application/vnd.ms-asf": { - "source": "iana" - }, - "application/vnd.ms-cab-compressed": { - "source": "iana", - "extensions": ["cab"] - }, - "application/vnd.ms-color.iccprofile": { - "source": "apache" - }, - "application/vnd.ms-excel": { - "source": "iana", - "compressible": false, - "extensions": ["xls","xlm","xla","xlc","xlt","xlw"] - }, - "application/vnd.ms-excel.addin.macroenabled.12": { - "source": "iana", - "extensions": ["xlam"] - }, - "application/vnd.ms-excel.sheet.binary.macroenabled.12": { - "source": "iana", - "extensions": ["xlsb"] - }, - "application/vnd.ms-excel.sheet.macroenabled.12": { - "source": "iana", - "extensions": ["xlsm"] - }, - "application/vnd.ms-excel.template.macroenabled.12": { - "source": "iana", - "extensions": ["xltm"] - }, - "application/vnd.ms-fontobject": { - "source": "iana", - "compressible": true, - "extensions": ["eot"] - }, - "application/vnd.ms-htmlhelp": { - "source": "iana", - "extensions": ["chm"] - }, - "application/vnd.ms-ims": { - "source": "iana", - "extensions": ["ims"] - }, - "application/vnd.ms-lrm": { - "source": "iana", - "extensions": ["lrm"] - }, - "application/vnd.ms-office.activex+xml": { - "source": "iana" - }, - "application/vnd.ms-officetheme": { - "source": "iana", - "extensions": ["thmx"] - }, - "application/vnd.ms-opentype": { - "source": "apache", - "compressible": true - }, - "application/vnd.ms-package.obfuscated-opentype": { - "source": "apache" - }, - "application/vnd.ms-pki.seccat": { - "source": "apache", - "extensions": ["cat"] - }, - "application/vnd.ms-pki.stl": { - "source": "apache", - "extensions": ["stl"] - }, - "application/vnd.ms-playready.initiator+xml": { - "source": "iana" - }, - "application/vnd.ms-powerpoint": { - "source": "iana", - "compressible": false, - "extensions": ["ppt","pps","pot"] - }, - "application/vnd.ms-powerpoint.addin.macroenabled.12": { - "source": "iana", - "extensions": ["ppam"] - }, - "application/vnd.ms-powerpoint.presentation.macroenabled.12": { - "source": "iana", - "extensions": ["pptm"] - }, - "application/vnd.ms-powerpoint.slide.macroenabled.12": { - "source": "iana", - "extensions": ["sldm"] - }, - "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { - "source": "iana", - "extensions": ["ppsm"] - }, - "application/vnd.ms-powerpoint.template.macroenabled.12": { - "source": "iana", - "extensions": ["potm"] - }, - "application/vnd.ms-printdevicecapabilities+xml": { - "source": "iana" - }, - "application/vnd.ms-printing.printticket+xml": { - "source": "apache" - }, - "application/vnd.ms-printschematicket+xml": { - "source": "iana" - }, - "application/vnd.ms-project": { - "source": "iana", - "extensions": ["mpp","mpt"] - }, - "application/vnd.ms-tnef": { - "source": "iana" - }, - "application/vnd.ms-windows.devicepairing": { - "source": "iana" - }, - "application/vnd.ms-windows.nwprinting.oob": { - "source": "iana" - }, - "application/vnd.ms-windows.printerpairing": { - "source": "iana" - }, - "application/vnd.ms-windows.wsd.oob": { - "source": "iana" - }, - "application/vnd.ms-wmdrm.lic-chlg-req": { - "source": "iana" - }, - "application/vnd.ms-wmdrm.lic-resp": { - "source": "iana" - }, - "application/vnd.ms-wmdrm.meter-chlg-req": { - "source": "iana" - }, - "application/vnd.ms-wmdrm.meter-resp": { - "source": "iana" - }, - "application/vnd.ms-word.document.macroenabled.12": { - "source": "iana", - "extensions": ["docm"] - }, - "application/vnd.ms-word.template.macroenabled.12": { - "source": "iana", - "extensions": ["dotm"] - }, - "application/vnd.ms-works": { - "source": "iana", - "extensions": ["wps","wks","wcm","wdb"] - }, - "application/vnd.ms-wpl": { - "source": "iana", - "extensions": ["wpl"] - }, - "application/vnd.ms-xpsdocument": { - "source": "iana", - "compressible": false, - "extensions": ["xps"] - }, - "application/vnd.msa-disk-image": { - "source": "iana" - }, - "application/vnd.mseq": { - "source": "iana", - "extensions": ["mseq"] - }, - "application/vnd.msign": { - "source": "iana" - }, - "application/vnd.multiad.creator": { - "source": "iana" - }, - "application/vnd.multiad.creator.cif": { - "source": "iana" - }, - "application/vnd.music-niff": { - "source": "iana" - }, - "application/vnd.musician": { - "source": "iana", - "extensions": ["mus"] - }, - "application/vnd.muvee.style": { - "source": "iana", - "extensions": ["msty"] - }, - "application/vnd.mynfc": { - "source": "iana", - "extensions": ["taglet"] - }, - "application/vnd.ncd.control": { - "source": "iana" - }, - "application/vnd.ncd.reference": { - "source": "iana" - }, - "application/vnd.nearst.inv+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.nervana": { - "source": "iana" - }, - "application/vnd.netfpx": { - "source": "iana" - }, - "application/vnd.neurolanguage.nlu": { - "source": "iana", - "extensions": ["nlu"] - }, - "application/vnd.nintendo.nitro.rom": { - "source": "iana" - }, - "application/vnd.nintendo.snes.rom": { - "source": "iana" - }, - "application/vnd.nitf": { - "source": "iana", - "extensions": ["ntf","nitf"] - }, - "application/vnd.noblenet-directory": { - "source": "iana", - "extensions": ["nnd"] - }, - "application/vnd.noblenet-sealer": { - "source": "iana", - "extensions": ["nns"] - }, - "application/vnd.noblenet-web": { - "source": "iana", - "extensions": ["nnw"] - }, - "application/vnd.nokia.catalogs": { - "source": "iana" - }, - "application/vnd.nokia.conml+wbxml": { - "source": "iana" - }, - "application/vnd.nokia.conml+xml": { - "source": "iana" - }, - "application/vnd.nokia.iptv.config+xml": { - "source": "iana" - }, - "application/vnd.nokia.isds-radio-presets": { - "source": "iana" - }, - "application/vnd.nokia.landmark+wbxml": { - "source": "iana" - }, - "application/vnd.nokia.landmark+xml": { - "source": "iana" - }, - "application/vnd.nokia.landmarkcollection+xml": { - "source": "iana" - }, - "application/vnd.nokia.n-gage.ac+xml": { - "source": "iana" - }, - "application/vnd.nokia.n-gage.data": { - "source": "iana", - "extensions": ["ngdat"] - }, - "application/vnd.nokia.n-gage.symbian.install": { - "source": "iana", - "extensions": ["n-gage"] - }, - "application/vnd.nokia.ncd": { - "source": "iana" - }, - "application/vnd.nokia.pcd+wbxml": { - "source": "iana" - }, - "application/vnd.nokia.pcd+xml": { - "source": "iana" - }, - "application/vnd.nokia.radio-preset": { - "source": "iana", - "extensions": ["rpst"] - }, - "application/vnd.nokia.radio-presets": { - "source": "iana", - "extensions": ["rpss"] - }, - "application/vnd.novadigm.edm": { - "source": "iana", - "extensions": ["edm"] - }, - "application/vnd.novadigm.edx": { - "source": "iana", - "extensions": ["edx"] - }, - "application/vnd.novadigm.ext": { - "source": "iana", - "extensions": ["ext"] - }, - "application/vnd.ntt-local.content-share": { - "source": "iana" - }, - "application/vnd.ntt-local.file-transfer": { - "source": "iana" - }, - "application/vnd.ntt-local.ogw_remote-access": { - "source": "iana" - }, - "application/vnd.ntt-local.sip-ta_remote": { - "source": "iana" - }, - "application/vnd.ntt-local.sip-ta_tcp_stream": { - "source": "iana" - }, - "application/vnd.oasis.opendocument.chart": { - "source": "iana", - "extensions": ["odc"] - }, - "application/vnd.oasis.opendocument.chart-template": { - "source": "iana", - "extensions": ["otc"] - }, - "application/vnd.oasis.opendocument.database": { - "source": "iana", - "extensions": ["odb"] - }, - "application/vnd.oasis.opendocument.formula": { - "source": "iana", - "extensions": ["odf"] - }, - "application/vnd.oasis.opendocument.formula-template": { - "source": "iana", - "extensions": ["odft"] - }, - "application/vnd.oasis.opendocument.graphics": { - "source": "iana", - "compressible": false, - "extensions": ["odg"] - }, - "application/vnd.oasis.opendocument.graphics-template": { - "source": "iana", - "extensions": ["otg"] - }, - "application/vnd.oasis.opendocument.image": { - "source": "iana", - "extensions": ["odi"] - }, - "application/vnd.oasis.opendocument.image-template": { - "source": "iana", - "extensions": ["oti"] - }, - "application/vnd.oasis.opendocument.presentation": { - "source": "iana", - "compressible": false, - "extensions": ["odp"] - }, - "application/vnd.oasis.opendocument.presentation-template": { - "source": "iana", - "extensions": ["otp"] - }, - "application/vnd.oasis.opendocument.spreadsheet": { - "source": "iana", - "compressible": false, - "extensions": ["ods"] - }, - "application/vnd.oasis.opendocument.spreadsheet-template": { - "source": "iana", - "extensions": ["ots"] - }, - "application/vnd.oasis.opendocument.text": { - "source": "iana", - "compressible": false, - "extensions": ["odt"] - }, - "application/vnd.oasis.opendocument.text-master": { - "source": "iana", - "extensions": ["odm"] - }, - "application/vnd.oasis.opendocument.text-template": { - "source": "iana", - "extensions": ["ott"] - }, - "application/vnd.oasis.opendocument.text-web": { - "source": "iana", - "extensions": ["oth"] - }, - "application/vnd.obn": { - "source": "iana" - }, - "application/vnd.oftn.l10n+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.oipf.contentaccessdownload+xml": { - "source": "iana" - }, - "application/vnd.oipf.contentaccessstreaming+xml": { - "source": "iana" - }, - "application/vnd.oipf.cspg-hexbinary": { - "source": "iana" - }, - "application/vnd.oipf.dae.svg+xml": { - "source": "iana" - }, - "application/vnd.oipf.dae.xhtml+xml": { - "source": "iana" - }, - "application/vnd.oipf.mippvcontrolmessage+xml": { - "source": "iana" - }, - "application/vnd.oipf.pae.gem": { - "source": "iana" - }, - "application/vnd.oipf.spdiscovery+xml": { - "source": "iana" - }, - "application/vnd.oipf.spdlist+xml": { - "source": "iana" - }, - "application/vnd.oipf.ueprofile+xml": { - "source": "iana" - }, - "application/vnd.oipf.userprofile+xml": { - "source": "iana" - }, - "application/vnd.olpc-sugar": { - "source": "iana", - "extensions": ["xo"] - }, - "application/vnd.oma-scws-config": { - "source": "iana" - }, - "application/vnd.oma-scws-http-request": { - "source": "iana" - }, - "application/vnd.oma-scws-http-response": { - "source": "iana" - }, - "application/vnd.oma.bcast.associated-procedure-parameter+xml": { - "source": "iana" - }, - "application/vnd.oma.bcast.drm-trigger+xml": { - "source": "iana" - }, - "application/vnd.oma.bcast.imd+xml": { - "source": "iana" - }, - "application/vnd.oma.bcast.ltkm": { - "source": "iana" - }, - "application/vnd.oma.bcast.notification+xml": { - "source": "iana" - }, - "application/vnd.oma.bcast.provisioningtrigger": { - "source": "iana" - }, - "application/vnd.oma.bcast.sgboot": { - "source": "iana" - }, - "application/vnd.oma.bcast.sgdd+xml": { - "source": "iana" - }, - "application/vnd.oma.bcast.sgdu": { - "source": "iana" - }, - "application/vnd.oma.bcast.simple-symbol-container": { - "source": "iana" - }, - "application/vnd.oma.bcast.smartcard-trigger+xml": { - "source": "iana" - }, - "application/vnd.oma.bcast.sprov+xml": { - "source": "iana" - }, - "application/vnd.oma.bcast.stkm": { - "source": "iana" - }, - "application/vnd.oma.cab-address-book+xml": { - "source": "iana" - }, - "application/vnd.oma.cab-feature-handler+xml": { - "source": "iana" - }, - "application/vnd.oma.cab-pcc+xml": { - "source": "iana" - }, - "application/vnd.oma.cab-subs-invite+xml": { - "source": "iana" - }, - "application/vnd.oma.cab-user-prefs+xml": { - "source": "iana" - }, - "application/vnd.oma.dcd": { - "source": "iana" - }, - "application/vnd.oma.dcdc": { - "source": "iana" - }, - "application/vnd.oma.dd2+xml": { - "source": "iana", - "extensions": ["dd2"] - }, - "application/vnd.oma.drm.risd+xml": { - "source": "iana" - }, - "application/vnd.oma.group-usage-list+xml": { - "source": "iana" - }, - "application/vnd.oma.lwm2m+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.oma.lwm2m+tlv": { - "source": "iana" - }, - "application/vnd.oma.pal+xml": { - "source": "iana" - }, - "application/vnd.oma.poc.detailed-progress-report+xml": { - "source": "iana" - }, - "application/vnd.oma.poc.final-report+xml": { - "source": "iana" - }, - "application/vnd.oma.poc.groups+xml": { - "source": "iana" - }, - "application/vnd.oma.poc.invocation-descriptor+xml": { - "source": "iana" - }, - "application/vnd.oma.poc.optimized-progress-report+xml": { - "source": "iana" - }, - "application/vnd.oma.push": { - "source": "iana" - }, - "application/vnd.oma.scidm.messages+xml": { - "source": "iana" - }, - "application/vnd.oma.xcap-directory+xml": { - "source": "iana" - }, - "application/vnd.omads-email+xml": { - "source": "iana" - }, - "application/vnd.omads-file+xml": { - "source": "iana" - }, - "application/vnd.omads-folder+xml": { - "source": "iana" - }, - "application/vnd.omaloc-supl-init": { - "source": "iana" - }, - "application/vnd.onepager": { - "source": "iana" - }, - "application/vnd.openblox.game+xml": { - "source": "iana" - }, - "application/vnd.openblox.game-binary": { - "source": "iana" - }, - "application/vnd.openeye.oeb": { - "source": "iana" - }, - "application/vnd.openofficeorg.extension": { - "source": "apache", - "extensions": ["oxt"] - }, - "application/vnd.openstreetmap.data+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.custom-properties+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.drawing+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.extended-properties+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml-template": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.presentation": { - "source": "iana", - "compressible": false, - "extensions": ["pptx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.slide": { - "source": "iana", - "extensions": ["sldx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { - "source": "iana", - "extensions": ["ppsx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.template": { - "source": "apache", - "extensions": ["potx"] - }, - "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml-template": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { - "source": "iana", - "compressible": false, - "extensions": ["xlsx"] - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { - "source": "apache", - "extensions": ["xltx"] - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.theme+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.themeoverride+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.vmldrawing": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml-template": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { - "source": "iana", - "compressible": false, - "extensions": ["docx"] - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { - "source": "apache", - "extensions": ["dotx"] - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-package.core-properties+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { - "source": "iana" - }, - "application/vnd.openxmlformats-package.relationships+xml": { - "source": "iana" - }, - "application/vnd.oracle.resource+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.orange.indata": { - "source": "iana" - }, - "application/vnd.osa.netdeploy": { - "source": "iana" - }, - "application/vnd.osgeo.mapguide.package": { - "source": "iana", - "extensions": ["mgp"] - }, - "application/vnd.osgi.bundle": { - "source": "iana" - }, - "application/vnd.osgi.dp": { - "source": "iana", - "extensions": ["dp"] - }, - "application/vnd.osgi.subsystem": { - "source": "iana", - "extensions": ["esa"] - }, - "application/vnd.otps.ct-kip+xml": { - "source": "iana" - }, - "application/vnd.oxli.countgraph": { - "source": "iana" - }, - "application/vnd.pagerduty+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.palm": { - "source": "iana", - "extensions": ["pdb","pqa","oprc"] - }, - "application/vnd.panoply": { - "source": "iana" - }, - "application/vnd.paos+xml": { - "source": "iana" - }, - "application/vnd.paos.xml": { - "source": "apache" - }, - "application/vnd.pawaafile": { - "source": "iana", - "extensions": ["paw"] - }, - "application/vnd.pcos": { - "source": "iana" - }, - "application/vnd.pg.format": { - "source": "iana", - "extensions": ["str"] - }, - "application/vnd.pg.osasli": { - "source": "iana", - "extensions": ["ei6"] - }, - "application/vnd.piaccess.application-licence": { - "source": "iana" - }, - "application/vnd.picsel": { - "source": "iana", - "extensions": ["efif"] - }, - "application/vnd.pmi.widget": { - "source": "iana", - "extensions": ["wg"] - }, - "application/vnd.poc.group-advertisement+xml": { - "source": "iana" - }, - "application/vnd.pocketlearn": { - "source": "iana", - "extensions": ["plf"] - }, - "application/vnd.powerbuilder6": { - "source": "iana", - "extensions": ["pbd"] - }, - "application/vnd.powerbuilder6-s": { - "source": "iana" - }, - "application/vnd.powerbuilder7": { - "source": "iana" - }, - "application/vnd.powerbuilder7-s": { - "source": "iana" - }, - "application/vnd.powerbuilder75": { - "source": "iana" - }, - "application/vnd.powerbuilder75-s": { - "source": "iana" - }, - "application/vnd.preminet": { - "source": "iana" - }, - "application/vnd.previewsystems.box": { - "source": "iana", - "extensions": ["box"] - }, - "application/vnd.proteus.magazine": { - "source": "iana", - "extensions": ["mgz"] - }, - "application/vnd.publishare-delta-tree": { - "source": "iana", - "extensions": ["qps"] - }, - "application/vnd.pvi.ptid1": { - "source": "iana", - "extensions": ["ptid"] - }, - "application/vnd.pwg-multiplexed": { - "source": "iana" - }, - "application/vnd.pwg-xhtml-print+xml": { - "source": "iana" - }, - "application/vnd.qualcomm.brew-app-res": { - "source": "iana" - }, - "application/vnd.quarantainenet": { - "source": "iana" - }, - "application/vnd.quark.quarkxpress": { - "source": "iana", - "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"] - }, - "application/vnd.quobject-quoxdocument": { - "source": "iana" - }, - "application/vnd.radisys.moml+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-audit+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-audit-conf+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-audit-conn+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-audit-dialog+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-audit-stream+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-conf+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-dialog+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-dialog-base+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-dialog-fax-detect+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-dialog-group+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-dialog-speech+xml": { - "source": "iana" - }, - "application/vnd.radisys.msml-dialog-transform+xml": { - "source": "iana" - }, - "application/vnd.rainstor.data": { - "source": "iana" - }, - "application/vnd.rapid": { - "source": "iana" - }, - "application/vnd.rar": { - "source": "iana" - }, - "application/vnd.realvnc.bed": { - "source": "iana", - "extensions": ["bed"] - }, - "application/vnd.recordare.musicxml": { - "source": "iana", - "extensions": ["mxl"] - }, - "application/vnd.recordare.musicxml+xml": { - "source": "iana", - "extensions": ["musicxml"] - }, - "application/vnd.renlearn.rlprint": { - "source": "iana" - }, - "application/vnd.rig.cryptonote": { - "source": "iana", - "extensions": ["cryptonote"] - }, - "application/vnd.rim.cod": { - "source": "apache", - "extensions": ["cod"] - }, - "application/vnd.rn-realmedia": { - "source": "apache", - "extensions": ["rm"] - }, - "application/vnd.rn-realmedia-vbr": { - "source": "apache", - "extensions": ["rmvb"] - }, - "application/vnd.route66.link66+xml": { - "source": "iana", - "extensions": ["link66"] - }, - "application/vnd.rs-274x": { - "source": "iana" - }, - "application/vnd.ruckus.download": { - "source": "iana" - }, - "application/vnd.s3sms": { - "source": "iana" - }, - "application/vnd.sailingtracker.track": { - "source": "iana", - "extensions": ["st"] - }, - "application/vnd.sbm.cid": { - "source": "iana" - }, - "application/vnd.sbm.mid2": { - "source": "iana" - }, - "application/vnd.scribus": { - "source": "iana" - }, - "application/vnd.sealed.3df": { - "source": "iana" - }, - "application/vnd.sealed.csf": { - "source": "iana" - }, - "application/vnd.sealed.doc": { - "source": "iana" - }, - "application/vnd.sealed.eml": { - "source": "iana" - }, - "application/vnd.sealed.mht": { - "source": "iana" - }, - "application/vnd.sealed.net": { - "source": "iana" - }, - "application/vnd.sealed.ppt": { - "source": "iana" - }, - "application/vnd.sealed.tiff": { - "source": "iana" - }, - "application/vnd.sealed.xls": { - "source": "iana" - }, - "application/vnd.sealedmedia.softseal.html": { - "source": "iana" - }, - "application/vnd.sealedmedia.softseal.pdf": { - "source": "iana" - }, - "application/vnd.seemail": { - "source": "iana", - "extensions": ["see"] - }, - "application/vnd.sema": { - "source": "iana", - "extensions": ["sema"] - }, - "application/vnd.semd": { - "source": "iana", - "extensions": ["semd"] - }, - "application/vnd.semf": { - "source": "iana", - "extensions": ["semf"] - }, - "application/vnd.shana.informed.formdata": { - "source": "iana", - "extensions": ["ifm"] - }, - "application/vnd.shana.informed.formtemplate": { - "source": "iana", - "extensions": ["itp"] - }, - "application/vnd.shana.informed.interchange": { - "source": "iana", - "extensions": ["iif"] - }, - "application/vnd.shana.informed.package": { - "source": "iana", - "extensions": ["ipk"] - }, - "application/vnd.simtech-mindmapper": { - "source": "iana", - "extensions": ["twd","twds"] - }, - "application/vnd.siren+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.smaf": { - "source": "iana", - "extensions": ["mmf"] - }, - "application/vnd.smart.notebook": { - "source": "iana" - }, - "application/vnd.smart.teacher": { - "source": "iana", - "extensions": ["teacher"] - }, - "application/vnd.software602.filler.form+xml": { - "source": "iana" - }, - "application/vnd.software602.filler.form-xml-zip": { - "source": "iana" - }, - "application/vnd.solent.sdkm+xml": { - "source": "iana", - "extensions": ["sdkm","sdkd"] - }, - "application/vnd.spotfire.dxp": { - "source": "iana", - "extensions": ["dxp"] - }, - "application/vnd.spotfire.sfs": { - "source": "iana", - "extensions": ["sfs"] - }, - "application/vnd.sss-cod": { - "source": "iana" - }, - "application/vnd.sss-dtf": { - "source": "iana" - }, - "application/vnd.sss-ntf": { - "source": "iana" - }, - "application/vnd.stardivision.calc": { - "source": "apache", - "extensions": ["sdc"] - }, - "application/vnd.stardivision.draw": { - "source": "apache", - "extensions": ["sda"] - }, - "application/vnd.stardivision.impress": { - "source": "apache", - "extensions": ["sdd"] - }, - "application/vnd.stardivision.math": { - "source": "apache", - "extensions": ["smf"] - }, - "application/vnd.stardivision.writer": { - "source": "apache", - "extensions": ["sdw","vor"] - }, - "application/vnd.stardivision.writer-global": { - "source": "apache", - "extensions": ["sgl"] - }, - "application/vnd.stepmania.package": { - "source": "iana", - "extensions": ["smzip"] - }, - "application/vnd.stepmania.stepchart": { - "source": "iana", - "extensions": ["sm"] - }, - "application/vnd.street-stream": { - "source": "iana" - }, - "application/vnd.sun.wadl+xml": { - "source": "iana" - }, - "application/vnd.sun.xml.calc": { - "source": "apache", - "extensions": ["sxc"] - }, - "application/vnd.sun.xml.calc.template": { - "source": "apache", - "extensions": ["stc"] - }, - "application/vnd.sun.xml.draw": { - "source": "apache", - "extensions": ["sxd"] - }, - "application/vnd.sun.xml.draw.template": { - "source": "apache", - "extensions": ["std"] - }, - "application/vnd.sun.xml.impress": { - "source": "apache", - "extensions": ["sxi"] - }, - "application/vnd.sun.xml.impress.template": { - "source": "apache", - "extensions": ["sti"] - }, - "application/vnd.sun.xml.math": { - "source": "apache", - "extensions": ["sxm"] - }, - "application/vnd.sun.xml.writer": { - "source": "apache", - "extensions": ["sxw"] - }, - "application/vnd.sun.xml.writer.global": { - "source": "apache", - "extensions": ["sxg"] - }, - "application/vnd.sun.xml.writer.template": { - "source": "apache", - "extensions": ["stw"] - }, - "application/vnd.sus-calendar": { - "source": "iana", - "extensions": ["sus","susp"] - }, - "application/vnd.svd": { - "source": "iana", - "extensions": ["svd"] - }, - "application/vnd.swiftview-ics": { - "source": "iana" - }, - "application/vnd.symbian.install": { - "source": "apache", - "extensions": ["sis","sisx"] - }, - "application/vnd.syncml+xml": { - "source": "iana", - "extensions": ["xsm"] - }, - "application/vnd.syncml.dm+wbxml": { - "source": "iana", - "extensions": ["bdm"] - }, - "application/vnd.syncml.dm+xml": { - "source": "iana", - "extensions": ["xdm"] - }, - "application/vnd.syncml.dm.notification": { - "source": "iana" - }, - "application/vnd.syncml.dmddf+wbxml": { - "source": "iana" - }, - "application/vnd.syncml.dmddf+xml": { - "source": "iana" - }, - "application/vnd.syncml.dmtnds+wbxml": { - "source": "iana" - }, - "application/vnd.syncml.dmtnds+xml": { - "source": "iana" - }, - "application/vnd.syncml.ds.notification": { - "source": "iana" - }, - "application/vnd.tao.intent-module-archive": { - "source": "iana", - "extensions": ["tao"] - }, - "application/vnd.tcpdump.pcap": { - "source": "iana", - "extensions": ["pcap","cap","dmp"] - }, - "application/vnd.tmd.mediaflex.api+xml": { - "source": "iana" - }, - "application/vnd.tml": { - "source": "iana" - }, - "application/vnd.tmobile-livetv": { - "source": "iana", - "extensions": ["tmo"] - }, - "application/vnd.tri.onesource": { - "source": "iana" - }, - "application/vnd.trid.tpt": { - "source": "iana", - "extensions": ["tpt"] - }, - "application/vnd.triscape.mxs": { - "source": "iana", - "extensions": ["mxs"] - }, - "application/vnd.trueapp": { - "source": "iana", - "extensions": ["tra"] - }, - "application/vnd.truedoc": { - "source": "iana" - }, - "application/vnd.ubisoft.webplayer": { - "source": "iana" - }, - "application/vnd.ufdl": { - "source": "iana", - "extensions": ["ufd","ufdl"] - }, - "application/vnd.uiq.theme": { - "source": "iana", - "extensions": ["utz"] - }, - "application/vnd.umajin": { - "source": "iana", - "extensions": ["umj"] - }, - "application/vnd.unity": { - "source": "iana", - "extensions": ["unityweb"] - }, - "application/vnd.uoml+xml": { - "source": "iana", - "extensions": ["uoml"] - }, - "application/vnd.uplanet.alert": { - "source": "iana" - }, - "application/vnd.uplanet.alert-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.bearer-choice": { - "source": "iana" - }, - "application/vnd.uplanet.bearer-choice-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.cacheop": { - "source": "iana" - }, - "application/vnd.uplanet.cacheop-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.channel": { - "source": "iana" - }, - "application/vnd.uplanet.channel-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.list": { - "source": "iana" - }, - "application/vnd.uplanet.list-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.listcmd": { - "source": "iana" - }, - "application/vnd.uplanet.listcmd-wbxml": { - "source": "iana" - }, - "application/vnd.uplanet.signal": { - "source": "iana" - }, - "application/vnd.uri-map": { - "source": "iana" - }, - "application/vnd.valve.source.material": { - "source": "iana" - }, - "application/vnd.vcx": { - "source": "iana", - "extensions": ["vcx"] - }, - "application/vnd.vd-study": { - "source": "iana" - }, - "application/vnd.vectorworks": { - "source": "iana" - }, - "application/vnd.vel+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.verimatrix.vcas": { - "source": "iana" - }, - "application/vnd.vidsoft.vidconference": { - "source": "iana" - }, - "application/vnd.visio": { - "source": "iana", - "extensions": ["vsd","vst","vss","vsw"] - }, - "application/vnd.visionary": { - "source": "iana", - "extensions": ["vis"] - }, - "application/vnd.vividence.scriptfile": { - "source": "iana" - }, - "application/vnd.vsf": { - "source": "iana", - "extensions": ["vsf"] - }, - "application/vnd.wap.sic": { - "source": "iana" - }, - "application/vnd.wap.slc": { - "source": "iana" - }, - "application/vnd.wap.wbxml": { - "source": "iana", - "extensions": ["wbxml"] - }, - "application/vnd.wap.wmlc": { - "source": "iana", - "extensions": ["wmlc"] - }, - "application/vnd.wap.wmlscriptc": { - "source": "iana", - "extensions": ["wmlsc"] - }, - "application/vnd.webturbo": { - "source": "iana", - "extensions": ["wtb"] - }, - "application/vnd.wfa.p2p": { - "source": "iana" - }, - "application/vnd.wfa.wsc": { - "source": "iana" - }, - "application/vnd.windows.devicepairing": { - "source": "iana" - }, - "application/vnd.wmc": { - "source": "iana" - }, - "application/vnd.wmf.bootstrap": { - "source": "iana" - }, - "application/vnd.wolfram.mathematica": { - "source": "iana" - }, - "application/vnd.wolfram.mathematica.package": { - "source": "iana" - }, - "application/vnd.wolfram.player": { - "source": "iana", - "extensions": ["nbp"] - }, - "application/vnd.wordperfect": { - "source": "iana", - "extensions": ["wpd"] - }, - "application/vnd.wqd": { - "source": "iana", - "extensions": ["wqd"] - }, - "application/vnd.wrq-hp3000-labelled": { - "source": "iana" - }, - "application/vnd.wt.stf": { - "source": "iana", - "extensions": ["stf"] - }, - "application/vnd.wv.csp+wbxml": { - "source": "iana" - }, - "application/vnd.wv.csp+xml": { - "source": "iana" - }, - "application/vnd.wv.ssp+xml": { - "source": "iana" - }, - "application/vnd.xacml+json": { - "source": "iana", - "compressible": true - }, - "application/vnd.xara": { - "source": "iana", - "extensions": ["xar"] - }, - "application/vnd.xfdl": { - "source": "iana", - "extensions": ["xfdl"] - }, - "application/vnd.xfdl.webform": { - "source": "iana" - }, - "application/vnd.xmi+xml": { - "source": "iana" - }, - "application/vnd.xmpie.cpkg": { - "source": "iana" - }, - "application/vnd.xmpie.dpkg": { - "source": "iana" - }, - "application/vnd.xmpie.plan": { - "source": "iana" - }, - "application/vnd.xmpie.ppkg": { - "source": "iana" - }, - "application/vnd.xmpie.xlim": { - "source": "iana" - }, - "application/vnd.yamaha.hv-dic": { - "source": "iana", - "extensions": ["hvd"] - }, - "application/vnd.yamaha.hv-script": { - "source": "iana", - "extensions": ["hvs"] - }, - "application/vnd.yamaha.hv-voice": { - "source": "iana", - "extensions": ["hvp"] - }, - "application/vnd.yamaha.openscoreformat": { - "source": "iana", - "extensions": ["osf"] - }, - "application/vnd.yamaha.openscoreformat.osfpvg+xml": { - "source": "iana", - "extensions": ["osfpvg"] - }, - "application/vnd.yamaha.remote-setup": { - "source": "iana" - }, - "application/vnd.yamaha.smaf-audio": { - "source": "iana", - "extensions": ["saf"] - }, - "application/vnd.yamaha.smaf-phrase": { - "source": "iana", - "extensions": ["spf"] - }, - "application/vnd.yamaha.through-ngn": { - "source": "iana" - }, - "application/vnd.yamaha.tunnel-udpencap": { - "source": "iana" - }, - "application/vnd.yaoweme": { - "source": "iana" - }, - "application/vnd.yellowriver-custom-menu": { - "source": "iana", - "extensions": ["cmp"] - }, - "application/vnd.zul": { - "source": "iana", - "extensions": ["zir","zirz"] - }, - "application/vnd.zzazz.deck+xml": { - "source": "iana", - "extensions": ["zaz"] - }, - "application/voicexml+xml": { - "source": "iana", - "extensions": ["vxml"] - }, - "application/vq-rtcpxr": { - "source": "iana" - }, - "application/watcherinfo+xml": { - "source": "iana" - }, - "application/whoispp-query": { - "source": "iana" - }, - "application/whoispp-response": { - "source": "iana" - }, - "application/widget": { - "source": "iana", - "extensions": ["wgt"] - }, - "application/winhlp": { - "source": "apache", - "extensions": ["hlp"] - }, - "application/wita": { - "source": "iana" - }, - "application/wordperfect5.1": { - "source": "iana" - }, - "application/wsdl+xml": { - "source": "iana", - "extensions": ["wsdl"] - }, - "application/wspolicy+xml": { - "source": "iana", - "extensions": ["wspolicy"] - }, - "application/x-7z-compressed": { - "source": "apache", - "compressible": false, - "extensions": ["7z"] - }, - "application/x-abiword": { - "source": "apache", - "extensions": ["abw"] - }, - "application/x-ace-compressed": { - "source": "apache", - "extensions": ["ace"] - }, - "application/x-amf": { - "source": "apache" - }, - "application/x-apple-diskimage": { - "source": "apache", - "extensions": ["dmg"] - }, - "application/x-authorware-bin": { - "source": "apache", - "extensions": ["aab","x32","u32","vox"] - }, - "application/x-authorware-map": { - "source": "apache", - "extensions": ["aam"] - }, - "application/x-authorware-seg": { - "source": "apache", - "extensions": ["aas"] - }, - "application/x-bcpio": { - "source": "apache", - "extensions": ["bcpio"] - }, - "application/x-bdoc": { - "compressible": false, - "extensions": ["bdoc"] - }, - "application/x-bittorrent": { - "source": "apache", - "extensions": ["torrent"] - }, - "application/x-blorb": { - "source": "apache", - "extensions": ["blb","blorb"] - }, - "application/x-bzip": { - "source": "apache", - "compressible": false, - "extensions": ["bz"] - }, - "application/x-bzip2": { - "source": "apache", - "compressible": false, - "extensions": ["bz2","boz"] - }, - "application/x-cbr": { - "source": "apache", - "extensions": ["cbr","cba","cbt","cbz","cb7"] - }, - "application/x-cdlink": { - "source": "apache", - "extensions": ["vcd"] - }, - "application/x-cfs-compressed": { - "source": "apache", - "extensions": ["cfs"] - }, - "application/x-chat": { - "source": "apache", - "extensions": ["chat"] - }, - "application/x-chess-pgn": { - "source": "apache", - "extensions": ["pgn"] - }, - "application/x-chrome-extension": { - "extensions": ["crx"] - }, - "application/x-cocoa": { - "source": "nginx", - "extensions": ["cco"] - }, - "application/x-compress": { - "source": "apache" - }, - "application/x-conference": { - "source": "apache", - "extensions": ["nsc"] - }, - "application/x-cpio": { - "source": "apache", - "extensions": ["cpio"] - }, - "application/x-csh": { - "source": "apache", - "extensions": ["csh"] - }, - "application/x-deb": { - "compressible": false - }, - "application/x-debian-package": { - "source": "apache", - "extensions": ["deb","udeb"] - }, - "application/x-dgc-compressed": { - "source": "apache", - "extensions": ["dgc"] - }, - "application/x-director": { - "source": "apache", - "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"] - }, - "application/x-doom": { - "source": "apache", - "extensions": ["wad"] - }, - "application/x-dtbncx+xml": { - "source": "apache", - "extensions": ["ncx"] - }, - "application/x-dtbook+xml": { - "source": "apache", - "extensions": ["dtb"] - }, - "application/x-dtbresource+xml": { - "source": "apache", - "extensions": ["res"] - }, - "application/x-dvi": { - "source": "apache", - "compressible": false, - "extensions": ["dvi"] - }, - "application/x-envoy": { - "source": "apache", - "extensions": ["evy"] - }, - "application/x-eva": { - "source": "apache", - "extensions": ["eva"] - }, - "application/x-font-bdf": { - "source": "apache", - "extensions": ["bdf"] - }, - "application/x-font-dos": { - "source": "apache" - }, - "application/x-font-framemaker": { - "source": "apache" - }, - "application/x-font-ghostscript": { - "source": "apache", - "extensions": ["gsf"] - }, - "application/x-font-libgrx": { - "source": "apache" - }, - "application/x-font-linux-psf": { - "source": "apache", - "extensions": ["psf"] - }, - "application/x-font-otf": { - "source": "apache", - "compressible": true, - "extensions": ["otf"] - }, - "application/x-font-pcf": { - "source": "apache", - "extensions": ["pcf"] - }, - "application/x-font-snf": { - "source": "apache", - "extensions": ["snf"] - }, - "application/x-font-speedo": { - "source": "apache" - }, - "application/x-font-sunos-news": { - "source": "apache" - }, - "application/x-font-ttf": { - "source": "apache", - "compressible": true, - "extensions": ["ttf","ttc"] - }, - "application/x-font-type1": { - "source": "apache", - "extensions": ["pfa","pfb","pfm","afm"] - }, - "application/x-font-vfont": { - "source": "apache" - }, - "application/x-freearc": { - "source": "apache", - "extensions": ["arc"] - }, - "application/x-futuresplash": { - "source": "apache", - "extensions": ["spl"] - }, - "application/x-gca-compressed": { - "source": "apache", - "extensions": ["gca"] - }, - "application/x-glulx": { - "source": "apache", - "extensions": ["ulx"] - }, - "application/x-gnumeric": { - "source": "apache", - "extensions": ["gnumeric"] - }, - "application/x-gramps-xml": { - "source": "apache", - "extensions": ["gramps"] - }, - "application/x-gtar": { - "source": "apache", - "extensions": ["gtar"] - }, - "application/x-gzip": { - "source": "apache" - }, - "application/x-hdf": { - "source": "apache", - "extensions": ["hdf"] - }, - "application/x-httpd-php": { - "compressible": true, - "extensions": ["php"] - }, - "application/x-install-instructions": { - "source": "apache", - "extensions": ["install"] - }, - "application/x-iso9660-image": { - "source": "apache", - "extensions": ["iso"] - }, - "application/x-java-archive-diff": { - "source": "nginx", - "extensions": ["jardiff"] - }, - "application/x-java-jnlp-file": { - "source": "apache", - "compressible": false, - "extensions": ["jnlp"] - }, - "application/x-javascript": { - "compressible": true - }, - "application/x-latex": { - "source": "apache", - "compressible": false, - "extensions": ["latex"] - }, - "application/x-lua-bytecode": { - "extensions": ["luac"] - }, - "application/x-lzh-compressed": { - "source": "apache", - "extensions": ["lzh","lha"] - }, - "application/x-makeself": { - "source": "nginx", - "extensions": ["run"] - }, - "application/x-mie": { - "source": "apache", - "extensions": ["mie"] - }, - "application/x-mobipocket-ebook": { - "source": "apache", - "extensions": ["prc","mobi"] - }, - "application/x-mpegurl": { - "compressible": false - }, - "application/x-ms-application": { - "source": "apache", - "extensions": ["application"] - }, - "application/x-ms-shortcut": { - "source": "apache", - "extensions": ["lnk"] - }, - "application/x-ms-wmd": { - "source": "apache", - "extensions": ["wmd"] - }, - "application/x-ms-wmz": { - "source": "apache", - "extensions": ["wmz"] - }, - "application/x-ms-xbap": { - "source": "apache", - "extensions": ["xbap"] - }, - "application/x-msaccess": { - "source": "apache", - "extensions": ["mdb"] - }, - "application/x-msbinder": { - "source": "apache", - "extensions": ["obd"] - }, - "application/x-mscardfile": { - "source": "apache", - "extensions": ["crd"] - }, - "application/x-msclip": { - "source": "apache", - "extensions": ["clp"] - }, - "application/x-msdos-program": { - "extensions": ["exe"] - }, - "application/x-msdownload": { - "source": "apache", - "extensions": ["exe","dll","com","bat","msi"] - }, - "application/x-msmediaview": { - "source": "apache", - "extensions": ["mvb","m13","m14"] - }, - "application/x-msmetafile": { - "source": "apache", - "extensions": ["wmf","wmz","emf","emz"] - }, - "application/x-msmoney": { - "source": "apache", - "extensions": ["mny"] - }, - "application/x-mspublisher": { - "source": "apache", - "extensions": ["pub"] - }, - "application/x-msschedule": { - "source": "apache", - "extensions": ["scd"] - }, - "application/x-msterminal": { - "source": "apache", - "extensions": ["trm"] - }, - "application/x-mswrite": { - "source": "apache", - "extensions": ["wri"] - }, - "application/x-netcdf": { - "source": "apache", - "extensions": ["nc","cdf"] - }, - "application/x-ns-proxy-autoconfig": { - "compressible": true, - "extensions": ["pac"] - }, - "application/x-nzb": { - "source": "apache", - "extensions": ["nzb"] - }, - "application/x-perl": { - "source": "nginx", - "extensions": ["pl","pm"] - }, - "application/x-pilot": { - "source": "nginx", - "extensions": ["prc","pdb"] - }, - "application/x-pkcs12": { - "source": "apache", - "compressible": false, - "extensions": ["p12","pfx"] - }, - "application/x-pkcs7-certificates": { - "source": "apache", - "extensions": ["p7b","spc"] - }, - "application/x-pkcs7-certreqresp": { - "source": "apache", - "extensions": ["p7r"] - }, - "application/x-rar-compressed": { - "source": "apache", - "compressible": false, - "extensions": ["rar"] - }, - "application/x-redhat-package-manager": { - "source": "nginx", - "extensions": ["rpm"] - }, - "application/x-research-info-systems": { - "source": "apache", - "extensions": ["ris"] - }, - "application/x-sea": { - "source": "nginx", - "extensions": ["sea"] - }, - "application/x-sh": { - "source": "apache", - "compressible": true, - "extensions": ["sh"] - }, - "application/x-shar": { - "source": "apache", - "extensions": ["shar"] - }, - "application/x-shockwave-flash": { - "source": "apache", - "compressible": false, - "extensions": ["swf"] - }, - "application/x-silverlight-app": { - "source": "apache", - "extensions": ["xap"] - }, - "application/x-sql": { - "source": "apache", - "extensions": ["sql"] - }, - "application/x-stuffit": { - "source": "apache", - "compressible": false, - "extensions": ["sit"] - }, - "application/x-stuffitx": { - "source": "apache", - "extensions": ["sitx"] - }, - "application/x-subrip": { - "source": "apache", - "extensions": ["srt"] - }, - "application/x-sv4cpio": { - "source": "apache", - "extensions": ["sv4cpio"] - }, - "application/x-sv4crc": { - "source": "apache", - "extensions": ["sv4crc"] - }, - "application/x-t3vm-image": { - "source": "apache", - "extensions": ["t3"] - }, - "application/x-tads": { - "source": "apache", - "extensions": ["gam"] - }, - "application/x-tar": { - "source": "apache", - "compressible": true, - "extensions": ["tar"] - }, - "application/x-tcl": { - "source": "apache", - "extensions": ["tcl","tk"] - }, - "application/x-tex": { - "source": "apache", - "extensions": ["tex"] - }, - "application/x-tex-tfm": { - "source": "apache", - "extensions": ["tfm"] - }, - "application/x-texinfo": { - "source": "apache", - "extensions": ["texinfo","texi"] - }, - "application/x-tgif": { - "source": "apache", - "extensions": ["obj"] - }, - "application/x-ustar": { - "source": "apache", - "extensions": ["ustar"] - }, - "application/x-wais-source": { - "source": "apache", - "extensions": ["src"] - }, - "application/x-web-app-manifest+json": { - "compressible": true, - "extensions": ["webapp"] - }, - "application/x-www-form-urlencoded": { - "source": "iana", - "compressible": true - }, - "application/x-x509-ca-cert": { - "source": "apache", - "extensions": ["der","crt","pem"] - }, - "application/x-xfig": { - "source": "apache", - "extensions": ["fig"] - }, - "application/x-xliff+xml": { - "source": "apache", - "extensions": ["xlf"] - }, - "application/x-xpinstall": { - "source": "apache", - "compressible": false, - "extensions": ["xpi"] - }, - "application/x-xz": { - "source": "apache", - "extensions": ["xz"] - }, - "application/x-zmachine": { - "source": "apache", - "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"] - }, - "application/x400-bp": { - "source": "iana" - }, - "application/xacml+xml": { - "source": "iana" - }, - "application/xaml+xml": { - "source": "apache", - "extensions": ["xaml"] - }, - "application/xcap-att+xml": { - "source": "iana" - }, - "application/xcap-caps+xml": { - "source": "iana" - }, - "application/xcap-diff+xml": { - "source": "iana", - "extensions": ["xdf"] - }, - "application/xcap-el+xml": { - "source": "iana" - }, - "application/xcap-error+xml": { - "source": "iana" - }, - "application/xcap-ns+xml": { - "source": "iana" - }, - "application/xcon-conference-info+xml": { - "source": "iana" - }, - "application/xcon-conference-info-diff+xml": { - "source": "iana" - }, - "application/xenc+xml": { - "source": "iana", - "extensions": ["xenc"] - }, - "application/xhtml+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xhtml","xht"] - }, - "application/xhtml-voice+xml": { - "source": "apache" - }, - "application/xml": { - "source": "iana", - "compressible": true, - "extensions": ["xml","xsl","xsd","rng"] - }, - "application/xml-dtd": { - "source": "iana", - "compressible": true, - "extensions": ["dtd"] - }, - "application/xml-external-parsed-entity": { - "source": "iana" - }, - "application/xml-patch+xml": { - "source": "iana" - }, - "application/xmpp+xml": { - "source": "iana" - }, - "application/xop+xml": { - "source": "iana", - "compressible": true, - "extensions": ["xop"] - }, - "application/xproc+xml": { - "source": "apache", - "extensions": ["xpl"] - }, - "application/xslt+xml": { - "source": "iana", - "extensions": ["xslt"] - }, - "application/xspf+xml": { - "source": "apache", - "extensions": ["xspf"] - }, - "application/xv+xml": { - "source": "iana", - "extensions": ["mxml","xhvml","xvml","xvm"] - }, - "application/yang": { - "source": "iana", - "extensions": ["yang"] - }, - "application/yang-data+json": { - "source": "iana", - "compressible": true - }, - "application/yang-data+xml": { - "source": "iana" - }, - "application/yin+xml": { - "source": "iana", - "extensions": ["yin"] - }, - "application/zip": { - "source": "iana", - "compressible": false, - "extensions": ["zip"] - }, - "application/zlib": { - "source": "iana" - }, - "audio/1d-interleaved-parityfec": { - "source": "iana" - }, - "audio/32kadpcm": { - "source": "iana" - }, - "audio/3gpp": { - "source": "iana", - "compressible": false, - "extensions": ["3gpp"] - }, - "audio/3gpp2": { - "source": "iana" - }, - "audio/ac3": { - "source": "iana" - }, - "audio/adpcm": { - "source": "apache", - "extensions": ["adp"] - }, - "audio/amr": { - "source": "iana" - }, - "audio/amr-wb": { - "source": "iana" - }, - "audio/amr-wb+": { - "source": "iana" - }, - "audio/aptx": { - "source": "iana" - }, - "audio/asc": { - "source": "iana" - }, - "audio/atrac-advanced-lossless": { - "source": "iana" - }, - "audio/atrac-x": { - "source": "iana" - }, - "audio/atrac3": { - "source": "iana" - }, - "audio/basic": { - "source": "iana", - "compressible": false, - "extensions": ["au","snd"] - }, - "audio/bv16": { - "source": "iana" - }, - "audio/bv32": { - "source": "iana" - }, - "audio/clearmode": { - "source": "iana" - }, - "audio/cn": { - "source": "iana" - }, - "audio/dat12": { - "source": "iana" - }, - "audio/dls": { - "source": "iana" - }, - "audio/dsr-es201108": { - "source": "iana" - }, - "audio/dsr-es202050": { - "source": "iana" - }, - "audio/dsr-es202211": { - "source": "iana" - }, - "audio/dsr-es202212": { - "source": "iana" - }, - "audio/dv": { - "source": "iana" - }, - "audio/dvi4": { - "source": "iana" - }, - "audio/eac3": { - "source": "iana" - }, - "audio/encaprtp": { - "source": "iana" - }, - "audio/evrc": { - "source": "iana" - }, - "audio/evrc-qcp": { - "source": "iana" - }, - "audio/evrc0": { - "source": "iana" - }, - "audio/evrc1": { - "source": "iana" - }, - "audio/evrcb": { - "source": "iana" - }, - "audio/evrcb0": { - "source": "iana" - }, - "audio/evrcb1": { - "source": "iana" - }, - "audio/evrcnw": { - "source": "iana" - }, - "audio/evrcnw0": { - "source": "iana" - }, - "audio/evrcnw1": { - "source": "iana" - }, - "audio/evrcwb": { - "source": "iana" - }, - "audio/evrcwb0": { - "source": "iana" - }, - "audio/evrcwb1": { - "source": "iana" - }, - "audio/evs": { - "source": "iana" - }, - "audio/fwdred": { - "source": "iana" - }, - "audio/g711-0": { - "source": "iana" - }, - "audio/g719": { - "source": "iana" - }, - "audio/g722": { - "source": "iana" - }, - "audio/g7221": { - "source": "iana" - }, - "audio/g723": { - "source": "iana" - }, - "audio/g726-16": { - "source": "iana" - }, - "audio/g726-24": { - "source": "iana" - }, - "audio/g726-32": { - "source": "iana" - }, - "audio/g726-40": { - "source": "iana" - }, - "audio/g728": { - "source": "iana" - }, - "audio/g729": { - "source": "iana" - }, - "audio/g7291": { - "source": "iana" - }, - "audio/g729d": { - "source": "iana" - }, - "audio/g729e": { - "source": "iana" - }, - "audio/gsm": { - "source": "iana" - }, - "audio/gsm-efr": { - "source": "iana" - }, - "audio/gsm-hr-08": { - "source": "iana" - }, - "audio/ilbc": { - "source": "iana" - }, - "audio/ip-mr_v2.5": { - "source": "iana" - }, - "audio/isac": { - "source": "apache" - }, - "audio/l16": { - "source": "iana" - }, - "audio/l20": { - "source": "iana" - }, - "audio/l24": { - "source": "iana", - "compressible": false - }, - "audio/l8": { - "source": "iana" - }, - "audio/lpc": { - "source": "iana" - }, - "audio/midi": { - "source": "apache", - "extensions": ["mid","midi","kar","rmi"] - }, - "audio/mobile-xmf": { - "source": "iana" - }, - "audio/mp3": { - "compressible": false, - "extensions": ["mp3"] - }, - "audio/mp4": { - "source": "iana", - "compressible": false, - "extensions": ["m4a","mp4a"] - }, - "audio/mp4a-latm": { - "source": "iana" - }, - "audio/mpa": { - "source": "iana" - }, - "audio/mpa-robust": { - "source": "iana" - }, - "audio/mpeg": { - "source": "iana", - "compressible": false, - "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"] - }, - "audio/mpeg4-generic": { - "source": "iana" - }, - "audio/musepack": { - "source": "apache" - }, - "audio/ogg": { - "source": "iana", - "compressible": false, - "extensions": ["oga","ogg","spx"] - }, - "audio/opus": { - "source": "iana" - }, - "audio/parityfec": { - "source": "iana" - }, - "audio/pcma": { - "source": "iana" - }, - "audio/pcma-wb": { - "source": "iana" - }, - "audio/pcmu": { - "source": "iana" - }, - "audio/pcmu-wb": { - "source": "iana" - }, - "audio/prs.sid": { - "source": "iana" - }, - "audio/qcelp": { - "source": "iana" - }, - "audio/raptorfec": { - "source": "iana" - }, - "audio/red": { - "source": "iana" - }, - "audio/rtp-enc-aescm128": { - "source": "iana" - }, - "audio/rtp-midi": { - "source": "iana" - }, - "audio/rtploopback": { - "source": "iana" - }, - "audio/rtx": { - "source": "iana" - }, - "audio/s3m": { - "source": "apache", - "extensions": ["s3m"] - }, - "audio/silk": { - "source": "apache", - "extensions": ["sil"] - }, - "audio/smv": { - "source": "iana" - }, - "audio/smv-qcp": { - "source": "iana" - }, - "audio/smv0": { - "source": "iana" - }, - "audio/sp-midi": { - "source": "iana" - }, - "audio/speex": { - "source": "iana" - }, - "audio/t140c": { - "source": "iana" - }, - "audio/t38": { - "source": "iana" - }, - "audio/telephone-event": { - "source": "iana" - }, - "audio/tone": { - "source": "iana" - }, - "audio/uemclip": { - "source": "iana" - }, - "audio/ulpfec": { - "source": "iana" - }, - "audio/vdvi": { - "source": "iana" - }, - "audio/vmr-wb": { - "source": "iana" - }, - "audio/vnd.3gpp.iufp": { - "source": "iana" - }, - "audio/vnd.4sb": { - "source": "iana" - }, - "audio/vnd.audiokoz": { - "source": "iana" - }, - "audio/vnd.celp": { - "source": "iana" - }, - "audio/vnd.cisco.nse": { - "source": "iana" - }, - "audio/vnd.cmles.radio-events": { - "source": "iana" - }, - "audio/vnd.cns.anp1": { - "source": "iana" - }, - "audio/vnd.cns.inf1": { - "source": "iana" - }, - "audio/vnd.dece.audio": { - "source": "iana", - "extensions": ["uva","uvva"] - }, - "audio/vnd.digital-winds": { - "source": "iana", - "extensions": ["eol"] - }, - "audio/vnd.dlna.adts": { - "source": "iana" - }, - "audio/vnd.dolby.heaac.1": { - "source": "iana" - }, - "audio/vnd.dolby.heaac.2": { - "source": "iana" - }, - "audio/vnd.dolby.mlp": { - "source": "iana" - }, - "audio/vnd.dolby.mps": { - "source": "iana" - }, - "audio/vnd.dolby.pl2": { - "source": "iana" - }, - "audio/vnd.dolby.pl2x": { - "source": "iana" - }, - "audio/vnd.dolby.pl2z": { - "source": "iana" - }, - "audio/vnd.dolby.pulse.1": { - "source": "iana" - }, - "audio/vnd.dra": { - "source": "iana", - "extensions": ["dra"] - }, - "audio/vnd.dts": { - "source": "iana", - "extensions": ["dts"] - }, - "audio/vnd.dts.hd": { - "source": "iana", - "extensions": ["dtshd"] - }, - "audio/vnd.dvb.file": { - "source": "iana" - }, - "audio/vnd.everad.plj": { - "source": "iana" - }, - "audio/vnd.hns.audio": { - "source": "iana" - }, - "audio/vnd.lucent.voice": { - "source": "iana", - "extensions": ["lvp"] - }, - "audio/vnd.ms-playready.media.pya": { - "source": "iana", - "extensions": ["pya"] - }, - "audio/vnd.nokia.mobile-xmf": { - "source": "iana" - }, - "audio/vnd.nortel.vbk": { - "source": "iana" - }, - "audio/vnd.nuera.ecelp4800": { - "source": "iana", - "extensions": ["ecelp4800"] - }, - "audio/vnd.nuera.ecelp7470": { - "source": "iana", - "extensions": ["ecelp7470"] - }, - "audio/vnd.nuera.ecelp9600": { - "source": "iana", - "extensions": ["ecelp9600"] - }, - "audio/vnd.octel.sbc": { - "source": "iana" - }, - "audio/vnd.qcelp": { - "source": "iana" - }, - "audio/vnd.rhetorex.32kadpcm": { - "source": "iana" - }, - "audio/vnd.rip": { - "source": "iana", - "extensions": ["rip"] - }, - "audio/vnd.rn-realaudio": { - "compressible": false - }, - "audio/vnd.sealedmedia.softseal.mpeg": { - "source": "iana" - }, - "audio/vnd.vmx.cvsd": { - "source": "iana" - }, - "audio/vnd.wave": { - "compressible": false - }, - "audio/vorbis": { - "source": "iana", - "compressible": false - }, - "audio/vorbis-config": { - "source": "iana" - }, - "audio/wav": { - "compressible": false, - "extensions": ["wav"] - }, - "audio/wave": { - "compressible": false, - "extensions": ["wav"] - }, - "audio/webm": { - "source": "apache", - "compressible": false, - "extensions": ["weba"] - }, - "audio/x-aac": { - "source": "apache", - "compressible": false, - "extensions": ["aac"] - }, - "audio/x-aiff": { - "source": "apache", - "extensions": ["aif","aiff","aifc"] - }, - "audio/x-caf": { - "source": "apache", - "compressible": false, - "extensions": ["caf"] - }, - "audio/x-flac": { - "source": "apache", - "extensions": ["flac"] - }, - "audio/x-m4a": { - "source": "nginx", - "extensions": ["m4a"] - }, - "audio/x-matroska": { - "source": "apache", - "extensions": ["mka"] - }, - "audio/x-mpegurl": { - "source": "apache", - "extensions": ["m3u"] - }, - "audio/x-ms-wax": { - "source": "apache", - "extensions": ["wax"] - }, - "audio/x-ms-wma": { - "source": "apache", - "extensions": ["wma"] - }, - "audio/x-pn-realaudio": { - "source": "apache", - "extensions": ["ram","ra"] - }, - "audio/x-pn-realaudio-plugin": { - "source": "apache", - "extensions": ["rmp"] - }, - "audio/x-realaudio": { - "source": "nginx", - "extensions": ["ra"] - }, - "audio/x-tta": { - "source": "apache" - }, - "audio/x-wav": { - "source": "apache", - "extensions": ["wav"] - }, - "audio/xm": { - "source": "apache", - "extensions": ["xm"] - }, - "chemical/x-cdx": { - "source": "apache", - "extensions": ["cdx"] - }, - "chemical/x-cif": { - "source": "apache", - "extensions": ["cif"] - }, - "chemical/x-cmdf": { - "source": "apache", - "extensions": ["cmdf"] - }, - "chemical/x-cml": { - "source": "apache", - "extensions": ["cml"] - }, - "chemical/x-csml": { - "source": "apache", - "extensions": ["csml"] - }, - "chemical/x-pdb": { - "source": "apache" - }, - "chemical/x-xyz": { - "source": "apache", - "extensions": ["xyz"] - }, - "font/opentype": { - "compressible": true, - "extensions": ["otf"] - }, - "image/bmp": { - "source": "iana", - "compressible": true, - "extensions": ["bmp"] - }, - "image/cgm": { - "source": "iana", - "extensions": ["cgm"] - }, - "image/dicom-rle": { - "source": "iana" - }, - "image/emf": { - "source": "iana" - }, - "image/fits": { - "source": "iana" - }, - "image/g3fax": { - "source": "iana", - "extensions": ["g3"] - }, - "image/gif": { - "source": "iana", - "compressible": false, - "extensions": ["gif"] - }, - "image/ief": { - "source": "iana", - "extensions": ["ief"] - }, - "image/jls": { - "source": "iana" - }, - "image/jp2": { - "source": "iana" - }, - "image/jpeg": { - "source": "iana", - "compressible": false, - "extensions": ["jpeg","jpg","jpe"] - }, - "image/jpm": { - "source": "iana" - }, - "image/jpx": { - "source": "iana" - }, - "image/ktx": { - "source": "iana", - "extensions": ["ktx"] - }, - "image/naplps": { - "source": "iana" - }, - "image/pjpeg": { - "compressible": false - }, - "image/png": { - "source": "iana", - "compressible": false, - "extensions": ["png"] - }, - "image/prs.btif": { - "source": "iana", - "extensions": ["btif"] - }, - "image/prs.pti": { - "source": "iana" - }, - "image/pwg-raster": { - "source": "iana" - }, - "image/sgi": { - "source": "apache", - "extensions": ["sgi"] - }, - "image/svg+xml": { - "source": "iana", - "compressible": true, - "extensions": ["svg","svgz"] - }, - "image/t38": { - "source": "iana" - }, - "image/tiff": { - "source": "iana", - "compressible": false, - "extensions": ["tiff","tif"] - }, - "image/tiff-fx": { - "source": "iana" - }, - "image/vnd.adobe.photoshop": { - "source": "iana", - "compressible": true, - "extensions": ["psd"] - }, - "image/vnd.airzip.accelerator.azv": { - "source": "iana" - }, - "image/vnd.cns.inf2": { - "source": "iana" - }, - "image/vnd.dece.graphic": { - "source": "iana", - "extensions": ["uvi","uvvi","uvg","uvvg"] - }, - "image/vnd.djvu": { - "source": "iana", - "extensions": ["djvu","djv"] - }, - "image/vnd.dvb.subtitle": { - "source": "iana", - "extensions": ["sub"] - }, - "image/vnd.dwg": { - "source": "iana", - "extensions": ["dwg"] - }, - "image/vnd.dxf": { - "source": "iana", - "extensions": ["dxf"] - }, - "image/vnd.fastbidsheet": { - "source": "iana", - "extensions": ["fbs"] - }, - "image/vnd.fpx": { - "source": "iana", - "extensions": ["fpx"] - }, - "image/vnd.fst": { - "source": "iana", - "extensions": ["fst"] - }, - "image/vnd.fujixerox.edmics-mmr": { - "source": "iana", - "extensions": ["mmr"] - }, - "image/vnd.fujixerox.edmics-rlc": { - "source": "iana", - "extensions": ["rlc"] - }, - "image/vnd.globalgraphics.pgb": { - "source": "iana" - }, - "image/vnd.microsoft.icon": { - "source": "iana" - }, - "image/vnd.mix": { - "source": "iana" - }, - "image/vnd.mozilla.apng": { - "source": "iana" - }, - "image/vnd.ms-modi": { - "source": "iana", - "extensions": ["mdi"] - }, - "image/vnd.ms-photo": { - "source": "apache", - "extensions": ["wdp"] - }, - "image/vnd.net-fpx": { - "source": "iana", - "extensions": ["npx"] - }, - "image/vnd.radiance": { - "source": "iana" - }, - "image/vnd.sealed.png": { - "source": "iana" - }, - "image/vnd.sealedmedia.softseal.gif": { - "source": "iana" - }, - "image/vnd.sealedmedia.softseal.jpg": { - "source": "iana" - }, - "image/vnd.svf": { - "source": "iana" - }, - "image/vnd.tencent.tap": { - "source": "iana" - }, - "image/vnd.valve.source.texture": { - "source": "iana" - }, - "image/vnd.wap.wbmp": { - "source": "iana", - "extensions": ["wbmp"] - }, - "image/vnd.xiff": { - "source": "iana", - "extensions": ["xif"] - }, - "image/vnd.zbrush.pcx": { - "source": "iana" - }, - "image/webp": { - "source": "apache", - "extensions": ["webp"] - }, - "image/wmf": { - "source": "iana" - }, - "image/x-3ds": { - "source": "apache", - "extensions": ["3ds"] - }, - "image/x-cmu-raster": { - "source": "apache", - "extensions": ["ras"] - }, - "image/x-cmx": { - "source": "apache", - "extensions": ["cmx"] - }, - "image/x-freehand": { - "source": "apache", - "extensions": ["fh","fhc","fh4","fh5","fh7"] - }, - "image/x-icon": { - "source": "apache", - "compressible": true, - "extensions": ["ico"] - }, - "image/x-jng": { - "source": "nginx", - "extensions": ["jng"] - }, - "image/x-mrsid-image": { - "source": "apache", - "extensions": ["sid"] - }, - "image/x-ms-bmp": { - "source": "nginx", - "compressible": true, - "extensions": ["bmp"] - }, - "image/x-pcx": { - "source": "apache", - "extensions": ["pcx"] - }, - "image/x-pict": { - "source": "apache", - "extensions": ["pic","pct"] - }, - "image/x-portable-anymap": { - "source": "apache", - "extensions": ["pnm"] - }, - "image/x-portable-bitmap": { - "source": "apache", - "extensions": ["pbm"] - }, - "image/x-portable-graymap": { - "source": "apache", - "extensions": ["pgm"] - }, - "image/x-portable-pixmap": { - "source": "apache", - "extensions": ["ppm"] - }, - "image/x-rgb": { - "source": "apache", - "extensions": ["rgb"] - }, - "image/x-tga": { - "source": "apache", - "extensions": ["tga"] - }, - "image/x-xbitmap": { - "source": "apache", - "extensions": ["xbm"] - }, - "image/x-xcf": { - "compressible": false - }, - "image/x-xpixmap": { - "source": "apache", - "extensions": ["xpm"] - }, - "image/x-xwindowdump": { - "source": "apache", - "extensions": ["xwd"] - }, - "message/cpim": { - "source": "iana" - }, - "message/delivery-status": { - "source": "iana" - }, - "message/disposition-notification": { - "source": "iana" - }, - "message/external-body": { - "source": "iana" - }, - "message/feedback-report": { - "source": "iana" - }, - "message/global": { - "source": "iana" - }, - "message/global-delivery-status": { - "source": "iana" - }, - "message/global-disposition-notification": { - "source": "iana" - }, - "message/global-headers": { - "source": "iana" - }, - "message/http": { - "source": "iana", - "compressible": false - }, - "message/imdn+xml": { - "source": "iana", - "compressible": true - }, - "message/news": { - "source": "iana" - }, - "message/partial": { - "source": "iana", - "compressible": false - }, - "message/rfc822": { - "source": "iana", - "compressible": true, - "extensions": ["eml","mime"] - }, - "message/s-http": { - "source": "iana" - }, - "message/sip": { - "source": "iana" - }, - "message/sipfrag": { - "source": "iana" - }, - "message/tracking-status": { - "source": "iana" - }, - "message/vnd.si.simp": { - "source": "iana" - }, - "message/vnd.wfa.wsc": { - "source": "iana" - }, - "model/gltf+json": { - "source": "iana", - "compressible": true - }, - "model/iges": { - "source": "iana", - "compressible": false, - "extensions": ["igs","iges"] - }, - "model/mesh": { - "source": "iana", - "compressible": false, - "extensions": ["msh","mesh","silo"] - }, - "model/vnd.collada+xml": { - "source": "iana", - "extensions": ["dae"] - }, - "model/vnd.dwf": { - "source": "iana", - "extensions": ["dwf"] - }, - "model/vnd.flatland.3dml": { - "source": "iana" - }, - "model/vnd.gdl": { - "source": "iana", - "extensions": ["gdl"] - }, - "model/vnd.gs-gdl": { - "source": "apache" - }, - "model/vnd.gs.gdl": { - "source": "iana" - }, - "model/vnd.gtw": { - "source": "iana", - "extensions": ["gtw"] - }, - "model/vnd.moml+xml": { - "source": "iana" - }, - "model/vnd.mts": { - "source": "iana", - "extensions": ["mts"] - }, - "model/vnd.opengex": { - "source": "iana" - }, - "model/vnd.parasolid.transmit.binary": { - "source": "iana" - }, - "model/vnd.parasolid.transmit.text": { - "source": "iana" - }, - "model/vnd.rosette.annotated-data-model": { - "source": "iana" - }, - "model/vnd.valve.source.compiled-map": { - "source": "iana" - }, - "model/vnd.vtu": { - "source": "iana", - "extensions": ["vtu"] - }, - "model/vrml": { - "source": "iana", - "compressible": false, - "extensions": ["wrl","vrml"] - }, - "model/x3d+binary": { - "source": "apache", - "compressible": false, - "extensions": ["x3db","x3dbz"] - }, - "model/x3d+fastinfoset": { - "source": "iana" - }, - "model/x3d+vrml": { - "source": "apache", - "compressible": false, - "extensions": ["x3dv","x3dvz"] - }, - "model/x3d+xml": { - "source": "iana", - "compressible": true, - "extensions": ["x3d","x3dz"] - }, - "model/x3d-vrml": { - "source": "iana" - }, - "multipart/alternative": { - "source": "iana", - "compressible": false - }, - "multipart/appledouble": { - "source": "iana" - }, - "multipart/byteranges": { - "source": "iana" - }, - "multipart/digest": { - "source": "iana" - }, - "multipart/encrypted": { - "source": "iana", - "compressible": false - }, - "multipart/form-data": { - "source": "iana", - "compressible": false - }, - "multipart/header-set": { - "source": "iana" - }, - "multipart/mixed": { - "source": "iana", - "compressible": false - }, - "multipart/parallel": { - "source": "iana" - }, - "multipart/related": { - "source": "iana", - "compressible": false - }, - "multipart/report": { - "source": "iana" - }, - "multipart/signed": { - "source": "iana", - "compressible": false - }, - "multipart/voice-message": { - "source": "iana" - }, - "multipart/x-mixed-replace": { - "source": "iana" - }, - "text/1d-interleaved-parityfec": { - "source": "iana" - }, - "text/cache-manifest": { - "source": "iana", - "compressible": true, - "extensions": ["appcache","manifest"] - }, - "text/calendar": { - "source": "iana", - "extensions": ["ics","ifb"] - }, - "text/calender": { - "compressible": true - }, - "text/cmd": { - "compressible": true - }, - "text/coffeescript": { - "extensions": ["coffee","litcoffee"] - }, - "text/css": { - "source": "iana", - "compressible": true, - "extensions": ["css"] - }, - "text/csv": { - "source": "iana", - "compressible": true, - "extensions": ["csv"] - }, - "text/csv-schema": { - "source": "iana" - }, - "text/directory": { - "source": "iana" - }, - "text/dns": { - "source": "iana" - }, - "text/ecmascript": { - "source": "iana" - }, - "text/encaprtp": { - "source": "iana" - }, - "text/enriched": { - "source": "iana" - }, - "text/fwdred": { - "source": "iana" - }, - "text/grammar-ref-list": { - "source": "iana" - }, - "text/hjson": { - "extensions": ["hjson"] - }, - "text/html": { - "source": "iana", - "compressible": true, - "extensions": ["html","htm","shtml"] - }, - "text/jade": { - "extensions": ["jade"] - }, - "text/javascript": { - "source": "iana", - "compressible": true - }, - "text/jcr-cnd": { - "source": "iana" - }, - "text/jsx": { - "compressible": true, - "extensions": ["jsx"] - }, - "text/less": { - "extensions": ["less"] - }, - "text/markdown": { - "source": "iana" - }, - "text/mathml": { - "source": "nginx", - "extensions": ["mml"] - }, - "text/mizar": { - "source": "iana" - }, - "text/n3": { - "source": "iana", - "compressible": true, - "extensions": ["n3"] - }, - "text/parameters": { - "source": "iana" - }, - "text/parityfec": { - "source": "iana" - }, - "text/plain": { - "source": "iana", - "compressible": true, - "extensions": ["txt","text","conf","def","list","log","in","ini"] - }, - "text/provenance-notation": { - "source": "iana" - }, - "text/prs.fallenstein.rst": { - "source": "iana" - }, - "text/prs.lines.tag": { - "source": "iana", - "extensions": ["dsc"] - }, - "text/prs.prop.logic": { - "source": "iana" - }, - "text/raptorfec": { - "source": "iana" - }, - "text/red": { - "source": "iana" - }, - "text/rfc822-headers": { - "source": "iana" - }, - "text/richtext": { - "source": "iana", - "compressible": true, - "extensions": ["rtx"] - }, - "text/rtf": { - "source": "iana", - "compressible": true, - "extensions": ["rtf"] - }, - "text/rtp-enc-aescm128": { - "source": "iana" - }, - "text/rtploopback": { - "source": "iana" - }, - "text/rtx": { - "source": "iana" - }, - "text/sgml": { - "source": "iana", - "extensions": ["sgml","sgm"] - }, - "text/slim": { - "extensions": ["slim","slm"] - }, - "text/stylus": { - "extensions": ["stylus","styl"] - }, - "text/t140": { - "source": "iana" - }, - "text/tab-separated-values": { - "source": "iana", - "compressible": true, - "extensions": ["tsv"] - }, - "text/troff": { - "source": "iana", - "extensions": ["t","tr","roff","man","me","ms"] - }, - "text/turtle": { - "source": "iana", - "extensions": ["ttl"] - }, - "text/ulpfec": { - "source": "iana" - }, - "text/uri-list": { - "source": "iana", - "compressible": true, - "extensions": ["uri","uris","urls"] - }, - "text/vcard": { - "source": "iana", - "compressible": true, - "extensions": ["vcard"] - }, - "text/vnd.a": { - "source": "iana" - }, - "text/vnd.abc": { - "source": "iana" - }, - "text/vnd.ascii-art": { - "source": "iana" - }, - "text/vnd.curl": { - "source": "iana", - "extensions": ["curl"] - }, - "text/vnd.curl.dcurl": { - "source": "apache", - "extensions": ["dcurl"] - }, - "text/vnd.curl.mcurl": { - "source": "apache", - "extensions": ["mcurl"] - }, - "text/vnd.curl.scurl": { - "source": "apache", - "extensions": ["scurl"] - }, - "text/vnd.debian.copyright": { - "source": "iana" - }, - "text/vnd.dmclientscript": { - "source": "iana" - }, - "text/vnd.dvb.subtitle": { - "source": "iana", - "extensions": ["sub"] - }, - "text/vnd.esmertec.theme-descriptor": { - "source": "iana" - }, - "text/vnd.fly": { - "source": "iana", - "extensions": ["fly"] - }, - "text/vnd.fmi.flexstor": { - "source": "iana", - "extensions": ["flx"] - }, - "text/vnd.graphviz": { - "source": "iana", - "extensions": ["gv"] - }, - "text/vnd.in3d.3dml": { - "source": "iana", - "extensions": ["3dml"] - }, - "text/vnd.in3d.spot": { - "source": "iana", - "extensions": ["spot"] - }, - "text/vnd.iptc.newsml": { - "source": "iana" - }, - "text/vnd.iptc.nitf": { - "source": "iana" - }, - "text/vnd.latex-z": { - "source": "iana" - }, - "text/vnd.motorola.reflex": { - "source": "iana" - }, - "text/vnd.ms-mediapackage": { - "source": "iana" - }, - "text/vnd.net2phone.commcenter.command": { - "source": "iana" - }, - "text/vnd.radisys.msml-basic-layout": { - "source": "iana" - }, - "text/vnd.si.uricatalogue": { - "source": "iana" - }, - "text/vnd.sun.j2me.app-descriptor": { - "source": "iana", - "extensions": ["jad"] - }, - "text/vnd.trolltech.linguist": { - "source": "iana" - }, - "text/vnd.wap.si": { - "source": "iana" - }, - "text/vnd.wap.sl": { - "source": "iana" - }, - "text/vnd.wap.wml": { - "source": "iana", - "extensions": ["wml"] - }, - "text/vnd.wap.wmlscript": { - "source": "iana", - "extensions": ["wmls"] - }, - "text/vtt": { - "charset": "UTF-8", - "compressible": true, - "extensions": ["vtt"] - }, - "text/x-asm": { - "source": "apache", - "extensions": ["s","asm"] - }, - "text/x-c": { - "source": "apache", - "extensions": ["c","cc","cxx","cpp","h","hh","dic"] - }, - "text/x-component": { - "source": "nginx", - "extensions": ["htc"] - }, - "text/x-fortran": { - "source": "apache", - "extensions": ["f","for","f77","f90"] - }, - "text/x-gwt-rpc": { - "compressible": true - }, - "text/x-handlebars-template": { - "extensions": ["hbs"] - }, - "text/x-java-source": { - "source": "apache", - "extensions": ["java"] - }, - "text/x-jquery-tmpl": { - "compressible": true - }, - "text/x-lua": { - "extensions": ["lua"] - }, - "text/x-markdown": { - "compressible": true, - "extensions": ["markdown","md","mkd"] - }, - "text/x-nfo": { - "source": "apache", - "extensions": ["nfo"] - }, - "text/x-opml": { - "source": "apache", - "extensions": ["opml"] - }, - "text/x-pascal": { - "source": "apache", - "extensions": ["p","pas"] - }, - "text/x-processing": { - "compressible": true, - "extensions": ["pde"] - }, - "text/x-sass": { - "extensions": ["sass"] - }, - "text/x-scss": { - "extensions": ["scss"] - }, - "text/x-setext": { - "source": "apache", - "extensions": ["etx"] - }, - "text/x-sfv": { - "source": "apache", - "extensions": ["sfv"] - }, - "text/x-suse-ymp": { - "compressible": true, - "extensions": ["ymp"] - }, - "text/x-uuencode": { - "source": "apache", - "extensions": ["uu"] - }, - "text/x-vcalendar": { - "source": "apache", - "extensions": ["vcs"] - }, - "text/x-vcard": { - "source": "apache", - "extensions": ["vcf"] - }, - "text/xml": { - "source": "iana", - "compressible": true, - "extensions": ["xml"] - }, - "text/xml-external-parsed-entity": { - "source": "iana" - }, - "text/yaml": { - "extensions": ["yaml","yml"] - }, - "video/1d-interleaved-parityfec": { - "source": "apache" - }, - "video/3gpp": { - "source": "apache", - "extensions": ["3gp","3gpp"] - }, - "video/3gpp-tt": { - "source": "apache" - }, - "video/3gpp2": { - "source": "apache", - "extensions": ["3g2"] - }, - "video/bmpeg": { - "source": "apache" - }, - "video/bt656": { - "source": "apache" - }, - "video/celb": { - "source": "apache" - }, - "video/dv": { - "source": "apache" - }, - "video/encaprtp": { - "source": "apache" - }, - "video/h261": { - "source": "apache", - "extensions": ["h261"] - }, - "video/h263": { - "source": "apache", - "extensions": ["h263"] - }, - "video/h263-1998": { - "source": "apache" - }, - "video/h263-2000": { - "source": "apache" - }, - "video/h264": { - "source": "apache", - "extensions": ["h264"] - }, - "video/h264-rcdo": { - "source": "apache" - }, - "video/h264-svc": { - "source": "apache" - }, - "video/h265": { - "source": "apache" - }, - "video/iso.segment": { - "source": "apache" - }, - "video/jpeg": { - "source": "apache", - "extensions": ["jpgv"] - }, - "video/jpeg2000": { - "source": "apache" - }, - "video/jpm": { - "source": "apache", - "extensions": ["jpm","jpgm"] - }, - "video/mj2": { - "source": "apache", - "extensions": ["mj2","mjp2"] - }, - "video/mp1s": { - "source": "apache" - }, - "video/mp2p": { - "source": "apache" - }, - "video/mp2t": { - "source": "apache", - "extensions": ["ts"] - }, - "video/mp4": { - "source": "apache", - "compressible": false, - "extensions": ["mp4","mp4v","mpg4"] - }, - "video/mp4v-es": { - "source": "apache" - }, - "video/mpeg": { - "source": "apache", - "compressible": false, - "extensions": ["mpeg","mpg","mpe","m1v","m2v"] - }, - "video/mpeg4-generic": { - "source": "apache" - }, - "video/mpv": { - "source": "apache" - }, - "video/nv": { - "source": "apache" - }, - "video/ogg": { - "source": "apache", - "compressible": false, - "extensions": ["ogv"] - }, - "video/parityfec": { - "source": "apache" - }, - "video/pointer": { - "source": "apache" - }, - "video/quicktime": { - "source": "apache", - "compressible": false, - "extensions": ["qt","mov"] - }, - "video/raptorfec": { - "source": "apache" - }, - "video/raw": { - "source": "apache" - }, - "video/rtp-enc-aescm128": { - "source": "apache" - }, - "video/rtploopback": { - "source": "apache" - }, - "video/rtx": { - "source": "apache" - }, - "video/smpte292m": { - "source": "apache" - }, - "video/ulpfec": { - "source": "apache" - }, - "video/vc1": { - "source": "apache" - }, - "video/vnd.cctv": { - "source": "apache" - }, - "video/vnd.dece.hd": { - "source": "apache", - "extensions": ["uvh","uvvh"] - }, - "video/vnd.dece.mobile": { - "source": "apache", - "extensions": ["uvm","uvvm"] - }, - "video/vnd.dece.mp4": { - "source": "apache" - }, - "video/vnd.dece.pd": { - "source": "apache", - "extensions": ["uvp","uvvp"] - }, - "video/vnd.dece.sd": { - "source": "apache", - "extensions": ["uvs","uvvs"] - }, - "video/vnd.dece.video": { - "source": "apache", - "extensions": ["uvv","uvvv"] - }, - "video/vnd.directv.mpeg": { - "source": "apache" - }, - "video/vnd.directv.mpeg-tts": { - "source": "apache" - }, - "video/vnd.dlna.mpeg-tts": { - "source": "apache" - }, - "video/vnd.dvb.file": { - "source": "apache", - "extensions": ["dvb"] - }, - "video/vnd.fvt": { - "source": "apache", - "extensions": ["fvt"] - }, - "video/vnd.hns.video": { - "source": "apache" - }, - "video/vnd.iptvforum.1dparityfec-1010": { - "source": "apache" - }, - "video/vnd.iptvforum.1dparityfec-2005": { - "source": "apache" - }, - "video/vnd.iptvforum.2dparityfec-1010": { - "source": "apache" - }, - "video/vnd.iptvforum.2dparityfec-2005": { - "source": "apache" - }, - "video/vnd.iptvforum.ttsavc": { - "source": "apache" - }, - "video/vnd.iptvforum.ttsmpeg2": { - "source": "apache" - }, - "video/vnd.motorola.video": { - "source": "apache" - }, - "video/vnd.motorola.videop": { - "source": "apache" - }, - "video/vnd.mpegurl": { - "source": "apache", - "extensions": ["mxu","m4u"] - }, - "video/vnd.ms-playready.media.pyv": { - "source": "apache", - "extensions": ["pyv"] - }, - "video/vnd.nokia.interleaved-multimedia": { - "source": "apache" - }, - "video/vnd.nokia.videovoip": { - "source": "apache" - }, - "video/vnd.objectvideo": { - "source": "apache" - }, - "video/vnd.radgamettools.bink": { - "source": "apache" - }, - "video/vnd.radgamettools.smacker": { - "source": "apache" - }, - "video/vnd.sealed.mpeg1": { - "source": "apache" - }, - "video/vnd.sealed.mpeg4": { - "source": "apache" - }, - "video/vnd.sealed.swf": { - "source": "apache" - }, - "video/vnd.sealedmedia.softseal.mov": { - "source": "apache" - }, - "video/vnd.uvvu.mp4": { - "source": "apache", - "extensions": ["uvu","uvvu"] - }, - "video/vnd.vivo": { - "source": "apache", - "extensions": ["viv"] - }, - "video/vp8": { - "source": "apache" - }, - "video/webm": { - "source": "apache", - "compressible": false, - "extensions": ["webm"] - }, - "video/x-f4v": { - "source": "apache", - "extensions": ["f4v"] - }, - "video/x-fli": { - "source": "apache", - "extensions": ["fli"] - }, - "video/x-flv": { - "source": "apache", - "compressible": false, - "extensions": ["flv"] - }, - "video/x-m4v": { - "source": "apache", - "extensions": ["m4v"] - }, - "video/x-matroska": { - "source": "apache", - "compressible": false, - "extensions": ["mkv","mk3d","mks"] - }, - "video/x-mng": { - "source": "apache", - "extensions": ["mng"] - }, - "video/x-ms-asf": { - "source": "apache", - "extensions": ["asf","asx"] - }, - "video/x-ms-vob": { - "source": "apache", - "extensions": ["vob"] - }, - "video/x-ms-wm": { - "source": "apache", - "extensions": ["wm"] - }, - "video/x-ms-wmv": { - "source": "apache", - "compressible": false, - "extensions": ["wmv"] - }, - "video/x-ms-wmx": { - "source": "apache", - "extensions": ["wmx"] - }, - "video/x-ms-wvx": { - "source": "apache", - "extensions": ["wvx"] - }, - "video/x-msvideo": { - "source": "apache", - "extensions": ["avi"] - }, - "video/x-sgi-movie": { - "source": "apache", - "extensions": ["movie"] - }, - "video/x-smv": { - "source": "apache", - "extensions": ["smv"] - }, - "x-conference/x-cooltalk": { - "source": "apache", - "extensions": ["ice"] - }, - "x-shader/x-fragment": { - "compressible": true - }, - "x-shader/x-vertex": { - "compressible": true - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/mime-db/index.js b/fundamentals/bug-challenge-es6/node_modules/mime-db/index.js deleted file mode 100644 index 551031f69..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mime-db/index.js +++ /dev/null @@ -1,11 +0,0 @@ -/*! - * mime-db - * Copyright(c) 2014 Jonathan Ong - * MIT Licensed - */ - -/** - * Module exports. - */ - -module.exports = require('./db.json') diff --git a/fundamentals/bug-challenge-es6/node_modules/mime-db/package.json b/fundamentals/bug-challenge-es6/node_modules/mime-db/package.json deleted file mode 100644 index 029ef4b12..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mime-db/package.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "_args": [ - [ - "mime-db@~1.25.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/mime-types" - ] - ], - "_from": "mime-db@>=1.25.0 <1.26.0", - "_id": "mime-db@1.25.0", - "_inCache": true, - "_installable": true, - "_location": "/mime-db", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/mime-db-1.25.0.tgz_1478915345127_0.22604371700435877" - }, - "_npmUser": { - "email": "doug@somethingdoug.com", - "name": "dougwilson" - }, - "_npmVersion": "1.4.28", - "_phantomChildren": {}, - "_requested": { - "name": "mime-db", - "raw": "mime-db@~1.25.0", - "rawSpec": "~1.25.0", - "scope": null, - "spec": ">=1.25.0 <1.26.0", - "type": "range" - }, - "_requiredBy": [ - "/mime-types" - ], - "_resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", - "_shasum": "c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392", - "_shrinkwrap": null, - "_spec": "mime-db@~1.25.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/mime-types", - "bugs": { - "url": "https://github.com/jshttp/mime-db/issues" - }, - "contributors": [ - { - "email": "doug@somethingdoug.com", - "name": "Douglas Christopher Wilson" - }, - { - "email": "me@jongleberry.com", - "name": "Jonathan Ong", - "url": "http://jongleberry.com" - }, - { - "email": "robert@broofa.com", - "name": "Robert Kieffer", - "url": "http://github.com/broofa" - } - ], - "dependencies": {}, - "description": "Media Type Database", - "devDependencies": { - "bluebird": "3.4.6", - "co": "4.6.0", - "cogent": "1.0.1", - "csv-parse": "1.1.7", - "eslint": "3.9.1", - "eslint-config-standard": "6.2.1", - "eslint-plugin-promise": "3.3.0", - "eslint-plugin-standard": "2.0.1", - "gnode": "0.1.2", - "istanbul": "0.4.5", - "mocha": "1.21.5", - "raw-body": "2.1.7", - "stream-to-array": "2.3.0" - }, - "directories": {}, - "dist": { - "shasum": "c18dbd7c73a5dbf6f44a024dc0d165a1e7b1c392", - "tarball": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "README.md", - "db.json", - "index.js" - ], - "gitHead": "9a2c710e347b4a7f030aae0d15afc0a06d1c8a37", - "homepage": "https://github.com/jshttp/mime-db", - "keywords": [ - "mime", - "db", - "type", - "types", - "database", - "charset", - "charsets" - ], - "license": "MIT", - "maintainers": [ - { - "email": "doug@somethingdoug.com", - "name": "dougwilson" - }, - { - "email": "jonathanrichardong@gmail.com", - "name": "jongleberry" - } - ], - "name": "mime-db", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/mime-db.git" - }, - "scripts": { - "build": "node scripts/build", - "fetch": "gnode scripts/fetch-apache && gnode scripts/fetch-iana && gnode scripts/fetch-nginx", - "lint": "eslint .", - "test": "mocha --reporter spec --bail --check-leaks test/", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", - "update": "npm run fetch && npm run build" - }, - "version": "1.25.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/mime-types/HISTORY.md b/fundamentals/bug-challenge-es6/node_modules/mime-types/HISTORY.md deleted file mode 100644 index 31b24e0f4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mime-types/HISTORY.md +++ /dev/null @@ -1,210 +0,0 @@ -2.1.13 / 2016-11-18 -=================== - - * deps: mime-db@~1.25.0 - - Add new mime types - -2.1.12 / 2016-09-18 -=================== - - * deps: mime-db@~1.24.0 - - Add new mime types - - Add `audio/mp3` - -2.1.11 / 2016-05-01 -=================== - - * deps: mime-db@~1.23.0 - - Add new mime types - -2.1.10 / 2016-02-15 -=================== - - * deps: mime-db@~1.22.0 - - Add new mime types - - Fix extension of `application/dash+xml` - - Update primary extension for `audio/mp4` - -2.1.9 / 2016-01-06 -================== - - * deps: mime-db@~1.21.0 - - Add new mime types - -2.1.8 / 2015-11-30 -================== - - * deps: mime-db@~1.20.0 - - Add new mime types - -2.1.7 / 2015-09-20 -================== - - * deps: mime-db@~1.19.0 - - Add new mime types - -2.1.6 / 2015-09-03 -================== - - * deps: mime-db@~1.18.0 - - Add new mime types - -2.1.5 / 2015-08-20 -================== - - * deps: mime-db@~1.17.0 - - Add new mime types - -2.1.4 / 2015-07-30 -================== - - * deps: mime-db@~1.16.0 - - Add new mime types - -2.1.3 / 2015-07-13 -================== - - * deps: mime-db@~1.15.0 - - Add new mime types - -2.1.2 / 2015-06-25 -================== - - * deps: mime-db@~1.14.0 - - Add new mime types - -2.1.1 / 2015-06-08 -================== - - * perf: fix deopt during mapping - -2.1.0 / 2015-06-07 -================== - - * Fix incorrectly treating extension-less file name as extension - - i.e. `'path/to/json'` will no longer return `application/json` - * Fix `.charset(type)` to accept parameters - * Fix `.charset(type)` to match case-insensitive - * Improve generation of extension to MIME mapping - * Refactor internals for readability and no argument reassignment - * Prefer `application/*` MIME types from the same source - * Prefer any type over `application/octet-stream` - * deps: mime-db@~1.13.0 - - Add nginx as a source - - Add new mime types - -2.0.14 / 2015-06-06 -=================== - - * deps: mime-db@~1.12.0 - - Add new mime types - -2.0.13 / 2015-05-31 -=================== - - * deps: mime-db@~1.11.0 - - Add new mime types - -2.0.12 / 2015-05-19 -=================== - - * deps: mime-db@~1.10.0 - - Add new mime types - -2.0.11 / 2015-05-05 -=================== - - * deps: mime-db@~1.9.1 - - Add new mime types - -2.0.10 / 2015-03-13 -=================== - - * deps: mime-db@~1.8.0 - - Add new mime types - -2.0.9 / 2015-02-09 -================== - - * deps: mime-db@~1.7.0 - - Add new mime types - - Community extensions ownership transferred from `node-mime` - -2.0.8 / 2015-01-29 -================== - - * deps: mime-db@~1.6.0 - - Add new mime types - -2.0.7 / 2014-12-30 -================== - - * deps: mime-db@~1.5.0 - - Add new mime types - - Fix various invalid MIME type entries - -2.0.6 / 2014-12-30 -================== - - * deps: mime-db@~1.4.0 - - Add new mime types - - Fix various invalid MIME type entries - - Remove example template MIME types - -2.0.5 / 2014-12-29 -================== - - * deps: mime-db@~1.3.1 - - Fix missing extensions - -2.0.4 / 2014-12-10 -================== - - * deps: mime-db@~1.3.0 - - Add new mime types - -2.0.3 / 2014-11-09 -================== - - * deps: mime-db@~1.2.0 - - Add new mime types - -2.0.2 / 2014-09-28 -================== - - * deps: mime-db@~1.1.0 - - Add new mime types - - Add additional compressible - - Update charsets - -2.0.1 / 2014-09-07 -================== - - * Support Node.js 0.6 - -2.0.0 / 2014-09-02 -================== - - * Use `mime-db` - * Remove `.define()` - -1.0.2 / 2014-08-04 -================== - - * Set charset=utf-8 for `text/javascript` - -1.0.1 / 2014-06-24 -================== - - * Add `text/jsx` type - -1.0.0 / 2014-05-12 -================== - - * Return `false` for unknown types - * Set charset=utf-8 for `application/json` - -0.1.0 / 2014-05-02 -================== - - * Initial release diff --git a/fundamentals/bug-challenge-es6/node_modules/mime-types/LICENSE b/fundamentals/bug-challenge-es6/node_modules/mime-types/LICENSE deleted file mode 100644 index 06166077b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mime-types/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -(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/fundamentals/bug-challenge-es6/node_modules/mime-types/README.md b/fundamentals/bug-challenge-es6/node_modules/mime-types/README.md deleted file mode 100644 index e77d615d3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mime-types/README.md +++ /dev/null @@ -1,103 +0,0 @@ -# mime-types - -[![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] - -The ultimate javascript content-type utility. - -Similar to [node-mime](https://github.com/broofa/node-mime), except: - -- __No fallbacks.__ Instead of naively returning the first available type, `mime-types` simply returns `false`, - so do `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. -- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. -- Additional mime types are added such as jade and stylus via [mime-db](https://github.com/jshttp/mime-db) -- No `.define()` functionality - -Otherwise, the API is compatible. - -## Install - -```sh -$ npm install mime-types -``` - -## Adding Types - -All mime types are based on [mime-db](https://github.com/jshttp/mime-db), -so open a PR there if you'd like to add mime types. - -## API - -```js -var mime = require('mime-types') -``` - -All functions return `false` if input is invalid or not found. - -### mime.lookup(path) - -Lookup the content-type associated with a file. - -```js -mime.lookup('json') // 'application/json' -mime.lookup('.md') // 'text/x-markdown' -mime.lookup('file.html') // 'text/html' -mime.lookup('folder/file.js') // 'application/javascript' -mime.lookup('folder/.htaccess') // false - -mime.lookup('cats') // false -``` - -### mime.contentType(type) - -Create a full content-type header given a content-type or extension. - -```js -mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' -mime.contentType('file.json') // 'application/json; charset=utf-8' - -// from a full path -mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' -``` - -### mime.extension(type) - -Get the default extension for a content-type. - -```js -mime.extension('application/octet-stream') // 'bin' -``` - -### mime.charset(type) - -Lookup the implied default charset of a content-type. - -```js -mime.charset('text/x-markdown') // 'UTF-8' -``` - -### var type = mime.types[extension] - -A map of content-types by extension. - -### [extensions...] = mime.extensions[type] - -A map of extensions by content-type. - -## License - -[MIT](LICENSE) - -[npm-image]: https://img.shields.io/npm/v/mime-types.svg -[npm-url]: https://npmjs.org/package/mime-types -[node-version-image]: https://img.shields.io/node/v/mime-types.svg -[node-version-url]: https://nodejs.org/en/download/ -[travis-image]: https://img.shields.io/travis/jshttp/mime-types/master.svg -[travis-url]: https://travis-ci.org/jshttp/mime-types -[coveralls-image]: https://img.shields.io/coveralls/jshttp/mime-types/master.svg -[coveralls-url]: https://coveralls.io/r/jshttp/mime-types -[downloads-image]: https://img.shields.io/npm/dm/mime-types.svg -[downloads-url]: https://npmjs.org/package/mime-types diff --git a/fundamentals/bug-challenge-es6/node_modules/mime-types/index.js b/fundamentals/bug-challenge-es6/node_modules/mime-types/index.js deleted file mode 100644 index 9226ca584..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mime-types/index.js +++ /dev/null @@ -1,188 +0,0 @@ -/*! - * mime-types - * Copyright(c) 2014 Jonathan Ong - * Copyright(c) 2015 Douglas Christopher Wilson - * MIT Licensed - */ - -'use strict' - -/** - * Module dependencies. - * @private - */ - -var db = require('mime-db') -var extname = require('path').extname - -/** - * Module variables. - * @private - */ - -var extractTypeRegExp = /^\s*([^;\s]*)(?:;|\s|$)/ -var textTypeRegExp = /^text\//i - -/** - * Module exports. - * @public - */ - -exports.charset = charset -exports.charsets = { lookup: charset } -exports.contentType = contentType -exports.extension = extension -exports.extensions = Object.create(null) -exports.lookup = lookup -exports.types = Object.create(null) - -// Populate the extensions/types maps -populateMaps(exports.extensions, exports.types) - -/** - * Get the default charset for a MIME type. - * - * @param {string} type - * @return {boolean|string} - */ - -function charset (type) { - if (!type || typeof type !== 'string') { - return false - } - - // TODO: use media-typer - var match = extractTypeRegExp.exec(type) - var mime = match && db[match[1].toLowerCase()] - - if (mime && mime.charset) { - return mime.charset - } - - // default text/* to utf-8 - if (match && textTypeRegExp.test(match[1])) { - return 'UTF-8' - } - - return false -} - -/** - * Create a full Content-Type header given a MIME type or extension. - * - * @param {string} str - * @return {boolean|string} - */ - -function contentType (str) { - // TODO: should this even be in this module? - if (!str || typeof str !== 'string') { - return false - } - - var mime = str.indexOf('/') === -1 - ? exports.lookup(str) - : str - - if (!mime) { - return false - } - - // TODO: use content-type or other module - if (mime.indexOf('charset') === -1) { - var charset = exports.charset(mime) - if (charset) mime += '; charset=' + charset.toLowerCase() - } - - return mime -} - -/** - * Get the default extension for a MIME type. - * - * @param {string} type - * @return {boolean|string} - */ - -function extension (type) { - if (!type || typeof type !== 'string') { - return false - } - - // TODO: use media-typer - var match = extractTypeRegExp.exec(type) - - // get extensions - var exts = match && exports.extensions[match[1].toLowerCase()] - - if (!exts || !exts.length) { - return false - } - - return exts[0] -} - -/** - * Lookup the MIME type for a file path/extension. - * - * @param {string} path - * @return {boolean|string} - */ - -function lookup (path) { - if (!path || typeof path !== 'string') { - return false - } - - // get the extension ("ext" or ".ext" or full path) - var extension = extname('x.' + path) - .toLowerCase() - .substr(1) - - if (!extension) { - return false - } - - return exports.types[extension] || false -} - -/** - * Populate the extensions and types maps. - * @private - */ - -function populateMaps (extensions, types) { - // source preference (least -> most) - var preference = ['nginx', 'apache', undefined, 'iana'] - - Object.keys(db).forEach(function forEachMimeType (type) { - var mime = db[type] - var exts = mime.extensions - - if (!exts || !exts.length) { - return - } - - // mime -> extensions - extensions[type] = exts - - // extension -> mime - for (var i = 0; i < exts.length; i++) { - var extension = exts[i] - - if (types[extension]) { - var from = preference.indexOf(db[types[extension]].source) - var to = preference.indexOf(mime.source) - - if (types[extension] !== 'application/octet-stream' && - from > to || (from === to && types[extension].substr(0, 12) === 'application/')) { - // skip the remapping - continue - } - } - - // set the extension -> mime - types[extension] = type - } - }) -} diff --git a/fundamentals/bug-challenge-es6/node_modules/mime-types/package.json b/fundamentals/bug-challenge-es6/node_modules/mime-types/package.json deleted file mode 100644 index 6603d429c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mime-types/package.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "_args": [ - [ - "mime-types@~2.1.7", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request" - ] - ], - "_from": "mime-types@>=2.1.7 <2.2.0", - "_id": "mime-types@2.1.13", - "_inCache": true, - "_installable": true, - "_location": "/mime-types", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/mime-types-2.1.13.tgz_1479505166253_0.5666956284549087" - }, - "_npmUser": { - "email": "doug@somethingdoug.com", - "name": "dougwilson" - }, - "_npmVersion": "1.4.28", - "_phantomChildren": {}, - "_requested": { - "name": "mime-types", - "raw": "mime-types@~2.1.7", - "rawSpec": "~2.1.7", - "scope": null, - "spec": ">=2.1.7 <2.2.0", - "type": "range" - }, - "_requiredBy": [ - "/form-data", - "/request" - ], - "_resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", - "_shasum": "e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88", - "_shrinkwrap": null, - "_spec": "mime-types@~2.1.7", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request", - "bugs": { - "url": "https://github.com/jshttp/mime-types/issues" - }, - "contributors": [ - { - "email": "doug@somethingdoug.com", - "name": "Douglas Christopher Wilson" - }, - { - "email": "fishrock123@rocketmail.com", - "name": "Jeremiah Senkpiel", - "url": "https://searchbeam.jit.su" - }, - { - "email": "me@jongleberry.com", - "name": "Jonathan Ong", - "url": "http://jongleberry.com" - } - ], - "dependencies": { - "mime-db": "~1.25.0" - }, - "description": "The ultimate javascript content-type utility.", - "devDependencies": { - "eslint": "3.10.2", - "eslint-config-standard": "6.2.1", - "eslint-plugin-promise": "3.4.0", - "eslint-plugin-standard": "2.0.1", - "istanbul": "0.4.5", - "mocha": "1.21.5" - }, - "directories": {}, - "dist": { - "shasum": "e07aaa9c6c6b9a7ca3012c69003ad25a39e92a88", - "tarball": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz" - }, - "engines": { - "node": ">= 0.6" - }, - "files": [ - "HISTORY.md", - "LICENSE", - "index.js" - ], - "gitHead": "83e91a5aea93858bc95ec95a99309592cba0ffe3", - "homepage": "https://github.com/jshttp/mime-types", - "keywords": [ - "mime", - "types" - ], - "license": "MIT", - "maintainers": [ - { - "email": "doug@somethingdoug.com", - "name": "dougwilson" - }, - { - "email": "fishrock123@rocketmail.com", - "name": "fishrock123" - }, - { - "email": "jonathanrichardong@gmail.com", - "name": "jongleberry" - } - ], - "name": "mime-types", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jshttp/mime-types.git" - }, - "scripts": { - "lint": "eslint .", - "test": "mocha --reporter spec test/test.js", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot test/test.js", - "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter dot test/test.js" - }, - "version": "2.1.13" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/minimatch/LICENSE b/fundamentals/bug-challenge-es6/node_modules/minimatch/LICENSE deleted file mode 100644 index 19129e315..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimatch/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/minimatch/README.md b/fundamentals/bug-challenge-es6/node_modules/minimatch/README.md deleted file mode 100644 index ad72b8133..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimatch/README.md +++ /dev/null @@ -1,209 +0,0 @@ -# minimatch - -A minimal matching utility. - -[![Build Status](https://secure.travis-ci.org/isaacs/minimatch.svg)](http://travis-ci.org/isaacs/minimatch) - - -This is the matching library used internally by npm. - -It works by converting glob expressions into JavaScript `RegExp` -objects. - -## Usage - -```javascript -var minimatch = require("minimatch") - -minimatch("bar.foo", "*.foo") // true! -minimatch("bar.foo", "*.bar") // false! -minimatch("bar.foo", "*.+(bar|foo)", { debug: true }) // true, and noisy! -``` - -## Features - -Supports these glob features: - -* Brace Expansion -* Extended glob matching -* "Globstar" `**` matching - -See: - -* `man sh` -* `man bash` -* `man 3 fnmatch` -* `man 5 gitignore` - -## Minimatch Class - -Create a minimatch object by instantiating the `minimatch.Minimatch` class. - -```javascript -var Minimatch = require("minimatch").Minimatch -var mm = new Minimatch(pattern, options) -``` - -### Properties - -* `pattern` The original pattern the minimatch object represents. -* `options` The options supplied to the constructor. -* `set` A 2-dimensional array of regexp or string expressions. - Each row in the - array corresponds to a brace-expanded pattern. Each item in the row - corresponds to a single path-part. For example, the pattern - `{a,b/c}/d` would expand to a set of patterns like: - - [ [ a, d ] - , [ b, c, d ] ] - - If a portion of the pattern doesn't have any "magic" in it - (that is, it's something like `"foo"` rather than `fo*o?`), then it - will be left as a string rather than converted to a regular - expression. - -* `regexp` Created by the `makeRe` method. A single regular expression - expressing the entire pattern. This is useful in cases where you wish - to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled. -* `negate` True if the pattern is negated. -* `comment` True if the pattern is a comment. -* `empty` True if the pattern is `""`. - -### Methods - -* `makeRe` Generate the `regexp` member if necessary, and return it. - Will return `false` if the pattern is invalid. -* `match(fname)` Return true if the filename matches the pattern, or - false otherwise. -* `matchOne(fileArray, patternArray, partial)` Take a `/`-split - filename, and match it against a single row in the `regExpSet`. This - method is mainly for internal use, but is exposed so that it can be - used by a glob-walker that needs to avoid excessive filesystem calls. - -All other methods are internal, and will be called as necessary. - -### minimatch(path, pattern, options) - -Main export. Tests a path against the pattern using the options. - -```javascript -var isJS = minimatch(file, "*.js", { matchBase: true }) -``` - -### minimatch.filter(pattern, options) - -Returns a function that tests its -supplied argument, suitable for use with `Array.filter`. Example: - -```javascript -var javascripts = fileList.filter(minimatch.filter("*.js", {matchBase: true})) -``` - -### minimatch.match(list, pattern, options) - -Match against the list of -files, in the style of fnmatch or glob. If nothing is matched, and -options.nonull is set, then return a list containing the pattern itself. - -```javascript -var javascripts = minimatch.match(fileList, "*.js", {matchBase: true})) -``` - -### minimatch.makeRe(pattern, options) - -Make a regular expression object from the pattern. - -## Options - -All options are `false` by default. - -### debug - -Dump a ton of stuff to stderr. - -### nobrace - -Do not expand `{a,b}` and `{1..3}` brace sets. - -### noglobstar - -Disable `**` matching against multiple folder names. - -### dot - -Allow patterns to match filenames starting with a period, even if -the pattern does not explicitly have a period in that spot. - -Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot` -is set. - -### noext - -Disable "extglob" style patterns like `+(a|b)`. - -### nocase - -Perform a case-insensitive match. - -### nonull - -When a match is not found by `minimatch.match`, return a list containing -the pattern itself if this option is set. When not set, an empty list -is returned if there are no matches. - -### matchBase - -If set, then patterns without slashes will be matched -against the basename of the path if it contains slashes. For example, -`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`. - -### nocomment - -Suppress the behavior of treating `#` at the start of a pattern as a -comment. - -### nonegate - -Suppress the behavior of treating a leading `!` character as negation. - -### flipNegate - -Returns from negate expressions the same as if they were not negated. -(Ie, true on a hit, false on a miss.) - - -## Comparisons to other fnmatch/glob implementations - -While strict compliance with the existing standards is a worthwhile -goal, some discrepancies exist between minimatch and other -implementations, and are intentional. - -If the pattern starts with a `!` character, then it is negated. Set the -`nonegate` flag to suppress this behavior, and treat leading `!` -characters normally. This is perhaps relevant if you wish to start the -pattern with a negative extglob pattern like `!(a|B)`. Multiple `!` -characters at the start of a pattern will negate the pattern multiple -times. - -If a pattern starts with `#`, then it is treated as a comment, and -will not match anything. Use `\#` to match a literal `#` at the -start of a line, or set the `nocomment` flag to suppress this behavior. - -The double-star character `**` is supported by default, unless the -`noglobstar` flag is set. This is supported in the manner of bsdglob -and bash 4.1, where `**` only has special significance if it is the only -thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but -`a/**b` will not. - -If an escaped pattern has no matches, and the `nonull` flag is set, -then minimatch.match returns the pattern as-provided, rather than -interpreting the character escapes. For example, -`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than -`"*a?"`. This is akin to setting the `nullglob` option in bash, except -that it does not resolve escaped pattern characters. - -If brace expansion is not disabled, then it is performed before any -other interpretation of the glob pattern. Thus, a pattern like -`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded -**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are -checked for validity. Since those two are valid, matching proceeds. diff --git a/fundamentals/bug-challenge-es6/node_modules/minimatch/minimatch.js b/fundamentals/bug-challenge-es6/node_modules/minimatch/minimatch.js deleted file mode 100644 index 5b5f8cf44..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimatch/minimatch.js +++ /dev/null @@ -1,923 +0,0 @@ -module.exports = minimatch -minimatch.Minimatch = Minimatch - -var path = { sep: '/' } -try { - path = require('path') -} catch (er) {} - -var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} -var expand = require('brace-expansion') - -var plTypes = { - '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, - '?': { open: '(?:', close: ')?' }, - '+': { open: '(?:', close: ')+' }, - '*': { open: '(?:', close: ')*' }, - '@': { open: '(?:', close: ')' } -} - -// any single thing other than / -// don't need to escape / when using new RegExp() -var qmark = '[^/]' - -// * => any number of characters -var star = qmark + '*?' - -// ** when dots are allowed. Anything goes, except .. and . -// not (^ or / followed by one or two dots followed by $ or /), -// followed by anything, any number of times. -var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' - -// not a ^ or / followed by a dot, -// followed by anything, any number of times. -var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' - -// characters that need to be escaped in RegExp. -var reSpecials = charSet('().*{}+?[]^$\\!') - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split('').reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - a = a || {} - b = b || {} - var t = {} - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch - - var orig = minimatch - - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch -} - -function minimatch (p, pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - return false - } - - // "" only matches "" - if (pattern.trim() === '') return p === '' - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options) - } - - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - pattern = pattern.trim() - - // windows support: need to use /, not \ - if (path.sep !== '/') { - pattern = pattern.split(path.sep).join('/') - } - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.debug = function () {} - -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return - - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) this.debug = console.error - - this.debug(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - this.debug(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - this.debug(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return s.indexOf(false) === -1 - }) - - this.debug(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - var negate = false - var options = this.options - var negateOffset = 0 - - if (options.nonegate) return - - for (var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === '!' - ; i++) { - negate = !negate - negateOffset++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return braceExpand(pattern, options) -} - -Minimatch.prototype.braceExpand = braceExpand - -function braceExpand (pattern, options) { - if (!options) { - if (this instanceof Minimatch) { - options = this.options - } else { - options = {} - } - } - - pattern = typeof pattern === 'undefined' - ? this.pattern : pattern - - if (typeof pattern === 'undefined') { - throw new TypeError('undefined pattern') - } - - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - - return expand(pattern) -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - if (pattern.length > 1024 * 64) { - throw new TypeError('pattern is too long') - } - - var options = this.options - - // shortcuts - if (!options.noglobstar && pattern === '**') return GLOBSTAR - if (pattern === '') return '' - - var re = '' - var hasMagic = !!options.nocase - var escaping = false - // ? => one single character - var patternListStack = [] - var negativeLists = [] - var stateChar - var inClass = false - var reClassStart = -1 - var classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - var patternStart = pattern.charAt(0) === '.' ? '' // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' - : '(?!\\.)' - var self = this - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case '*': - re += star - hasMagic = true - break - case '?': - re += qmark - hasMagic = true - break - default: - re += '\\' + stateChar - break - } - self.debug('clearStateChar %j %j', stateChar, re) - stateChar = false - } - } - - for (var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i++) { - this.debug('%s\t%s %s %j', pattern, i, re, c) - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += '\\' + c - escaping = false - continue - } - - switch (c) { - case '/': - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - - case '\\': - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case '?': - case '*': - case '+': - case '@': - case '!': - this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class') - if (c === '!' && i === classStart + 1) c = '^' - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar) - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case '(': - if (inClass) { - re += '(' - continue - } - - if (!stateChar) { - re += '\\(' - continue - } - - patternListStack.push({ - type: stateChar, - start: i - 1, - reStart: re.length, - open: plTypes[stateChar].open, - close: plTypes[stateChar].close - }) - // negation is (?:(?!js)[^/]*) - re += stateChar === '!' ? '(?:(?!(?:' : '(?:' - this.debug('plType %j %j', stateChar, re) - stateChar = false - continue - - case ')': - if (inClass || !patternListStack.length) { - re += '\\)' - continue - } - - clearStateChar() - hasMagic = true - var pl = patternListStack.pop() - // negation is (?:(?!js)[^/]*) - // The others are (?:) - re += pl.close - if (pl.type === '!') { - negativeLists.push(pl) - } - pl.reEnd = re.length - continue - - case '|': - if (inClass || !patternListStack.length || escaping) { - re += '\\|' - escaping = false - continue - } - - clearStateChar() - re += '|' - continue - - // these are mostly the same in regexp and glob - case '[': - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += '\\' + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case ']': - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += '\\' + c - escaping = false - continue - } - - // handle the case where we left a class open. - // "[z-a]" is valid, equivalent to "\[z-a\]" - if (inClass) { - // split where the last [ was, make sure we don't have - // an invalid re. if so, re-walk the contents of the - // would-be class to re-translate any characters that - // were passed through as-is - // TODO: It would probably be faster to determine this - // without a try/catch and a new RegExp, but it's tricky - // to do safely. For now, this is safe and works. - var cs = pattern.substring(classStart + 1, i) - try { - RegExp('[' + cs + ']') - } catch (er) { - // not a valid class! - var sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' - hasMagic = hasMagic || sp[1] - inClass = false - continue - } - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === '^' && inClass)) { - re += '\\' - } - - re += c - - } // switch - } // for - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - cs = pattern.substr(classStart + 1) - sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + pl.open.length) - this.debug('setting tail', re, pl) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = '\\' - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + '|' - }) - - this.debug('tail=%j\n %s', tail, tail, pl, re) - var t = pl.type === '*' ? star - : pl.type === '?' ? qmark - : '\\' + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) + t + '\\(' + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += '\\\\' - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case '.': - case '[': - case '(': addPatternStart = true - } - - // Hack to work around lack of negative lookbehind in JS - // A pattern like: *.!(x).!(y|z) needs to ensure that a name - // like 'a.xyz.yz' doesn't match. So, the first negative - // lookahead, has to look ALL the way ahead, to the end of - // the pattern. - for (var n = negativeLists.length - 1; n > -1; n--) { - var nl = negativeLists[n] - - var nlBefore = re.slice(0, nl.reStart) - var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) - var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) - var nlAfter = re.slice(nl.reEnd) - - nlLast += nlAfter - - // Handle nested stuff like *(*.js|!(*.json)), where open parens - // mean that we should *not* include the ) in the bit that is considered - // "after" the negated section. - var openParensBefore = nlBefore.split('(').length - 1 - var cleanAfter = nlAfter - for (i = 0; i < openParensBefore; i++) { - cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') - } - nlAfter = cleanAfter - - var dollar = '' - if (nlAfter === '' && isSub !== SUBPARSE) { - dollar = '$' - } - var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast - re = newRe - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== '' && hasMagic) { - re = '(?=.)' + re - } - - if (addPatternStart) { - re = patternStart + re - } - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [re, hasMagic] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? 'i' : '' - try { - var regExp = new RegExp('^' + re + '$', flags) - } catch (er) { - // If it was an invalid regular expression, then it can't match - // anything. This trick looks for a character after the end of - // the string, which is of course impossible, except in multi-line - // mode, but it's not a /m regex. - return new RegExp('$.') - } - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) { - this.regexp = false - return this.regexp - } - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - var flags = options.nocase ? 'i' : '' - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === 'string') ? regExpEscape(p) - : p._src - }).join('\\\/') - }).join('|') - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = '^(?:' + re + ')$' - - // can match anything, as long as it's not this. - if (this.negate) re = '^(?!' + re + ').*$' - - try { - this.regexp = new RegExp(re, flags) - } catch (ex) { - this.regexp = false - } - return this.regexp -} - -minimatch.match = function (list, pattern, options) { - options = options || {} - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (mm.options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = match -function match (f, partial) { - this.debug('match', f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === '' - - if (f === '/' && partial) return true - - var options = this.options - - // windows: need to use /, not \ - if (path.sep !== '/') { - f = f.split(path.sep).join('/') - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - this.debug(this.pattern, 'split', f) - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - this.debug(this.pattern, 'set', set) - - // Find the basename of the path by looking for the last non-empty segment - var filename - var i - for (i = f.length - 1; i >= 0; i--) { - filename = f[i] - if (filename) break - } - - for (i = 0; i < set.length; i++) { - var pattern = set[i] - var file = f - if (options.matchBase && pattern.length === 1) { - file = [filename] - } - var hit = this.matchOne(file, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - this.debug('matchOne', - { 'this': this, file: file, pattern: pattern }) - - this.debug('matchOne', file.length, pattern.length) - - for (var fi = 0, - pi = 0, - fl = file.length, - pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi++, pi++) { - this.debug('matchOne loop') - var p = pattern[pi] - var f = file[fi] - - this.debug(pattern, p, f) - - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false - - if (p === GLOBSTAR) { - this.debug('GLOBSTAR', [pattern, p, f]) - - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - var pr = pi + 1 - if (pr === pl) { - this.debug('** at the end') - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for (; fi < fl; fi++) { - if (file[fi] === '.' || file[fi] === '..' || - (!options.dot && file[fi].charAt(0) === '.')) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - while (fr < fl) { - var swallowee = file[fr] - - this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee) - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === '.' || swallowee === '..' || - (!options.dot && swallowee.charAt(0) === '.')) { - this.debug('dot detected!', file, fr, pattern, pr) - break - } - - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue') - fr++ - } - } - - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - this.debug('\n>>> no match, partial?', file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === 'string') { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - this.debug('string match', p, f, hit) - } else { - hit = f.match(p) - this.debug('pattern match', p, f, hit) - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') - return emptyFileEnd - } - - // should be unreachable. - throw new Error('wtf?') -} - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, '$1') -} - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') -} diff --git a/fundamentals/bug-challenge-es6/node_modules/minimatch/package.json b/fundamentals/bug-challenge-es6/node_modules/minimatch/package.json deleted file mode 100644 index d231d336c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimatch/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "minimatch@^3.0.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core" - ] - ], - "_from": "minimatch@>=3.0.2 <4.0.0", - "_id": "minimatch@3.0.3", - "_inCache": true, - "_installable": true, - "_location": "/minimatch", - "_nodeVersion": "4.4.4", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/minimatch-3.0.3.tgz_1470678322731_0.1892083385027945" - }, - "_npmUser": { - "email": "i@izs.me", - "name": "isaacs" - }, - "_npmVersion": "3.10.6", - "_phantomChildren": {}, - "_requested": { - "name": "minimatch", - "raw": "minimatch@^3.0.2", - "rawSpec": "^3.0.2", - "scope": null, - "spec": ">=3.0.2 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-core" - ], - "_resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "_shasum": "2a4e4090b96b2db06a9d7df01055a62a77c9b774", - "_shrinkwrap": null, - "_spec": "minimatch@^3.0.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-core", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter", - "url": "http://blog.izs.me" - }, - "bugs": { - "url": "https://github.com/isaacs/minimatch/issues" - }, - "dependencies": { - "brace-expansion": "^1.0.0" - }, - "description": "a glob matcher in javascript", - "devDependencies": { - "standard": "^3.7.2", - "tap": "^5.6.0" - }, - "directories": {}, - "dist": { - "shasum": "2a4e4090b96b2db06a9d7df01055a62a77c9b774", - "tarball": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz" - }, - "engines": { - "node": "*" - }, - "files": [ - "minimatch.js" - ], - "gitHead": "eed89491bd4a4e6bc463aac0dfb5c29ef0d1dc13", - "homepage": "https://github.com/isaacs/minimatch#readme", - "license": "ISC", - "main": "minimatch.js", - "maintainers": [ - { - "email": "i@izs.me", - "name": "isaacs" - } - ], - "name": "minimatch", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/minimatch.git" - }, - "scripts": { - "posttest": "standard minimatch.js test/*.js", - "test": "tap test/*.js" - }, - "version": "3.0.3" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/minimist/.travis.yml deleted file mode 100644 index cc4dba29d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/LICENSE b/fundamentals/bug-challenge-es6/node_modules/minimist/LICENSE deleted file mode 100644 index ee27ba4b4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/example/parse.js b/fundamentals/bug-challenge-es6/node_modules/minimist/example/parse.js deleted file mode 100644 index abff3e8ee..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/example/parse.js +++ /dev/null @@ -1,2 +0,0 @@ -var argv = require('../')(process.argv.slice(2)); -console.dir(argv); diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/index.js b/fundamentals/bug-challenge-es6/node_modules/minimist/index.js deleted file mode 100644 index 584f551a6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/index.js +++ /dev/null @@ -1,187 +0,0 @@ -module.exports = function (args, opts) { - if (!opts) opts = {}; - - var flags = { bools : {}, strings : {} }; - - [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { - flags.bools[key] = true; - }); - - [].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true; - }); - - var aliases = {}; - Object.keys(opts.alias || {}).forEach(function (key) { - aliases[key] = [].concat(opts.alias[key]); - aliases[key].forEach(function (x) { - aliases[x] = [key].concat(aliases[key].filter(function (y) { - return x !== y; - })); - }); - }); - - var defaults = opts['default'] || {}; - - var argv = { _ : [] }; - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] === undefined ? false : defaults[key]); - }); - - var notFlags = []; - - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--')+1); - args = args.slice(0, args.indexOf('--')); - } - - function setArg (key, val) { - var value = !flags.strings[key] && isNumber(val) - ? Number(val) : val - ; - setKey(argv, key.split('.'), value); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), value); - }); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - - if (/^--.+=/.test(arg)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - var m = arg.match(/^--([^=]+)=([\s\S]*)$/); - setArg(m[1], m[2]); - } - else if (/^--no-.+/.test(arg)) { - var key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false); - } - else if (/^--.+/.test(arg)) { - var key = arg.match(/^--(.+)/)[1]; - var next = args[i + 1]; - if (next !== undefined && !/^-/.test(next) - && !flags.bools[key] - && (aliases[key] ? !flags.bools[aliases[key]] : true)) { - setArg(key, next); - i++; - } - else if (/^(true|false)$/.test(next)) { - setArg(key, next === 'true'); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true); - } - } - else if (/^-[^-]+/.test(arg)) { - var letters = arg.slice(1,-1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - var next = arg.slice(j+2); - - if (next === '-') { - setArg(letters[j], next) - continue; - } - - if (/[A-Za-z]/.test(letters[j]) - && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - setArg(letters[j], next); - broken = true; - break; - } - - if (letters[j+1] && letters[j+1].match(/\W/)) { - setArg(letters[j], arg.slice(j+2)); - broken = true; - break; - } - else { - setArg(letters[j], flags.strings[letters[j]] ? '' : true); - } - } - - var key = arg.slice(-1)[0]; - if (!broken && key !== '-') { - if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) - && !flags.bools[key] - && (aliases[key] ? !flags.bools[aliases[key]] : true)) { - setArg(key, args[i+1]); - i++; - } - else if (args[i+1] && /true|false/.test(args[i+1])) { - setArg(key, args[i+1] === 'true'); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true); - } - } - } - else { - argv._.push( - flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) - ); - } - } - - Object.keys(defaults).forEach(function (key) { - if (!hasKey(argv, key.split('.'))) { - setKey(argv, key.split('.'), defaults[key]); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), defaults[key]); - }); - } - }); - - notFlags.forEach(function(key) { - argv._.push(key); - }); - - return argv; -}; - -function hasKey (obj, keys) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - o = (o[key] || {}); - }); - - var key = keys[keys.length - 1]; - return key in o; -} - -function setKey (obj, keys, value) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - if (o[key] === undefined) o[key] = {}; - o = o[key]; - }); - - var key = keys[keys.length - 1]; - if (o[key] === undefined || typeof o[key] === 'boolean') { - o[key] = value; - } - else if (Array.isArray(o[key])) { - o[key].push(value); - } - else { - o[key] = [ o[key], value ]; - } -} - -function isNumber (x) { - if (typeof x === 'number') return true; - if (/^0x[0-9a-f]+$/i.test(x)) return true; - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); -} - -function longest (xs) { - return Math.max.apply(null, xs.map(function (x) { return x.length })); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/package.json b/fundamentals/bug-challenge-es6/node_modules/minimist/package.json deleted file mode 100644 index 1383cbd29..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/package.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "_args": [ - [ - "minimist@0.0.8", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/mkdirp" - ] - ], - "_from": "minimist@0.0.8", - "_id": "minimist@0.0.8", - "_inCache": true, - "_installable": true, - "_location": "/minimist", - "_npmUser": { - "email": "mail@substack.net", - "name": "substack" - }, - "_npmVersion": "1.4.3", - "_phantomChildren": {}, - "_requested": { - "name": "minimist", - "raw": "minimist@0.0.8", - "rawSpec": "0.0.8", - "scope": null, - "spec": "0.0.8", - "type": "version" - }, - "_requiredBy": [ - "/mkdirp" - ], - "_resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "_shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d", - "_shrinkwrap": null, - "_spec": "minimist@0.0.8", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/mkdirp", - "author": { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/minimist/issues" - }, - "dependencies": {}, - "description": "parse argument options", - "devDependencies": { - "tap": "~0.4.0", - "tape": "~1.0.4" - }, - "directories": {}, - "dist": { - "shasum": "857fcabfc3397d2625b8228262e86aa7a011b05d", - "tarball": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz" - }, - "homepage": "https://github.com/substack/minimist", - "keywords": [ - "argv", - "getopt", - "parser", - "optimist" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "mail@substack.net", - "name": "substack" - } - ], - "name": "minimist", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/substack/minimist.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "testling": { - "browsers": [ - "ie/6..latest", - "ff/5", - "firefox/latest", - "chrome/10", - "chrome/latest", - "safari/5.1", - "safari/latest", - "opera/12" - ], - "files": "test/*.js" - }, - "version": "0.0.8" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/readme.markdown b/fundamentals/bug-challenge-es6/node_modules/minimist/readme.markdown deleted file mode 100644 index c25635323..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/readme.markdown +++ /dev/null @@ -1,73 +0,0 @@ -# minimist - -parse argument options - -This module is the guts of optimist's argument parser without all the -fanciful decoration. - -[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist) - -[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist) - -# example - -``` js -var argv = require('minimist')(process.argv.slice(2)); -console.dir(argv); -``` - -``` -$ node example/parse.js -a beep -b boop -{ _: [], a: 'beep', b: 'boop' } -``` - -``` -$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz -{ _: [ 'foo', 'bar', 'baz' ], - x: 3, - y: 4, - n: 5, - a: true, - b: true, - c: true, - beep: 'boop' } -``` - -# methods - -``` js -var parseArgs = require('minimist') -``` - -## var argv = parseArgs(args, opts={}) - -Return an argument object `argv` populated with the array arguments from `args`. - -`argv._` contains all the arguments that didn't have an option associated with -them. - -Numeric-looking arguments will be returned as numbers unless `opts.string` or -`opts.boolean` is set for that argument name. - -Any arguments after `'--'` will not be parsed and will end up in `argv._`. - -options can be: - -* `opts.string` - a string or array of strings argument names to always treat as -strings -* `opts.boolean` - a string or array of strings to always treat as booleans -* `opts.alias` - an object mapping string names to strings or arrays of string -argument names to use as aliases -* `opts.default` - an object mapping string argument names to default values - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install minimist -``` - -# license - -MIT diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/test/dash.js b/fundamentals/bug-challenge-es6/node_modules/minimist/test/dash.js deleted file mode 100644 index 8b034b99a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/test/dash.js +++ /dev/null @@ -1,24 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('-', function (t) { - t.plan(5); - t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); - t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); - t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); - t.deepEqual( - parse([ '-b', '-' ], { boolean: 'b' }), - { b: true, _: [ '-' ] } - ); - t.deepEqual( - parse([ '-s', '-' ], { string: 's' }), - { s: '-', _: [] } - ); -}); - -test('-a -- b', function (t) { - t.plan(3); - t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); - t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); - t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/test/default_bool.js b/fundamentals/bug-challenge-es6/node_modules/minimist/test/default_bool.js deleted file mode 100644 index f0041ee40..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/test/default_bool.js +++ /dev/null @@ -1,20 +0,0 @@ -var test = require('tape'); -var parse = require('../'); - -test('boolean default true', function (t) { - var argv = parse([], { - boolean: 'sometrue', - default: { sometrue: true } - }); - t.equal(argv.sometrue, true); - t.end(); -}); - -test('boolean default false', function (t) { - var argv = parse([], { - boolean: 'somefalse', - default: { somefalse: false } - }); - t.equal(argv.somefalse, false); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/test/dotted.js b/fundamentals/bug-challenge-es6/node_modules/minimist/test/dotted.js deleted file mode 100644 index ef0ae349b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/test/dotted.js +++ /dev/null @@ -1,16 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('dotted alias', function (t) { - var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); - t.equal(argv.a.b, 22); - t.equal(argv.aa.bb, 22); - t.end(); -}); - -test('dotted default', function (t) { - var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); - t.equal(argv.a.b, 11); - t.equal(argv.aa.bb, 11); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/test/long.js b/fundamentals/bug-challenge-es6/node_modules/minimist/test/long.js deleted file mode 100644 index 5d3a1e09d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/test/long.js +++ /dev/null @@ -1,31 +0,0 @@ -var test = require('tape'); -var parse = require('../'); - -test('long opts', function (t) { - t.deepEqual( - parse([ '--bool' ]), - { bool : true, _ : [] }, - 'long boolean' - ); - t.deepEqual( - parse([ '--pow', 'xixxle' ]), - { pow : 'xixxle', _ : [] }, - 'long capture sp' - ); - t.deepEqual( - parse([ '--pow=xixxle' ]), - { pow : 'xixxle', _ : [] }, - 'long capture eq' - ); - t.deepEqual( - parse([ '--host', 'localhost', '--port', '555' ]), - { host : 'localhost', port : 555, _ : [] }, - 'long captures sp' - ); - t.deepEqual( - parse([ '--host=localhost', '--port=555' ]), - { host : 'localhost', port : 555, _ : [] }, - 'long captures eq' - ); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/test/parse.js b/fundamentals/bug-challenge-es6/node_modules/minimist/test/parse.js deleted file mode 100644 index 8a9064669..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/test/parse.js +++ /dev/null @@ -1,318 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('parse args', function (t) { - t.deepEqual( - parse([ '--no-moo' ]), - { moo : false, _ : [] }, - 'no' - ); - t.deepEqual( - parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), - { v : ['a','b','c'], _ : [] }, - 'multi' - ); - t.end(); -}); - -test('comprehensive', function (t) { - t.deepEqual( - parse([ - '--name=meowmers', 'bare', '-cats', 'woo', - '-h', 'awesome', '--multi=quux', - '--key', 'value', - '-b', '--bool', '--no-meep', '--multi=baz', - '--', '--not-a-flag', 'eek' - ]), - { - c : true, - a : true, - t : true, - s : 'woo', - h : 'awesome', - b : true, - bool : true, - key : 'value', - multi : [ 'quux', 'baz' ], - meep : false, - name : 'meowmers', - _ : [ 'bare', '--not-a-flag', 'eek' ] - } - ); - t.end(); -}); - -test('nums', function (t) { - var argv = parse([ - '-x', '1234', - '-y', '5.67', - '-z', '1e7', - '-w', '10f', - '--hex', '0xdeadbeef', - '789' - ]); - t.deepEqual(argv, { - x : 1234, - y : 5.67, - z : 1e7, - w : '10f', - hex : 0xdeadbeef, - _ : [ 789 ] - }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv.y, 'number'); - t.deepEqual(typeof argv.z, 'number'); - t.deepEqual(typeof argv.w, 'string'); - t.deepEqual(typeof argv.hex, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); - -test('flag boolean', function (t) { - var argv = parse([ '-t', 'moo' ], { boolean: 't' }); - t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('flag boolean value', function (t) { - var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { - boolean: [ 't', 'verbose' ], - default: { verbose: true } - }); - - t.deepEqual(argv, { - verbose: false, - t: true, - _: ['moo'] - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('flag boolean default false', function (t) { - var argv = parse(['moo'], { - boolean: ['t', 'verbose'], - default: { verbose: false, t: false } - }); - - t.deepEqual(argv, { - verbose: false, - t: false, - _: ['moo'] - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); - -}); - -test('boolean groups', function (t) { - var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { - boolean: ['x','y','z'] - }); - - t.deepEqual(argv, { - x : true, - y : false, - z : true, - _ : [ 'one', 'two', 'three' ] - }); - - t.deepEqual(typeof argv.x, 'boolean'); - t.deepEqual(typeof argv.y, 'boolean'); - t.deepEqual(typeof argv.z, 'boolean'); - t.end(); -}); - -test('newlines in params' , function (t) { - var args = parse([ '-s', "X\nX" ]) - t.deepEqual(args, { _ : [], s : "X\nX" }); - - // reproduce in bash: - // VALUE="new - // line" - // node program.js --s="$VALUE" - args = parse([ "--s=X\nX" ]) - t.deepEqual(args, { _ : [], s : "X\nX" }); - t.end(); -}); - -test('strings' , function (t) { - var s = parse([ '-s', '0001234' ], { string: 's' }).s; - t.equal(s, '0001234'); - t.equal(typeof s, 'string'); - - var x = parse([ '-x', '56' ], { string: 'x' }).x; - t.equal(x, '56'); - t.equal(typeof x, 'string'); - t.end(); -}); - -test('stringArgs', function (t) { - var s = parse([ ' ', ' ' ], { string: '_' })._; - t.same(s.length, 2); - t.same(typeof s[0], 'string'); - t.same(s[0], ' '); - t.same(typeof s[1], 'string'); - t.same(s[1], ' '); - t.end(); -}); - -test('empty strings', function(t) { - var s = parse([ '-s' ], { string: 's' }).s; - t.equal(s, ''); - t.equal(typeof s, 'string'); - - var str = parse([ '--str' ], { string: 'str' }).str; - t.equal(str, ''); - t.equal(typeof str, 'string'); - - var letters = parse([ '-art' ], { - string: [ 'a', 't' ] - }); - - t.equal(letters.a, ''); - t.equal(letters.r, true); - t.equal(letters.t, ''); - - t.end(); -}); - - -test('slashBreak', function (t) { - t.same( - parse([ '-I/foo/bar/baz' ]), - { I : '/foo/bar/baz', _ : [] } - ); - t.same( - parse([ '-xyz/foo/bar/baz' ]), - { x : true, y : true, z : '/foo/bar/baz', _ : [] } - ); - t.end(); -}); - -test('alias', function (t) { - var argv = parse([ '-f', '11', '--zoom', '55' ], { - alias: { z: 'zoom' } - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.f, 11); - t.end(); -}); - -test('multiAlias', function (t) { - var argv = parse([ '-f', '11', '--zoom', '55' ], { - alias: { z: [ 'zm', 'zoom' ] } - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.z, argv.zm); - t.equal(argv.f, 11); - t.end(); -}); - -test('nested dotted objects', function (t) { - var argv = parse([ - '--foo.bar', '3', '--foo.baz', '4', - '--foo.quux.quibble', '5', '--foo.quux.o_O', - '--beep.boop' - ]); - - t.same(argv.foo, { - bar : 3, - baz : 4, - quux : { - quibble : 5, - o_O : true - } - }); - t.same(argv.beep, { boop : true }); - t.end(); -}); - -test('boolean and alias with chainable api', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - herp: { alias: 'h', boolean: true } - }; - var aliasedArgv = parse(aliased, { - boolean: 'herp', - alias: { h: 'herp' } - }); - var propertyArgv = parse(regular, { - boolean: 'herp', - alias: { h: 'herp' } - }); - var expected = { - herp: true, - h: true, - '_': [ 'derp' ] - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias with options hash', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - alias: { 'h': 'herp' }, - boolean: 'herp' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - '_': [ 'derp' ] - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias using explicit true', function (t) { - var aliased = [ '-h', 'true' ]; - var regular = [ '--herp', 'true' ]; - var opts = { - alias: { h: 'herp' }, - boolean: 'h' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - '_': [ ] - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -// regression, see https://github.com/substack/node-optimist/issues/71 -test('boolean and --x=true', function(t) { - var parsed = parse(['--boool', '--other=true'], { - boolean: 'boool' - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'true'); - - parsed = parse(['--boool', '--other=false'], { - boolean: 'boool' - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'false'); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/test/parse_modified.js b/fundamentals/bug-challenge-es6/node_modules/minimist/test/parse_modified.js deleted file mode 100644 index 21851b036..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/test/parse_modified.js +++ /dev/null @@ -1,9 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('parse with modifier functions' , function (t) { - t.plan(1); - - var argv = parse([ '-b', '123' ], { boolean: 'b' }); - t.deepEqual(argv, { b: true, _: ['123'] }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/test/short.js b/fundamentals/bug-challenge-es6/node_modules/minimist/test/short.js deleted file mode 100644 index d513a1c25..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/test/short.js +++ /dev/null @@ -1,67 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('numeric short args', function (t) { - t.plan(2); - t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); - t.deepEqual( - parse([ '-123', '456' ]), - { 1: true, 2: true, 3: 456, _: [] } - ); -}); - -test('short', function (t) { - t.deepEqual( - parse([ '-b' ]), - { b : true, _ : [] }, - 'short boolean' - ); - t.deepEqual( - parse([ 'foo', 'bar', 'baz' ]), - { _ : [ 'foo', 'bar', 'baz' ] }, - 'bare' - ); - t.deepEqual( - parse([ '-cats' ]), - { c : true, a : true, t : true, s : true, _ : [] }, - 'group' - ); - t.deepEqual( - parse([ '-cats', 'meow' ]), - { c : true, a : true, t : true, s : 'meow', _ : [] }, - 'short group next' - ); - t.deepEqual( - parse([ '-h', 'localhost' ]), - { h : 'localhost', _ : [] }, - 'short capture' - ); - t.deepEqual( - parse([ '-h', 'localhost', '-p', '555' ]), - { h : 'localhost', p : 555, _ : [] }, - 'short captures' - ); - t.end(); -}); - -test('mixed short bool and capture', function (t) { - t.same( - parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ] - } - ); - t.end(); -}); - -test('short and long', function (t) { - t.deepEqual( - parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ] - } - ); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/minimist/test/whitespace.js b/fundamentals/bug-challenge-es6/node_modules/minimist/test/whitespace.js deleted file mode 100644 index 8a52a58ce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/minimist/test/whitespace.js +++ /dev/null @@ -1,8 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('whitespace should be whitespace' , function (t) { - t.plan(1); - var x = parse([ '-x', '\t' ]).x; - t.equal(x, '\t'); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/mkdirp/.travis.yml deleted file mode 100644 index 74c57bf15..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" - - "0.12" - - "iojs" -before_install: - - npm install -g npm@~1.4.6 diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/LICENSE b/fundamentals/bug-challenge-es6/node_modules/mkdirp/LICENSE deleted file mode 100644 index 432d1aeb0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/bin/cmd.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/bin/cmd.js deleted file mode 100755 index d95de15ae..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/bin/cmd.js +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env node - -var mkdirp = require('../'); -var minimist = require('minimist'); -var fs = require('fs'); - -var argv = minimist(process.argv.slice(2), { - alias: { m: 'mode', h: 'help' }, - string: [ 'mode' ] -}); -if (argv.help) { - fs.createReadStream(__dirname + '/usage.txt').pipe(process.stdout); - return; -} - -var paths = argv._.slice(); -var mode = argv.mode ? parseInt(argv.mode, 8) : undefined; - -(function next () { - if (paths.length === 0) return; - var p = paths.shift(); - - if (mode === undefined) mkdirp(p, cb) - else mkdirp(p, mode, cb) - - function cb (err) { - if (err) { - console.error(err.message); - process.exit(1); - } - else next(); - } -})(); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/bin/usage.txt b/fundamentals/bug-challenge-es6/node_modules/mkdirp/bin/usage.txt deleted file mode 100644 index f952aa2c7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/bin/usage.txt +++ /dev/null @@ -1,12 +0,0 @@ -usage: mkdirp [DIR1,DIR2..] {OPTIONS} - - Create each supplied directory including any necessary parent directories that - don't yet exist. - - If the directory already exists, do nothing. - -OPTIONS are: - - -m, --mode If a directory needs to be created, set the mode as an octal - permission string. - diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/examples/pow.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/examples/pow.js deleted file mode 100644 index e6924212e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/examples/pow.js +++ /dev/null @@ -1,6 +0,0 @@ -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/index.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/index.js deleted file mode 100644 index 6ce241b58..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/index.js +++ /dev/null @@ -1,98 +0,0 @@ -var path = require('path'); -var fs = require('fs'); -var _0777 = parseInt('0777', 8); - -module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; - -function mkdirP (p, opts, f, made) { - if (typeof opts === 'function') { - f = opts; - opts = {}; - } - else if (!opts || typeof opts !== 'object') { - opts = { mode: opts }; - } - - var mode = opts.mode; - var xfs = opts.fs || fs; - - if (mode === undefined) { - mode = _0777 & (~process.umask()); - } - if (!made) made = null; - - var cb = f || function () {}; - p = path.resolve(p); - - xfs.mkdir(p, mode, function (er) { - if (!er) { - made = made || p; - return cb(null, made); - } - switch (er.code) { - case 'ENOENT': - mkdirP(path.dirname(p), opts, function (er, made) { - if (er) cb(er, made); - else mkdirP(p, opts, cb, made); - }); - break; - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - xfs.stat(p, function (er2, stat) { - // if the stat fails, then that's super weird. - // let the original error be the failure reason. - if (er2 || !stat.isDirectory()) cb(er, made) - else cb(null, made); - }); - break; - } - }); -} - -mkdirP.sync = function sync (p, opts, made) { - if (!opts || typeof opts !== 'object') { - opts = { mode: opts }; - } - - var mode = opts.mode; - var xfs = opts.fs || fs; - - if (mode === undefined) { - mode = _0777 & (~process.umask()); - } - if (!made) made = null; - - p = path.resolve(p); - - try { - xfs.mkdirSync(p, mode); - made = made || p; - } - catch (err0) { - switch (err0.code) { - case 'ENOENT' : - made = sync(path.dirname(p), opts, made); - sync(p, opts, made); - break; - - // In the case of any other error, just see if there's a dir - // there already. If so, then hooray! If not, then something - // is borked. - default: - var stat; - try { - stat = xfs.statSync(p); - } - catch (err1) { - throw err0; - } - if (!stat.isDirectory()) throw err0; - break; - } - } - - return made; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/package.json b/fundamentals/bug-challenge-es6/node_modules/mkdirp/package.json deleted file mode 100644 index ed675a933..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/package.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "_args": [ - [ - "mkdirp@^0.5.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-register" - ] - ], - "_from": "mkdirp@>=0.5.1 <0.6.0", - "_id": "mkdirp@0.5.1", - "_inCache": true, - "_installable": true, - "_location": "/mkdirp", - "_nodeVersion": "2.0.0", - "_npmUser": { - "email": "substack@gmail.com", - "name": "substack" - }, - "_npmVersion": "2.9.0", - "_phantomChildren": {}, - "_requested": { - "name": "mkdirp", - "raw": "mkdirp@^0.5.1", - "rawSpec": "^0.5.1", - "scope": null, - "spec": ">=0.5.1 <0.6.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-register" - ], - "_resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "_shasum": "30057438eac6cf7f8c4767f38648d6697d75c903", - "_shrinkwrap": null, - "_spec": "mkdirp@^0.5.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-register", - "author": { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "http://substack.net" - }, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "bugs": { - "url": "https://github.com/substack/node-mkdirp/issues" - }, - "dependencies": { - "minimist": "0.0.8" - }, - "description": "Recursively mkdir, like `mkdir -p`", - "devDependencies": { - "mock-fs": "2 >=2.7.0", - "tap": "1" - }, - "directories": {}, - "dist": { - "shasum": "30057438eac6cf7f8c4767f38648d6697d75c903", - "tarball": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz" - }, - "gitHead": "d4eff0f06093aed4f387e88e9fc301cb76beedc7", - "homepage": "https://github.com/substack/node-mkdirp#readme", - "keywords": [ - "mkdir", - "directory" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "mail@substack.net", - "name": "substack" - } - ], - "name": "mkdirp", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/substack/node-mkdirp.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "0.5.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/readme.markdown b/fundamentals/bug-challenge-es6/node_modules/mkdirp/readme.markdown deleted file mode 100644 index 3cc131538..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/readme.markdown +++ /dev/null @@ -1,100 +0,0 @@ -# mkdirp - -Like `mkdir -p`, but in node.js! - -[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp) - -# example - -## pow.js - -```js -var mkdirp = require('mkdirp'); - -mkdirp('/tmp/foo/bar/baz', function (err) { - if (err) console.error(err) - else console.log('pow!') -}); -``` - -Output - -``` -pow! -``` - -And now /tmp/foo/bar/baz exists, huzzah! - -# methods - -```js -var mkdirp = require('mkdirp'); -``` - -## mkdirp(dir, opts, cb) - -Create a new directory and any necessary subdirectories at `dir` with octal -permission string `opts.mode`. If `opts` is a non-object, it will be treated as -the `opts.mode`. - -If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`. - -`cb(err, made)` fires with the error or the first directory `made` -that had to be created, if any. - -You can optionally pass in an alternate `fs` implementation by passing in -`opts.fs`. Your implementation should have `opts.fs.mkdir(path, mode, cb)` and -`opts.fs.stat(path, cb)`. - -## mkdirp.sync(dir, opts) - -Synchronously create a new directory and any necessary subdirectories at `dir` -with octal permission string `opts.mode`. If `opts` is a non-object, it will be -treated as the `opts.mode`. - -If `opts.mode` isn't specified, it defaults to `0777 & (~process.umask())`. - -Returns the first directory that had to be created, if any. - -You can optionally pass in an alternate `fs` implementation by passing in -`opts.fs`. Your implementation should have `opts.fs.mkdirSync(path, mode)` and -`opts.fs.statSync(path)`. - -# usage - -This package also ships with a `mkdirp` command. - -``` -usage: mkdirp [DIR1,DIR2..] {OPTIONS} - - Create each supplied directory including any necessary parent directories that - don't yet exist. - - If the directory already exists, do nothing. - -OPTIONS are: - - -m, --mode If a directory needs to be created, set the mode as an octal - permission string. - -``` - -# install - -With [npm](http://npmjs.org) do: - -``` -npm install mkdirp -``` - -to get the library, or - -``` -npm install -g mkdirp -``` - -to get the command. - -# license - -MIT diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/chmod.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/chmod.js deleted file mode 100644 index 6a404b932..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/chmod.js +++ /dev/null @@ -1,41 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); -var _0744 = parseInt('0744', 8); - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -test('chmod-pre', function (t) { - var mode = _0744 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.equal(stat && stat.mode & _0777, mode, 'should be 0744'); - t.end(); - }); - }); -}); - -test('chmod', function (t) { - var mode = _0755 - mkdirp(file, mode, function (er) { - t.ifError(er, 'should not error'); - fs.stat(file, function (er, stat) { - t.ifError(er, 'should exist'); - t.ok(stat && stat.isDirectory(), 'should be directory'); - t.end(); - }); - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/clobber.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/clobber.js deleted file mode 100644 index 2433b9ad5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/clobber.js +++ /dev/null @@ -1,38 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; -var _0755 = parseInt('0755', 8); - -var ps = [ '', 'tmp' ]; - -for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); -} - -var file = ps.join('/'); - -// a file in the way -var itw = ps.slice(0, 3).join('/'); - - -test('clobber-pre', function (t) { - console.error("about to write to "+itw) - fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); - - fs.stat(itw, function (er, stat) { - t.ifError(er) - t.ok(stat && stat.isFile(), 'should be file') - t.end() - }) -}) - -test('clobber', function (t) { - t.plan(2); - mkdirp(file, _0755, function (err) { - t.ok(err); - t.equal(err.code, 'ENOTDIR'); - t.end(); - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/mkdirp.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/mkdirp.js deleted file mode 100644 index eaa8921c7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/mkdirp.js +++ /dev/null @@ -1,28 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('woo', function (t) { - t.plan(5); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, _0755, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }) - }) - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/opts_fs.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/opts_fs.js deleted file mode 100644 index 97186b62e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/opts_fs.js +++ /dev/null @@ -1,29 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var test = require('tap').test; -var mockfs = require('mock-fs'); -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('opts.fs', function (t) { - t.plan(5); - - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/beep/boop/' + [x,y,z].join('/'); - var xfs = mockfs.fs(); - - mkdirp(file, { fs: xfs, mode: _0755 }, function (err) { - t.ifError(err); - xfs.exists(file, function (ex) { - t.ok(ex, 'created file'); - xfs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/opts_fs_sync.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/opts_fs_sync.js deleted file mode 100644 index 6c370aa6e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/opts_fs_sync.js +++ /dev/null @@ -1,27 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var test = require('tap').test; -var mockfs = require('mock-fs'); -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('opts.fs sync', function (t) { - t.plan(4); - - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/beep/boop/' + [x,y,z].join('/'); - var xfs = mockfs.fs(); - - mkdirp.sync(file, { fs: xfs, mode: _0755 }); - xfs.exists(file, function (ex) { - t.ok(ex, 'created file'); - xfs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/perm.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/perm.js deleted file mode 100644 index fbce44b82..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/perm.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('async perm', function (t) { - t.plan(5); - var file = '/tmp/' + (Math.random() * (1<<30)).toString(16); - - mkdirp(file, _0755, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }) - }) - }); -}); - -test('async root perm', function (t) { - mkdirp('/tmp', _0755, function (err) { - if (err) t.fail(err); - t.end(); - }); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/perm_sync.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/perm_sync.js deleted file mode 100644 index 398229fe5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/perm_sync.js +++ /dev/null @@ -1,36 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('sync perm', function (t) { - t.plan(4); - var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json'; - - mkdirp.sync(file, _0755); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); -}); - -test('sync root perm', function (t) { - t.plan(3); - - var file = '/tmp'; - mkdirp.sync(file, _0755); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.ok(stat.isDirectory(), 'target not a directory'); - }) - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/race.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/race.js deleted file mode 100644 index b0b9e183c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/race.js +++ /dev/null @@ -1,37 +0,0 @@ -var mkdirp = require('../').mkdirp; -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('race', function (t) { - t.plan(10); - var ps = [ '', 'tmp' ]; - - for (var i = 0; i < 25; i++) { - var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - ps.push(dir); - } - var file = ps.join('/'); - - var res = 2; - mk(file); - - mk(file); - - function mk (file, cb) { - mkdirp(file, _0755, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }) - }); - } -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/rel.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/rel.js deleted file mode 100644 index 4ddb34276..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/rel.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('rel', function (t) { - t.plan(5); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var cwd = process.cwd(); - process.chdir('/tmp'); - - var file = [x,y,z].join('/'); - - mkdirp(file, _0755, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - process.chdir(cwd); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }) - }) - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/return.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/return.js deleted file mode 100644 index bce68e561..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/return.js +++ /dev/null @@ -1,25 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('return value', function (t) { - t.plan(4); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - // should return the first dir created. - // By this point, it would be profoundly surprising if /tmp didn't - // already exist, since every other test makes things in there. - mkdirp(file, function (err, made) { - t.ifError(err); - t.equal(made, '/tmp/' + x); - mkdirp(file, function (err, made) { - t.ifError(err); - t.equal(made, null); - }); - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/return_sync.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/return_sync.js deleted file mode 100644 index 7c222d355..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/return_sync.js +++ /dev/null @@ -1,24 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; - -test('return value', function (t) { - t.plan(2); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - // should return the first dir created. - // By this point, it would be profoundly surprising if /tmp didn't - // already exist, since every other test makes things in there. - // Note that this will throw on failure, which will fail the test. - var made = mkdirp.sync(file); - t.equal(made, '/tmp/' + x); - - // making the same file again should have no effect. - made = mkdirp.sync(file); - t.equal(made, null); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/root.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/root.js deleted file mode 100644 index 9e7d079d9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/root.js +++ /dev/null @@ -1,19 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var test = require('tap').test; -var _0755 = parseInt('0755', 8); - -test('root', function (t) { - // '/' on unix, 'c:/' on windows. - var file = path.resolve('/'); - - mkdirp(file, _0755, function (err) { - if (err) throw err - fs.stat(file, function (er, stat) { - if (er) throw er - t.ok(stat.isDirectory(), 'target is a directory'); - t.end(); - }) - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/sync.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/sync.js deleted file mode 100644 index 8c8dc938c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/sync.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('sync', function (t) { - t.plan(4); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - try { - mkdirp.sync(file, _0755); - } catch (err) { - t.fail(err); - return t.end(); - } - - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0755); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/umask.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/umask.js deleted file mode 100644 index 2033c63a4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/umask.js +++ /dev/null @@ -1,28 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('implicit mode from umask', function (t) { - t.plan(5); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - mkdirp(file, function (err) { - t.ifError(err); - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, _0777 & (~process.umask())); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }) - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/umask_sync.js b/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/umask_sync.js deleted file mode 100644 index 11a761474..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/mkdirp/test/umask_sync.js +++ /dev/null @@ -1,32 +0,0 @@ -var mkdirp = require('../'); -var path = require('path'); -var fs = require('fs'); -var exists = fs.exists || path.exists; -var test = require('tap').test; -var _0777 = parseInt('0777', 8); -var _0755 = parseInt('0755', 8); - -test('umask sync modes', function (t) { - t.plan(4); - var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); - - var file = '/tmp/' + [x,y,z].join('/'); - - try { - mkdirp.sync(file); - } catch (err) { - t.fail(err); - return t.end(); - } - - exists(file, function (ex) { - t.ok(ex, 'file created'); - fs.stat(file, function (err, stat) { - t.ifError(err); - t.equal(stat.mode & _0777, (_0777 & (~process.umask()))); - t.ok(stat.isDirectory(), 'target not a directory'); - }); - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/ms/LICENSE.md b/fundamentals/bug-challenge-es6/node_modules/ms/LICENSE.md deleted file mode 100644 index 69b61253a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/ms/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Zeit, Inc. - -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/fundamentals/bug-challenge-es6/node_modules/ms/README.md b/fundamentals/bug-challenge-es6/node_modules/ms/README.md deleted file mode 100644 index 5b475707d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/ms/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# ms - -[![Build Status](https://travis-ci.org/zeit/ms.svg?branch=master)](https://travis-ci.org/zeit/ms) -[![XO code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo) -[![Slack Channel](https://zeit-slackin.now.sh/badge.svg)](https://zeit.chat/) - -Use this package to easily convert various time formats to milliseconds. - -## Examples - -```js -ms('2 days') // 172800000 -ms('1d') // 86400000 -ms('10h') // 36000000 -ms('2.5 hrs') // 9000000 -ms('2h') // 7200000 -ms('1m') // 60000 -ms('5s') // 5000 -ms('1y') // 31557600000 -ms('100') // 100 -``` - -### Convert from milliseconds - -```js -ms(60000) // "1m" -ms(2 * 60000) // "2m" -ms(ms('10 hours')) // "10h" -``` - -### Time format written-out - -```js -ms(60000, { long: true }) // "1 minute" -ms(2 * 60000, { long: true }) // "2 minutes" -ms(ms('10 hours'), { long: true }) // "10 hours" -``` - -## Features - -- Works both in [node](https://nodejs.org) and in the browser. -- If a number is supplied to `ms`, a string with a unit is returned. -- If a string that contains the number is supplied, it returns it as a number (e.g.: it returns `100` for `'100'`). -- If you pass a string with a number and a valid unit, the number of equivalent ms is returned. - -## Caught a bug? - -1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device -2. Link the package to the global module directory: `npm link` -3. Within the module you want to test your local development instance of ms, just link it to the dependencies: `npm link ms`. Instead of the default one from npm, node will now use your clone of ms! - -As always, you can run the tests using: `npm test` diff --git a/fundamentals/bug-challenge-es6/node_modules/ms/index.js b/fundamentals/bug-challenge-es6/node_modules/ms/index.js deleted file mode 100644 index 824b37eba..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/ms/index.js +++ /dev/null @@ -1,149 +0,0 @@ -/** - * Helpers. - */ - -var s = 1000 -var m = s * 60 -var h = m * 60 -var d = h * 24 -var y = d * 365.25 - -/** - * Parse or format the given `val`. - * - * Options: - * - * - `long` verbose formatting [false] - * - * @param {String|Number} val - * @param {Object} options - * @throws {Error} throw an error if val is not a non-empty string or a number - * @return {String|Number} - * @api public - */ - -module.exports = function (val, options) { - options = options || {} - var type = typeof val - if (type === 'string' && val.length > 0) { - return parse(val) - } else if (type === 'number' && isNaN(val) === false) { - return options.long ? - fmtLong(val) : - fmtShort(val) - } - throw new Error('val is not a non-empty string or a valid number. val=' + JSON.stringify(val)) -} - -/** - * Parse the given `str` and return milliseconds. - * - * @param {String} str - * @return {Number} - * @api private - */ - -function parse(str) { - str = String(str) - if (str.length > 10000) { - return - } - var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str) - if (!match) { - return - } - var n = parseFloat(match[1]) - var type = (match[2] || 'ms').toLowerCase() - switch (type) { - case 'years': - case 'year': - case 'yrs': - case 'yr': - case 'y': - return n * y - case 'days': - case 'day': - case 'd': - return n * d - case 'hours': - case 'hour': - case 'hrs': - case 'hr': - case 'h': - return n * h - case 'minutes': - case 'minute': - case 'mins': - case 'min': - case 'm': - return n * m - case 'seconds': - case 'second': - case 'secs': - case 'sec': - case 's': - return n * s - case 'milliseconds': - case 'millisecond': - case 'msecs': - case 'msec': - case 'ms': - return n - default: - return undefined - } -} - -/** - * Short format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtShort(ms) { - if (ms >= d) { - return Math.round(ms / d) + 'd' - } - if (ms >= h) { - return Math.round(ms / h) + 'h' - } - if (ms >= m) { - return Math.round(ms / m) + 'm' - } - if (ms >= s) { - return Math.round(ms / s) + 's' - } - return ms + 'ms' -} - -/** - * Long format for `ms`. - * - * @param {Number} ms - * @return {String} - * @api private - */ - -function fmtLong(ms) { - return plural(ms, d, 'day') || - plural(ms, h, 'hour') || - plural(ms, m, 'minute') || - plural(ms, s, 'second') || - ms + ' ms' -} - -/** - * Pluralization helper. - */ - -function plural(ms, n, name) { - if (ms < n) { - return - } - if (ms < n * 1.5) { - return Math.floor(ms / n) + ' ' + name - } - return Math.ceil(ms / n) + ' ' + name + 's' -} diff --git a/fundamentals/bug-challenge-es6/node_modules/ms/package.json b/fundamentals/bug-challenge-es6/node_modules/ms/package.json deleted file mode 100644 index 3ee643bb8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/ms/package.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "_args": [ - [ - "ms@0.7.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/debug" - ] - ], - "_from": "ms@0.7.2", - "_id": "ms@0.7.2", - "_inCache": true, - "_installable": true, - "_location": "/ms", - "_nodeVersion": "6.8.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/ms-0.7.2.tgz_1477383407940_0.4743474116548896" - }, - "_npmUser": { - "email": "leo@zeit.co", - "name": "leo" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "ms", - "raw": "ms@0.7.2", - "rawSpec": "0.7.2", - "scope": null, - "spec": "0.7.2", - "type": "version" - }, - "_requiredBy": [ - "/debug" - ], - "_resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "_shasum": "ae25cf2512b3885a1d95d7f037868d8431124765", - "_shrinkwrap": null, - "_spec": "ms@0.7.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/debug", - "bugs": { - "url": "https://github.com/zeit/ms/issues" - }, - "component": { - "scripts": { - "ms/index.js": "index.js" - } - }, - "dependencies": {}, - "description": "Tiny milisecond conversion utility", - "devDependencies": { - "expect.js": "^0.3.1", - "mocha": "^3.0.2", - "serve": "^1.4.0", - "xo": "^0.17.0" - }, - "directories": {}, - "dist": { - "shasum": "ae25cf2512b3885a1d95d7f037868d8431124765", - "tarball": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz" - }, - "files": [ - "index.js" - ], - "gitHead": "ac92a7e0790ba2622a74d9d60690ca0d2c070a45", - "homepage": "https://github.com/zeit/ms#readme", - "license": "MIT", - "main": "./index", - "maintainers": [ - { - "email": "leo@zeit.co", - "name": "leo" - }, - { - "email": "rauchg@gmail.com", - "name": "rauchg" - } - ], - "name": "ms", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/zeit/ms.git" - }, - "scripts": { - "test": "xo && mocha test/index.js", - "test-browser": "serve ./test" - }, - "version": "0.7.2", - "xo": { - "envs": [ - "mocha" - ], - "rules": { - "complexity": 0 - }, - "semicolon": false, - "space": true - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/multimatch/index.js b/fundamentals/bug-challenge-es6/node_modules/multimatch/index.js deleted file mode 100644 index 6adc6785d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/multimatch/index.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; -var minimatch = require('minimatch'); -var arrayUnion = require('array-union'); -var arrayDiffer = require('array-differ'); -var arrify = require('arrify'); - -module.exports = function (list, patterns, options) { - list = arrify(list); - patterns = arrify(patterns); - - if (list.length === 0 || patterns.length === 0) { - return []; - } - - options = options || {}; - - return patterns.reduce(function (ret, pattern) { - var process = arrayUnion; - - if (pattern[0] === '!') { - pattern = pattern.slice(1); - process = arrayDiffer; - } - - return process(ret, minimatch.match(list, pattern, options)); - }, []); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/multimatch/license b/fundamentals/bug-challenge-es6/node_modules/multimatch/license deleted file mode 100644 index 5ec444d53..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/multimatch/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus, Jon Schlinkert, contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/multimatch/package.json b/fundamentals/bug-challenge-es6/node_modules/multimatch/package.json deleted file mode 100644 index 89d2c5f39..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/multimatch/package.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "_args": [ - [ - "multimatch@^2.1.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-haste-map" - ] - ], - "_from": "multimatch@>=2.1.0 <3.0.0", - "_id": "multimatch@2.1.0", - "_inCache": true, - "_installable": true, - "_location": "/multimatch", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.14.7", - "_phantomChildren": {}, - "_requested": { - "name": "multimatch", - "raw": "multimatch@^2.1.0", - "rawSpec": "^2.1.0", - "scope": null, - "spec": ">=2.1.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-haste-map", - "/jest-runtime" - ], - "_resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "_shasum": "9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b", - "_shrinkwrap": null, - "_spec": "multimatch@^2.1.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-haste-map", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "http://sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/multimatch/issues" - }, - "dependencies": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" - }, - "description": "Extends minimatch.match() with support for multiple patterns", - "devDependencies": { - "chai": "^3.4.1", - "mocha": "*" - }, - "directories": {}, - "dist": { - "shasum": "9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b", - "tarball": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "5b56d1689ef475975682a514b8e1f863794af419", - "homepage": "https://github.com/sindresorhus/multimatch", - "keywords": [ - "expand", - "find", - "glob", - "globbing", - "globs", - "match", - "matcher", - "minimatch", - "pattern", - "patterns", - "wildcard" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "multimatch", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/multimatch.git" - }, - "scripts": { - "test": "mocha" - }, - "version": "2.1.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/multimatch/readme.md b/fundamentals/bug-challenge-es6/node_modules/multimatch/readme.md deleted file mode 100644 index f10fa5dd7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/multimatch/readme.md +++ /dev/null @@ -1,62 +0,0 @@ -# multimatch [![Build Status](https://travis-ci.org/sindresorhus/multimatch.svg?branch=master)](https://travis-ci.org/sindresorhus/multimatch) - -> Extends [`minimatch.match()`](https://github.com/isaacs/minimatch#minimatchmatchlist-pattern-options) with support for multiple patterns - - -## Install - -```sh - -$ npm install --save multimatch -``` - - -## Usage - -```js -var multimatch = require('multimatch'); - -multimatch(['unicorn', 'cake', 'rainbows'], ['*', '!cake']); -//=> ['unicorn', 'rainbows'] -``` - -See the [tests](https://github.com/sindresorhus/multimatch/blob/master/test.js) for more usage examples and expected matches. - - -## API - -Same as [`minimatch.match()`](https://github.com/isaacs/minimatch#minimatchmatchlist-pattern-options) except for `pattern` also accepting an array. - -```js -var results = multimatch(paths, patterns); -``` - -The return value is an array of matching paths. - - -## How multiple patterns work - -Positive patterns (e.g. `foo` or `*`) add to the results, while negative patterns (e.g. `!foo`) subtract from the results. - -Therefore a lone negation (e.g. `['!foo']`) will never match anything – use `['*', '!foo']` instead. - - -## Globbing patterns - -Just a quick overview. - -- `*` matches any number of characters, but not `/` -- `?` matches a single character, but not `/` -- `**` matches any number of characters, including `/`, as long as it's the only thing in a path part -- `{}` allows for a comma-separated list of "or" expressions -- `!` at the beginning of a pattern will negate the match - - -## Related - -See [globby](https://github.com/sindresorhus/globby) if you need to match against the filesystem instead of a list. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com), [Jon Schlinkert](https://github.com/jonschlinkert) diff --git a/fundamentals/bug-challenge-es6/node_modules/natural-compare/README.md b/fundamentals/bug-challenge-es6/node_modules/natural-compare/README.md deleted file mode 100644 index c85dfdf98..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/natural-compare/README.md +++ /dev/null @@ -1,125 +0,0 @@ - -[Build]: http://img.shields.io/travis/litejs/natural-compare-lite.png -[Coverage]: http://img.shields.io/coveralls/litejs/natural-compare-lite.png -[1]: https://travis-ci.org/litejs/natural-compare-lite -[2]: https://coveralls.io/r/litejs/natural-compare-lite -[npm package]: https://npmjs.org/package/natural-compare-lite -[GitHub repo]: https://github.com/litejs/natural-compare-lite - - - - @version 1.4.0 - @date 2015-10-26 - @stability 3 - Stable - - -Natural Compare – [![Build][]][1] [![Coverage][]][2] -=============== - -Compare strings containing a mix of letters and numbers -in the way a human being would in sort order. -This is described as a "natural ordering". - -```text -Standard sorting: Natural order sorting: - img1.png img1.png - img10.png img2.png - img12.png img10.png - img2.png img12.png -``` - -String.naturalCompare returns a number indicating -whether a reference string comes before or after or is the same -as the given string in sort order. -Use it with builtin sort() function. - - - -### Installation - -- In browser - -```html - -``` - -- In node.js: `npm install natural-compare-lite` - -```javascript -require("natural-compare-lite") -``` - -### Usage - -```javascript -// Simple case sensitive example -var a = ["z1.doc", "z10.doc", "z17.doc", "z2.doc", "z23.doc", "z3.doc"]; -a.sort(String.naturalCompare); -// ["z1.doc", "z2.doc", "z3.doc", "z10.doc", "z17.doc", "z23.doc"] - -// Use wrapper function for case insensitivity -a.sort(function(a, b){ - return String.naturalCompare(a.toLowerCase(), b.toLowerCase()); -}) - -// In most cases we want to sort an array of objects -var a = [ {"street":"350 5th Ave", "room":"A-1021"} - , {"street":"350 5th Ave", "room":"A-21046-b"} ]; - -// sort by street, then by room -a.sort(function(a, b){ - return String.naturalCompare(a.street, b.street) || String.naturalCompare(a.room, b.room); -}) - -// When text transformation is needed (eg toLowerCase()), -// it is best for performance to keep -// transformed key in that object. -// There are no need to do text transformation -// on each comparision when sorting. -var a = [ {"make":"Audi", "model":"A6"} - , {"make":"Kia", "model":"Rio"} ]; - -// sort by make, then by model -a.map(function(car){ - car.sort_key = (car.make + " " + car.model).toLowerCase(); -}) -a.sort(function(a, b){ - return String.naturalCompare(a.sort_key, b.sort_key); -}) -``` - -- Works well with dates in ISO format eg "Rev 2012-07-26.doc". - - -### Custom alphabet - -It is possible to configure a custom alphabet -to achieve a desired order. - -```javascript -// Estonian alphabet -String.alphabet = "ABDEFGHIJKLMNOPRSŠZŽTUVÕÄÖÜXYabdefghijklmnoprsšzžtuvõäöüxy" -["t", "z", "x", "õ"].sort(String.naturalCompare) -// ["z", "t", "õ", "x"] - -// Russian alphabet -String.alphabet = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдеёжзийклмнопрстуфхцчшщъыьэюя" -["Ё", "А", "Б"].sort(String.naturalCompare) -// ["А", "Б", "Ё"] -``` - - -External links --------------- - -- [GitHub repo][https://github.com/litejs/natural-compare-lite] -- [jsperf test](http://jsperf.com/natural-sort-2/12) - - -Licence -------- - -Copyright (c) 2012-2015 Lauri Rooden <lauri@rooden.ee> -[The MIT License](http://lauri.rooden.ee/mit-license.txt) - - diff --git a/fundamentals/bug-challenge-es6/node_modules/natural-compare/index.js b/fundamentals/bug-challenge-es6/node_modules/natural-compare/index.js deleted file mode 100644 index e705d49f5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/natural-compare/index.js +++ /dev/null @@ -1,57 +0,0 @@ - - - -/* - * @version 1.4.0 - * @date 2015-10-26 - * @stability 3 - Stable - * @author Lauri Rooden (https://github.com/litejs/natural-compare-lite) - * @license MIT License - */ - - -var naturalCompare = function(a, b) { - var i, codeA - , codeB = 1 - , posA = 0 - , posB = 0 - , alphabet = String.alphabet - - function getCode(str, pos, code) { - if (code) { - for (i = pos; code = getCode(str, i), code < 76 && code > 65;) ++i; - return +str.slice(pos - 1, i) - } - code = alphabet && alphabet.indexOf(str.charAt(pos)) - return code > -1 ? code + 76 : ((code = str.charCodeAt(pos) || 0), code < 45 || code > 127) ? code - : code < 46 ? 65 // - - : code < 48 ? code - 1 - : code < 58 ? code + 18 // 0-9 - : code < 65 ? code - 11 - : code < 91 ? code + 11 // A-Z - : code < 97 ? code - 37 - : code < 123 ? code + 5 // a-z - : code - 63 - } - - - if ((a+="") != (b+="")) for (;codeB;) { - codeA = getCode(a, posA++) - codeB = getCode(b, posB++) - - if (codeA < 76 && codeB < 76 && codeA > 66 && codeB > 66) { - codeA = getCode(a, posA, posA) - codeB = getCode(b, posB, posA = i) - posB = i - } - - if (codeA != codeB) return (codeA < codeB) ? -1 : 1 - } - return 0 -} - -try { - module.exports = naturalCompare; -} catch (e) { - String.naturalCompare = naturalCompare; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/natural-compare/package.json b/fundamentals/bug-challenge-es6/node_modules/natural-compare/package.json deleted file mode 100644 index c102c8ff6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/natural-compare/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "natural-compare@^1.4.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-snapshot" - ] - ], - "_from": "natural-compare@>=1.4.0 <2.0.0", - "_id": "natural-compare@1.4.0", - "_inCache": true, - "_installable": true, - "_location": "/natural-compare", - "_nodeVersion": "6.2.2", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/natural-compare-1.4.0.tgz_1469220490086_0.1379237591754645" - }, - "_npmUser": { - "email": "megawac@gmail.com", - "name": "megawac" - }, - "_npmVersion": "3.9.5", - "_phantomChildren": {}, - "_requested": { - "name": "natural-compare", - "raw": "natural-compare@^1.4.0", - "rawSpec": "^1.4.0", - "scope": null, - "spec": ">=1.4.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest-snapshot" - ], - "_resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "_shasum": "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7", - "_shrinkwrap": null, - "_spec": "natural-compare@^1.4.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest-snapshot", - "author": { - "name": "Lauri Rooden", - "url": "https://github.com/litejs/natural-compare-lite" - }, - "bugs": { - "url": "https://github.com/litejs/natural-compare-lite/issues" - }, - "buildman": { - "dist/index-min.js": { - "banner": "/*! litejs.com/MIT-LICENSE.txt */", - "input": "index.js" - } - }, - "dependencies": {}, - "description": "Compare strings containing a mix of letters and numbers in the way a human being would in sort order.", - "devDependencies": { - "buildman": "*", - "testman": "*" - }, - "directories": {}, - "dist": { - "shasum": "4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7", - "tarball": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - }, - "files": [ - "index.js" - ], - "gitHead": "eec83eee67cfac84d6db30cdd65363f155673770", - "homepage": "https://github.com/litejs/natural-compare-lite#readme", - "keywords": [ - "string", - "natural", - "order", - "sort", - "natsort", - "natcmp", - "compare", - "alphanum", - "litejs" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "megawac@gmail.com", - "name": "megawac" - } - ], - "name": "natural-compare", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/litejs/natural-compare-lite.git" - }, - "scripts": { - "build": "node node_modules/buildman/index.js --all", - "test": "node tests/index.js" - }, - "stability": 3, - "version": "1.4.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/node-emoji/.npmignore b/fundamentals/bug-challenge-es6/node_modules/node-emoji/.npmignore deleted file mode 100644 index f783750a5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-emoji/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules -*.log -*.sublime-project -*.sublime-workspace -*.txt -test.js \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/node-emoji/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/node-emoji/.travis.yml deleted file mode 100644 index 6e5919de3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-emoji/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/fundamentals/bug-challenge-es6/node_modules/node-emoji/LICENSE b/fundamentals/bug-challenge-es6/node_modules/node-emoji/LICENSE deleted file mode 100644 index 138d13573..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-emoji/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Daniel Bugl - -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/fundamentals/bug-challenge-es6/node_modules/node-emoji/README.md b/fundamentals/bug-challenge-es6/node_modules/node-emoji/README.md deleted file mode 100644 index aa1ff7480..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-emoji/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# node-emoji - -[![NPM version (1.0.3)](https://img.shields.io/npm/v/node-emoji.svg?style=flat-square)](https://www.npmjs.com/package/node-emoji) [![NPM Downloads](https://img.shields.io/npm/dm/node-emoji.svg?style=flat-square)](https://www.npmjs.com/package/node-emoji) [![Build Status](https://img.shields.io/travis/omnidan/node-emoji/master.svg?style=flat-square)](https://travis-ci.org/omnidan/node-emoji) [![Dependencies](https://img.shields.io/david/omnidan/node-emoji.svg?style=flat-square)](https://david-dm.org/omnidan/node-emoji) [![Code Climate](https://img.shields.io/codeclimate/github/omnidan/node-emoji.svg?style=flat-square)](https://codeclimate.com/github/omnidan/node-emoji) [![https://paypal.me/DanielBugl/10](https://img.shields.io/badge/donate-paypal-yellow.svg?style=flat-square)](https://paypal.me/DanielBugl/10) [![https://gratipay.com/~omnidan/](https://img.shields.io/badge/donate-gratipay/bitcoin-yellow.svg?style=flat-square)](https://gratipay.com/~omnidan/) - -_simple emoji support for node.js projects_ - -![node-emoji example](http://i.imgur.com/RgFj97V.png) - -## Installation -To install `node-emoji`, you need [node.js](http://nodejs.org/) and [npm](https://github.com/npm/npm#super-easy-install). :rocket: - -Once you have that set-up, just run `npm install --save node-emoji` in your project directory. :ship: - -You're now ready to use emoji in your node projects! Awesome! :metal: - -## Usage -```javascript -var emoji = require('node-emoji'); -console.log(emoji.get('coffee')); // returns the emoji code for coffee (displays emoji on terminals that support it) -console.log(emoji.which(emoji.get('coffee'))); // returns the string "coffee" -console.log(emoji.get(':fast_forward:')); // `.get` also supports github flavored markdown emoji (http://www.emoji-cheat-sheet.com/) -console.log(emoji.emojify('I :heart: :coffee:!')); // replaces all :emoji: with the actual emoji, in this case: returns "I ❤️ ☕️!" -``` - -## Adding new emoji -Emoji come from js-emoji (Thanks a lot :thumbsup:). You can get a JSON file with all emoji here: https://github.com/omnidan/node-emoji/blob/master/lib/emoji.json - -To update the list or add custom emoji, clone this repository and put them into `lib/emojifile.js`. -Then run `npm run-script emojiparse` in the project directory or `node emojiparse` in the lib directory. -This should generate the new emoji.json file and output `Done.`. - -That's all, you now have more emoji you can use! :clap: - -## Support / Donations -If you want to support node-emoji development, please consider donating (it helps me keeping my projects active and alive!): - - * Paypal: [![daniel.bugl@gmail.com](https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=YBMS9EKTNPZHJ) - * Gratipay: [![https://gratipay.com/omnidan/](https://img.shields.io/gratipay/omnidan.svg?style=flat-square)](https://gratipay.com/omnidan/) - * Bitcoin: 114veSsYoyw2QrXkPTxHD51B5i39TinsBP - -![http://i.imgur.com/RgzXqGD.png](http://i.imgur.com/RgzXqGD.png) diff --git a/fundamentals/bug-challenge-es6/node_modules/node-emoji/index.js b/fundamentals/bug-challenge-es6/node_modules/node-emoji/index.js deleted file mode 100644 index 82bc5892e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-emoji/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./lib/emoji'); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emoji.js b/fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emoji.js deleted file mode 100644 index 5f2abae5f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emoji.js +++ /dev/null @@ -1,90 +0,0 @@ -/*jslint node: true*/ -require('string.prototype.codepointat'); - -"use strict"; - -/** - * regex to parse emoji in a string - finds emoji, e.g. :coffee: - */ -var parser = /:([a-zA-Z0-9_\-\+]+):/g; - -/** - * Emoji namespace - */ -var Emoji = module.exports = { - emoji: require('./emoji.json') -}; - -/** - * get emoji code from name - * @param {string} emoji - * @return {string} - */ -Emoji._get = function _get(emoji) { - if (Emoji.emoji.hasOwnProperty(emoji)) { - return Emoji.emoji[emoji]; - } - return ':' + emoji + ':'; -}; - -/** - * get emoji code from :emoji: string or name - * @param {string} emoji - * @return {string} - */ -Emoji.get = function get(emoji) { - if (emoji.indexOf(':') > -1) { - // :emoji: (http://www.emoji-cheat-sheet.com/) - emoji = emoji.substr(1, emoji.length-2); - } - - return Emoji._get(emoji); -}; - -/** - * get emoji name from code - * @param {string} emoji_code - * @return {string} - */ -Emoji.which = function which(emoji_code) { - for (var prop in Emoji.emoji) { - if (Emoji.emoji.hasOwnProperty(prop)) { - if (Emoji.emoji[prop].codePointAt() === emoji_code.codePointAt()) { - return prop; - } - } - } -}; - -/** - * emojify a string (replace :emoji: with an emoji) - * @param {string} str - * @param {function} on_missing (gets emoji name without :: and returns a proper emoji if no emoji was found) - * @return {string} - */ -Emoji.emojify = function emojify(str, on_missing) { - return str.split(parser) // parse emoji via regex - .map(function parseEmoji(s, i) { - // every second element is an emoji, e.g. "test :fast_forward:" -> [ "test ", "fast_forward" ] - if (i % 2 === 0) return s; - var emoji = Emoji._get(s); - if (emoji.indexOf(':') > -1 && typeof on_missing === 'function') { - return on_missing(emoji.substr(1, emoji.length-2)); - } - return emoji; - }) - .join('') // convert back to string - ; -}; - -/** - * return a random emoji - * @return {string} - */ -Emoji.random = function random() { - var emojiKeys = Object.keys(Emoji.emoji); - var randomIndex = Math.floor(Math.random() * emojiKeys.length); - var key = emojiKeys[randomIndex]; - var emoji = Emoji._get(key); - return {key: key, emoji: emoji}; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emoji.json b/fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emoji.json deleted file mode 100644 index f7adf9d54..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emoji.json +++ /dev/null @@ -1 +0,0 @@ -{"100":"💯","1234":"🔢","interrobang":"⁉️","tm":"™️","information_source":"ℹ️","left_right_arrow":"↔️","arrow_up_down":"↕️","arrow_upper_left":"↖️","arrow_upper_right":"↗️","arrow_lower_right":"↘️","arrow_lower_left":"↙️","keyboard":"⌨","sunny":"☀️","cloud":"☁️","umbrella":"☔️","showman":"☃","comet":"☄","ballot_box_with_check":"☑️","coffee":"☕️","shamrock":"☘","skull_and_crossbones":"☠","radioactive_sign":"☢","biohazard_sign":"☣","orthodox_cross":"☦","wheel_of_dharma":"☸","white_frowning_face":"☹","aries":"♈️","taurus":"♉️","sagittarius":"♐️","capricorn":"♑️","aquarius":"♒️","pisces":"♓️","spades":"♠️","clubs":"♣️","hearts":"♥️","diamonds":"♦️","hotsprings":"♨️","hammer_and_pick":"⚒","anchor":"⚓️","crossed_swords":"⚔","scales":"⚖","alembic":"⚗","gear":"⚙","scissors":"✂️","white_check_mark":"✅","airplane":"✈️","email":"✉️","envelope":"✉️","black_nib":"✒️","heavy_check_mark":"✔️","heavy_multiplication_x":"✖️","star_of_david":"✡","sparkles":"✨","eight_spoked_asterisk":"✳️","eight_pointed_black_star":"✴️","snowflake":"❄️","sparkle":"❇️","question":"❓","grey_question":"❔","grey_exclamation":"❕","exclamation":"❗️","heavy_exclamation_mark":"❗️","heavy_heart_exclamation_mark_ornament":"❣","heart":"❤️","heavy_plus_sign":"➕","heavy_minus_sign":"➖","heavy_division_sign":"➗","arrow_heading_up":"⤴️","arrow_heading_down":"⤵️","wavy_dash":"〰️","congratulations":"㊗️","secret":"㊙️","copyright":"©️","registered":"®️","bangbang":"‼️","leftwards_arrow_with_hook":"↩️","arrow_right_hook":"↪️","watch":"⌚️","hourglass":"⌛️","fast_forward":"⏩","rewind":"⏪","arrow_double_up":"⏫","arrow_double_down":"⏬","black_right_pointing_double_triangle_with_vertical_bar":"⏭","black_left_pointing_double_triangle_with_vertical_bar":"⏮","black_right_pointing_triangle_with_double_vertical_bar":"⏯","alarm_clock":"⏰","stopwatch":"⏱","timer_clock":"⏲","hourglass_flowing_sand":"⏳","double_vertical_bar":"⏸","black_square_for_stop":"⏹","black_circle_for_record":"⏺","m":"Ⓜ️","black_small_square":"▪️","white_small_square":"▫️","arrow_forward":"▶️","arrow_backward":"◀️","white_medium_square":"◻️","black_medium_square":"◼️","white_medium_small_square":"◽️","black_medium_small_square":"◾️","phone":"☎️","telephone":"☎️","point_up":"☝️","star_and_crescent":"☪","peace_symbol":"☮","yin_yang":"☯","relaxed":"☺️","gemini":"♊️","cancer":"♋️","leo":"♌️","virgo":"♍️","libra":"♎️","scorpius":"♏️","recycle":"♻️","wheelchair":"♿️","atom_symbol":"⚛","fleur_de_lis":"⚜","warning":"⚠️","zap":"⚡️","white_circle":"⚪️","black_circle":"⚫️","coffin":"⚰","funeral_urn":"⚱","soccer":"⚽️","baseball":"⚾️","snowman":"⛄️","partly_sunny":"⛅️","thunder_cloud_and_rain":"⛈","ophiuchus":"⛎","pick":"⛏","helmet_with_white_cross":"⛑","chains":"⛓","no_entry":"⛔️","shinto_shrine":"⛩","church":"⛪️","mountain":"⛰","umbrella_on_ground":"⛱","fountain":"⛲️","golf":"⛳️","ferry":"⛴","boat":"⛵️","sailboat":"⛵️","skier":"⛷","ice_skate":"⛸","person_with_ball":"⛹","tent":"⛺️","fuelpump":"⛽️","fist":"✊","hand":"✋","raised_hand":"✋","v":"✌️","writing_hand":"✍","pencil2":"✏️","latin_cross":"✝","x":"❌","negative_squared_cross_mark":"❎","arrow_right":"➡️","curly_loop":"➰","loop":"➿","arrow_left":"⬅️","arrow_up":"⬆️","arrow_down":"⬇️","black_large_square":"⬛️","white_large_square":"⬜️","star":"⭐️","o":"⭕️","part_alternation_mark":"〽️","mahjong":"🀄️","black_joker":"🃏","a":"🅰️","b":"🅱️","o2":"🅾️","parking":"🅿️","ab":"🆎","cl":"🆑","cool":"🆒","free":"🆓","id":"🆔","new":"🆕","ng":"🆖","ok":"🆗","sos":"🆘","up":"🆙","vs":"🆚","koko":"🈁","sa":"🈂️","u7121":"🈚️","u6307":"🈯️","u7981":"🈲","u7a7a":"🈳","u5408":"🈴","u6e80":"🈵","u6709":"🈶","u6708":"🈷️","u7533":"🈸","u5272":"🈹","u55b6":"🈺","ideograph_advantage":"🉐","accept":"🉑","cyclone":"🌀","foggy":"🌁","closed_umbrella":"🌂","night_with_stars":"🌃","sunrise_over_mountains":"🌄","sunrise":"🌅","city_sunset":"🌆","city_sunrise":"🌇","rainbow":"🌈","bridge_at_night":"🌉","ocean":"🌊","volcano":"🌋","milky_way":"🌌","earth_africa":"🌍","earth_americas":"🌎","earth_asia":"🌏","globe_with_meridians":"🌐","new_moon":"🌑","waxing_crescent_moon":"🌒","first_quarter_moon":"🌓","moon":"🌔","waxing_gibbous_moon":"🌔","full_moon":"🌕","waning_gibbous_moon":"🌖","last_quarter_moon":"🌗","waning_crescent_moon":"🌘","crescent_moon":"🌙","new_moon_with_face":"🌚","first_quarter_moon_with_face":"🌛","last_quarter_moon_with_face":"🌜","full_moon_with_face":"🌝","sun_with_face":"🌞","star2":"🌟","stars":"🌠","thermometer":"🌡","mostly_sunny":"🌤","sun_small_cloud":"🌤","barely_sunny":"🌥","sun_behind_cloud":"🌥","partly_sunny_rain":"🌦","sun_behind_rain_cloud":"🌦","rain_cloud":"🌧","snow_cloud":"🌨","lightning":"🌩","lightning_cloud":"🌩","tornado":"🌪","tornado_cloud":"🌪","fog":"🌫","wind_blowing_face":"🌬","hotdog":"🌭","taco":"🌮","burrito":"🌯","chestnut":"🌰","seedling":"🌱","evergreen_tree":"🌲","deciduous_tree":"🌳","palm_tree":"🌴","cactus":"🌵","hot_pepper":"🌶","tulip":"🌷","cherry_blossom":"🌸","rose":"🌹","hibiscus":"🌺","sunflower":"🌻","blossom":"🌼","corn":"🌽","ear_of_rice":"🌾","herb":"🌿","four_leaf_clover":"🍀","maple_leaf":"🍁","fallen_leaf":"🍂","leaves":"🍃","mushroom":"🍄","tomato":"🍅","eggplant":"🍆","grapes":"🍇","melon":"🍈","watermelon":"🍉","tangerine":"🍊","lemon":"🍋","banana":"🍌","pineapple":"🍍","apple":"🍎","green_apple":"🍏","pear":"🍐","peach":"🍑","cherries":"🍒","strawberry":"🍓","hamburger":"🍔","pizza":"🍕","meat_on_bone":"🍖","poultry_leg":"🍗","rice_cracker":"🍘","rice_ball":"🍙","rice":"🍚","curry":"🍛","ramen":"🍜","spaghetti":"🍝","bread":"🍞","fries":"🍟","sweet_potato":"🍠","dango":"🍡","oden":"🍢","sushi":"🍣","fried_shrimp":"🍤","fish_cake":"🍥","icecream":"🍦","shaved_ice":"🍧","ice_cream":"🍨","doughnut":"🍩","cookie":"🍪","chocolate_bar":"🍫","candy":"🍬","lollipop":"🍭","custard":"🍮","honey_pot":"🍯","cake":"🍰","bento":"🍱","stew":"🍲","egg":"🍳","fork_and_knife":"🍴","tea":"🍵","sake":"🍶","wine_glass":"🍷","cocktail":"🍸","tropical_drink":"🍹","beer":"🍺","beers":"🍻","baby_bottle":"🍼","knife_fork_plate":"🍽","champagne":"🍾","popcorn":"🍿","ribbon":"🎀","gift":"🎁","birthday":"🎂","jack_o_lantern":"🎃","christmas_tree":"🎄","santa":"🎅","fireworks":"🎆","sparkler":"🎇","balloon":"🎈","tada":"🎉","confetti_ball":"🎊","tanabata_tree":"🎋","crossed_flags":"🎌","bamboo":"🎍","dolls":"🎎","flags":"🎏","wind_chime":"🎐","rice_scene":"🎑","school_satchel":"🎒","mortar_board":"🎓","medal":"🎖","reminder_ribbon":"🎗","studio_microphone":"🎙","level_slider":"🎚","control_knobs":"🎛","film_frames":"🎞","admission_tickets":"🎟","carousel_horse":"🎠","ferris_wheel":"🎡","roller_coaster":"🎢","fishing_pole_and_fish":"🎣","microphone":"🎤","movie_camera":"🎥","cinema":"🎦","headphones":"🎧","art":"🎨","tophat":"🎩","circus_tent":"🎪","ticket":"🎫","clapper":"🎬","performing_arts":"🎭","video_game":"🎮","dart":"🎯","slot_machine":"🎰","8ball":"🎱","game_die":"🎲","bowling":"🎳","flower_playing_cards":"🎴","musical_note":"🎵","notes":"🎶","saxophone":"🎷","guitar":"🎸","musical_keyboard":"🎹","trumpet":"🎺","violin":"🎻","musical_score":"🎼","running_shirt_with_sash":"🎽","tennis":"🎾","ski":"🎿","basketball":"🏀","checkered_flag":"🏁","snowboarder":"🏂","runner":"🏃","running":"🏃","surfer":"🏄","sports_medal":"🏅","trophy":"🏆","horse_racing":"🏇","football":"🏈","rugby_football":"🏉","swimmer":"🏊","weight_lifter":"🏋","golfer":"🏌","racing_motorcycle":"🏍","racing_car":"🏎","cricket_bat_and_ball":"🏏","volleyball":"🏐","field_hockey_stick_and_ball":"🏑","ice_hockey_stick_and_puck":"🏒","table_tennis_paddle_and_ball":"🏓","snow_capped_mountain":"🏔","camping":"🏕","beach_with_umbrella":"🏖","building_construction":"🏗","house_buildings":"🏘","cityscape":"🏙","derelict_house_building":"🏚","classical_building":"🏛","desert":"🏜","desert_island":"🏝","national_park":"🏞","stadium":"🏟","house":"🏠","house_with_garden":"🏡","office":"🏢","post_office":"🏣","european_post_office":"🏤","hospital":"🏥","bank":"🏦","atm":"🏧","hotel":"🏨","love_hotel":"🏩","convenience_store":"🏪","school":"🏫","department_store":"🏬","factory":"🏭","izakaya_lantern":"🏮","lantern":"🏮","japanese_castle":"🏯","european_castle":"🏰","waving_white_flag":"🏳","waving_black_flag":"🏴","rosette":"🏵","label":"🏷","badminton_racquet_and_shuttlecock":"🏸","bow_and_arrow":"🏹","amphora":"🏺","skin-tone-2":"🏻","skin-tone-3":"🏼","skin-tone-4":"🏽","skin-tone-5":"🏾","skin-tone-6":"🏿","rat":"🐀","mouse2":"🐁","ox":"🐂","water_buffalo":"🐃","cow2":"🐄","tiger2":"🐅","leopard":"🐆","rabbit2":"🐇","cat2":"🐈","dragon":"🐉","crocodile":"🐊","whale2":"🐋","snail":"🐌","snake":"🐍","racehorse":"🐎","ram":"🐏","goat":"🐐","sheep":"🐑","monkey":"🐒","rooster":"🐓","chicken":"🐔","dog2":"🐕","pig2":"🐖","boar":"🐗","elephant":"🐘","octopus":"🐙","shell":"🐚","bug":"🐛","ant":"🐜","bee":"🐝","honeybee":"🐝","beetle":"🐞","fish":"🐟","tropical_fish":"🐠","blowfish":"🐡","turtle":"🐢","hatching_chick":"🐣","baby_chick":"🐤","hatched_chick":"🐥","bird":"🐦","penguin":"🐧","koala":"🐨","poodle":"🐩","dromedary_camel":"🐪","camel":"🐫","dolphin":"🐬","flipper":"🐬","mouse":"🐭","cow":"🐮","tiger":"🐯","rabbit":"🐰","cat":"🐱","dragon_face":"🐲","whale":"🐳","horse":"🐴","monkey_face":"🐵","dog":"🐶","pig":"🐷","frog":"🐸","hamster":"🐹","wolf":"🐺","bear":"🐻","panda_face":"🐼","pig_nose":"🐽","feet":"🐾","paw_prints":"🐾","chipmunk":"🐿","eyes":"👀","eye":"👁","ear":"👂","nose":"👃","lips":"👄","tongue":"👅","point_up_2":"👆","point_down":"👇","point_left":"👈","point_right":"👉","facepunch":"👊","punch":"👊","wave":"👋","ok_hand":"👌","+1":"👍","thumbsup":"👍","-1":"👎","thumbsdown":"👎","clap":"👏","open_hands":"👐","crown":"👑","womans_hat":"👒","eyeglasses":"👓","necktie":"👔","shirt":"👕","tshirt":"👕","jeans":"👖","dress":"👗","kimono":"👘","bikini":"👙","womans_clothes":"👚","purse":"👛","handbag":"👜","pouch":"👝","mans_shoe":"👞","shoe":"👞","athletic_shoe":"👟","high_heel":"👠","sandal":"👡","boot":"👢","footprints":"👣","bust_in_silhouette":"👤","busts_in_silhouette":"👥","boy":"👦","girl":"👧","man":"👨","woman":"👩","family":"👨‍👩‍👦","man-woman-boy":"👨‍👩‍👦","couple":"👫","man_and_woman_holding_hands":"👫","two_men_holding_hands":"👬","two_women_holding_hands":"👭","cop":"👮","dancers":"👯","bride_with_veil":"👰","person_with_blond_hair":"👱","man_with_gua_pi_mao":"👲","man_with_turban":"👳","older_man":"👴","older_woman":"👵","baby":"👶","construction_worker":"👷","princess":"👸","japanese_ogre":"👹","japanese_goblin":"👺","ghost":"👻","angel":"👼","alien":"👽","space_invader":"👾","imp":"👿","skull":"💀","information_desk_person":"💁","guardsman":"💂","dancer":"💃","lipstick":"💄","nail_care":"💅","massage":"💆","haircut":"💇","barber":"💈","syringe":"💉","pill":"💊","kiss":"💋","love_letter":"💌","ring":"💍","gem":"💎","couplekiss":"💏","bouquet":"💐","couple_with_heart":"💑","wedding":"💒","heartbeat":"💓","broken_heart":"💔","two_hearts":"💕","sparkling_heart":"💖","heartpulse":"💗","cupid":"💘","blue_heart":"💙","green_heart":"💚","yellow_heart":"💛","purple_heart":"💜","gift_heart":"💝","revolving_hearts":"💞","heart_decoration":"💟","diamond_shape_with_a_dot_inside":"💠","bulb":"💡","anger":"💢","bomb":"💣","zzz":"💤","boom":"💥","collision":"💥","sweat_drops":"💦","droplet":"💧","dash":"💨","hankey":"💩","poop":"💩","shit":"💩","muscle":"💪","dizzy":"💫","speech_balloon":"💬","thought_balloon":"💭","white_flower":"💮","moneybag":"💰","currency_exchange":"💱","heavy_dollar_sign":"💲","credit_card":"💳","yen":"💴","dollar":"💵","euro":"💶","pound":"💷","money_with_wings":"💸","chart":"💹","seat":"💺","computer":"💻","briefcase":"💼","minidisc":"💽","floppy_disk":"💾","cd":"💿","dvd":"📀","file_folder":"📁","open_file_folder":"📂","page_with_curl":"📃","page_facing_up":"📄","date":"📅","calendar":"📆","card_index":"📇","chart_with_upwards_trend":"📈","chart_with_downwards_trend":"📉","bar_chart":"📊","clipboard":"📋","pushpin":"📌","round_pushpin":"📍","paperclip":"📎","straight_ruler":"📏","triangular_ruler":"📐","bookmark_tabs":"📑","ledger":"📒","notebook":"📓","notebook_with_decorative_cover":"📔","closed_book":"📕","book":"📖","open_book":"📖","green_book":"📗","blue_book":"📘","orange_book":"📙","books":"📚","name_badge":"📛","scroll":"📜","memo":"📝","pencil":"📝","telephone_receiver":"📞","pager":"📟","fax":"📠","satellite":"🛰","loudspeaker":"📢","mega":"📣","outbox_tray":"📤","inbox_tray":"📥","package":"📦","e-mail":"📧","incoming_envelope":"📨","envelope_with_arrow":"📩","mailbox_closed":"📪","mailbox":"📫","mailbox_with_mail":"📬","mailbox_with_no_mail":"📭","postbox":"📮","postal_horn":"📯","newspaper":"📰","iphone":"📱","calling":"📲","vibration_mode":"📳","mobile_phone_off":"📴","no_mobile_phones":"📵","signal_strength":"📶","camera":"📷","camera_with_flash":"📸","video_camera":"📹","tv":"📺","radio":"📻","vhs":"📼","film_projector":"📽","prayer_beads":"📿","twisted_rightwards_arrows":"🔀","repeat":"🔁","repeat_one":"🔂","arrows_clockwise":"🔃","arrows_counterclockwise":"🔄","low_brightness":"🔅","high_brightness":"🔆","mute":"🔇","speaker":"🔈","sound":"🔉","loud_sound":"🔊","battery":"🔋","electric_plug":"🔌","mag":"🔍","mag_right":"🔎","lock_with_ink_pen":"🔏","closed_lock_with_key":"🔐","key":"🔑","lock":"🔒","unlock":"🔓","bell":"🔔","no_bell":"🔕","bookmark":"🔖","link":"🔗","radio_button":"🔘","back":"🔙","end":"🔚","on":"🔛","soon":"🔜","top":"🔝","underage":"🔞","keycap_ten":"🔟","capital_abcd":"🔠","abcd":"🔡","symbols":"🔣","abc":"🔤","fire":"🔥","flashlight":"🔦","wrench":"🔧","hammer":"🔨","nut_and_bolt":"🔩","hocho":"🔪","knife":"🔪","gun":"🔫","microscope":"🔬","telescope":"🔭","crystal_ball":"🔮","six_pointed_star":"🔯","beginner":"🔰","trident":"🔱","black_square_button":"🔲","white_square_button":"🔳","red_circle":"🔴","large_blue_circle":"🔵","large_orange_diamond":"🔶","large_blue_diamond":"🔷","small_orange_diamond":"🔸","small_blue_diamond":"🔹","small_red_triangle":"🔺","small_red_triangle_down":"🔻","arrow_up_small":"🔼","arrow_down_small":"🔽","om_symbol":"🕉","dove_of_peace":"🕊","kaaba":"🕋","mosque":"🕌","synagogue":"🕍","menorah_with_nine_branches":"🕎","clock1":"🕐","clock2":"🕑","clock3":"🕒","clock4":"🕓","clock5":"🕔","clock6":"🕕","clock7":"🕖","clock8":"🕗","clock9":"🕘","clock10":"🕙","clock11":"🕚","clock12":"🕛","clock130":"🕜","clock230":"🕝","clock330":"🕞","clock430":"🕟","clock530":"🕠","clock630":"🕡","clock730":"🕢","clock830":"🕣","clock930":"🕤","clock1030":"🕥","clock1130":"🕦","clock1230":"🕧","candle":"🕯","mantelpiece_clock":"🕰","hole":"🕳","man_in_business_suit_levitating":"🕴","sleuth_or_spy":"🕵","dark_sunglasses":"🕶","spider":"🕷","spider_web":"🕸","joystick":"🕹","linked_paperclips":"🖇","lower_left_ballpoint_pen":"🖊","lower_left_fountain_pen":"🖋","lower_left_paintbrush":"🖌","lower_left_crayon":"🖍","raised_hand_with_fingers_splayed":"🖐","middle_finger":"🖕","reversed_hand_with_middle_finger_extended":"🖕","spock-hand":"🖖","desktop_computer":"🖥","printer":"🖨","three_button_mouse":"🖱","trackball":"🖲","frame_with_picture":"🖼","card_index_dividers":"🗂","card_file_box":"🗃","file_cabinet":"🗄","wastebasket":"🗑","spiral_note_pad":"🗒","spiral_calendar_pad":"🗓","compression":"🗜","old_key":"🗝","rolled_up_newspaper":"🗞","dagger_knife":"🗡","speaking_head_in_silhouette":"🗣","left_speech_bubble":"🗨","right_anger_bubble":"🗯","ballot_box_with_ballot":"🗳","world_map":"🗺","mount_fuji":"🗻","tokyo_tower":"🗼","statue_of_liberty":"🗽","japan":"🗾","moyai":"🗿","grinning":"😀","grin":"😁","joy":"😂","smiley":"😃","smile":"😄","sweat_smile":"😅","laughing":"😆","satisfied":"😆","innocent":"😇","smiling_imp":"😈","wink":"😉","blush":"😊","yum":"😋","relieved":"😌","heart_eyes":"😍","sunglasses":"😎","smirk":"😏","neutral_face":"😐","expressionless":"😑","unamused":"😒","sweat":"😓","pensive":"😔","confused":"😕","confounded":"😖","kissing":"😗","kissing_heart":"😘","kissing_smiling_eyes":"😙","kissing_closed_eyes":"😚","stuck_out_tongue":"😛","stuck_out_tongue_winking_eye":"😜","stuck_out_tongue_closed_eyes":"😝","disappointed":"😞","worried":"😟","angry":"😠","rage":"😡","cry":"😢","persevere":"😣","triumph":"😤","disappointed_relieved":"😥","frowning":"😦","anguished":"😧","fearful":"😨","weary":"😩","sleepy":"😪","tired_face":"😫","grimacing":"😬","sob":"😭","open_mouth":"😮","hushed":"😯","cold_sweat":"😰","scream":"😱","astonished":"😲","flushed":"😳","sleeping":"😴","dizzy_face":"😵","no_mouth":"😶","mask":"😷","smile_cat":"😸","joy_cat":"😹","smiley_cat":"😺","heart_eyes_cat":"😻","smirk_cat":"😼","kissing_cat":"😽","pouting_cat":"😾","crying_cat_face":"😿","scream_cat":"🙀","slightly_frowning_face":"🙁","slightly_smiling_face":"🙂","upside_down_face":"🙃","face_with_rolling_eyes":"🙄","no_good":"🙅","ok_woman":"🙆","bow":"🙇","see_no_evil":"🙈","hear_no_evil":"🙉","speak_no_evil":"🙊","raising_hand":"🙋","raised_hands":"🙌","person_frowning":"🙍","person_with_pouting_face":"🙎","pray":"🙏","rocket":"🚀","helicopter":"🚁","steam_locomotive":"🚂","railway_car":"🚃","bullettrain_side":"🚄","bullettrain_front":"🚅","train2":"🚆","metro":"🚇","light_rail":"🚈","station":"🚉","tram":"🚊","train":"🚋","bus":"🚌","oncoming_bus":"🚍","trolleybus":"🚎","busstop":"🚏","minibus":"🚐","ambulance":"🚑","fire_engine":"🚒","police_car":"🚓","oncoming_police_car":"🚔","taxi":"🚕","oncoming_taxi":"🚖","car":"🚗","red_car":"🚗","oncoming_automobile":"🚘","blue_car":"🚙","truck":"🚚","articulated_lorry":"🚛","tractor":"🚜","monorail":"🚝","mountain_railway":"🚞","suspension_railway":"🚟","mountain_cableway":"🚠","aerial_tramway":"🚡","ship":"🚢","rowboat":"🚣","speedboat":"🚤","traffic_light":"🚥","vertical_traffic_light":"🚦","construction":"🚧","rotating_light":"🚨","triangular_flag_on_post":"🚩","door":"🚪","no_entry_sign":"🚫","smoking":"🚬","no_smoking":"🚭","put_litter_in_its_place":"🚮","do_not_litter":"🚯","potable_water":"🚰","non-potable_water":"🚱","bike":"🚲","no_bicycles":"🚳","bicyclist":"🚴","mountain_bicyclist":"🚵","walking":"🚶","no_pedestrians":"🚷","children_crossing":"🚸","mens":"🚹","womens":"🚺","restroom":"🚻","baby_symbol":"🚼","toilet":"🚽","wc":"🚾","shower":"🚿","bath":"🛀","bathtub":"🛁","passport_control":"🛂","customs":"🛃","baggage_claim":"🛄","left_luggage":"🛅","couch_and_lamp":"🛋","sleeping_accommodation":"🛌","shopping_bags":"🛍","bellhop_bell":"🛎","bed":"🛏","place_of_worship":"🛐","hammer_and_wrench":"🛠","shield":"🛡","oil_drum":"🛢","motorway":"🛣","railway_track":"🛤","motor_boat":"🛥","small_airplane":"🛩","airplane_departure":"🛫","airplane_arriving":"🛬","passenger_ship":"🛳","zipper_mouth_face":"🤐","money_mouth_face":"🤑","face_with_thermometer":"🤒","nerd_face":"🤓","thinking_face":"🤔","face_with_head_bandage":"🤕","robot_face":"🤖","hugging_face":"🤗","the_horns":"🤘","sign_of_the_horns":"🤘","crab":"🦀","lion_face":"🦁","scorpion":"🦂","turkey":"🦃","unicorn_face":"🦄","cheese_wedge":"🧀","hash":"#️⃣","keycap_star":"*⃣","zero":"0️⃣","one":"1️⃣","two":"2️⃣","three":"3️⃣","four":"4️⃣","five":"5️⃣","six":"6️⃣","seven":"7️⃣","eight":"8️⃣","nine":"9️⃣","flag-ac":"🇦🇨","flag-ad":"🇦🇩","flag-ae":"🇦🇪","flag-af":"🇦🇫","flag-ag":"🇦🇬","flag-ai":"🇦🇮","flag-al":"🇦🇱","flag-am":"🇦🇲","flag-ao":"🇦🇴","flag-aq":"🇦🇶","flag-ar":"🇦🇷","flag-as":"🇦🇸","flag-at":"🇦🇹","flag-au":"🇦🇺","flag-aw":"🇦🇼","flag-ax":"🇦🇽","flag-az":"🇦🇿","flag-ba":"🇧🇦","flag-bb":"🇧🇧","flag-bd":"🇧🇩","flag-be":"🇧🇪","flag-bf":"🇧🇫","flag-bg":"🇧🇬","flag-bh":"🇧🇭","flag-bi":"🇧🇮","flag-bj":"🇧🇯","flag-bl":"🇧🇱","flag-bm":"🇧🇲","flag-bn":"🇧🇳","flag-bo":"🇧🇴","flag-bq":"🇧🇶","flag-br":"🇧🇷","flag-bs":"🇧🇸","flag-bt":"🇧🇹","flag-bv":"🇧🇻","flag-bw":"🇧🇼","flag-by":"🇧🇾","flag-bz":"🇧🇿","flag-ca":"🇨🇦","flag-cc":"🇨🇨","flag-cd":"🇨🇩","flag-cf":"🇨🇫","flag-cg":"🇨🇬","flag-ch":"🇨🇭","flag-ci":"🇨🇮","flag-ck":"🇨🇰","flag-cl":"🇨🇱","flag-cm":"🇨🇲","flag-cn":"🇨🇳","cn":"🇨🇳","flag-co":"🇨🇴","flag-cp":"🇨🇵","flag-cr":"🇨🇷","flag-cu":"🇨🇺","flag-cv":"🇨🇻","flag-cw":"🇨🇼","flag-cx":"🇨🇽","flag-cy":"🇨🇾","flag-cz":"🇨🇿","flag-de":"🇩🇪","de":"🇩🇪","flag-dg":"🇩🇬","flag-dj":"🇩🇯","flag-dk":"🇩🇰","flag-dm":"🇩🇲","flag-do":"🇩🇴","flag-dz":"🇩🇿","flag-ea":"🇪🇦","flag-ec":"🇪🇨","flag-ee":"🇪🇪","flag-eg":"🇪🇬","flag-eh":"🇪🇭","flag-er":"🇪🇷","flag-es":"🇪🇸","es":"🇪🇸","flag-et":"🇪🇹","flag-eu":"🇪🇺","flag-fi":"🇫🇮","flag-fj":"🇫🇯","flag-fk":"🇫🇰","flag-fm":"🇫🇲","flag-fo":"🇫🇴","flag-fr":"🇫🇷","fr":"🇫🇷","flag-ga":"🇬🇦","flag-gb":"🇬🇧","gb":"🇬🇧","uk":"🇬🇧","flag-gd":"🇬🇩","flag-ge":"🇬🇪","flag-gf":"🇬🇫","flag-gg":"🇬🇬","flag-gh":"🇬🇭","flag-gi":"🇬🇮","flag-gl":"🇬🇱","flag-gm":"🇬🇲","flag-gn":"🇬🇳","flag-gp":"🇬🇵","flag-gq":"🇬🇶","flag-gr":"🇬🇷","flag-gs":"🇬🇸","flag-gt":"🇬🇹","flag-gu":"🇬🇺","flag-gw":"🇬🇼","flag-gy":"🇬🇾","flag-hk":"🇭🇰","flag-hm":"🇭🇲","flag-hn":"🇭🇳","flag-hr":"🇭🇷","flag-ht":"🇭🇹","flag-hu":"🇭🇺","flag-ic":"🇮🇨","flag-id":"🇮🇩","flag-ie":"🇮🇪","flag-il":"🇮🇱","flag-im":"🇮🇲","flag-in":"🇮🇳","flag-io":"🇮🇴","flag-iq":"🇮🇶","flag-ir":"🇮🇷","flag-is":"🇮🇸","flag-it":"🇮🇹","it":"🇮🇹","flag-je":"🇯🇪","flag-jm":"🇯🇲","flag-jo":"🇯🇴","flag-jp":"🇯🇵","jp":"🇯🇵","flag-ke":"🇰🇪","flag-kg":"🇰🇬","flag-kh":"🇰🇭","flag-ki":"🇰🇮","flag-km":"🇰🇲","flag-kn":"🇰🇳","flag-kp":"🇰🇵","flag-kr":"🇰🇷","kr":"🇰🇷","flag-kw":"🇰🇼","flag-ky":"🇰🇾","flag-kz":"🇰🇿","flag-la":"🇱🇦","flag-lb":"🇱🇧","flag-lc":"🇱🇨","flag-li":"🇱🇮","flag-lk":"🇱🇰","flag-lr":"🇱🇷","flag-ls":"🇱🇸","flag-lt":"🇱🇹","flag-lu":"🇱🇺","flag-lv":"🇱🇻","flag-ly":"🇱🇾","flag-ma":"🇲🇦","flag-mc":"🇲🇨","flag-md":"🇲🇩","flag-me":"🇲🇪","flag-mf":"🇲🇫","flag-mg":"🇲🇬","flag-mh":"🇲🇭","flag-mk":"🇲🇰","flag-ml":"🇲🇱","flag-mm":"🇲🇲","flag-mn":"🇲🇳","flag-mo":"🇲🇴","flag-mp":"🇲🇵","flag-mq":"🇲🇶","flag-mr":"🇲🇷","flag-ms":"🇲🇸","flag-mt":"🇲🇹","flag-mu":"🇲🇺","flag-mv":"🇲🇻","flag-mw":"🇲🇼","flag-mx":"🇲🇽","flag-my":"🇲🇾","flag-mz":"🇲🇿","flag-na":"🇳🇦","flag-nc":"🇳🇨","flag-ne":"🇳🇪","flag-nf":"🇳🇫","flag-ng":"🇳🇬","flag-ni":"🇳🇮","flag-nl":"🇳🇱","flag-no":"🇳🇴","flag-np":"🇳🇵","flag-nr":"🇳🇷","flag-nu":"🇳🇺","flag-nz":"🇳🇿","flag-om":"🇴🇲","flag-pa":"🇵🇦","flag-pe":"🇵🇪","flag-pf":"🇵🇫","flag-pg":"🇵🇬","flag-ph":"🇵🇭","flag-pk":"🇵🇰","flag-pl":"🇵🇱","flag-pm":"🇵🇲","flag-pn":"🇵🇳","flag-pr":"🇵🇷","flag-ps":"🇵🇸","flag-pt":"🇵🇹","flag-pw":"🇵🇼","flag-py":"🇵🇾","flag-qa":"🇶🇦","flag-re":"🇷🇪","flag-ro":"🇷🇴","flag-rs":"🇷🇸","flag-ru":"🇷🇺","ru":"🇷🇺","flag-rw":"🇷🇼","flag-sa":"🇸🇦","flag-sb":"🇸🇧","flag-sc":"🇸🇨","flag-sd":"🇸🇩","flag-se":"🇸🇪","flag-sg":"🇸🇬","flag-sh":"🇸🇭","flag-si":"🇸🇮","flag-sj":"🇸🇯","flag-sk":"🇸🇰","flag-sl":"🇸🇱","flag-sm":"🇸🇲","flag-sn":"🇸🇳","flag-so":"🇸🇴","flag-sr":"🇸🇷","flag-ss":"🇸🇸","flag-st":"🇸🇹","flag-sv":"🇸🇻","flag-sx":"🇸🇽","flag-sy":"🇸🇾","flag-sz":"🇸🇿","flag-ta":"🇹🇦","flag-tc":"🇹🇨","flag-td":"🇹🇩","flag-tf":"🇹🇫","flag-tg":"🇹🇬","flag-th":"🇹🇭","flag-tj":"🇹🇯","flag-tk":"🇹🇰","flag-tl":"🇹🇱","flag-tm":"🇹🇲","flag-tn":"🇹🇳","flag-to":"🇹🇴","flag-tr":"🇹🇷","flag-tt":"🇹🇹","flag-tv":"🇹🇻","flag-tw":"🇹🇼","flag-tz":"🇹🇿","flag-ua":"🇺🇦","flag-ug":"🇺🇬","flag-um":"🇺🇲","flag-us":"🇺🇸","us":"🇺🇸","flag-uy":"🇺🇾","flag-uz":"🇺🇿","flag-va":"🇻🇦","flag-vc":"🇻🇨","flag-ve":"🇻🇪","flag-vg":"🇻🇬","flag-vi":"🇻🇮","flag-vn":"🇻🇳","flag-vu":"🇻🇺","flag-wf":"🇼🇫","flag-ws":"🇼🇸","flag-xk":"🇽🇰","flag-ye":"🇾🇪","flag-yt":"🇾🇹","flag-za":"🇿🇦","flag-zm":"🇿🇲","flag-zw":"🇿🇼","man-man-boy":"👨‍👨‍👦","man-man-boy-boy":"👨‍👨‍👦‍👦","man-man-girl":"👨‍👨‍👧","man-man-girl-boy":"👨‍👨‍👧‍👦","man-man-girl-girl":"👨‍👨‍👧‍👧","man-woman-boy-boy":"👨‍👩‍👦‍👦","man-woman-girl":"👨‍👩‍👧","man-woman-girl-boy":"👨‍👩‍👧‍👦","man-woman-girl-girl":"👨‍👩‍👧‍👧","man-heart-man":"👨‍❤️‍👨","man-kiss-man":"👨‍❤️‍💋‍👨","woman-woman-boy":"👩‍👩‍👦","woman-woman-boy-boy":"👩‍👩‍👦‍👦","woman-woman-girl":"👩‍👩‍👧","woman-woman-girl-boy":"👩‍👩‍👧‍👦","woman-woman-girl-girl":"👩‍👩‍👧‍👧","woman-heart-woman":"👩‍❤️‍👩","woman-kiss-woman":"👩‍❤️‍💋‍👩"} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emojifile.js b/fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emojifile.js deleted file mode 100644 index ac09f64c7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emojifile.js +++ /dev/null @@ -1,1304 +0,0 @@ -// from https://github.com/iamcal/js-emoji/blob/master/lib/emoji.js -var emoji = {}; -module.exports = emoji; - emoji.data = { - "00a9":[["\u00A9\uFE0F","\u00A9"],"\uE24E","\uDBBA\uDF29",["copyright"],0,0,11,0], - "00ae":[["\u00AE\uFE0F","\u00AE"],"\uE24F","\uDBBA\uDF2D",["registered"],0,1,11,0], - "203c":[["\u203C\uFE0F","\u203C"],"","\uDBBA\uDF06",["bangbang"],0,2,15,0], - "2049":[["\u2049\uFE0F","\u2049"],"","\uDBBA\uDF05",["interrobang"],0,3,15,0], - "2122":[["\u2122\uFE0F","\u2122"],"\uE537","\uDBBA\uDF2A",["tm"],0,4,11,0], - "2139":[["\u2139\uFE0F","\u2139"],"","\uDBBA\uDF47",["information_source"],0,5,15,0], - "2194":[["\u2194\uFE0F","\u2194"],"","\uDBBA\uDEF6",["left_right_arrow"],0,6,15,0], - "2195":[["\u2195\uFE0F","\u2195"],"","\uDBBA\uDEF7",["arrow_up_down"],0,7,15,0], - "2196":[["\u2196\uFE0F","\u2196"],"\uE237","\uDBBA\uDEF2",["arrow_upper_left"],0,8,15,0], - "2197":[["\u2197\uFE0F","\u2197"],"\uE236","\uDBBA\uDEF0",["arrow_upper_right"],0,9,15,0], - "2198":[["\u2198\uFE0F","\u2198"],"\uE238","\uDBBA\uDEF1",["arrow_lower_right"],0,10,15,0], - "2199":[["\u2199\uFE0F","\u2199"],"\uE239","\uDBBA\uDEF3",["arrow_lower_left"],0,11,15,0], - "21a9":[["\u21A9\uFE0F","\u21A9"],"","\uDBBA\uDF83",["leftwards_arrow_with_hook"],0,12,15,0], - "21aa":[["\u21AA\uFE0F","\u21AA"],"","\uDBBA\uDF88",["arrow_right_hook"],0,13,15,0], - "231a":[["\u231A\uFE0F","\u231A"],"","\uDBB8\uDC1D",["watch"],0,14,15,0], - "231b":[["\u231B\uFE0F","\u231B"],"","\uDBB8\uDC1C",["hourglass"],0,15,15,0], - "2328":[["\u2328"],"","",["keyboard"],0,16,7,0], - "23e9":[["\u23E9"],"\uE23C","\uDBBA\uDEFE",["fast_forward"],0,17,15,0], - "23ea":[["\u23EA"],"\uE23D","\uDBBA\uDEFF",["rewind"],0,18,15,0], - "23eb":[["\u23EB"],"","\uDBBA\uDF03",["arrow_double_up"],0,19,15,0], - "23ec":[["\u23EC"],"","\uDBBA\uDF02",["arrow_double_down"],0,20,15,0], - "23ed":[["\u23ED"],"","",["black_right_pointing_double_triangle_with_vertical_bar"],0,21,7,0], - "23ee":[["\u23EE"],"","",["black_left_pointing_double_triangle_with_vertical_bar"],0,22,7,0], - "23ef":[["\u23EF"],"","",["black_right_pointing_triangle_with_double_vertical_bar"],0,23,7,0], - "23f0":[["\u23F0"],"\uE02D","\uDBB8\uDC2A",["alarm_clock"],0,24,15,0], - "23f1":[["\u23F1"],"","",["stopwatch"],0,25,7,0], - "23f2":[["\u23F2"],"","",["timer_clock"],0,26,7,0], - "23f3":[["\u23F3"],"","\uDBB8\uDC1B",["hourglass_flowing_sand"],0,27,15,0], - "23f8":[["\u23F8"],"","",["double_vertical_bar"],0,28,7,0], - "23f9":[["\u23F9"],"","",["black_square_for_stop"],0,29,7,0], - "23fa":[["\u23FA"],"","",["black_circle_for_record"],0,30,7,0], - "24c2":[["\u24C2\uFE0F","\u24C2"],"\uE434","\uDBB9\uDFE1",["m"],0,31,15,0], - "25aa":[["\u25AA\uFE0F","\u25AA"],"\uE21A","\uDBBA\uDF6E",["black_small_square"],0,32,15,0], - "25ab":[["\u25AB\uFE0F","\u25AB"],"\uE21B","\uDBBA\uDF6D",["white_small_square"],0,33,15,0], - "25b6":[["\u25B6\uFE0F","\u25B6"],"\uE23A","\uDBBA\uDEFC",["arrow_forward"],0,34,15,0], - "25c0":[["\u25C0\uFE0F","\u25C0"],"\uE23B","\uDBBA\uDEFD",["arrow_backward"],0,35,15,0], - "25fb":[["\u25FB\uFE0F","\u25FB"],"\uE21B","\uDBBA\uDF71",["white_medium_square"],0,36,15,0], - "25fc":[["\u25FC\uFE0F","\u25FC"],"\uE21A","\uDBBA\uDF72",["black_medium_square"],0,37,15,0], - "25fd":[["\u25FD\uFE0F","\u25FD"],"\uE21B","\uDBBA\uDF6F",["white_medium_small_square"],0,38,15,0], - "25fe":[["\u25FE\uFE0F","\u25FE"],"\uE21A","\uDBBA\uDF70",["black_medium_small_square"],0,39,15,0], - "2600":[["\u2600\uFE0F","\u2600"],"\uE04A","\uDBB8\uDC00",["sunny"],0,40,15,0], - "2601":[["\u2601\uFE0F","\u2601"],"\uE049","\uDBB8\uDC01",["cloud"],1,0,15,0], - "2602":[["\u2602"],"","",["umbrella"],1,1,7,0], - "2603":[["\u2603"],"","",["showman"],1,2,7,0], - "2604":[["\u2604"],"","",["comet"],1,3,7,0], - "260e":[["\u260E\uFE0F","\u260E"],"\uE009","\uDBB9\uDD23",["phone","telephone"],1,4,15,0], - "2611":[["\u2611\uFE0F","\u2611"],"","\uDBBA\uDF8B",["ballot_box_with_check"],1,5,15,0], - "2614":[["\u2614\uFE0F","\u2614"],"\uE04B","\uDBB8\uDC02",["umbrella"],1,6,15,0], - "2615":[["\u2615\uFE0F","\u2615"],"\uE045","\uDBBA\uDD81",["coffee"],1,7,15,0], - "2618":[["\u2618"],"","",["shamrock"],1,8,7,0], - "261d":[["\u261D\uFE0F","\u261D"],"\uE00F","\uDBBA\uDF98",["point_up"],1,9,15,0], - "2620":[["\u2620"],"","",["skull_and_crossbones"],1,15,7,0], - "2622":[["\u2622"],"","",["radioactive_sign"],1,16,7,0], - "2623":[["\u2623"],"","",["biohazard_sign"],1,17,7,0], - "2626":[["\u2626"],"","",["orthodox_cross"],1,18,7,0], - "262a":[["\u262A"],"","",["star_and_crescent"],1,19,7,0], - "262e":[["\u262E"],"","",["peace_symbol"],1,20,7,0], - "262f":[["\u262F"],"","",["yin_yang"],1,21,7,0], - "2638":[["\u2638"],"","",["wheel_of_dharma"],1,22,7,0], - "2639":[["\u2639"],"","",["white_frowning_face"],1,23,7,0], - "263a":[["\u263A\uFE0F","\u263A"],"\uE414","\uDBB8\uDF36",["relaxed"],1,24,15,0], - "2648":[["\u2648\uFE0F","\u2648"],"\uE23F","\uDBB8\uDC2B",["aries"],1,25,15,0], - "2649":[["\u2649\uFE0F","\u2649"],"\uE240","\uDBB8\uDC2C",["taurus"],1,26,15,0], - "264a":[["\u264A\uFE0F","\u264A"],"\uE241","\uDBB8\uDC2D",["gemini"],1,27,15,0], - "264b":[["\u264B\uFE0F","\u264B"],"\uE242","\uDBB8\uDC2E",["cancer"],1,28,15,0], - "264c":[["\u264C\uFE0F","\u264C"],"\uE243","\uDBB8\uDC2F",["leo"],1,29,15,0], - "264d":[["\u264D\uFE0F","\u264D"],"\uE244","\uDBB8\uDC30",["virgo"],1,30,15,0], - "264e":[["\u264E\uFE0F","\u264E"],"\uE245","\uDBB8\uDC31",["libra"],1,31,15,0], - "264f":[["\u264F\uFE0F","\u264F"],"\uE246","\uDBB8\uDC32",["scorpius"],1,32,15,0], - "2650":[["\u2650\uFE0F","\u2650"],"\uE247","\uDBB8\uDC33",["sagittarius"],1,33,15,0], - "2651":[["\u2651\uFE0F","\u2651"],"\uE248","\uDBB8\uDC34",["capricorn"],1,34,15,0], - "2652":[["\u2652\uFE0F","\u2652"],"\uE249","\uDBB8\uDC35",["aquarius"],1,35,15,0], - "2653":[["\u2653\uFE0F","\u2653"],"\uE24A","\uDBB8\uDC36",["pisces"],1,36,15,0], - "2660":[["\u2660\uFE0F","\u2660"],"\uE20E","\uDBBA\uDF1B",["spades"],1,37,15,0], - "2663":[["\u2663\uFE0F","\u2663"],"\uE20F","\uDBBA\uDF1D",["clubs"],1,38,15,0], - "2665":[["\u2665\uFE0F","\u2665"],"\uE20C","\uDBBA\uDF1A",["hearts"],1,39,15,0], - "2666":[["\u2666\uFE0F","\u2666"],"\uE20D","\uDBBA\uDF1C",["diamonds"],1,40,15,0], - "2668":[["\u2668\uFE0F","\u2668"],"\uE123","\uDBB9\uDFFA",["hotsprings"],2,0,15,0], - "267b":[["\u267B\uFE0F","\u267B"],"","\uDBBA\uDF2C",["recycle"],2,1,15,0], - "267f":[["\u267F\uFE0F","\u267F"],"\uE20A","\uDBBA\uDF20",["wheelchair"],2,2,15,0], - "2692":[["\u2692"],"","",["hammer_and_pick"],2,3,7,0], - "2693":[["\u2693\uFE0F","\u2693"],"\uE202","\uDBB9\uDCC1",["anchor"],2,4,15,0], - "2694":[["\u2694"],"","",["crossed_swords"],2,5,7,0], - "2696":[["\u2696"],"","",["scales"],2,6,7,0], - "2697":[["\u2697"],"","",["alembic"],2,7,7,0], - "2699":[["\u2699"],"","",["gear"],2,8,7,0], - "269b":[["\u269B"],"","",["atom_symbol"],2,9,7,0], - "269c":[["\u269C"],"","",["fleur_de_lis"],2,10,7,0], - "26a0":[["\u26A0\uFE0F","\u26A0"],"\uE252","\uDBBA\uDF23",["warning"],2,11,15,0], - "26a1":[["\u26A1\uFE0F","\u26A1"],"\uE13D","\uDBB8\uDC04",["zap"],2,12,15,0], - "26aa":[["\u26AA\uFE0F","\u26AA"],"\uE219","\uDBBA\uDF65",["white_circle"],2,13,15,0], - "26ab":[["\u26AB\uFE0F","\u26AB"],"\uE219","\uDBBA\uDF66",["black_circle"],2,14,15,0], - "26b0":[["\u26B0"],"","",["coffin"],2,15,7,0], - "26b1":[["\u26B1"],"","",["funeral_urn"],2,16,7,0], - "26bd":[["\u26BD\uFE0F","\u26BD"],"\uE018","\uDBB9\uDFD4",["soccer"],2,17,15,0], - "26be":[["\u26BE\uFE0F","\u26BE"],"\uE016","\uDBB9\uDFD1",["baseball"],2,18,15,0], - "26c4":[["\u26C4\uFE0F","\u26C4"],"\uE048","\uDBB8\uDC03",["snowman"],2,19,15,0], - "26c5":[["\u26C5\uFE0F","\u26C5"],"\uE04A\uE049","\uDBB8\uDC0F",["partly_sunny"],2,20,15,0], - "26c8":[["\u26C8"],"","",["thunder_cloud_and_rain"],2,21,7,0], - "26ce":[["\u26CE"],"\uE24B","\uDBB8\uDC37",["ophiuchus"],2,22,15,0], - "26cf":[["\u26CF"],"","",["pick"],2,23,7,0], - "26d1":[["\u26D1"],"","",["helmet_with_white_cross"],2,24,7,0], - "26d3":[["\u26D3"],"","",["chains"],2,25,7,0], - "26d4":[["\u26D4\uFE0F","\u26D4"],"\uE137","\uDBBA\uDF26",["no_entry"],2,26,15,0], - "26e9":[["\u26E9"],"","",["shinto_shrine"],2,27,7,0], - "26ea":[["\u26EA\uFE0F","\u26EA"],"\uE037","\uDBB9\uDCBB",["church"],2,28,15,0], - "26f0":[["\u26F0"],"","",["mountain"],2,29,7,0], - "26f1":[["\u26F1"],"","",["umbrella_on_ground"],2,30,7,0], - "26f2":[["\u26F2\uFE0F","\u26F2"],"\uE121","\uDBB9\uDCBC",["fountain"],2,31,15,0], - "26f3":[["\u26F3\uFE0F","\u26F3"],"\uE014","\uDBB9\uDFD2",["golf"],2,32,15,0], - "26f4":[["\u26F4"],"","",["ferry"],2,33,7,0], - "26f5":[["\u26F5\uFE0F","\u26F5"],"\uE01C","\uDBB9\uDFEA",["boat","sailboat"],2,34,15,0], - "26f7":[["\u26F7"],"","",["skier"],2,35,7,0], - "26f8":[["\u26F8"],"","",["ice_skate"],2,36,7,0], - "26f9":[["\u26F9"],"","",["person_with_ball"],2,37,7,0], - "26fa":[["\u26FA\uFE0F","\u26FA"],"\uE122","\uDBB9\uDFFB",["tent"],3,2,15,0], - "26fd":[["\u26FD\uFE0F","\u26FD"],"\uE03A","\uDBB9\uDFF5",["fuelpump"],3,3,15,0], - "2702":[["\u2702\uFE0F","\u2702"],"\uE313","\uDBB9\uDD3E",["scissors"],3,4,15,0], - "2705":[["\u2705"],"","\uDBBA\uDF4A",["white_check_mark"],3,5,15,0], - "2708":[["\u2708\uFE0F","\u2708"],"\uE01D","\uDBB9\uDFE9",["airplane"],3,6,15,0], - "2709":[["\u2709\uFE0F","\u2709"],"\uE103","\uDBB9\uDD29",["email","envelope"],3,7,15,0], - "270a":[["\u270A"],"\uE010","\uDBBA\uDF93",["fist"],3,8,15,0], - "270b":[["\u270B"],"\uE012","\uDBBA\uDF95",["hand","raised_hand"],3,14,15,0], - "270c":[["\u270C\uFE0F","\u270C"],"\uE011","\uDBBA\uDF94",["v"],3,20,15,0], - "270d":[["\u270D"],"","",["writing_hand"],3,26,7,0], - "270f":[["\u270F\uFE0F","\u270F"],"\uE301","\uDBB9\uDD39",["pencil2"],3,32,15,0], - "2712":[["\u2712\uFE0F","\u2712"],"","\uDBB9\uDD36",["black_nib"],3,33,15,0], - "2714":[["\u2714\uFE0F","\u2714"],"","\uDBBA\uDF49",["heavy_check_mark"],3,34,15,0], - "2716":[["\u2716\uFE0F","\u2716"],"\uE333","\uDBBA\uDF53",["heavy_multiplication_x"],3,35,15,0], - "271d":[["\u271D"],"","",["latin_cross"],3,36,7,0], - "2721":[["\u2721"],"","",["star_of_david"],3,37,7,0], - "2728":[["\u2728"],"\uE32E","\uDBBA\uDF60",["sparkles"],3,38,15,0], - "2733":[["\u2733\uFE0F","\u2733"],"\uE206","\uDBBA\uDF62",["eight_spoked_asterisk"],3,39,15,0], - "2734":[["\u2734\uFE0F","\u2734"],"\uE205","\uDBBA\uDF61",["eight_pointed_black_star"],3,40,15,0], - "2744":[["\u2744\uFE0F","\u2744"],"","\uDBB8\uDC0E",["snowflake"],4,0,15,0], - "2747":[["\u2747\uFE0F","\u2747"],"\uE32E","\uDBBA\uDF77",["sparkle"],4,1,15,0], - "274c":[["\u274C"],"\uE333","\uDBBA\uDF45",["x"],4,2,15,0], - "274e":[["\u274E"],"\uE333","\uDBBA\uDF46",["negative_squared_cross_mark"],4,3,15,0], - "2753":[["\u2753"],"\uE020","\uDBBA\uDF09",["question"],4,4,15,0], - "2754":[["\u2754"],"\uE336","\uDBBA\uDF0A",["grey_question"],4,5,15,0], - "2755":[["\u2755"],"\uE337","\uDBBA\uDF0B",["grey_exclamation"],4,6,15,0], - "2757":[["\u2757\uFE0F","\u2757"],"\uE021","\uDBBA\uDF04",["exclamation","heavy_exclamation_mark"],4,7,15,0], - "2763":[["\u2763"],"","",["heavy_heart_exclamation_mark_ornament"],4,8,7,0], - "2764":[["\u2764\uFE0F","\u2764"],"\uE022","\uDBBA\uDF0C",["heart"],4,9,15,0,"<3"], - "2795":[["\u2795"],"","\uDBBA\uDF51",["heavy_plus_sign"],4,10,15,0], - "2796":[["\u2796"],"","\uDBBA\uDF52",["heavy_minus_sign"],4,11,15,0], - "2797":[["\u2797"],"","\uDBBA\uDF54",["heavy_division_sign"],4,12,15,0], - "27a1":[["\u27A1\uFE0F","\u27A1"],"\uE234","\uDBBA\uDEFA",["arrow_right"],4,13,15,0], - "27b0":[["\u27B0"],"","\uDBBA\uDF08",["curly_loop"],4,14,15,0], - "27bf":[["\u27BF"],"\uE211","\uDBBA\uDC2B",["loop"],4,15,15,0], - "2934":[["\u2934\uFE0F","\u2934"],"\uE236","\uDBBA\uDEF4",["arrow_heading_up"],4,16,15,0], - "2935":[["\u2935\uFE0F","\u2935"],"\uE238","\uDBBA\uDEF5",["arrow_heading_down"],4,17,15,0], - "2b05":[["\u2B05\uFE0F","\u2B05"],"\uE235","\uDBBA\uDEFB",["arrow_left"],4,18,15,0], - "2b06":[["\u2B06\uFE0F","\u2B06"],"\uE232","\uDBBA\uDEF8",["arrow_up"],4,19,15,0], - "2b07":[["\u2B07\uFE0F","\u2B07"],"\uE233","\uDBBA\uDEF9",["arrow_down"],4,20,15,0], - "2b1b":[["\u2B1B\uFE0F","\u2B1B"],"\uE21A","\uDBBA\uDF6C",["black_large_square"],4,21,15,0], - "2b1c":[["\u2B1C\uFE0F","\u2B1C"],"\uE21B","\uDBBA\uDF6B",["white_large_square"],4,22,15,0], - "2b50":[["\u2B50\uFE0F","\u2B50"],"\uE32F","\uDBBA\uDF68",["star"],4,23,15,0], - "2b55":[["\u2B55\uFE0F","\u2B55"],"\uE332","\uDBBA\uDF44",["o"],4,24,15,0], - "3030":[["\u3030\uFE0F","\u3030"],"","\uDBBA\uDF07",["wavy_dash"],4,25,15,0], - "303d":[["\u303D\uFE0F","\u303D"],"\uE12C","\uDBBA\uDC1B",["part_alternation_mark"],4,26,15,0], - "3297":[["\u3297\uFE0F","\u3297"],"\uE30D","\uDBBA\uDF43",["congratulations"],4,27,15,0], - "3299":[["\u3299\uFE0F","\u3299"],"\uE315","\uDBBA\uDF2B",["secret"],4,28,15,0], - "1f004":[["\uD83C\uDC04\uFE0F","\uD83C\uDC04"],"\uE12D","\uDBBA\uDC0B",["mahjong"],4,29,15,0], - "1f0cf":[["\uD83C\uDCCF"],"","\uDBBA\uDC12",["black_joker"],4,30,15,0], - "1f170":[["\uD83C\uDD70\uFE0F","\uD83C\uDD70"],"\uE532","\uDBB9\uDD0B",["a"],4,31,15,0], - "1f171":[["\uD83C\uDD71\uFE0F","\uD83C\uDD71"],"\uE533","\uDBB9\uDD0C",["b"],4,32,15,0], - "1f17e":[["\uD83C\uDD7E\uFE0F","\uD83C\uDD7E"],"\uE535","\uDBB9\uDD0E",["o2"],4,33,15,0], - "1f17f":[["\uD83C\uDD7F\uFE0F","\uD83C\uDD7F"],"\uE14F","\uDBB9\uDFF6",["parking"],4,34,15,0], - "1f18e":[["\uD83C\uDD8E"],"\uE534","\uDBB9\uDD0D",["ab"],4,35,15,0], - "1f191":[["\uD83C\uDD91"],"","\uDBBA\uDF84",["cl"],4,36,15,0], - "1f192":[["\uD83C\uDD92"],"\uE214","\uDBBA\uDF38",["cool"],4,37,15,0], - "1f193":[["\uD83C\uDD93"],"","\uDBBA\uDF21",["free"],4,38,15,0], - "1f194":[["\uD83C\uDD94"],"\uE229","\uDBBA\uDF81",["id"],4,39,15,0], - "1f195":[["\uD83C\uDD95"],"\uE212","\uDBBA\uDF36",["new"],4,40,15,0], - "1f196":[["\uD83C\uDD96"],"","\uDBBA\uDF28",["ng"],5,0,15,0], - "1f197":[["\uD83C\uDD97"],"\uE24D","\uDBBA\uDF27",["ok"],5,1,15,0], - "1f198":[["\uD83C\uDD98"],"","\uDBBA\uDF4F",["sos"],5,2,15,0], - "1f199":[["\uD83C\uDD99"],"\uE213","\uDBBA\uDF37",["up"],5,3,15,0], - "1f19a":[["\uD83C\uDD9A"],"\uE12E","\uDBBA\uDF32",["vs"],5,4,15,0], - "1f201":[["\uD83C\uDE01"],"\uE203","\uDBBA\uDF24",["koko"],5,5,15,0], - "1f202":[["\uD83C\uDE02\uFE0F","\uD83C\uDE02"],"\uE228","\uDBBA\uDF3F",["sa"],5,6,15,0], - "1f21a":[["\uD83C\uDE1A\uFE0F","\uD83C\uDE1A"],"\uE216","\uDBBA\uDF3A",["u7121"],5,7,15,0], - "1f22f":[["\uD83C\uDE2F\uFE0F","\uD83C\uDE2F"],"\uE22C","\uDBBA\uDF40",["u6307"],5,8,15,0], - "1f232":[["\uD83C\uDE32"],"","\uDBBA\uDF2E",["u7981"],5,9,15,0], - "1f233":[["\uD83C\uDE33"],"\uE22B","\uDBBA\uDF2F",["u7a7a"],5,10,15,0], - "1f234":[["\uD83C\uDE34"],"","\uDBBA\uDF30",["u5408"],5,11,15,0], - "1f235":[["\uD83C\uDE35"],"\uE22A","\uDBBA\uDF31",["u6e80"],5,12,15,0], - "1f236":[["\uD83C\uDE36"],"\uE215","\uDBBA\uDF39",["u6709"],5,13,15,0], - "1f237":[["\uD83C\uDE37\uFE0F","\uD83C\uDE37"],"\uE217","\uDBBA\uDF3B",["u6708"],5,14,15,0], - "1f238":[["\uD83C\uDE38"],"\uE218","\uDBBA\uDF3C",["u7533"],5,15,15,0], - "1f239":[["\uD83C\uDE39"],"\uE227","\uDBBA\uDF3E",["u5272"],5,16,15,0], - "1f23a":[["\uD83C\uDE3A"],"\uE22D","\uDBBA\uDF41",["u55b6"],5,17,15,0], - "1f250":[["\uD83C\uDE50"],"\uE226","\uDBBA\uDF3D",["ideograph_advantage"],5,18,15,0], - "1f251":[["\uD83C\uDE51"],"","\uDBBA\uDF50",["accept"],5,19,15,0], - "1f300":[["\uD83C\uDF00"],"\uE443","\uDBB8\uDC05",["cyclone"],5,20,15,0], - "1f301":[["\uD83C\uDF01"],"","\uDBB8\uDC06",["foggy"],5,21,15,0], - "1f302":[["\uD83C\uDF02"],"\uE43C","\uDBB8\uDC07",["closed_umbrella"],5,22,15,0], - "1f303":[["\uD83C\uDF03"],"\uE44B","\uDBB8\uDC08",["night_with_stars"],5,23,15,0], - "1f304":[["\uD83C\uDF04"],"\uE04D","\uDBB8\uDC09",["sunrise_over_mountains"],5,24,15,0], - "1f305":[["\uD83C\uDF05"],"\uE449","\uDBB8\uDC0A",["sunrise"],5,25,15,0], - "1f306":[["\uD83C\uDF06"],"\uE146","\uDBB8\uDC0B",["city_sunset"],5,26,15,0], - "1f307":[["\uD83C\uDF07"],"\uE44A","\uDBB8\uDC0C",["city_sunrise"],5,27,15,0], - "1f308":[["\uD83C\uDF08"],"\uE44C","\uDBB8\uDC0D",["rainbow"],5,28,15,0], - "1f309":[["\uD83C\uDF09"],"\uE44B","\uDBB8\uDC10",["bridge_at_night"],5,29,15,0], - "1f30a":[["\uD83C\uDF0A"],"\uE43E","\uDBB8\uDC38",["ocean"],5,30,15,0], - "1f30b":[["\uD83C\uDF0B"],"","\uDBB8\uDC3A",["volcano"],5,31,15,0], - "1f30c":[["\uD83C\uDF0C"],"\uE44B","\uDBB8\uDC3B",["milky_way"],5,32,15,0], - "1f30d":[["\uD83C\uDF0D"],"","",["earth_africa"],5,33,15,0], - "1f30e":[["\uD83C\uDF0E"],"","",["earth_americas"],5,34,15,0], - "1f30f":[["\uD83C\uDF0F"],"","\uDBB8\uDC39",["earth_asia"],5,35,15,0], - "1f310":[["\uD83C\uDF10"],"","",["globe_with_meridians"],5,36,15,0], - "1f311":[["\uD83C\uDF11"],"","\uDBB8\uDC11",["new_moon"],5,37,15,0], - "1f312":[["\uD83C\uDF12"],"","",["waxing_crescent_moon"],5,38,15,0], - "1f313":[["\uD83C\uDF13"],"\uE04C","\uDBB8\uDC13",["first_quarter_moon"],5,39,15,0], - "1f314":[["\uD83C\uDF14"],"\uE04C","\uDBB8\uDC12",["moon","waxing_gibbous_moon"],5,40,15,0], - "1f315":[["\uD83C\uDF15"],"","\uDBB8\uDC15",["full_moon"],6,0,15,0], - "1f316":[["\uD83C\uDF16"],"","",["waning_gibbous_moon"],6,1,15,0], - "1f317":[["\uD83C\uDF17"],"","",["last_quarter_moon"],6,2,15,0], - "1f318":[["\uD83C\uDF18"],"","",["waning_crescent_moon"],6,3,15,0], - "1f319":[["\uD83C\uDF19"],"\uE04C","\uDBB8\uDC14",["crescent_moon"],6,4,15,0], - "1f31a":[["\uD83C\uDF1A"],"","",["new_moon_with_face"],6,5,15,0], - "1f31b":[["\uD83C\uDF1B"],"\uE04C","\uDBB8\uDC16",["first_quarter_moon_with_face"],6,6,15,0], - "1f31c":[["\uD83C\uDF1C"],"","",["last_quarter_moon_with_face"],6,7,15,0], - "1f31d":[["\uD83C\uDF1D"],"","",["full_moon_with_face"],6,8,15,0], - "1f31e":[["\uD83C\uDF1E"],"","",["sun_with_face"],6,9,15,0], - "1f31f":[["\uD83C\uDF1F"],"\uE335","\uDBBA\uDF69",["star2"],6,10,15,0], - "1f320":[["\uD83C\uDF20"],"","\uDBBA\uDF6A",["stars"],6,11,15,0], - "1f321":[["\uD83C\uDF21"],"","",["thermometer"],6,12,15,0], - "1f324":[["\uD83C\uDF24"],"","",["mostly_sunny","sun_small_cloud"],6,13,7,0], - "1f325":[["\uD83C\uDF25"],"","",["barely_sunny","sun_behind_cloud"],6,14,7,0], - "1f326":[["\uD83C\uDF26"],"","",["partly_sunny_rain","sun_behind_rain_cloud"],6,15,7,0], - "1f327":[["\uD83C\uDF27"],"","",["rain_cloud"],6,16,15,0], - "1f328":[["\uD83C\uDF28"],"","",["snow_cloud"],6,17,15,0], - "1f329":[["\uD83C\uDF29"],"","",["lightning","lightning_cloud"],6,18,15,0], - "1f32a":[["\uD83C\uDF2A"],"","",["tornado","tornado_cloud"],6,19,15,0], - "1f32b":[["\uD83C\uDF2B"],"","",["fog"],6,20,15,0], - "1f32c":[["\uD83C\uDF2C"],"","",["wind_blowing_face"],6,21,15,0], - "1f32d":[["\uD83C\uDF2D"],"","",["hotdog"],6,22,7,0], - "1f32e":[["\uD83C\uDF2E"],"","",["taco"],6,23,7,0], - "1f32f":[["\uD83C\uDF2F"],"","",["burrito"],6,24,7,0], - "1f330":[["\uD83C\uDF30"],"","\uDBB8\uDC4C",["chestnut"],6,25,15,0], - "1f331":[["\uD83C\uDF31"],"\uE110","\uDBB8\uDC3E",["seedling"],6,26,15,0], - "1f332":[["\uD83C\uDF32"],"","",["evergreen_tree"],6,27,15,0], - "1f333":[["\uD83C\uDF33"],"","",["deciduous_tree"],6,28,15,0], - "1f334":[["\uD83C\uDF34"],"\uE307","\uDBB8\uDC47",["palm_tree"],6,29,15,0], - "1f335":[["\uD83C\uDF35"],"\uE308","\uDBB8\uDC48",["cactus"],6,30,15,0], - "1f336":[["\uD83C\uDF36"],"","",["hot_pepper"],6,31,15,0], - "1f337":[["\uD83C\uDF37"],"\uE304","\uDBB8\uDC3D",["tulip"],6,32,15,0], - "1f338":[["\uD83C\uDF38"],"\uE030","\uDBB8\uDC40",["cherry_blossom"],6,33,15,0], - "1f339":[["\uD83C\uDF39"],"\uE032","\uDBB8\uDC41",["rose"],6,34,15,0], - "1f33a":[["\uD83C\uDF3A"],"\uE303","\uDBB8\uDC45",["hibiscus"],6,35,15,0], - "1f33b":[["\uD83C\uDF3B"],"\uE305","\uDBB8\uDC46",["sunflower"],6,36,15,0], - "1f33c":[["\uD83C\uDF3C"],"\uE305","\uDBB8\uDC4D",["blossom"],6,37,15,0], - "1f33d":[["\uD83C\uDF3D"],"","\uDBB8\uDC4A",["corn"],6,38,15,0], - "1f33e":[["\uD83C\uDF3E"],"\uE444","\uDBB8\uDC49",["ear_of_rice"],6,39,15,0], - "1f33f":[["\uD83C\uDF3F"],"\uE110","\uDBB8\uDC4E",["herb"],6,40,15,0], - "1f340":[["\uD83C\uDF40"],"\uE110","\uDBB8\uDC3C",["four_leaf_clover"],7,0,15,0], - "1f341":[["\uD83C\uDF41"],"\uE118","\uDBB8\uDC3F",["maple_leaf"],7,1,15,0], - "1f342":[["\uD83C\uDF42"],"\uE119","\uDBB8\uDC42",["fallen_leaf"],7,2,15,0], - "1f343":[["\uD83C\uDF43"],"\uE447","\uDBB8\uDC43",["leaves"],7,3,15,0], - "1f344":[["\uD83C\uDF44"],"","\uDBB8\uDC4B",["mushroom"],7,4,15,0], - "1f345":[["\uD83C\uDF45"],"\uE349","\uDBB8\uDC55",["tomato"],7,5,15,0], - "1f346":[["\uD83C\uDF46"],"\uE34A","\uDBB8\uDC56",["eggplant"],7,6,15,0], - "1f347":[["\uD83C\uDF47"],"","\uDBB8\uDC59",["grapes"],7,7,15,0], - "1f348":[["\uD83C\uDF48"],"","\uDBB8\uDC57",["melon"],7,8,15,0], - "1f349":[["\uD83C\uDF49"],"\uE348","\uDBB8\uDC54",["watermelon"],7,9,15,0], - "1f34a":[["\uD83C\uDF4A"],"\uE346","\uDBB8\uDC52",["tangerine"],7,10,15,0], - "1f34b":[["\uD83C\uDF4B"],"","",["lemon"],7,11,15,0], - "1f34c":[["\uD83C\uDF4C"],"","\uDBB8\uDC50",["banana"],7,12,15,0], - "1f34d":[["\uD83C\uDF4D"],"","\uDBB8\uDC58",["pineapple"],7,13,15,0], - "1f34e":[["\uD83C\uDF4E"],"\uE345","\uDBB8\uDC51",["apple"],7,14,15,0], - "1f34f":[["\uD83C\uDF4F"],"\uE345","\uDBB8\uDC5B",["green_apple"],7,15,15,0], - "1f350":[["\uD83C\uDF50"],"","",["pear"],7,16,15,0], - "1f351":[["\uD83C\uDF51"],"","\uDBB8\uDC5A",["peach"],7,17,15,0], - "1f352":[["\uD83C\uDF52"],"","\uDBB8\uDC4F",["cherries"],7,18,15,0], - "1f353":[["\uD83C\uDF53"],"\uE347","\uDBB8\uDC53",["strawberry"],7,19,15,0], - "1f354":[["\uD83C\uDF54"],"\uE120","\uDBBA\uDD60",["hamburger"],7,20,15,0], - "1f355":[["\uD83C\uDF55"],"","\uDBBA\uDD75",["pizza"],7,21,15,0], - "1f356":[["\uD83C\uDF56"],"","\uDBBA\uDD72",["meat_on_bone"],7,22,15,0], - "1f357":[["\uD83C\uDF57"],"","\uDBBA\uDD76",["poultry_leg"],7,23,15,0], - "1f358":[["\uD83C\uDF58"],"\uE33D","\uDBBA\uDD69",["rice_cracker"],7,24,15,0], - "1f359":[["\uD83C\uDF59"],"\uE342","\uDBBA\uDD61",["rice_ball"],7,25,15,0], - "1f35a":[["\uD83C\uDF5A"],"\uE33E","\uDBBA\uDD6A",["rice"],7,26,15,0], - "1f35b":[["\uD83C\uDF5B"],"\uE341","\uDBBA\uDD6C",["curry"],7,27,15,0], - "1f35c":[["\uD83C\uDF5C"],"\uE340","\uDBBA\uDD63",["ramen"],7,28,15,0], - "1f35d":[["\uD83C\uDF5D"],"\uE33F","\uDBBA\uDD6B",["spaghetti"],7,29,15,0], - "1f35e":[["\uD83C\uDF5E"],"\uE339","\uDBBA\uDD64",["bread"],7,30,15,0], - "1f35f":[["\uD83C\uDF5F"],"\uE33B","\uDBBA\uDD67",["fries"],7,31,15,0], - "1f360":[["\uD83C\uDF60"],"","\uDBBA\uDD74",["sweet_potato"],7,32,15,0], - "1f361":[["\uD83C\uDF61"],"\uE33C","\uDBBA\uDD68",["dango"],7,33,15,0], - "1f362":[["\uD83C\uDF62"],"\uE343","\uDBBA\uDD6D",["oden"],7,34,15,0], - "1f363":[["\uD83C\uDF63"],"\uE344","\uDBBA\uDD6E",["sushi"],7,35,15,0], - "1f364":[["\uD83C\uDF64"],"","\uDBBA\uDD7F",["fried_shrimp"],7,36,15,0], - "1f365":[["\uD83C\uDF65"],"","\uDBBA\uDD73",["fish_cake"],7,37,15,0], - "1f366":[["\uD83C\uDF66"],"\uE33A","\uDBBA\uDD66",["icecream"],7,38,15,0], - "1f367":[["\uD83C\uDF67"],"\uE43F","\uDBBA\uDD71",["shaved_ice"],7,39,15,0], - "1f368":[["\uD83C\uDF68"],"","\uDBBA\uDD77",["ice_cream"],7,40,15,0], - "1f369":[["\uD83C\uDF69"],"","\uDBBA\uDD78",["doughnut"],8,0,15,0], - "1f36a":[["\uD83C\uDF6A"],"","\uDBBA\uDD79",["cookie"],8,1,15,0], - "1f36b":[["\uD83C\uDF6B"],"","\uDBBA\uDD7A",["chocolate_bar"],8,2,15,0], - "1f36c":[["\uD83C\uDF6C"],"","\uDBBA\uDD7B",["candy"],8,3,15,0], - "1f36d":[["\uD83C\uDF6D"],"","\uDBBA\uDD7C",["lollipop"],8,4,15,0], - "1f36e":[["\uD83C\uDF6E"],"","\uDBBA\uDD7D",["custard"],8,5,15,0], - "1f36f":[["\uD83C\uDF6F"],"","\uDBBA\uDD7E",["honey_pot"],8,6,15,0], - "1f370":[["\uD83C\uDF70"],"\uE046","\uDBBA\uDD62",["cake"],8,7,15,0], - "1f371":[["\uD83C\uDF71"],"\uE34C","\uDBBA\uDD6F",["bento"],8,8,15,0], - "1f372":[["\uD83C\uDF72"],"\uE34D","\uDBBA\uDD70",["stew"],8,9,15,0], - "1f373":[["\uD83C\uDF73"],"\uE147","\uDBBA\uDD65",["egg"],8,10,15,0], - "1f374":[["\uD83C\uDF74"],"\uE043","\uDBBA\uDD80",["fork_and_knife"],8,11,15,0], - "1f375":[["\uD83C\uDF75"],"\uE338","\uDBBA\uDD84",["tea"],8,12,15,0], - "1f376":[["\uD83C\uDF76"],"\uE30B","\uDBBA\uDD85",["sake"],8,13,15,0], - "1f377":[["\uD83C\uDF77"],"\uE044","\uDBBA\uDD86",["wine_glass"],8,14,15,0], - "1f378":[["\uD83C\uDF78"],"\uE044","\uDBBA\uDD82",["cocktail"],8,15,15,0], - "1f379":[["\uD83C\uDF79"],"\uE044","\uDBBA\uDD88",["tropical_drink"],8,16,15,0], - "1f37a":[["\uD83C\uDF7A"],"\uE047","\uDBBA\uDD83",["beer"],8,17,15,0], - "1f37b":[["\uD83C\uDF7B"],"\uE30C","\uDBBA\uDD87",["beers"],8,18,15,0], - "1f37c":[["\uD83C\uDF7C"],"","",["baby_bottle"],8,19,15,0], - "1f37d":[["\uD83C\uDF7D"],"","",["knife_fork_plate"],8,20,15,0], - "1f37e":[["\uD83C\uDF7E"],"","",["champagne"],8,21,7,0], - "1f37f":[["\uD83C\uDF7F"],"","",["popcorn"],8,22,7,0], - "1f380":[["\uD83C\uDF80"],"\uE314","\uDBB9\uDD0F",["ribbon"],8,23,15,0], - "1f381":[["\uD83C\uDF81"],"\uE112","\uDBB9\uDD10",["gift"],8,24,15,0], - "1f382":[["\uD83C\uDF82"],"\uE34B","\uDBB9\uDD11",["birthday"],8,25,15,0], - "1f383":[["\uD83C\uDF83"],"\uE445","\uDBB9\uDD1F",["jack_o_lantern"],8,26,15,0], - "1f384":[["\uD83C\uDF84"],"\uE033","\uDBB9\uDD12",["christmas_tree"],8,27,15,0], - "1f385":[["\uD83C\uDF85"],"\uE448","\uDBB9\uDD13",["santa"],8,28,15,0], - "1f386":[["\uD83C\uDF86"],"\uE117","\uDBB9\uDD15",["fireworks"],8,34,15,0], - "1f387":[["\uD83C\uDF87"],"\uE440","\uDBB9\uDD1D",["sparkler"],8,35,15,0], - "1f388":[["\uD83C\uDF88"],"\uE310","\uDBB9\uDD16",["balloon"],8,36,15,0], - "1f389":[["\uD83C\uDF89"],"\uE312","\uDBB9\uDD17",["tada"],8,37,15,0], - "1f38a":[["\uD83C\uDF8A"],"","\uDBB9\uDD20",["confetti_ball"],8,38,15,0], - "1f38b":[["\uD83C\uDF8B"],"","\uDBB9\uDD21",["tanabata_tree"],8,39,15,0], - "1f38c":[["\uD83C\uDF8C"],"\uE143","\uDBB9\uDD14",["crossed_flags"],8,40,15,0], - "1f38d":[["\uD83C\uDF8D"],"\uE436","\uDBB9\uDD18",["bamboo"],9,0,15,0], - "1f38e":[["\uD83C\uDF8E"],"\uE438","\uDBB9\uDD19",["dolls"],9,1,15,0], - "1f38f":[["\uD83C\uDF8F"],"\uE43B","\uDBB9\uDD1C",["flags"],9,2,15,0], - "1f390":[["\uD83C\uDF90"],"\uE442","\uDBB9\uDD1E",["wind_chime"],9,3,15,0], - "1f391":[["\uD83C\uDF91"],"\uE446","\uDBB8\uDC17",["rice_scene"],9,4,15,0], - "1f392":[["\uD83C\uDF92"],"\uE43A","\uDBB9\uDD1B",["school_satchel"],9,5,15,0], - "1f393":[["\uD83C\uDF93"],"\uE439","\uDBB9\uDD1A",["mortar_board"],9,6,15,0], - "1f396":[["\uD83C\uDF96"],"","",["medal"],9,7,15,0], - "1f397":[["\uD83C\uDF97"],"","",["reminder_ribbon"],9,8,15,0], - "1f399":[["\uD83C\uDF99"],"","",["studio_microphone"],9,9,15,0], - "1f39a":[["\uD83C\uDF9A"],"","",["level_slider"],9,10,15,0], - "1f39b":[["\uD83C\uDF9B"],"","",["control_knobs"],9,11,15,0], - "1f39e":[["\uD83C\uDF9E"],"","",["film_frames"],9,12,15,0], - "1f39f":[["\uD83C\uDF9F"],"","",["admission_tickets"],9,13,15,0], - "1f3a0":[["\uD83C\uDFA0"],"","\uDBB9\uDFFC",["carousel_horse"],9,14,15,0], - "1f3a1":[["\uD83C\uDFA1"],"\uE124","\uDBB9\uDFFD",["ferris_wheel"],9,15,15,0], - "1f3a2":[["\uD83C\uDFA2"],"\uE433","\uDBB9\uDFFE",["roller_coaster"],9,16,15,0], - "1f3a3":[["\uD83C\uDFA3"],"\uE019","\uDBB9\uDFFF",["fishing_pole_and_fish"],9,17,15,0], - "1f3a4":[["\uD83C\uDFA4"],"\uE03C","\uDBBA\uDC00",["microphone"],9,18,15,0], - "1f3a5":[["\uD83C\uDFA5"],"\uE03D","\uDBBA\uDC01",["movie_camera"],9,19,15,0], - "1f3a6":[["\uD83C\uDFA6"],"\uE507","\uDBBA\uDC02",["cinema"],9,20,15,0], - "1f3a7":[["\uD83C\uDFA7"],"\uE30A","\uDBBA\uDC03",["headphones"],9,21,15,0], - "1f3a8":[["\uD83C\uDFA8"],"\uE502","\uDBBA\uDC04",["art"],9,22,15,0], - "1f3a9":[["\uD83C\uDFA9"],"\uE503","\uDBBA\uDC05",["tophat"],9,23,15,0], - "1f3aa":[["\uD83C\uDFAA"],"","\uDBBA\uDC06",["circus_tent"],9,24,15,0], - "1f3ab":[["\uD83C\uDFAB"],"\uE125","\uDBBA\uDC07",["ticket"],9,25,15,0], - "1f3ac":[["\uD83C\uDFAC"],"\uE324","\uDBBA\uDC08",["clapper"],9,26,15,0], - "1f3ad":[["\uD83C\uDFAD"],"\uE503","\uDBBA\uDC09",["performing_arts"],9,27,15,0], - "1f3ae":[["\uD83C\uDFAE"],"","\uDBBA\uDC0A",["video_game"],9,28,15,0], - "1f3af":[["\uD83C\uDFAF"],"\uE130","\uDBBA\uDC0C",["dart"],9,29,15,0], - "1f3b0":[["\uD83C\uDFB0"],"\uE133","\uDBBA\uDC0D",["slot_machine"],9,30,15,0], - "1f3b1":[["\uD83C\uDFB1"],"\uE42C","\uDBBA\uDC0E",["8ball"],9,31,15,0], - "1f3b2":[["\uD83C\uDFB2"],"","\uDBBA\uDC0F",["game_die"],9,32,15,0], - "1f3b3":[["\uD83C\uDFB3"],"","\uDBBA\uDC10",["bowling"],9,33,15,0], - "1f3b4":[["\uD83C\uDFB4"],"","\uDBBA\uDC11",["flower_playing_cards"],9,34,15,0], - "1f3b5":[["\uD83C\uDFB5"],"\uE03E","\uDBBA\uDC13",["musical_note"],9,35,15,0], - "1f3b6":[["\uD83C\uDFB6"],"\uE326","\uDBBA\uDC14",["notes"],9,36,15,0], - "1f3b7":[["\uD83C\uDFB7"],"\uE040","\uDBBA\uDC15",["saxophone"],9,37,15,0], - "1f3b8":[["\uD83C\uDFB8"],"\uE041","\uDBBA\uDC16",["guitar"],9,38,15,0], - "1f3b9":[["\uD83C\uDFB9"],"","\uDBBA\uDC17",["musical_keyboard"],9,39,15,0], - "1f3ba":[["\uD83C\uDFBA"],"\uE042","\uDBBA\uDC18",["trumpet"],9,40,15,0], - "1f3bb":[["\uD83C\uDFBB"],"","\uDBBA\uDC19",["violin"],10,0,15,0], - "1f3bc":[["\uD83C\uDFBC"],"\uE326","\uDBBA\uDC1A",["musical_score"],10,1,15,0], - "1f3bd":[["\uD83C\uDFBD"],"","\uDBB9\uDFD0",["running_shirt_with_sash"],10,2,15,0], - "1f3be":[["\uD83C\uDFBE"],"\uE015","\uDBB9\uDFD3",["tennis"],10,3,15,0], - "1f3bf":[["\uD83C\uDFBF"],"\uE013","\uDBB9\uDFD5",["ski"],10,4,15,0], - "1f3c0":[["\uD83C\uDFC0"],"\uE42A","\uDBB9\uDFD6",["basketball"],10,5,15,0], - "1f3c1":[["\uD83C\uDFC1"],"\uE132","\uDBB9\uDFD7",["checkered_flag"],10,6,15,0], - "1f3c2":[["\uD83C\uDFC2"],"","\uDBB9\uDFD8",["snowboarder"],10,7,15,0], - "1f3c3":[["\uD83C\uDFC3"],"\uE115","\uDBB9\uDFD9",["runner","running"],10,8,15,0], - "1f3c4":[["\uD83C\uDFC4"],"\uE017","\uDBB9\uDFDA",["surfer"],10,14,15,0], - "1f3c5":[["\uD83C\uDFC5"],"","",["sports_medal"],10,20,15,0], - "1f3c6":[["\uD83C\uDFC6"],"\uE131","\uDBB9\uDFDB",["trophy"],10,21,15,0], - "1f3c7":[["\uD83C\uDFC7"],"","",["horse_racing"],10,22,15,0], - "1f3c8":[["\uD83C\uDFC8"],"\uE42B","\uDBB9\uDFDD",["football"],10,28,15,0], - "1f3c9":[["\uD83C\uDFC9"],"","",["rugby_football"],10,29,15,0], - "1f3ca":[["\uD83C\uDFCA"],"\uE42D","\uDBB9\uDFDE",["swimmer"],10,30,15,0], - "1f3cb":[["\uD83C\uDFCB"],"","",["weight_lifter"],10,36,15,0], - "1f3cc":[["\uD83C\uDFCC"],"","",["golfer"],11,1,15,0], - "1f3cd":[["\uD83C\uDFCD"],"","",["racing_motorcycle"],11,2,15,0], - "1f3ce":[["\uD83C\uDFCE"],"","",["racing_car"],11,3,15,0], - "1f3cf":[["\uD83C\uDFCF"],"","",["cricket_bat_and_ball"],11,4,7,0], - "1f3d0":[["\uD83C\uDFD0"],"","",["volleyball"],11,5,7,0], - "1f3d1":[["\uD83C\uDFD1"],"","",["field_hockey_stick_and_ball"],11,6,7,0], - "1f3d2":[["\uD83C\uDFD2"],"","",["ice_hockey_stick_and_puck"],11,7,7,0], - "1f3d3":[["\uD83C\uDFD3"],"","",["table_tennis_paddle_and_ball"],11,8,7,0], - "1f3d4":[["\uD83C\uDFD4"],"","",["snow_capped_mountain"],11,9,15,0], - "1f3d5":[["\uD83C\uDFD5"],"","",["camping"],11,10,15,0], - "1f3d6":[["\uD83C\uDFD6"],"","",["beach_with_umbrella"],11,11,15,0], - "1f3d7":[["\uD83C\uDFD7"],"","",["building_construction"],11,12,15,0], - "1f3d8":[["\uD83C\uDFD8"],"","",["house_buildings"],11,13,15,0], - "1f3d9":[["\uD83C\uDFD9"],"","",["cityscape"],11,14,15,0], - "1f3da":[["\uD83C\uDFDA"],"","",["derelict_house_building"],11,15,15,0], - "1f3db":[["\uD83C\uDFDB"],"","",["classical_building"],11,16,15,0], - "1f3dc":[["\uD83C\uDFDC"],"","",["desert"],11,17,15,0], - "1f3dd":[["\uD83C\uDFDD"],"","",["desert_island"],11,18,15,0], - "1f3de":[["\uD83C\uDFDE"],"","",["national_park"],11,19,15,0], - "1f3df":[["\uD83C\uDFDF"],"","",["stadium"],11,20,15,0], - "1f3e0":[["\uD83C\uDFE0"],"\uE036","\uDBB9\uDCB0",["house"],11,21,15,0], - "1f3e1":[["\uD83C\uDFE1"],"\uE036","\uDBB9\uDCB1",["house_with_garden"],11,22,15,0], - "1f3e2":[["\uD83C\uDFE2"],"\uE038","\uDBB9\uDCB2",["office"],11,23,15,0], - "1f3e3":[["\uD83C\uDFE3"],"\uE153","\uDBB9\uDCB3",["post_office"],11,24,15,0], - "1f3e4":[["\uD83C\uDFE4"],"","",["european_post_office"],11,25,15,0], - "1f3e5":[["\uD83C\uDFE5"],"\uE155","\uDBB9\uDCB4",["hospital"],11,26,15,0], - "1f3e6":[["\uD83C\uDFE6"],"\uE14D","\uDBB9\uDCB5",["bank"],11,27,15,0], - "1f3e7":[["\uD83C\uDFE7"],"\uE154","\uDBB9\uDCB6",["atm"],11,28,15,0], - "1f3e8":[["\uD83C\uDFE8"],"\uE158","\uDBB9\uDCB7",["hotel"],11,29,15,0], - "1f3e9":[["\uD83C\uDFE9"],"\uE501","\uDBB9\uDCB8",["love_hotel"],11,30,15,0], - "1f3ea":[["\uD83C\uDFEA"],"\uE156","\uDBB9\uDCB9",["convenience_store"],11,31,15,0], - "1f3eb":[["\uD83C\uDFEB"],"\uE157","\uDBB9\uDCBA",["school"],11,32,15,0], - "1f3ec":[["\uD83C\uDFEC"],"\uE504","\uDBB9\uDCBD",["department_store"],11,33,15,0], - "1f3ed":[["\uD83C\uDFED"],"\uE508","\uDBB9\uDCC0",["factory"],11,34,15,0], - "1f3ee":[["\uD83C\uDFEE"],"\uE30B","\uDBB9\uDCC2",["izakaya_lantern","lantern"],11,35,15,0], - "1f3ef":[["\uD83C\uDFEF"],"\uE505","\uDBB9\uDCBE",["japanese_castle"],11,36,15,0], - "1f3f0":[["\uD83C\uDFF0"],"\uE506","\uDBB9\uDCBF",["european_castle"],11,37,15,0], - "1f3f3":[["\uD83C\uDFF3"],"","",["waving_white_flag"],11,38,15,0], - "1f3f4":[["\uD83C\uDFF4"],"","",["waving_black_flag"],11,39,15,0], - "1f3f5":[["\uD83C\uDFF5"],"","",["rosette"],11,40,15,0], - "1f3f7":[["\uD83C\uDFF7"],"","",["label"],12,0,15,0], - "1f3f8":[["\uD83C\uDFF8"],"","",["badminton_racquet_and_shuttlecock"],12,1,7,0], - "1f3f9":[["\uD83C\uDFF9"],"","",["bow_and_arrow"],12,2,7,0], - "1f3fa":[["\uD83C\uDFFA"],"","",["amphora"],12,3,7,0], - "1f3fb":[["\uD83C\uDFFB"],"","",["skin-tone-2"],12,4,5,0], - "1f3fc":[["\uD83C\uDFFC"],"","",["skin-tone-3"],12,5,5,0], - "1f3fd":[["\uD83C\uDFFD"],"","",["skin-tone-4"],12,6,5,0], - "1f3fe":[["\uD83C\uDFFE"],"","",["skin-tone-5"],12,7,5,0], - "1f3ff":[["\uD83C\uDFFF"],"","",["skin-tone-6"],12,8,5,0], - "1f400":[["\uD83D\uDC00"],"","",["rat"],12,9,15,0], - "1f401":[["\uD83D\uDC01"],"","",["mouse2"],12,10,15,0], - "1f402":[["\uD83D\uDC02"],"","",["ox"],12,11,15,0], - "1f403":[["\uD83D\uDC03"],"","",["water_buffalo"],12,12,15,0], - "1f404":[["\uD83D\uDC04"],"","",["cow2"],12,13,15,0], - "1f405":[["\uD83D\uDC05"],"","",["tiger2"],12,14,15,0], - "1f406":[["\uD83D\uDC06"],"","",["leopard"],12,15,15,0], - "1f407":[["\uD83D\uDC07"],"","",["rabbit2"],12,16,15,0], - "1f408":[["\uD83D\uDC08"],"","",["cat2"],12,17,15,0], - "1f409":[["\uD83D\uDC09"],"","",["dragon"],12,18,15,0], - "1f40a":[["\uD83D\uDC0A"],"","",["crocodile"],12,19,15,0], - "1f40b":[["\uD83D\uDC0B"],"","",["whale2"],12,20,15,0], - "1f40c":[["\uD83D\uDC0C"],"","\uDBB8\uDDB9",["snail"],12,21,15,0], - "1f40d":[["\uD83D\uDC0D"],"\uE52D","\uDBB8\uDDD3",["snake"],12,22,15,0], - "1f40e":[["\uD83D\uDC0E"],"\uE134","\uDBB9\uDFDC",["racehorse"],12,23,15,0], - "1f40f":[["\uD83D\uDC0F"],"","",["ram"],12,24,15,0], - "1f410":[["\uD83D\uDC10"],"","",["goat"],12,25,15,0], - "1f411":[["\uD83D\uDC11"],"\uE529","\uDBB8\uDDCF",["sheep"],12,26,15,0], - "1f412":[["\uD83D\uDC12"],"\uE528","\uDBB8\uDDCE",["monkey"],12,27,15,0], - "1f413":[["\uD83D\uDC13"],"","",["rooster"],12,28,15,0], - "1f414":[["\uD83D\uDC14"],"\uE52E","\uDBB8\uDDD4",["chicken"],12,29,15,0], - "1f415":[["\uD83D\uDC15"],"","",["dog2"],12,30,15,0], - "1f416":[["\uD83D\uDC16"],"","",["pig2"],12,31,15,0], - "1f417":[["\uD83D\uDC17"],"\uE52F","\uDBB8\uDDD5",["boar"],12,32,15,0], - "1f418":[["\uD83D\uDC18"],"\uE526","\uDBB8\uDDCC",["elephant"],12,33,15,0], - "1f419":[["\uD83D\uDC19"],"\uE10A","\uDBB8\uDDC5",["octopus"],12,34,15,0], - "1f41a":[["\uD83D\uDC1A"],"\uE441","\uDBB8\uDDC6",["shell"],12,35,15,0], - "1f41b":[["\uD83D\uDC1B"],"\uE525","\uDBB8\uDDCB",["bug"],12,36,15,0], - "1f41c":[["\uD83D\uDC1C"],"","\uDBB8\uDDDA",["ant"],12,37,15,0], - "1f41d":[["\uD83D\uDC1D"],"","\uDBB8\uDDE1",["bee","honeybee"],12,38,15,0], - "1f41e":[["\uD83D\uDC1E"],"","\uDBB8\uDDE2",["beetle"],12,39,15,0], - "1f41f":[["\uD83D\uDC1F"],"\uE019","\uDBB8\uDDBD",["fish"],12,40,15,0], - "1f420":[["\uD83D\uDC20"],"\uE522","\uDBB8\uDDC9",["tropical_fish"],13,0,15,0], - "1f421":[["\uD83D\uDC21"],"\uE019","\uDBB8\uDDD9",["blowfish"],13,1,15,0], - "1f422":[["\uD83D\uDC22"],"","\uDBB8\uDDDC",["turtle"],13,2,15,0], - "1f423":[["\uD83D\uDC23"],"\uE523","\uDBB8\uDDDD",["hatching_chick"],13,3,15,0], - "1f424":[["\uD83D\uDC24"],"\uE523","\uDBB8\uDDBA",["baby_chick"],13,4,15,0], - "1f425":[["\uD83D\uDC25"],"\uE523","\uDBB8\uDDBB",["hatched_chick"],13,5,15,0], - "1f426":[["\uD83D\uDC26"],"\uE521","\uDBB8\uDDC8",["bird"],13,6,15,0], - "1f427":[["\uD83D\uDC27"],"\uE055","\uDBB8\uDDBC",["penguin"],13,7,15,0], - "1f428":[["\uD83D\uDC28"],"\uE527","\uDBB8\uDDCD",["koala"],13,8,15,0], - "1f429":[["\uD83D\uDC29"],"\uE052","\uDBB8\uDDD8",["poodle"],13,9,15,0], - "1f42a":[["\uD83D\uDC2A"],"","",["dromedary_camel"],13,10,15,0], - "1f42b":[["\uD83D\uDC2B"],"\uE530","\uDBB8\uDDD6",["camel"],13,11,15,0], - "1f42c":[["\uD83D\uDC2C"],"\uE520","\uDBB8\uDDC7",["dolphin","flipper"],13,12,15,0], - "1f42d":[["\uD83D\uDC2D"],"\uE053","\uDBB8\uDDC2",["mouse"],13,13,15,0], - "1f42e":[["\uD83D\uDC2E"],"\uE52B","\uDBB8\uDDD1",["cow"],13,14,15,0], - "1f42f":[["\uD83D\uDC2F"],"\uE050","\uDBB8\uDDC0",["tiger"],13,15,15,0], - "1f430":[["\uD83D\uDC30"],"\uE52C","\uDBB8\uDDD2",["rabbit"],13,16,15,0], - "1f431":[["\uD83D\uDC31"],"\uE04F","\uDBB8\uDDB8",["cat"],13,17,15,0], - "1f432":[["\uD83D\uDC32"],"","\uDBB8\uDDDE",["dragon_face"],13,18,15,0], - "1f433":[["\uD83D\uDC33"],"\uE054","\uDBB8\uDDC3",["whale"],13,19,15,0], - "1f434":[["\uD83D\uDC34"],"\uE01A","\uDBB8\uDDBE",["horse"],13,20,15,0], - "1f435":[["\uD83D\uDC35"],"\uE109","\uDBB8\uDDC4",["monkey_face"],13,21,15,0], - "1f436":[["\uD83D\uDC36"],"\uE052","\uDBB8\uDDB7",["dog"],13,22,15,0], - "1f437":[["\uD83D\uDC37"],"\uE10B","\uDBB8\uDDBF",["pig"],13,23,15,0], - "1f438":[["\uD83D\uDC38"],"\uE531","\uDBB8\uDDD7",["frog"],13,24,15,0], - "1f439":[["\uD83D\uDC39"],"\uE524","\uDBB8\uDDCA",["hamster"],13,25,15,0], - "1f43a":[["\uD83D\uDC3A"],"\uE52A","\uDBB8\uDDD0",["wolf"],13,26,15,0], - "1f43b":[["\uD83D\uDC3B"],"\uE051","\uDBB8\uDDC1",["bear"],13,27,15,0], - "1f43c":[["\uD83D\uDC3C"],"","\uDBB8\uDDDF",["panda_face"],13,28,15,0], - "1f43d":[["\uD83D\uDC3D"],"\uE10B","\uDBB8\uDDE0",["pig_nose"],13,29,15,0], - "1f43e":[["\uD83D\uDC3E"],"\uE536","\uDBB8\uDDDB",["feet","paw_prints"],13,30,15,0], - "1f43f":[["\uD83D\uDC3F"],"","",["chipmunk"],13,31,15,0], - "1f440":[["\uD83D\uDC40"],"\uE419","\uDBB8\uDD90",["eyes"],13,32,15,0], - "1f441":[["\uD83D\uDC41"],"","",["eye"],13,33,15,0], - "1f442":[["\uD83D\uDC42"],"\uE41B","\uDBB8\uDD91",["ear"],13,34,15,0], - "1f443":[["\uD83D\uDC43"],"\uE41A","\uDBB8\uDD92",["nose"],13,40,15,0], - "1f444":[["\uD83D\uDC44"],"\uE41C","\uDBB8\uDD93",["lips"],14,5,15,0], - "1f445":[["\uD83D\uDC45"],"\uE409","\uDBB8\uDD94",["tongue"],14,6,15,0], - "1f446":[["\uD83D\uDC46"],"\uE22E","\uDBBA\uDF99",["point_up_2"],14,7,15,0], - "1f447":[["\uD83D\uDC47"],"\uE22F","\uDBBA\uDF9A",["point_down"],14,13,15,0], - "1f448":[["\uD83D\uDC48"],"\uE230","\uDBBA\uDF9B",["point_left"],14,19,15,0], - "1f449":[["\uD83D\uDC49"],"\uE231","\uDBBA\uDF9C",["point_right"],14,25,15,0], - "1f44a":[["\uD83D\uDC4A"],"\uE00D","\uDBBA\uDF96",["facepunch","punch"],14,31,15,0], - "1f44b":[["\uD83D\uDC4B"],"\uE41E","\uDBBA\uDF9D",["wave"],14,37,15,0], - "1f44c":[["\uD83D\uDC4C"],"\uE420","\uDBBA\uDF9F",["ok_hand"],15,2,15,0], - "1f44d":[["\uD83D\uDC4D"],"\uE00E","\uDBBA\uDF97",["+1","thumbsup"],15,8,15,0], - "1f44e":[["\uD83D\uDC4E"],"\uE421","\uDBBA\uDFA0",["-1","thumbsdown"],15,14,15,0], - "1f44f":[["\uD83D\uDC4F"],"\uE41F","\uDBBA\uDF9E",["clap"],15,20,15,0], - "1f450":[["\uD83D\uDC50"],"\uE422","\uDBBA\uDFA1",["open_hands"],15,26,15,0], - "1f451":[["\uD83D\uDC51"],"\uE10E","\uDBB9\uDCD1",["crown"],15,32,15,0], - "1f452":[["\uD83D\uDC52"],"\uE318","\uDBB9\uDCD4",["womans_hat"],15,33,15,0], - "1f453":[["\uD83D\uDC53"],"","\uDBB9\uDCCE",["eyeglasses"],15,34,15,0], - "1f454":[["\uD83D\uDC54"],"\uE302","\uDBB9\uDCD3",["necktie"],15,35,15,0], - "1f455":[["\uD83D\uDC55"],"\uE006","\uDBB9\uDCCF",["shirt","tshirt"],15,36,15,0], - "1f456":[["\uD83D\uDC56"],"","\uDBB9\uDCD0",["jeans"],15,37,15,0], - "1f457":[["\uD83D\uDC57"],"\uE319","\uDBB9\uDCD5",["dress"],15,38,15,0], - "1f458":[["\uD83D\uDC58"],"\uE321","\uDBB9\uDCD9",["kimono"],15,39,15,0], - "1f459":[["\uD83D\uDC59"],"\uE322","\uDBB9\uDCDA",["bikini"],15,40,15,0], - "1f45a":[["\uD83D\uDC5A"],"\uE006","\uDBB9\uDCDB",["womans_clothes"],16,0,15,0], - "1f45b":[["\uD83D\uDC5B"],"","\uDBB9\uDCDC",["purse"],16,1,15,0], - "1f45c":[["\uD83D\uDC5C"],"\uE323","\uDBB9\uDCF0",["handbag"],16,2,15,0], - "1f45d":[["\uD83D\uDC5D"],"","\uDBB9\uDCF1",["pouch"],16,3,15,0], - "1f45e":[["\uD83D\uDC5E"],"\uE007","\uDBB9\uDCCC",["mans_shoe","shoe"],16,4,15,0], - "1f45f":[["\uD83D\uDC5F"],"\uE007","\uDBB9\uDCCD",["athletic_shoe"],16,5,15,0], - "1f460":[["\uD83D\uDC60"],"\uE13E","\uDBB9\uDCD6",["high_heel"],16,6,15,0], - "1f461":[["\uD83D\uDC61"],"\uE31A","\uDBB9\uDCD7",["sandal"],16,7,15,0], - "1f462":[["\uD83D\uDC62"],"\uE31B","\uDBB9\uDCD8",["boot"],16,8,15,0], - "1f463":[["\uD83D\uDC63"],"\uE536","\uDBB9\uDD53",["footprints"],16,9,15,0], - "1f464":[["\uD83D\uDC64"],"","\uDBB8\uDD9A",["bust_in_silhouette"],16,10,15,0], - "1f465":[["\uD83D\uDC65"],"","",["busts_in_silhouette"],16,11,15,0], - "1f466":[["\uD83D\uDC66"],"\uE001","\uDBB8\uDD9B",["boy"],16,12,15,0], - "1f467":[["\uD83D\uDC67"],"\uE002","\uDBB8\uDD9C",["girl"],16,18,15,0], - "1f468":[["\uD83D\uDC68"],"\uE004","\uDBB8\uDD9D",["man"],16,24,15,0], - "1f469":[["\uD83D\uDC69"],"\uE005","\uDBB8\uDD9E",["woman"],16,30,15,0], - "1f46a":[["\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC66","\uD83D\uDC6A"],"","\uDBB8\uDD9F",["family","man-woman-boy"],16,36,15,0], - "1f46b":[["\uD83D\uDC6B"],"\uE428","\uDBB8\uDDA0",["couple","man_and_woman_holding_hands"],16,37,15,0], - "1f46c":[["\uD83D\uDC6C"],"","",["two_men_holding_hands"],16,38,15,0], - "1f46d":[["\uD83D\uDC6D"],"","",["two_women_holding_hands"],16,39,15,0], - "1f46e":[["\uD83D\uDC6E"],"\uE152","\uDBB8\uDDA1",["cop"],16,40,15,0], - "1f46f":[["\uD83D\uDC6F"],"\uE429","\uDBB8\uDDA2",["dancers"],17,5,15,0], - "1f470":[["\uD83D\uDC70"],"","\uDBB8\uDDA3",["bride_with_veil"],17,6,15,0], - "1f471":[["\uD83D\uDC71"],"\uE515","\uDBB8\uDDA4",["person_with_blond_hair"],17,12,15,0], - "1f472":[["\uD83D\uDC72"],"\uE516","\uDBB8\uDDA5",["man_with_gua_pi_mao"],17,18,15,0], - "1f473":[["\uD83D\uDC73"],"\uE517","\uDBB8\uDDA6",["man_with_turban"],17,24,15,0], - "1f474":[["\uD83D\uDC74"],"\uE518","\uDBB8\uDDA7",["older_man"],17,30,15,0], - "1f475":[["\uD83D\uDC75"],"\uE519","\uDBB8\uDDA8",["older_woman"],17,36,15,0], - "1f476":[["\uD83D\uDC76"],"\uE51A","\uDBB8\uDDA9",["baby"],18,1,15,0], - "1f477":[["\uD83D\uDC77"],"\uE51B","\uDBB8\uDDAA",["construction_worker"],18,7,15,0], - "1f478":[["\uD83D\uDC78"],"\uE51C","\uDBB8\uDDAB",["princess"],18,13,15,0], - "1f479":[["\uD83D\uDC79"],"","\uDBB8\uDDAC",["japanese_ogre"],18,19,15,0], - "1f47a":[["\uD83D\uDC7A"],"","\uDBB8\uDDAD",["japanese_goblin"],18,20,15,0], - "1f47b":[["\uD83D\uDC7B"],"\uE11B","\uDBB8\uDDAE",["ghost"],18,21,15,0], - "1f47c":[["\uD83D\uDC7C"],"\uE04E","\uDBB8\uDDAF",["angel"],18,22,15,0], - "1f47d":[["\uD83D\uDC7D"],"\uE10C","\uDBB8\uDDB0",["alien"],18,28,15,0], - "1f47e":[["\uD83D\uDC7E"],"\uE12B","\uDBB8\uDDB1",["space_invader"],18,29,15,0], - "1f47f":[["\uD83D\uDC7F"],"\uE11A","\uDBB8\uDDB2",["imp"],18,30,15,0], - "1f480":[["\uD83D\uDC80"],"\uE11C","\uDBB8\uDDB3",["skull"],18,31,15,0], - "1f481":[["\uD83D\uDC81"],"\uE253","\uDBB8\uDDB4",["information_desk_person"],18,32,15,0], - "1f482":[["\uD83D\uDC82"],"\uE51E","\uDBB8\uDDB5",["guardsman"],18,38,15,0], - "1f483":[["\uD83D\uDC83"],"\uE51F","\uDBB8\uDDB6",["dancer"],19,3,15,0], - "1f484":[["\uD83D\uDC84"],"\uE31C","\uDBB8\uDD95",["lipstick"],19,9,15,0], - "1f485":[["\uD83D\uDC85"],"\uE31D","\uDBB8\uDD96",["nail_care"],19,10,15,0], - "1f486":[["\uD83D\uDC86"],"\uE31E","\uDBB8\uDD97",["massage"],19,16,15,0], - "1f487":[["\uD83D\uDC87"],"\uE31F","\uDBB8\uDD98",["haircut"],19,22,15,0], - "1f488":[["\uD83D\uDC88"],"\uE320","\uDBB8\uDD99",["barber"],19,28,15,0], - "1f489":[["\uD83D\uDC89"],"\uE13B","\uDBB9\uDD09",["syringe"],19,29,15,0], - "1f48a":[["\uD83D\uDC8A"],"\uE30F","\uDBB9\uDD0A",["pill"],19,30,15,0], - "1f48b":[["\uD83D\uDC8B"],"\uE003","\uDBBA\uDC23",["kiss"],19,31,15,0], - "1f48c":[["\uD83D\uDC8C"],"\uE103\uE328","\uDBBA\uDC24",["love_letter"],19,32,15,0], - "1f48d":[["\uD83D\uDC8D"],"\uE034","\uDBBA\uDC25",["ring"],19,33,15,0], - "1f48e":[["\uD83D\uDC8E"],"\uE035","\uDBBA\uDC26",["gem"],19,34,15,0], - "1f48f":[["\uD83D\uDC8F"],"\uE111","\uDBBA\uDC27",["couplekiss"],19,35,15,0], - "1f490":[["\uD83D\uDC90"],"\uE306","\uDBBA\uDC28",["bouquet"],19,36,15,0], - "1f491":[["\uD83D\uDC91"],"\uE425","\uDBBA\uDC29",["couple_with_heart"],19,37,15,0], - "1f492":[["\uD83D\uDC92"],"\uE43D","\uDBBA\uDC2A",["wedding"],19,38,15,0], - "1f493":[["\uD83D\uDC93"],"\uE327","\uDBBA\uDF0D",["heartbeat"],19,39,15,0], - "1f494":[["\uD83D\uDC94"],"\uE023","\uDBBA\uDF0E",["broken_heart"],19,40,15,0,"<\/3"], - "1f495":[["\uD83D\uDC95"],"\uE327","\uDBBA\uDF0F",["two_hearts"],20,0,15,0], - "1f496":[["\uD83D\uDC96"],"\uE327","\uDBBA\uDF10",["sparkling_heart"],20,1,15,0], - "1f497":[["\uD83D\uDC97"],"\uE328","\uDBBA\uDF11",["heartpulse"],20,2,15,0], - "1f498":[["\uD83D\uDC98"],"\uE329","\uDBBA\uDF12",["cupid"],20,3,15,0], - "1f499":[["\uD83D\uDC99"],"\uE32A","\uDBBA\uDF13",["blue_heart"],20,4,15,0,"<3"], - "1f49a":[["\uD83D\uDC9A"],"\uE32B","\uDBBA\uDF14",["green_heart"],20,5,15,0,"<3"], - "1f49b":[["\uD83D\uDC9B"],"\uE32C","\uDBBA\uDF15",["yellow_heart"],20,6,15,0,"<3"], - "1f49c":[["\uD83D\uDC9C"],"\uE32D","\uDBBA\uDF16",["purple_heart"],20,7,15,0,"<3"], - "1f49d":[["\uD83D\uDC9D"],"\uE437","\uDBBA\uDF17",["gift_heart"],20,8,15,0], - "1f49e":[["\uD83D\uDC9E"],"\uE327","\uDBBA\uDF18",["revolving_hearts"],20,9,15,0], - "1f49f":[["\uD83D\uDC9F"],"\uE204","\uDBBA\uDF19",["heart_decoration"],20,10,15,0], - "1f4a0":[["\uD83D\uDCA0"],"","\uDBBA\uDF55",["diamond_shape_with_a_dot_inside"],20,11,15,0], - "1f4a1":[["\uD83D\uDCA1"],"\uE10F","\uDBBA\uDF56",["bulb"],20,12,15,0], - "1f4a2":[["\uD83D\uDCA2"],"\uE334","\uDBBA\uDF57",["anger"],20,13,15,0], - "1f4a3":[["\uD83D\uDCA3"],"\uE311","\uDBBA\uDF58",["bomb"],20,14,15,0], - "1f4a4":[["\uD83D\uDCA4"],"\uE13C","\uDBBA\uDF59",["zzz"],20,15,15,0], - "1f4a5":[["\uD83D\uDCA5"],"","\uDBBA\uDF5A",["boom","collision"],20,16,15,0], - "1f4a6":[["\uD83D\uDCA6"],"\uE331","\uDBBA\uDF5B",["sweat_drops"],20,17,15,0], - "1f4a7":[["\uD83D\uDCA7"],"\uE331","\uDBBA\uDF5C",["droplet"],20,18,15,0], - "1f4a8":[["\uD83D\uDCA8"],"\uE330","\uDBBA\uDF5D",["dash"],20,19,15,0], - "1f4a9":[["\uD83D\uDCA9"],"\uE05A","\uDBB9\uDCF4",["hankey","poop","shit"],20,20,15,0], - "1f4aa":[["\uD83D\uDCAA"],"\uE14C","\uDBBA\uDF5E",["muscle"],20,21,15,0], - "1f4ab":[["\uD83D\uDCAB"],"\uE407","\uDBBA\uDF5F",["dizzy"],20,27,15,0], - "1f4ac":[["\uD83D\uDCAC"],"","\uDBB9\uDD32",["speech_balloon"],20,28,15,0], - "1f4ad":[["\uD83D\uDCAD"],"","",["thought_balloon"],20,29,15,0], - "1f4ae":[["\uD83D\uDCAE"],"","\uDBBA\uDF7A",["white_flower"],20,30,15,0], - "1f4af":[["\uD83D\uDCAF"],"","\uDBBA\uDF7B",["100"],20,31,15,0], - "1f4b0":[["\uD83D\uDCB0"],"\uE12F","\uDBB9\uDCDD",["moneybag"],20,32,15,0], - "1f4b1":[["\uD83D\uDCB1"],"\uE149","\uDBB9\uDCDE",["currency_exchange"],20,33,15,0], - "1f4b2":[["\uD83D\uDCB2"],"\uE12F","\uDBB9\uDCE0",["heavy_dollar_sign"],20,34,15,0], - "1f4b3":[["\uD83D\uDCB3"],"","\uDBB9\uDCE1",["credit_card"],20,35,15,0], - "1f4b4":[["\uD83D\uDCB4"],"","\uDBB9\uDCE2",["yen"],20,36,15,0], - "1f4b5":[["\uD83D\uDCB5"],"\uE12F","\uDBB9\uDCE3",["dollar"],20,37,15,0], - "1f4b6":[["\uD83D\uDCB6"],"","",["euro"],20,38,15,0], - "1f4b7":[["\uD83D\uDCB7"],"","",["pound"],20,39,15,0], - "1f4b8":[["\uD83D\uDCB8"],"","\uDBB9\uDCE4",["money_with_wings"],20,40,15,0], - "1f4b9":[["\uD83D\uDCB9"],"\uE14A","\uDBB9\uDCDF",["chart"],21,0,15,0], - "1f4ba":[["\uD83D\uDCBA"],"\uE11F","\uDBB9\uDD37",["seat"],21,1,15,0], - "1f4bb":[["\uD83D\uDCBB"],"\uE00C","\uDBB9\uDD38",["computer"],21,2,15,0], - "1f4bc":[["\uD83D\uDCBC"],"\uE11E","\uDBB9\uDD3B",["briefcase"],21,3,15,0], - "1f4bd":[["\uD83D\uDCBD"],"\uE316","\uDBB9\uDD3C",["minidisc"],21,4,15,0], - "1f4be":[["\uD83D\uDCBE"],"\uE316","\uDBB9\uDD3D",["floppy_disk"],21,5,15,0], - "1f4bf":[["\uD83D\uDCBF"],"\uE126","\uDBBA\uDC1D",["cd"],21,6,15,0], - "1f4c0":[["\uD83D\uDCC0"],"\uE127","\uDBBA\uDC1E",["dvd"],21,7,15,0], - "1f4c1":[["\uD83D\uDCC1"],"","\uDBB9\uDD43",["file_folder"],21,8,15,0], - "1f4c2":[["\uD83D\uDCC2"],"","\uDBB9\uDD44",["open_file_folder"],21,9,15,0], - "1f4c3":[["\uD83D\uDCC3"],"\uE301","\uDBB9\uDD40",["page_with_curl"],21,10,15,0], - "1f4c4":[["\uD83D\uDCC4"],"\uE301","\uDBB9\uDD41",["page_facing_up"],21,11,15,0], - "1f4c5":[["\uD83D\uDCC5"],"","\uDBB9\uDD42",["date"],21,12,15,0], - "1f4c6":[["\uD83D\uDCC6"],"","\uDBB9\uDD49",["calendar"],21,13,15,0], - "1f4c7":[["\uD83D\uDCC7"],"\uE148","\uDBB9\uDD4D",["card_index"],21,14,15,0], - "1f4c8":[["\uD83D\uDCC8"],"\uE14A","\uDBB9\uDD4B",["chart_with_upwards_trend"],21,15,15,0], - "1f4c9":[["\uD83D\uDCC9"],"","\uDBB9\uDD4C",["chart_with_downwards_trend"],21,16,15,0], - "1f4ca":[["\uD83D\uDCCA"],"\uE14A","\uDBB9\uDD4A",["bar_chart"],21,17,15,0], - "1f4cb":[["\uD83D\uDCCB"],"\uE301","\uDBB9\uDD48",["clipboard"],21,18,15,0], - "1f4cc":[["\uD83D\uDCCC"],"","\uDBB9\uDD4E",["pushpin"],21,19,15,0], - "1f4cd":[["\uD83D\uDCCD"],"","\uDBB9\uDD3F",["round_pushpin"],21,20,15,0], - "1f4ce":[["\uD83D\uDCCE"],"","\uDBB9\uDD3A",["paperclip"],21,21,15,0], - "1f4cf":[["\uD83D\uDCCF"],"","\uDBB9\uDD50",["straight_ruler"],21,22,15,0], - "1f4d0":[["\uD83D\uDCD0"],"","\uDBB9\uDD51",["triangular_ruler"],21,23,15,0], - "1f4d1":[["\uD83D\uDCD1"],"\uE301","\uDBB9\uDD52",["bookmark_tabs"],21,24,15,0], - "1f4d2":[["\uD83D\uDCD2"],"\uE148","\uDBB9\uDD4F",["ledger"],21,25,15,0], - "1f4d3":[["\uD83D\uDCD3"],"\uE148","\uDBB9\uDD45",["notebook"],21,26,15,0], - "1f4d4":[["\uD83D\uDCD4"],"\uE148","\uDBB9\uDD47",["notebook_with_decorative_cover"],21,27,15,0], - "1f4d5":[["\uD83D\uDCD5"],"\uE148","\uDBB9\uDD02",["closed_book"],21,28,15,0], - "1f4d6":[["\uD83D\uDCD6"],"\uE148","\uDBB9\uDD46",["book","open_book"],21,29,15,0], - "1f4d7":[["\uD83D\uDCD7"],"\uE148","\uDBB9\uDCFF",["green_book"],21,30,15,0], - "1f4d8":[["\uD83D\uDCD8"],"\uE148","\uDBB9\uDD00",["blue_book"],21,31,15,0], - "1f4d9":[["\uD83D\uDCD9"],"\uE148","\uDBB9\uDD01",["orange_book"],21,32,15,0], - "1f4da":[["\uD83D\uDCDA"],"\uE148","\uDBB9\uDD03",["books"],21,33,15,0], - "1f4db":[["\uD83D\uDCDB"],"","\uDBB9\uDD04",["name_badge"],21,34,15,0], - "1f4dc":[["\uD83D\uDCDC"],"","\uDBB9\uDCFD",["scroll"],21,35,15,0], - "1f4dd":[["\uD83D\uDCDD"],"\uE301","\uDBB9\uDD27",["memo","pencil"],21,36,15,0], - "1f4de":[["\uD83D\uDCDE"],"\uE009","\uDBB9\uDD24",["telephone_receiver"],21,37,15,0], - "1f4df":[["\uD83D\uDCDF"],"","\uDBB9\uDD22",["pager"],21,38,15,0], - "1f4e0":[["\uD83D\uDCE0"],"\uE00B","\uDBB9\uDD28",["fax"],21,39,15,0], - "1f4e1":[["\uD83D\uDCE1"],"\uE14B","\uDBB9\uDD31",["satellite"],21,40,15,0], - "1f4e2":[["\uD83D\uDCE2"],"\uE142","\uDBB9\uDD2F",["loudspeaker"],22,0,15,0], - "1f4e3":[["\uD83D\uDCE3"],"\uE317","\uDBB9\uDD30",["mega"],22,1,15,0], - "1f4e4":[["\uD83D\uDCE4"],"","\uDBB9\uDD33",["outbox_tray"],22,2,15,0], - "1f4e5":[["\uD83D\uDCE5"],"","\uDBB9\uDD34",["inbox_tray"],22,3,15,0], - "1f4e6":[["\uD83D\uDCE6"],"\uE112","\uDBB9\uDD35",["package"],22,4,15,0], - "1f4e7":[["\uD83D\uDCE7"],"\uE103","\uDBBA\uDF92",["e-mail"],22,5,15,0], - "1f4e8":[["\uD83D\uDCE8"],"\uE103","\uDBB9\uDD2A",["incoming_envelope"],22,6,15,0], - "1f4e9":[["\uD83D\uDCE9"],"\uE103","\uDBB9\uDD2B",["envelope_with_arrow"],22,7,15,0], - "1f4ea":[["\uD83D\uDCEA"],"\uE101","\uDBB9\uDD2C",["mailbox_closed"],22,8,15,0], - "1f4eb":[["\uD83D\uDCEB"],"\uE101","\uDBB9\uDD2D",["mailbox"],22,9,15,0], - "1f4ec":[["\uD83D\uDCEC"],"","",["mailbox_with_mail"],22,10,15,0], - "1f4ed":[["\uD83D\uDCED"],"","",["mailbox_with_no_mail"],22,11,15,0], - "1f4ee":[["\uD83D\uDCEE"],"\uE102","\uDBB9\uDD2E",["postbox"],22,12,15,0], - "1f4ef":[["\uD83D\uDCEF"],"","",["postal_horn"],22,13,15,0], - "1f4f0":[["\uD83D\uDCF0"],"","\uDBBA\uDC22",["newspaper"],22,14,15,0], - "1f4f1":[["\uD83D\uDCF1"],"\uE00A","\uDBB9\uDD25",["iphone"],22,15,15,0], - "1f4f2":[["\uD83D\uDCF2"],"\uE104","\uDBB9\uDD26",["calling"],22,16,15,0], - "1f4f3":[["\uD83D\uDCF3"],"\uE250","\uDBBA\uDC39",["vibration_mode"],22,17,15,0], - "1f4f4":[["\uD83D\uDCF4"],"\uE251","\uDBBA\uDC3A",["mobile_phone_off"],22,18,15,0], - "1f4f5":[["\uD83D\uDCF5"],"","",["no_mobile_phones"],22,19,15,0], - "1f4f6":[["\uD83D\uDCF6"],"\uE20B","\uDBBA\uDC38",["signal_strength"],22,20,15,0], - "1f4f7":[["\uD83D\uDCF7"],"\uE008","\uDBB9\uDCEF",["camera"],22,21,15,0], - "1f4f8":[["\uD83D\uDCF8"],"","",["camera_with_flash"],22,22,15,0], - "1f4f9":[["\uD83D\uDCF9"],"\uE03D","\uDBB9\uDCF9",["video_camera"],22,23,15,0], - "1f4fa":[["\uD83D\uDCFA"],"\uE12A","\uDBBA\uDC1C",["tv"],22,24,15,0], - "1f4fb":[["\uD83D\uDCFB"],"\uE128","\uDBBA\uDC1F",["radio"],22,25,15,0], - "1f4fc":[["\uD83D\uDCFC"],"\uE129","\uDBBA\uDC20",["vhs"],22,26,15,0], - "1f4fd":[["\uD83D\uDCFD"],"","",["film_projector"],22,27,15,0], - "1f4ff":[["\uD83D\uDCFF"],"","",["prayer_beads"],22,28,7,0], - "1f500":[["\uD83D\uDD00"],"","",["twisted_rightwards_arrows"],22,29,15,0], - "1f501":[["\uD83D\uDD01"],"","",["repeat"],22,30,15,0], - "1f502":[["\uD83D\uDD02"],"","",["repeat_one"],22,31,15,0], - "1f503":[["\uD83D\uDD03"],"","\uDBBA\uDF91",["arrows_clockwise"],22,32,15,0], - "1f504":[["\uD83D\uDD04"],"","",["arrows_counterclockwise"],22,33,15,0], - "1f505":[["\uD83D\uDD05"],"","",["low_brightness"],22,34,15,0], - "1f506":[["\uD83D\uDD06"],"","",["high_brightness"],22,35,15,0], - "1f507":[["\uD83D\uDD07"],"","",["mute"],22,36,15,0], - "1f508":[["\uD83D\uDD08"],"","",["speaker"],22,37,15,0], - "1f509":[["\uD83D\uDD09"],"","",["sound"],22,38,15,0], - "1f50a":[["\uD83D\uDD0A"],"\uE141","\uDBBA\uDC21",["loud_sound"],22,39,15,0], - "1f50b":[["\uD83D\uDD0B"],"","\uDBB9\uDCFC",["battery"],22,40,15,0], - "1f50c":[["\uD83D\uDD0C"],"","\uDBB9\uDCFE",["electric_plug"],23,0,15,0], - "1f50d":[["\uD83D\uDD0D"],"\uE114","\uDBBA\uDF85",["mag"],23,1,15,0], - "1f50e":[["\uD83D\uDD0E"],"\uE114","\uDBBA\uDF8D",["mag_right"],23,2,15,0], - "1f50f":[["\uD83D\uDD0F"],"\uE144","\uDBBA\uDF90",["lock_with_ink_pen"],23,3,15,0], - "1f510":[["\uD83D\uDD10"],"\uE144","\uDBBA\uDF8A",["closed_lock_with_key"],23,4,15,0], - "1f511":[["\uD83D\uDD11"],"\uE03F","\uDBBA\uDF82",["key"],23,5,15,0], - "1f512":[["\uD83D\uDD12"],"\uE144","\uDBBA\uDF86",["lock"],23,6,15,0], - "1f513":[["\uD83D\uDD13"],"\uE145","\uDBBA\uDF87",["unlock"],23,7,15,0], - "1f514":[["\uD83D\uDD14"],"\uE325","\uDBB9\uDCF2",["bell"],23,8,15,0], - "1f515":[["\uD83D\uDD15"],"","",["no_bell"],23,9,15,0], - "1f516":[["\uD83D\uDD16"],"","\uDBBA\uDF8F",["bookmark"],23,10,15,0], - "1f517":[["\uD83D\uDD17"],"","\uDBBA\uDF4B",["link"],23,11,15,0], - "1f518":[["\uD83D\uDD18"],"","\uDBBA\uDF8C",["radio_button"],23,12,15,0], - "1f519":[["\uD83D\uDD19"],"\uE235","\uDBBA\uDF8E",["back"],23,13,15,0], - "1f51a":[["\uD83D\uDD1A"],"","\uDBB8\uDC1A",["end"],23,14,15,0], - "1f51b":[["\uD83D\uDD1B"],"","\uDBB8\uDC19",["on"],23,15,15,0], - "1f51c":[["\uD83D\uDD1C"],"","\uDBB8\uDC18",["soon"],23,16,15,0], - "1f51d":[["\uD83D\uDD1D"],"\uE24C","\uDBBA\uDF42",["top"],23,17,15,0], - "1f51e":[["\uD83D\uDD1E"],"\uE207","\uDBBA\uDF25",["underage"],23,18,15,0], - "1f51f":[["\uD83D\uDD1F"],"","\uDBBA\uDC3B",["keycap_ten"],23,19,15,0], - "1f520":[["\uD83D\uDD20"],"","\uDBBA\uDF7C",["capital_abcd"],23,20,15,0], - "1f521":[["\uD83D\uDD21"],"","\uDBBA\uDF7D",["abcd"],23,21,15,0], - "1f522":[["\uD83D\uDD22"],"","\uDBBA\uDF7E",["1234"],23,22,15,0], - "1f523":[["\uD83D\uDD23"],"","\uDBBA\uDF7F",["symbols"],23,23,15,0], - "1f524":[["\uD83D\uDD24"],"","\uDBBA\uDF80",["abc"],23,24,15,0], - "1f525":[["\uD83D\uDD25"],"\uE11D","\uDBB9\uDCF6",["fire"],23,25,15,0], - "1f526":[["\uD83D\uDD26"],"","\uDBB9\uDCFB",["flashlight"],23,26,15,0], - "1f527":[["\uD83D\uDD27"],"","\uDBB9\uDCC9",["wrench"],23,27,15,0], - "1f528":[["\uD83D\uDD28"],"\uE116","\uDBB9\uDCCA",["hammer"],23,28,15,0], - "1f529":[["\uD83D\uDD29"],"","\uDBB9\uDCCB",["nut_and_bolt"],23,29,15,0], - "1f52a":[["\uD83D\uDD2A"],"","\uDBB9\uDCFA",["hocho","knife"],23,30,15,0], - "1f52b":[["\uD83D\uDD2B"],"\uE113","\uDBB9\uDCF5",["gun"],23,31,15,0], - "1f52c":[["\uD83D\uDD2C"],"","",["microscope"],23,32,15,0], - "1f52d":[["\uD83D\uDD2D"],"","",["telescope"],23,33,15,0], - "1f52e":[["\uD83D\uDD2E"],"\uE23E","\uDBB9\uDCF7",["crystal_ball"],23,34,15,0], - "1f52f":[["\uD83D\uDD2F"],"\uE23E","\uDBB9\uDCF8",["six_pointed_star"],23,35,15,0], - "1f530":[["\uD83D\uDD30"],"\uE209","\uDBB8\uDC44",["beginner"],23,36,15,0], - "1f531":[["\uD83D\uDD31"],"\uE031","\uDBB9\uDCD2",["trident"],23,37,15,0], - "1f532":[["\uD83D\uDD32"],"\uE21A","\uDBBA\uDF64",["black_square_button"],23,38,15,0], - "1f533":[["\uD83D\uDD33"],"\uE21B","\uDBBA\uDF67",["white_square_button"],23,39,15,0], - "1f534":[["\uD83D\uDD34"],"\uE219","\uDBBA\uDF63",["red_circle"],23,40,15,0], - "1f535":[["\uD83D\uDD35"],"\uE21A","\uDBBA\uDF64",["large_blue_circle"],24,0,15,0], - "1f536":[["\uD83D\uDD36"],"\uE21B","\uDBBA\uDF73",["large_orange_diamond"],24,1,15,0], - "1f537":[["\uD83D\uDD37"],"\uE21B","\uDBBA\uDF74",["large_blue_diamond"],24,2,15,0], - "1f538":[["\uD83D\uDD38"],"\uE21B","\uDBBA\uDF75",["small_orange_diamond"],24,3,15,0], - "1f539":[["\uD83D\uDD39"],"\uE21B","\uDBBA\uDF76",["small_blue_diamond"],24,4,15,0], - "1f53a":[["\uD83D\uDD3A"],"","\uDBBA\uDF78",["small_red_triangle"],24,5,15,0], - "1f53b":[["\uD83D\uDD3B"],"","\uDBBA\uDF79",["small_red_triangle_down"],24,6,15,0], - "1f53c":[["\uD83D\uDD3C"],"","\uDBBA\uDF01",["arrow_up_small"],24,7,15,0], - "1f53d":[["\uD83D\uDD3D"],"","\uDBBA\uDF00",["arrow_down_small"],24,8,15,0], - "1f549":[["\uD83D\uDD49"],"","",["om_symbol"],24,9,15,0], - "1f54a":[["\uD83D\uDD4A"],"","",["dove_of_peace"],24,10,15,0], - "1f54b":[["\uD83D\uDD4B"],"","",["kaaba"],24,11,7,0], - "1f54c":[["\uD83D\uDD4C"],"","",["mosque"],24,12,7,0], - "1f54d":[["\uD83D\uDD4D"],"","",["synagogue"],24,13,7,0], - "1f54e":[["\uD83D\uDD4E"],"","",["menorah_with_nine_branches"],24,14,7,0], - "1f550":[["\uD83D\uDD50"],"\uE024","\uDBB8\uDC1E",["clock1"],24,15,15,0], - "1f551":[["\uD83D\uDD51"],"\uE025","\uDBB8\uDC1F",["clock2"],24,16,15,0], - "1f552":[["\uD83D\uDD52"],"\uE026","\uDBB8\uDC20",["clock3"],24,17,15,0], - "1f553":[["\uD83D\uDD53"],"\uE027","\uDBB8\uDC21",["clock4"],24,18,15,0], - "1f554":[["\uD83D\uDD54"],"\uE028","\uDBB8\uDC22",["clock5"],24,19,15,0], - "1f555":[["\uD83D\uDD55"],"\uE029","\uDBB8\uDC23",["clock6"],24,20,15,0], - "1f556":[["\uD83D\uDD56"],"\uE02A","\uDBB8\uDC24",["clock7"],24,21,15,0], - "1f557":[["\uD83D\uDD57"],"\uE02B","\uDBB8\uDC25",["clock8"],24,22,15,0], - "1f558":[["\uD83D\uDD58"],"\uE02C","\uDBB8\uDC26",["clock9"],24,23,15,0], - "1f559":[["\uD83D\uDD59"],"\uE02D","\uDBB8\uDC27",["clock10"],24,24,15,0], - "1f55a":[["\uD83D\uDD5A"],"\uE02E","\uDBB8\uDC28",["clock11"],24,25,15,0], - "1f55b":[["\uD83D\uDD5B"],"\uE02F","\uDBB8\uDC29",["clock12"],24,26,15,0], - "1f55c":[["\uD83D\uDD5C"],"","",["clock130"],24,27,15,0], - "1f55d":[["\uD83D\uDD5D"],"","",["clock230"],24,28,15,0], - "1f55e":[["\uD83D\uDD5E"],"","",["clock330"],24,29,15,0], - "1f55f":[["\uD83D\uDD5F"],"","",["clock430"],24,30,15,0], - "1f560":[["\uD83D\uDD60"],"","",["clock530"],24,31,15,0], - "1f561":[["\uD83D\uDD61"],"","",["clock630"],24,32,15,0], - "1f562":[["\uD83D\uDD62"],"","",["clock730"],24,33,15,0], - "1f563":[["\uD83D\uDD63"],"","",["clock830"],24,34,15,0], - "1f564":[["\uD83D\uDD64"],"","",["clock930"],24,35,15,0], - "1f565":[["\uD83D\uDD65"],"","",["clock1030"],24,36,15,0], - "1f566":[["\uD83D\uDD66"],"","",["clock1130"],24,37,15,0], - "1f567":[["\uD83D\uDD67"],"","",["clock1230"],24,38,15,0], - "1f56f":[["\uD83D\uDD6F"],"","",["candle"],24,39,15,0], - "1f570":[["\uD83D\uDD70"],"","",["mantelpiece_clock"],24,40,15,0], - "1f573":[["\uD83D\uDD73"],"","",["hole"],25,0,15,0], - "1f574":[["\uD83D\uDD74"],"","",["man_in_business_suit_levitating"],25,1,15,0], - "1f575":[["\uD83D\uDD75"],"","",["sleuth_or_spy"],25,2,15,0], - "1f576":[["\uD83D\uDD76"],"","",["dark_sunglasses"],25,3,15,0], - "1f577":[["\uD83D\uDD77"],"","",["spider"],25,4,15,0], - "1f578":[["\uD83D\uDD78"],"","",["spider_web"],25,5,15,0], - "1f579":[["\uD83D\uDD79"],"","",["joystick"],25,6,15,0], - "1f587":[["\uD83D\uDD87"],"","",["linked_paperclips"],25,7,15,0], - "1f58a":[["\uD83D\uDD8A"],"","",["lower_left_ballpoint_pen"],25,8,15,0], - "1f58b":[["\uD83D\uDD8B"],"","",["lower_left_fountain_pen"],25,9,15,0], - "1f58c":[["\uD83D\uDD8C"],"","",["lower_left_paintbrush"],25,10,15,0], - "1f58d":[["\uD83D\uDD8D"],"","",["lower_left_crayon"],25,11,15,0], - "1f590":[["\uD83D\uDD90"],"","",["raised_hand_with_fingers_splayed"],25,12,15,0], - "1f595":[["\uD83D\uDD95"],"","",["middle_finger","reversed_hand_with_middle_finger_extended"],25,18,15,0], - "1f596":[["\uD83D\uDD96"],"","",["spock-hand"],25,24,15,0], - "1f5a5":[["\uD83D\uDDA5"],"","",["desktop_computer"],25,30,15,0], - "1f5a8":[["\uD83D\uDDA8"],"","",["printer"],25,31,15,0], - "1f5b1":[["\uD83D\uDDB1"],"","",["three_button_mouse"],25,32,7,0], - "1f5b2":[["\uD83D\uDDB2"],"","",["trackball"],25,33,15,0], - "1f5bc":[["\uD83D\uDDBC"],"","",["frame_with_picture"],25,34,15,0], - "1f5c2":[["\uD83D\uDDC2"],"","",["card_index_dividers"],25,35,15,0], - "1f5c3":[["\uD83D\uDDC3"],"","",["card_file_box"],25,36,15,0], - "1f5c4":[["\uD83D\uDDC4"],"","",["file_cabinet"],25,37,15,0], - "1f5d1":[["\uD83D\uDDD1"],"","",["wastebasket"],25,38,15,0], - "1f5d2":[["\uD83D\uDDD2"],"","",["spiral_note_pad"],25,39,15,0], - "1f5d3":[["\uD83D\uDDD3"],"","",["spiral_calendar_pad"],25,40,15,0], - "1f5dc":[["\uD83D\uDDDC"],"","",["compression"],26,0,15,0], - "1f5dd":[["\uD83D\uDDDD"],"","",["old_key"],26,1,15,0], - "1f5de":[["\uD83D\uDDDE"],"","",["rolled_up_newspaper"],26,2,15,0], - "1f5e1":[["\uD83D\uDDE1"],"","",["dagger_knife"],26,3,15,0], - "1f5e3":[["\uD83D\uDDE3"],"","",["speaking_head_in_silhouette"],26,4,15,0], - "1f5e8":[["\uD83D\uDDE8"],"","",["left_speech_bubble"],26,5,15,0], - "1f5ef":[["\uD83D\uDDEF"],"","",["right_anger_bubble"],26,6,15,0], - "1f5f3":[["\uD83D\uDDF3"],"","",["ballot_box_with_ballot"],26,7,15,0], - "1f5fa":[["\uD83D\uDDFA"],"","",["world_map"],26,8,15,0], - "1f5fb":[["\uD83D\uDDFB"],"\uE03B","\uDBB9\uDCC3",["mount_fuji"],26,9,15,0], - "1f5fc":[["\uD83D\uDDFC"],"\uE509","\uDBB9\uDCC4",["tokyo_tower"],26,10,15,0], - "1f5fd":[["\uD83D\uDDFD"],"\uE51D","\uDBB9\uDCC6",["statue_of_liberty"],26,11,15,0], - "1f5fe":[["\uD83D\uDDFE"],"","\uDBB9\uDCC7",["japan"],26,12,15,0], - "1f5ff":[["\uD83D\uDDFF"],"","\uDBB9\uDCC8",["moyai"],26,13,15,0], - "1f600":[["\uD83D\uDE00"],"","",["grinning"],26,14,15,0,":D"], - "1f601":[["\uD83D\uDE01"],"\uE404","\uDBB8\uDF33",["grin"],26,15,15,0], - "1f602":[["\uD83D\uDE02"],"\uE412","\uDBB8\uDF34",["joy"],26,16,15,0], - "1f603":[["\uD83D\uDE03"],"\uE057","\uDBB8\uDF30",["smiley"],26,17,15,0,":)"], - "1f604":[["\uD83D\uDE04"],"\uE415","\uDBB8\uDF38",["smile"],26,18,15,0,":)"], - "1f605":[["\uD83D\uDE05"],"\uE415\uE331","\uDBB8\uDF31",["sweat_smile"],26,19,15,0], - "1f606":[["\uD83D\uDE06"],"\uE40A","\uDBB8\uDF32",["laughing","satisfied"],26,20,15,0], - "1f607":[["\uD83D\uDE07"],"","",["innocent"],26,21,15,0], - "1f608":[["\uD83D\uDE08"],"","",["smiling_imp"],26,22,15,0], - "1f609":[["\uD83D\uDE09"],"\uE405","\uDBB8\uDF47",["wink"],26,23,15,0,";)"], - "1f60a":[["\uD83D\uDE0A"],"\uE056","\uDBB8\uDF35",["blush"],26,24,15,0,":)"], - "1f60b":[["\uD83D\uDE0B"],"\uE056","\uDBB8\uDF2B",["yum"],26,25,15,0], - "1f60c":[["\uD83D\uDE0C"],"\uE40A","\uDBB8\uDF3E",["relieved"],26,26,15,0], - "1f60d":[["\uD83D\uDE0D"],"\uE106","\uDBB8\uDF27",["heart_eyes"],26,27,15,0], - "1f60e":[["\uD83D\uDE0E"],"","",["sunglasses"],26,28,15,0], - "1f60f":[["\uD83D\uDE0F"],"\uE402","\uDBB8\uDF43",["smirk"],26,29,15,0], - "1f610":[["\uD83D\uDE10"],"","",["neutral_face"],26,30,15,0], - "1f611":[["\uD83D\uDE11"],"","",["expressionless"],26,31,15,0], - "1f612":[["\uD83D\uDE12"],"\uE40E","\uDBB8\uDF26",["unamused"],26,32,15,0,":("], - "1f613":[["\uD83D\uDE13"],"\uE108","\uDBB8\uDF44",["sweat"],26,33,15,0], - "1f614":[["\uD83D\uDE14"],"\uE403","\uDBB8\uDF40",["pensive"],26,34,15,0], - "1f615":[["\uD83D\uDE15"],"","",["confused"],26,35,15,0], - "1f616":[["\uD83D\uDE16"],"\uE407","\uDBB8\uDF3F",["confounded"],26,36,15,0], - "1f617":[["\uD83D\uDE17"],"","",["kissing"],26,37,15,0], - "1f618":[["\uD83D\uDE18"],"\uE418","\uDBB8\uDF2C",["kissing_heart"],26,38,15,0], - "1f619":[["\uD83D\uDE19"],"","",["kissing_smiling_eyes"],26,39,15,0], - "1f61a":[["\uD83D\uDE1A"],"\uE417","\uDBB8\uDF2D",["kissing_closed_eyes"],26,40,15,0], - "1f61b":[["\uD83D\uDE1B"],"","",["stuck_out_tongue"],27,0,15,0,":p"], - "1f61c":[["\uD83D\uDE1C"],"\uE105","\uDBB8\uDF29",["stuck_out_tongue_winking_eye"],27,1,15,0,";p"], - "1f61d":[["\uD83D\uDE1D"],"\uE409","\uDBB8\uDF2A",["stuck_out_tongue_closed_eyes"],27,2,15,0], - "1f61e":[["\uD83D\uDE1E"],"\uE058","\uDBB8\uDF23",["disappointed"],27,3,15,0,":("], - "1f61f":[["\uD83D\uDE1F"],"","",["worried"],27,4,15,0], - "1f620":[["\uD83D\uDE20"],"\uE059","\uDBB8\uDF20",["angry"],27,5,15,0], - "1f621":[["\uD83D\uDE21"],"\uE416","\uDBB8\uDF3D",["rage"],27,6,15,0], - "1f622":[["\uD83D\uDE22"],"\uE413","\uDBB8\uDF39",["cry"],27,7,15,0,":'("], - "1f623":[["\uD83D\uDE23"],"\uE406","\uDBB8\uDF3C",["persevere"],27,8,15,0], - "1f624":[["\uD83D\uDE24"],"\uE404","\uDBB8\uDF28",["triumph"],27,9,15,0], - "1f625":[["\uD83D\uDE25"],"\uE401","\uDBB8\uDF45",["disappointed_relieved"],27,10,15,0], - "1f626":[["\uD83D\uDE26"],"","",["frowning"],27,11,15,0], - "1f627":[["\uD83D\uDE27"],"","",["anguished"],27,12,15,0], - "1f628":[["\uD83D\uDE28"],"\uE40B","\uDBB8\uDF3B",["fearful"],27,13,15,0], - "1f629":[["\uD83D\uDE29"],"\uE403","\uDBB8\uDF21",["weary"],27,14,15,0], - "1f62a":[["\uD83D\uDE2A"],"\uE408","\uDBB8\uDF42",["sleepy"],27,15,15,0], - "1f62b":[["\uD83D\uDE2B"],"\uE406","\uDBB8\uDF46",["tired_face"],27,16,15,0], - "1f62c":[["\uD83D\uDE2C"],"","",["grimacing"],27,17,15,0], - "1f62d":[["\uD83D\uDE2D"],"\uE411","\uDBB8\uDF3A",["sob"],27,18,15,0,":'("], - "1f62e":[["\uD83D\uDE2E"],"","",["open_mouth"],27,19,15,0], - "1f62f":[["\uD83D\uDE2F"],"","",["hushed"],27,20,15,0], - "1f630":[["\uD83D\uDE30"],"\uE40F","\uDBB8\uDF25",["cold_sweat"],27,21,15,0], - "1f631":[["\uD83D\uDE31"],"\uE107","\uDBB8\uDF41",["scream"],27,22,15,0], - "1f632":[["\uD83D\uDE32"],"\uE410","\uDBB8\uDF22",["astonished"],27,23,15,0], - "1f633":[["\uD83D\uDE33"],"\uE40D","\uDBB8\uDF2F",["flushed"],27,24,15,0], - "1f634":[["\uD83D\uDE34"],"","",["sleeping"],27,25,15,0], - "1f635":[["\uD83D\uDE35"],"\uE406","\uDBB8\uDF24",["dizzy_face"],27,26,15,0], - "1f636":[["\uD83D\uDE36"],"","",["no_mouth"],27,27,15,0], - "1f637":[["\uD83D\uDE37"],"\uE40C","\uDBB8\uDF2E",["mask"],27,28,15,0], - "1f638":[["\uD83D\uDE38"],"\uE404","\uDBB8\uDF49",["smile_cat"],27,29,15,0], - "1f639":[["\uD83D\uDE39"],"\uE412","\uDBB8\uDF4A",["joy_cat"],27,30,15,0], - "1f63a":[["\uD83D\uDE3A"],"\uE057","\uDBB8\uDF48",["smiley_cat"],27,31,15,0], - "1f63b":[["\uD83D\uDE3B"],"\uE106","\uDBB8\uDF4C",["heart_eyes_cat"],27,32,15,0], - "1f63c":[["\uD83D\uDE3C"],"\uE404","\uDBB8\uDF4F",["smirk_cat"],27,33,15,0], - "1f63d":[["\uD83D\uDE3D"],"\uE418","\uDBB8\uDF4B",["kissing_cat"],27,34,15,0], - "1f63e":[["\uD83D\uDE3E"],"\uE416","\uDBB8\uDF4E",["pouting_cat"],27,35,15,0], - "1f63f":[["\uD83D\uDE3F"],"\uE413","\uDBB8\uDF4D",["crying_cat_face"],27,36,15,0], - "1f640":[["\uD83D\uDE40"],"\uE403","\uDBB8\uDF50",["scream_cat"],27,37,15,0], - "1f641":[["\uD83D\uDE41"],"","",["slightly_frowning_face"],27,38,15,0], - "1f642":[["\uD83D\uDE42"],"","",["slightly_smiling_face"],27,39,15,0], - "1f643":[["\uD83D\uDE43"],"","",["upside_down_face"],27,40,7,0], - "1f644":[["\uD83D\uDE44"],"","",["face_with_rolling_eyes"],28,0,7,0], - "1f645":[["\uD83D\uDE45"],"\uE423","\uDBB8\uDF51",["no_good"],28,1,15,0], - "1f646":[["\uD83D\uDE46"],"\uE424","\uDBB8\uDF52",["ok_woman"],28,7,15,0], - "1f647":[["\uD83D\uDE47"],"\uE426","\uDBB8\uDF53",["bow"],28,13,15,0], - "1f648":[["\uD83D\uDE48"],"","\uDBB8\uDF54",["see_no_evil"],28,19,15,0], - "1f649":[["\uD83D\uDE49"],"","\uDBB8\uDF56",["hear_no_evil"],28,20,15,0], - "1f64a":[["\uD83D\uDE4A"],"","\uDBB8\uDF55",["speak_no_evil"],28,21,15,0], - "1f64b":[["\uD83D\uDE4B"],"\uE012","\uDBB8\uDF57",["raising_hand"],28,22,15,0], - "1f64c":[["\uD83D\uDE4C"],"\uE427","\uDBB8\uDF58",["raised_hands"],28,28,15,0], - "1f64d":[["\uD83D\uDE4D"],"\uE403","\uDBB8\uDF59",["person_frowning"],28,34,15,0], - "1f64e":[["\uD83D\uDE4E"],"\uE416","\uDBB8\uDF5A",["person_with_pouting_face"],28,40,15,0], - "1f64f":[["\uD83D\uDE4F"],"\uE41D","\uDBB8\uDF5B",["pray"],29,5,15,0], - "1f680":[["\uD83D\uDE80"],"\uE10D","\uDBB9\uDFED",["rocket"],29,11,15,0], - "1f681":[["\uD83D\uDE81"],"","",["helicopter"],29,12,15,0], - "1f682":[["\uD83D\uDE82"],"","",["steam_locomotive"],29,13,15,0], - "1f683":[["\uD83D\uDE83"],"\uE01E","\uDBB9\uDFDF",["railway_car"],29,14,15,0], - "1f684":[["\uD83D\uDE84"],"\uE435","\uDBB9\uDFE2",["bullettrain_side"],29,15,15,0], - "1f685":[["\uD83D\uDE85"],"\uE01F","\uDBB9\uDFE3",["bullettrain_front"],29,16,15,0], - "1f686":[["\uD83D\uDE86"],"","",["train2"],29,17,15,0], - "1f687":[["\uD83D\uDE87"],"\uE434","\uDBB9\uDFE0",["metro"],29,18,15,0], - "1f688":[["\uD83D\uDE88"],"","",["light_rail"],29,19,15,0], - "1f689":[["\uD83D\uDE89"],"\uE039","\uDBB9\uDFEC",["station"],29,20,15,0], - "1f68a":[["\uD83D\uDE8A"],"","",["tram"],29,21,15,0], - "1f68b":[["\uD83D\uDE8B"],"","",["train"],29,22,15,0], - "1f68c":[["\uD83D\uDE8C"],"\uE159","\uDBB9\uDFE6",["bus"],29,23,15,0], - "1f68d":[["\uD83D\uDE8D"],"","",["oncoming_bus"],29,24,15,0], - "1f68e":[["\uD83D\uDE8E"],"","",["trolleybus"],29,25,15,0], - "1f68f":[["\uD83D\uDE8F"],"\uE150","\uDBB9\uDFE7",["busstop"],29,26,15,0], - "1f690":[["\uD83D\uDE90"],"","",["minibus"],29,27,15,0], - "1f691":[["\uD83D\uDE91"],"\uE431","\uDBB9\uDFF3",["ambulance"],29,28,15,0], - "1f692":[["\uD83D\uDE92"],"\uE430","\uDBB9\uDFF2",["fire_engine"],29,29,15,0], - "1f693":[["\uD83D\uDE93"],"\uE432","\uDBB9\uDFF4",["police_car"],29,30,15,0], - "1f694":[["\uD83D\uDE94"],"","",["oncoming_police_car"],29,31,15,0], - "1f695":[["\uD83D\uDE95"],"\uE15A","\uDBB9\uDFEF",["taxi"],29,32,15,0], - "1f696":[["\uD83D\uDE96"],"","",["oncoming_taxi"],29,33,15,0], - "1f697":[["\uD83D\uDE97"],"\uE01B","\uDBB9\uDFE4",["car","red_car"],29,34,15,0], - "1f698":[["\uD83D\uDE98"],"","",["oncoming_automobile"],29,35,15,0], - "1f699":[["\uD83D\uDE99"],"\uE42E","\uDBB9\uDFE5",["blue_car"],29,36,15,0], - "1f69a":[["\uD83D\uDE9A"],"\uE42F","\uDBB9\uDFF1",["truck"],29,37,15,0], - "1f69b":[["\uD83D\uDE9B"],"","",["articulated_lorry"],29,38,15,0], - "1f69c":[["\uD83D\uDE9C"],"","",["tractor"],29,39,15,0], - "1f69d":[["\uD83D\uDE9D"],"","",["monorail"],29,40,15,0], - "1f69e":[["\uD83D\uDE9E"],"","",["mountain_railway"],30,0,15,0], - "1f69f":[["\uD83D\uDE9F"],"","",["suspension_railway"],30,1,15,0], - "1f6a0":[["\uD83D\uDEA0"],"","",["mountain_cableway"],30,2,15,0], - "1f6a1":[["\uD83D\uDEA1"],"","",["aerial_tramway"],30,3,15,0], - "1f6a2":[["\uD83D\uDEA2"],"\uE202","\uDBB9\uDFE8",["ship"],30,4,15,0], - "1f6a3":[["\uD83D\uDEA3"],"","",["rowboat"],30,5,15,0], - "1f6a4":[["\uD83D\uDEA4"],"\uE135","\uDBB9\uDFEE",["speedboat"],30,11,15,0], - "1f6a5":[["\uD83D\uDEA5"],"\uE14E","\uDBB9\uDFF7",["traffic_light"],30,12,15,0], - "1f6a6":[["\uD83D\uDEA6"],"","",["vertical_traffic_light"],30,13,15,0], - "1f6a7":[["\uD83D\uDEA7"],"\uE137","\uDBB9\uDFF8",["construction"],30,14,15,0], - "1f6a8":[["\uD83D\uDEA8"],"\uE432","\uDBB9\uDFF9",["rotating_light"],30,15,15,0], - "1f6a9":[["\uD83D\uDEA9"],"","\uDBBA\uDF22",["triangular_flag_on_post"],30,16,15,0], - "1f6aa":[["\uD83D\uDEAA"],"","\uDBB9\uDCF3",["door"],30,17,15,0], - "1f6ab":[["\uD83D\uDEAB"],"","\uDBBA\uDF48",["no_entry_sign"],30,18,15,0], - "1f6ac":[["\uD83D\uDEAC"],"\uE30E","\uDBBA\uDF1E",["smoking"],30,19,15,0], - "1f6ad":[["\uD83D\uDEAD"],"\uE208","\uDBBA\uDF1F",["no_smoking"],30,20,15,0], - "1f6ae":[["\uD83D\uDEAE"],"","",["put_litter_in_its_place"],30,21,15,0], - "1f6af":[["\uD83D\uDEAF"],"","",["do_not_litter"],30,22,15,0], - "1f6b0":[["\uD83D\uDEB0"],"","",["potable_water"],30,23,15,0], - "1f6b1":[["\uD83D\uDEB1"],"","",["non-potable_water"],30,24,15,0], - "1f6b2":[["\uD83D\uDEB2"],"\uE136","\uDBB9\uDFEB",["bike"],30,25,15,0], - "1f6b3":[["\uD83D\uDEB3"],"","",["no_bicycles"],30,26,15,0], - "1f6b4":[["\uD83D\uDEB4"],"","",["bicyclist"],30,27,15,0], - "1f6b5":[["\uD83D\uDEB5"],"","",["mountain_bicyclist"],30,33,15,0], - "1f6b6":[["\uD83D\uDEB6"],"\uE201","\uDBB9\uDFF0",["walking"],30,39,15,0], - "1f6b7":[["\uD83D\uDEB7"],"","",["no_pedestrians"],31,4,15,0], - "1f6b8":[["\uD83D\uDEB8"],"","",["children_crossing"],31,5,15,0], - "1f6b9":[["\uD83D\uDEB9"],"\uE138","\uDBBA\uDF33",["mens"],31,6,15,0], - "1f6ba":[["\uD83D\uDEBA"],"\uE139","\uDBBA\uDF34",["womens"],31,7,15,0], - "1f6bb":[["\uD83D\uDEBB"],"\uE151","\uDBB9\uDD06",["restroom"],31,8,15,0], - "1f6bc":[["\uD83D\uDEBC"],"\uE13A","\uDBBA\uDF35",["baby_symbol"],31,9,15,0], - "1f6bd":[["\uD83D\uDEBD"],"\uE140","\uDBB9\uDD07",["toilet"],31,10,15,0], - "1f6be":[["\uD83D\uDEBE"],"\uE309","\uDBB9\uDD08",["wc"],31,11,15,0], - "1f6bf":[["\uD83D\uDEBF"],"","",["shower"],31,12,15,0], - "1f6c0":[["\uD83D\uDEC0"],"\uE13F","\uDBB9\uDD05",["bath"],31,13,15,0], - "1f6c1":[["\uD83D\uDEC1"],"","",["bathtub"],31,19,15,0], - "1f6c2":[["\uD83D\uDEC2"],"","",["passport_control"],31,20,15,0], - "1f6c3":[["\uD83D\uDEC3"],"","",["customs"],31,21,15,0], - "1f6c4":[["\uD83D\uDEC4"],"","",["baggage_claim"],31,22,15,0], - "1f6c5":[["\uD83D\uDEC5"],"","",["left_luggage"],31,23,15,0], - "1f6cb":[["\uD83D\uDECB"],"","",["couch_and_lamp"],31,24,15,0], - "1f6cc":[["\uD83D\uDECC"],"","",["sleeping_accommodation"],31,25,15,0], - "1f6cd":[["\uD83D\uDECD"],"","",["shopping_bags"],31,26,15,0], - "1f6ce":[["\uD83D\uDECE"],"","",["bellhop_bell"],31,27,15,0], - "1f6cf":[["\uD83D\uDECF"],"","",["bed"],31,28,15,0], - "1f6d0":[["\uD83D\uDED0"],"","",["place_of_worship"],31,29,7,0], - "1f6e0":[["\uD83D\uDEE0"],"","",["hammer_and_wrench"],31,30,15,0], - "1f6e1":[["\uD83D\uDEE1"],"","",["shield"],31,31,15,0], - "1f6e2":[["\uD83D\uDEE2"],"","",["oil_drum"],31,32,15,0], - "1f6e3":[["\uD83D\uDEE3"],"","",["motorway"],31,33,15,0], - "1f6e4":[["\uD83D\uDEE4"],"","",["railway_track"],31,34,15,0], - "1f6e5":[["\uD83D\uDEE5"],"","",["motor_boat"],31,35,15,0], - "1f6e9":[["\uD83D\uDEE9"],"","",["small_airplane"],31,36,15,0], - "1f6eb":[["\uD83D\uDEEB"],"","",["airplane_departure"],31,37,15,0], - "1f6ec":[["\uD83D\uDEEC"],"","",["airplane_arriving"],31,38,15,0], - "1f6f0":[["\uD83D\uDEF0"],"","",["satellite"],31,39,15,0], - "1f6f3":[["\uD83D\uDEF3"],"","",["passenger_ship"],31,40,15,0], - "1f910":[["\uD83E\uDD10"],"","",["zipper_mouth_face"],32,0,7,0], - "1f911":[["\uD83E\uDD11"],"","",["money_mouth_face"],32,1,7,0], - "1f912":[["\uD83E\uDD12"],"","",["face_with_thermometer"],32,2,7,0], - "1f913":[["\uD83E\uDD13"],"","",["nerd_face"],32,3,7,0], - "1f914":[["\uD83E\uDD14"],"","",["thinking_face"],32,4,7,0], - "1f915":[["\uD83E\uDD15"],"","",["face_with_head_bandage"],32,5,7,0], - "1f916":[["\uD83E\uDD16"],"","",["robot_face"],32,6,7,0], - "1f917":[["\uD83E\uDD17"],"","",["hugging_face"],32,7,7,0], - "1f918":[["\uD83E\uDD18"],"","",["the_horns","sign_of_the_horns"],32,8,7,0], - "1f980":[["\uD83E\uDD80"],"","",["crab"],32,14,7,0], - "1f981":[["\uD83E\uDD81"],"","",["lion_face"],32,15,7,0], - "1f982":[["\uD83E\uDD82"],"","",["scorpion"],32,16,7,0], - "1f983":[["\uD83E\uDD83"],"","",["turkey"],32,17,7,0], - "1f984":[["\uD83E\uDD84"],"","",["unicorn_face"],32,18,7,0], - "1f9c0":[["\uD83E\uDDC0"],"","",["cheese_wedge"],32,19,7,0], - "0023-20e3":[["\u0023\uFE0F\u20E3","\u0023\u20E3"],"\uE210","\uDBBA\uDC2C",["hash"],32,20,15,0], - "002a-20e3":[["\u002A\u20E3"],"","",["keycap_star"],32,21,7,0], - "0030-20e3":[["\u0030\uFE0F\u20E3","\u0030\u20E3"],"\uE225","\uDBBA\uDC37",["zero"],32,22,15,0], - "0031-20e3":[["\u0031\uFE0F\u20E3","\u0031\u20E3"],"\uE21C","\uDBBA\uDC2E",["one"],32,23,15,0], - "0032-20e3":[["\u0032\uFE0F\u20E3","\u0032\u20E3"],"\uE21D","\uDBBA\uDC2F",["two"],32,24,15,0], - "0033-20e3":[["\u0033\uFE0F\u20E3","\u0033\u20E3"],"\uE21E","\uDBBA\uDC30",["three"],32,25,15,0], - "0034-20e3":[["\u0034\uFE0F\u20E3","\u0034\u20E3"],"\uE21F","\uDBBA\uDC31",["four"],32,26,15,0], - "0035-20e3":[["\u0035\uFE0F\u20E3","\u0035\u20E3"],"\uE220","\uDBBA\uDC32",["five"],32,27,15,0], - "0036-20e3":[["\u0036\uFE0F\u20E3","\u0036\u20E3"],"\uE221","\uDBBA\uDC33",["six"],32,28,15,0], - "0037-20e3":[["\u0037\uFE0F\u20E3","\u0037\u20E3"],"\uE222","\uDBBA\uDC34",["seven"],32,29,15,0], - "0038-20e3":[["\u0038\uFE0F\u20E3","\u0038\u20E3"],"\uE223","\uDBBA\uDC35",["eight"],32,30,15,0], - "0039-20e3":[["\u0039\uFE0F\u20E3","\u0039\u20E3"],"\uE224","\uDBBA\uDC36",["nine"],32,31,15,0], - "1f1e6-1f1e8":[["\uD83C\uDDE6\uD83C\uDDE8"],"","",["flag-ac"],32,32,13,0], - "1f1e6-1f1e9":[["\uD83C\uDDE6\uD83C\uDDE9"],"","",["flag-ad"],32,33,15,0], - "1f1e6-1f1ea":[["\uD83C\uDDE6\uD83C\uDDEA"],"","",["flag-ae"],32,34,15,0], - "1f1e6-1f1eb":[["\uD83C\uDDE6\uD83C\uDDEB"],"","",["flag-af"],32,35,15,0], - "1f1e6-1f1ec":[["\uD83C\uDDE6\uD83C\uDDEC"],"","",["flag-ag"],32,36,15,0], - "1f1e6-1f1ee":[["\uD83C\uDDE6\uD83C\uDDEE"],"","",["flag-ai"],32,37,15,0], - "1f1e6-1f1f1":[["\uD83C\uDDE6\uD83C\uDDF1"],"","",["flag-al"],32,38,15,0], - "1f1e6-1f1f2":[["\uD83C\uDDE6\uD83C\uDDF2"],"","",["flag-am"],32,39,15,0], - "1f1e6-1f1f4":[["\uD83C\uDDE6\uD83C\uDDF4"],"","",["flag-ao"],32,40,15,0], - "1f1e6-1f1f6":[["\uD83C\uDDE6\uD83C\uDDF6"],"","",["flag-aq"],33,0,5,0], - "1f1e6-1f1f7":[["\uD83C\uDDE6\uD83C\uDDF7"],"","",["flag-ar"],33,1,15,0], - "1f1e6-1f1f8":[["\uD83C\uDDE6\uD83C\uDDF8"],"","",["flag-as"],33,2,7,0], - "1f1e6-1f1f9":[["\uD83C\uDDE6\uD83C\uDDF9"],"","",["flag-at"],33,3,15,0], - "1f1e6-1f1fa":[["\uD83C\uDDE6\uD83C\uDDFA"],"","",["flag-au"],33,4,15,0], - "1f1e6-1f1fc":[["\uD83C\uDDE6\uD83C\uDDFC"],"","",["flag-aw"],33,5,15,0], - "1f1e6-1f1fd":[["\uD83C\uDDE6\uD83C\uDDFD"],"","",["flag-ax"],33,6,7,0], - "1f1e6-1f1ff":[["\uD83C\uDDE6\uD83C\uDDFF"],"","",["flag-az"],33,7,15,0], - "1f1e7-1f1e6":[["\uD83C\uDDE7\uD83C\uDDE6"],"","",["flag-ba"],33,8,15,0], - "1f1e7-1f1e7":[["\uD83C\uDDE7\uD83C\uDDE7"],"","",["flag-bb"],33,9,15,0], - "1f1e7-1f1e9":[["\uD83C\uDDE7\uD83C\uDDE9"],"","",["flag-bd"],33,10,15,0], - "1f1e7-1f1ea":[["\uD83C\uDDE7\uD83C\uDDEA"],"","",["flag-be"],33,11,15,0], - "1f1e7-1f1eb":[["\uD83C\uDDE7\uD83C\uDDEB"],"","",["flag-bf"],33,12,15,0], - "1f1e7-1f1ec":[["\uD83C\uDDE7\uD83C\uDDEC"],"","",["flag-bg"],33,13,15,0], - "1f1e7-1f1ed":[["\uD83C\uDDE7\uD83C\uDDED"],"","",["flag-bh"],33,14,15,0], - "1f1e7-1f1ee":[["\uD83C\uDDE7\uD83C\uDDEE"],"","",["flag-bi"],33,15,15,0], - "1f1e7-1f1ef":[["\uD83C\uDDE7\uD83C\uDDEF"],"","",["flag-bj"],33,16,15,0], - "1f1e7-1f1f1":[["\uD83C\uDDE7\uD83C\uDDF1"],"","",["flag-bl"],33,17,5,0], - "1f1e7-1f1f2":[["\uD83C\uDDE7\uD83C\uDDF2"],"","",["flag-bm"],33,18,15,0], - "1f1e7-1f1f3":[["\uD83C\uDDE7\uD83C\uDDF3"],"","",["flag-bn"],33,19,15,0], - "1f1e7-1f1f4":[["\uD83C\uDDE7\uD83C\uDDF4"],"","",["flag-bo"],33,20,15,0], - "1f1e7-1f1f6":[["\uD83C\uDDE7\uD83C\uDDF6"],"","",["flag-bq"],33,21,5,0], - "1f1e7-1f1f7":[["\uD83C\uDDE7\uD83C\uDDF7"],"","",["flag-br"],33,22,15,0], - "1f1e7-1f1f8":[["\uD83C\uDDE7\uD83C\uDDF8"],"","",["flag-bs"],33,23,15,0], - "1f1e7-1f1f9":[["\uD83C\uDDE7\uD83C\uDDF9"],"","",["flag-bt"],33,24,15,0], - "1f1e7-1f1fb":[["\uD83C\uDDE7\uD83C\uDDFB"],"","",["flag-bv"],33,25,5,0], - "1f1e7-1f1fc":[["\uD83C\uDDE7\uD83C\uDDFC"],"","",["flag-bw"],33,26,15,0], - "1f1e7-1f1fe":[["\uD83C\uDDE7\uD83C\uDDFE"],"","",["flag-by"],33,27,15,0], - "1f1e7-1f1ff":[["\uD83C\uDDE7\uD83C\uDDFF"],"","",["flag-bz"],33,28,15,0], - "1f1e8-1f1e6":[["\uD83C\uDDE8\uD83C\uDDE6"],"","",["flag-ca"],33,29,15,0], - "1f1e8-1f1e8":[["\uD83C\uDDE8\uD83C\uDDE8"],"","",["flag-cc"],33,30,7,0], - "1f1e8-1f1e9":[["\uD83C\uDDE8\uD83C\uDDE9"],"","",["flag-cd"],33,31,15,0], - "1f1e8-1f1eb":[["\uD83C\uDDE8\uD83C\uDDEB"],"","",["flag-cf"],33,32,15,0], - "1f1e8-1f1ec":[["\uD83C\uDDE8\uD83C\uDDEC"],"","",["flag-cg"],33,33,15,0], - "1f1e8-1f1ed":[["\uD83C\uDDE8\uD83C\uDDED"],"","",["flag-ch"],33,34,15,0], - "1f1e8-1f1ee":[["\uD83C\uDDE8\uD83C\uDDEE"],"","",["flag-ci"],33,35,15,0], - "1f1e8-1f1f0":[["\uD83C\uDDE8\uD83C\uDDF0"],"","",["flag-ck"],33,36,7,0], - "1f1e8-1f1f1":[["\uD83C\uDDE8\uD83C\uDDF1"],"","",["flag-cl"],33,37,15,0], - "1f1e8-1f1f2":[["\uD83C\uDDE8\uD83C\uDDF2"],"","",["flag-cm"],33,38,15,0], - "1f1e8-1f1f3":[["\uD83C\uDDE8\uD83C\uDDF3"],"\uE513","\uDBB9\uDCED",["flag-cn","cn"],33,39,15,0], - "1f1e8-1f1f4":[["\uD83C\uDDE8\uD83C\uDDF4"],"","",["flag-co"],33,40,15,0], - "1f1e8-1f1f5":[["\uD83C\uDDE8\uD83C\uDDF5"],"","",["flag-cp"],34,0,5,0], - "1f1e8-1f1f7":[["\uD83C\uDDE8\uD83C\uDDF7"],"","",["flag-cr"],34,1,15,0], - "1f1e8-1f1fa":[["\uD83C\uDDE8\uD83C\uDDFA"],"","",["flag-cu"],34,2,15,0], - "1f1e8-1f1fb":[["\uD83C\uDDE8\uD83C\uDDFB"],"","",["flag-cv"],34,3,15,0], - "1f1e8-1f1fc":[["\uD83C\uDDE8\uD83C\uDDFC"],"","",["flag-cw"],34,4,7,0], - "1f1e8-1f1fd":[["\uD83C\uDDE8\uD83C\uDDFD"],"","",["flag-cx"],34,5,7,0], - "1f1e8-1f1fe":[["\uD83C\uDDE8\uD83C\uDDFE"],"","",["flag-cy"],34,6,15,0], - "1f1e8-1f1ff":[["\uD83C\uDDE8\uD83C\uDDFF"],"","",["flag-cz"],34,7,15,0], - "1f1e9-1f1ea":[["\uD83C\uDDE9\uD83C\uDDEA"],"\uE50E","\uDBB9\uDCE8",["flag-de","de"],34,8,15,0], - "1f1e9-1f1ec":[["\uD83C\uDDE9\uD83C\uDDEC"],"","",["flag-dg"],34,9,5,0], - "1f1e9-1f1ef":[["\uD83C\uDDE9\uD83C\uDDEF"],"","",["flag-dj"],34,10,15,0], - "1f1e9-1f1f0":[["\uD83C\uDDE9\uD83C\uDDF0"],"","",["flag-dk"],34,11,15,0], - "1f1e9-1f1f2":[["\uD83C\uDDE9\uD83C\uDDF2"],"","",["flag-dm"],34,12,15,0], - "1f1e9-1f1f4":[["\uD83C\uDDE9\uD83C\uDDF4"],"","",["flag-do"],34,13,15,0], - "1f1e9-1f1ff":[["\uD83C\uDDE9\uD83C\uDDFF"],"","",["flag-dz"],34,14,15,0], - "1f1ea-1f1e6":[["\uD83C\uDDEA\uD83C\uDDE6"],"","",["flag-ea"],34,15,5,0], - "1f1ea-1f1e8":[["\uD83C\uDDEA\uD83C\uDDE8"],"","",["flag-ec"],34,16,15,0], - "1f1ea-1f1ea":[["\uD83C\uDDEA\uD83C\uDDEA"],"","",["flag-ee"],34,17,15,0], - "1f1ea-1f1ec":[["\uD83C\uDDEA\uD83C\uDDEC"],"","",["flag-eg"],34,18,15,0], - "1f1ea-1f1ed":[["\uD83C\uDDEA\uD83C\uDDED"],"","",["flag-eh"],34,19,13,0], - "1f1ea-1f1f7":[["\uD83C\uDDEA\uD83C\uDDF7"],"","",["flag-er"],34,20,15,0], - "1f1ea-1f1f8":[["\uD83C\uDDEA\uD83C\uDDF8"],"\uE511","\uDBB9\uDCEB",["flag-es","es"],34,21,15,0], - "1f1ea-1f1f9":[["\uD83C\uDDEA\uD83C\uDDF9"],"","",["flag-et"],34,22,15,0], - "1f1ea-1f1fa":[["\uD83C\uDDEA\uD83C\uDDFA"],"","",["flag-eu"],34,23,7,0], - "1f1eb-1f1ee":[["\uD83C\uDDEB\uD83C\uDDEE"],"","",["flag-fi"],34,24,15,0], - "1f1eb-1f1ef":[["\uD83C\uDDEB\uD83C\uDDEF"],"","",["flag-fj"],34,25,15,0], - "1f1eb-1f1f0":[["\uD83C\uDDEB\uD83C\uDDF0"],"","",["flag-fk"],34,26,13,0], - "1f1eb-1f1f2":[["\uD83C\uDDEB\uD83C\uDDF2"],"","",["flag-fm"],34,27,15,0], - "1f1eb-1f1f4":[["\uD83C\uDDEB\uD83C\uDDF4"],"","",["flag-fo"],34,28,15,0], - "1f1eb-1f1f7":[["\uD83C\uDDEB\uD83C\uDDF7"],"\uE50D","\uDBB9\uDCE7",["flag-fr","fr"],34,29,15,0], - "1f1ec-1f1e6":[["\uD83C\uDDEC\uD83C\uDDE6"],"","",["flag-ga"],34,30,15,0], - "1f1ec-1f1e7":[["\uD83C\uDDEC\uD83C\uDDE7"],"\uE510","\uDBB9\uDCEA",["flag-gb","gb","uk"],34,31,15,0], - "1f1ec-1f1e9":[["\uD83C\uDDEC\uD83C\uDDE9"],"","",["flag-gd"],34,32,15,0], - "1f1ec-1f1ea":[["\uD83C\uDDEC\uD83C\uDDEA"],"","",["flag-ge"],34,33,15,0], - "1f1ec-1f1eb":[["\uD83C\uDDEC\uD83C\uDDEB"],"","",["flag-gf"],34,34,5,0], - "1f1ec-1f1ec":[["\uD83C\uDDEC\uD83C\uDDEC"],"","",["flag-gg"],34,35,7,0], - "1f1ec-1f1ed":[["\uD83C\uDDEC\uD83C\uDDED"],"","",["flag-gh"],34,36,15,0], - "1f1ec-1f1ee":[["\uD83C\uDDEC\uD83C\uDDEE"],"","",["flag-gi"],34,37,15,0], - "1f1ec-1f1f1":[["\uD83C\uDDEC\uD83C\uDDF1"],"","",["flag-gl"],34,38,15,0], - "1f1ec-1f1f2":[["\uD83C\uDDEC\uD83C\uDDF2"],"","",["flag-gm"],34,39,15,0], - "1f1ec-1f1f3":[["\uD83C\uDDEC\uD83C\uDDF3"],"","",["flag-gn"],34,40,15,0], - "1f1ec-1f1f5":[["\uD83C\uDDEC\uD83C\uDDF5"],"","",["flag-gp"],35,0,5,0], - "1f1ec-1f1f6":[["\uD83C\uDDEC\uD83C\uDDF6"],"","",["flag-gq"],35,1,15,0], - "1f1ec-1f1f7":[["\uD83C\uDDEC\uD83C\uDDF7"],"","",["flag-gr"],35,2,15,0], - "1f1ec-1f1f8":[["\uD83C\uDDEC\uD83C\uDDF8"],"","",["flag-gs"],35,3,5,0], - "1f1ec-1f1f9":[["\uD83C\uDDEC\uD83C\uDDF9"],"","",["flag-gt"],35,4,15,0], - "1f1ec-1f1fa":[["\uD83C\uDDEC\uD83C\uDDFA"],"","",["flag-gu"],35,5,15,0], - "1f1ec-1f1fc":[["\uD83C\uDDEC\uD83C\uDDFC"],"","",["flag-gw"],35,6,15,0], - "1f1ec-1f1fe":[["\uD83C\uDDEC\uD83C\uDDFE"],"","",["flag-gy"],35,7,15,0], - "1f1ed-1f1f0":[["\uD83C\uDDED\uD83C\uDDF0"],"","",["flag-hk"],35,8,15,0], - "1f1ed-1f1f2":[["\uD83C\uDDED\uD83C\uDDF2"],"","",["flag-hm"],35,9,5,0], - "1f1ed-1f1f3":[["\uD83C\uDDED\uD83C\uDDF3"],"","",["flag-hn"],35,10,15,0], - "1f1ed-1f1f7":[["\uD83C\uDDED\uD83C\uDDF7"],"","",["flag-hr"],35,11,15,0], - "1f1ed-1f1f9":[["\uD83C\uDDED\uD83C\uDDF9"],"","",["flag-ht"],35,12,15,0], - "1f1ed-1f1fa":[["\uD83C\uDDED\uD83C\uDDFA"],"","",["flag-hu"],35,13,15,0], - "1f1ee-1f1e8":[["\uD83C\uDDEE\uD83C\uDDE8"],"","",["flag-ic"],35,14,5,0], - "1f1ee-1f1e9":[["\uD83C\uDDEE\uD83C\uDDE9"],"","",["flag-id"],35,15,15,0], - "1f1ee-1f1ea":[["\uD83C\uDDEE\uD83C\uDDEA"],"","",["flag-ie"],35,16,15,0], - "1f1ee-1f1f1":[["\uD83C\uDDEE\uD83C\uDDF1"],"","",["flag-il"],35,17,15,0], - "1f1ee-1f1f2":[["\uD83C\uDDEE\uD83C\uDDF2"],"","",["flag-im"],35,18,7,0], - "1f1ee-1f1f3":[["\uD83C\uDDEE\uD83C\uDDF3"],"","",["flag-in"],35,19,15,0], - "1f1ee-1f1f4":[["\uD83C\uDDEE\uD83C\uDDF4"],"","",["flag-io"],35,20,7,0], - "1f1ee-1f1f6":[["\uD83C\uDDEE\uD83C\uDDF6"],"","",["flag-iq"],35,21,15,0], - "1f1ee-1f1f7":[["\uD83C\uDDEE\uD83C\uDDF7"],"","",["flag-ir"],35,22,15,0], - "1f1ee-1f1f8":[["\uD83C\uDDEE\uD83C\uDDF8"],"","",["flag-is"],35,23,15,0], - "1f1ee-1f1f9":[["\uD83C\uDDEE\uD83C\uDDF9"],"\uE50F","\uDBB9\uDCE9",["flag-it","it"],35,24,15,0], - "1f1ef-1f1ea":[["\uD83C\uDDEF\uD83C\uDDEA"],"","",["flag-je"],35,25,15,0], - "1f1ef-1f1f2":[["\uD83C\uDDEF\uD83C\uDDF2"],"","",["flag-jm"],35,26,15,0], - "1f1ef-1f1f4":[["\uD83C\uDDEF\uD83C\uDDF4"],"","",["flag-jo"],35,27,15,0], - "1f1ef-1f1f5":[["\uD83C\uDDEF\uD83C\uDDF5"],"\uE50B","\uDBB9\uDCE5",["flag-jp","jp"],35,28,15,0], - "1f1f0-1f1ea":[["\uD83C\uDDF0\uD83C\uDDEA"],"","",["flag-ke"],35,29,15,0], - "1f1f0-1f1ec":[["\uD83C\uDDF0\uD83C\uDDEC"],"","",["flag-kg"],35,30,15,0], - "1f1f0-1f1ed":[["\uD83C\uDDF0\uD83C\uDDED"],"","",["flag-kh"],35,31,15,0], - "1f1f0-1f1ee":[["\uD83C\uDDF0\uD83C\uDDEE"],"","",["flag-ki"],35,32,15,0], - "1f1f0-1f1f2":[["\uD83C\uDDF0\uD83C\uDDF2"],"","",["flag-km"],35,33,15,0], - "1f1f0-1f1f3":[["\uD83C\uDDF0\uD83C\uDDF3"],"","",["flag-kn"],35,34,15,0], - "1f1f0-1f1f5":[["\uD83C\uDDF0\uD83C\uDDF5"],"","",["flag-kp"],35,35,15,0], - "1f1f0-1f1f7":[["\uD83C\uDDF0\uD83C\uDDF7"],"\uE514","\uDBB9\uDCEE",["flag-kr","kr"],35,36,15,0], - "1f1f0-1f1fc":[["\uD83C\uDDF0\uD83C\uDDFC"],"","",["flag-kw"],35,37,15,0], - "1f1f0-1f1fe":[["\uD83C\uDDF0\uD83C\uDDFE"],"","",["flag-ky"],35,38,15,0], - "1f1f0-1f1ff":[["\uD83C\uDDF0\uD83C\uDDFF"],"","",["flag-kz"],35,39,15,0], - "1f1f1-1f1e6":[["\uD83C\uDDF1\uD83C\uDDE6"],"","",["flag-la"],35,40,15,0], - "1f1f1-1f1e7":[["\uD83C\uDDF1\uD83C\uDDE7"],"","",["flag-lb"],36,0,15,0], - "1f1f1-1f1e8":[["\uD83C\uDDF1\uD83C\uDDE8"],"","",["flag-lc"],36,1,15,0], - "1f1f1-1f1ee":[["\uD83C\uDDF1\uD83C\uDDEE"],"","",["flag-li"],36,2,15,0], - "1f1f1-1f1f0":[["\uD83C\uDDF1\uD83C\uDDF0"],"","",["flag-lk"],36,3,15,0], - "1f1f1-1f1f7":[["\uD83C\uDDF1\uD83C\uDDF7"],"","",["flag-lr"],36,4,15,0], - "1f1f1-1f1f8":[["\uD83C\uDDF1\uD83C\uDDF8"],"","",["flag-ls"],36,5,15,0], - "1f1f1-1f1f9":[["\uD83C\uDDF1\uD83C\uDDF9"],"","",["flag-lt"],36,6,15,0], - "1f1f1-1f1fa":[["\uD83C\uDDF1\uD83C\uDDFA"],"","",["flag-lu"],36,7,15,0], - "1f1f1-1f1fb":[["\uD83C\uDDF1\uD83C\uDDFB"],"","",["flag-lv"],36,8,15,0], - "1f1f1-1f1fe":[["\uD83C\uDDF1\uD83C\uDDFE"],"","",["flag-ly"],36,9,15,0], - "1f1f2-1f1e6":[["\uD83C\uDDF2\uD83C\uDDE6"],"","",["flag-ma"],36,10,15,0], - "1f1f2-1f1e8":[["\uD83C\uDDF2\uD83C\uDDE8"],"","",["flag-mc"],36,11,15,0], - "1f1f2-1f1e9":[["\uD83C\uDDF2\uD83C\uDDE9"],"","",["flag-md"],36,12,15,0], - "1f1f2-1f1ea":[["\uD83C\uDDF2\uD83C\uDDEA"],"","",["flag-me"],36,13,15,0], - "1f1f2-1f1eb":[["\uD83C\uDDF2\uD83C\uDDEB"],"","",["flag-mf"],36,14,5,0], - "1f1f2-1f1ec":[["\uD83C\uDDF2\uD83C\uDDEC"],"","",["flag-mg"],36,15,15,0], - "1f1f2-1f1ed":[["\uD83C\uDDF2\uD83C\uDDED"],"","",["flag-mh"],36,16,15,0], - "1f1f2-1f1f0":[["\uD83C\uDDF2\uD83C\uDDF0"],"","",["flag-mk"],36,17,15,0], - "1f1f2-1f1f1":[["\uD83C\uDDF2\uD83C\uDDF1"],"","",["flag-ml"],36,18,15,0], - "1f1f2-1f1f2":[["\uD83C\uDDF2\uD83C\uDDF2"],"","",["flag-mm"],36,19,15,0], - "1f1f2-1f1f3":[["\uD83C\uDDF2\uD83C\uDDF3"],"","",["flag-mn"],36,20,15,0], - "1f1f2-1f1f4":[["\uD83C\uDDF2\uD83C\uDDF4"],"","",["flag-mo"],36,21,15,0], - "1f1f2-1f1f5":[["\uD83C\uDDF2\uD83C\uDDF5"],"","",["flag-mp"],36,22,7,0], - "1f1f2-1f1f6":[["\uD83C\uDDF2\uD83C\uDDF6"],"","",["flag-mq"],36,23,5,0], - "1f1f2-1f1f7":[["\uD83C\uDDF2\uD83C\uDDF7"],"","",["flag-mr"],36,24,15,0], - "1f1f2-1f1f8":[["\uD83C\uDDF2\uD83C\uDDF8"],"","",["flag-ms"],36,25,15,0], - "1f1f2-1f1f9":[["\uD83C\uDDF2\uD83C\uDDF9"],"","",["flag-mt"],36,26,15,0], - "1f1f2-1f1fa":[["\uD83C\uDDF2\uD83C\uDDFA"],"","",["flag-mu"],36,27,15,0], - "1f1f2-1f1fb":[["\uD83C\uDDF2\uD83C\uDDFB"],"","",["flag-mv"],36,28,15,0], - "1f1f2-1f1fc":[["\uD83C\uDDF2\uD83C\uDDFC"],"","",["flag-mw"],36,29,15,0], - "1f1f2-1f1fd":[["\uD83C\uDDF2\uD83C\uDDFD"],"","",["flag-mx"],36,30,15,0], - "1f1f2-1f1fe":[["\uD83C\uDDF2\uD83C\uDDFE"],"","",["flag-my"],36,31,15,0], - "1f1f2-1f1ff":[["\uD83C\uDDF2\uD83C\uDDFF"],"","",["flag-mz"],36,32,15,0], - "1f1f3-1f1e6":[["\uD83C\uDDF3\uD83C\uDDE6"],"","",["flag-na"],36,33,15,0], - "1f1f3-1f1e8":[["\uD83C\uDDF3\uD83C\uDDE8"],"","",["flag-nc"],36,34,13,0], - "1f1f3-1f1ea":[["\uD83C\uDDF3\uD83C\uDDEA"],"","",["flag-ne"],36,35,15,0], - "1f1f3-1f1eb":[["\uD83C\uDDF3\uD83C\uDDEB"],"","",["flag-nf"],36,36,7,0], - "1f1f3-1f1ec":[["\uD83C\uDDF3\uD83C\uDDEC"],"","",["flag-ng"],36,37,15,0], - "1f1f3-1f1ee":[["\uD83C\uDDF3\uD83C\uDDEE"],"","",["flag-ni"],36,38,15,0], - "1f1f3-1f1f1":[["\uD83C\uDDF3\uD83C\uDDF1"],"","",["flag-nl"],36,39,15,0], - "1f1f3-1f1f4":[["\uD83C\uDDF3\uD83C\uDDF4"],"","",["flag-no"],36,40,15,0], - "1f1f3-1f1f5":[["\uD83C\uDDF3\uD83C\uDDF5"],"","",["flag-np"],37,0,15,0], - "1f1f3-1f1f7":[["\uD83C\uDDF3\uD83C\uDDF7"],"","",["flag-nr"],37,1,15,0], - "1f1f3-1f1fa":[["\uD83C\uDDF3\uD83C\uDDFA"],"","",["flag-nu"],37,2,15,0], - "1f1f3-1f1ff":[["\uD83C\uDDF3\uD83C\uDDFF"],"","",["flag-nz"],37,3,15,0], - "1f1f4-1f1f2":[["\uD83C\uDDF4\uD83C\uDDF2"],"","",["flag-om"],37,4,15,0], - "1f1f5-1f1e6":[["\uD83C\uDDF5\uD83C\uDDE6"],"","",["flag-pa"],37,5,15,0], - "1f1f5-1f1ea":[["\uD83C\uDDF5\uD83C\uDDEA"],"","",["flag-pe"],37,6,15,0], - "1f1f5-1f1eb":[["\uD83C\uDDF5\uD83C\uDDEB"],"","",["flag-pf"],37,7,15,0], - "1f1f5-1f1ec":[["\uD83C\uDDF5\uD83C\uDDEC"],"","",["flag-pg"],37,8,15,0], - "1f1f5-1f1ed":[["\uD83C\uDDF5\uD83C\uDDED"],"","",["flag-ph"],37,9,15,0], - "1f1f5-1f1f0":[["\uD83C\uDDF5\uD83C\uDDF0"],"","",["flag-pk"],37,10,15,0], - "1f1f5-1f1f1":[["\uD83C\uDDF5\uD83C\uDDF1"],"","",["flag-pl"],37,11,15,0], - "1f1f5-1f1f2":[["\uD83C\uDDF5\uD83C\uDDF2"],"","",["flag-pm"],37,12,5,0], - "1f1f5-1f1f3":[["\uD83C\uDDF5\uD83C\uDDF3"],"","",["flag-pn"],37,13,7,0], - "1f1f5-1f1f7":[["\uD83C\uDDF5\uD83C\uDDF7"],"","",["flag-pr"],37,14,15,0], - "1f1f5-1f1f8":[["\uD83C\uDDF5\uD83C\uDDF8"],"","",["flag-ps"],37,15,15,0], - "1f1f5-1f1f9":[["\uD83C\uDDF5\uD83C\uDDF9"],"","",["flag-pt"],37,16,15,0], - "1f1f5-1f1fc":[["\uD83C\uDDF5\uD83C\uDDFC"],"","",["flag-pw"],37,17,15,0], - "1f1f5-1f1fe":[["\uD83C\uDDF5\uD83C\uDDFE"],"","",["flag-py"],37,18,15,0], - "1f1f6-1f1e6":[["\uD83C\uDDF6\uD83C\uDDE6"],"","",["flag-qa"],37,19,15,0], - "1f1f7-1f1ea":[["\uD83C\uDDF7\uD83C\uDDEA"],"","",["flag-re"],37,20,5,0], - "1f1f7-1f1f4":[["\uD83C\uDDF7\uD83C\uDDF4"],"","",["flag-ro"],37,21,15,0], - "1f1f7-1f1f8":[["\uD83C\uDDF7\uD83C\uDDF8"],"","",["flag-rs"],37,22,15,0], - "1f1f7-1f1fa":[["\uD83C\uDDF7\uD83C\uDDFA"],"\uE512","\uDBB9\uDCEC",["flag-ru","ru"],37,23,15,0], - "1f1f7-1f1fc":[["\uD83C\uDDF7\uD83C\uDDFC"],"","",["flag-rw"],37,24,15,0], - "1f1f8-1f1e6":[["\uD83C\uDDF8\uD83C\uDDE6"],"","",["flag-sa"],37,25,15,0], - "1f1f8-1f1e7":[["\uD83C\uDDF8\uD83C\uDDE7"],"","",["flag-sb"],37,26,15,0], - "1f1f8-1f1e8":[["\uD83C\uDDF8\uD83C\uDDE8"],"","",["flag-sc"],37,27,15,0], - "1f1f8-1f1e9":[["\uD83C\uDDF8\uD83C\uDDE9"],"","",["flag-sd"],37,28,15,0], - "1f1f8-1f1ea":[["\uD83C\uDDF8\uD83C\uDDEA"],"","",["flag-se"],37,29,15,0], - "1f1f8-1f1ec":[["\uD83C\uDDF8\uD83C\uDDEC"],"","",["flag-sg"],37,30,15,0], - "1f1f8-1f1ed":[["\uD83C\uDDF8\uD83C\uDDED"],"","",["flag-sh"],37,31,13,0], - "1f1f8-1f1ee":[["\uD83C\uDDF8\uD83C\uDDEE"],"","",["flag-si"],37,32,15,0], - "1f1f8-1f1ef":[["\uD83C\uDDF8\uD83C\uDDEF"],"","",["flag-sj"],37,33,5,0], - "1f1f8-1f1f0":[["\uD83C\uDDF8\uD83C\uDDF0"],"","",["flag-sk"],37,34,15,0], - "1f1f8-1f1f1":[["\uD83C\uDDF8\uD83C\uDDF1"],"","",["flag-sl"],37,35,15,0], - "1f1f8-1f1f2":[["\uD83C\uDDF8\uD83C\uDDF2"],"","",["flag-sm"],37,36,15,0], - "1f1f8-1f1f3":[["\uD83C\uDDF8\uD83C\uDDF3"],"","",["flag-sn"],37,37,15,0], - "1f1f8-1f1f4":[["\uD83C\uDDF8\uD83C\uDDF4"],"","",["flag-so"],37,38,15,0], - "1f1f8-1f1f7":[["\uD83C\uDDF8\uD83C\uDDF7"],"","",["flag-sr"],37,39,15,0], - "1f1f8-1f1f8":[["\uD83C\uDDF8\uD83C\uDDF8"],"","",["flag-ss"],37,40,7,0], - "1f1f8-1f1f9":[["\uD83C\uDDF8\uD83C\uDDF9"],"","",["flag-st"],38,0,15,0], - "1f1f8-1f1fb":[["\uD83C\uDDF8\uD83C\uDDFB"],"","",["flag-sv"],38,1,15,0], - "1f1f8-1f1fd":[["\uD83C\uDDF8\uD83C\uDDFD"],"","",["flag-sx"],38,2,7,0], - "1f1f8-1f1fe":[["\uD83C\uDDF8\uD83C\uDDFE"],"","",["flag-sy"],38,3,15,0], - "1f1f8-1f1ff":[["\uD83C\uDDF8\uD83C\uDDFF"],"","",["flag-sz"],38,4,15,0], - "1f1f9-1f1e6":[["\uD83C\uDDF9\uD83C\uDDE6"],"","",["flag-ta"],38,5,5,0], - "1f1f9-1f1e8":[["\uD83C\uDDF9\uD83C\uDDE8"],"","",["flag-tc"],38,6,7,0], - "1f1f9-1f1e9":[["\uD83C\uDDF9\uD83C\uDDE9"],"","",["flag-td"],38,7,15,0], - "1f1f9-1f1eb":[["\uD83C\uDDF9\uD83C\uDDEB"],"","",["flag-tf"],38,8,5,0], - "1f1f9-1f1ec":[["\uD83C\uDDF9\uD83C\uDDEC"],"","",["flag-tg"],38,9,15,0], - "1f1f9-1f1ed":[["\uD83C\uDDF9\uD83C\uDDED"],"","",["flag-th"],38,10,15,0], - "1f1f9-1f1ef":[["\uD83C\uDDF9\uD83C\uDDEF"],"","",["flag-tj"],38,11,15,0], - "1f1f9-1f1f0":[["\uD83C\uDDF9\uD83C\uDDF0"],"","",["flag-tk"],38,12,7,0], - "1f1f9-1f1f1":[["\uD83C\uDDF9\uD83C\uDDF1"],"","",["flag-tl"],38,13,15,0], - "1f1f9-1f1f2":[["\uD83C\uDDF9\uD83C\uDDF2"],"","",["flag-tm"],38,14,15,0], - "1f1f9-1f1f3":[["\uD83C\uDDF9\uD83C\uDDF3"],"","",["flag-tn"],38,15,15,0], - "1f1f9-1f1f4":[["\uD83C\uDDF9\uD83C\uDDF4"],"","",["flag-to"],38,16,15,0], - "1f1f9-1f1f7":[["\uD83C\uDDF9\uD83C\uDDF7"],"","",["flag-tr"],38,17,15,0], - "1f1f9-1f1f9":[["\uD83C\uDDF9\uD83C\uDDF9"],"","",["flag-tt"],38,18,15,0], - "1f1f9-1f1fb":[["\uD83C\uDDF9\uD83C\uDDFB"],"","",["flag-tv"],38,19,15,0], - "1f1f9-1f1fc":[["\uD83C\uDDF9\uD83C\uDDFC"],"","",["flag-tw"],38,20,15,0], - "1f1f9-1f1ff":[["\uD83C\uDDF9\uD83C\uDDFF"],"","",["flag-tz"],38,21,15,0], - "1f1fa-1f1e6":[["\uD83C\uDDFA\uD83C\uDDE6"],"","",["flag-ua"],38,22,15,0], - "1f1fa-1f1ec":[["\uD83C\uDDFA\uD83C\uDDEC"],"","",["flag-ug"],38,23,15,0], - "1f1fa-1f1f2":[["\uD83C\uDDFA\uD83C\uDDF2"],"","",["flag-um"],38,24,5,0], - "1f1fa-1f1f8":[["\uD83C\uDDFA\uD83C\uDDF8"],"\uE50C","\uDBB9\uDCE6",["flag-us","us"],38,25,15,0], - "1f1fa-1f1fe":[["\uD83C\uDDFA\uD83C\uDDFE"],"","",["flag-uy"],38,26,15,0], - "1f1fa-1f1ff":[["\uD83C\uDDFA\uD83C\uDDFF"],"","",["flag-uz"],38,27,15,0], - "1f1fb-1f1e6":[["\uD83C\uDDFB\uD83C\uDDE6"],"","",["flag-va"],38,28,15,0], - "1f1fb-1f1e8":[["\uD83C\uDDFB\uD83C\uDDE8"],"","",["flag-vc"],38,29,15,0], - "1f1fb-1f1ea":[["\uD83C\uDDFB\uD83C\uDDEA"],"","",["flag-ve"],38,30,15,0], - "1f1fb-1f1ec":[["\uD83C\uDDFB\uD83C\uDDEC"],"","",["flag-vg"],38,31,7,0], - "1f1fb-1f1ee":[["\uD83C\uDDFB\uD83C\uDDEE"],"","",["flag-vi"],38,32,15,0], - "1f1fb-1f1f3":[["\uD83C\uDDFB\uD83C\uDDF3"],"","",["flag-vn"],38,33,15,0], - "1f1fb-1f1fa":[["\uD83C\uDDFB\uD83C\uDDFA"],"","",["flag-vu"],38,34,15,0], - "1f1fc-1f1eb":[["\uD83C\uDDFC\uD83C\uDDEB"],"","",["flag-wf"],38,35,13,0], - "1f1fc-1f1f8":[["\uD83C\uDDFC\uD83C\uDDF8"],"","",["flag-ws"],38,36,15,0], - "1f1fd-1f1f0":[["\uD83C\uDDFD\uD83C\uDDF0"],"","",["flag-xk"],38,37,13,0], - "1f1fe-1f1ea":[["\uD83C\uDDFE\uD83C\uDDEA"],"","",["flag-ye"],38,38,15,0], - "1f1fe-1f1f9":[["\uD83C\uDDFE\uD83C\uDDF9"],"","",["flag-yt"],38,39,5,0], - "1f1ff-1f1e6":[["\uD83C\uDDFF\uD83C\uDDE6"],"","",["flag-za"],38,40,15,0], - "1f1ff-1f1f2":[["\uD83C\uDDFF\uD83C\uDDF2"],"","",["flag-zm"],39,0,15,0], - "1f1ff-1f1fc":[["\uD83C\uDDFF\uD83C\uDDFC"],"","",["flag-zw"],39,1,15,0], - "1f468-200d-1f468-200d-1f466":[["\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC66"],"","",["man-man-boy"],39,2,15,0], - "1f468-200d-1f468-200d-1f466-200d-1f466":[["\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC66\u200D\uD83D\uDC66"],"","",["man-man-boy-boy"],39,3,15,0], - "1f468-200d-1f468-200d-1f467":[["\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67"],"","",["man-man-girl"],39,4,15,0], - "1f468-200d-1f468-200d-1f467-200d-1f466":[["\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC66"],"","",["man-man-girl-boy"],39,5,15,0], - "1f468-200d-1f468-200d-1f467-200d-1f467":[["\uD83D\uDC68\u200D\uD83D\uDC68\u200D\uD83D\uDC67\u200D\uD83D\uDC67"],"","",["man-man-girl-girl"],39,6,15,0], - "1f468-200d-1f469-200d-1f466-200d-1f466":[["\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66"],"","",["man-woman-boy-boy"],39,7,15,0], - "1f468-200d-1f469-200d-1f467":[["\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67"],"","",["man-woman-girl"],39,8,15,0], - "1f468-200d-1f469-200d-1f467-200d-1f466":[["\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66"],"","",["man-woman-girl-boy"],39,9,15,0], - "1f468-200d-1f469-200d-1f467-200d-1f467":[["\uD83D\uDC68\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67"],"","",["man-woman-girl-girl"],39,10,15,0], - "1f468-200d-2764-fe0f-200d-1f468":[["\uD83D\uDC68\u200D\u2764\uFE0F\u200D\uD83D\uDC68"],"","",["man-heart-man"],39,11,7,0], - "1f468-200d-2764-fe0f-200d-1f48b-200d-1f468":[["\uD83D\uDC68\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC68"],"","",["man-kiss-man"],39,12,7,0], - "1f469-200d-1f469-200d-1f466":[["\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66"],"","",["woman-woman-boy"],39,13,15,0], - "1f469-200d-1f469-200d-1f466-200d-1f466":[["\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66"],"","",["woman-woman-boy-boy"],39,14,15,0], - "1f469-200d-1f469-200d-1f467":[["\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67"],"","",["woman-woman-girl"],39,15,15,0], - "1f469-200d-1f469-200d-1f467-200d-1f466":[["\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC66"],"","",["woman-woman-girl-boy"],39,16,15,0], - "1f469-200d-1f469-200d-1f467-200d-1f467":[["\uD83D\uDC69\u200D\uD83D\uDC69\u200D\uD83D\uDC67\u200D\uD83D\uDC67"],"","",["woman-woman-girl-girl"],39,17,15,0], - "1f469-200d-2764-fe0f-200d-1f469":[["\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC69"],"","",["woman-heart-woman"],39,18,7,0], - "1f469-200d-2764-fe0f-200d-1f48b-200d-1f469":[["\uD83D\uDC69\u200D\u2764\uFE0F\u200D\uD83D\uDC8B\u200D\uD83D\uDC69"],"","",["woman-kiss-woman"],39,19,7,0] - }; \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emojiparse.js b/fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emojiparse.js deleted file mode 100644 index d71a5b1b1..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-emoji/lib/emojiparse.js +++ /dev/null @@ -1,27 +0,0 @@ -// parse emojifile.js and output emoji.json -var fs = require('fs'), - path = require('path'), - emoji = require('./emojifile').data; - -// parse -var parsed_emoji = {}; - -for (var key in emoji) { - if (emoji.hasOwnProperty(key)) { - var names = emoji[key][3]; - names = names.constructor === Array ? names : [names]; - var emoji_char = emoji[key][0][0]; - for (var name of names) { - parsed_emoji[name] = emoji_char; - } - } -} - -// write to emoji.json -fs.writeFile(path.join(__dirname, 'emoji.json'), JSON.stringify(parsed_emoji), function(err) { - if(err) { - console.error('Error:', err); - } else { - console.log('Done.'); - } -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-emoji/package.json b/fundamentals/bug-challenge-es6/node_modules/node-emoji/package.json deleted file mode 100644 index 64069e021..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-emoji/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_args": [ - [ - "node-emoji@^1.4.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/marked-terminal" - ] - ], - "_from": "node-emoji@>=1.4.1 <2.0.0", - "_id": "node-emoji@1.4.1", - "_inCache": true, - "_installable": true, - "_location": "/node-emoji", - "_nodeVersion": "6.5.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/node-emoji-1.4.1.tgz_1473345205017_0.22607055259868503" - }, - "_npmUser": { - "email": "me@omnidan.net", - "name": "omnidan" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "node-emoji", - "raw": "node-emoji@^1.4.1", - "rawSpec": "^1.4.1", - "scope": null, - "spec": ">=1.4.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/marked-terminal" - ], - "_resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.4.1.tgz", - "_shasum": "c9fa0cf91094335bcb967a6f42b2305c15af2ebc", - "_shrinkwrap": null, - "_spec": "node-emoji@^1.4.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/marked-terminal", - "author": { - "email": "daniel.bugl@touchlay.com", - "name": "Daniel Bugl" - }, - "bugs": { - "url": "https://github.com/omnidan/node-emoji/issues" - }, - "dependencies": { - "string.prototype.codepointat": "^0.2.0" - }, - "description": "simple emoji support for node.js projects", - "devDependencies": { - "mocha": "^3.0.2", - "should": "^11.1.0" - }, - "directories": {}, - "dist": { - "shasum": "c9fa0cf91094335bcb967a6f42b2305c15af2ebc", - "tarball": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.4.1.tgz" - }, - "gitHead": "56fd6493dabb6622ee4a76e4f4c602cd3b36441a", - "homepage": "https://github.com/omnidan/node-emoji#readme", - "keywords": [ - "emoji", - "simple", - "emoticons", - "emoticon", - "emojis", - "smiley", - "smileys", - "smilies", - "ideogram", - "ideograms" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "daniel.bugl@touchlay.com", - "name": "omnidan" - } - ], - "name": "node-emoji", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/omnidan/node-emoji.git" - }, - "scripts": { - "emojiparse": "node lib/emojiparse.js", - "prepublish": "npm run test", - "test": "mocha --require should --bail --reporter spec test/*" - }, - "version": "1.4.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/node-emoji/test/emoji.js b/fundamentals/bug-challenge-es6/node_modules/node-emoji/test/emoji.js deleted file mode 100644 index 1a94f9f1f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-emoji/test/emoji.js +++ /dev/null @@ -1,80 +0,0 @@ -/*jslint node: true*/ -/*jslint expr: true*/ -/*global describe, it*/ -"use strict"; - -var should = require('should'); -var emoji = require('../index'); - -describe("emoji.js", function () { - describe("get(emoji)", function () { - it("should return an emoji code", function () { - var coffee = emoji.get('coffee'); - should.exist(coffee); - coffee.should.be.exactly('☕️'); - }); - - it("should support github flavored markdown emoji", function () { - var coffee = emoji.get(':coffee:'); - should.exist(coffee); - coffee.should.be.exactly('☕️'); - }); - }); - - describe("random()", function () { - it("should return a random emoji and the corresponding key", function () { - var result = emoji.random(); - should.exist(result); - should.exist(result.key); - should.exist(result.emoji); - result.emoji.should.be.exactly(emoji.get(result.key)); - }); - }); - - describe("which(emoji_code)", function () { - it("should return name of the emoji", function () { - var coffee = emoji.which('☕️'); - should.exist(coffee); - coffee.should.be.exactly('coffee'); - }); - it("should work for differently formed characters", function () { - var umbrella = emoji.which('☔'); - should.exist(umbrella); - umbrella.should.be.exactly('umbrella'); - }); - it("should return the same name for differently formed characters", function () { - var umbrella1 = emoji.which('☔'); - should.exist(umbrella1); - var umbrella2 = emoji.which('☔️'); - should.exist(umbrella2); - umbrella1.should.equal(umbrella2); - }); - }); - - describe("emojify(str)", function () { - it("should parse :emoji: in a string and replace them with the right emoji", function () { - var coffee = emoji.emojify('I :heart: :coffee:! - :hushed::star::heart_eyes: ::: test : : :+1:+'); - should.exist(coffee); - coffee.should.be.exactly('I ❤️ ☕️! - 😯⭐️😍 ::: test : : 👍+'); - }); - it("should leave unknown emoji", function () { - var coffee = emoji.emojify('I :unknown_emoji: :star: :another_one:'); - should.exist(coffee); - coffee.should.be.exactly('I :unknown_emoji: ⭐️ :another_one:'); - }); - - it("should replace unknown emoji using provided cb function", function () { - var coffee = emoji.emojify('I :unknown_emoji: :star: :another_one:', function(name) { - return name; - }); - should.exist(coffee); - coffee.should.be.exactly('I unknown_emoji ⭐️ another_one'); - }); - }); - - it("should return an emoji code", function () { - var coffee = emoji.emoji.coffee; - should.exist(coffee); - coffee.should.be.exactly('☕️'); - }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-int64/.npmignore b/fundamentals/bug-challenge-es6/node_modules/node-int64/.npmignore deleted file mode 100644 index 825fc67c2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-int64/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -node_modules -.DS_Store -npm-debug.log diff --git a/fundamentals/bug-challenge-es6/node_modules/node-int64/Int64.js b/fundamentals/bug-challenge-es6/node_modules/node-int64/Int64.js deleted file mode 100644 index f870a2a94..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-int64/Int64.js +++ /dev/null @@ -1,268 +0,0 @@ -// Int64.js -// -// Copyright (c) 2012 Robert Kieffer -// MIT License - http://opensource.org/licenses/mit-license.php - -/** - * Support for handling 64-bit int numbers in Javascript (node.js) - * - * JS Numbers are IEEE-754 binary double-precision floats, which limits the - * range of values that can be represented with integer precision to: - * - * 2^^53 <= N <= 2^53 - * - * Int64 objects wrap a node Buffer that holds the 8-bytes of int64 data. These - * objects operate directly on the buffer which means that if they are created - * using an existing buffer then setting the value will modify the Buffer, and - * vice-versa. - * - * Internal Representation - * - * The internal buffer format is Big Endian. I.e. the most-significant byte is - * at buffer[0], the least-significant at buffer[7]. For the purposes of - * converting to/from JS native numbers, the value is assumed to be a signed - * integer stored in 2's complement form. - * - * For details about IEEE-754 see: - * http://en.wikipedia.org/wiki/Double_precision_floating-point_format - */ - -// Useful masks and values for bit twiddling -var MASK31 = 0x7fffffff, VAL31 = 0x80000000; -var MASK32 = 0xffffffff, VAL32 = 0x100000000; - -// Map for converting hex octets to strings -var _HEX = []; -for (var i = 0; i < 256; i++) { - _HEX[i] = (i > 0xF ? '' : '0') + i.toString(16); -} - -// -// Int64 -// - -/** - * Constructor accepts any of the following argument types: - * - * new Int64(buffer[, offset=0]) - Existing Buffer with byte offset - * new Int64(Uint8Array[, offset=0]) - Existing Uint8Array with a byte offset - * new Int64(string) - Hex string (throws if n is outside int64 range) - * new Int64(number) - Number (throws if n is outside int64 range) - * new Int64(hi, lo) - Raw bits as two 32-bit values - */ -var Int64 = module.exports = function(a1, a2) { - if (a1 instanceof Buffer) { - this.buffer = a1; - this.offset = a2 || 0; - } else if (Object.prototype.toString.call(a1) == '[object Uint8Array]') { - // Under Browserify, Buffers can extend Uint8Arrays rather than an - // instance of Buffer. We could assume the passed in Uint8Array is actually - // a buffer but that won't handle the case where a raw Uint8Array is passed - // in. We construct a new Buffer just in case. - this.buffer = new Buffer(a1); - this.offset = a2 || 0; - } else { - this.buffer = this.buffer || new Buffer(8); - this.offset = 0; - this.setValue.apply(this, arguments); - } -}; - - -// Max integer value that JS can accurately represent -Int64.MAX_INT = Math.pow(2, 53); - -// Min integer value that JS can accurately represent -Int64.MIN_INT = -Math.pow(2, 53); - -Int64.prototype = { - - constructor: Int64, - - /** - * Do in-place 2's compliment. See - * http://en.wikipedia.org/wiki/Two's_complement - */ - _2scomp: function() { - var b = this.buffer, o = this.offset, carry = 1; - for (var i = o + 7; i >= o; i--) { - var v = (b[i] ^ 0xff) + carry; - b[i] = v & 0xff; - carry = v >> 8; - } - }, - - /** - * Set the value. Takes any of the following arguments: - * - * setValue(string) - A hexidecimal string - * setValue(number) - Number (throws if n is outside int64 range) - * setValue(hi, lo) - Raw bits as two 32-bit values - */ - setValue: function(hi, lo) { - var negate = false; - if (arguments.length == 1) { - if (typeof(hi) == 'number') { - // Simplify bitfield retrieval by using abs() value. We restore sign - // later - negate = hi < 0; - hi = Math.abs(hi); - lo = hi % VAL32; - hi = hi / VAL32; - if (hi > VAL32) throw new RangeError(hi + ' is outside Int64 range'); - hi = hi | 0; - } else if (typeof(hi) == 'string') { - hi = (hi + '').replace(/^0x/, ''); - lo = hi.substr(-8); - hi = hi.length > 8 ? hi.substr(0, hi.length - 8) : ''; - hi = parseInt(hi, 16); - lo = parseInt(lo, 16); - } else { - throw new Error(hi + ' must be a Number or String'); - } - } - - // Technically we should throw if hi or lo is outside int32 range here, but - // it's not worth the effort. Anything past the 32'nd bit is ignored. - - // Copy bytes to buffer - var b = this.buffer, o = this.offset; - for (var i = 7; i >= 0; i--) { - b[o+i] = lo & 0xff; - lo = i == 4 ? hi : lo >>> 8; - } - - // Restore sign of passed argument - if (negate) this._2scomp(); - }, - - /** - * Convert to a native JS number. - * - * WARNING: Do not expect this value to be accurate to integer precision for - * large (positive or negative) numbers! - * - * @param allowImprecise If true, no check is performed to verify the - * returned value is accurate to integer precision. If false, imprecise - * numbers (very large positive or negative numbers) will be forced to +/- - * Infinity. - */ - toNumber: function(allowImprecise) { - var b = this.buffer, o = this.offset; - - // Running sum of octets, doing a 2's complement - var negate = b[o] & 0x80, x = 0, carry = 1; - for (var i = 7, m = 1; i >= 0; i--, m *= 256) { - var v = b[o+i]; - - // 2's complement for negative numbers - if (negate) { - v = (v ^ 0xff) + carry; - carry = v >> 8; - v = v & 0xff; - } - - x += v * m; - } - - // Return Infinity if we've lost integer precision - if (!allowImprecise && x >= Int64.MAX_INT) { - return negate ? -Infinity : Infinity; - } - - return negate ? -x : x; - }, - - /** - * Convert to a JS Number. Returns +/-Infinity for values that can't be - * represented to integer precision. - */ - valueOf: function() { - return this.toNumber(false); - }, - - /** - * Return string value - * - * @param radix Just like Number#toString()'s radix - */ - toString: function(radix) { - return this.valueOf().toString(radix || 10); - }, - - /** - * Return a string showing the buffer octets, with MSB on the left. - * - * @param sep separator string. default is '' (empty string) - */ - toOctetString: function(sep) { - var out = new Array(8); - var b = this.buffer, o = this.offset; - for (var i = 0; i < 8; i++) { - out[i] = _HEX[b[o+i]]; - } - return out.join(sep || ''); - }, - - /** - * Returns the int64's 8 bytes in a buffer. - * - * @param {bool} [rawBuffer=false] If no offset and this is true, return the internal buffer. Should only be used if - * you're discarding the Int64 afterwards, as it breaks encapsulation. - */ - toBuffer: function(rawBuffer) { - if (rawBuffer && this.offset === 0) return this.buffer; - - var out = new Buffer(8); - this.buffer.copy(out, 0, this.offset, this.offset + 8); - return out; - }, - - /** - * Copy 8 bytes of int64 into target buffer at target offset. - * - * @param {Buffer} targetBuffer Buffer to copy into. - * @param {number} [targetOffset=0] Offset into target buffer. - */ - copy: function(targetBuffer, targetOffset) { - this.buffer.copy(targetBuffer, targetOffset || 0, this.offset, this.offset + 8); - }, - - /** - * Returns a number indicating whether this comes before or after or is the - * same as the other in sort order. - * - * @param {Int64} other Other Int64 to compare. - */ - compare: function(other) { - - // If sign bits differ ... - if ((this.buffer[this.offset] & 0x80) != (other.buffer[other.offset] & 0x80)) { - return other.buffer[other.offset] - this.buffer[this.offset]; - } - - // otherwise, compare bytes lexicographically - for (var i = 0; i < 8; i++) { - if (this.buffer[this.offset+i] !== other.buffer[other.offset+i]) { - return this.buffer[this.offset+i] - other.buffer[other.offset+i]; - } - } - return 0; - }, - - /** - * Returns a boolean indicating if this integer is equal to other. - * - * @param {Int64} other Other Int64 to compare. - */ - equals: function(other) { - return this.compare(other) === 0; - }, - - /** - * Pretty output in console.log - */ - inspect: function() { - return '[Int64 value:' + this + ' octets:' + this.toOctetString(' ') + ']'; - } -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/node-int64/LICENSE b/fundamentals/bug-challenge-es6/node_modules/node-int64/LICENSE deleted file mode 100644 index ddb6a9051..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-int64/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2014 Robert Kieffer - -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/fundamentals/bug-challenge-es6/node_modules/node-int64/README.md b/fundamentals/bug-challenge-es6/node_modules/node-int64/README.md deleted file mode 100644 index efef18a71..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-int64/README.md +++ /dev/null @@ -1,78 +0,0 @@ -JavaScript Numbers are represented as [IEEE 754 double-precision floats](http://steve.hollasch.net/cgindex/coding/ieeefloat.html). Unfortunately, this means they lose integer precision for values beyond +/- 2^^53. For projects that need to accurately handle 64-bit ints, such as [node-thrift](https://github.com/wadey/node-thrift), a performant, Number-like class is needed. Int64 is that class. - -Int64 instances look and feel much like JS-native Numbers. By way of example ... -```js -// First, let's illustrate the problem ... -> (0x123456789).toString(16) -'123456789' // <- what we expect. -> (0x123456789abcdef0).toString(16) -'123456789abcdf00' // <- Ugh! JS doesn't do big ints. :( - -// So let's create a couple Int64s using the above values ... - -// Require, of course -> Int64 = require('node-int64') - -// x's value is what we expect (the decimal value of 0x123456789) -> x = new Int64(0x123456789) -[Int64 value:4886718345 octets:00 00 00 01 23 45 67 89] - -// y's value is Infinity because it's outside the range of integer -// precision. But that's okay - it's still useful because it's internal -// representation (octets) is what we passed in -> y = new Int64('123456789abcdef0') -[Int64 value:Infinity octets:12 34 56 78 9a bc de f0] - -// Let's do some math. Int64's behave like Numbers. (Sorry, Int64 isn't -// for doing 64-bit integer arithmetic (yet) - it's just for carrying -// around int64 values -> x + 1 -4886718346 -> y + 1 -Infinity - -// Int64 string operations ... -> 'value: ' + x -'value: 4886718345' -> 'value: ' + y -'value: Infinity' -> x.toString(2) -'100100011010001010110011110001001' -> y.toString(2) -'Infinity' - -// Use JS's isFinite() method to see if the Int64 value is in the -// integer-precise range of JS values -> isFinite(x) -true -> isFinite(y) -false - -// Get an octet string representation. (Yay, y is what we put in!) -> x.toOctetString() -'0000000123456789' -> y.toOctetString() -'123456789abcdef0' - -// Finally, some other ways to create Int64s ... - -// Pass hi/lo words -> new Int64(0x12345678, 0x9abcdef0) -[Int64 value:Infinity octets:12 34 56 78 9a bc de f0] - -// Pass a Buffer -> new Int64(new Buffer([0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0])) -[Int64 value:Infinity octets:12 34 56 78 9a bc de f0] - -// Pass a Buffer and offset -> new Int64(new Buffer([0,0,0,0,0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0]), 4) -[Int64 value:Infinity octets:12 34 56 78 9a bc de f0] - -// Pull out into a buffer -> new Int64(new Buffer([0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0])).toBuffer() - - -// Or copy into an existing one (at an offset) -> var buf = new Buffer(1024); -> new Int64(new Buffer([0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0])).copy(buf, 512); -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/node-int64/package.json b/fundamentals/bug-challenge-es6/node_modules/node-int64/package.json deleted file mode 100644 index c558dff3f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-int64/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "_args": [ - [ - "node-int64@^0.4.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/bser" - ] - ], - "_from": "node-int64@>=0.4.0 <0.5.0", - "_id": "node-int64@0.4.0", - "_inCache": true, - "_installable": true, - "_location": "/node-int64", - "_npmUser": { - "email": "robert@broofa.com", - "name": "broofa" - }, - "_npmVersion": "1.4.28", - "_phantomChildren": {}, - "_requested": { - "name": "node-int64", - "raw": "node-int64@^0.4.0", - "rawSpec": "^0.4.0", - "scope": null, - "spec": ">=0.4.0 <0.5.0", - "type": "range" - }, - "_requiredBy": [ - "/bser" - ], - "_resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "_shasum": "87a9065cdb355d3182d8f94ce11188b825c68a3b", - "_shrinkwrap": null, - "_spec": "node-int64@^0.4.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/bser", - "author": { - "email": "robert@broofa.com", - "name": "Robert Kieffer" - }, - "bugs": { - "url": "https://github.com/broofa/node-int64/issues" - }, - "contributors": [], - "dependencies": {}, - "description": "Support for representing 64-bit integers in JavaScript", - "devDependencies": { - "nodeunit": "^0.9.0" - }, - "directories": {}, - "dist": { - "shasum": "87a9065cdb355d3182d8f94ce11188b825c68a3b", - "tarball": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" - }, - "gitHead": "c1567475712cb1cfe100c96813c2a2a92e2b42ce", - "homepage": "https://github.com/broofa/node-int64", - "keywords": [ - "math", - "integer", - "int64" - ], - "lib": ".", - "license": "MIT", - "main": "./Int64.js", - "maintainers": [ - { - "email": "robert@broofa.com", - "name": "broofa" - } - ], - "name": "node-int64", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/broofa/node-int64.git" - }, - "scripts": { - "test": "nodeunit test.js" - }, - "url": "http://github.com/broofa/node-int64", - "version": "0.4.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/node-int64/test.js b/fundamentals/bug-challenge-es6/node_modules/node-int64/test.js deleted file mode 100644 index cdf4303d7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-int64/test.js +++ /dev/null @@ -1,120 +0,0 @@ -var assert = require('assert'); -var Int64 = require('./Int64'); - -exports.setUp = function(done) { - done(); -}; - -exports.testBufferToString = function(test) { - var int = new Int64(0xfffaffff, 0xfffff700); - test.equal( - int.toBuffer().toString('hex'), - 'fffafffffffff700', - 'Buffer to string conversion' - ); - test.done(); -}; - -exports.testBufferCopy = function(test) { - var src = new Int64(0xfffaffff, 0xfffff700); - var dst = new Buffer(8); - - src.copy(dst); - - test.deepEqual( - dst, - new Buffer([0xff, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xf7, 0x00]), - 'Copy to buffer' - ); - - test.done(); -}; - -exports.testValueRepresentation = function(test) { - var args = [ - [0], '0000000000000000', 0, - [1], '0000000000000001', 1, - [-1], 'ffffffffffffffff', -1, - [1e18], '0de0b6b3a7640000', 1e18, - ['0001234500654321'], '0001234500654321', 0x1234500654321, - ['0ff1234500654321'], '0ff1234500654321', 0xff1234500654300, // Imprecise! - [0xff12345, 0x654321], '0ff1234500654321', 0xff1234500654300, // Imprecise! - [0xfffaffff, 0xfffff700],'fffafffffffff700', -0x5000000000900, - [0xafffffff, 0xfffff700],'affffffffffff700', -0x5000000000000800, // Imprecise! - ['0x0000123450654321'], '0000123450654321', 0x123450654321, - ['0xFFFFFFFFFFFFFFFF'], 'ffffffffffffffff', -1 - ]; - - // Test constructor argments - - for (var i = 0; i < args.length; i += 3) { - var a = args[i], octets = args[i+1], number = args[i+2]; - - // Create instance - var x = new Int64(); - Int64.apply(x, a); - - test.equal(x.toOctetString(), octets, 'Constuctor with ' + args.join(', ')); - test.equal(x.toNumber(true), number); - } - - test.done(); -}; - -exports.testBufferOffsets = function(test) { - var sourceBuffer = new Buffer(16); - sourceBuffer.writeUInt32BE(0xfffaffff, 2); - sourceBuffer.writeUInt32BE(0xfffff700, 6); - - var int = new Int64(sourceBuffer, 2); - assert.equal( - int.toBuffer().toString('hex'), 'fffafffffffff700', - 'Construct from offset' - ); - - var targetBuffer = new Buffer(16); - int.copy(targetBuffer, 4); - assert.equal( - targetBuffer.slice(4, 12).toString('hex'), 'fffafffffffff700', - 'Copy to offset' - ); - - test.done(); -}; - -exports.testInstanceOf = function(test) { - var x = new Int64(); - assert(x instanceof Int64, 'Variable is not instance of Int64'); - var y = {}; - assert(!(y instanceof Int64), 'Object is an instance of Int64'); - test.done(); -}; - -exports.testCompare = function(test) { - var intMin = new Int64(2147483648, 0); - var intMinPlusOne = new Int64(2147483648, 1); - var zero = new Int64(0, 0); - var intMaxMinusOne = new Int64(2147483647, 4294967294); - var intMax = new Int64(2147483647, 4294967295); - assert(intMin.compare(intMinPlusOne) < 0, "INT64_MIN is not less than INT64_MIN+1"); - assert(intMin.compare(zero) < 0, "INT64_MIN is not less than 0"); - assert(intMin.compare(zero) < intMax, "INT64_MIN is not less than INT64_MAX"); - assert(intMax.compare(intMaxMinusOne) > 0, "INT64_MAX is not greater than INT64_MAX-1"); - assert(intMax.compare(zero) > 0, "INT64_MAX is not greater than 0"); - assert(intMax.compare(intMin) > 0, "INT64_MAX is not greater than INT_MIN"); - test.done(); -}; - -exports.testEquals = function(test) { - var intMin = new Int64(2147483648, 0); - var zero = new Int64(0, 0); - var intMax = new Int64(2147483647, 4294967295); - assert(intMin.equals(intMin), "INT64_MIN !== INT64_MIN"); - assert(intMax.equals(intMax), "INT64_MAX !== INT64_MAX"); - assert(zero.equals(zero), "0 !== 0"); - assert(!intMin.equals(zero), "INT64_MIN === 0"); - assert(!intMin.equals(intMax), "INT64_MIN === INT64_MAX"); - assert(!intMax.equals(zero), "INT64_MAX === 0"); - assert(!intMax.equals(intMin), "INT64_MAX === INT64_MIN"); - test.done(); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/.npmignore b/fundamentals/bug-challenge-es6/node_modules/node-notifier/.npmignore deleted file mode 100644 index bf1888242..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -example/ -test -*.md -node-notifier_flow.png diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/node-notifier/.travis.yml deleted file mode 100644 index dec3f412b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/.travis.yml +++ /dev/null @@ -1,10 +0,0 @@ -os: - - linux - - osx -language: node_js -node_js: - - "6" - - "5" - - "4" - - "0.11" - - "0.10" diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/node-notifier/CHANGELOG.md deleted file mode 100644 index 9fcfb6148..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/CHANGELOG.md +++ /dev/null @@ -1,159 +0,0 @@ -Changelog -=== - - -### `v4.6.1` - -1. Adds npm ignore file, ignoring tests and examples from package. -2. Fixes CI builds - -### `v4.6.0` - -1. Adds support for Icon URL in Growl ([by @gucong3000](https://github.com/mikaelbr/node-notifier/pull/115)) -2. Adds options for passing host and port to cli tool ([reported by @el-davo](https://github.com/mikaelbr/node-notifier/issues/106)) -3. Fixes sanitize response on `notify` callback ([by @MadLittleMods](https://github.com/mikaelbr/node-notifier/commit/a44454a11eff452a8b55f9fbe291e189ed088708)) -4. Fixes use of new line in messages ([by @gucong3000](https://github.com/mikaelbr/node-notifier/pull/115)) -5. Fixes use of `file:///xxx` protocol icon paths for Windows 8.1 ([by @gucong3000](https://github.com/mikaelbr/node-notifier/pull/118)) -6. Fixes non-TTY usage and piping messages ([reported by @simensen](https://github.com/mikaelbr/node-notifier/issues/109)) -7. Updates vendor terminal-notifier version to 1.6.3 ([reported by @kid-icarus](https://github.com/mikaelbr/node-notifier/pull/120)) - -### `v4.5.0` - -#### Additions -1. Adds syntactic sugar for `notify`. Now able to just pass message: -```js -notifier.notify('My message'); -``` - -See [#45](https://github.com/mikaelbr/node-notifier/issues/45) for more info. - -#### Fixes -1. Improvements to docs and examples -2. Updates `semver` dependency to support Webpacking with Electron. - -### `v4.4.0` - -1. Changes to exec terminal-notifier through execFile to allow for asar-packages -2. Adds support for remote growl server -3. Adds support for win7 with electron asar-package - -### `v4.3.1` -Obligatory patch fix: -1. Adds new stdin CLI options to docs - -### `v4.3.0` -1. Adds support for piping messages in to CLI. -(With `node-notifier` installed as a CLI `npm i -g node-notifier`) - -```shell -➜ echo "Message" | notify -➜ echo "Message" | notify -t "My Title" -➜ echo "Some message" | notify -t "My Title" -s -``` - -### `v4.2.3` -1. Fixed input arguments to CLI to be strings where they should be strings. - -### `v4.2.2` -1. Fixed no notification when no message for the CLI. [#58](https://github.com/mikaelbr/node-notifier/pull/58) -2. Changes `which` test to be sync, avoiding some edge cases with multiple notifications. - -### `v4.2.1` -1. Minor fix for docs in CLI usage - -### `v4.2.0` -1. Adds CLI support. -2. Fixes Debug "HRESULT : 0xC00CE508" exception on Win8. PR [#49](https://github.com/mikaelbr/node-notifier/pull/49) - -### `v4.1.2` -1. Fixes correct terminal-notifier (own fork https://github.com/mikaelbr/terminal-notifier) - to support activate / click. - -### `v4.1.1` -1. Fixes proper error codes for balloon: #42 -2. Removes unused debug files: #41 -3. Patches differences between subtitle for notify-send: #43 -4. Updates terminal-notifier dependency (removing black borders) #44 #18 - -### `v4.1.0` -1. Adds support for changing host and port for Growl. - -### `v4.0.3` -1. Fixes Notification center issue with multiple callback events. -2. Fixes error in source code: Fixes long-spaces to proper spaces - -### `v4.0.2` -1. Fixes issue with immidiate notifu notifications (with `wait : false`) -2. Fixes issue with boolean flags for notifu. -3. Restructures directories. Making it easier to require notifiers directly. - -### `v4.0.1` -1. Fixes issue with optional callback for notify-send - -### `v4.0.0` -Major changes and breaking API. -1. require('node-notifier') now returns an instance with fallbackable notifications. -```js -var notifier = require('node-notifier'); -notifier.notify(); -``` -2. Introduced a `wait` property (default `false`), to get user input for -Notification Center, Windows Toaster, Windows Balloons and Growl. Sadly not -for notify-send. -```js -var notifier = require('node-notifier'); -notifier.notify({ wait: true }, function (err, response) { - // response is response after user have interacted - // with the notification or the notification has timed out. -}); -``` -3. All notification instances are now event emitters, emitting events -`click` or `timeout`. This is only applicable if `{ wait: true }`. -```js -var notifier = require('node-notifier'); -notifier.on('click', function (notificationObject, options) { - // options.someArbitraryData === 'foo' -}); -notifier.notify({ wait: true, someArbitraryData: 'foo' }); -``` -4. WindowsToaster and NotificationCenter now can have sounds by doing `{ sound: true }`. -Default NotificationCenter sound is Bottle. Can still use define sound on -Mac: -```js -var notifier = require('node-notifier'); -notifier.notify({ sound: true }); -// For mac (same as sound: true on Windows 8) -notifier.notify({ sound: 'Morse' }); -``` - -### `v3.4.0` -1. Adds Growl as priority over Balloons - -### `v3.3.0` -1. Adds support for native Windows 7 and earlier (through task bar balloons) -2. Changes growl implementation. Adds better support for GNTP - -### `v3.2.1` -1. Fixes support for notifications from folders with spaces on Windows. - -### `v3.2.0` -1. Adds native Windows 8 support. - -### `v3.1.0` -1. Adds Growl as fallback for Mac OS X pre 10.8. - -### `v3.0.6` -1. Fixes typo: Changes Growl app name from `Gulp` to `Node`. - -### `v3.0.5` -1. Maps common options between the different notifiers. Allowing for common usage with different notifiers. - -### `v3.0.4` -1. Fixes expires for notify-send (Issue #13) - -### `v3.0.2` -1. Fixes version check for Mac OS X Yosemite - -### `v3.0.0` -1. Updates terminal-notifier to version 1.6.0; adding support for appIcon and contentImage -2. Removes parsing of output sent from notifier (Notification Center) diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/README.md b/fundamentals/bug-challenge-es6/node_modules/node-notifier/README.md deleted file mode 100644 index 025588ae8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/README.md +++ /dev/null @@ -1,368 +0,0 @@ -# node-notifier [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][depstat-image]][depstat-url] - -A Node.js module for sending cross platform system notifications. Using -Notification Center for Mac, notify-osd/libnotify-bin for Linux, Toasters for -Windows 8/10, or taskbar Balloons for earlier Windows versions. If none of -these requirements are met, Growl is used. - -![Mac Screenshot](https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/mac.png) -![Native Windows Screenshot](https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/windows.png) -![Growl Screenshot](https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/growl.png) - -## Quick Usage - -Show a native notification on Mac, Windows, Linux: - -```javascript -const notifier = require('node-notifier'); -// String -notifier.notify('Message'); - -// Object -notifier.notify({ - 'title': 'My notification', - 'message': 'Hello, there!' -}); -``` - -## Requirements -- **Mac OS X**: >= 10.8 or Growl if earlier. -- **Linux**: `notify-osd` or `libnotify-bin` installed (Ubuntu should have this by default) -- **Windows**: >= 8, task bar balloon if earlier or Growl if that is installed. -- **General Fallback**: Growl - -Growl takes precedence over Windows balloons. - -See [documentation and flow chart for reporter choice](./DECISION_FLOW.md) - -## Install -``` -$ npm install --save node-notifier -``` - -## Cross-Platform Advanced Usage - -Standard usage, with cross-platform fallbacks as defined in the -[reporter flow chart](./DECISION_FLOW.md). All of the options -below will work in a way or another on all platforms. - -```javascript -const notifier = require('node-notifier'); -const path = require('path'); - -notifier.notify({ - title: 'My awesome title', - message: 'Hello from node, Mr. User!', - icon: path.join(__dirname, 'coulson.jpg'), // Absolute path (doesn't work on balloons) - sound: true, // Only Notification Center or Windows Toasters - wait: true // Wait with callback, until user action is taken against notification -}, function (err, response) { - // Response is response from notification -}); - -notifier.on('click', function (notifierObject, options) { - // Triggers if `wait: true` and user clicks notification -}); - -notifier.on('timeout', function (notifierObject, options) { - // Triggers if `wait: true` and notification closes -}); -``` - -You can also specify what reporter you want to use if you -want to customize it or have more specific options per system. -See documentation for each reporter below. - -Example: -```javascript -const NotificationCenter = require('node-notifier/notifiers/notificationcenter'); -new NotificationCenter(options).notify(); - -const NotifySend = require('node-notifier/notifiers/notifysend'); -new NotifySend(options).notify(); - -const WindowsToaster = require('node-notifier/notifiers/toaster'); -new WindowsToaster(options).notify(); - -const Growl = require('node-notifier/notifiers/growl'); -new Growl(options).notify(); - -const WindowsBalloon = require('node-notifier/notifiers/balloon'); -new WindowsBalloon(options).notify(); - -``` - -Or if you are using several (or you are lazy): -(note: technically, this takes longer to require) - -```javascript -const nn = require('node-notifier'); - -new nn.NotificationCenter(options).notify(); -new nn.NotifySend(options).notify(); -new nn.WindowsToaster(options).notify(options); -new nn.WindowsBalloon(options).notify(options); -new nn.Growl(options).notify(options); -``` - -## Contents - -* [Notification Center documentation](#usage-notificationcenter) -* [Windows Toaster documentation](#usage-windowstoaster) -* [Windows Balloon documentation](#usage-windowsballoon) -* [Growl documentation](#usage-growl) -* [Notify-send documentation](#usage-notifysend) - - -### Usage NotificationCenter - -Same usage and parameter setup as [terminal-notifier](https://github.com/alloy/terminal-notifier). - -Native Notification Center requires Mac OS X version 10.8 or higher. If you have -an earlier version, Growl will be the fallback. If Growl isn't installed, an -error will be returned in the callback. - - -#### Example - -Wrapping around [terminal-notifier](https://github.com/alloy/terminal-notifier), you can -do all terminal-notifier can do through properties to the `notify` method. E.g. -if `terminal-notifier` says `-message`, you can do `{message: 'Foo'}`, or -if `terminal-notifier` says `-list ALL`, you can do `{list: 'ALL'}`. Notification -is the primary focus for this module, so listing and activating do work, -but isn't documented. - -### All notification options with their defaults: - -```javascript -const NotificationCenter = require('node-notifier').NotificationCenter; - -var notifier = new NotificationCenter({ - withFallback: false, // Use Growl Fallback if <= 10.8 - customPath: void 0 // Relative path if you want to use your fork of terminal-notifier -}); - -notifier.notify({ - 'title': void 0, - 'subtitle': void 0, - 'message': void 0, - 'sound': false, // Case Sensitive string for location of sound file, or use one of OS X's native sounds (see below) - 'icon': 'Terminal Icon', // Absolute Path to Triggering Icon - 'contentImage': void 0, // Absolute Path to Attached Image (Content Image) - 'open': void 0, // URL to open on Click - 'wait': false // Wait for User Action against Notification -}, function(error, response) { - console.log(response); -}); -``` - -**For Mac OS notifications, icon and contentImage requires OS X 10.9.** - -Sound can be one of these: `Basso`, `Blow`, `Bottle`, `Frog`, `Funk`, `Glass`, -`Hero`, `Morse`, `Ping`, `Pop`, `Purr`, `Sosumi`, `Submarine`, `Tink`. -If sound is simply `true`, `Bottle` is used. - -See [specific Notification Center example](./example/advanced.js). - -### Usage WindowsToaster - -**Note:** There are some limitations for images in native Windows 8 notifications: -The image must be a PNG image, and cannot be over 1024x1024 px, or over over 200Kb. -You also need to specify the image by using an absolute path. These limitations are -due to the Toast notification system. A good tip is to use something like -`path.join` or `path.delimiter` to have cross-platform pathing. - -**Windows 10 Note:** You might have to activate banner notification for the toast to show. - -From [mikaelbr/gulp-notify#90 (comment)](https://github.com/mikaelbr/gulp-notify/issues/90#issuecomment-129333034) -> You can make it work by going to System > Notifications & Actions. The 'toast' app needs to have Banners enabled. (You can activate banners by clicking on the 'toast' app and setting the 'Show notification banners' to On) - -[toaster](https://github.com/nels-o/toaster) is used to get native Windows Toasts! - -```javascript -const WindowsToaster = require('node-notifier').WindowsToaster; - -var notifier = new WindowsToaster({ - withFallback: false, // Fallback to Growl or Balloons? - customPath: void 0 // Relative path if you want to use your fork of toast.exe -}); - -notifier.notify({ - title: void 0, - message: void 0, - icon: void 0, // Absolute path to Icon - sound: false, // true | false. - wait: false, // Wait for User Action against Notification -}, function(error, response) { - console.log(response); -}); -``` - -### Usage Growl - -```javascript -const Growl = require('node-notifier').Growl; - -var notifier = new Growl({ - name: 'Growl Name Used', // Defaults as 'Node' - host: 'localhost', - port: 23053 -}); - -notifier.notify({ - title: 'Foo', - message: 'Hello World', - icon: fs.readFileSync(__dirname + "/coulson.jpg"), - wait: false, // Wait for User Action against Notification - - // and other growl options like sticky etc. - sticky: false, - label: void 0, - priority: void 0 -}); -``` - -See more information about using -[growly](https://github.com/theabraham/growly/). - -### Usage WindowsBalloon - -For earlier Windows versions, the taskbar balloons are used (unless -fallback is activated and Growl is running). For balloons, a great -project called [notifu](http://www.paralint.com/projects/notifu/) is used. - -```javascript -const WindowsBalloon = require('node-notifier').WindowsBalloon; - -var notifier = new WindowsBalloon({ - withFallback: false, // Try Windows Toast and Growl first? - customPath: void 0 // Relative path if you want to use your fork of notifu -}); - -notifier.notify({ - title: void 0, - message: void 0, - sound: false, // true | false. - time: 5000, // How long to show balloon in ms - wait: false, // Wait for User Action against Notification - type: 'info' // The notification type : info | warn | error -}, function(error, response) { - console.log(response); -}); -``` - -See full usage on the [project homepage: -notifu](http://www.paralint.com/projects/notifu/). - -### Usage NotifySend - -Note: notify-send doesn't support the wait flag. - -```javascript -const NotifySend = require('node-notifier').NotifySend; - -var notifier = new NotifySend(); - -notifier.notify({ - title: 'Foo', - message: 'Hello World', - icon: __dirname + "/coulson.jpg", - - // .. and other notify-send flags: - urgency: void 0, - time: void 0, - category: void 0, - hint: void 0, -}); -``` - -See flags and options [on the man pages](http://manpages.ubuntu.com/manpages/gutsy/man1/notify-send.1.html) - -## CLI - -You can also use node-notifier as a CLI (as of `v4.2.0`). - -```shell -$ notify -h - -# notify -## Options - * --help (alias -h) - * --title (alias -t) - * --subtitle (alias -st) - * --message (alias -m) - * --icon (alias -i) - * --sound (alias -s) - * --open (alias -o) - -## Example - - $ notify -t "Hello" -m "My Message" -s --open http://github.com - $ notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg -m "Well, that's new. " - $ notify -m "My Message" -s Glass - $ echo "My Message" | notify -t "Hello" -``` - -You can also pass message in as `stdin`: - -```js -➜ echo "Message" | notify - -# Works with existing arguments -➜ echo "Message" | notify -t "My Title" -➜ echo "Some message" | notify -t "My Title" -s -``` - -## Thanks to OSS - -`node-notifier` is made possible through Open Source Software. A very special thanks to all the modules `node-notifier` uses. -* [terminal-notifier](https://github.com/alloy/terminal-notifier) -* [toaster](https://github.com/nels-o/toaster) -* [notifu](http://www.paralint.com/projects/notifu/) -* [growly](https://github.com/theabraham/growly/) - -[![NPM downloads][npm-downloads]][npm-url] - -## Common Issues - -### Use inside tmux session - -When using node-notifier within a tmux session, it can cause a hang in the system. This can be solved by following the steps described in this comment: https://github.com/julienXX/terminal-notifier/issues/115#issuecomment-104214742 - -See more info here: https://github.com/mikaelbr/node-notifier/issues/61#issuecomment-163560801 - - -### Within Electron Packaging - -If packaging your Electron app as an `asar`, you will find node-notifier will fail to load. Due to the way asar works, you cannot execute a binary from within an asar. As a simple solution, when packaging the app into an asar please make sure you `--unpack` the vendor folder of node-notifier, so the module still has access to the notification binaries. To do this, you can do so by using the following command: - -```bash -asar pack . app.asar --unpack "./node_modules/node-notifier/vendor/**" -``` - - -### Using Webpack - -When using node-notifier inside of webpack, you must add the following snippet to your `webpack.config.js`. The reason this is required, is because node-notifier loads the notifiers from a binary, and so a relative file path is needed. When webpack compiles the modules, it supresses file directories, causing node-notifier to error on certain platforms. To fix/workaround this, you must tell webpack to keep the relative file directories, by doing so, append the following code to your `webpack.config.js` - -```javascript -node: { - __filename: true, - __dirname: true -} -``` - - -## License - -[MIT License](http://en.wikipedia.org/wiki/MIT_License) - -[npm-url]: https://npmjs.org/package/node-notifier -[npm-image]: http://img.shields.io/npm/v/node-notifier.svg?style=flat -[npm-downloads]: http://img.shields.io/npm/dm/node-notifier.svg?style=flat - -[travis-url]: http://travis-ci.org/mikaelbr/node-notifier -[travis-image]: http://img.shields.io/travis/mikaelbr/node-notifier.svg?style=flat - -[depstat-url]: https://gemnasium.com/mikaelbr/node-notifier -[depstat-image]: http://img.shields.io/gemnasium/mikaelbr/node-notifier.svg?style=flat diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/bin.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/bin.js deleted file mode 100755 index 57adfb336..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/bin.js +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/env node - -var Notification = require('./').Notification; -var minimist = require('minimist'); -var usage = require('cli-usage'); - -var aliases = { - 'help': 'h', - 'title': 't', - 'subtitle': 'st', - 'message': 'm', - 'icon': 'i', - 'sound': 's', - 'open': 'o', - 'port': 'p', -}; - -var argv = minimist(process.argv.slice(2), { - alias: aliases, - string: ['icon', 'message', 'open', 'subtitle', 'title', 'host', 'port'] -}); - -readme(aliases, ['host']); - -var validOpts = Object.keys(aliases).concat('host'); -var passedOptions = getOptionsIfExists(validOpts, argv); -var stdinMessage = ''; - -if (process.stdin.isTTY) { - doNotification(passedOptions); -} else { - process.stdin.resume(); - process.stdin.setEncoding('utf8'); - process.stdin.on('data', function(data) { - if (data) { - stdinMessage += data; - } else { - doNotification(passedOptions); - this.end(); - return; - } - }); - process.stdin.on('end', function(){ - if (stdinMessage) { - passedOptions.message = stdinMessage; - } - doNotification(passedOptions); - }); -} - -function doNotification (options) { - var notifier = new Notification(options); - if (!options.message) { - // Do not show an empty message - process.exit(0); - } - notifier.notify(options, function (err, msg) { - if (err) { - console.error(err.message); - process.exit(1); - } - - if (!msg) return; - console.log(msg); - process.exit(0); - }); -} - -function getOptionsIfExists(optionTypes, argv) { - var options = {}; - optionTypes.forEach(function (key) { - if (key && argv[key]) { - options[key] = argv[key]; - } - }); - return options; -} - -function readme(input, extra) { - var str = '# notify\n \n## Options\n' + params(input, extra) + '\n\n'; - str += '## Example\n```shell\n'; - str += '$ notify -t "Hello" -m "My Message" -s --open http://github.com\n'; - str += '$ notify -t "Agent Coulson" --icon https://raw.githubusercontent.com/mikaelbr/node-notifier/master/example/coulson.jpg \n'; - str += '$ notify -m "My Message" -s Glass\n'; - str += '$ echo "My Message" | notify -t "Hello"```\n\n'; - usage(str); -} - -function params(input, extra) { - var withAlias = Object.keys(input).reduce(function (acc, key) { - return acc + ' * --' + key + ' (alias -' + input[key] + ')\n'; - }, ''); - - if (!extra) return withAlias; - - return withAlias + extra.reduce(function (acc, key) { - return acc + ' * --' + key + '\n'; - }, '') -} diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/index.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/index.js deleted file mode 100644 index 296718545..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/index.js +++ /dev/null @@ -1,41 +0,0 @@ -var os = require('os'); -var utils = require('./lib/utils'); - -// All notifiers -var NotifySend = require('./notifiers/notifysend'); -var NotificationCenter = require('./notifiers/notificationcenter'); -var WindowsToaster = require('./notifiers/toaster'); -var Growl = require('./notifiers/growl'); -var WindowsBalloon = require('./notifiers/balloon'); - -var options = { withFallback: true }; - -switch(os.type()) { - case 'Linux': - module.exports = new NotifySend(options); - module.exports.Notification = NotifySend; - break; - case 'Darwin': - module.exports = new NotificationCenter(options); - module.exports.Notification = NotificationCenter; - break; - case 'Windows_NT': - if (utils.isLessThanWin8()) { - module.exports = new WindowsBalloon(options); - module.exports.Notification = WindowsBalloon; - } else { - module.exports = new WindowsToaster(options); - module.exports.Notification = WindowsToaster; - } - break; - default: - module.exports = new Growl(options); - module.exports.Notification = Growl; -} - -// Expose notifiers to give full control. -module.exports.NotifySend = NotifySend; -module.exports.NotificationCenter = NotificationCenter; -module.exports.WindowsToaster = WindowsToaster; -module.exports.WindowsBalloon = WindowsBalloon; -module.exports.Growl = Growl; diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/lib/checkGrowl.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/lib/checkGrowl.js deleted file mode 100644 index 3c6f55536..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/lib/checkGrowl.js +++ /dev/null @@ -1,25 +0,0 @@ -var net = require('net'); - -var hasGrowl = false; - -module.exports = function (growlConfig, cb) { - if (typeof cb == 'undefined') { - cb = growlConfig; - growlConfig = {}; - } - if (hasGrowl) return cb(hasGrowl); - var port = growlConfig.port || 23053; - var host = growlConfig.host || 'localhost'; - var socket = net.connect(port, host); - socket.setTimeout(100); - - socket.on('connect', function() { - socket.end(); - cb(true); - }); - - socket.on('error', function() { - socket.end(); - cb(false); - }); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/lib/utils.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/lib/utils.js deleted file mode 100644 index 4f8ef07d7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/lib/utils.js +++ /dev/null @@ -1,358 +0,0 @@ -var cp = require('child_process'), - os = require('os'), - fs = require('fs'), - url = require('url'), - path = require('path'), - shellwords = require('shellwords'), - semver = require('semver'), - clone = require('lodash.clonedeep'); - - -var escapeQuotes = function (str) { - if (typeof str === 'string') { - return str.replace(/(["$`\\])/g, '\\$1'); - } else { - return str; - } -}; - -var inArray = function (arr, val) { - for(var i = 0; i < arr.length; i++) { - if (arr[i] === val) { - return true; - } - } - return false; -}; - -var notifySendFlags = { - "u": "urgency", - "urgency": "urgency", - "t": "expire-time", - "e": "expire-time", - "expire": "expire-time", - "expire-time": "expire-time", - "i": "icon", - "icon": "icon", - "c": "category", - "category": "category", - "subtitle": "category", - "h": "hint", - "hint": "hint" -}; - -module.exports.command = function (notifier, options, cb) { - notifier = shellwords.escape(notifier); - return cp.exec(notifier + ' ' + options.join(' '), function (error, stdout, stderr) { - if (error) return cb(error); - cb(stderr, stdout); - }); -}; - -module.exports.fileCommand = function (notifier, options, cb) { - return cp.execFile(notifier, options, function (error, stdout, stderr) { - if (error) return cb(error, stdout); - cb(stderr, stdout); - }); -}; - -module.exports.immediateFileCommand = function (notifier, options, cb) { - notifierExists(notifier, function (exists) { - if (!exists) return cb(new Error('Notifier (' + notifier + ') not found on system.')); - cp.execFile(notifier, options); - cb(); - }); -}; - -function notifierExists (notifier, cb) { - return fs.stat(notifier, function (err, stat) { - if (!err) return cb(stat.isFile()); - - // Check if Windows alias - if (!!path.extname(notifier)) { - // Has extentioon, no need to check more - return cb(false); - } - - // Check if there is an exe file in the directory - return fs.stat(notifier + '.exe', function (err, stat) { - cb(stat.isFile()); - }); - }); -} - -var mapAppIcon = function (options) { - if (options.appIcon) { - options.icon = options.appIcon; - delete options.appIcon; - } - - return options; -}; - -var mapText = function (options) { - if (options.text) { - options.message = options.text; - delete options.text; - } - - return options; -}; - -var mapIconShorthand = function (options) { - if (options.i) { - options.icon = options.i; - delete options.i; - } - - return options; -}; - -module.exports.mapToNotifySend = function (options) { - options = mapAppIcon(options); - options = mapText(options); - - for (var key in options) { - if (key === "message" || key === "title") continue; - if (options.hasOwnProperty(key) && (notifySendFlags[key] != key)) { - options[notifySendFlags[key]] = options[key]; - delete options[key]; - } - } - - return options; -}; - -module.exports.mapToGrowl = function (options) { - options = mapAppIcon(options); - options = mapIconShorthand(options); - options = mapText(options); - - if (options.icon && !Buffer.isBuffer(options.icon)) { - try { - options.icon = fs.readFileSync(options.icon); - }catch(ex){ - - } - } - - return options; -}; - -module.exports.mapToMac = function (options) { - options = mapIconShorthand(options); - options = mapText(options); - - if (options.icon) { - options.appIcon = options.icon; - delete options.icon; - } - - if (options.sound === true) { - options.sound = 'Bottle'; - } - - if (options.sound === false) { - delete options.sound; - } - - return options; -}; - -module.exports.actionJackerDecorator = function (emitter, options, fn, mapper) { - options = clone(options); - fn = fn || function (err, data) {}; - return function (err, data) { - - var resultantData = data; - // Sanitize the data - if(resultantData) { - resultantData = resultantData.toLowerCase().trim(); - if(resultantData.match(/^activate/)) { - resultantData = 'activate'; - } - } - fn.apply(emitter, [err, resultantData]); - if (err || !mapper || !resultantData) return; - - var key = mapper(resultantData); - if (!key) return; - emitter.emit(key, emitter, options); - }; -}; - -module.exports.constructArgumentList = function (options, extra) { - var args = []; - extra = extra || {}; - - // Massive ugly setup. Default args - var initial = extra.initial || []; - var keyExtra = extra.keyExtra || ""; - var allowedArguments = extra.allowedArguments || []; - var noEscape = extra.noEscape !== void 0; - var checkForAllowed = extra.allowedArguments !== void 0; - var explicitTrue = !!extra.explicitTrue; - var wrapper = extra.wrapper === void 0 ? '"' : extra.wrapper; - - var escapeFn = function(arg) { - if (!noEscape) { - arg = escapeQuotes(arg); - } - if(typeof arg === 'string'){ - arg = arg.replace(/\r?\n/g, '\\n'); - } - return arg; - } - - initial.forEach(function (val) { - args.push(wrapper + escapeFn(val) + wrapper); - }); - for(var key in options) { - if (options.hasOwnProperty(key) && (!checkForAllowed || inArray(allowedArguments, key))) { - if (explicitTrue && options[key] === true) args.push('-' + keyExtra + key); - else if (explicitTrue && options[key] === false) continue; - else args.push('-' + keyExtra + key, wrapper + escapeFn(options[key]) + wrapper); - } - } - return args; -}; - -module.exports.mapToWin8 = function (options){ - - options = mapAppIcon(options); - options = mapText(options); - - if(options.icon){ - if (/^file:\/+/.test(options.icon)) { - // should parse file protocol URL to path - options.p = url.parse(options.icon).pathname.replace(/^\/(\w\:\/)/, "$1").replace(/\//g, "\\"); - } else { - options.p = options.icon; - } - delete options.icon; - } - - if(options.message){ - // Remove escape char to debug "HRESULT : 0xC00CE508" exception - options.m = options.message.replace(/\x1b/g, ''); - delete options.message; - } - - if (options.title) { - options.t = options.title; - delete options.title; - } - - if (options.quiet || options.silent) { - options.q = options.quiet || options.silent; - delete options.quiet; - delete options.silent; - } - - if (options.q !== false) { - options.q = true; - } else { - delete options.q; - } - - if (options.sound) { - delete options.q; - delete options.sound; - } - - if (options.wait) { - options.w = options.wait; - delete options.wait; - } - - return options; -}; - -module.exports.mapToNotifu = function (options) { - options = mapAppIcon(options); - options = mapText(options); - - if(options.icon){ - options.i = options.icon; - delete options.icon; - } - - if(options.message){ - options.m = options.message; - delete options.message; - } - - if (options.title) { - options.p = options.title; - delete options.title; - } - - if (options.time) { - options.d = options.time; - delete options.time; - } - - if (options.q !== false) { - options.q = true; - } else { - delete options.q; - } - - if (options.quiet === false) { - delete options.q; - delete options.quiet; - } - - if (options.sound) { - delete options.q; - delete options.sound; - } - - if (options.t) { - options.d = options.t; - delete options.t; - } - - if (options.type) { - options.t = sanitizeNotifuTypeArgument(options.type); - delete options.type; - } - - return options; -}; - -module.exports.isMac = function() { - return os.type() === 'Darwin'; -}; - -module.exports.isMountainLion = function() { - return os.type() === 'Darwin' && semver.satisfies(garanteeSemverFormat(os.release()), '>=12.0.0'); -}; - -module.exports.isWin8 = function() { - return os.type() === 'Windows_NT' && semver.satisfies(garanteeSemverFormat(os.release()), '>=6.2.9200'); -}; - -module.exports.isLessThanWin8 = function() { - return os.type() === 'Windows_NT' && semver.satisfies(garanteeSemverFormat(os.release()), '<6.2.9200'); -}; - -function garanteeSemverFormat (version) { - if (version.split('.').length === 2) { - version += '.0'; - } - return version; -} - -function sanitizeNotifuTypeArgument(type) { - if (typeof type === 'string' || type instanceof String) { - if (type.toLowerCase() == 'info') - return 'info'; - if (type.toLowerCase() == 'warn') - return 'warn'; - if (type.toLowerCase() == 'error') - return 'error'; - } - - return 'info'; -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/.travis.yml deleted file mode 100644 index 74c57bf15..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" - - "0.12" - - "iojs" -before_install: - - npm install -g npm@~1.4.6 diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/LICENSE b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/LICENSE deleted file mode 100644 index ee27ba4b4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/example/parse.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/example/parse.js deleted file mode 100644 index abff3e8ee..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/example/parse.js +++ /dev/null @@ -1,2 +0,0 @@ -var argv = require('../')(process.argv.slice(2)); -console.dir(argv); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/index.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/index.js deleted file mode 100644 index 6a0559d58..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/index.js +++ /dev/null @@ -1,236 +0,0 @@ -module.exports = function (args, opts) { - if (!opts) opts = {}; - - var flags = { bools : {}, strings : {}, unknownFn: null }; - - if (typeof opts['unknown'] === 'function') { - flags.unknownFn = opts['unknown']; - } - - if (typeof opts['boolean'] === 'boolean' && opts['boolean']) { - flags.allBools = true; - } else { - [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { - flags.bools[key] = true; - }); - } - - var aliases = {}; - Object.keys(opts.alias || {}).forEach(function (key) { - aliases[key] = [].concat(opts.alias[key]); - aliases[key].forEach(function (x) { - aliases[x] = [key].concat(aliases[key].filter(function (y) { - return x !== y; - })); - }); - }); - - [].concat(opts.string).filter(Boolean).forEach(function (key) { - flags.strings[key] = true; - if (aliases[key]) { - flags.strings[aliases[key]] = true; - } - }); - - var defaults = opts['default'] || {}; - - var argv = { _ : [] }; - Object.keys(flags.bools).forEach(function (key) { - setArg(key, defaults[key] === undefined ? false : defaults[key]); - }); - - var notFlags = []; - - if (args.indexOf('--') !== -1) { - notFlags = args.slice(args.indexOf('--')+1); - args = args.slice(0, args.indexOf('--')); - } - - function argDefined(key, arg) { - return (flags.allBools && /^--[^=]+$/.test(arg)) || - flags.strings[key] || flags.bools[key] || aliases[key]; - } - - function setArg (key, val, arg) { - if (arg && flags.unknownFn && !argDefined(key, arg)) { - if (flags.unknownFn(arg) === false) return; - } - - var value = !flags.strings[key] && isNumber(val) - ? Number(val) : val - ; - setKey(argv, key.split('.'), value); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), value); - }); - } - - function setKey (obj, keys, value) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - if (o[key] === undefined) o[key] = {}; - o = o[key]; - }); - - var key = keys[keys.length - 1]; - if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') { - o[key] = value; - } - else if (Array.isArray(o[key])) { - o[key].push(value); - } - else { - o[key] = [ o[key], value ]; - } - } - - function aliasIsBoolean(key) { - return aliases[key].some(function (x) { - return flags.bools[x]; - }); - } - - for (var i = 0; i < args.length; i++) { - var arg = args[i]; - - if (/^--.+=/.test(arg)) { - // Using [\s\S] instead of . because js doesn't support the - // 'dotall' regex modifier. See: - // http://stackoverflow.com/a/1068308/13216 - var m = arg.match(/^--([^=]+)=([\s\S]*)$/); - var key = m[1]; - var value = m[2]; - if (flags.bools[key]) { - value = value !== 'false'; - } - setArg(key, value, arg); - } - else if (/^--no-.+/.test(arg)) { - var key = arg.match(/^--no-(.+)/)[1]; - setArg(key, false, arg); - } - else if (/^--.+/.test(arg)) { - var key = arg.match(/^--(.+)/)[1]; - var next = args[i + 1]; - if (next !== undefined && !/^-/.test(next) - && !flags.bools[key] - && !flags.allBools - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, next, arg); - i++; - } - else if (/^(true|false)$/.test(next)) { - setArg(key, next === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - else if (/^-[^-]+/.test(arg)) { - var letters = arg.slice(1,-1).split(''); - - var broken = false; - for (var j = 0; j < letters.length; j++) { - var next = arg.slice(j+2); - - if (next === '-') { - setArg(letters[j], next, arg) - continue; - } - - if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) { - setArg(letters[j], next.split('=')[1], arg); - broken = true; - break; - } - - if (/[A-Za-z]/.test(letters[j]) - && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { - setArg(letters[j], next, arg); - broken = true; - break; - } - - if (letters[j+1] && letters[j+1].match(/\W/)) { - setArg(letters[j], arg.slice(j+2), arg); - broken = true; - break; - } - else { - setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg); - } - } - - var key = arg.slice(-1)[0]; - if (!broken && key !== '-') { - if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1]) - && !flags.bools[key] - && (aliases[key] ? !aliasIsBoolean(key) : true)) { - setArg(key, args[i+1], arg); - i++; - } - else if (args[i+1] && /true|false/.test(args[i+1])) { - setArg(key, args[i+1] === 'true', arg); - i++; - } - else { - setArg(key, flags.strings[key] ? '' : true, arg); - } - } - } - else { - if (!flags.unknownFn || flags.unknownFn(arg) !== false) { - argv._.push( - flags.strings['_'] || !isNumber(arg) ? arg : Number(arg) - ); - } - if (opts.stopEarly) { - argv._.push.apply(argv._, args.slice(i + 1)); - break; - } - } - } - - Object.keys(defaults).forEach(function (key) { - if (!hasKey(argv, key.split('.'))) { - setKey(argv, key.split('.'), defaults[key]); - - (aliases[key] || []).forEach(function (x) { - setKey(argv, x.split('.'), defaults[key]); - }); - } - }); - - if (opts['--']) { - argv['--'] = new Array(); - notFlags.forEach(function(key) { - argv['--'].push(key); - }); - } - else { - notFlags.forEach(function(key) { - argv._.push(key); - }); - } - - return argv; -}; - -function hasKey (obj, keys) { - var o = obj; - keys.slice(0,-1).forEach(function (key) { - o = (o[key] || {}); - }); - - var key = keys[keys.length - 1]; - return key in o; -} - -function isNumber (x) { - if (typeof x === 'number') return true; - if (/^0x[0-9a-f]+$/i.test(x)) return true; - return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); -} - diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/package.json b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/package.json deleted file mode 100644 index 980948018..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "_args": [ - [ - "minimist@^1.1.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/sane" - ], - [ - "minimist@^1.1.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/node-notifier" - ] - ], - "_from": "minimist@>=1.1.1 <2.0.0", - "_id": "minimist@1.2.0", - "_inCache": true, - "_installable": true, - "_location": "/node-notifier/minimist", - "_nodeVersion": "2.4.0", - "_npmUser": { - "email": "substack@gmail.com", - "name": "substack" - }, - "_npmVersion": "3.2.2", - "_phantomChildren": {}, - "_requested": { - "name": "minimist", - "raw": "minimist@^1.1.1", - "rawSpec": "^1.1.1", - "scope": null, - "spec": ">=1.1.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/node-notifier" - ], - "_shrinkwrap": null, - "_spec": "minimist@^1.1.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/node-notifier", - "author": { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/minimist/issues" - }, - "dependencies": {}, - "description": "parse argument options", - "devDependencies": { - "covert": "^1.0.0", - "tap": "~0.4.0", - "tape": "^3.5.0" - }, - "directories": {}, - "dist": { - "shasum": "a35008b20f41383eec1fb914f4cd5df79a264284", - "tarball": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz" - }, - "gitHead": "dc624482fcfec5bc669c68cdb861f00573ed4e64", - "homepage": "https://github.com/substack/minimist", - "keywords": [ - "argv", - "getopt", - "parser", - "optimist" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "mail@substack.net", - "name": "substack" - } - ], - "name": "minimist", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/substack/minimist.git" - }, - "scripts": { - "coverage": "covert test/*.js", - "test": "tap test/*.js" - }, - "testling": { - "browsers": [ - "ie/6..latest", - "ff/5", - "firefox/latest", - "chrome/10", - "chrome/latest", - "safari/5.1", - "safari/latest", - "opera/12" - ], - "files": "test/*.js" - }, - "version": "1.2.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/readme.markdown b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/readme.markdown deleted file mode 100644 index 30a74cf8c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/readme.markdown +++ /dev/null @@ -1,91 +0,0 @@ -# minimist - -parse argument options - -This module is the guts of optimist's argument parser without all the -fanciful decoration. - -[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist) - -[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist) - -# example - -``` js -var argv = require('minimist')(process.argv.slice(2)); -console.dir(argv); -``` - -``` -$ node example/parse.js -a beep -b boop -{ _: [], a: 'beep', b: 'boop' } -``` - -``` -$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz -{ _: [ 'foo', 'bar', 'baz' ], - x: 3, - y: 4, - n: 5, - a: true, - b: true, - c: true, - beep: 'boop' } -``` - -# methods - -``` js -var parseArgs = require('minimist') -``` - -## var argv = parseArgs(args, opts={}) - -Return an argument object `argv` populated with the array arguments from `args`. - -`argv._` contains all the arguments that didn't have an option associated with -them. - -Numeric-looking arguments will be returned as numbers unless `opts.string` or -`opts.boolean` is set for that argument name. - -Any arguments after `'--'` will not be parsed and will end up in `argv._`. - -options can be: - -* `opts.string` - a string or array of strings argument names to always treat as -strings -* `opts.boolean` - a boolean, string or array of strings to always treat as -booleans. if `true` will treat all double hyphenated arguments without equal signs -as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`) -* `opts.alias` - an object mapping string names to strings or arrays of string -argument names to use as aliases -* `opts.default` - an object mapping string argument names to default values -* `opts.stopEarly` - when true, populate `argv._` with everything after the -first non-option -* `opts['--']` - when true, populate `argv._` with everything before the `--` -and `argv['--']` with everything after the `--`. Here's an example: -* `opts.unknown` - a function which is invoked with a command line parameter not -defined in the `opts` configuration object. If the function returns `false`, the -unknown option is not added to `argv`. - -``` -> require('./')('one two three -- four five --six'.split(' '), { '--': true }) -{ _: [ 'one', 'two', 'three' ], - '--': [ 'four', 'five', '--six' ] } -``` - -Note that with `opts['--']` set, parsing for arguments still stops after the -`--`. - -# install - -With [npm](https://npmjs.org) do: - -``` -npm install minimist -``` - -# license - -MIT diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/all_bool.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/all_bool.js deleted file mode 100644 index ac835483d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/all_bool.js +++ /dev/null @@ -1,32 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('flag boolean true (default all --args to boolean)', function (t) { - var argv = parse(['moo', '--honk', 'cow'], { - boolean: true - }); - - t.deepEqual(argv, { - honk: true, - _: ['moo', 'cow'] - }); - - t.deepEqual(typeof argv.honk, 'boolean'); - t.end(); -}); - -test('flag boolean true only affects double hyphen arguments without equals signs', function (t) { - var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], { - boolean: true - }); - - t.deepEqual(argv, { - honk: true, - tacos: 'good', - p: 55, - _: ['moo', 'cow'] - }); - - t.deepEqual(typeof argv.honk, 'boolean'); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/bool.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/bool.js deleted file mode 100644 index 14b0717ce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/bool.js +++ /dev/null @@ -1,166 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('flag boolean default false', function (t) { - var argv = parse(['moo'], { - boolean: ['t', 'verbose'], - default: { verbose: false, t: false } - }); - - t.deepEqual(argv, { - verbose: false, - t: false, - _: ['moo'] - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); - -}); - -test('boolean groups', function (t) { - var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], { - boolean: ['x','y','z'] - }); - - t.deepEqual(argv, { - x : true, - y : false, - z : true, - _ : [ 'one', 'two', 'three' ] - }); - - t.deepEqual(typeof argv.x, 'boolean'); - t.deepEqual(typeof argv.y, 'boolean'); - t.deepEqual(typeof argv.z, 'boolean'); - t.end(); -}); -test('boolean and alias with chainable api', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - herp: { alias: 'h', boolean: true } - }; - var aliasedArgv = parse(aliased, { - boolean: 'herp', - alias: { h: 'herp' } - }); - var propertyArgv = parse(regular, { - boolean: 'herp', - alias: { h: 'herp' } - }); - var expected = { - herp: true, - h: true, - '_': [ 'derp' ] - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias with options hash', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - alias: { 'h': 'herp' }, - boolean: 'herp' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - '_': [ 'derp' ] - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias array with options hash', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var alt = [ '--harp', 'derp' ]; - var opts = { - alias: { 'h': ['herp', 'harp'] }, - boolean: 'h' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var altPropertyArgv = parse(alt, opts); - var expected = { - harp: true, - herp: true, - h: true, - '_': [ 'derp' ] - }; - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.same(altPropertyArgv, expected); - t.end(); -}); - -test('boolean and alias using explicit true', function (t) { - var aliased = [ '-h', 'true' ]; - var regular = [ '--herp', 'true' ]; - var opts = { - alias: { h: 'herp' }, - boolean: 'h' - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - var expected = { - herp: true, - h: true, - '_': [ ] - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -// regression, see https://github.com/substack/node-optimist/issues/71 -test('boolean and --x=true', function(t) { - var parsed = parse(['--boool', '--other=true'], { - boolean: 'boool' - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'true'); - - parsed = parse(['--boool', '--other=false'], { - boolean: 'boool' - }); - - t.same(parsed.boool, true); - t.same(parsed.other, 'false'); - t.end(); -}); - -test('boolean --boool=true', function (t) { - var parsed = parse(['--boool=true'], { - default: { - boool: false - }, - boolean: ['boool'] - }); - - t.same(parsed.boool, true); - t.end(); -}); - -test('boolean --boool=false', function (t) { - var parsed = parse(['--boool=false'], { - default: { - boool: true - }, - boolean: ['boool'] - }); - - t.same(parsed.boool, false); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/dash.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/dash.js deleted file mode 100644 index 5a4fa5be4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/dash.js +++ /dev/null @@ -1,31 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('-', function (t) { - t.plan(5); - t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] }); - t.deepEqual(parse([ '-' ]), { _: [ '-' ] }); - t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] }); - t.deepEqual( - parse([ '-b', '-' ], { boolean: 'b' }), - { b: true, _: [ '-' ] } - ); - t.deepEqual( - parse([ '-s', '-' ], { string: 's' }), - { s: '-', _: [] } - ); -}); - -test('-a -- b', function (t) { - t.plan(3); - t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] }); - t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); - t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] }); -}); - -test('move arguments after the -- into their own `--` array', function(t) { - t.plan(1); - t.deepEqual( - parse([ '--name', 'John', 'before', '--', 'after' ], { '--': true }), - { name: 'John', _: [ 'before' ], '--': [ 'after' ] }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/default_bool.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/default_bool.js deleted file mode 100644 index 780a31127..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/default_bool.js +++ /dev/null @@ -1,35 +0,0 @@ -var test = require('tape'); -var parse = require('../'); - -test('boolean default true', function (t) { - var argv = parse([], { - boolean: 'sometrue', - default: { sometrue: true } - }); - t.equal(argv.sometrue, true); - t.end(); -}); - -test('boolean default false', function (t) { - var argv = parse([], { - boolean: 'somefalse', - default: { somefalse: false } - }); - t.equal(argv.somefalse, false); - t.end(); -}); - -test('boolean default to null', function (t) { - var argv = parse([], { - boolean: 'maybe', - default: { maybe: null } - }); - t.equal(argv.maybe, null); - var argv = parse(['--maybe'], { - boolean: 'maybe', - default: { maybe: null } - }); - t.equal(argv.maybe, true); - t.end(); - -}) diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/dotted.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/dotted.js deleted file mode 100644 index d8b3e856e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/dotted.js +++ /dev/null @@ -1,22 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('dotted alias', function (t) { - var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); - t.equal(argv.a.b, 22); - t.equal(argv.aa.bb, 22); - t.end(); -}); - -test('dotted default', function (t) { - var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}}); - t.equal(argv.a.b, 11); - t.equal(argv.aa.bb, 11); - t.end(); -}); - -test('dotted default with no alias', function (t) { - var argv = parse('', {default: {'a.b': 11}}); - t.equal(argv.a.b, 11); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/kv_short.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/kv_short.js deleted file mode 100644 index f813b3050..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/kv_short.js +++ /dev/null @@ -1,16 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('short -k=v' , function (t) { - t.plan(1); - - var argv = parse([ '-b=123' ]); - t.deepEqual(argv, { b: 123, _: [] }); -}); - -test('multi short -k=v' , function (t) { - t.plan(1); - - var argv = parse([ '-a=whatever', '-b=robots' ]); - t.deepEqual(argv, { a: 'whatever', b: 'robots', _: [] }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/long.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/long.js deleted file mode 100644 index 5d3a1e09d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/long.js +++ /dev/null @@ -1,31 +0,0 @@ -var test = require('tape'); -var parse = require('../'); - -test('long opts', function (t) { - t.deepEqual( - parse([ '--bool' ]), - { bool : true, _ : [] }, - 'long boolean' - ); - t.deepEqual( - parse([ '--pow', 'xixxle' ]), - { pow : 'xixxle', _ : [] }, - 'long capture sp' - ); - t.deepEqual( - parse([ '--pow=xixxle' ]), - { pow : 'xixxle', _ : [] }, - 'long capture eq' - ); - t.deepEqual( - parse([ '--host', 'localhost', '--port', '555' ]), - { host : 'localhost', port : 555, _ : [] }, - 'long captures sp' - ); - t.deepEqual( - parse([ '--host=localhost', '--port=555' ]), - { host : 'localhost', port : 555, _ : [] }, - 'long captures eq' - ); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/num.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/num.js deleted file mode 100644 index 2cc77f4d6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/num.js +++ /dev/null @@ -1,36 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('nums', function (t) { - var argv = parse([ - '-x', '1234', - '-y', '5.67', - '-z', '1e7', - '-w', '10f', - '--hex', '0xdeadbeef', - '789' - ]); - t.deepEqual(argv, { - x : 1234, - y : 5.67, - z : 1e7, - w : '10f', - hex : 0xdeadbeef, - _ : [ 789 ] - }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv.y, 'number'); - t.deepEqual(typeof argv.z, 'number'); - t.deepEqual(typeof argv.w, 'string'); - t.deepEqual(typeof argv.hex, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); - -test('already a number', function (t) { - var argv = parse([ '-x', 1234, 789 ]); - t.deepEqual(argv, { x : 1234, _ : [ 789 ] }); - t.deepEqual(typeof argv.x, 'number'); - t.deepEqual(typeof argv._[0], 'number'); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/parse.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/parse.js deleted file mode 100644 index 7b4a2a17c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/parse.js +++ /dev/null @@ -1,197 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('parse args', function (t) { - t.deepEqual( - parse([ '--no-moo' ]), - { moo : false, _ : [] }, - 'no' - ); - t.deepEqual( - parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), - { v : ['a','b','c'], _ : [] }, - 'multi' - ); - t.end(); -}); - -test('comprehensive', function (t) { - t.deepEqual( - parse([ - '--name=meowmers', 'bare', '-cats', 'woo', - '-h', 'awesome', '--multi=quux', - '--key', 'value', - '-b', '--bool', '--no-meep', '--multi=baz', - '--', '--not-a-flag', 'eek' - ]), - { - c : true, - a : true, - t : true, - s : 'woo', - h : 'awesome', - b : true, - bool : true, - key : 'value', - multi : [ 'quux', 'baz' ], - meep : false, - name : 'meowmers', - _ : [ 'bare', '--not-a-flag', 'eek' ] - } - ); - t.end(); -}); - -test('flag boolean', function (t) { - var argv = parse([ '-t', 'moo' ], { boolean: 't' }); - t.deepEqual(argv, { t : true, _ : [ 'moo' ] }); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('flag boolean value', function (t) { - var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], { - boolean: [ 't', 'verbose' ], - default: { verbose: true } - }); - - t.deepEqual(argv, { - verbose: false, - t: true, - _: ['moo'] - }); - - t.deepEqual(typeof argv.verbose, 'boolean'); - t.deepEqual(typeof argv.t, 'boolean'); - t.end(); -}); - -test('newlines in params' , function (t) { - var args = parse([ '-s', "X\nX" ]) - t.deepEqual(args, { _ : [], s : "X\nX" }); - - // reproduce in bash: - // VALUE="new - // line" - // node program.js --s="$VALUE" - args = parse([ "--s=X\nX" ]) - t.deepEqual(args, { _ : [], s : "X\nX" }); - t.end(); -}); - -test('strings' , function (t) { - var s = parse([ '-s', '0001234' ], { string: 's' }).s; - t.equal(s, '0001234'); - t.equal(typeof s, 'string'); - - var x = parse([ '-x', '56' ], { string: 'x' }).x; - t.equal(x, '56'); - t.equal(typeof x, 'string'); - t.end(); -}); - -test('stringArgs', function (t) { - var s = parse([ ' ', ' ' ], { string: '_' })._; - t.same(s.length, 2); - t.same(typeof s[0], 'string'); - t.same(s[0], ' '); - t.same(typeof s[1], 'string'); - t.same(s[1], ' '); - t.end(); -}); - -test('empty strings', function(t) { - var s = parse([ '-s' ], { string: 's' }).s; - t.equal(s, ''); - t.equal(typeof s, 'string'); - - var str = parse([ '--str' ], { string: 'str' }).str; - t.equal(str, ''); - t.equal(typeof str, 'string'); - - var letters = parse([ '-art' ], { - string: [ 'a', 't' ] - }); - - t.equal(letters.a, ''); - t.equal(letters.r, true); - t.equal(letters.t, ''); - - t.end(); -}); - - -test('string and alias', function(t) { - var x = parse([ '--str', '000123' ], { - string: 's', - alias: { s: 'str' } - }); - - t.equal(x.str, '000123'); - t.equal(typeof x.str, 'string'); - t.equal(x.s, '000123'); - t.equal(typeof x.s, 'string'); - - var y = parse([ '-s', '000123' ], { - string: 'str', - alias: { str: 's' } - }); - - t.equal(y.str, '000123'); - t.equal(typeof y.str, 'string'); - t.equal(y.s, '000123'); - t.equal(typeof y.s, 'string'); - t.end(); -}); - -test('slashBreak', function (t) { - t.same( - parse([ '-I/foo/bar/baz' ]), - { I : '/foo/bar/baz', _ : [] } - ); - t.same( - parse([ '-xyz/foo/bar/baz' ]), - { x : true, y : true, z : '/foo/bar/baz', _ : [] } - ); - t.end(); -}); - -test('alias', function (t) { - var argv = parse([ '-f', '11', '--zoom', '55' ], { - alias: { z: 'zoom' } - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.f, 11); - t.end(); -}); - -test('multiAlias', function (t) { - var argv = parse([ '-f', '11', '--zoom', '55' ], { - alias: { z: [ 'zm', 'zoom' ] } - }); - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.z, argv.zm); - t.equal(argv.f, 11); - t.end(); -}); - -test('nested dotted objects', function (t) { - var argv = parse([ - '--foo.bar', '3', '--foo.baz', '4', - '--foo.quux.quibble', '5', '--foo.quux.o_O', - '--beep.boop' - ]); - - t.same(argv.foo, { - bar : 3, - baz : 4, - quux : { - quibble : 5, - o_O : true - } - }); - t.same(argv.beep, { boop : true }); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/parse_modified.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/parse_modified.js deleted file mode 100644 index ab620dc5e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/parse_modified.js +++ /dev/null @@ -1,9 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('parse with modifier functions' , function (t) { - t.plan(1); - - var argv = parse([ '-b', '123' ], { boolean: 'b' }); - t.deepEqual(argv, { b: true, _: [123] }); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/short.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/short.js deleted file mode 100644 index d513a1c25..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/short.js +++ /dev/null @@ -1,67 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('numeric short args', function (t) { - t.plan(2); - t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] }); - t.deepEqual( - parse([ '-123', '456' ]), - { 1: true, 2: true, 3: 456, _: [] } - ); -}); - -test('short', function (t) { - t.deepEqual( - parse([ '-b' ]), - { b : true, _ : [] }, - 'short boolean' - ); - t.deepEqual( - parse([ 'foo', 'bar', 'baz' ]), - { _ : [ 'foo', 'bar', 'baz' ] }, - 'bare' - ); - t.deepEqual( - parse([ '-cats' ]), - { c : true, a : true, t : true, s : true, _ : [] }, - 'group' - ); - t.deepEqual( - parse([ '-cats', 'meow' ]), - { c : true, a : true, t : true, s : 'meow', _ : [] }, - 'short group next' - ); - t.deepEqual( - parse([ '-h', 'localhost' ]), - { h : 'localhost', _ : [] }, - 'short capture' - ); - t.deepEqual( - parse([ '-h', 'localhost', '-p', '555' ]), - { h : 'localhost', p : 555, _ : [] }, - 'short captures' - ); - t.end(); -}); - -test('mixed short bool and capture', function (t) { - t.same( - parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ] - } - ); - t.end(); -}); - -test('short and long', function (t) { - t.deepEqual( - parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ] - } - ); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/stop_early.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/stop_early.js deleted file mode 100644 index bdf9fbcb0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/stop_early.js +++ /dev/null @@ -1,15 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('stops parsing on the first non-option when stopEarly is set', function (t) { - var argv = parse(['--aaa', 'bbb', 'ccc', '--ddd'], { - stopEarly: true - }); - - t.deepEqual(argv, { - aaa: 'bbb', - _: ['ccc', '--ddd'] - }); - - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/unknown.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/unknown.js deleted file mode 100644 index 462a36bdd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/unknown.js +++ /dev/null @@ -1,102 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('boolean and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = [ '-h', 'true', '--derp', 'true' ]; - var regular = [ '--herp', 'true', '-d', 'true' ]; - var opts = { - alias: { h: 'herp' }, - boolean: 'h', - unknown: unknownFn - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - - t.same(unknown, ['--derp', '-d']); - t.end(); -}); - -test('flag boolean true any double hyphen argument is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var argv = parse(['--honk', '--tacos=good', 'cow', '-p', '55'], { - boolean: true, - unknown: unknownFn - }); - t.same(unknown, ['--tacos=good', 'cow', '-p']); - t.same(argv, { - honk: true, - _: [] - }); - t.end(); -}); - -test('string and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = [ '-h', 'hello', '--derp', 'goodbye' ]; - var regular = [ '--herp', 'hello', '-d', 'moon' ]; - var opts = { - alias: { h: 'herp' }, - string: 'h', - unknown: unknownFn - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - - t.same(unknown, ['--derp', '-d']); - t.end(); -}); - -test('default and alias is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = [ '-h', 'hello' ]; - var regular = [ '--herp', 'hello' ]; - var opts = { - default: { 'h': 'bar' }, - alias: { 'h': 'herp' }, - unknown: unknownFn - }; - var aliasedArgv = parse(aliased, opts); - var propertyArgv = parse(regular, opts); - - t.same(unknown, []); - t.end(); - unknownFn(); // exercise fn for 100% coverage -}); - -test('value following -- is not unknown', function (t) { - var unknown = []; - function unknownFn(arg) { - unknown.push(arg); - return false; - } - var aliased = [ '--bad', '--', 'good', 'arg' ]; - var opts = { - '--': true, - unknown: unknownFn - }; - var argv = parse(aliased, opts); - - t.same(unknown, ['--bad']); - t.same(argv, { - '--': ['good', 'arg'], - '_': [] - }) - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/whitespace.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/whitespace.js deleted file mode 100644 index 8a52a58ce..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/node_modules/minimist/test/whitespace.js +++ /dev/null @@ -1,8 +0,0 @@ -var parse = require('../'); -var test = require('tape'); - -test('whitespace should be whitespace' , function (t) { - t.plan(1); - var x = parse([ '-x', '\t' ]).x; - t.equal(x, '\t'); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/balloon.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/balloon.js deleted file mode 100644 index c395311e6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/balloon.js +++ /dev/null @@ -1,149 +0,0 @@ -/** - * Wrapper for the notifu 1.6 (http://www.paralint.com/projects/notifu/) - -Usage -/t The type of message to display values are: - info The message is an informational message - warn The message is an warning message - error The message is an error message -/d The number of milliseconds to display (omit or 0 for infinit) -/p The title (or prompt) of the ballon -/m The message text -/i Specify an icon to use ("parent" uses the icon of the parent process) -/e Enable ballon tips in the registry (for this user only) -/q Do not play a sound when the tooltip is displayed -/w Show the tooltip even if the user is in the quiet period that follows his very first login (Windows 7 and up) -/xp Use IUserNotification interface event when IUserNotification2 is available - - -// Kill codes: - 2 = Timeout - 3 = Clicked - 4 = Closed or faded out - - */ -var path = require('path'), - notifier = path.resolve(__dirname, '../vendor/notifu/notifu'), - utils = require('../lib/utils'), - checkGrowl = require('../lib/checkGrowl'), - Toaster = require('./toaster'), - Growl = require('./growl'), - os = require('os'), - cloneDeep = require('lodash.clonedeep'); - -var EventEmitter = require('events').EventEmitter; -var util = require('util'); - -var hasGrowl = void 0; - -module.exports = WindowsBalloon; - -function WindowsBalloon (options) { - options = cloneDeep(options || {}); - if (!(this instanceof WindowsBalloon)) { - return new WindowsBalloon(options); - } - - this.options = options; - - EventEmitter.call(this); -} -util.inherits(WindowsBalloon, EventEmitter); - -WindowsBalloon.prototype.notify = function (options, callback) { - var fallback, notifierOptions = this.options; - options = cloneDeep(options || {}); - callback = callback || function () {}; - - if (typeof options === 'string') options = { - title: 'node-notifier', - message: options - }; - - var actionJackedCallback = utils.actionJackerDecorator(this, options, callback, function (data) { - if (data === 'activate') { - return 'click'; - } - if (data === 'timeout') { - return 'timeout'; - } - return false; - }); - - if (!!this.options.withFallback && utils.isWin8()) { - fallback = fallback || new Toaster(notifierOptions); - return fallback.notify(options, callback); - } - - if (!!this.options.withFallback && (!utils.isLessThanWin8() || hasGrowl === true)) { - fallback = fallback || new Growl(notifierOptions); - return fallback.notify(options, callback); - } - - if (!this.options.withFallback || hasGrowl === false) { - doNotification(options, notifierOptions, actionJackedCallback); - return this; - } - - checkGrowl(notifierOptions, function (hasGrowlResult) { - hasGrowl = hasGrowlResult; - - if (hasGrowl) { - fallback = fallback || new Growl(notifierOptions); - return fallback.notify(options, callback); - } - - doNotification(options, notifierOptions, actionJackedCallback); - }); - - return this; -}; - -var allowedArguments = ["t", "d", "p", "m", "i", "e", "q", "w", "xp"]; - -function doNotification (options, notifierOptions, callback) { - var is64Bit = os.arch() === 'x64'; - options = options || {}; - options = utils.mapToNotifu(options); - options.p = options.p || 'Node Notification:'; - - var fullNotifierPath = notifier + (is64Bit ? '64' : '') + '.exe'; - var localNotifier = notifierOptions.customPath || fullNotifierPath; - - if (!options.m) { - callback(new Error('Message is required.')); - return this; - } - - var argsList = utils.constructArgumentList(options, { - wrapper: '', - noEscape: true, - explicitTrue: true, - allowedArguments: allowedArguments - }); - - if (!!options.wait) { - return utils.fileCommand(localNotifier, argsList, function (error, data) { - var action = fromErrorCodeToAction(error.code); - if (action === 'error') return callback(error, data); - - return callback(null, action); - }); - } - utils.immediateFileCommand(localNotifier, argsList, callback); -} - -function fromErrorCodeToAction (errorCode) { - switch (errorCode) { - case 2: - return 'timeout'; - case 3: - case 6: - case 7: - return 'activate'; - case 4: - return 'close'; - default: - return 'error'; - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/growl.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/growl.js deleted file mode 100644 index 7924f5778..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/growl.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Wrapper for the growly module - */ -var utils = require('../lib/utils'), - checkGrowl = require('../lib/checkGrowl'), - growly = require('growly'), - cloneDeep = require('lodash.clonedeep'); - -var EventEmitter = require('events').EventEmitter; -var util = require('util'); - -var errorMessageNotFound = 'Couldn\'t connect to growl (might be used as a fallback). Make sure it is running'; - -module.exports = Growl; - -var hasGrowl = void 0; - -function Growl (options) { - options = cloneDeep(options || {}); - if (!(this instanceof Growl)) { - return new Growl(options); - } - - growly.appname = options.name || 'Node'; - this.options = options; - - EventEmitter.call(this); -} -util.inherits(Growl, EventEmitter); - - -Growl.prototype.notify = function (options, callback) { - growly.setHost(this.options.host, this.options.port); - options = cloneDeep(options || {}); - - if (typeof options === 'string') options = { - title: 'node-notifier', - message: options - }; - - callback = utils.actionJackerDecorator(this, options, callback, function (data) { - if (data === 'click') { - return 'click'; - } - if (data === 'timedout') { - return 'timeout'; - } - return false; - }); - - options = utils.mapToGrowl(options); - - if (!options.message) { - callback(new Error('Message is required.')); - return this; - } - - options.title = options.title || 'Node Notification:'; - - if (hasGrowl || !!options.wait) { - var localCallback = !!options.wait ? callback : function () {}; - growly.notify(options.message, options, localCallback); - if (!options.wait) callback(); - return this; - } - - checkGrowl(growly, function (didHaveGrowl) { - hasGrowl = didHaveGrowl; - if (!didHaveGrowl) return callback(new Error(errorMessageNotFound)); - growly.notify(options.message, options); - callback(); - }); - return this; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/notificationcenter.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/notificationcenter.js deleted file mode 100644 index 09e341c5d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/notificationcenter.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * A Node.js wrapper for terminal-notify (with fallback). - */ -var path = require('path'), - notifier = path.join(__dirname, '../vendor/terminal-notifier.app/Contents/MacOS/terminal-notifier'), - utils = require('../lib/utils'), - Growl = require('./growl'), - cloneDeep = require('lodash.clonedeep'); - -var EventEmitter = require('events').EventEmitter; -var util = require('util'); - -var errorMessageOsX = 'You need Mac OS X 10.8 or above to use NotificationCenter,' + - ' or use Growl fallback with constructor option {withFallback: true}.'; - -module.exports = NotificationCenter; - -function NotificationCenter (options) { - options = cloneDeep(options || {}); - if (!(this instanceof NotificationCenter)) { - return new NotificationCenter(options); - } - this.options = options; - - EventEmitter.call(this); -} -util.inherits(NotificationCenter, EventEmitter); -var activeId = null; - -NotificationCenter.prototype.notify = function (options, callback) { - var fallbackNotifier = null, id = identificator(); - options = cloneDeep(options || {}); - activeId = id; - - if (typeof options === 'string') options = { - title: 'node-notifier', - message: options - }; - - callback = callback || function () {}; - var actionJackedCallback = utils.actionJackerDecorator(this, options, callback, function (data) { - if (activeId !== id) return false; - - if (data === 'activate') { - return 'click'; - } - if (data === 'timeout') { - return 'timeout'; - } - return false; - }); - - options = utils.mapToMac(options); - if (!!options.wait) { - options.wait = 'YES'; - } - - if (!options.message && !options.group && !options.list && !options.remove) { - callback(new Error('Message, group, remove or list property is required.')); - return this; - } - - var argsList = utils.constructArgumentList(options); - - if(utils.isMountainLion()) { - utils.fileCommand(this.options.customPath || notifier, argsList, actionJackedCallback); - return this; - } - - if (fallbackNotifier || !!this.options.withFallback) { - fallbackNotifier = fallbackNotifier || new Growl(this.options); - return fallbackNotifier.notify(options, callback); - } - - callback(new Error(errorMessageOsX)); - return this; -}; - -function identificator () { - return { _ref: 'val' }; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/notifysend.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/notifysend.js deleted file mode 100644 index fe8b88077..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/notifysend.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Node.js wrapper for "notify-send". - */ -var os = require('os'), - which = require('which'), - utils = require('../lib/utils'), - cloneDeep = require('lodash.clonedeep'); - -var EventEmitter = require('events').EventEmitter; -var util = require('util'); - -var notifier = 'notify-send', hasNotifier = void 0; - -module.exports = NotifySend; - -function NotifySend (options) { - options = cloneDeep(options || {}); - if (!(this instanceof NotifySend)) { - return new NotifySend(options); - } - - this.options = options; - - EventEmitter.call(this); -} -util.inherits(NotifySend, EventEmitter); - -NotifySend.prototype.notify = function (options, callback) { - options = cloneDeep(options || {}); - callback = callback || function () {}; - - if (typeof options === 'string') options = { - title: 'node-notifier', - message: options - }; - - if (!options.message) { - callback(new Error('Message is required.')); - return this; - } - - if (os.type() !== 'Linux') { - callback(new Error('Only supported on Linux systems')); - return this; - } - - if (hasNotifier === false) { - callback(new Error('notify-send must be installed on the system.')); - return this; - } - - if (hasNotifier || !!this.options.suppressOsdCheck) { - doNotification(options, callback); - return this; - } - - try { - hasNotifier = !!which.sync(notifier); - doNotification(options, callback); - } catch (err) { - hasNotifier = false; - return callback(err); - }; - - return this; -}; - -var allowedArguments = [ - "urgency", - "expire-time", - "icon", - "category", - "hint" -]; - -function doNotification (options, callback) { - var initial, argsList; - - options = utils.mapToNotifySend(options); - options.title = options.title || 'Node Notification:'; - - initial = [options.title, options.message]; - delete options.title; - delete options.message; - - argsList = utils.constructArgumentList(options, { - initial: initial, - keyExtra: '-', - allowedArguments: allowedArguments - }); - - utils.command(notifier, argsList, callback); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/toaster.js b/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/toaster.js deleted file mode 100644 index 4b0ab4992..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/notifiers/toaster.js +++ /dev/null @@ -1,67 +0,0 @@ -/** - * Wrapper for the toaster (https://github.com/nels-o/toaster) - */ -var path = require('path'), - notifier = path.resolve(__dirname, '../vendor/toaster/toast.exe'), - utils = require('../lib/utils'), - Balloon = require('./balloon'), - cloneDeep = require('lodash.clonedeep'); - -var EventEmitter = require('events').EventEmitter; -var util = require('util'); - -var fallback = void 0; - -module.exports = WindowsToaster; - -function WindowsToaster (options) { - options = cloneDeep(options || {}); - if (!(this instanceof WindowsToaster)) { - return new WindowsToaster(options); - } - - this.options = options; - - EventEmitter.call(this); -} -util.inherits(WindowsToaster, EventEmitter); - -WindowsToaster.prototype.notify = function (options, callback) { - options = cloneDeep(options || {}); - callback = callback || function () {}; - - if (typeof options === 'string') options = { - title: 'node-notifier', - message: options - }; - - var actionJackedCallback = utils.actionJackerDecorator(this, options, callback, function (data) { - if (data === 'activate') { - return 'click'; - } - if (data === 'timeout') { - return 'timeout'; - } - return false; - }); - - options.title = options.title || 'Node Notification:'; - - if (!options.message) { - callback(new Error('Message is required.')); - return this; - } - - if (!utils.isWin8() && !!this.options.withFallback) { - fallback = fallback || new Balloon(this.options); - return fallback.notify(options, callback); - } - - options = utils.mapToWin8(options); - var argsList = utils.constructArgumentList(options, { - wrapper: '', - noEscape: true - }); - utils.fileCommand(this.options.customPath || notifier, argsList, actionJackedCallback); - return this; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/package.json b/fundamentals/bug-challenge-es6/node_modules/node-notifier/package.json deleted file mode 100644 index 06fe00a39..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/package.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "_args": [ - [ - "node-notifier@^4.6.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli" - ] - ], - "_from": "node-notifier@>=4.6.1 <5.0.0", - "_id": "node-notifier@4.6.1", - "_inCache": true, - "_installable": true, - "_location": "/node-notifier", - "_nodeVersion": "6.3.1", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/node-notifier-4.6.1.tgz_1471811837812_0.47649690927937627" - }, - "_npmUser": { - "email": "mikaelbre@gmail.com", - "name": "mikaelb" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "node-notifier", - "raw": "node-notifier@^4.6.1", - "rawSpec": "^4.6.1", - "scope": null, - "spec": ">=4.6.1 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jest/jest-cli" - ], - "_resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-4.6.1.tgz", - "_shasum": "056d14244f3dcc1ceadfe68af9cff0c5473a33f3", - "_shrinkwrap": null, - "_spec": "node-notifier@^4.6.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jest/node_modules/jest-cli", - "author": { - "name": "Mikael Brevik" - }, - "bin": { - "notify": "./bin.js" - }, - "bugs": { - "url": "https://github.com/mikaelbr/node-notifier/issues" - }, - "dependencies": { - "cli-usage": "^0.1.1", - "growly": "^1.2.0", - "lodash.clonedeep": "^3.0.0", - "minimist": "^1.1.1", - "semver": "^5.1.0", - "shellwords": "^0.1.0", - "which": "^1.0.5" - }, - "description": "A Node.js module for sending notifications on native Mac, Windows (post and pre 8) and Linux (or Growl as fallback)", - "devDependencies": { - "mocha": "^3.0.0", - "should": "^4.0.4" - }, - "directories": { - "example": "example" - }, - "dist": { - "shasum": "056d14244f3dcc1ceadfe68af9cff0c5473a33f3", - "tarball": "https://registry.npmjs.org/node-notifier/-/node-notifier-4.6.1.tgz" - }, - "gitHead": "0dc7ea4dd5bcb9584e9dfda3b69e6f3bf2379968", - "homepage": "https://github.com/mikaelbr/node-notifier#readme", - "keywords": [ - "notification center", - "mac os x 10.8", - "notify", - "terminal-notifier", - "notify-send", - "growl", - "windows 8 notification", - "toaster", - "notification" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "mikaelbre@gmail.com", - "name": "mikaelb" - } - ], - "name": "node-notifier", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/mikaelbr/node-notifier.git" - }, - "scripts": { - "test": "mocha -R spec" - }, - "version": "4.6.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/notifu/notifu.exe b/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/notifu/notifu.exe deleted file mode 100755 index 33938d739d48f4aecc9f955c1d61b7df3f6a7257..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 245248 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
    =cPCzWKZ7I88%Ok+ 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 *#%I~9$Cxi2jD+VUJ5C+Ec**wJXVZfdsldf! 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�hkCV22=uW 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
    b4z-U? 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 A7XSbN diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/Info.plist b/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/Info.plist deleted file mode 100644 index fb76ab30f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/Info.plist +++ /dev/null @@ -1,56 +0,0 @@ - - - - - BuildMachineOSBuild - 15A278b - CFBundleDevelopmentRegion - en - CFBundleExecutable - terminal-notifier - CFBundleIconFile - Terminal - CFBundleIdentifier - nl.superalloy.oss.terminal-notifier - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - terminal-notifier - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.6.3 - CFBundleSignature - ???? - CFBundleSupportedPlatforms - - MacOSX - - CFBundleVersion - 14 - DTCompiler - com.apple.compilers.llvm.clang.1_0 - DTPlatformBuild - 7D1014 - DTPlatformVersion - GM - DTSDKBuild - 15E60 - DTSDKName - macosx10.11 - DTXcode - 0731 - DTXcodeBuild - 7D1014 - LSMinimumSystemVersion - 10.8 - LSUIElement - - NSHumanReadableCopyright - Copyright © 2012-2015 Eloy Durán, Julien Blanchard. All rights reserved. - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/MacOS/terminal-notifier b/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/MacOS/terminal-notifier deleted file mode 100755 index d9c95994bb9f75257a68afa9ab7f63f332a66ec3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73560 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 diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/PkgInfo b/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/PkgInfo deleted file mode 100644 index bd04210fb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/PkgInfo +++ /dev/null @@ -1 +0,0 @@ -APPL???? \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/Resources/Terminal.icns b/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/Resources/Terminal.icns deleted file mode 100644 index 8d8f5c2d2abda38d6a90d896c32b8915e2c64c96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 369386 zcmeFa2V4|M^YA|`5|o^C&N&E(h~e}Mry?Q>3JB+Uo^s}Nf_gd&BAy9B5Jg4BGooTZ zC4)#3R0LF1%sB^)nD|$9&n^psde86o-t&3?FN`}oX}7w%s;hf?zFUTloidY=NO?Hi zyN@BmFkzu%XPUtK0C;zS_a*S|&M;!qp))%>GYoIQO!vtXasQ`2L*P0%K6VmZ$HRBH zu7h;wB)m>~_#|>2?9ame$nsfazZYER2-h`4!h2Un{A9R5UL*XmV)>uaJ{|qE=Tkmi z8uMXc#qb=%;JWQUL3vwV@$n@2tNcVyT>JF#Df~UV_UZF!cyGl0lTRDr{WI**cf1nz zpV4<*<9^HcE9CDQJ>0Yw)K}AyHn!f9KN}nR-q`2|*L~*xaL2Fl?VeAc_Tb;A&t!kk zTe1iHkn70A;eM8#k(r&n zt&NSPGVHIDw#~A&wYRmmx6#4#@p4(VHd$GAR$8ix%yNc_m9w{ZFtXH8Q&CZ17BkE; zc?Ua7O?7oORV76xf?=ZN>%GSpd$tNKTv8GSF04RaR19{$vo+O^jci%n0HQ z#G+<@UelZXd2ML!h8zBG+n-+2>~Ff&z-E6|f_U3p&Bn$8h7rHk*!Tfob?~|Xud55` zJMLeLrso9L{F8V5?#32>qDEK<5$oT23FHd;n-<0T=ewX>)8EO)#!Atz_z3&hPYC{S z|A}A+-f{oBtnff1x&F*)dH}u%_aAfT8=)h?{ZI7lv&PSK|Jl>WvZp^kdy4%G`MltK zvwd1B;d#0%xSn)Tc!-`C?$Z6HU9vB-OZK_1B5(Nl|HJ#2X-7=gr$mMQN85t&#((tT z|J4t@dGorBzc+7CkWEuRE7HZ{<|i9G|K>C8=Sg4xN%ZeC`TU#DpBmtbR{n(N-@Nhr z(8?vk^LySiZ@&KdcOSlXzTqPsi8Q+g6rlQj#>0DT-n@AOmvMhoQ<3wc+R>A+Ci>fu z&kH^%9HZbxU!E6!lx(y--~4Qg&$m1Y`y!uj<*dm0R?iC0w{ey`|F+H3pWmYW|4*NP z*S7q3DF0jM{kV}TeG{&6;Od8;|L^_@?l&44xr^8DKYH}w!NZ4-9>SV^)am|%`wt%7 zfB5jhwTpa4{H(6BaGNZyOcTiGR(mu;)q^~L4S(?GX)0%I?TFF>iT9})gnVOgw zD_-R@O4n4(Bf42wT3cIL!5Is43k%j%%*2>A5>vXuXF6V1F}-zj%TOD03)WoT!qn6R zK4@fQXlS61r=>0`TXz1VvDTb5lQuOqGd3}XbF4uJeLX!zD30oRWuwb?wvRA3Hi6F> z8yUmr3=CO)aXnq7OMFK0oU%c*r?Ew64-Xe>{G=h@K+;HGTTNO1JfG1yt7NKYY-Ce* z<62!$efXrIp^<@(hLVE3g8Vr?BU7bh3g2ky=F!c~oHdd%G1Apgg267UASPb}N>?hG z7-M0LBaAxgYpWwTXL07SWiQZRTooJV^z^iJosi-L0n!=t_bS8NI^qQLtRZBE>UGw z_)6k<2f@lSa89gHfz@EuSv5uSrOHZ*pb^NFlP}~m@&yVS8gM%R3n?(GB!+d-K@PsR z0K{g)X*Kw)yebq)MM*_jQGw{g$}!n+`l!5yx(1vUhYu_9l_fw~MR|F?9CH+^a=)A= zd@bB+@KtzFQ>>!2f}EVZf}E`EK|Uk74YuK5gq#Gv$>E3awG9fqHaFrpQ?%$fQ@H4O zhoZvcdFvXPb{}r{;dUQxkHhV8_`e&61#_28_lN(7wt9qq<*x_BEdJWq3T9f`&wr(Y z+Uw{4djAOB_m#g;hB5X0%Ael3-^z85y$Na7dbdUE~YEib&(4X&hTAWR~}rzcaefUa*hw*245tB*LRj% z!iX*Syzw>jYV~WeSFfUBW7limyXTH@d|~6__e?`Fyi(y6_n!CRH6EUJk6*{TRCg(= zj=9X%F_++VF#=xkbsa9%U97tl4aeYhc_q9e$$81kb#<4oUa(%mh=liXsrD@XJ}$u;N5F4-fp; zjrEZ2)(zfq7Z-jvaXi6xlMy)xMgThiB_*Y&%7VmKNbw}4q*zHtDq6CWl$4~Dq@;wTgp>pe@2~+&v;-r`m*|As z5|Vfxt`?J$S}e&*bz}msmzI{4o-Bkf75llGUpnPvSs>HJ&XFumxVCk$b+CblJ2tRb z+gjPe%LW%q8%t|=!P>$K7Hdmf!#i2w-_6m7{a!pv7xa6EM#qDXaw)@ z!aZCY!u>S4-qhF(7IU}(HaD}94!p{iikFlZm@Hvtg;bXmmlC-S7FJk#OIXZtu{0;; zFoVy)=TN$tiK#IxMo^67 zuI3j{Xj0eO!o~tF15qH%*v!a`d=;u-g6g4C21azzH`0fx1ARkyhXuB94T~YZlTVPU zp(>l1T1f|8DPfCw<+-SCP!*J*809)xSXEp?$zSrl9KWqR5$1hzj#VTX&_qH!p^R< zle??Cle3MDxg`jL58~Hgv8mOlvP3OZkG@3Ks5Gjqj}=3eHYW9Nit2*cqN4I_^s1mU zB}K(W<)xsmrHxHzmtW=v^c&Q>w|f^Sdn=F)er9e;)HQ~AAkMp}N=;>fGI18hEm{F! zYq*-KYiwY%MKK%uy89 zB`S>8B@5aVm81$A=^N-9=+R?_pem;@u`#JCD1wQpC8#S9s~AuTVvA3d5N&O{bWLI# zN4+drH^Kj>0X;lBLv4eLL2VOHM$>Yp6BI;H_qb22K?_K)GQk?cR$vMaVh+Y7+Gc{b zyiuo%*yEj0EEw0?)oo2=qu;f(Spog}b@Om=u&@M2BHxILQZ?Y6stO9WT<95MU9hYH z);-#msCtEeoOj}=P^Qd@;vmM+($>zcD|=^A;4!vxRSV@r_9FXWXS1~qj@o-90etgsZVX=QC? zW8>)L(PQw?U&iy}vaWyPH~Oymp|hPiX>I8Aw4TAINXsX&p9_9OYiv+xV5|u!DaHjF zjg8H)mDUvi7EqRM1hwm5UdSF(N3nJg3#={d?7O)48yFZoXUUPPC^n|My)`I{f@pQ3 zGQ^AmQ|iJVzHlLirj>x&xwK2#-nb+NG|Ml}(9yTEBdFEFI8fi9X;AJ)XISO>(g zTo@(}3}rO7kPNEJFDS?_JqR*Y{Z14Bdr<;1!Fg?6yYvr9s(1qp=27PIfc{-wt*tN+ zVR?x`X+5Lyu(rt}XdbjC;g~QOKnIL^LQ6$GFM-H{5|pU~GV}8bijJd6t*u;K=RjKt ze0w@>(%=CeUF@K_fZK2~;M=J+K^M>vbR^b9Ed@5k^M-mP9+MIg*8kH$4_UZFuS9eEyD{JUkVbnoJQqVs^ zRhz)KQzu1b!G!Q4DpU7`J&a2Rpe`s(N&@B3)78-61zpSoVI^rGx7UagP?pGbva+}9 z(j}?!^4|+a4eQs>)5F=(8b^Efc1}*N&aTdG&Mr=!9UN_}&7pTUBry@A0BhigU7OIr zq^%O2VOT-hs-eCHFhPoHAQyEkM!CEZCHZV_$nj%Aj6DoooScHD`}OYEqo=Ejt*r%& z6rr1Sa_Z{d(*u^SJw1B3xjWcfm>C)gbpx}afr%rN<_h{_-$NW3%B8QNq98BFD##GI zxw(0{MQGf~BTDjM2kY4hhD*+!-CcWlc6W2LcYv`kjB~9VI``~1Y*^rkfDr+{{=@vd z2KVd=Q5iZF?8ps3K3W;Ksm7e8(XysSM%=`?q5?emP*f8Sy1?d&=N0WkeTSFivAN?5 z3j-N@b88D*8z*~bJ4b6fuWA3l7cKe*MNsRuqY@hs)`3)Cr6fI)@@bg?^@H(FhGwgt7oWw6y#)NW##4g@+b}#5T~fh3%bD1;T=awZo`Xmv$FvQ1Fhf|gxt8GPH>Y#ZdYtN zyDmR@w)(=^+H)7q!veQ>d!6jejadU7a7;a_9np|93=@5ARe7kwNO>`MlBEC-hfpMF z2O_g`vU7+`o^Meuo9$gdwKE4fcuPT>BaHDa&21f_Gau;dw@5iLS$TMbrw}18LySos^gNp_o>jOT zL+;Z9@17Jj(~MyP%SP7*>##k(H4LmF!5X5%je-<6M~Bm(v?n(noQ3-K4YB zH__KolmX%v1%YdR_OK@6vk_t5pUZjj7;W;fvyK@}`t1$mhuFOYFX zHR&t^^d_JtEToZ=+f%p~harPG8Sfe!!a&DBL#|UNFeI8WO0ENJ$b_ z8M%2xL!5&_p9PNMKP@Clb%FI|-8MKmvo?$UD8+xZ;k%Jl)1HI%Kxd@1M5egkJ z=+y9!@`$j`KKU6LM~>v=1~IN=nh2GHNgg^yM1+&ZVg~aI82OB}!3kKP2VgD7la~V* z=>VZkK{g7)4Qhw30u>plKpyEs*Ql({3#>kR7kmWDk;xZ54fragmN9H%)CO9|>w!A31#FaPCf&I4ln&nq=id8w4$J zA@g+B_Ame-nvzIhqNS$Hs)#A8@Rel{FhLc-K^2zEW6Z|hFj|2DqCy^F4s|A|<}e5# zcH{ZvX0V4{vY;YiY(XrC*25-FnjkcAYg0qOy#eST0E?2MGL9P1&%yT;SQvLq^BRw$^qxJbE5VWI4SKsEQ~Z&Rn=A1 z)Q}@V!GvHzzC{ARU0z{{yg0tI3R<{FO@>Vl!U{k(;G03!huL&q&UUE8u0!*VrXNnn zO6&|#8hR&;)dJ&L+8FDD99#&rLNOgMzA~6D0;-QuSS;Ux2xaA^$vahxg({|c!I!7! zYzM`xd~y#TN>9&3wuB-;^ihZU zgL z-0Ypeesm_<(aynCPg4ti4xpu>36u~1iU2Igssd;Q&!CZgLf0WiA`Xh*4Dvv2L%NT~ z1DS9gQBxU|tU3syvaxElyouC|Y%n5;(x@c7fX8Arb+BSVN6->wst{9hhE(E%l#YrJ zYS3qeK@LzTkcw4~Lnzb}rJ|;1*hAt6GPi+DORU&K2ajY2F`5OJWaBAAp13h_aNI#wdoBCM(USPgguAW)q&#DmTpJaAxt zCRS}f@2rEcg92TkiQ8MlINwNDQwJ9i1r-Zw3KRu3Y12>!?2J^JNVW2aaxiis3#$;J zs6rze)v@ZpK~AKLcQ$MuIGn}l=;R241zlKlv~{(0v_VUvClL(9mhq+0P;B}7v&Coak$4!#av@YRbU4)7HvIjIq(T1h#eQnBe*^3!-klJStt11JfU zb9Zzy)7R0{#YI;~4;O7+9c?WgR!adSQZtf9qNc)v8D**a5MU2wqEpg^xF=w7DoQLw zTf9s~1@x=j&!+K?q=0_zLo)a8OWT*80ai58*V5I(iX_#ET55t!bR5tQD-|6Ub%Y43 ztjZD%iA*XBt;Z_rQY)f-C@(J$v>a4Ps1mS$%uFWdUW$eHq#n>wr*T!>BGc7MQWXwYH$)pxRB&44oR-7es=6v5!$z zAq|!)jdmsrr!=W=a)fvQRCC47-Me-j*o+=E7XSZbYd5~lb5yygpC_=c-M}dyY_%E zBb<`aCCU+X(XMD+6a$JvTtYv>HcL7guqx?hKoE_=s!AB2xN60BPGvmCR}t3~4=UsD z;O#@HYF_C(ckbA}I~}~2&Rm0v`g#%iW}dXX^MX|wl?YXF)R3>j zfCLO4R9{%Dse+oNJJ{{Ky;!G{y$)^Pw(alThrpIZO;i;YVpXcLF1B5a_%!%xVrwNe z%Jrs1P55RahswgWKw+>m>_G`Md4Z+uHu1mrY(iTOKCq4byVp*TYl?H2!bLEdLgyMV zNfyymTVYl*j zq1;|x2U1eDrfdhfrf5xA$nywpo4PN^C#{u6CDNgCJr0zCRhJ~g7Qm)eJCVMQj6@+Q zi(~A-Xa)9`P}AlGm273V@OEO|&KjJSlCpWrw*5hjG0var8tCAf3PN>hJEc~|b_!h% z2@PDG(s2^D7w{H%H7QLhn6w~l#}GRpE)=C~*}Qo>$_?;J+XCBLL9QuGPtge~d_0P3 zQ{~Z_x!{DO2<-f57{&@GRgO&vRptUD?clK&V$>ptbIYh{cL+MZdDG@i+miJl_6|;C zH%;A~LX^d?rfL#}iH(V}x)7X5*8}Q8H%DEGxG@P#AP@zS&WFZi8WzY}puVbBhoHjb z((c&Pu>ebpJ<2Lg5I3wM3zWwhPX%u7ch(=E=BbfIyPrz(32100(%2! zSExFi0Jkb&*NZ1@#%dNDvWs2knzT`%Zj-{?a{+2ztbQm0DHu8$8TqqXZe(b|bqWH% z2A>uf8&wr9x*dY@l9JZ0+qeO$*>A|sb?ery-M9zZt{%2qq9~^@_n3+Z8UGtX+?C2Y7E! zT$8wFeJbZu+@luaTLS+g;lltQgrMC?KMcNwZJ7=-$SsHtt0@Ok1sw#mELKB;__`)v zLkgOi9ut(ihE3!pq1cYzJJuv5tV!AxD8CYJX;;FnE&lig?*HhWE+6jd`SKmf3=Ga$ zka@Hyc?mo~C)HT_P70lZvf)b-)~$zclpeZm^_qnEgtWca8+m&V#j^>##Pv8p8@e@) zAJ1E}ZY_VE_*yV5yH0HF+9m766BF0MA=qZuDZ%l?wd)cS*R2J^<7!<5oa4dah_%x2 z88{0EBjF3+5Su80SFB0EuSF3GK3n0J^a-ou;}ce|j)#BjYF_;6_@!jcu4dvRR*S_a zELkmq=T^t_$q^<#65jc%#qr=G*o;~&P0p_-#TFlyylPcstk|kpb`>usb`?LCS;fZk zVpheltC$!zRy-y)HYReFSj;MZjLfQ4vD`u~kBx;(l~%!93>=PuD{&i7NyWkuy2-@w zVxBuE8pPg=JwDQSIF60?qsh~>q_ z#qwbrJ`0~_5k!fp7_hp0y$D?%jIH>3V!FDl9uL|wt0%?XGw3bW zm4smz-XKQkb|m-2xJ#}eNAV-FuI2NHRhF`|Oi>IsKsWpHXk3DP^?Zq?gcyBx2 z`~O$GR~+%)2uT?!%Jm}93t%rJ86hDpV0{7m760diFV6OVmGC9c;o2g6;h`iFzVM{r zKO}td$sSTFxF8UO^a~Cd$Y6mGUHDX$3?4Wf3eLk>axKslLfW=%!q@&w!k0XfZz6n= zjYJ@cV?g1%P4ST`mWFI&x!@d>kWe{DfFe~4PrUyb;R}54*9c!SE`qTUC69#kr-1N< zQ52H50H7lL_YK0=83o(2t8QilO;Y(eZMqR8<6lVOA2j`@D=zmXaenod?D66ZBf{6$Y30_6`1+^3ExB@+-@BFBk&&* zzD>%4`qciQDwG7u2hL{#>}%VEZ^T_Be9x|LM)+c5rSLfVD24-kSdTT%Z6mSA9S2{g z{tTZXUW_0!0HJLWzK)%Hk6d%&9RQ0D(xZI;8R6TcDH?lmkOnD1#Y0I5$^1>imtCEA8&TV}Kezz)iVzE;oh106E}$bd zrqEl6aXHPg9!N96wu-^&I|yGlLimO)%OqfNY~?WpKYH!WU|dd^5N%anyfC_(DMZI^nws;@_R4{IOpUzBqc|#w@f5Sd3N{G&Z(U z9958Z3LyyyU&)}a5Wa~(_`WPk7~|8Yk4IOI@FhSYAd|p?;Mj@4m}JhIo9RK5VmrkJ zraZ9af@!&!ghoZeR~;S$H4(nEz9f9FY-30HQos49P(@CBwwgz#N-vZ}JC`fSztn)7FCYtGkf7a@FMCXajQpszz4E}6(g z`vT#Mpc6qF5$gCh;cHL8ZDa|pf$&WO!uN(dA$)PfiQykfd0d386$7s>5WYkRNBDx0 z|CsRIwY*X8T4!5RL_%?L(h#1qYSKAhma?Zr!J&UWUe#8rVV1{2Z+bu}_*jqnA+LcrR72jOc$3Ev-v3>q=i&&zl4 zu%Ep9_Uqb=@I@^-r)`z+1=R3n^W6xBSCK^ zNa%)u27*8sjtHO$HbK6!9OSFt8sv*)5W&;GLiySg;10PlC;`4iDPIUH5L!rYX$*dA z`oBc^0wD@~Xxo%8{&oyrsH$Nz%9jV&Hl#-qrF;p)1~^iuZ&AJgkAY=HDPJr25vq{# zh0I(KXiUDOd|~RGV^Y5x^aXbTds2%M5}$OM%|KuB!#(H{1)#62?015`YRor4Uy4u) zL0@7|P_!-37pt>1)ECJvpejXCU)PqXuMHTIn3Cemh=~$B9a5Iz9TE&sbd_a+xfMrB zRKRF=6lHw@5l31U`8AIA1&p%|+82Kz(i-gxu>tin{~GNpO#n{pr&wSDk&xqnUnHwU zfM4g)Ay7BGBweRBTTC zLZd_mmlD5#XJINenz{@y)n?3ZB$BHF;1`sH1z1CCf!n|i9sv4Sg!(0*c-8k(zvN*&c?gV8q+3wG*sv%` zOl&4f{o?U|K>fl`7;N!J421fXCp-y&1^6T!&<<9$BVY}LDOCKD`t2xabgfap%r~fC z`!=ax4G;_v7OUI|s~9U86k-*DwkO;#)OIV}FMy*e8X)t#z+dvXT|gKh*g+8v(m)7C z$N~RYw-E{y{DpfP!ScQ2uQMTkkvO2JDv+Yh$X`;&P2?}!Dt<}+vPyt+e=qrK{}u9= z5G<69LF$SUlJM2h5HceaB|te4|Bu06&Km3HSnrI)Wr2WrglTlq8b)iagMe<9@-XKrqMsQd;yMbHB)}Ae@Ty zhyZyb+%I3HBjC#%>&tP!6fK6*h;qM3!~W;oFCo1UmE=HJfkYaUaNV5y1$8MH+l>3| zBFg>3T^ctt2JaM3<+xuCmO*7Xh%rJ{0(cnGP6gC2);3bVtg<-t9766F3ib`|7nl@6 z#I)dkp<)RgO7I^8hKG<$Xjy1aw6O>+;_A39mw4&t0#j`<*^*d z{qmb(zn~~$zhdB20O@}f`^BuY-^PAPqah84@Qc)yISL559}@8Y8`v*)H$as^1m@}+ z{uc{ql34Gcdnd}ckt0i5kiV1LCV#nlCG;&Nf8m!G0`eCcEs~<>$mB)1(6-56EKVEf zuPIEe&{;A>f9=U!Am`BF%pjQj@&a%tP?AE7s3?gSP}N^!e-VrQHv208V$p?~*k6j& z5qSjHBNa<4l+vIWtH>6Goe2<&$KYt2>@VJk3m3dor3;xE)WiM;UIduL-z8vt!v37Y z`TpnZFA{9Xu+d6Ii)zzAh!sn?%zwiEf;GRF{pB9U(D@|tn*<;w36~0OhlF7bNVD95 zkeU&yQq+fW5QFRACQ3jTs; zqd}X4zlu%ZuNi{Bm@-0!&Op+c7S_NDXImg96J4ov7(fVqTSIG`*0=_%)`_|@(YhJ< zEB+Pmmj-;{tTHH!s_K#+onqaTGzLGSZ3aUVVy9qY3jUIyOalY;V_4&Y%C-vrn$f&L zWR?!6l_=>UpNu3iI6nX^s*Mj>6vERe};;bvRFd;JW zw+R9^61iWHNx)O^XjGZwe(^U7Xk+3{=usH6u&Kfi1b8CcuYIfBFP%8YNpv!oMj9?H z1FNe@dIu8hzg^kbomncMO~Xizs_HQeyNEuL_vMy3mIovSonXBEWcoWNdSRTG~vypG?00^ zlP*t$`Te;W^NY`cz>CSV0piVMp9@qdj8hhy5BIY_kUUhrzJFCbc@X*uRs{0rvS ziZH+UPzxU{;iFl2k_PYiypKHJ#3^WWXc6X@>P&z9N9fz;%rACI7^ZPe-Zk`i-(r4Y z5*QQ1agSs0NiCVQ#HR@y^Gkh7=+~e;Fuy>QBl8RK5*Cn%hDXT}8j@c}ewX1dXyG2W z9s6y^e%rBM0`Wpm*^d3TXZ3B*>if^L`gUr{>MI??rSv7tFJF=YuveNS@I~l18uIwk z+MER6*BC5aLKgM_}u!i2sYy+_6g_yCuT69`6z zPdHn_eFex2;$HYXwr$*3kkA)$!;q9Iq6vNJb6gSJmxGQG$)OSuH^uP_tdU=W=Vk;4 z#Yapgi2GVtej}kTWb^rILSGyVkp%}tWLSg)LVAR(1-LI6NFg^vRQ?9;>(mnW#e}{D zcSKMUabJ9RjSEqa4%4X0$blk<3D=MXnL6^xZ{WUGkkFUIeXW}%^u_uE3lgiMHHmt3 zJVr6Xd;|CWb;0NX14%+(4)=xZ#WbNWN!Bb-6yF8jh3~|&SP2Lj z(#qiMOCBO3?)%k*zH1sUr_38Biu)qYO^3V)>`}{-p)M*77KSysO~=76cO0)G_7)74 zp$K11=Coc5~;eb)i* zb}KzRs9!%14@Z%NzKC0Jqijw^gad>Nf&$Hy1%;tzKiYy?%Qxad9Lpl z34J*=1;GMtEt=!Locqw^)Wnmi7b9WU2JQ=wav`B_K;kLHeII2k8U7#OzSxYB9>N+y zypPoWw-Wkx?=>WFX*!_I-XAY+^B3a2#Fl7JbPaeBm%?~RoQqQ!&JgROJ+V212cV+H zkkA(p<2Dld3US|AYY2_Hw5w=BU*s}D3k2Gz9R>D;X*IY{CDVx1nQ@J!LM^e3ZQ{Pj z=?D}0MkF4)`x$WG^*?kbxG($yflKI1S|VxrXg>55!S|!jKyA`ELL)M0N`j#o(e!Hx zeF69VDKI#EMec1Bo6y}Jvlq9(eTmZ&51Vw3_AaQ_fqv`^0=FEy6&-dWI9s_*&dw?6a`E-8s zkS`PZqWS1TusVe6V9EhtJE9|MOMY~X&Wj6_194wWT-+M&OB4DI7`v$w8_d)E*wF;{ zh5s-Q30M+{FwkHq$66x>C0aHG3{smy+?RH+=)j0IeFA?0AeiwQ8t{z(;{@u-9^sCpP772a1?v%7qqA0Dr=4-435QOFg*TI&GRfNF^ z6m2u1Z^7J=fv)Je&t4sqNj+?S@e#hDLqU20Zz z-IfV`e`tyOZfv}^Gcu4%=qrl*ww2IVpEYp6h=C~@h#Yio&>8imQOQ7G9sk$vR&ZZ; zVM1T$klCYJ;=WFR`$95bc)5GJx!GYtUm@Y3n-89K4Ru}Q4LI7Omx8@O+aguYIg z&{qWaB?*0h8a{mV$RK|}en*TNGNd=)z9I>Ikrky=vs_al)&`wHS0immzy%Ng$ur}x zB=oi668btI?hAuNn$UOg>9f`6&s{io=^Qeu7i)JrSc@d|#b2wFr758=XbuBM0q#qo zgYUq7ai|XzH$rHT(AWJC;J&xJ3KRP3LyA-gz8DX%#ZsCZ9ET+Im8WS^|D%Myme9pQ z@?fhQE|{kn%tT@>rxdD2jsOb#WkO$IZ<;0aZ4LLuM3caTSt8gvcAH^zAZRk zmnP2FNtoCdIbRxnXvSLs=W8KI?90kaLilW(^F_T{=X_gc_HD-b3L_0t#ug;AZxiSH z&CI?K-4Gmu7zdP9o0)xymV)H4*b?b9Ra=>Tn}fbAQ5rl`xNz{OypZ+%MtWbI0Yq~W zPbFQ7jRmInjX>BJvoccHS2VjXfqfT=B>4T3^rZ=Yv5A9bIMQe(!7n`YCtTJy68!!L ztS=I=xDYPg+Rg^rV6z0jfXSd}><7L(!7nDjZ6(34Ga#@W2rIDRR}%c98$#{TRK|iV zzY+41q{;t7-WMFTb>3GTbpt9A^lK%@FJHk}z%n;^CnA3>lKdKpB>4pmTO|2KVg??F zBkLfVh`%D30p1Eq3fm>7 zK_!qYBFxwhh_{Gl_~l4n$lENM;kSF6q%Vhj0knt&6r`6VNDh*|w5b3DL~~|>X`5JI zG-8VkzhHr{kiOtEj0akopzHe0zyx_$7~(aGo9-D&F>!>0SZoi&n*4rGgy4 z*nr3jiAXNTFRJs3_l|#2lAcip9BHJuw z)v?94mf*Kl&eyt$^CiE-CsU31>wA0MxYuP$_$>3R^8WU(x)&gPQXDV)AAZ6DSf2a`35vz{c3i zVedmU*3cvzB*tNk5h#h{dm0R)E%+Zzfa;dv^lwi3ej~px)ff9XXh1@JVF06{gPc6q z^9XgO&V=h$P~ZPqeqYk4U{Im?4_IGF+YPL*XntSc=BzJFzH)Qw_)h233G#{ok@i5~ z&^VB3#`=rJld=dU% zIXF3^^whujck=lDSoe;?{!iIr@bu`IfAMc6f1Ia&CxLvPtbW&_!DIi;zkr_{)TIRS z#UvGUEghWy%|Cln4HN#veF%dzdvFaF)=aTzxyX9B3)Py?Hlbi z&|U-oPt`!^SVwn;X^8x5=#c($owTt}ko#%CkHa7)!KN4^EeUTyGj{$4!&LpyK7EG% z)TfW(&>2&I3!OBMVZy|shF_alGgS5SrEweg-&p1`Ua4b`39(at^_|sc!;y*pS*HRX zx*atduzvgGprjJhCkysVU0gQRqj=5>sU8hdvKJ$#&Wn>PQ62Mc&l2OoZ;THmuXpjX z@Da}{YVBJ18A18P%TdY3Nynio+ znuFob4!xAuFPSv!>C|hfpU0j{N|050u4|YV?^oDWN1Q%M^44B-wf*aDl50PE_SulE!Q49tj;g&^*Q(L>lsV$gvUL9l&-(x z+^fJi55Ky)+o!gh950&V(^Gsv?}(MUzgk|8?JYYdX>8H%cZ1cnj0gT*9Xe}x_(Avc z-7HtHd7|4t>_musMzH$pz=IiYu760rVph8{M=h%O=++B9PY&}RWF1sV(pflr%(ksl zZgk1KvtDO%s*JSH=cRWJ3Dq05*L{l$Nkw@s(1>turyWq(Q=aM6B$x0om5M|{tZz8e}cv+GOiX%BQh9e-rs zWrSp~RzcNFdyUPVXW#C)e}1s-BegmM&*YC0bUI(SCB&Iw44I#P{9$;Q*yG%bX_HS(-*NQxtkSFzebvVQ zq-z$JVi~J#c`@$X<39rb$gVr`INGg)wBz;hAABl5D||HU`Qen}S+;7zmdVF^9hDvV zP~B|0dbIH}TlL~~BZ{@3O}m@>>CgO=7rIqu-Mc(*$WJa3XGgtFKKx7He*J#z_uH@i z?v@{ZQ!*oSgMG{(nV^8{uS5B#YR4aN81!c-e~`=seuez?gL-g$_9Wb#9n_H6H$S~# zoYb_7lJ<7bJ&wTUbB}!=D^fxNt{)W7m?WO49;O!vn_+tXpT|`>*iE}A7IXx@DrY5b z=B%`7Ja|7*J>xNBUsteABDfScgG&<@j(P?1|6md)U$5q+jm6EhTjlw-@3%?VcVjEu zriJor58!6)^gAKypQ?F@dIjTjGSUkkUEt}Az39+W-Z|iwa$b5tOes%C$KrB*|J_C7 zIy^UVeP;G@kj%$Vq@ZuJ7uX-phHK8^$79asB%XAzd;Yc#_pUvApLzCaHLvF|nMs=x zyUD2R*gJT`;%*KVgR)4)JS*Yt`18^Sm&<=v>t7H%xnaSqH%fWSjh}XYWOlQf*O))* zXa3*yrH3|rw*5HkHz`N=g-*3q_nwDM{p(TiyLu?+Hi-o;>Xy;x8@lJbotk4X=F`D? zW?zhNH}>hrJ12uH8gi$+{*blwW#!iT^z4e4ptaret^0d*Jv1bEVX5A})Vz@!dp#K1 z@bL3z>7O+l%(ORNJ6$+$-TjYOKlnc%U^71)OjONVcvSt&+mAH|a`j*AI6m*S;y(VU z4dOGac>6y3yO-`#Vyrx-eL5$dpP8Hc>GRgDTi5^nmrhOpXoE3jobjKX;dw038#`W6 z(;#~EKK51Z#X0W+b8g5@4SQ?wsmkEfGlTbMqPOq0YY5Q? zi>4P`lajgqs%Eu!kFKAdKKuN%=fcko_nt7XF829cGNktiz0Ll5$3m5Qt#~|pui_?u zi8Wo)f-;@2WX+y<>GI_b_Z`iz8SG5G+`Z(3(v)2mmD_85o*55McJfMc%B@#jaI$l? zTF|Q*qB2ybXYinYRi|HDUaEN>Ws{UuJ~P>G#@|kpb2i-MjCH4s zx%Wd|_VgWheD=Nbxa%@I#Q(u=U5S|RsBPU(ZSU(32gap+aLRq9lQzCeZNb^Y z(`LKwU0HM6FKJfaZq+NMRn4_qmrz+>IsNYIsYUDkFGpTVeAQRu=Rd3$MCm^mbajc& zgTZNA-+3-Sa{q2aiQC)#&Le`;%$~h@Qg`X5wPoY11)t7~&EIR<<<|57sm+HUR-SZr z`a6U7QZFj!V|_)=iKWD?C*YDy8Ttsj>_=43zNs*?)=dC=AD^I zA7dMX(#k_>Q}%wyQeTjhoM4_@od46c+h_d22XBafesyEI_Oz7FYv(X~Qzxy9I`w$d zEa$6N>+05joLRL+wLYM9!k)r&vj=yRvA>l6XyS>~N8t@Iuf`v%*RHwyc5J}0*&A!- z_S82SeZ%|sI=9lEkMrK;o`1BVapIk^c{A!``yWnI@^{XiyL|H0zjbbu`)1VqI^xnt zkIHV|2G1%7bxUmAJb&z^wNr~yBPY(3l6wE4+<*4_`j8c_@86VxBN12@4X`3m16Eb=fY{ zbIIKwLW{=_>6~vcd#~qgyGya#uMb@P$0D1lqwj^@`XsIKDYP~v_0a&6(_3HFd-N=s z55AJ%=l|l~7Oj^t;dko?<)`eLAMEvV>eU7PgYFp2o;!5Cc7sezgSA)k_y=8Y_P;nb z_{DqExxa2U-@BdB&bKajRNioEVStojo^$x#;2$rYI)424^3P*C{45#c)3qjb^K3iq zXP<1gn$7H~rZBa1e&H>jS;2d4)B2i(+{iKryWL(kUy`=B4RFn-2F%?PnX*|IXeIPJ5@BobtRfuV&fyr#8>R^j@leg8v$& zOGuUUrjn!Y)UJeuOuJ*F9iAXNJ;8p#g5d$9y}C@*GpW2eF5rfNi=DlGed=7L9kz`{ zD`t4v+VYb*0Sf9vS^2eUPLg!wvYjYFrb|1S3%v#5JX z#PFnd<-Sp>_k27{=8wpT9lv$T_!oVBo$sb^U#1hfZ2RrgX~n6(o_ZO$IIdg$-uWi` z!Uj#9`@nbF3CsBp-0C%_R}boT=|EW7q54xVPd*zI{2=JP>ebZfhNbsLxolhZYV79- znP;=lZmnL{xYqu$kMp3)6uk!3eRoDyXjTjjy}2|oBi6fW{ZpUQqu!eBs9&^mQ&EHe zldS7;cSdY*{;2XsGcBQX;*Dh`AF6ZrZSNRUI{02f+Q9OVhUaU4axY)|ZgZc)7gJ}t zoE$kVp+2wE=z%BZ4}a&9^I$~S%MTX&_9eJk2e^lNT8G@oT{&ahiv{s!`&L$0%&*`5 zv3TmqZuPF$2G|6J4?G&@Q=2JolAofLmeAwjgt;eny^4F1yYOmipDUHGt+c~C`pUv>6t6d{O2mv+{@|LW4nKHO6QOpOQYXz-E-5a`pt|O`H(!Di@Qog^$N1g zYey}u>Zdhf`1YR@JW>^JrVcgPBmL}=cW{Dzkc7d@q#e%-ADT|Sqh_I?@Zh7)v(*K= zrj0Ovar5r{l8E++Ulb65<(UFl)J|O@4Uyfk$$p z<{j@CMif)b@wVQ)EIpyZQeM)9@A%bm+A6wlzW=~ zwmA6o&a+kbq)4pyYv@;8tl@P-#{ZRBU8?7!fQG*vk_uPk z3{LCg(Ky(lj~~R3`rYYDT@pvR1P@yLJm_?2*2cx1pN;DOV9fiqbBbcZy=x9X9G~px z*(s#9u);qmVbJ_zW``ztXD?lU>yH1s*f}p=284I=pBvt@uzFYJ5}TyLaJ!^9n^V%Y zxwQx8OH{t@YBTkP)`LL`HJ%THuNH$#>708X1oGwoIy;)c?x*;5%ymuZnl<8=D-l?QP}9;VrOco^_zFMV#cSDq zr#f4Y9+~5zwl8e$U8lRb$hEPIv3&h(`fgb9=g^sN7uoro)U3E%*Yd`VR$8 zF@L@M02RG{VCSp%e*42ZDY|OoZ})tnmDc#bup9l`FO`3Gt5-yk#jE4K@4Dp@kLZT`Y9HJfuJa{^6#@p-98b3elf7p8DgRWO&o_prLQ_GvB znYLXm2HM`OPdmrISX-mE;BSnIVcoqdVF)u}>C_t!7o5$VHZ!T_sm#5@@-GuTrx&OF zs=BeZ>y@yn??c0vc~_~gcy+IsCIn{eOeBA8HO4Sb?H7~__ z(&$seC9EXX3$8>y3$L6Pp&ibJ@W^Kcv?em^syu-VaK$Y-M!NCohG0DFlPSJ zg%6ys%EaVEJ<5AGH{`kJ)Ca@Dt#hB+q|JKm?-E>jbK<47wI5z+hO2FSATe)mpRgQ< zoZ5k@sTnu_Tr&lVIKThpvOXh|YO1|bx4sJtd0v)(-#Yi*igytg~ zLE;V^?*BZQf9*r=wF<9>i}!m@+`W2baNck4N7Wp4dZwE7u1$qs}U?!DX+rT*MlbFF4IMzdFx#0RPETY zX2lGd4+qz~d`__QJ85lDyJz&AJ6){S_rEoH%*>j1(^m%$-4>ZXd%4H*taZV!aQLA2 zGI{g8?T>$#+12gb@Wq;I=k<7PnOD*GQ0Chz{;?^S;!gw|Ex38wJ+9KNz-NArw${SC zoi~lTvo!d6s>-VE*Nv@%6a3y~Ug^}h`B9VyqjhRyrmDTs_QYRaE}m)dWaGS=r>@!; zb5nEjGrBwpDczp!zhffb>F(9T4<62#b18e}jXsAAv|sqInZuvn#r+ZUA^DK_RZNFSJUUH^$=eW?yY@w@sFE2c2AQI zIi9(#zh6!Mi;Iz!l7(r;bB@0JNh^C#L|}Me=AuDe)Q&#>FnZ0a^4`0)N6z1z@3D8X z@u?piZXFK3x;;O9TYkjpoReyL`wF5Hv-a1;72Urz-c;Vh>sW<&@z37Rb#B{vhAXUo zyWr!1nM1=9Klon184~tdE6nXmy4|bXZS|%ckJc`>^T2nLDhxdCQX&jJi_02BY#WK<4tcI zCmuawP_w;~48ZGClRp zGUBb(t4Cz{*LdsJ1=ie+OPp~;H}pcfQP*es_KA-l2KLH6cI4+H&daV{m=*NPQlk|+ zR_qO3=6Tn(W{qTQ@*JbyeNK;^w!V6me-E9~Y3zb6wmrrhF3_55?WO%(r}S?nAJ#C< zUv}9ZIpYM$wAmBhPg~i;tI}_c^-h9u@y0W}FnHG?@`0ZO${FNz+%FlGbVCBZtuI}Cv!!+_1C;T@7gRqqdRJxoOfeURl}LC zx|^5mx|uMs=e8+X`;u%=4H`SZEp&ivql>j=k=@zi#XEXDy!h+IhO+LScC#|d54j#G z@m=3*>^k+lUESjcU75r_Kbt)9eZ=}69ufUU94&Yr^0UF~16L;2U8s?_o?oza$j@ib zotEfgw8p=?Ldx`|14sR89{gMN#4g^^1+h^oc2eCI$=rsfCf6q|xA(Q@R@w7Cf*&2u zT4mAY{;pdF)%^mZdrdAqT|aSSfpg92l50Z-cT2BdtTX)fw#VmZhi&im`wv+IeHI1} zDIYyV>VQ#4r}Cr#?2 z`uuLmkmowxT>Kh_UQFITIl)YS1cIB@y@4HtXd%Sz1^3p!L;Qqxi4u9ND zj!0Z3Jtpw{hO?*iuPXJtGs9(|an=t9r>RaW+Hzyr1jqCOk7w#D_M}Ah>ofN89XatK zYka~^+&A)$>v~qq?8gbwi+TP0q7(Ys)`YsP-*`@HX^C&N|IvPjs^ugH&G5S_X`|us zM17-L^{>0UZ;c&g?chJ=^{599-sQCouYT!u_Ic_A>o=2L=RMhfrDAQ?eTlu!Njo2O zIdaBs|Ht)W<>orW_sqDnwRnZTYrjk0rCkD}iU*E=9W!P0CY3+-c`V)YTb<@w-^!$$wmVQY@=Qv! z!YQkF?h;v}W+_dt?l;irti^6-kb=*>i<2z3Y#2Jg^Oer|sfh^(H&3!Go7;PnPnYW# zf=1nq;-4tI={o)S&v!09W_ujaT4a@-cz*iq^RYS^k9@-t4(FWObX|Nyg!(4Kc(Y`W z0T!1Z7UtB4>cyKa%bJ)y`%|D=z=YTSYhU*cPLX~xHu}N!luxNIFJG>TORsY)xBL`T zdf)p_$m~DulnSCe*vyxk+FE|Xns-uu=m zpXfTXu#p9&`}ajHe7J7EMs8x6SK06PH9jTST)tyIwI+Pal%2CC-Pd`4__K~np2WM~ zq&9Zc?lbD$j+`~Io;Q7m|9Zgl@3OM)#^$q!*!9lP_^W7ft$Cn$uBT1fwpcmK{||sb zf4`~ur(ALCvW)bxCk5GLBnwS1%W>Bs_IE0TjZ1&)%IVKZS!=nmtsQpPAvR2Tu{4Eg z?WF0f&0`u-IvMnM|z(zfJ$>y#;gEIi8Jg!P^J8}X)jly8k4L`!+_S$8`3 zp%9&ZJVs^aVT*L7bSdbyj`X_QRG?wJ1?(|(dL>6;@K+d04DSu~uekU^2(Y=y>NmZq zy=a5EUJ+(Rnvqp{d)IW(h77RI8u9&&rTb)oA5OZ zO^a%vkq_i6{v8g_@DWjU+7e@?o+)+~*8YvO(OY*{)TbTg8(#IZxvxo84qn&tE7K~! z@Oh8ub6#TU%Hhk|3+HuIX2g$hDIOe80b=ABzco%9iJ|E>Rg(%zs7ynmqPOS-uIiaA zer;{w>}bEd(%`FfB#RvzH5~;NE4&R&7GLZTdSlxf;CMNbwvm`n9Boorv<_GP6Mmyx zh1@NKwxfX`gf_xecq~19Is@cUig=!7L{E95gCor9i3T+Cu^Ac=wgv|OPA{Ut%_fbH zmTNR7Hr;|c0k;&LG0dXpBDGCk+Z?bqDV^g`pcA@V78|E|SF+Gw2@s@?h*qL=(Zum( zpxv82+sZ$A41J5A#`f39z(qx^qA#J7CV>&%xMQ*A%vbM623xcD3 zYYvxRjlLsJAFL?6I*f~U0vGN86fg>@UaFKatqLN}`?0e~N&D%D)!2lLS%M`rGW71@ zZk{j_E4dK1q{SK*AN%M;9Qh4VHMp+fff(d+%F418OvGih0*N{Zw~)^%1{Dgwr7^fG zz2-MA1Ii`gWrsUHaZiuy7wv%o0vk{HZe#@*se#eXqVyP6{uSOU;JAmNC_)7iEG7gc zkA&*r1%X1cuvoDZc`H0trUhDsnjNkw4<+hlY;%!JJ;<{Pv%4%q>4fFcLHn6-N+@d# z>$HMYBUcqnc-%woZW^W@{mFuSP&WD}FZ8M3(z(@XLUGEPx(H9jE1>GjaJ`jfg||p6 z9imncifMLhc`eH_QxcQ0JN4D{qz%FI_z)&mtTgtDR9c=&rOntj;Uk)G-8wpUDv)~V z{KL%pgQ(Y6Y|?FL8%U_HJ=11D0NbP%elwHy%(HZG>!W-}O!-v#QTbL;m+y(Mj$rI0 zita&IJ?Pwr%oU`-`BBPaDtZMc1t-gNWEbX^#lE$FYi$Y@@+eOwiWr_&08fF@Vi zX+=lm=|H+f_^NFB7e@gO6SI2ERRq0vOV$?1@B-d&F{5WPIT|8Nn9-_T8evBzQ_HJT zji$oXwyd8XsP|TVv$^|0R zhaN&#sGqXK($US3xX~0GRdNa+jp_()gT)y)yRD2U#7natC7azcg|VGo=rDyux+D@QWBJ=@epxhUU9FM}9b*r57A(V3rmlq>dnh+lv?%~a z#~?fQ!p!TPdu|g)#mHM%Rvp6j7CWq5J;lMVY_h$}aQ-IgFu%!8vBgco|LG>v0($Rb zU`PEO{%+tv$LucKVnn#AgOZ2dH%|(vhHad{@Hnfos8G{^Eo+)aqLx--oG6Y@#gS%; zB+`eN$6=s zz>!%gQ#fhFRR~k~d7%u;UA;G~O=x78KZcWgN#^5kdz+%mFM1Se|Gp$zLZMa#P z&r^fGA%}?1(9|{f9&rYOl;{!+4M6=}4Xzb<%OZ8rLmB6>kp8Ps+2ylDiak_znqw%w z!Yj8=Fth~E;I6jp^hAdv z>m)W)XY`aNy2(>(TP|pl*U%ch)Ja)AT=(fi$;v8ybTxxkfp#cwD=1-elC`CBmDQeZ z)RT^8>4@P(Ck~AvcRE|j+UkP5D$l)omQ7Z6hNt|SZt(X`-$!D6iU^!zQHrqy(Oh3@qv zqVPsLiE0vR!f!C^0K-i)3rom;tT z3J_-Dqg=~Nw1gcJGJq&q%C%hTDWOvaP%E7+R~y|LpTOY*&*GyYA+%hf@8zv2PuWMt zC0AKRZ+TXY?uELSuO?W5YMO+|whNyky((3H$fF z+Fv{K#asi6ll)OCCX;9EjE*!S?H@gJQeHdCk92JPr>=#UN_f1lj-mzGK&1cxAOJ~3 zK~&Njr}Ld>;vb%A6kOEeRKlaKW7?Qr_|W2rhWajqwpDrzsWE9CHrs7N{7pK9olP9? zDl_>1Xx=~L6!?tEvuN8T%kFuTH!mmKqy zfYJH*D$iRF;bBj|Lx24Uycaj8<87h`rV`tWYrs@2j}*4}T}7t`lTQ-xAG}6#9;cGxkM$z`2|M?)r%qL}+269bq03bHyQbkl?^BP|ot$fG(6VvHRuE;n zMBcn3U>ZmHNe!Ik*j@{kuHf>;@oL&djtg}Fqo5K}N_$^$(TSTYG^QO99vPY%?q`2E ztHc|`Vs4OFBosfQgCL#N*CX&6#&FcbM{yr`&wKOt%FDkseeS6*O`rPsm#6Q2?X%PV z;fvG$E=FG7Lw;hj=;7rj+nQF-!X=| zg%5ejZ|5#eY!yA54)RwAX@V1eZx6z*r-FsQ0gL$b>%O$5a6Cf}5 z!suF4D)skWj5e*%S=VsW&U)18T3s}Qby;Z-ohM|6w9T{@Z3SV9TKaJHiBC#qLg@zV z6C&-qnVoHDq?^S{;t*({dbcG*s zS{^tBz`>2LkBka`s+XY{&f7!PflOE_42g$%+2Z6(RUgBkEpO)(=8g+OOLW2@c71bgBM3$eME=l z2?7;z=LVevQNh*Y+ta=4IxABPUOis0$hah`*r7Eaxqth}D1{1l)%Te93v6f>h}Fbx zUU3B#d{!|WeH;Oyp?JYF1DuX1ic^d&8zWJ~2ASO1m++W|A?d==1jd^Sev2{oF@!z{ zpWt~t_So1TdiUfd6MULn_yYx&=Agj~;H5OB4_@k9na7TLu|N7)7U-=DF1!p>JT1Gr zQD4CuS~qWa|CK(;tNoo$Qm#ag@Ewlwp}G!90rjQoB!sJ@7=3G==d63pccJ4nM=l1XOx@3~ z_oWjD`J6u?C=QYZJR1xlzu}@&08Ts##L!m>1aIK58@@<>_VJVN{Hf`m^Y_pG!-MIW zr+;Jm<70=qy4SIF!jJx>YEn{07g9dUPxmzc7)HLq;$Oo`aBW$kJY3zWWT?hFWzMB;W z);qbIks8<7A0F7qq}aLZ<7TsM4K+K;p$k3UkFfsaUv(69t$gRXUZ?{o;U#!3!1U7& z={@G@P5~GfjEtyhoUo<<(7Rx|}3E< zLr}&LDq~Ilar9G2AxcsFwC0viK)R?>$ribWjn=qnBAJV#g z46!3CQvf=AbHnGvy8|FrJR`q!L%#M@Mc4?ZjM__k&+OKwQLTQP{tY&7bck-)UmNCO zfKxgC4lUTpqx_|?b#FT?xSYMU-}`w~-iKW;)BzN;Qo^eWoOR68=l4cGhxE)7Q-Cd2 z0ajB0LR?4NY2Pr35R~b_^4`vL&6@Y?D;GT8{UXBEed;f! zKY#Iy(+@tqoNnFw>h$f$_^QiyZcUFKJv$xWqL~~$GTo%M7qNs5-yV05Olwd)Cp_BCp-qf0li@}s1}0uaJq$^GzvzL zWre{mJnpx!R{G*^SYF{V1G!@lqam%W)3h)cKFYO;tB)`q=)z_~UsxChSIB+LaJrH3 zK4NmZFXV=QLV6nVf%Nd)^c{Ek$Y1A!|DyC4&UA*RZ}<}(a4agn;f2@wkc^(qZl!ak zgr&b_iG3XXsVmw~l_lkZf#Le$YPx~LAoPw=%hG+1^@@+cM?A)eB4K8~+ z&uh~bh6<;F$U5l!<(cVKpK2-BXPPRps1A398IqPZL_{rR-S(Hg_~mn*tCVV^|uO9YUW1Y+30{0k#PxcbJ18 zFlAWm+I_yZ;~MgQ;pg9#zmL8A%JjvLJ~Mso^PilqzwnLeWj@cexyuZE^Bx~6!J*kE znkNXicy!1}b-cx&I}GU%j<=iRZ_;D!p!CA2igQCRc|_1cO2gU~ic?9#28GtQjhqqB z(6@z)(pzrqNurORq<5wIf?)zfSiNNob6c%A};i3!+9LG36Xn%@_G?t9)>R8V=&bG=Xp zPzsh3;|7Fs_PJuC5|#fJ&+TvDzRiLhqo$!GA)|p9Q5~zIEYulN;^&LS0WV89|Hbha zd()lGqv_B8?B7jS4}N0$#~=IX^xpTqhsG7Fj$+OQKk@iu)5rd!Uz&dFH$O6c?Qgy@ zed-fmp1$$}t>nVV*Fq4sk+<3BlTYYd{HaH$B&84CXX;m5YDZG2 zck<-3U9jl<^ZIbtNB$Z>NozYaxeY(?H$OG9nqDPuE4v>~v0U{8Ay1mZ6(VH0@al}H z!gxs6d}LvyN1=TxA)i)9O;*#+yjGevYPLEyIswkpA@j=Lfuw9sLrJN!Lr7)sKgy>n zrS5A1P<;8+9IiYMyI!aRD95jBg(P#~m0q2J*TRhoxu|`}=(*%kK*AvqhK^ZXPng%j zwmlZ(Hg-{!pG|u1rSDJw`j7w3^!1Pb$@KU?_~7(w@BD|;M}O%((;J?6!^ryFu#X1c z|L*tX@AiNGvFY>Q`1170fA`Jl)u;Yq`qIv`)4iv8?_lqn)3Z1C+lL(ap1>g=>Rj%z zFi3?SF(o-Za$(SwaGRh}4Ha$2PFXg6k;G{NJHC8UunGQs^&T~BtY;uiwGqrK5MO~lv6rg;iu4tB{?oS)(#Z`LIpXX|^&wbe2 z%>OF$T&V{sLw}HC!N_hS^s$!{)78!^s>de+e!%k>XV|8pY~fr-bP9_*$J5^N52k0H zC;i{wrX%?N^yxo+bo%LE{owS=@Bh{5XW#pis~;gL-OhWx_2?thZ+`fr`TO2?e{1^8 z*S;`);jfq;eDlV%dGy2Su3Js-;ShX<_}~U%9iPSZ{emOr=^MOzuua5Z!>iCSVLVOQ zaJ0P=+nkr;G4QP6IHM*ouTFt|La!ZEo>TFp)st@H$DcFZ&~doIHf@i3qc>B+b(xXd zCf_!$$P=fRF(>)tgtABupKNxrlEOef;B`P~T3O`T=u^fX5@#mK0`i8Lg(9f^$@lB2)jchkA))5Q$-?7E?IbbwDy2O_H_cO9CZtFJkQ zap@ezoBrAXsj+i(7N$(XmJy!9jWq!O%RVc(^fBx=**2fDM5vfJaQWAGpTr^Ed+AQ| zvD0vs|Fr9cIslp1-^fg5#%RDaaUQ4BCyB6&o)@z%4xQH<9_dJgj*ciS1TFZ;gF^g^Z9MOPb)t%|3qkGexA57Dyzw@Q(|JnSj>F3|`=IH~!@ypXMec;2> zPqO&;T93E?jwF<&=glS|HVPTm z`g(6xtr1M$=C}t=7^NLK45#Vbj0qDi3OiC}qYfp<#%+VjI%JhL(+5}AE7XLK;ja8O zM>`o3H(7?Pd5xO9NLsC6o5N6FJ=v zk*BtBXj4{LQ!eX1n|z?llqWRo@i5BCh_0>BCp_2FqIK9@y1`Rb;0c7D$cmm_)=(Dh z6I)52;$R0&9y_dUyRutov;#E7GgZ>;)>!wt==i3y+nes)W~0uF z&rF}Y{l)3u{-3`z{l@#>Fums={POg{cf5bPc_W`=ES1iEy>b28^pRir#r%Emw_lpR z{E5Gq{?(WNWctd#Wn&SY&p!JGmV6|BhsTr$gn}EKcCsp-!X<=Wue9ST_)>-3hLLRr zyE(*ya_!iO7zVGxP8thgMTO!CFLg8RmQb9ACJapri7gtiA!vrIwo+}_X`E}Qya(Qx zAfYvR-Q;8VU90X5PXo_1gifjRPng|#X1c-1IO^|QVYS(&hxhgFfb(q2j<+M1_76|< zy0<@16DXmp>)8ZVPfwI3Jvv8!`O_Y1b58WMTqI^{V7Uyf?E)ON^EAPBrE`lP%h>Ez z(Auf{SRFEck>&+ zeQ??oKqoE-N2?sCIriKSC7kDLxz9eo<_@5g^jh$!z^L$ienRncELrB)XhcH2L2~VI z*59azd~zzW7DhzYr1SI0@PKH6Cuuyh=f^ET^BWF~40ooNSy)_r|L*j|++?YVEBSeGrm^PSWmO%8 zXDH#%jY41+eNq%<$;diu`U{7~Q4lzrc_8t-`WC3d^(wC)adrBjO|1TgC!ghoKE-Z^ zjI7|*py)AtGhY;nZjA=(S}DZ`dd=u5nuc-L8Tf?$Nb1S4TVTtAo=Fi=cA!qNG&;Z> zMb@wpnjPTU1#18;CoUfgH)}rq;Fh#EwPZ(n` zb_F(1!6HtB>&Zfeq|(5SjK;;@aUjblFiyb?xf7a-@3QiF!&C{d;+BlVxYk7dy16kT$fwYWk+D zw~b-Yp=WIp6R*xSwXrT*dqI&*f1&3%%TEeF`j@!!zX#tnKd^nWwX_4>}1G5-#>}abK zZm}7~6<`eNGyC>7AoIG)aMrboptX&9>tGR&jQ`6(qfdpI@N(sG7&&adnQ;Ir)m2lM6NhL-(uGvbBDv{emFh(-M^lG_^mHZx8C!U(>tEv&BC93 z>-5-TkCt|4UJd7N5g{+znxL?wlXop5~f2f=WEFXE;`r>r3(2(x=H?Ou09=$-+Zx%?O5Z5;z)f2*| zBGWUVgwqWXM^1F3o@!?qyDTmQ5NlbbL-c`KM`%wXI)50aNY?v`e=no-fGscjVMhz0 zZe>q9Sc^)rDKGU8+&Txe)^?Wn1fRw;^zzZF$y<0w>2-NqeW4*Vad7oPDdnm|Kdtmh z-DwkOlpB47V;=w!z|C&j!cOUQ7c`RAXUezqqtT~EeEDHrRr9>Z>CzvNTfw8C@qVtL zY{XfZN(*a^$B|cjF{h!RA)?=m1mKEO+kxmj#DjU<-ZczmwO*JA;D~LzcYUI82RVCprrR#k-LaRwH{Ig{B3E{KhR;_U$8tr% zGfr;)xqJ8aw0}TXf-cNPn4Tbu05V}8`WW_Gu6&V*axAG#DU3C2%xIX<5kkuAO0~VX zsfN>BvoSCCc;e=i&pKo021VIqSS1%qA}4)Cftqv z<*D4p$GT{6)3d47R>DyQrc%QR-P?2ndc$TMdC~K#H!)g5Zd6B4L;23X^n{)gQSKBb z;q)l0U`rL7fCwx<6me0~4mMwBA|<+!7VXf-w9wP0WKely7)yZuPT^8^F9r8dKX^SI zxn<8ed`Lm7?p*D+{;kuN7addz{KB0^UALgr2mLo}Jf|GCMSaGXE5;G@z!Iz38Pzw-q7uD)q{?p&@Zyp*>J6ct^n2(=W$r+J-r-1a>!4+vqwSyxj2_4_Ua(Ed=7Jo+>XyoJ9 zcv{%0rPpCEt0ZCs6$|A>T~Ym{hCw4 zdudV@PLaix$fQQq;!`@9x0@{dM|_nxI!AvU#gMznO5U!2A`>_$yks@|I|{e5oRDP{ z0eNVmgEUr%_RJ-xQMc&R>m@b^&R3+=p@*@p?6!aFi0d$|@D=I#QU0PI344_PjMvf6 z#7kSgIOloReN;ayagJX(aPI(27gs_HR*~wBDoxsgwM`C|nKd9&dJc?_EnM}jIkKUe zO{z6`@O&NUs?h|m=Hy9M7kz4K>3IDO>j-#xwOeea%b-MrcKxZqixt}(56nXd?KvjJ$~8U-V&eL)($ zkDMqM?J413dRbbKBe+eE0_i=yQDF=lM!T#W(@|qJ9k4U8VRk^SRZ3iN3V`ONI!7t+>SiIb z;YXn$(#e4KHjZz-mn_>*FLW+Lc_Wwdn(f4t0faWJ_YNH4V+Zp_Yve~(%Nu>55EWTc zLz=Jjq`cmkSTs%Nu1bv2P1bDENLS^mIttI?6IJYl(XFO7z3$r2(rM>5_3(>H;}oF$ zr+laUsQj+{$NQqGwE4ZNp69qw2OvY082?nD6jF&&x`da~b!~WC0t=wTLI$OVwT4ng zksE~V3D#)nFk^Hwf@zK=J_%;QVLadhDN@SP0{lZ`<+_*ET)y_6>FkzU`gU zuYUMvr=R=C2d8)c)K4`P{ubxE_wGzDyzu?$?k?*IJpXqgcf&2hgpj_{yqQpyav361 zxJ+RzB!3nD31@G)h+cLIxDHckJlV{H8O&pTd zYCpdWoIV)7aw5&}y79!CjZbjEJ-m-TFqO8gmXlS!oHAud;aXj^upc}u5#QvFp}1m0 z-*i)lJOSxSw~w_#LtbBrw(e61%bqEWj77=Zw$p7ZAKF0JbR$_V^|4)58C9x1oe|r0 zfX^7}OP#zhTbH*PUjFKwX(@2ZD<5IxH=f+A$^}Rp>BgY$S)f)PdkN|oePo37FYn9Q zr7v7Lew)g`-uk@2aiI>NlxR*yg>aNWadik6z7#Fx+qLCYIQt>^A`s5XygYB!WwQiL z8NB-v&U+rR^jd2NCWt=Z(GgXGZ!y7i4TdFKM%@+vExmg*A3 z?b9OEnrW$ ztJ8su6LIZ+NG2N_ykRVL=APtr9*W;&laI_s8d;=hA`}1sAOJ~3K~$dzxx1dx&BXAG z>fW@{$Syk2C?zy>w=d}B5^m*fHd*P@Okg68InaX%gT_6ulC%|O>N-#Wl!+#!#17A^4hiO*5(_gpL+Y_ z(|dmH7pISY=+~wXyzgDp72f;*+aBNg)_0~)efjg#r~l%q>7{Rcar)lz%hSDQk-hiA z^omDIHrUufYC2kC3wIk$U$CY@X_GeXX(6KtQ*Px6{4#WQp- zdgV5J3Dntrk|MS?R;9dFHTt(HfL$hS1$p|g^-%lpwYj#U2!Mw1+L?l(r*`N?4Zf)> zMtbeu!+to(M|v)?Tl56&CZ*_OHm0!(n%lpg{wzYn(YDW zeOtTNS=?j3{RG$jcT7L`rj6;bk9}zRwRe4N`shbq`|H3+Tpf2_y*qvOZ=Re!^=E%G z-G1sX^E&VzuLED-{r2<{uLB?5y)j)oB^6@ocfA7yP zH>bS$vJ>`DIGwh^5Mnsi`WQvj)W*C%^)TeK`oiZIj&rBJTm$t2)<*%J*hkkRGQLE`Xkd%zw_PG$A0C%oc`f& zd}MmZd*4Z8BJbbg@GZ7yzWwd#bD#d|^qnt%Zu-hyJ_z!y#k6&gZvkB4Isg9c>{pn0 z*I?-uBE|6z!iG)`ylD%^iQLqYDW*}%Jp6{v#kYjV>Z(IoKF1`Sr@b0XLk7<&QDdGU z02>~2VRZFbNDqU7T}eg^72m?t4Qm&{?3aXH*&W zaa2;S{K+e9h?=_7+0DznvZUeGdJIk1GbM-)g@;Hz6{FLUDcV6_A-Bfp*w~>S=P9IV z2Y``WPcV{lnqVA|vLmaNOI-kqQ|V*dk%mO=DNj$Sm+%K}LV8ZY0XczxArf_(GjB~u2UN@#zyu}HHGIjb^~SbS1#WU-zqT(=~hb@W;9|L^vM zzrQ%#ewwZ8Ksn^$I~SHwo%5R)Dngz5<*N;%p!rdLRQPgyZR1ht;>Y{Z$C7Z4(}g;K z(W&J^vL4XY4=f_ZI_=C z^L67LIv_sCd7T}GM>nZN!!{d|KRAj*yYj#EM@jiQkh2$(nbSEM($Ij{VV)Jec-i#{vlFl(#y)UVsIsmJ?1u-SDxZQ4>HwDW^D zMMADqr2e7Q=xL{t;a6GM%Bhh0gRd_d&GBU)Kg?27iFCV07wQu}$SU0|Z-?E^Z9MMB zX=_^1>|-~lT!Lu(;PksLL(Q-EZX24;nqUVJ?faC$Uu z3L<$etHa@AE5P;%VCe|#0=n-}ejOa9(6>!Kz$Di6L7tW+?D{DeI~EeXRASNK_6=pH z2PD3|4%|8ub&lH^KPOSVq?AYP$c9?6PvZ~Xw&S0Klsj!HiIfV|IxJT$X-l`ptmSQG zboE~Tt9k*>?n?CxY<&QPrrQlY)y=vHf6Eotlm*(5LeuJttW>hEV0YsvY<1}P_2^Gz z`O}J^1Lb$+UuV(H^Nsfx>Htchy-xK`C46LBaP>|jO<*gNqdf&M>~nU==w;}a(1_5G z-g48;HT1UZ?*Y%=enRkjckh|?p@$y``RbRylE-&n{>-sEN10z zSOKPocl1hGSc2+dp-tBu^mhqUT@&bLXjc-nZ#E7Y>Cu?Yk*^JDon*AwV);i***5P0 z+rk}{j7}N}8laQ=()n+&E*wYJp3%+LiLN+{@u{J+VX76{rOIR&@Hy2+|tN1^qr4NIhDv0o5cR)HY|_b-~&JHEY~E1w@!->5+YaQ z9XZv)o*UT2p`yy=bWA>0zEfKDKVab5hyLiEmRldT0sW?Yt+fftD_{P~_v$*QAAN1j z^=#-u9e~V7#boP!;R_zcmC{9%G;HCaa5nFGya;itg}?+>4wZa+$ga)+M=<4ZmV zk5L&2+2W-k!|db3>v@?dj&7*tyxR^Sn|Y`-R{Q<>;}t5rg_m?5Rx?wT#7a9vC96oy{^JIjdDq|IL z54dERcZ0-jLYAeGQl=O*UhPSE=_Z!8E!hr?hAGYJ_XTY5L>kz+g{E|h3{mYj8lbma z@=3@|N9pJW{TROb$S)PBEF8oSV=6acvjf}6KcRK|Q0MAPJMiCF>C<)Y;cStjJskRp ze;(ye6&^hkfxWCdGJb%h^^fsJqmdyZ2T%aeB>6ffNQG@7-}38z;y zg|}YFM0x$VsJZ>}v!Y>&T0Oki4h|^V3i^;nZnISu^rSIwFJoSYk`MHdHrsZ4R@g7z zL>C?pcUkD$-^-h*i4-X_rA~cWJ~w!^X@Hqd9_3TzLv`=9{HS2>?HpdqaiI=iuFR-N z3D@~mrj#puU0Xq7MWz5e`=>yD0Mu=oejDGX0M5yM?N|IB>C3$Zqx05u=g#fvm6u)$ zt0PvQpL*u$=`a8Mi_WgOdGQ_1CIM(57R_TLM9yV*qjmDdfIDzjp zdHSHE-SGdACqm3s_wTWY$c8qb zDEK8J7i1ji^J6O9_G*j`T({5`b(GIEA8FXpvFH9KUHw&B@jCDILLERUR!Y_VD6G;- zA+IA{@LHZj;Z6ZIcodK+fI|mir>oZPU0-tAW-iV&Jgd`7dediKczXJyfAMdo?|=T| z($=YE>bk4$ z&co;ovI4BLD3`Evhl)wCL43E(Gk-gVeEQplVAytSc#m#8q1f7YadLOsl0TP!v*>zFn;-9$Ix={8f6>CPHn^2m|zkSt#{FTYBBiw65DuQN;Y2zmnF zFz+MM@S~;Zwzy`)W@=!#%hX`ubScvoMmXO`pp0$Pj-4FkrZa2r9q_Yj+LI2|mHezj zW%>X=%IIpg8-7TpF2)eoMabdj%!&rW3j5nic+U%dwZiWRKBF%kR?`sm(GijBbR#SL zi3}UwQP{-nw_oYDexIU!%+orePSLZ%a-SObWMqSR!1}|gmWw9^v;n6Wnc5h6cDb24 z<$aA7(r5aEZcaBgwX@%$B=6x}+6^K7K0WObQKb4W)S1GmqMf_Z4vO=KEIWPMmEi`1 z8>uL4PuPyR&v-xjPx;YlIMeE{_?_pf51#udg(`yr#d(ZMjrSu>2$NVnfGgov5J*B$ z-z86&M+oXufDJ0n%_ROVz$T%%n{b}`_>$lP2@97UiVStHDp8QZxb9Nd&6l1iv_@fC{;@FaQ_%cnV%~_NhVeW{Q1C81SjbZa4G#orDv7I?wzD0lL`{ zt>m77DGNChqK5(ct3!|3yXqjuay9tGdjZ;H#fLg(^p&d75cb=aV+=bSi)1A>*mC*Q zz%b$vhu=Hg!}+nfQ$#u#jo5qx+d1m%6F7TJ&Lxtxa}M$P4L6=F%j_6^reLr0WAwSv z59f3by1!5dP>e=lqhh5{r5mo+Yl`Nr!W19V=rb9;!~nbcO3&yqi4wyw_zdy-4=mK~t+jF4j8csiA!Bk<`->Lk3I%?!=8(IFd$ zjt=%v!>2#c!4vD7jl5PMj;U{g&yyW>gD6jJfW3ywUTdUJyAda&cFg_5`&v&MX^PIP zNBLXPT;zJ;4nU!X`6aaG{0cQ~RIcFr6l!{B3P5z;zNPQVGvRle0#J#BSPSCrJPPE? zKg)act}e)7O@BJ-+9n+UBkKk~*6C-$53eHo(1kYUVuts9b5SGoR~ zNnU)@^rp?1rkCCZ{j+bL-n{j~^un7d*K=>4-n8-j^uxEn^9K!n{w>J*!JDQxPtQ-! zgP)$|YemcFrXRkQhVz3rhW`0C)0n>h#_0_U@NXoP|NdjsV+;5^#%T2HjcI4^2SfsF zmco!%nS&m(__)YZ6{jsU)vV-WPs^2%{{FDJZBU_eWz>@#k1|hd7^A3fo7}AG^DbJ!U?Spp% zPt#5QS=BdMqpqC}HC$Jq)oPHH`*be0* zo_wC@&5g3`Q*`v`Zx2r7(7u`s9zH&Oa0-yT(yBv0%BLQ5Up^(Ra2+-E9&wfSpsO~& z@S$)8Dy#(7b*|WmpBJ#L@YAbmd_3D(rs0--rgZ>kK$yS0K{#s|wuRxAGys1}Y$Fz? zVw_Jg?=sXswAVEPa6yj?!2xEbL0CP!skiCYU5yXB9zPNyv)|talQ0!wgIrr;3rERM zWx46aCh3=OHhF(x$JaQC`LEx)G5x|ve{p*M+deuyah=_ZkHB#ECi8gK16Tvt1itQ5 z2j>0DJG{iin!!CjLbSYdt-&|Y|1O^~;}Ku*z$a+H-<1aX>r8JN%(P-bXT#5x@AC6# z-+S_}rjI}UdA>!!kD1~izBi%cZ#r#q>{I_NL?IXR8i~Zk)9@&hjYt|As`~_5Bx89w z`l;YCM3))05t(+mqcR?A3l~5iP|Bb?c(Zyazr$>f0quEXY6lBqFs;LM8tT@bCUkr=4)}JQ=2NDO_)Z#Gg)cv=wDVqHQwN~1(b3DX z&r+h4RH>21jX-`*%avBT6pW8igk3PwSP4@Znan8ODS$>cTxVM^5j>6$tr37kEbtw< z*azP5e&J%DJqh#+7yGOz=vclX4`rZJ$P)*$lFR`wNVtFiwl1Mb=;xGyP|*)~(woo$ zLPX{NXCM0~)9?JJ|J2MsmgE2aKc1LA{=a-NVXU26{@KylLG$mphx)FrJ8h`_^Tx;t zr_~zRM%liqMDesgXv-cuNMqelcJb{5>`g~_Y11e*5U(MN9&0=L>KXU(X|m*#Hh|87 zbzT_7&enx(E{+HP2vdYG^yum0n(9`$Bq{wfWkA^~yLpazk7J+5bgtO@BtUIFWYOS0 z$k`6%4c2Lb8>WJ?1#_f#h04MUORv3g_`IJW=a$&`lfV6>oSLo=eQETq(O-&c z^rsP5@I|g_dhVkHk4lxoGO3QB7#3Y!=QKwAuB{jX=%@J@2*a=2gBJ|fSvb|9Q!W5i(NK+8z;7uCJT3T?S7djFhcST{EYHU0qmub>kh;`gYW#sw-1mS z>Z4c3=i`<>%jYM|u1dq&!xkSPeZv(N;2z=T$9O!leRaD2#5LxM{5%=DE!k&~(ai=& z8GTF6k<{DuXp3EFq%l2)7dCwDh}bPp5P~PKgxQMRVGu2H;9j_0BC8MlV5rC7OIFiI zJ`LY8$;Uxd-O#?t61LvaEx(%pX;$Xd$Fe}*77rWTbSV8>x!SKaQNKh)=JoSyhx-TF zNqXlFPgmGcy3d-CFGS^tQi+WarjQ!JmDOOIjrcZ#cUYa1fNowh%0pu^hOrpw4m!`m zi(P+&MB?>PepZ}tt*&FIQMmJ5UsD87!c?eWg*h#7P2izNvn0;hp91J@hN+s3 z8g5@oflF^GI4P=0+Hw zhGa!3S6Re&hJ9@@r{VLeGA(qAzfIN_*pY;z@rTY^d}x#|fs8-CV}sp9*EZQ8wR4BY z<|8U17QGOCZK$aZb+-ZbM!s@b5IR1|aj1mN9EVCX%#L407Syx{r(=$;+h+&f5fPygTp0CGJ#vTeUNtOD+*jB%u0F$e$}!@>Hos4P(}UsE@r@c5q}hSU z+JpM(eE}S}#ipknxn|EMcJmqV?mN zOM41{;SBo?M-|gUS)aEi)FixzG$DN+=P~aWFT#fjhWehQ2_K-wM+93x;gb+iym=+0 z!6X=@lW}v6q2hu$p=$^W=(mVe)bn^BIjlF_+v8`#N&j&k`%HoM?(ssCbJsj2!7eOp z8P=vFOGw&7SjxD5wN|a2CUHqjjUBXEj0)Zc-C-lEhHp`pFhMkyX!!AUW0*B|`k!#> zt}*EBlF1EV>8N|;)}{<{MWN0=P6eO5BcN_6OUZ4B@Q2Xh!A(#L9DR@9fY`?#nI5Dg zP>GXAoJut5=G6?IXmu-Cn#La|1#Vsp1p}QuLwJDCqeOHlDZ$G}rZF&Zbf?S!`n=N_ z%h!yh@RP^rJM#0saCL8v!d341ec{i#p5FbOMGd|ct_fCH^+0B+v^iXKrFb{7n^@_w zr6v;4Si;2M<8)vh(z|+(3{L)rt|OfbccCZSYWe`|FtWs1W#y}r5Wyhlfe+lRsmAiBk(U0-ip)oGm6x7}YK+)`!Ze?GG&Dz;Q z_mSFRwvX)1CXBq@CXI&VvC`xyNHWdM#PUAuJoMX6>Th1(j1TY9V@J z;)9IfFe%@MXLm$(6-J0Uq<2tYm~}}A=_%pkMj(^heuE}v3;;&|86A0q$$p>HiyQNL zf8HbYbzb74D`8%@SW2IF0^;lWWjTKpqVmdX$v%JgyJzD{8YC7o1QoW1Y#6k zQ`jOZ;5D2~L(KByI*dqo(Sex>S8au9T7xu%2G`4yh6lU~*Q-NNamv23n|6o;VuM}@ z-DE48vQ1(UReQhHUR&mugA-%jRG;R16QWE|V*Bb=ZDt!y@tvu)< zHH^$A6OBr2>tw*ZK7VzUJ8M6QNeKaAWE3oYn?4xU6Yf&yK6Z5F-(M)s_FCg%rvz*v zefgD_r+@J;|7iN`Up_rO!CQ(x2He`a!LJjsJ@h6GtzPoBfx7p|^rP7jAJ z+yRsmE36beO-wnz*UGb^>lNj9|9s_k$>TfsHIz)H16$pLx>w%+%)3mlS5aMKu9&wS>E>CJ8gdMk0l3vBG!dTDy`E$G1JpSNzk zI6ePn=-KJ>rfm2@A2tX*(Kr0G%|FkwL5POMrl2=%JU6`nd<^`?>Dg=|I%ZSQPb_{g zJ^us__1qhH_W_#6*>~`L-U~Q*me-~EU??5Z6&sE#oh%00-V6u)n5X8;CYin|$Y-O_>ZjQ)@{4%&e`H0^k5C#8dE`Vh)=q%4KcP#rdX=O zc&S|>cR93SY^C?op|)T4kq@^F<90koSq?ZxtxY$xHd*OtIi+}J5^tws`?OP0Qlc!= zP96{Pt&wu{tq~q+9t2xG7e2;br!rUXqY}d7wP@zo%`45pc~V1#81i8l=lBIQ|eD*?!`ClUCuc5+72|qdP)h|2&O>w;rY8(}cjs!QXoh!N4yt>hCe)FYX;7i?_S9JdBQrLHzJ>9Pk3(SUx9D|1dG`7xIrP@W5#MOoXQV%1b50iW z)ZN3ugpw4Dw%ntG<&jk<3u(t|fNGm9V?WCaLl_l>hcd!|JNWfeh#mc#8?W=)RYVmO zSEGoIe&+3(iIgWgAgRft&1OGCm(g-}z7M&SUsZHn4qv`@YB?Xm^EGt<@+_eR*L^AJ zwblXd(;?PkAa~VT&!RW<5zUDyfCeHwIxsSj-Ue;xZgg&!>omcZOo&O73CfdSp=lqJ zbRVEFh7Wz4GRRYWLVe^y(IZrGj5_(*De*0Q^{2|*Eadn6kJ%b(IBL}9y9quWIHJ^Qyb??aVo(?U{pwmGmM|@7)*c9yd19(az_rnnynE_h1xZ2Wls!*GIe=nxK|9c5M2s_(+bj;bUGpXVp~~dD;Pu@5)GCM@<2u zcSnv6UvT3kKb5)oks@6*TM74CaPjb7WeR^9P0?;?5JvDC*)wW0M7I@wseI;+#j;}O z2qmlm+X7u;Tb~F(nZ-KkDN*1=5x|KY+EatJ;>{F*$||^R5V9T3@SW%SX@V8*^n?o| zm)|OIvYqt=dJ})<*%y%x=|Co*J@ZaNoEIY@EP30B+-A!zNL|^vzFQ!(bB_*Z^~A(c$wsE0G}u1qY7Agx8~*f>%ZMwZ zFqhz=FuB)W<&By7+D>LqVoC!ul21$zv*y~N0_&7-=6%v zMc0H{JFa%suBxLX?)b;i5JF&W{6%3QNKX3`7@D_jHK`|07H^;$_&3=N(VZUJJOw~Z z>onx4{kmKSn=tF+dSC~x(yyzY+r~3*9iCJvcQpkl|0#bmafH1uf1Be?d)RT|2%vhJ z5?1#L8gb$)0vKtcP#KJmf;v(ey4&Jfm};f!;8bjHNNKNWl{9867q~*xc;t}R)@Ni{ zjae3XoQDt_ZIdM*@kt~%)o5jfhLHmX*?c0sy^EcRJQ=z2bJ~sqjQ;s807rV9kynKB z&iPWuH;a1(7|##jf&YULuMj6fb90h%MSr|MoI1X(XU7{OH9o ze4Ki)OoBv5d~Cs#Bnx^tg3}Yr;=2`@US_^Yy7^-m?0`CYq|>XwMp8_3Qbuh;Vs&)m zYJ7YA2Q4(KmH%OSCBE4oS-@?bq3GdB>Jc5<-5%cO6W!?LNZ;CyHsjEwoSNTQ*Zlw? zMVb$ACj$eP|MF-!ovZVztg9;&jd3vM3D32V72mwSAI7q8yqklMu(CKjk(dMy!kZ|3W1UJEas@R)v|ubJTi$Avopd6j~ODITT3I5#O8 zuj2g^ZnUjHP61qDCThnn&{(s?k6^Rvn-zFrDyS+#Jgf_7!E$cyAHtp zdJ~cF3(A!P$Kce$QRoeV4f~VmLSbYz`s^V`M|mDZmZwm9f|mw z(86yQxL}nC!B?@~^Bxf`Ecso*ypn8W0}T|R5icAXLgGWG5|)dozy(mF3l}K0 z$RQ#2l23Ry7%f=M^L+=)xL^v9H{wz*yHiSqt=b1XDZ62Ks?PGFLl4pOWuX{Je9XkP z!ypV>iQ1d32E2%#4H{~T4q936z1O~O&e`Ra+5-xcHe;R3Upw~3o!dIOoUR;Bt9Hb_ zsJN^34v!$X6e!cYehXm>3c8%o*!I9nL-X|De9e>K-htmy*v&ubtw1aZFU`vZIfZX<1|cH^Uj-PmAVH=4JosnF; zuuke@ELwkDB{1~5euH(O&Ig)&U6zKCugmJx^5N80#esc%%D-bfGw5x|%59IHY*B5r zbw7N2&JF>F35*)eZWZ1)M4Dz=!#YB+!S>Kb90V!VU%fc2!!RK>vQCUgDa6)1I-W z{gpITC=fS-1PRuy^_BcVH0{iH_`%x$3=k`ktMrL@>j*u5*d;(_HtHMKu+t~w;&>`6 z4ea?u7Sm_%O{Ktj()xe&ZduQ{Bz)NHdZ5-|Kt&52-guZg})Bv!K(x46gHE7E;XyHeFk7Zu;$-RI2ilIV0kiL55 zS(uYt@@KANz3XzoRNNWUHE+JJ&J}ki+QOM_P1NC4F~agwRysQC^ah&Imi2OGRilxa zlvcWa!FKTKdhtrKjfb55_IuK1>`XlK0M0k>J|OM8aBM&(_G#c(Q(9AY?Z063f(C)9 z1hqyFjd-u*8>IPJvEYFrvc3=|eRTQb8mP+_@uv5x1mj&5Y>rXjb7kHELMxE1f0Cs* zkZ7j7%8Pt$D(`hAAADYm1|7ZHKpS~){tH*{efHi*a{KBl@(eJe5a0URYl6sg`Lmy$ zotc06lokbfV8HkS8b=QbgKAmTO0{^Gqnuu(YN3=m=4-&f zo&+c1z?;S!)N6w@*9NWb)5lpp$jU!o)2?m!LRk=HnLxR5^wzd>RXxY;5QMb7D3O@i-{q-vDmFkOc8h@qbC1pQXp3NM1 z>LjBWyG`TGC`yB#ft|U0ls8wZZ5T6w$f3D_T^hIqFn!%+!t&NOJF*uKX;Lo$G6O=I z3?WMun|fXv=ygNoGp9no(`KBlATuuU7R*x#&{9G7~-O zMe%fa;h(w3=&Pp6&$UETVjDa%u~{EvV5vRCVI=NtFQZhqf%7#UgFR`XsW=;g zrH*`bd|=IIUrc&wN6?27I%sgXg4f;!!l1TuZU?qr;`1|A)(c(2%3u1(N2Y$>K|>{L zznRPzUakG|`6F3`4`j%!E{=k>6Yzp5<4knZVgPMpXFoW%o)*_WqhH{yijbE3x{?r z%Y#7XLzBwpJ8S7!P1mnfGpVWRH)$sh^lE=TUF~v!JlE9PbT{Vfuf&cK;FT*xdnM|_-2iL%E{{rhLU?6z5U>;sut8rqGo zrG4+wCj48Q3N>VpYv>xa1}*-zHOjwmk5~Aw2Z0!ldbOWQCk5!N>fM385GQ`G{JS)` z9z?l#sm`S05izO0lclQt5UimZMJ3mqep$#O~}5G@}TV0Ew|+s76oTY%0DvZuvhw* zV|lArq6fX&!2i9X{+i5~6ZzE}<;t-jz28}wZ4fs+c!S+~Yt%_Ua7>s1PZ3?R-MVl~ zgd6P5%2p0-MPccsdAV7ajhP(`q*y<1+-+Iw-tw1{{`$QhmBD1m8a{K1F;4hriw5KO0yqy!5A;-F#Y_nxyUbb>G@`!y z{d{SvCNvvFz2c4RL6jE~{=K#@6mP4)9~3cmGiyU)MzPCehf z_aduRQ`~kgO?0!#1%>*)Zg9v`$So@5Q30|`3iLCp zy3ARfmOpOQRZh#cK9^a`?XpN1(%3`eps8kJYtCSj#=6#gC@#^pqP);ckW3*`VTj;8 zs05kmHIF7E6I=MxR{s`W!V|ak*|KMjPYnR8Xq9hptMC!t!Qrv&G%jBRGLJPCro(yt z-jtsChjf!lgEyT{no7EAQr@f6e5J?K-Mav!)Z%~Vd3yllaHiu;>A{aU3ZSFl z-5=b&a7mUJRlU3h7jQQ_p;|eL5Twa`aF~fPxX`dm6{K~vm)FkCKg&h8 zAE|4~6cmbx4UhE=J!P#s=OVHVAlq!p4`GfcmfV?U7?y0{NKC;A}+MLK~px@{bJ+*^Obi{BVr`ppFP{IPuTZyjem zeyjLx{H7-=T%{g0bj#l4)){O`kFPJ-z-L-McLDZ_x+9cV-JO;5dG8hYxvNdzag+#LyFwF!ygC`4;rljnh@nI(2=%dm2&uqs` z$sRX^T{3Wv%q&~Ld&@3Y@%@4hseZ2F>m&VV2j!RICM6BVTTU*-jUCcPAG&V214odvvqTZqoqlyynVvo-$q7??Id;vs+vM-0RcJbXPK5998#qU zbG8b?!2#azV<$-O`+wr4qTfF9NHUM-W@a+b%W%yyD9k^-iG*y5!l8rFa8IEdT{Qx{ zX7ew+GV$Lv`gJZJG?@&QX)sD7%+~%g@<;pLLCCWLCA;?V1UBfhbJL^hRCq*l?99s< zKCwI$oCcOCb*Vk67l_o@GTTc9`V+Z9%`O^Js3bVRSA%e@pw2;tGj7plfRU=?7n^=C zhBl_ojC#wKA?=`0w)$^Netdj-09d2;_^3j>Y00A@TalCA3rk61&3sKyb&n}4aIb{x zMiN`nT9*c1X&+J?H~6H=g)Q{WxUZz^zGeJ%9@NRQ;#e9aEl*}|L&B@?*x5z$UVsk^ zf%nB9A521dAID{x;rj*q?tnBt#pk;TS$bHx2y6Q7JNeNy^6mEddX;MemjL2P#hpd+ zu?t~*fM)6^ZPRtHBIk|(^e!163UR|K`gA_W5W!8JXwRRsSXreHu z*&T++*YvnF(Qli_hMQ0GV&Em^E)%71yJ^*K+E}{{*5Jct-2p&E-;!IWI70+5Bz;!I z`JR8F7iJq_!s12Lc44W5%FbphjmWpR_yYYqvF^DXJ0R@wZ7Hvpq-(xj^w(I8XzFO2 zZ1dl+<-48bi_38z1k#F4xdR(4@FyQP^%a(8(`-N-o0TzM%vEkX2K2q{#Sy$TzYuI* z70**}m}z?N7iIU>o54Hngo3$iV9TsM!q8vqdOp2n>eyRmv-FS#-lq2ksW8ew`1D}b z;CxIpcOOjcfn5$nFT8d^VNh(qx|1kuy}&zb(Nnb9!k_p}gWLsBjCjcNxhfx#=6?O> zPya7JW|@1>l%~T-lb)+S`1l6`Xg1*cRG2d5>sS715{gBHPHeY
    |auNwClUhdlJk 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

    cE@nICE%}ef0psreAuruGWA;%#+ge-U(HHGB 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 a!Y*1dX%G66ZqL#C$|bw0ZoP5@jOGW1ArT7z diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/Resources/en.lproj/MainMenu.nib b/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/terminal-notifier.app/Contents/Resources/en.lproj/MainMenu.nib deleted file mode 100644 index b19d0fc34010160ff34b7016e7bb0ba30c7dc2d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25790 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


    '; - expect('p#a+*', element, 0) && - pattern.push('\\w+#\\w+.*[+~]'); - - // ^= $= *= operators bugs with empty values (Opera 10 / IE8) - element = doc.createElement('p'); - element.setAttribute('class', ''); - expect('[class^=""]', element, 1) && - pattern.push('[*^$]=[\\x20\\t\\n\\r\\f]*(?:""|' + "'')"); - - // :checked bug with option elements (Firefox 3.6.x) - // it wrongly includes 'selected' options elements - // HTML5 rules says selected options also match - element = doc.createElement('option'); - element.setAttribute('selected', 'selected'); - expect(':checked', element, 0) && - pattern.push(':checked'); - - // :enabled :disabled bugs with hidden fields (Firefox 3.5) - // http://www.w3.org/TR/html5/links.html#selector-enabled - // http://www.w3.org/TR/css3-selectors/#enableddisabled - // not supported by IE8 Query Selector - element = doc.createElement('input'); - element.setAttribute('type', 'hidden'); - expect(':enabled', element, 0) && - pattern.push(':enabled', ':disabled'); - - // :link bugs with hyperlinks matching (Firefox/Safari) - element = doc.createElement('link'); - element.setAttribute('href', 'x'); - expect(':link', element, 1) || - pattern.push(':link'); - - // avoid attribute selectors for IE QSA - if (BUGGY_HAS_ATTRIBUTE) { - // IE fails in reading: - // - original values for input/textarea - // - original boolean values for controls - pattern.push('\\[[\\x20\\t\\n\\r\\f]*(?:checked|disabled|ismap|multiple|readonly|selected|value)'); - } - - return pattern.length ? - RegExp(pattern.join('|')) : - { 'test': function() { return false; } }; - - })() : - true, - - /*----------------------------- LOOKUP OBJECTS -----------------------------*/ - - IE_LT_9 = typeof doc.addEventListener != 'function', - - LINK_NODES = { 'a': 1, 'A': 1, 'area': 1, 'AREA': 1, 'link': 1, 'LINK': 1 }, - - // boolean attributes should return attribute name instead of true/false - ATTR_BOOLEAN = { - 'checked': 1, 'disabled': 1, 'ismap': 1, - 'multiple': 1, 'readonly': 1, 'selected': 1 - }, - - // dynamic attributes that needs to be checked against original HTML value - ATTR_DEFAULT = { - 'value': 'defaultValue', - 'checked': 'defaultChecked', - 'selected': 'defaultSelected' - }, - - // attributes referencing URI data values need special treatment in IE - ATTR_URIDATA = { - 'action': 2, 'cite': 2, 'codebase': 2, 'data': 2, 'href': 2, - 'longdesc': 2, 'lowsrc': 2, 'src': 2, 'usemap': 2 - }, - - // HTML 5 draft specifications - // http://www.whatwg.org/specs/web-apps/current-work/#selectors - HTML_TABLE = { - // class attribute must be treated case-insensitive in HTML quirks mode - // initialized by default to Standard Mode (case-sensitive), - // set dynamically by the attribute resolver - 'class': 0, - 'accept': 1, 'accept-charset': 1, 'align': 1, 'alink': 1, 'axis': 1, - 'bgcolor': 1, 'charset': 1, 'checked': 1, 'clear': 1, 'codetype': 1, 'color': 1, - 'compact': 1, 'declare': 1, 'defer': 1, 'dir': 1, 'direction': 1, 'disabled': 1, - 'enctype': 1, 'face': 1, 'frame': 1, 'hreflang': 1, 'http-equiv': 1, 'lang': 1, - 'language': 1, 'link': 1, 'media': 1, 'method': 1, 'multiple': 1, 'nohref': 1, - 'noresize': 1, 'noshade': 1, 'nowrap': 1, 'readonly': 1, 'rel': 1, 'rev': 1, - 'rules': 1, 'scope': 1, 'scrolling': 1, 'selected': 1, 'shape': 1, 'target': 1, - 'text': 1, 'type': 1, 'valign': 1, 'valuetype': 1, 'vlink': 1 - }, - - // the following attributes must be treated case-insensitive in XHTML mode - // Niels Leenheer http://rakaz.nl/item/css_selector_bugs_case_sensitivity - XHTML_TABLE = { - 'accept': 1, 'accept-charset': 1, 'alink': 1, 'axis': 1, - 'bgcolor': 1, 'charset': 1, 'codetype': 1, 'color': 1, - 'enctype': 1, 'face': 1, 'hreflang': 1, 'http-equiv': 1, - 'lang': 1, 'language': 1, 'link': 1, 'media': 1, 'rel': 1, - 'rev': 1, 'target': 1, 'text': 1, 'type': 1, 'vlink': 1 - }, - - /*-------------------------- REGULAR EXPRESSIONS ---------------------------*/ - - // placeholder to add functionalities - Selectors = { - // as a simple example this will check - // for chars not in standard ascii table - // - // 'mySpecialSelector': { - // 'Expression': /\u0080-\uffff/, - // 'Callback': mySelectorCallback - // } - // - // 'mySelectorCallback' will be invoked - // only after passing all other standard - // checks and only if none of them worked - }, - - // attribute operators - Operators = { - '=': "n=='%m'", - '^=': "n.indexOf('%m')==0", - '*=': "n.indexOf('%m')>-1", - '|=': "(n+'-').indexOf('%m-')==0", - '~=': "(' '+n+' ').indexOf(' %m ')>-1", - '$=': "n.substr(n.length-'%m'.length)=='%m'" - }, - - /*------------------------------ UTIL METHODS ------------------------------*/ - - // concat elements to data - concatList = - function(data, elements) { - var i = -1, element; - if (!data.length && Array.slice) - return Array.slice(elements); - while ((element = elements[++i])) - data[data.length] = element; - return data; - }, - - // concat elements to data and callback - concatCall = - function(data, elements, callback) { - var i = -1, element; - while ((element = elements[++i])) { - if (false === callback(data[data.length] = element)) { break; } - } - return data; - }, - - // change context specific variables - switchContext = - function(from, force) { - var div, oldDoc = doc; - // save passed context - lastContext = from; - // set new context document - doc = from.ownerDocument || from; - if (force || oldDoc !== doc) { - // set document root - root = doc.documentElement; - // set host environment flags - XML_DOCUMENT = doc.createElement('DiV').nodeName == 'DiV'; - - // In quirks mode css class names are case insensitive. - // In standards mode they are case sensitive. See docs: - // https://developer.mozilla.org/en/Mozilla_Quirks_Mode_Behavior - // http://www.whatwg.org/specs/web-apps/current-work/#selectors - QUIRKS_MODE = !XML_DOCUMENT && - typeof doc.compatMode == 'string' ? - doc.compatMode.indexOf('CSS') < 0 : - (function() { - var style = doc.createElement('div').style; - return style && (style.width = 1) && style.width == '1px'; - })(); - - div = doc.createElement('div'); - div.appendChild(doc.createElement('p')).setAttribute('class', 'xXx'); - div.appendChild(doc.createElement('p')).setAttribute('class', 'xxx'); - - // GEBCN buggy in quirks mode, match count is: - // Firefox 3.0+ [xxx = 1, xXx = 1] - // Opera 10.63+ [xxx = 0, xXx = 2] - BUGGY_QUIRKS_GEBCN = - !XML_DOCUMENT && NATIVE_GEBCN && QUIRKS_MODE && - (div.getElementsByClassName('xxx').length != 2 || - div.getElementsByClassName('xXx').length != 2); - - // QSAPI buggy in quirks mode, match count is: - // At least Chrome 4+, Firefox 3.5+, Opera 10.x+, Safari 4+ [xxx = 1, xXx = 2] - // Safari 3.2 QSA doesn't work with mixedcase in quirksmode [xxx = 1, xXx = 0] - // https://bugs.webkit.org/show_bug.cgi?id=19047 - // must test the attribute selector '[class~=xxx]' - // before '.xXx' or the bug may not present itself - BUGGY_QUIRKS_QSAPI = - !XML_DOCUMENT && NATIVE_QSAPI && QUIRKS_MODE && - (div.querySelectorAll('[class~=xxx]').length != 2 || - div.querySelectorAll('.xXx').length != 2); - - Config.CACHING && Dom.setCache(true, doc); - } - }, - - // convert single codepoint to UTF-16 encoding - codePointToUTF16 = - function(codePoint) { - // out of range, use replacement character - if (codePoint < 1 || codePoint > 0x10ffff || - (codePoint > 0xd7ff && codePoint < 0xe000)) { - return '\\ufffd'; - } - // javascript strings are UTF-16 encoded - if (codePoint < 0x10000) { - var lowHex = '000' + codePoint.toString(16); - return '\\u' + lowHex.substr(lowHex.length - 4); - } - // supplementary high + low surrogates - return '\\u' + (((codePoint - 0x10000) >> 0x0a) + 0xd800).toString(16) + - '\\u' + (((codePoint - 0x10000) % 0x400) + 0xdc00).toString(16); - }, - - // convert single codepoint to string - stringFromCodePoint = - function(codePoint) { - // out of range, use replacement character - if (codePoint < 1 || codePoint > 0x10ffff || - (codePoint > 0xd7ff && codePoint < 0xe000)) { - return '\ufffd'; - } - if (codePoint < 0x10000) { - return String.fromCharCode(codePoint); - } - return String.fromCodePoint ? - String.fromCodePoint(codePoint) : - String.fromCharCode( - ((codePoint - 0x10000) >> 0x0a) + 0xd800, - ((codePoint - 0x10000) % 0x400) + 0xdc00); - }, - - // convert escape sequence in a CSS string or identifier - // to javascript string with javascript escape sequences - convertEscapes = - function(str) { - return str.replace(reEscapedChars, - function(substring, p1, p2) { - // unescaped " or ' - return p2 ? '\\' + p2 : - // javascript strings are UTF-16 encoded - /^[0-9a-fA-F]/.test(p1) ? codePointToUTF16(parseInt(p1, 16)) : - // \' \" - /^[\\\x22\x27]/.test(p1) ? substring : - // \g \h \. \# etc - p1; - } - ); - }, - - // convert escape sequence in a CSS string or identifier - // to javascript string with characters representations - unescapeIdentifier = - function(str) { - return str.replace(reEscapedChars, - function(substring, p1, p2) { - // unescaped " or ' - return p2 ? p2 : - // javascript strings are UTF-16 encoded - /^[0-9a-fA-F]/.test(p1) ? stringFromCodePoint(parseInt(p1, 16)) : - // \' \" - /^[\\\x22\x27]/.test(p1) ? substring : - // \g \h \. \# etc - p1; - } - ); - }, - - /*------------------------------ DOM METHODS -------------------------------*/ - - // element by id (raw) - // @return reference or null - byIdRaw = - function(id, elements) { - var i = -1, element; - while ((element = elements[++i])) { - if (element.getAttribute('id') == id) { - break; - } - } - return element || null; - }, - - // element by id - // @return reference or null - _byId = !BUGGY_GEBID ? - function(id, from) { - id = (/\\/).test(id) ? unescapeIdentifier(id) : id; - return from.getElementById && from.getElementById(id) || - byIdRaw(id, from.getElementsByTagName('*')); - } : - function(id, from) { - var element = null; - id = (/\\/).test(id) ? unescapeIdentifier(id) : id; - if (XML_DOCUMENT || from.nodeType != 9) { - return byIdRaw(id, from.getElementsByTagName('*')); - } - if ((element = from.getElementById(id)) && - element.name == id && from.getElementsByName) { - return byIdRaw(id, from.getElementsByName(id)); - } - return element; - }, - - // publicly exposed byId - // @return reference or null - byId = - function(id, from) { - from || (from = doc); - if (lastContext !== from) { switchContext(from); } - return _byId(id, from); - }, - - // elements by tag (raw) - // @return array - byTagRaw = - function(tag, from) { - var any = tag == '*', element = from, elements = [ ], next = element.firstChild; - any || (tag = tag.toUpperCase()); - while ((element = next)) { - if (element.tagName > '@' && (any || element.tagName.toUpperCase() == tag)) { - elements[elements.length] = element; - } - if ((next = element.firstChild || element.nextSibling)) continue; - while (!next && (element = element.parentNode) && element !== from) { - next = element.nextSibling; - } - } - return elements; - }, - - // elements by tag - // @return array - _byTag = !BUGGY_GEBTN && NATIVE_SLICE_PROTO ? - function(tag, from) { - return XML_DOCUMENT || from.nodeType == 11 ? byTagRaw(tag, from) : - slice.call(from.getElementsByTagName(tag), 0); - } : - function(tag, from) { - var i = -1, j = i, data = [ ], element, - elements = XML_DOCUMENT || from.nodeType == 11 ? - byTagRaw(tag, from) : from.getElementsByTagName(tag); - if (tag == '*') { - while ((element = elements[++i])) { - if (element.nodeName > '@') { - data[++j] = element; - } - } - } else { - while ((element = elements[++i])) { - data[i] = element; - } - } - return data; - }, - - // publicly exposed byTag - // @return array - byTag = - function(tag, from) { - from || (from = doc); - if (lastContext !== from) { switchContext(from); } - return _byTag(tag, from); - }, - - // publicly exposed byName - // @return array - byName = - function(name, from) { - return select('[name="' + name.replace(/\\([^\\]{1})/g, '$1') + '"]', from); - }, - - // elements by class (raw) - // @return array - byClassRaw = - function(name, from) { - var i = -1, j = i, data = [ ], element, elements = _byTag('*', from), n; - name = ' ' + (QUIRKS_MODE ? name.toLowerCase() : name) + ' '; - while ((element = elements[++i])) { - n = XML_DOCUMENT ? element.getAttribute('class') : element.className; - if (n && n.length && (' ' + (QUIRKS_MODE ? n.toLowerCase() : n). - replace(reWhiteSpace, ' ') + ' ').indexOf(name) > -1) { - data[++j] = element; - } - } - return data; - }, - - // elements by class - // @return array - _byClass = - function(name, from) { - name = QUIRKS_MODE ? name.toLowerCase() : name; - name = (/\\/).test(name) ? unescapeIdentifier(name) : name; - return (BUGGY_GEBCN || BUGGY_QUIRKS_GEBCN || XML_DOCUMENT || !from.getElementsByClassName) ? - byClassRaw(name, from) : slice.call(from.getElementsByClassName(name)); - }, - - // publicly exposed byClass - // @return array - byClass = - function(name, from) { - from || (from = doc); - if (lastContext !== from) { switchContext(from); } - return _byClass(name, from); - }, - - // check element is descendant of container - // @return boolean - contains = 'compareDocumentPosition' in root ? - function(container, element) { - return (container.compareDocumentPosition(element) & 16) == 16; - } : 'contains' in root ? - function(container, element) { - return container !== element && container.contains(element); - } : - function(container, element) { - while ((element = element.parentNode)) { - if (element === container) return true; - } - return false; - }, - - // attribute value - // @return string - getAttribute = !BUGGY_GET_ATTRIBUTE && !IE_LT_9 ? - function(node, attribute) { - return node.getAttribute(attribute); - } : - function(node, attribute) { - attribute = attribute.toLowerCase(); - if (typeof node[attribute] == 'object') { - return node.attributes[attribute] && - node.attributes[attribute].value; - } - return ( - // 'type' can only be read by using native getAttribute - attribute == 'type' ? node.getAttribute(attribute) : - // specific URI data attributes (parameter 2 to fix IE bug) - ATTR_URIDATA[attribute] ? node.getAttribute(attribute, 2) : - // boolean attributes should return name instead of true/false - ATTR_BOOLEAN[attribute] ? node.getAttribute(attribute) ? attribute : 'false' : - (node = node.getAttributeNode(attribute)) && node.value); - }, - - // attribute presence - // @return boolean - hasAttribute = !BUGGY_HAS_ATTRIBUTE && !IE_LT_9 ? - function(node, attribute) { - return XML_DOCUMENT ? - !!node.getAttribute(attribute) : - node.hasAttribute(attribute); - } : - function(node, attribute) { - // read the node attribute object - var obj = node.getAttributeNode(attribute = attribute.toLowerCase()); - return ATTR_DEFAULT[attribute] && attribute != 'value' ? - node[ATTR_DEFAULT[attribute]] : obj && obj.specified; - }, - - // check node emptyness - // @return boolean - isEmpty = - function(node) { - node = node.firstChild; - while (node) { - if (node.nodeType == 3 || node.nodeName > '@') return false; - node = node.nextSibling; - } - return true; - }, - - // check if element matches the :link pseudo - // @return boolean - isLink = - function(element) { - return hasAttribute(element,'href') && LINK_NODES[element.nodeName]; - }, - - // child position by nodeType - // @return number - nthElement = - function(element, last) { - var count = 1, succ = last ? 'nextSibling' : 'previousSibling'; - while ((element = element[succ])) { - if (element.nodeName > '@') ++count; - } - return count; - }, - - // child position by nodeName - // @return number - nthOfType = - function(element, last) { - var count = 1, succ = last ? 'nextSibling' : 'previousSibling', type = element.nodeName; - while ((element = element[succ])) { - if (element.nodeName == type) ++count; - } - return count; - }, - - /*------------------------------- DEBUGGING --------------------------------*/ - - // get/set (string/object) working modes - configure = - function(option) { - if (typeof option == 'string') { return !!Config[option]; } - if (typeof option != 'object') { return Config; } - for (var i in option) { - Config[i] = !!option[i]; - if (i == 'SIMPLENOT') { - matchContexts = { }; - matchResolvers = { }; - selectContexts = { }; - selectResolvers = { }; - if (!Config[i]) { Config['USE_QSAPI'] = false; } - } else if (i == 'USE_QSAPI') { - Config[i] = !!option[i] && NATIVE_QSAPI; - } - } - setIdentifierSyntax(); - reValidator = RegExp(Config.SIMPLENOT ? - standardValidator : extendedValidator); - return true; - }, - - // control user notifications - emit = - function(message) { - if (Config.VERBOSITY) { throw Error(message); } - if (console && console.log) { - console.log(message); - } - }, - - Config = { - - // used to enable/disable caching of result sets - CACHING: false, - - // used to enable/disable CSS escaped identifiers - ESCAPECHR: true, - - // add non-ascii (utf-8) to the identifier syntax RE - NON_ASCII: true, - - // switch between CSS2 and CSS3 identifier syntax RE - SELECTOR3: true, - - // add Unicode (utf-16) to the identifier syntax RE - UNICODE16: true, - - // by default do not add missing left/right context - // to selector string shortcuts like "+div" or "ul>" - // callable Dom.shortcuts method has to be available - SHORTCUTS: false, - - // by default disable complex selectors nested in - // ':not()' pseudo-classes, as for specifications - SIMPLENOT: true, - - // strict QSA match all non-unique IDs (false) - // speed & libs compat match unique ID (true) - UNIQUE_ID: true, - - // HTML5 handling for the ":checked" pseudo-class - USE_HTML5: true, - - // controls enabling the Query Selector API branch - USE_QSAPI: NATIVE_QSAPI, - - // controls the engine error/warning notifications - VERBOSITY: true - - }, - - /*---------------------------- COMPILER METHODS ----------------------------*/ - - // init REs and context - initialize = - function(doc) { - setIdentifierSyntax(); - switchContext(doc, true); - }, - - // set/reset default identifier syntax - // based on user configuration options - // rebuild the validator and other REs - setIdentifierSyntax = - function() { - - var syntax = '', start = Config['SELECTOR3'] ? '-{2}|' : ''; - - Config['NON_ASCII'] && (syntax += '|' + non_asc_chr); - Config['UNICODE16'] && (syntax += '|' + unicode_chr); - Config['ESCAPECHR'] && (syntax += '|' + escaped_chr); - - syntax += (Config['UNICODE16'] || Config['ESCAPECHR']) ? '' : '|' + any_esc_chr; - - identifier = '-?(?:' + start + alphalodash + syntax + ')(?:-|[0-9]|' + alphalodash + syntax + ')*'; - - // build attribute string - attrcheck = '(' + quotedvalue + '|' + identifier + ')'; - attributes = whitespace + '*(' + identifier + ':?' + identifier + ')' + - whitespace + '*(?:' + operators + whitespace + '*' + attrcheck + ')?' + whitespace + '*'; - attrmatcher = attributes.replace(attrcheck, '([\\x22\\x27]*)((?:\\\\?.)*?)\\3'); - - // build pseudoclass string - pseudoclass = '((?:' + - // an+b parameters or quoted string - pseudoparms + '|' + quotedvalue + '|' + - // id, class, pseudo-class selector - prefixes + identifier + '|' + - // nested HTML attribute selector - '\\[' + attributes + '\\]|' + - // nested pseudo-class selector - '\\(.+\\)|' + whitespace + '*|' + - // nested pseudos/separators - ',)+)'; - - // CSS3: syntax scanner and - // one pass validation only - // using regular expression - standardValidator = - // discard start - '(?=[\\x20\\t\\n\\r\\f]*[^>+~(){}<>])' + - // open match group - '(' + - //universal selector - '\\*' + - // id/class/tag/pseudo-class identifier - '|(?:' + prefixes + identifier + ')' + - // combinator selector - '|' + combinators + - // HTML attribute selector - '|\\[' + attributes + '\\]' + - // pseudo-classes parameters - '|\\(' + pseudoclass + '\\)' + - // dom properties selector (extension) - '|\\{' + extensions + '\\}' + - // selector group separator (comma) - '|(?:,|' + whitespace + '*)' + - // close match group - ')+'; - - // only allow simple selectors nested in ':not()' pseudo-classes - reSimpleNot = RegExp('^(' + - '(?!:not)' + - '(' + prefixes + identifier + - '|\\([^()]*\\))+' + - '|\\[' + attributes + '\\]' + - ')$'); - - // split last, right most, selector group token - reSplitToken = RegExp('(' + - prefixes + identifier + '|' + - '\\[' + attributes + '\\]|' + - '\\(' + pseudoclass + '\\)|' + - '\\\\.|[^\\x20\\t\\n\\r\\f>+~])+', 'g'); - - reOptimizeSelector = RegExp(identifier + '|^$'); - - reSimpleSelector = RegExp( - BUGGY_GEBTN && BUGGY_GEBCN || OPERA ? - '^#?' + identifier + '$' : BUGGY_GEBTN ? - '^[.#]?' + identifier + '$' : BUGGY_GEBCN ? - '^(?:\\*|#' + identifier + ')$' : - '^(?:\\*|[.#]?' + identifier + ')$'); - - // matches class selectors - reClass = RegExp('(?:\\[[\\x20\\t\\n\\r\\f]*class\\b|\\.' + identifier + ')'); - - Optimize = { - ID: RegExp('^\\*?#(' + identifier + ')|' + skip_groups), - TAG: RegExp('^(' + identifier + ')|' + skip_groups), - CLASS: RegExp('^\\.(' + identifier + '$)|' + skip_groups) - }; - - Patterns.id = RegExp('^#(' + identifier + ')(.*)'); - Patterns.tagName = RegExp('^(' + identifier + ')(.*)'); - Patterns.className = RegExp('^\\.(' + identifier + ')(.*)'); - Patterns.attribute = RegExp('^\\[' + attrmatcher + '\\](.*)'); - - Tokens.identifier = identifier; - Tokens.attributes = attributes; - - // validator for complex selectors in ':not()' pseudo-classes - extendedValidator = standardValidator.replace(pseudoclass, '.*'); - - // validator for standard selectors as default - reValidator = RegExp(standardValidator); - }, - - // code string reused to build compiled functions - ACCEPT_NODE = 'r[r.length]=c[k];if(f&&false===f(c[k]))break main;else continue main;', - - // compile a comma separated group of selector - // @mode boolean true for select, false for match - // return a compiled function - compile = - function(selector, source, mode) { - - var parts = typeof selector == 'string' ? selector.match(reSplitGroup) : selector; - - // ensures that source is a string - typeof source == 'string' || (source = ''); - - if (parts.length == 1) { - source += compileSelector(parts[0], mode ? ACCEPT_NODE : 'f&&f(k);return true;', mode); - } else { - // for each selector in the group - var i = -1, seen = { }, token; - while ((token = parts[++i])) { - token = token.replace(reTrimSpaces, ''); - // avoid repeating the same token - // in comma separated group (p, p) - if (!seen[token] && (seen[token] = true)) { - source += compileSelector(token, mode ? ACCEPT_NODE : 'f&&f(k);return true;', mode); - } - } - } - - if (mode) { - // for select method - return Function('c,s,r,d,h,g,f,v', - 'var N,n,x=0,k=-1,e;main:while((e=c[++k])){' + source + '}return r;'); - } else { - // for match method - return Function('e,s,r,d,h,g,f,v', - 'var N,n,x=0,k=e;' + source + 'return false;'); - } - }, - - // allows to cache already visited nodes - FILTER = - 'var z=v[@]||(v[@]=[]),l=z.length-1;' + - 'while(l>=0&&z[l]!==e)--l;' + - 'if(l!==-1){break;}' + - 'z[z.length]=e;', - - // compile a CSS3 string selector into ad-hoc javascript matching function - // @return string (to be compiled) - compileSelector = - function(selector, source, mode) { - - var a, b, n, k = 0, expr, match, result, status, test, type; - - while (selector) { - - k++; - - // *** Universal selector - // * match all (empty block, do not remove) - if ((match = selector.match(Patterns.universal))) { - // do nothing, handled in the compiler where - // BUGGY_GEBTN return comment nodes (ex: IE) - expr = ''; - } - - // *** ID selector - // #Foo Id case sensitive - else if ((match = selector.match(Patterns.id))) { - // document can contain conflicting elements (id/name) - // prototype selector unit need this method to recover bad HTML forms - match[1] = (/\\/).test(match[1]) ? convertEscapes(match[1]) : match[1]; - source = 'if(' + (XML_DOCUMENT ? - 's.getAttribute(e,"id")' : - '(e.submit?s.getAttribute(e,"id"):e.id)') + - '=="' + match[1] + '"' + - '){' + source + '}'; - } - - // *** Type selector - // Foo Tag (case insensitive) - else if ((match = selector.match(Patterns.tagName))) { - // both tagName and nodeName properties may be upper/lower case - // depending on their creation NAMESPACE in createElementNS() - source = 'if(e.nodeName' + (XML_DOCUMENT ? - '=="' + match[1] + '"' : '.toUpperCase()' + - '=="' + match[1].toUpperCase() + '"') + - '){' + source + '}'; - } - - // *** Class selector - // .Foo Class (case sensitive) - else if ((match = selector.match(Patterns.className))) { - // W3C CSS3 specs: element whose "class" attribute has been assigned a - // list of whitespace-separated values, see section 6.4 Class selectors - // and notes at the bottom; explicitly non-normative in this specification. - match[1] = (/\\/).test(match[1]) ? convertEscapes(match[1]) : match[1]; - match[1] = QUIRKS_MODE ? match[1].toLowerCase() : match[1]; - source = 'if((n=' + (XML_DOCUMENT ? - 's.getAttribute(e,"class")' : 'e.className') + - ')&&n.length&&(" "+' + (QUIRKS_MODE ? 'n.toLowerCase()' : 'n') + - '.replace(/' + whitespace + '+/g," ")+" ").indexOf(" ' + match[1] + ' ")>-1' + - '){' + source + '}'; - } - - // *** Attribute selector - // [attr] [attr=value] [attr="value"] [attr='value'] and !=, *=, ~=, |=, ^=, $= - // case sensitivity is treated differently depending on the document type (see map) - else if ((match = selector.match(Patterns.attribute))) { - - // xml namespaced attribute ? - expr = match[1].split(':'); - expr = expr.length == 2 ? expr[1] : expr[0] + ''; - - if (match[2] && !Operators[match[2]]) { - emit('Unsupported operator in attribute selectors "' + selector + '"'); - return ''; - } - - test = 'false'; - - // replace Operators parameter if needed - if (match[2] && match[4] && (test = Operators[match[2]])) { - match[4] = (/\\/).test(match[4]) ? convertEscapes(match[4]) : match[4]; - // case treatment depends on document - HTML_TABLE['class'] = QUIRKS_MODE ? 1 : 0; - type = (XML_DOCUMENT ? XHTML_TABLE : HTML_TABLE)[expr.toLowerCase()]; - test = test.replace(/\%m/g, type ? match[4].toLowerCase() : match[4]); - } else if (match[2] == '!=' || match[2] == '=') { - test = 'n' + match[2] + '=""'; - } - - source = 'if(n=s.hasAttribute(e,"' + match[1] + '")){' + - (match[2] ? 'n=s.getAttribute(e,"' + match[1] + '")' : '') + - (type && match[2] ? '.toLowerCase();' : ';') + - 'if(' + (match[2] ? test : 'n') + '){' + source + '}}'; - - } - - // *** Adjacent sibling combinator - // E + F (F adiacent sibling of E) - else if ((match = selector.match(Patterns.adjacent))) { - source = (mode ? '' : FILTER.replace(/@/g, k)) + source; - source = NATIVE_TRAVERSAL_API ? - 'var N' + k + '=e;while(e&&(e=e.previousElementSibling)){' + source + 'break;}e=N' + k + ';' : - 'var N' + k + '=e;while(e&&(e=e.previousSibling)){if(e.nodeName>"@"){' + source + 'break;}}e=N' + k + ';'; - } - - // *** General sibling combinator - // E ~ F (F relative sibling of E) - else if ((match = selector.match(Patterns.relative))) { - source = (mode ? '' : FILTER.replace(/@/g, k)) + source; - source = NATIVE_TRAVERSAL_API ? - ('var N' + k + '=e;e=e.parentNode.firstElementChild;' + - 'while(e&&e!==N' + k + '){' + source + 'e=e.nextElementSibling;}e=N' + k + ';') : - ('var N' + k + '=e;e=e.parentNode.firstChild;' + - 'while(e&&e!==N' + k + '){if(e.nodeName>"@"){' + source + '}e=e.nextSibling;}e=N' + k + ';'); - } - - // *** Child combinator - // E > F (F children of E) - else if ((match = selector.match(Patterns.children))) { - source = (mode ? '' : FILTER.replace(/@/g, k)) + source; - source = 'var N' + k + '=e;while(e&&e!==h&&e!==g&&(e=e.parentNode)){' + source + 'break;}e=N' + k + ';'; - } - - // *** Descendant combinator - // E F (E ancestor of F) - else if ((match = selector.match(Patterns.ancestor))) { - source = (mode ? '' : FILTER.replace(/@/g, k)) + source; - source = 'var N' + k + '=e;while(e&&e!==h&&e!==g&&(e=e.parentNode)){' + source + '}e=N' + k + ';'; - } - - // *** Structural pseudo-classes - // :root, :empty, - // :first-child, :last-child, :only-child, - // :first-of-type, :last-of-type, :only-of-type, - // :nth-child(), :nth-last-child(), :nth-of-type(), :nth-last-of-type() - else if ((match = selector.match(Patterns.spseudos)) && match[1]) { - - switch (match[1]) { - case 'root': - // element root of the document - if (match[3]) { - source = 'if(e===h||s.contains(h,e)){' + source + '}'; - } else { - source = 'if(e===h){' + source + '}'; - } - break; - - case 'empty': - // element that has no children - source = 'if(s.isEmpty(e)){' + source + '}'; - break; - - default: - if (match[1] && match[2]) { - if (match[2] == 'n') { - source = 'if(e!==h){' + source + '}'; - break; - } else if (match[2] == 'even') { - a = 2; - b = 0; - } else if (match[2] == 'odd') { - a = 2; - b = 1; - } else { - // assumes correct "an+b" format, "b" before "a" to keep "n" values - b = ((n = match[2].match(/(-?\d+)$/)) ? parseInt(n[1], 10) : 0); - a = ((n = match[2].match(/(-?\d*)n/i)) ? parseInt(n[1], 10) : 0); - if (n && n[1] == '-') a = -1; - } - - // build test expression out of structural pseudo (an+b) parameters - // see here: http://www.w3.org/TR/css3-selectors/#nth-child-pseudo - test = a > 1 ? - (/last/i.test(match[1])) ? '(n-(' + b + '))%' + a + '==0' : - 'n>=' + b + '&&(n-(' + b + '))%' + a + '==0' : a < -1 ? - (/last/i.test(match[1])) ? '(n-(' + b + '))%' + a + '==0' : - 'n<=' + b + '&&(n-(' + b + '))%' + a + '==0' : a === 0 ? - 'n==' + b : a == -1 ? 'n<=' + b : 'n>=' + b; - - // 4 cases: 1 (nth) x 4 (child, of-type, last-child, last-of-type) - source = - 'if(e!==h){' + - 'n=s[' + (/-of-type/i.test(match[1]) ? '"nthOfType"' : '"nthElement"') + ']' + - '(e,' + (/last/i.test(match[1]) ? 'true' : 'false') + ');' + - 'if(' + test + '){' + source + '}' + - '}'; - - } else { - // 6 cases: 3 (first, last, only) x 1 (child) x 2 (-of-type) - a = /first/i.test(match[1]) ? 'previous' : 'next'; - n = /only/i.test(match[1]) ? 'previous' : 'next'; - b = /first|last/i.test(match[1]); - - type = /-of-type/i.test(match[1]) ? '&&n.nodeName!=e.nodeName' : '&&n.nodeName<"@"'; - - source = 'if(e!==h){' + - ( 'n=e;while((n=n.' + a + 'Sibling)' + type + ');if(!n){' + (b ? source : - 'n=e;while((n=n.' + n + 'Sibling)' + type + ');if(!n){' + source + '}') + '}' ) + '}'; - } - break; - } - - } - - // *** negation, user action and target pseudo-classes - // *** UI element states and dynamic pseudo-classes - // CSS3 :not, :checked, :enabled, :disabled, :target - // CSS3 :active, :hover, :focus - // CSS3 :link, :visited - else if ((match = selector.match(Patterns.dpseudos)) && match[1]) { - - switch (match[1].match(/^\w+/)[0]) { - // CSS3 negation pseudo-class - case 'not': - // compile nested selectors, DO NOT pass the callback parameter - // SIMPLENOT allow disabling complex selectors nested - // in ':not()' pseudo-classes, breaks some test units - expr = match[3].replace(reTrimSpaces, ''); - - if (Config.SIMPLENOT && !reSimpleNot.test(expr)) { - // see above, log error but continue execution - emit('Negation pseudo-class only accepts simple selectors "' + selector + '"'); - return ''; - } else { - if ('compatMode' in doc) { - source = 'if(!' + compile(expr, '', false) + '(e,s,r,d,h,g)){' + source + '}'; - } else { - source = 'if(!s.match(e, "' + expr.replace(/\x22/g, '\\"') + '",g)){' + source +'}'; - } - } - break; - - // CSS3 UI element states - case 'checked': - // for radio buttons checkboxes (HTML4) and options (HTML5) - source = 'if((typeof e.form!=="undefined"&&(/^(?:radio|checkbox)$/i).test(e.type)&&e.checked)' + - (Config.USE_HTML5 ? '||(/^option$/i.test(e.nodeName)&&(e.selected||e.checked))' : '') + - '){' + source + '}'; - break; - case 'disabled': - // does not consider hidden input fields - source = 'if(((typeof e.form!=="undefined"' + - (Config.USE_HTML5 ? '' : '&&!(/^hidden$/i).test(e.type)') + - ')||s.isLink(e))&&e.disabled===true){' + source + '}'; - break; - case 'enabled': - // does not consider hidden input fields - source = 'if(((typeof e.form!=="undefined"' + - (Config.USE_HTML5 ? '' : '&&!(/^hidden$/i).test(e.type)') + - ')||s.isLink(e))&&e.disabled===false){' + source + '}'; - break; - - // CSS3 lang pseudo-class - case 'lang': - test = ''; - if (match[2]) test = match[2].substr(0, 2) + '-'; - source = 'do{(n=e.lang||"").toLowerCase();' + - 'if((n==""&&h.lang=="' + match[2].toLowerCase() + '")||' + - '(n&&(n=="' + match[2].toLowerCase() + - '"||n.substr(0,3)=="' + test.toLowerCase() + '")))' + - '{' + source + 'break;}}while((e=e.parentNode)&&e!==g);'; - break; - - // CSS3 target pseudo-class - case 'target': - source = 'if(e.id==d.location.hash.slice(1)){' + source + '}'; - break; - - // CSS3 dynamic pseudo-classes - case 'link': - source = 'if(s.isLink(e)&&!e.visited){' + source + '}'; - break; - case 'visited': - source = 'if(s.isLink(e)&&e.visited){' + source + '}'; - break; - - // CSS3 user action pseudo-classes IE & FF3 have native support - // these capabilities may be emulated by some event managers - case 'active': - if (XML_DOCUMENT) break; - source = 'if(e===d.activeElement){' + source + '}'; - break; - case 'hover': - if (XML_DOCUMENT) break; - source = 'if(e===d.hoverElement){' + source + '}'; - break; - case 'focus': - if (XML_DOCUMENT) break; - source = NATIVE_FOCUS ? - 'if(e===d.activeElement&&d.hasFocus()&&(e.type||e.href||typeof e.tabIndex=="number")){' + source + '}' : - 'if(e===d.activeElement&&(e.type||e.href)){' + source + '}'; - break; - - // CSS2 selected pseudo-classes, not part of current CSS3 drafts - // the 'selected' property is only available for option elements - case 'selected': - // fix Safari selectedIndex property bug - expr = BUGGY_SELECTED ? '||(n=e.parentNode)&&n.options[n.selectedIndex]===e' : ''; - source = 'if(/^option$/i.test(e.nodeName)&&(e.selected||e.checked' + expr + ')){' + source + '}'; - break; - - default: - break; - } - - } - - else { - - // this is where external extensions are - // invoked if expressions match selectors - expr = false; - status = false; - for (expr in Selectors) { - if ((match = selector.match(Selectors[expr].Expression)) && match[1]) { - result = Selectors[expr].Callback(match, source); - source = result.source; - status = result.status; - if (status) { break; } - } - } - - // if an extension fails to parse the selector - // it must return a false boolean in "status" - if (!status) { - // log error but continue execution, don't throw real exceptions - // because blocking following processes maybe is not a good idea - emit('Unknown pseudo-class selector "' + selector + '"'); - return ''; - } - - if (!expr) { - // see above, log error but continue execution - emit('Unknown token in selector "' + selector + '"'); - return ''; - } - - } - - // error if no matches found by the pattern scan - if (!match) { - emit('Invalid syntax in selector "' + selector + '"'); - return ''; - } - - // ensure "match" is not null or empty since - // we do not throw real DOMExceptions above - selector = match && match[match.length - 1]; - } - - return source; - }, - - /*----------------------------- QUERY METHODS ------------------------------*/ - - // match element with selector - // @return boolean - match = - function(element, selector, from, callback) { - - var parts; - - if (!(element && element.nodeType == 1)) { - emit('Invalid element argument'); - return false; - } else if (typeof selector != 'string') { - emit('Invalid selector argument'); - return false; - } else if (from && from.nodeType == 1 && !contains(from, element)) { - return false; - } else if (lastContext !== from) { - // reset context data when it changes - // and ensure context is set to a default - switchContext(from || (from = element.ownerDocument)); - } - - // normalize the selector string, remove [\n\r\f] - // whitespace, replace codepoints 0 with '\ufffd' - // trim non-relevant leading/trailing whitespaces - selector = selector. - replace(reTrimSpaces, ''). - replace(/\x00|\\$/g, '\ufffd'); - - Config.SHORTCUTS && (selector = Dom.shortcuts(selector, element, from)); - - if (lastMatcher != selector) { - // process valid selector strings - if ((parts = selector.match(reValidator)) && parts[0] == selector) { - isSingleMatch = (parts = selector.match(reSplitGroup)).length < 2; - // save passed selector - lastMatcher = selector; - lastPartsMatch = parts; - } else { - emit('The string "' + selector + '", is not a valid CSS selector'); - return false; - } - } else parts = lastPartsMatch; - - // compile matcher resolvers if necessary - if (!matchResolvers[selector] || matchContexts[selector] !== from) { - matchResolvers[selector] = compile(isSingleMatch ? [selector] : parts, '', false); - matchContexts[selector] = from; - } - - return matchResolvers[selector](element, Snapshot, [ ], doc, root, from, callback, { }); - }, - - // select only the first element - // matching selector (document ordered) - first = - function(selector, from) { - return select(selector, from, function() { return false; })[0] || null; - }, - - // select elements matching selector - // using new Query Selector API - // or cross-browser client API - // @return array - select = - function(selector, from, callback) { - - var i, changed, element, elements, parts, token, original = selector; - - if (arguments.length === 0) { - emit('Not enough arguments'); - return [ ]; - } else if (typeof selector != 'string') { - return [ ]; - } else if (from && !(/1|9|11/).test(from.nodeType)) { - emit('Invalid or illegal context element'); - return [ ]; - } else if (lastContext !== from) { - // reset context data when it changes - // and ensure context is set to a default - switchContext(from || (from = doc)); - } - - if (Config.CACHING && (elements = Dom.loadResults(original, from, doc, root))) { - return callback ? concatCall([ ], elements, callback) : elements; - } - - // normalize the selector string, remove [\n\r\f] - // whitespace, replace codepoints 0 with '\ufffd' - // trim non-relevant leading/trailing whitespaces - selector = selector. - replace(reTrimSpaces, ''). - replace(/\x00|\\$/g, '\ufffd'); - - if (!OPERA_QSAPI && reSimpleSelector.test(selector)) { - switch (selector.charAt(0)) { - case '#': - if (Config.UNIQUE_ID) { - elements = (element = _byId(selector.slice(1), from)) ? [ element ] : [ ]; - } - break; - case '.': - elements = _byClass(selector.slice(1), from); - break; - default: - elements = _byTag(selector, from); - break; - } - } - - else if (!XML_DOCUMENT && Config.USE_QSAPI && - !(BUGGY_QUIRKS_QSAPI && reClass.test(selector)) && - !RE_BUGGY_QSAPI.test(selector)) { - try { - elements = from.querySelectorAll(selector); - } catch(e) { } - } - - if (elements) { - elements = callback ? concatCall([ ], elements, callback) : - NATIVE_SLICE_PROTO ? slice.call(elements) : concatList([ ], elements); - Config.CACHING && Dom.saveResults(original, from, doc, elements); - return elements; - } - - Config.SHORTCUTS && (selector = Dom.shortcuts(selector, from)); - - if ((changed = lastSelector != selector)) { - // process valid selector strings - if ((parts = selector.match(reValidator)) && parts[0] == selector) { - isSingleSelect = (parts = selector.match(reSplitGroup)).length < 2; - // save passed selector - lastSelector = selector; - lastPartsSelect = parts; - } else { - emit('The string "' + selector + '", is not a valid CSS selector'); - return [ ]; - } - } else parts = lastPartsSelect; - - // commas separators are treated sequentially to maintain order - if (from.nodeType == 11) { - - elements = byTagRaw('*', from); - - } else if (!XML_DOCUMENT && isSingleSelect) { - - if (changed) { - // get right most selector token - parts = selector.match(reSplitToken); - token = parts[parts.length - 1]; - - // only last slice before :not rules - lastSlice = token.split(':not'); - lastSlice = lastSlice[lastSlice.length - 1]; - - // position where token was found - lastPosition = selector.length - token.length; - } - - // ID optimization RTL, to reduce number of elements to visit - if (Config.UNIQUE_ID && (parts = lastSlice.match(Optimize.ID)) && (token = parts[1])) { - if ((element = _byId(token, from))) { - if (match(element, selector)) { - callback && callback(element); - elements = [element]; - } else elements = [ ]; - } - } - - // ID optimization LTR, to reduce selection context searches - else if (Config.UNIQUE_ID && (parts = selector.match(Optimize.ID)) && (token = parts[1])) { - if ((element = _byId(token, doc))) { - if ('#' + token == selector) { - callback && callback(element); - elements = [element]; - } else if (/[>+~]/.test(selector)) { - from = element.parentNode; - } else { - from = element; - } - } else elements = [ ]; - } - - if (elements) { - Config.CACHING && Dom.saveResults(original, from, doc, elements); - return elements; - } - - if (!NATIVE_GEBCN && (parts = lastSlice.match(Optimize.TAG)) && (token = parts[1])) { - if ((elements = _byTag(token, from)).length === 0) { return [ ]; } - selector = selector.slice(0, lastPosition) + selector.slice(lastPosition).replace(token, '*'); - } - - else if ((parts = lastSlice.match(Optimize.CLASS)) && (token = parts[1])) { - if ((elements = _byClass(token, from)).length === 0) { return [ ]; } - selector = selector.slice(0, lastPosition) + selector.slice(lastPosition).replace('.' + token, - reOptimizeSelector.test(selector.charAt(selector.indexOf(token) - 1)) ? '' : '*'); - } - - else if ((parts = selector.match(Optimize.CLASS)) && (token = parts[1])) { - if ((elements = _byClass(token, from)).length === 0) { return [ ]; } - for (i = 0, els = [ ]; elements.length > i; ++i) { - els = concatList(els, elements[i].getElementsByTagName('*')); - } - elements = els; - selector = selector.slice(0, lastPosition) + selector.slice(lastPosition).replace('.' + token, - reOptimizeSelector.test(selector.charAt(selector.indexOf(token) - 1)) ? '' : '*'); - } - - else if (NATIVE_GEBCN && (parts = lastSlice.match(Optimize.TAG)) && (token = parts[1])) { - if ((elements = _byTag(token, from)).length === 0) { return [ ]; } - selector = selector.slice(0, lastPosition) + selector.slice(lastPosition).replace(token, '*'); - } - - } - - if (!elements) { - if (IE_LT_9) { - elements = /^(?:applet|object)$/i.test(from.nodeName) ? from.children : byTagRaw('*', from); - } else { - elements = from.getElementsByTagName('*'); - } - } - // end of prefiltering pass - - // compile selector resolver if necessary - if (!selectResolvers[selector] || selectContexts[selector] !== from) { - selectResolvers[selector] = compile(isSingleSelect ? [selector] : parts, '', true); - selectContexts[selector] = from; - } - - elements = selectResolvers[selector](elements, Snapshot, [ ], doc, root, from, callback, { }); - - Config.CACHING && Dom.saveResults(original, from, doc, elements); - - return elements; - }, - - /*-------------------------------- STORAGE ---------------------------------*/ - - // empty function handler - FN = function(x) { return x; }, - - // compiled match functions returning booleans - matchContexts = { }, - matchResolvers = { }, - - // compiled select functions returning collections - selectContexts = { }, - selectResolvers = { }, - - // used to pass methods to compiled functions - Snapshot = { - - // element indexing methods - nthElement: nthElement, - nthOfType: nthOfType, - - // element inspection methods - getAttribute: getAttribute, - hasAttribute: hasAttribute, - - // element selection methods - byClass: _byClass, - byName: byName, - byTag: _byTag, - byId: _byId, - - // helper/check methods - contains: contains, - isEmpty: isEmpty, - isLink: isLink, - - // selection/matching - select: select, - match: match - }, - - /*------------------------------- PUBLIC API -------------------------------*/ - - // code referenced by extensions - Dom = { - - ACCEPT_NODE: ACCEPT_NODE, - - // retrieve element by id attr - byId: byId, - - // retrieve elements by tag name - byTag: byTag, - - // retrieve elements by name attr - byName: byName, - - // retrieve elements by class name - byClass: byClass, - - // read the value of the attribute - // as was in the original HTML code - getAttribute: getAttribute, - - // check for the attribute presence - // as was in the original HTML code - hasAttribute: hasAttribute, - - // element match selector, return boolean true/false - match: match, - - // first element match only, return element or null - first: first, - - // elements matching selector, starting from element - select: select, - - // compile selector into ad-hoc javascript resolver - compile: compile, - - // check that two elements are ancestor/descendant - contains: contains, - - // handle selector engine configuration settings - configure: configure, - - // initialize caching for each document - setCache: FN, - - // load previously collected result set - loadResults: FN, - - // save previously collected result set - saveResults: FN, - - // handle missing context in selector strings - shortcuts: FN, - - // log resolvers errors/warnings - emit: emit, - - // options enabing specific engine functionality - Config: Config, - - // pass methods references to compiled resolvers - Snapshot: Snapshot, - - // operators descriptor - // for attribute operators extensions - Operators: Operators, - - // selectors descriptor - // for pseudo-class selectors extensions - Selectors: Selectors, - - // export validators REs - Tokens: Tokens, - - // export version string - Version: version, - - // add or overwrite user defined operators - registerOperator: - function(symbol, resolver) { - Operators[symbol] || (Operators[symbol] = resolver); - }, - - // add selector patterns for user defined callbacks - registerSelector: - function(name, rexp, func) { - Selectors[name] || (Selectors[name] = { - Expression: rexp, - Callback: func - }); - } - - }; - - /*---------------------------------- INIT ----------------------------------*/ - - // init context specific variables - initialize(doc); - - return Dom; -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/oauth-sign/LICENSE b/fundamentals/bug-challenge-es6/node_modules/oauth-sign/LICENSE deleted file mode 100644 index a4a9aee0c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/oauth-sign/LICENSE +++ /dev/null @@ -1,55 +0,0 @@ -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/oauth-sign/README.md b/fundamentals/bug-challenge-es6/node_modules/oauth-sign/README.md deleted file mode 100644 index 34c4a85d2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/oauth-sign/README.md +++ /dev/null @@ -1,4 +0,0 @@ -oauth-sign -========== - -OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module. diff --git a/fundamentals/bug-challenge-es6/node_modules/oauth-sign/index.js b/fundamentals/bug-challenge-es6/node_modules/oauth-sign/index.js deleted file mode 100644 index dadcba970..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/oauth-sign/index.js +++ /dev/null @@ -1,136 +0,0 @@ -var crypto = require('crypto') - , qs = require('querystring') - ; - -function sha1 (key, body) { - return crypto.createHmac('sha1', key).update(body).digest('base64') -} - -function rsa (key, body) { - return crypto.createSign("RSA-SHA1").update(body).sign(key, 'base64'); -} - -function rfc3986 (str) { - return encodeURIComponent(str) - .replace(/!/g,'%21') - .replace(/\*/g,'%2A') - .replace(/\(/g,'%28') - .replace(/\)/g,'%29') - .replace(/'/g,'%27') - ; -} - -// Maps object to bi-dimensional array -// Converts { foo: 'A', bar: [ 'b', 'B' ]} to -// [ ['foo', 'A'], ['bar', 'b'], ['bar', 'B'] ] -function map (obj) { - var key, val, arr = [] - for (key in obj) { - val = obj[key] - if (Array.isArray(val)) - for (var i = 0; i < val.length; i++) - arr.push([key, val[i]]) - else if (typeof val === "object") - for (var prop in val) - arr.push([key + '[' + prop + ']', val[prop]]); - else - arr.push([key, val]) - } - return arr -} - -// Compare function for sort -function compare (a, b) { - return a > b ? 1 : a < b ? -1 : 0 -} - -function generateBase (httpMethod, base_uri, params) { - // adapted from https://dev.twitter.com/docs/auth/oauth and - // https://dev.twitter.com/docs/auth/creating-signature - - // Parameter normalization - // http://tools.ietf.org/html/rfc5849#section-3.4.1.3.2 - var normalized = map(params) - // 1. First, the name and value of each parameter are encoded - .map(function (p) { - return [ rfc3986(p[0]), rfc3986(p[1] || '') ] - }) - // 2. The parameters are sorted by name, using ascending byte value - // ordering. If two or more parameters share the same name, they - // are sorted by their value. - .sort(function (a, b) { - return compare(a[0], b[0]) || compare(a[1], b[1]) - }) - // 3. The name of each parameter is concatenated to its corresponding - // value using an "=" character (ASCII code 61) as a separator, even - // if the value is empty. - .map(function (p) { return p.join('=') }) - // 4. The sorted name/value pairs are concatenated together into a - // single string by using an "&" character (ASCII code 38) as - // separator. - .join('&') - - var base = [ - rfc3986(httpMethod ? httpMethod.toUpperCase() : 'GET'), - rfc3986(base_uri), - rfc3986(normalized) - ].join('&') - - return base -} - -function hmacsign (httpMethod, base_uri, params, consumer_secret, token_secret) { - var base = generateBase(httpMethod, base_uri, params) - var key = [ - consumer_secret || '', - token_secret || '' - ].map(rfc3986).join('&') - - return sha1(key, base) -} - -function rsasign (httpMethod, base_uri, params, private_key, token_secret) { - var base = generateBase(httpMethod, base_uri, params) - var key = private_key || '' - - return rsa(key, base) -} - -function plaintext (consumer_secret, token_secret) { - var key = [ - consumer_secret || '', - token_secret || '' - ].map(rfc3986).join('&') - - return key -} - -function sign (signMethod, httpMethod, base_uri, params, consumer_secret, token_secret) { - var method - var skipArgs = 1 - - switch (signMethod) { - case 'RSA-SHA1': - method = rsasign - break - case 'HMAC-SHA1': - method = hmacsign - break - case 'PLAINTEXT': - method = plaintext - skipArgs = 4 - break - default: - throw new Error("Signature method not supported: " + signMethod) - } - - return method.apply(null, [].slice.call(arguments, skipArgs)) -} - -exports.hmacsign = hmacsign -exports.rsasign = rsasign -exports.plaintext = plaintext -exports.sign = sign -exports.rfc3986 = rfc3986 -exports.generateBase = generateBase - diff --git a/fundamentals/bug-challenge-es6/node_modules/oauth-sign/package.json b/fundamentals/bug-challenge-es6/node_modules/oauth-sign/package.json deleted file mode 100644 index c842c40f5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/oauth-sign/package.json +++ /dev/null @@ -1,90 +0,0 @@ -{ - "_args": [ - [ - "oauth-sign@~0.8.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request" - ] - ], - "_from": "oauth-sign@>=0.8.1 <0.9.0", - "_id": "oauth-sign@0.8.2", - "_inCache": true, - "_installable": true, - "_location": "/oauth-sign", - "_nodeVersion": "5.9.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/oauth-sign-0.8.2.tgz_1462396399020_0.8175400267355144" - }, - "_npmUser": { - "email": "simeonvelichkov@gmail.com", - "name": "simov" - }, - "_npmVersion": "2.15.3", - "_phantomChildren": {}, - "_requested": { - "name": "oauth-sign", - "raw": "oauth-sign@~0.8.1", - "rawSpec": "~0.8.1", - "scope": null, - "spec": ">=0.8.1 <0.9.0", - "type": "range" - }, - "_requiredBy": [ - "/request" - ], - "_resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "_shasum": "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43", - "_shrinkwrap": null, - "_spec": "oauth-sign@~0.8.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/request", - "author": { - "email": "mikeal.rogers@gmail.com", - "name": "Mikeal Rogers", - "url": "http://www.futurealoof.com" - }, - "bugs": { - "url": "https://github.com/mikeal/oauth-sign/issues" - }, - "dependencies": {}, - "description": "OAuth 1 signing. Formerly a vendor lib in mikeal/request, now a standalone module.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "46a6ab7f0aead8deae9ec0565780b7d4efeb9d43", - "tarball": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz" - }, - "engines": { - "node": "*" - }, - "files": [ - "index.js" - ], - "gitHead": "0b034206316132f57e26970152c2fb18e71bddd5", - "homepage": "https://github.com/mikeal/oauth-sign#readme", - "license": "Apache-2.0", - "main": "index.js", - "maintainers": [ - { - "email": "mikeal.rogers@gmail.com", - "name": "mikeal" - }, - { - "email": "jnylen@gmail.com", - "name": "nylen" - }, - { - "email": "simeonvelichkov@gmail.com", - "name": "simov" - } - ], - "name": "oauth-sign", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "url": "git+https://github.com/mikeal/oauth-sign.git" - }, - "scripts": { - "test": "node test.js" - }, - "version": "0.8.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/object-assign/index.js b/fundamentals/bug-challenge-es6/node_modules/object-assign/index.js deleted file mode 100644 index 508504840..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/object-assign/index.js +++ /dev/null @@ -1,83 +0,0 @@ -'use strict'; -/* eslint-disable no-unused-vars */ -var hasOwnProperty = Object.prototype.hasOwnProperty; -var propIsEnumerable = Object.prototype.propertyIsEnumerable; - -function toObject(val) { - if (val === null || val === undefined) { - throw new TypeError('Object.assign cannot be called with null or undefined'); - } - - return Object(val); -} - -function shouldUseNative() { - try { - if (!Object.assign) { - return false; - } - - // Detect buggy property enumeration order in older V8 versions. - - // https://bugs.chromium.org/p/v8/issues/detail?id=4118 - var test1 = new String('abc'); // eslint-disable-line - test1[5] = 'de'; - if (Object.getOwnPropertyNames(test1)[0] === '5') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test2 = {}; - for (var i = 0; i < 10; i++) { - test2['_' + String.fromCharCode(i)] = i; - } - var order2 = Object.getOwnPropertyNames(test2).map(function (n) { - return test2[n]; - }); - if (order2.join('') !== '0123456789') { - return false; - } - - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test3 = {}; - 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { - test3[letter] = letter; - }); - if (Object.keys(Object.assign({}, test3)).join('') !== - 'abcdefghijklmnopqrst') { - return false; - } - - return true; - } catch (e) { - // We don't expect any of the above to throw, but better to be safe. - return false; - } -} - -module.exports = shouldUseNative() ? Object.assign : function (target, source) { - var from; - var to = toObject(target); - var symbols; - - for (var s = 1; s < arguments.length; s++) { - from = Object(arguments[s]); - - for (var key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } - - if (Object.getOwnPropertySymbols) { - symbols = Object.getOwnPropertySymbols(from); - for (var i = 0; i < symbols.length; i++) { - if (propIsEnumerable.call(from, symbols[i])) { - to[symbols[i]] = from[symbols[i]]; - } - } - } - } - - return to; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/object-assign/license b/fundamentals/bug-challenge-es6/node_modules/object-assign/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/object-assign/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/object-assign/package.json b/fundamentals/bug-challenge-es6/node_modules/object-assign/package.json deleted file mode 100644 index 43b79d8f0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/object-assign/package.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "_args": [ - [ - "object-assign@^4.1.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul" - ] - ], - "_from": "object-assign@>=4.1.0 <5.0.0", - "_id": "object-assign@4.1.0", - "_inCache": true, - "_installable": true, - "_location": "/object-assign", - "_nodeVersion": "4.1.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/object-assign-4.1.0.tgz_1462212593641_0.3332549517508596" - }, - "_npmUser": { - "email": "ben@benalpert.com", - "name": "spicyj" - }, - "_npmVersion": "2.14.19", - "_phantomChildren": {}, - "_requested": { - "name": "object-assign", - "raw": "object-assign@^4.1.0", - "rawSpec": "^4.1.0", - "scope": null, - "spec": ">=4.1.0 <5.0.0", - "type": "range" - }, - "_requiredBy": [ - "/babel-plugin-istanbul", - "/test-exclude" - ], - "_resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "_shasum": "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0", - "_shrinkwrap": null, - "_spec": "object-assign@^4.1.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/babel-plugin-istanbul", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/object-assign/issues" - }, - "dependencies": {}, - "description": "ES2015 Object.assign() ponyfill", - "devDependencies": { - "lodash": "^4.8.2", - "matcha": "^0.7.0", - "mocha": "*", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0", - "tarball": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "72fe21c86911758f3342fdf41c2a57860d5829bc", - "homepage": "https://github.com/sindresorhus/object-assign#readme", - "keywords": [ - "object", - "assign", - "extend", - "properties", - "es2015", - "ecmascript", - "harmony", - "ponyfill", - "prollyfill", - "polyfill", - "shim", - "browser" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - { - "email": "ben@benalpert.com", - "name": "spicyj" - } - ], - "name": "object-assign", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/object-assign.git" - }, - "scripts": { - "bench": "matcha bench.js", - "test": "xo && mocha" - }, - "version": "4.1.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/object-assign/readme.md b/fundamentals/bug-challenge-es6/node_modules/object-assign/readme.md deleted file mode 100644 index 13c097734..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/object-assign/readme.md +++ /dev/null @@ -1,56 +0,0 @@ -# object-assign [![Build Status](https://travis-ci.org/sindresorhus/object-assign.svg?branch=master)](https://travis-ci.org/sindresorhus/object-assign) - -> ES2015 [`Object.assign()`](http://www.2ality.com/2014/01/object-assign.html) ponyfill - -> Ponyfill: A polyfill that doesn't overwrite the native method - - -## Install - -``` -$ npm install --save object-assign -``` - - -## Usage - -```js -const objectAssign = require('object-assign'); - -objectAssign({foo: 0}, {bar: 1}); -//=> {foo: 0, bar: 1} - -// multiple sources -objectAssign({foo: 0}, {bar: 1}, {baz: 2}); -//=> {foo: 0, bar: 1, baz: 2} - -// overwrites equal keys -objectAssign({foo: 0}, {foo: 1}, {foo: 2}); -//=> {foo: 2} - -// ignores null and undefined sources -objectAssign({foo: 0}, null, {bar: 1}, undefined); -//=> {foo: 0, bar: 1} -``` - - -## API - -### objectAssign(target, source, [source, ...]) - -Assigns enumerable own properties of `source` objects to the `target` object and returns the `target` object. Additional `source` objects will overwrite previous ones. - - -## Resources - -- [ES2015 spec - Object.assign](https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign) - - -## Related - -- [deep-assign](https://github.com/sindresorhus/deep-assign) - Recursive `Object.assign()` - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/object.omit/LICENSE b/fundamentals/bug-challenge-es6/node_modules/object.omit/LICENSE deleted file mode 100644 index 842218cf0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/object.omit/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/object.omit/README.md b/fundamentals/bug-challenge-es6/node_modules/object.omit/README.md deleted file mode 100644 index 246efe092..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/object.omit/README.md +++ /dev/null @@ -1,118 +0,0 @@ -# object.omit [![NPM version](https://img.shields.io/npm/v/object.omit.svg?style=flat)](https://www.npmjs.com/package/object.omit) [![NPM monthly downloads](https://img.shields.io/npm/dm/object.omit.svg?style=flat)](https://npmjs.org/package/object.omit) [![NPM total downloads](https://img.shields.io/npm/dt/object.omit.svg?style=flat)](https://npmjs.org/package/object.omit) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/object.omit.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/object.omit) - -> Return a copy of an object excluding the given key, or array of keys. Also accepts an optional filter function as the last argument. - -## Install - -Install with [npm](https://www.npmjs.com/): - -```sh -$ npm install --save object.omit -``` - -## Usage - -```js -var omit = require('object.omit'); -``` - -Pass a string `key` to omit: - -```js -omit({a: 'a', b: 'b', c: 'c'}, 'a') -//=> { b: 'b', c: 'c' } -``` - -Pass an array of `keys` to omit: - -```js -omit({a: 'a', b: 'b', c: 'c'}, ['a', 'c']) -//=> { b: 'b' } -``` - -Returns the object if no keys are passed: - -```js -omit({a: 'a', b: 'b', c: 'c'}) -//=> {a: 'a', b: 'b', c: 'c'} -``` - -Returns an empty object if no value is passed. - -```js -omit() -//=> {} -``` - -### Filter function - -An optional filter function may be passed as the last argument, with or without keys passed on the arguments: - -**filter on keys** - -```js -var res = omit({a: 'a', b: 'b', c: 'c'}, function (val, key) { - return key === 'a'; -}); -//=> {a: 'a'} -``` - -**filter on values** - -```js -var fn = function() {}; -var obj = {a: 'a', b: 'b', c: fn}; - -var res = omit(obj, ['a'], function (val, key) { - return typeof val !== 'function'; -}); -//=> {b: 'b'} -``` - -## About - -### Related projects - -* [object.defaults](https://www.npmjs.com/package/object.defaults): Like `extend` but only copies missing properties/values to the target object. | [homepage](https://github.com/jonschlinkert/object.defaults "Like `extend` but only copies missing properties/values to the target object.") -* [object.filter](https://www.npmjs.com/package/object.filter): Create a new object filtered to have only properties for which the callback returns true. | [homepage](https://github.com/jonschlinkert/object.filter "Create a new object filtered to have only properties for which the callback returns true.") -* [object.pick](https://www.npmjs.com/package/object.pick): Returns a filtered copy of an object with only the specified keys, similar to `_.pick… [more](https://github.com/jonschlinkert/object.pick) | [homepage](https://github.com/jonschlinkert/object.pick "Returns a filtered copy of an object with only the specified keys, similar to`_.pick` from lodash / underscore.") -* [object.pluck](https://www.npmjs.com/package/object.pluck): Like pluck from underscore / lo-dash, but returns an object composed of specified properties, with… [more](https://github.com/jonschlinkert/object.pluck) | [homepage](https://github.com/jonschlinkert/object.pluck "Like pluck from underscore / lo-dash, but returns an object composed of specified properties, with values unmodified from those of the original object.") -* [object.reduce](https://www.npmjs.com/package/object.reduce): Reduces an object to a value that is the accumulated result of running each property… [more](https://github.com/jonschlinkert/object.reduce) | [homepage](https://github.com/jonschlinkert/object.reduce "Reduces an object to a value that is the accumulated result of running each property in the object through a callback.") - -### Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new). - -### Building docs - -_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_ - -To generate the readme and API documentation with [verb](https://github.com/verbose/verb): - -```sh -$ npm install -g verb verb-generate-readme && verb -``` - -### Running tests - -Install dev dependencies: - -```sh -$ npm install -d && npm test -``` - -### Author - -**Jon Schlinkert** - -* [github/jonschlinkert](https://github.com/jonschlinkert) -* [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -### License - -Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). -Released under the [MIT license](https://github.com/jonschlinkert/object.omit/blob/master/LICENSE). - -*** - -_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on October 27, 2016._ \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/object.omit/index.js b/fundamentals/bug-challenge-es6/node_modules/object.omit/index.js deleted file mode 100644 index 503a3c303..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/object.omit/index.js +++ /dev/null @@ -1,40 +0,0 @@ -/*! - * object.omit - * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var isObject = require('is-extendable'); -var forOwn = require('for-own'); - -module.exports = function omit(obj, keys) { - if (!isObject(obj)) return {}; - - keys = [].concat.apply([], [].slice.call(arguments, 1)); - var last = keys[keys.length - 1]; - var res = {}, fn; - - if (typeof last === 'function') { - fn = keys.pop(); - } - - var isFunction = typeof fn === 'function'; - if (!keys.length && !isFunction) { - return obj; - } - - forOwn(obj, function(value, key) { - if (keys.indexOf(key) === -1) { - - if (!isFunction) { - res[key] = value; - } else if (fn(value, key, obj)) { - res[key] = value; - } - } - }); - return res; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/object.omit/package.json b/fundamentals/bug-challenge-es6/node_modules/object.omit/package.json deleted file mode 100644 index 69c44b060..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/object.omit/package.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "_args": [ - [ - "object.omit@^2.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch" - ] - ], - "_from": "object.omit@>=2.0.0 <3.0.0", - "_id": "object.omit@2.0.1", - "_inCache": true, - "_installable": true, - "_location": "/object.omit", - "_nodeVersion": "6.7.0", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/object.omit-2.0.1.tgz_1477549482527_0.48828932945616543" - }, - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "object.omit", - "raw": "object.omit@^2.0.0", - "rawSpec": "^2.0.0", - "scope": null, - "spec": ">=2.0.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/micromatch" - ], - "_resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "_shasum": "1a9c744829f39dbb858c76ca3579ae2a54ebd1fa", - "_shrinkwrap": null, - "_spec": "object.omit@^2.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/object.omit/issues" - }, - "dependencies": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - }, - "description": "Return a copy of an object excluding the given key, or array of keys. Also accepts an optional filter function as the last argument.", - "devDependencies": { - "gulp-format-md": "^0.1.11", - "mocha": "^3.1.2", - "should": "^11.1.1" - }, - "directories": {}, - "dist": { - "shasum": "1a9c744829f39dbb858c76ca3579ae2a54ebd1fa", - "tarball": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "6634673e6e88c65796f1df4bcb787dede6dc7ffc", - "homepage": "https://github.com/jonschlinkert/object.omit", - "keywords": [ - "clear", - "delete", - "key", - "object", - "omit", - "property", - "remove", - "value" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - } - ], - "name": "object.omit", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/object.omit.git" - }, - "scripts": { - "test": "mocha" - }, - "verb": { - "layout": "default", - "lint": { - "reflinks": true - }, - "plugins": [ - "gulp-format-md" - ], - "reflinks": [ - "verb", - "verb-generate-readme" - ], - "related": { - "list": [ - "object.defaults", - "object.filter", - "object.pick", - "object.pluck", - "object.reduce" - ] - }, - "tasks": [ - "readme" - ], - "toc": false - }, - "version": "2.0.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/once/LICENSE b/fundamentals/bug-challenge-es6/node_modules/once/LICENSE deleted file mode 100644 index 19129e315..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/once/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/once/README.md b/fundamentals/bug-challenge-es6/node_modules/once/README.md deleted file mode 100644 index 1f1ffca93..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/once/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# once - -Only call a function once. - -## usage - -```javascript -var once = require('once') - -function load (file, cb) { - cb = once(cb) - loader.load('file') - loader.once('load', cb) - loader.once('error', cb) -} -``` - -Or add to the Function.prototype in a responsible way: - -```javascript -// only has to be done once -require('once').proto() - -function load (file, cb) { - cb = cb.once() - loader.load('file') - loader.once('load', cb) - loader.once('error', cb) -} -``` - -Ironically, the prototype feature makes this module twice as -complicated as necessary. - -To check whether you function has been called, use `fn.called`. Once the -function is called for the first time the return value of the original -function is saved in `fn.value` and subsequent calls will continue to -return this value. - -```javascript -var once = require('once') - -function load (cb) { - cb = once(cb) - var stream = createStream() - stream.once('data', cb) - stream.once('end', function () { - if (!cb.called) cb(new Error('not found')) - }) -} -``` - -## `once.strict(func)` - -Throw an error if the function is called twice. - -Some functions are expected to be called only once. Using `once` for them would -potentially hide logical errors. - -In the example below, the `greet` function has to call the callback only once: - -```javascript -function greet (name, cb) { - // return is missing from the if statement - // when no name is passed, the callback is called twice - if (!name) cb('Hello anonymous') - cb('Hello ' + name) -} - -function log (msg) { - console.log(msg) -} - -// this will print 'Hello anonymous' but the logical error will be missed -greet(null, once(msg)) - -// once.strict will print 'Hello anonymous' and throw an error when the callback will be called the second time -greet(null, once.strict(msg)) -``` diff --git a/fundamentals/bug-challenge-es6/node_modules/once/once.js b/fundamentals/bug-challenge-es6/node_modules/once/once.js deleted file mode 100644 index 235406736..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/once/once.js +++ /dev/null @@ -1,42 +0,0 @@ -var wrappy = require('wrappy') -module.exports = wrappy(once) -module.exports.strict = wrappy(onceStrict) - -once.proto = once(function () { - Object.defineProperty(Function.prototype, 'once', { - value: function () { - return once(this) - }, - configurable: true - }) - - Object.defineProperty(Function.prototype, 'onceStrict', { - value: function () { - return onceStrict(this) - }, - configurable: true - }) -}) - -function once (fn) { - var f = function () { - if (f.called) return f.value - f.called = true - return f.value = fn.apply(this, arguments) - } - f.called = false - return f -} - -function onceStrict (fn) { - var f = function () { - if (f.called) - throw new Error(f.onceError) - f.called = true - return f.value = fn.apply(this, arguments) - } - var name = fn.name || 'Function wrapped with `once`' - f.onceError = name + " shouldn't be called more than once" - f.called = false - return f -} diff --git a/fundamentals/bug-challenge-es6/node_modules/once/package.json b/fundamentals/bug-challenge-es6/node_modules/once/package.json deleted file mode 100644 index ee344de06..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/once/package.json +++ /dev/null @@ -1,96 +0,0 @@ -{ - "_args": [ - [ - "once@1.x", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api" - ] - ], - "_from": "once@>=1.0.0 <2.0.0", - "_id": "once@1.4.0", - "_inCache": true, - "_installable": true, - "_location": "/once", - "_nodeVersion": "6.5.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/once-1.4.0.tgz_1473196269128_0.537820661207661" - }, - "_npmUser": { - "email": "i@izs.me", - "name": "isaacs" - }, - "_npmVersion": "3.10.7", - "_phantomChildren": {}, - "_requested": { - "name": "once", - "raw": "once@1.x", - "rawSpec": "1.x", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/glob", - "/inflight", - "/istanbul", - "/istanbul-api", - "/rimraf/glob" - ], - "_resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "_shasum": "583b1aa775961d4b113ac17d9c50baef9dd76bd1", - "_shrinkwrap": null, - "_spec": "once@1.x", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul-api", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter", - "url": "http://blog.izs.me/" - }, - "bugs": { - "url": "https://github.com/isaacs/once/issues" - }, - "dependencies": { - "wrappy": "1" - }, - "description": "Run a function exactly one time", - "devDependencies": { - "tap": "^7.0.1" - }, - "directories": { - "test": "test" - }, - "dist": { - "shasum": "583b1aa775961d4b113ac17d9c50baef9dd76bd1", - "tarball": "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - }, - "files": [ - "once.js" - ], - "gitHead": "0e614d9f5a7e6f0305c625f6b581f6d80b33b8a6", - "homepage": "https://github.com/isaacs/once#readme", - "keywords": [ - "once", - "function", - "one", - "single" - ], - "license": "ISC", - "main": "once.js", - "maintainers": [ - { - "email": "i@izs.me", - "name": "isaacs" - } - ], - "name": "once", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/once.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "1.4.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/optimist/.travis.yml deleted file mode 100644 index cc4dba29d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "0.8" - - "0.10" diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/LICENSE b/fundamentals/bug-challenge-es6/node_modules/optimist/LICENSE deleted file mode 100644 index 432d1aeb0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/bool.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/bool.js deleted file mode 100644 index a998fb7ab..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/bool.js +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env node -var util = require('util'); -var argv = require('optimist').argv; - -if (argv.s) { - util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: '); -} -console.log( - (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '') -); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/boolean_double.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/boolean_double.js deleted file mode 100644 index a35a7e6d3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/boolean_double.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .boolean(['x','y','z']) - .argv -; -console.dir([ argv.x, argv.y, argv.z ]); -console.dir(argv._); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/boolean_single.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/boolean_single.js deleted file mode 100644 index 017bb6893..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/boolean_single.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .boolean('v') - .argv -; -console.dir(argv.v); -console.dir(argv._); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/default_hash.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/default_hash.js deleted file mode 100644 index ade77681d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/default_hash.js +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node - -var argv = require('optimist') - .default({ x : 10, y : 10 }) - .argv -; - -console.log(argv.x + argv.y); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/default_singles.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/default_singles.js deleted file mode 100644 index d9b1ff458..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/default_singles.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .default('x', 10) - .default('y', 10) - .argv -; -console.log(argv.x + argv.y); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/divide.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/divide.js deleted file mode 100644 index 5e2ee82ff..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/divide.js +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env node - -var argv = require('optimist') - .usage('Usage: $0 -x [num] -y [num]') - .demand(['x','y']) - .argv; - -console.log(argv.x / argv.y); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/line_count.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/line_count.js deleted file mode 100644 index b5f95bf6d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/line_count.js +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .usage('Count the lines in a file.\nUsage: $0') - .demand('f') - .alias('f', 'file') - .describe('f', 'Load a file') - .argv -; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/line_count_options.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/line_count_options.js deleted file mode 100644 index d9ac70904..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/line_count_options.js +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .usage('Count the lines in a file.\nUsage: $0') - .options({ - file : { - demand : true, - alias : 'f', - description : 'Load a file' - }, - base : { - alias : 'b', - description : 'Numeric base to use for output', - default : 10, - }, - }) - .argv -; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines.toString(argv.base)); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/line_count_wrap.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/line_count_wrap.js deleted file mode 100644 index 426751112..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/line_count_wrap.js +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .usage('Count the lines in a file.\nUsage: $0') - .wrap(80) - .demand('f') - .alias('f', [ 'file', 'filename' ]) - .describe('f', - "Load a file. It's pretty important." - + " Required even. So you'd better specify it." - ) - .alias('b', 'base') - .describe('b', 'Numeric base to display the number of lines in') - .default('b', 10) - .describe('x', 'Super-secret optional parameter which is secret') - .default('x', '') - .argv -; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines.toString(argv.base)); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/nonopt.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/nonopt.js deleted file mode 100644 index ee633eedc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/nonopt.js +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist').argv; -console.log('(%d,%d)', argv.x, argv.y); -console.log(argv._); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/reflect.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/reflect.js deleted file mode 100644 index 816b3e111..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/reflect.js +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -console.dir(require('optimist').argv); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/short.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/short.js deleted file mode 100644 index 1db0ad0f8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/short.js +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist').argv; -console.log('(%d,%d)', argv.x, argv.y); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/string.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/string.js deleted file mode 100644 index a8e5aeb23..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/string.js +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist') - .string('x', 'y') - .argv -; -console.dir([ argv.x, argv.y ]); - -/* Turns off numeric coercion: - ./node string.js -x 000123 -y 9876 - [ '000123', '9876' ] -*/ diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/usage-options.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/usage-options.js deleted file mode 100644 index b99997767..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/usage-options.js +++ /dev/null @@ -1,19 +0,0 @@ -var optimist = require('./../index'); - -var argv = optimist.usage('This is my awesome program', { - 'about': { - description: 'Provide some details about the author of this program', - required: true, - short: 'a', - }, - 'info': { - description: 'Provide some information about the node.js agains!!!!!!', - boolean: true, - short: 'i' - } -}).argv; - -optimist.showHelp(); - -console.log('\n\nInspecting options'); -console.dir(argv); \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/example/xup.js b/fundamentals/bug-challenge-es6/node_modules/optimist/example/xup.js deleted file mode 100644 index 8f6ecd201..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/example/xup.js +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env node -var argv = require('optimist').argv; - -if (argv.rif - 5 * argv.xup > 7.138) { - console.log('Buy more riffiwobbles'); -} -else { - console.log('Sell the xupptumblers'); -} - diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/index.js b/fundamentals/bug-challenge-es6/node_modules/optimist/index.js deleted file mode 100644 index 4da5a6d87..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/index.js +++ /dev/null @@ -1,343 +0,0 @@ -var path = require('path'); -var minimist = require('minimist'); -var wordwrap = require('wordwrap'); - -/* Hack an instance of Argv with process.argv into Argv - so people can do - require('optimist')(['--beeble=1','-z','zizzle']).argv - to parse a list of args and - require('optimist').argv - to get a parsed version of process.argv. -*/ - -var inst = Argv(process.argv.slice(2)); -Object.keys(inst).forEach(function (key) { - Argv[key] = typeof inst[key] == 'function' - ? inst[key].bind(inst) - : inst[key]; -}); - -var exports = module.exports = Argv; -function Argv (processArgs, cwd) { - var self = {}; - if (!cwd) cwd = process.cwd(); - - self.$0 = process.argv - .slice(0,2) - .map(function (x) { - var b = rebase(cwd, x); - return x.match(/^\//) && b.length < x.length - ? b : x - }) - .join(' ') - ; - - if (process.env._ != undefined && process.argv[1] == process.env._) { - self.$0 = process.env._.replace( - path.dirname(process.execPath) + '/', '' - ); - } - - var options = { - boolean: [], - string: [], - alias: {}, - default: [] - }; - - self.boolean = function (bools) { - options.boolean.push.apply(options.boolean, [].concat(bools)); - return self; - }; - - self.string = function (strings) { - options.string.push.apply(options.string, [].concat(strings)); - return self; - }; - - self.default = function (key, value) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.default(k, key[k]); - }); - } - else { - options.default[key] = value; - } - return self; - }; - - self.alias = function (x, y) { - if (typeof x === 'object') { - Object.keys(x).forEach(function (key) { - self.alias(key, x[key]); - }); - } - else { - options.alias[x] = (options.alias[x] || []).concat(y); - } - return self; - }; - - var demanded = {}; - self.demand = function (keys) { - if (typeof keys == 'number') { - if (!demanded._) demanded._ = 0; - demanded._ += keys; - } - else if (Array.isArray(keys)) { - keys.forEach(function (key) { - self.demand(key); - }); - } - else { - demanded[keys] = true; - } - - return self; - }; - - var usage; - self.usage = function (msg, opts) { - if (!opts && typeof msg === 'object') { - opts = msg; - msg = null; - } - - usage = msg; - - if (opts) self.options(opts); - - return self; - }; - - function fail (msg) { - self.showHelp(); - if (msg) console.error(msg); - process.exit(1); - } - - var checks = []; - self.check = function (f) { - checks.push(f); - return self; - }; - - var descriptions = {}; - self.describe = function (key, desc) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.describe(k, key[k]); - }); - } - else { - descriptions[key] = desc; - } - return self; - }; - - self.parse = function (args) { - return parseArgs(args); - }; - - self.option = self.options = function (key, opt) { - if (typeof key === 'object') { - Object.keys(key).forEach(function (k) { - self.options(k, key[k]); - }); - } - else { - if (opt.alias) self.alias(key, opt.alias); - if (opt.demand) self.demand(key); - if (typeof opt.default !== 'undefined') { - self.default(key, opt.default); - } - - if (opt.boolean || opt.type === 'boolean') { - self.boolean(key); - } - if (opt.string || opt.type === 'string') { - self.string(key); - } - - var desc = opt.describe || opt.description || opt.desc; - if (desc) { - self.describe(key, desc); - } - } - - return self; - }; - - var wrap = null; - self.wrap = function (cols) { - wrap = cols; - return self; - }; - - self.showHelp = function (fn) { - if (!fn) fn = console.error; - fn(self.help()); - }; - - self.help = function () { - var keys = Object.keys( - Object.keys(descriptions) - .concat(Object.keys(demanded)) - .concat(Object.keys(options.default)) - .reduce(function (acc, key) { - if (key !== '_') acc[key] = true; - return acc; - }, {}) - ); - - var help = keys.length ? [ 'Options:' ] : []; - - if (usage) { - help.unshift(usage.replace(/\$0/g, self.$0), ''); - } - - var switches = keys.reduce(function (acc, key) { - acc[key] = [ key ].concat(options.alias[key] || []) - .map(function (sw) { - return (sw.length > 1 ? '--' : '-') + sw - }) - .join(', ') - ; - return acc; - }, {}); - - var switchlen = longest(Object.keys(switches).map(function (s) { - return switches[s] || ''; - })); - - var desclen = longest(Object.keys(descriptions).map(function (d) { - return descriptions[d] || ''; - })); - - keys.forEach(function (key) { - var kswitch = switches[key]; - var desc = descriptions[key] || ''; - - if (wrap) { - desc = wordwrap(switchlen + 4, wrap)(desc) - .slice(switchlen + 4) - ; - } - - var spadding = new Array( - Math.max(switchlen - kswitch.length + 3, 0) - ).join(' '); - - var dpadding = new Array( - Math.max(desclen - desc.length + 1, 0) - ).join(' '); - - var type = null; - - if (options.boolean[key]) type = '[boolean]'; - if (options.string[key]) type = '[string]'; - - if (!wrap && dpadding.length > 0) { - desc += dpadding; - } - - var prelude = ' ' + kswitch + spadding; - var extra = [ - type, - demanded[key] - ? '[required]' - : null - , - options.default[key] !== undefined - ? '[default: ' + JSON.stringify(options.default[key]) + ']' - : null - , - ].filter(Boolean).join(' '); - - var body = [ desc, extra ].filter(Boolean).join(' '); - - if (wrap) { - var dlines = desc.split('\n'); - var dlen = dlines.slice(-1)[0].length - + (dlines.length === 1 ? prelude.length : 0) - - body = desc + (dlen + extra.length > wrap - 2 - ? '\n' - + new Array(wrap - extra.length + 1).join(' ') - + extra - : new Array(wrap - extra.length - dlen + 1).join(' ') - + extra - ); - } - - help.push(prelude + body); - }); - - help.push(''); - return help.join('\n'); - }; - - Object.defineProperty(self, 'argv', { - get : function () { return parseArgs(processArgs) }, - enumerable : true, - }); - - function parseArgs (args) { - var argv = minimist(args, options); - argv.$0 = self.$0; - - if (demanded._ && argv._.length < demanded._) { - fail('Not enough non-option arguments: got ' - + argv._.length + ', need at least ' + demanded._ - ); - } - - var missing = []; - Object.keys(demanded).forEach(function (key) { - if (!argv[key]) missing.push(key); - }); - - if (missing.length) { - fail('Missing required arguments: ' + missing.join(', ')); - } - - checks.forEach(function (f) { - try { - if (f(argv) === false) { - fail('Argument check failed: ' + f.toString()); - } - } - catch (err) { - fail(err) - } - }); - - return argv; - } - - function longest (xs) { - return Math.max.apply( - null, - xs.map(function (x) { return x.length }) - ); - } - - return self; -}; - -// rebase an absolute path to a relative one with respect to a base directory -// exported for tests -exports.rebase = rebase; -function rebase (base, dir) { - var ds = path.normalize(dir).split('/').slice(1); - var bs = path.normalize(base).split('/').slice(1); - - for (var i = 0; ds[i] && ds[i] == bs[i]; i++); - ds.splice(0, i); bs.splice(0, i); - - var p = path.normalize( - bs.map(function () { return '..' }).concat(ds).join('/') - ).replace(/\/$/,'').replace(/^$/, '.'); - return p.match(/^[.\/]/) ? p : './' + p; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/package.json b/fundamentals/bug-challenge-es6/node_modules/optimist/package.json deleted file mode 100644 index df6c12a19..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/package.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "_args": [ - [ - "optimist@^0.6.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/handlebars" - ] - ], - "_from": "optimist@>=0.6.1 <0.7.0", - "_id": "optimist@0.6.1", - "_inCache": true, - "_installable": true, - "_location": "/optimist", - "_npmUser": { - "email": "mail@substack.net", - "name": "substack" - }, - "_npmVersion": "1.3.21", - "_phantomChildren": {}, - "_requested": { - "name": "optimist", - "raw": "optimist@^0.6.1", - "rawSpec": "^0.6.1", - "scope": null, - "spec": ">=0.6.1 <0.7.0", - "type": "range" - }, - "_requiredBy": [ - "/handlebars" - ], - "_resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "_shasum": "da3ea74686fa21a19a111c326e90eb15a0196686", - "_shrinkwrap": null, - "_spec": "optimist@^0.6.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/handlebars", - "author": { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/node-optimist/issues" - }, - "dependencies": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - }, - "description": "Light-weight option parsing with an argv hash. No optstrings attached.", - "devDependencies": { - "hashish": "~0.0.4", - "tap": "~0.4.0" - }, - "directories": {}, - "dist": { - "shasum": "da3ea74686fa21a19a111c326e90eb15a0196686", - "tarball": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz" - }, - "engine": { - "node": ">=0.4" - }, - "homepage": "https://github.com/substack/node-optimist", - "keywords": [ - "argument", - "args", - "option", - "parser", - "parsing", - "cli", - "command" - ], - "license": "MIT/X11", - "main": "./index.js", - "maintainers": [ - { - "email": "mail@substack.net", - "name": "substack" - } - ], - "name": "optimist", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/substack/node-optimist.git" - }, - "scripts": { - "test": "tap ./test/*.js" - }, - "version": "0.6.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/readme.markdown b/fundamentals/bug-challenge-es6/node_modules/optimist/readme.markdown deleted file mode 100644 index b74b43724..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/readme.markdown +++ /dev/null @@ -1,513 +0,0 @@ -# DEPRECATION NOTICE - -I don't want to maintain this module anymore since I just use -[minimist](https://npmjs.org/package/minimist), the argument parsing engine, -directly instead nowadays. - -See [yargs](https://github.com/chevex/yargs) for the modern, pirate-themed -successor to optimist. - -[![yarrrrrrrgs!](http://i.imgur.com/4WFGVJ9.png)](https://github.com/chevex/yargs) - -You should also consider [nomnom](https://github.com/harthur/nomnom). - -optimist -======== - -Optimist is a node.js library for option parsing for people who hate option -parsing. More specifically, this module is for people who like all the --bells -and -whistlz of program usage but think optstrings are a waste of time. - -With optimist, option parsing doesn't have to suck (as much). - -[![build status](https://secure.travis-ci.org/substack/node-optimist.png)](http://travis-ci.org/substack/node-optimist) - -examples -======== - -With Optimist, the options are just a hash! No optstrings attached. -------------------------------------------------------------------- - -xup.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist').argv; - -if (argv.rif - 5 * argv.xup > 7.138) { - console.log('Buy more riffiwobbles'); -} -else { - console.log('Sell the xupptumblers'); -} -```` - -*** - - $ ./xup.js --rif=55 --xup=9.52 - Buy more riffiwobbles - - $ ./xup.js --rif 12 --xup 8.1 - Sell the xupptumblers - -![This one's optimistic.](http://substack.net/images/optimistic.png) - -But wait! There's more! You can do short options: -------------------------------------------------- - -short.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist').argv; -console.log('(%d,%d)', argv.x, argv.y); -```` - -*** - - $ ./short.js -x 10 -y 21 - (10,21) - -And booleans, both long and short (and grouped): ----------------------------------- - -bool.js: - -````javascript -#!/usr/bin/env node -var util = require('util'); -var argv = require('optimist').argv; - -if (argv.s) { - util.print(argv.fr ? 'Le chat dit: ' : 'The cat says: '); -} -console.log( - (argv.fr ? 'miaou' : 'meow') + (argv.p ? '.' : '') -); -```` - -*** - - $ ./bool.js -s - The cat says: meow - - $ ./bool.js -sp - The cat says: meow. - - $ ./bool.js -sp --fr - Le chat dit: miaou. - -And non-hypenated options too! Just use `argv._`! -------------------------------------------------- - -nonopt.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist').argv; -console.log('(%d,%d)', argv.x, argv.y); -console.log(argv._); -```` - -*** - - $ ./nonopt.js -x 6.82 -y 3.35 moo - (6.82,3.35) - [ 'moo' ] - - $ ./nonopt.js foo -x 0.54 bar -y 1.12 baz - (0.54,1.12) - [ 'foo', 'bar', 'baz' ] - -Plus, Optimist comes with .usage() and .demand()! -------------------------------------------------- - -divide.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .usage('Usage: $0 -x [num] -y [num]') - .demand(['x','y']) - .argv; - -console.log(argv.x / argv.y); -```` - -*** - - $ ./divide.js -x 55 -y 11 - 5 - - $ node ./divide.js -x 4.91 -z 2.51 - Usage: node ./divide.js -x [num] -y [num] - - Options: - -x [required] - -y [required] - - Missing required arguments: y - -EVEN MORE HOLY COW ------------------- - -default_singles.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .default('x', 10) - .default('y', 10) - .argv -; -console.log(argv.x + argv.y); -```` - -*** - - $ ./default_singles.js -x 5 - 15 - -default_hash.js: - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .default({ x : 10, y : 10 }) - .argv -; -console.log(argv.x + argv.y); -```` - -*** - - $ ./default_hash.js -y 7 - 17 - -And if you really want to get all descriptive about it... ---------------------------------------------------------- - -boolean_single.js - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .boolean('v') - .argv -; -console.dir(argv); -```` - -*** - - $ ./boolean_single.js -v foo bar baz - true - [ 'bar', 'baz', 'foo' ] - -boolean_double.js - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .boolean(['x','y','z']) - .argv -; -console.dir([ argv.x, argv.y, argv.z ]); -console.dir(argv._); -```` - -*** - - $ ./boolean_double.js -x -z one two three - [ true, false, true ] - [ 'one', 'two', 'three' ] - -Optimist is here to help... ---------------------------- - -You can describe parameters for help messages and set aliases. Optimist figures -out how to format a handy help string automatically. - -line_count.js - -````javascript -#!/usr/bin/env node -var argv = require('optimist') - .usage('Count the lines in a file.\nUsage: $0') - .demand('f') - .alias('f', 'file') - .describe('f', 'Load a file') - .argv -; - -var fs = require('fs'); -var s = fs.createReadStream(argv.file); - -var lines = 0; -s.on('data', function (buf) { - lines += buf.toString().match(/\n/g).length; -}); - -s.on('end', function () { - console.log(lines); -}); -```` - -*** - - $ node line_count.js - Count the lines in a file. - Usage: node ./line_count.js - - Options: - -f, --file Load a file [required] - - Missing required arguments: f - - $ node line_count.js --file line_count.js - 20 - - $ node line_count.js -f line_count.js - 20 - -methods -======= - -By itself, - -````javascript -require('optimist').argv -````` - -will use `process.argv` array to construct the `argv` object. - -You can pass in the `process.argv` yourself: - -````javascript -require('optimist')([ '-x', '1', '-y', '2' ]).argv -```` - -or use .parse() to do the same thing: - -````javascript -require('optimist').parse([ '-x', '1', '-y', '2' ]) -```` - -The rest of these methods below come in just before the terminating `.argv`. - -.alias(key, alias) ------------------- - -Set key names as equivalent such that updates to a key will propagate to aliases -and vice-versa. - -Optionally `.alias()` can take an object that maps keys to aliases. - -.default(key, value) --------------------- - -Set `argv[key]` to `value` if no option was specified on `process.argv`. - -Optionally `.default()` can take an object that maps keys to default values. - -.demand(key) ------------- - -If `key` is a string, show the usage information and exit if `key` wasn't -specified in `process.argv`. - -If `key` is a number, demand at least as many non-option arguments, which show -up in `argv._`. - -If `key` is an Array, demand each element. - -.describe(key, desc) --------------------- - -Describe a `key` for the generated usage information. - -Optionally `.describe()` can take an object that maps keys to descriptions. - -.options(key, opt) ------------------- - -Instead of chaining together `.alias().demand().default()`, you can specify -keys in `opt` for each of the chainable methods. - -For example: - -````javascript -var argv = require('optimist') - .options('f', { - alias : 'file', - default : '/etc/passwd', - }) - .argv -; -```` - -is the same as - -````javascript -var argv = require('optimist') - .alias('f', 'file') - .default('f', '/etc/passwd') - .argv -; -```` - -Optionally `.options()` can take an object that maps keys to `opt` parameters. - -.usage(message) ---------------- - -Set a usage message to show which commands to use. Inside `message`, the string -`$0` will get interpolated to the current script name or node command for the -present script similar to how `$0` works in bash or perl. - -.check(fn) ----------- - -Check that certain conditions are met in the provided arguments. - -If `fn` throws or returns `false`, show the thrown error, usage information, and -exit. - -.boolean(key) -------------- - -Interpret `key` as a boolean. If a non-flag option follows `key` in -`process.argv`, that string won't get set as the value of `key`. - -If `key` never shows up as a flag in `process.arguments`, `argv[key]` will be -`false`. - -If `key` is an Array, interpret all the elements as booleans. - -.string(key) ------------- - -Tell the parser logic not to interpret `key` as a number or boolean. -This can be useful if you need to preserve leading zeros in an input. - -If `key` is an Array, interpret all the elements as strings. - -.wrap(columns) --------------- - -Format usage output to wrap at `columns` many columns. - -.help() -------- - -Return the generated usage string. - -.showHelp(fn=console.error) ---------------------------- - -Print the usage data using `fn` for printing. - -.parse(args) ------------- - -Parse `args` instead of `process.argv`. Returns the `argv` object. - -.argv ------ - -Get the arguments as a plain old object. - -Arguments without a corresponding flag show up in the `argv._` array. - -The script name or node command is available at `argv.$0` similarly to how `$0` -works in bash or perl. - -parsing tricks -============== - -stop parsing ------------- - -Use `--` to stop parsing flags and stuff the remainder into `argv._`. - - $ node examples/reflect.js -a 1 -b 2 -- -c 3 -d 4 - { _: [ '-c', '3', '-d', '4' ], - '$0': 'node ./examples/reflect.js', - a: 1, - b: 2 } - -negate fields -------------- - -If you want to explicity set a field to false instead of just leaving it -undefined or to override a default you can do `--no-key`. - - $ node examples/reflect.js -a --no-b - { _: [], - '$0': 'node ./examples/reflect.js', - a: true, - b: false } - -numbers -------- - -Every argument that looks like a number (`!isNaN(Number(arg))`) is converted to -one. This way you can just `net.createConnection(argv.port)` and you can add -numbers out of `argv` with `+` without having that mean concatenation, -which is super frustrating. - -duplicates ----------- - -If you specify a flag multiple times it will get turned into an array containing -all the values in order. - - $ node examples/reflect.js -x 5 -x 8 -x 0 - { _: [], - '$0': 'node ./examples/reflect.js', - x: [ 5, 8, 0 ] } - -dot notation ------------- - -When you use dots (`.`s) in argument names, an implicit object path is assumed. -This lets you organize arguments into nested objects. - - $ node examples/reflect.js --foo.bar.baz=33 --foo.quux=5 - { _: [], - '$0': 'node ./examples/reflect.js', - foo: { bar: { baz: 33 }, quux: 5 } } - -short numbers -------------- - -Short numeric `head -n5` style argument work too: - - $ node reflect.js -n123 -m456 - { '3': true, - '6': true, - _: [], - '$0': 'node ./reflect.js', - n: 123, - m: 456 } - -installation -============ - -With [npm](http://github.com/isaacs/npm), just do: - npm install optimist - -or clone this project on github: - - git clone http://github.com/substack/node-optimist.git - -To run the tests with [expresso](http://github.com/visionmedia/expresso), -just do: - - expresso - -inspired By -=========== - -This module is loosely inspired by Perl's -[Getopt::Casual](http://search.cpan.org/~photo/Getopt-Casual-0.13.1/Casual.pm). diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/test/_.js b/fundamentals/bug-challenge-es6/node_modules/optimist/test/_.js deleted file mode 100644 index d9c58b368..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/test/_.js +++ /dev/null @@ -1,71 +0,0 @@ -var spawn = require('child_process').spawn; -var test = require('tap').test; - -test('dotSlashEmpty', testCmd('./bin.js', [])); - -test('dotSlashArgs', testCmd('./bin.js', [ 'a', 'b', 'c' ])); - -test('nodeEmpty', testCmd('node bin.js', [])); - -test('nodeArgs', testCmd('node bin.js', [ 'x', 'y', 'z' ])); - -test('whichNodeEmpty', function (t) { - var which = spawn('which', ['node']); - - which.stdout.on('data', function (buf) { - t.test( - testCmd(buf.toString().trim() + ' bin.js', []) - ); - t.end(); - }); - - which.stderr.on('data', function (err) { - assert.error(err); - t.end(); - }); -}); - -test('whichNodeArgs', function (t) { - var which = spawn('which', ['node']); - - which.stdout.on('data', function (buf) { - t.test( - testCmd(buf.toString().trim() + ' bin.js', [ 'q', 'r' ]) - ); - t.end(); - }); - - which.stderr.on('data', function (err) { - t.error(err); - t.end(); - }); -}); - -function testCmd (cmd, args) { - - return function (t) { - var to = setTimeout(function () { - assert.fail('Never got stdout data.') - }, 5000); - - var oldDir = process.cwd(); - process.chdir(__dirname + '/_'); - - var cmds = cmd.split(' '); - - var bin = spawn(cmds[0], cmds.slice(1).concat(args.map(String))); - process.chdir(oldDir); - - bin.stderr.on('data', function (err) { - t.error(err); - t.end(); - }); - - bin.stdout.on('data', function (buf) { - clearTimeout(to); - var _ = JSON.parse(buf.toString()); - t.same(_.map(String), args.map(String)); - t.end(); - }); - }; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/test/_/argv.js b/fundamentals/bug-challenge-es6/node_modules/optimist/test/_/argv.js deleted file mode 100644 index 3d096062c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/test/_/argv.js +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env node -console.log(JSON.stringify(process.argv)); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/test/_/bin.js b/fundamentals/bug-challenge-es6/node_modules/optimist/test/_/bin.js deleted file mode 100755 index 4a18d85f3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/test/_/bin.js +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env node -var argv = require('../../index').argv -console.log(JSON.stringify(argv._)); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/test/dash.js b/fundamentals/bug-challenge-es6/node_modules/optimist/test/dash.js deleted file mode 100644 index af8ed6fc6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/test/dash.js +++ /dev/null @@ -1,31 +0,0 @@ -var optimist = require('../index'); -var test = require('tap').test; - -test('-', function (t) { - t.plan(5); - t.deepEqual( - fix(optimist.parse([ '-n', '-' ])), - { n: '-', _: [] } - ); - t.deepEqual( - fix(optimist.parse([ '-' ])), - { _: [ '-' ] } - ); - t.deepEqual( - fix(optimist.parse([ '-f-' ])), - { f: '-', _: [] } - ); - t.deepEqual( - fix(optimist([ '-b', '-' ]).boolean('b').argv), - { b: true, _: [ '-' ] } - ); - t.deepEqual( - fix(optimist([ '-s', '-' ]).string('s').argv), - { s: '-', _: [] } - ); -}); - -function fix (obj) { - delete obj.$0; - return obj; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/test/parse.js b/fundamentals/bug-challenge-es6/node_modules/optimist/test/parse.js deleted file mode 100644 index d320f4336..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/test/parse.js +++ /dev/null @@ -1,446 +0,0 @@ -var optimist = require('../index'); -var path = require('path'); -var test = require('tap').test; - -var $0 = 'node ./' + path.relative(process.cwd(), __filename); - -test('short boolean', function (t) { - var parse = optimist.parse([ '-b' ]); - t.same(parse, { b : true, _ : [], $0 : $0 }); - t.same(typeof parse.b, 'boolean'); - t.end(); -}); - -test('long boolean', function (t) { - t.same( - optimist.parse([ '--bool' ]), - { bool : true, _ : [], $0 : $0 } - ); - t.end(); -}); - -test('bare', function (t) { - t.same( - optimist.parse([ 'foo', 'bar', 'baz' ]), - { _ : [ 'foo', 'bar', 'baz' ], $0 : $0 } - ); - t.end(); -}); - -test('short group', function (t) { - t.same( - optimist.parse([ '-cats' ]), - { c : true, a : true, t : true, s : true, _ : [], $0 : $0 } - ); - t.end(); -}); - -test('short group next', function (t) { - t.same( - optimist.parse([ '-cats', 'meow' ]), - { c : true, a : true, t : true, s : 'meow', _ : [], $0 : $0 } - ); - t.end(); -}); - -test('short capture', function (t) { - t.same( - optimist.parse([ '-h', 'localhost' ]), - { h : 'localhost', _ : [], $0 : $0 } - ); - t.end(); -}); - -test('short captures', function (t) { - t.same( - optimist.parse([ '-h', 'localhost', '-p', '555' ]), - { h : 'localhost', p : 555, _ : [], $0 : $0 } - ); - t.end(); -}); - -test('long capture sp', function (t) { - t.same( - optimist.parse([ '--pow', 'xixxle' ]), - { pow : 'xixxle', _ : [], $0 : $0 } - ); - t.end(); -}); - -test('long capture eq', function (t) { - t.same( - optimist.parse([ '--pow=xixxle' ]), - { pow : 'xixxle', _ : [], $0 : $0 } - ); - t.end() -}); - -test('long captures sp', function (t) { - t.same( - optimist.parse([ '--host', 'localhost', '--port', '555' ]), - { host : 'localhost', port : 555, _ : [], $0 : $0 } - ); - t.end(); -}); - -test('long captures eq', function (t) { - t.same( - optimist.parse([ '--host=localhost', '--port=555' ]), - { host : 'localhost', port : 555, _ : [], $0 : $0 } - ); - t.end(); -}); - -test('mixed short bool and capture', function (t) { - t.same( - optimist.parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ], $0 : $0, - } - ); - t.end(); -}); - -test('short and long', function (t) { - t.same( - optimist.parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]), - { - f : true, p : 555, h : 'localhost', - _ : [ 'script.js' ], $0 : $0, - } - ); - t.end(); -}); - -test('no', function (t) { - t.same( - optimist.parse([ '--no-moo' ]), - { moo : false, _ : [], $0 : $0 } - ); - t.end(); -}); - -test('multi', function (t) { - t.same( - optimist.parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]), - { v : ['a','b','c'], _ : [], $0 : $0 } - ); - t.end(); -}); - -test('comprehensive', function (t) { - t.same( - optimist.parse([ - '--name=meowmers', 'bare', '-cats', 'woo', - '-h', 'awesome', '--multi=quux', - '--key', 'value', - '-b', '--bool', '--no-meep', '--multi=baz', - '--', '--not-a-flag', 'eek' - ]), - { - c : true, - a : true, - t : true, - s : 'woo', - h : 'awesome', - b : true, - bool : true, - key : 'value', - multi : [ 'quux', 'baz' ], - meep : false, - name : 'meowmers', - _ : [ 'bare', '--not-a-flag', 'eek' ], - $0 : $0 - } - ); - t.end(); -}); - -test('nums', function (t) { - var argv = optimist.parse([ - '-x', '1234', - '-y', '5.67', - '-z', '1e7', - '-w', '10f', - '--hex', '0xdeadbeef', - '789', - ]); - t.same(argv, { - x : 1234, - y : 5.67, - z : 1e7, - w : '10f', - hex : 0xdeadbeef, - _ : [ 789 ], - $0 : $0 - }); - t.same(typeof argv.x, 'number'); - t.same(typeof argv.y, 'number'); - t.same(typeof argv.z, 'number'); - t.same(typeof argv.w, 'string'); - t.same(typeof argv.hex, 'number'); - t.same(typeof argv._[0], 'number'); - t.end(); -}); - -test('flag boolean', function (t) { - var parse = optimist([ '-t', 'moo' ]).boolean(['t']).argv; - t.same(parse, { t : true, _ : [ 'moo' ], $0 : $0 }); - t.same(typeof parse.t, 'boolean'); - t.end(); -}); - -test('flag boolean value', function (t) { - var parse = optimist(['--verbose', 'false', 'moo', '-t', 'true']) - .boolean(['t', 'verbose']).default('verbose', true).argv; - - t.same(parse, { - verbose: false, - t: true, - _: ['moo'], - $0 : $0 - }); - - t.same(typeof parse.verbose, 'boolean'); - t.same(typeof parse.t, 'boolean'); - t.end(); -}); - -test('flag boolean default false', function (t) { - var parse = optimist(['moo']) - .boolean(['t', 'verbose']) - .default('verbose', false) - .default('t', false).argv; - - t.same(parse, { - verbose: false, - t: false, - _: ['moo'], - $0 : $0 - }); - - t.same(typeof parse.verbose, 'boolean'); - t.same(typeof parse.t, 'boolean'); - t.end(); - -}); - -test('boolean groups', function (t) { - var parse = optimist([ '-x', '-z', 'one', 'two', 'three' ]) - .boolean(['x','y','z']).argv; - - t.same(parse, { - x : true, - y : false, - z : true, - _ : [ 'one', 'two', 'three' ], - $0 : $0 - }); - - t.same(typeof parse.x, 'boolean'); - t.same(typeof parse.y, 'boolean'); - t.same(typeof parse.z, 'boolean'); - t.end(); -}); - -test('newlines in params' , function (t) { - var args = optimist.parse([ '-s', "X\nX" ]) - t.same(args, { _ : [], s : "X\nX", $0 : $0 }); - - // reproduce in bash: - // VALUE="new - // line" - // node program.js --s="$VALUE" - args = optimist.parse([ "--s=X\nX" ]) - t.same(args, { _ : [], s : "X\nX", $0 : $0 }); - t.end(); -}); - -test('strings' , function (t) { - var s = optimist([ '-s', '0001234' ]).string('s').argv.s; - t.same(s, '0001234'); - t.same(typeof s, 'string'); - - var x = optimist([ '-x', '56' ]).string('x').argv.x; - t.same(x, '56'); - t.same(typeof x, 'string'); - t.end(); -}); - -test('stringArgs', function (t) { - var s = optimist([ ' ', ' ' ]).string('_').argv._; - t.same(s.length, 2); - t.same(typeof s[0], 'string'); - t.same(s[0], ' '); - t.same(typeof s[1], 'string'); - t.same(s[1], ' '); - t.end(); -}); - -test('slashBreak', function (t) { - t.same( - optimist.parse([ '-I/foo/bar/baz' ]), - { I : '/foo/bar/baz', _ : [], $0 : $0 } - ); - t.same( - optimist.parse([ '-xyz/foo/bar/baz' ]), - { x : true, y : true, z : '/foo/bar/baz', _ : [], $0 : $0 } - ); - t.end(); -}); - -test('alias', function (t) { - var argv = optimist([ '-f', '11', '--zoom', '55' ]) - .alias('z', 'zoom') - .argv - ; - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.f, 11); - t.end(); -}); - -test('multiAlias', function (t) { - var argv = optimist([ '-f', '11', '--zoom', '55' ]) - .alias('z', [ 'zm', 'zoom' ]) - .argv - ; - t.equal(argv.zoom, 55); - t.equal(argv.z, argv.zoom); - t.equal(argv.z, argv.zm); - t.equal(argv.f, 11); - t.end(); -}); - -test('boolean default true', function (t) { - var argv = optimist.options({ - sometrue: { - boolean: true, - default: true - } - }).argv; - - t.equal(argv.sometrue, true); - t.end(); -}); - -test('boolean default false', function (t) { - var argv = optimist.options({ - somefalse: { - boolean: true, - default: false - } - }).argv; - - t.equal(argv.somefalse, false); - t.end(); -}); - -test('nested dotted objects', function (t) { - var argv = optimist([ - '--foo.bar', '3', '--foo.baz', '4', - '--foo.quux.quibble', '5', '--foo.quux.o_O', - '--beep.boop' - ]).argv; - - t.same(argv.foo, { - bar : 3, - baz : 4, - quux : { - quibble : 5, - o_O : true - }, - }); - t.same(argv.beep, { boop : true }); - t.end(); -}); - -test('boolean and alias with chainable api', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - herp: { alias: 'h', boolean: true } - }; - var aliasedArgv = optimist(aliased) - .boolean('herp') - .alias('h', 'herp') - .argv; - var propertyArgv = optimist(regular) - .boolean('herp') - .alias('h', 'herp') - .argv; - var expected = { - herp: true, - h: true, - '_': [ 'derp' ], - '$0': $0, - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -test('boolean and alias with options hash', function (t) { - var aliased = [ '-h', 'derp' ]; - var regular = [ '--herp', 'derp' ]; - var opts = { - herp: { alias: 'h', boolean: true } - }; - var aliasedArgv = optimist(aliased) - .options(opts) - .argv; - var propertyArgv = optimist(regular).options(opts).argv; - var expected = { - herp: true, - h: true, - '_': [ 'derp' ], - '$0': $0, - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - - t.end(); -}); - -test('boolean and alias using explicit true', function (t) { - var aliased = [ '-h', 'true' ]; - var regular = [ '--herp', 'true' ]; - var opts = { - herp: { alias: 'h', boolean: true } - }; - var aliasedArgv = optimist(aliased) - .boolean('h') - .alias('h', 'herp') - .argv; - var propertyArgv = optimist(regular) - .boolean('h') - .alias('h', 'herp') - .argv; - var expected = { - herp: true, - h: true, - '_': [ ], - '$0': $0, - }; - - t.same(aliasedArgv, expected); - t.same(propertyArgv, expected); - t.end(); -}); - -// regression, see https://github.com/substack/node-optimist/issues/71 -test('boolean and --x=true', function(t) { - var parsed = optimist(['--boool', '--other=true']).boolean('boool').argv; - - t.same(parsed.boool, true); - t.same(parsed.other, 'true'); - - parsed = optimist(['--boool', '--other=false']).boolean('boool').argv; - - t.same(parsed.boool, true); - t.same(parsed.other, 'false'); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/test/parse_modified.js b/fundamentals/bug-challenge-es6/node_modules/optimist/test/parse_modified.js deleted file mode 100644 index a57dc84e9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/test/parse_modified.js +++ /dev/null @@ -1,14 +0,0 @@ -var optimist = require('../'); -var test = require('tap').test; - -test('parse with modifier functions' , function (t) { - t.plan(1); - - var argv = optimist().boolean('b').parse([ '-b', '123' ]); - t.deepEqual(fix(argv), { b: true, _: ['123'] }); -}); - -function fix (obj) { - delete obj.$0; - return obj; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/test/short.js b/fundamentals/bug-challenge-es6/node_modules/optimist/test/short.js deleted file mode 100644 index b2c38ad84..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/test/short.js +++ /dev/null @@ -1,16 +0,0 @@ -var optimist = require('../index'); -var test = require('tap').test; - -test('-n123', function (t) { - t.plan(1); - var parse = optimist.parse([ '-n123' ]); - t.equal(parse.n, 123); -}); - -test('-123', function (t) { - t.plan(3); - var parse = optimist.parse([ '-123', '456' ]); - t.equal(parse['1'], true); - t.equal(parse['2'], true); - t.equal(parse['3'], 456); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/test/usage.js b/fundamentals/bug-challenge-es6/node_modules/optimist/test/usage.js deleted file mode 100644 index 300454c1e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/test/usage.js +++ /dev/null @@ -1,292 +0,0 @@ -var Hash = require('hashish'); -var optimist = require('../index'); -var test = require('tap').test; - -test('usageFail', function (t) { - var r = checkUsage(function () { - return optimist('-x 10 -z 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .demand(['x','y']) - .argv; - }); - t.same( - r.result, - { x : 10, z : 20, _ : [], $0 : './usage' } - ); - - t.same( - r.errors.join('\n').split(/\n+/), - [ - 'Usage: ./usage -x NUM -y NUM', - 'Options:', - ' -x [required]', - ' -y [required]', - 'Missing required arguments: y', - ] - ); - t.same(r.logs, []); - t.ok(r.exit); - t.end(); -}); - - -test('usagePass', function (t) { - var r = checkUsage(function () { - return optimist('-x 10 -y 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .demand(['x','y']) - .argv; - }); - t.same(r, { - result : { x : 10, y : 20, _ : [], $0 : './usage' }, - errors : [], - logs : [], - exit : false, - }); - t.end(); -}); - -test('checkPass', function (t) { - var r = checkUsage(function () { - return optimist('-x 10 -y 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .check(function (argv) { - if (!('x' in argv)) throw 'You forgot about -x'; - if (!('y' in argv)) throw 'You forgot about -y'; - }) - .argv; - }); - t.same(r, { - result : { x : 10, y : 20, _ : [], $0 : './usage' }, - errors : [], - logs : [], - exit : false, - }); - t.end(); -}); - -test('checkFail', function (t) { - var r = checkUsage(function () { - return optimist('-x 10 -z 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .check(function (argv) { - if (!('x' in argv)) throw 'You forgot about -x'; - if (!('y' in argv)) throw 'You forgot about -y'; - }) - .argv; - }); - - t.same( - r.result, - { x : 10, z : 20, _ : [], $0 : './usage' } - ); - - t.same( - r.errors.join('\n').split(/\n+/), - [ - 'Usage: ./usage -x NUM -y NUM', - 'You forgot about -y' - ] - ); - - t.same(r.logs, []); - t.ok(r.exit); - t.end(); -}); - -test('checkCondPass', function (t) { - function checker (argv) { - return 'x' in argv && 'y' in argv; - } - - var r = checkUsage(function () { - return optimist('-x 10 -y 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .check(checker) - .argv; - }); - t.same(r, { - result : { x : 10, y : 20, _ : [], $0 : './usage' }, - errors : [], - logs : [], - exit : false, - }); - t.end(); -}); - -test('checkCondFail', function (t) { - function checker (argv) { - return 'x' in argv && 'y' in argv; - } - - var r = checkUsage(function () { - return optimist('-x 10 -z 20'.split(' ')) - .usage('Usage: $0 -x NUM -y NUM') - .check(checker) - .argv; - }); - - t.same( - r.result, - { x : 10, z : 20, _ : [], $0 : './usage' } - ); - - t.same( - r.errors.join('\n').split(/\n+/).join('\n'), - 'Usage: ./usage -x NUM -y NUM\n' - + 'Argument check failed: ' + checker.toString() - ); - - t.same(r.logs, []); - t.ok(r.exit); - t.end(); -}); - -test('countPass', function (t) { - var r = checkUsage(function () { - return optimist('1 2 3 --moo'.split(' ')) - .usage('Usage: $0 [x] [y] [z] {OPTIONS}') - .demand(3) - .argv; - }); - t.same(r, { - result : { _ : [ '1', '2', '3' ], moo : true, $0 : './usage' }, - errors : [], - logs : [], - exit : false, - }); - t.end(); -}); - -test('countFail', function (t) { - var r = checkUsage(function () { - return optimist('1 2 --moo'.split(' ')) - .usage('Usage: $0 [x] [y] [z] {OPTIONS}') - .demand(3) - .argv; - }); - t.same( - r.result, - { _ : [ '1', '2' ], moo : true, $0 : './usage' } - ); - - t.same( - r.errors.join('\n').split(/\n+/), - [ - 'Usage: ./usage [x] [y] [z] {OPTIONS}', - 'Not enough non-option arguments: got 2, need at least 3', - ] - ); - - t.same(r.logs, []); - t.ok(r.exit); - t.end(); -}); - -test('defaultSingles', function (t) { - var r = checkUsage(function () { - return optimist('--foo 50 --baz 70 --powsy'.split(' ')) - .default('foo', 5) - .default('bar', 6) - .default('baz', 7) - .argv - ; - }); - t.same(r.result, { - foo : '50', - bar : 6, - baz : '70', - powsy : true, - _ : [], - $0 : './usage', - }); - t.end(); -}); - -test('defaultAliases', function (t) { - var r = checkUsage(function () { - return optimist('') - .alias('f', 'foo') - .default('f', 5) - .argv - ; - }); - t.same(r.result, { - f : '5', - foo : '5', - _ : [], - $0 : './usage', - }); - t.end(); -}); - -test('defaultHash', function (t) { - var r = checkUsage(function () { - return optimist('--foo 50 --baz 70'.split(' ')) - .default({ foo : 10, bar : 20, quux : 30 }) - .argv - ; - }); - t.same(r.result, { - _ : [], - $0 : './usage', - foo : 50, - baz : 70, - bar : 20, - quux : 30, - }); - t.end(); -}); - -test('rebase', function (t) { - t.equal( - optimist.rebase('/home/substack', '/home/substack/foo/bar/baz'), - './foo/bar/baz' - ); - t.equal( - optimist.rebase('/home/substack/foo/bar/baz', '/home/substack'), - '../../..' - ); - t.equal( - optimist.rebase('/home/substack/foo', '/home/substack/pow/zoom.txt'), - '../pow/zoom.txt' - ); - t.end(); -}); - -function checkUsage (f) { - - var exit = false; - - process._exit = process.exit; - process._env = process.env; - process._argv = process.argv; - - process.exit = function (t) { exit = true }; - process.env = Hash.merge(process.env, { _ : 'node' }); - process.argv = [ './usage' ]; - - var errors = []; - var logs = []; - - console._error = console.error; - console.error = function (msg) { errors.push(msg) }; - console._log = console.log; - console.log = function (msg) { logs.push(msg) }; - - var result = f(); - - process.exit = process._exit; - process.env = process._env; - process.argv = process._argv; - - console.error = console._error; - console.log = console._log; - - return { - errors : errors, - logs : logs, - exit : exit, - result : result, - }; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/optimist/test/whitespace.js b/fundamentals/bug-challenge-es6/node_modules/optimist/test/whitespace.js deleted file mode 100644 index 90b90752c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optimist/test/whitespace.js +++ /dev/null @@ -1,8 +0,0 @@ -var optimist = require('../'); -var test = require('tap').test; - -test('whitespace should be whitespace' , function (t) { - t.plan(1); - var x = optimist.parse([ '-x', '\t' ]).x; - t.equal(x, '\t'); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/optionator/CHANGELOG.md deleted file mode 100644 index c0e0cf284..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/CHANGELOG.md +++ /dev/null @@ -1,52 +0,0 @@ -# 0.8.2 -- fix bug #18 - detect missing value when flag is last item -- update dependencies - -# 0.8.1 -- update `fast-levenshtein` dependency - -# 0.8.0 -- update `levn` dependency - supplying a float value to an option with type `Int` now throws an error, instead of silently converting to an `Int` - -# 0.7.1 -- fix bug with use of `defaults` and `concatRepeatedArrays` or `mergeRepeatedObjects` - -# 0.7.0 -- added `concatrepeatedarrays` option: `oneValuePerFlag`, only allows one array value per flag -- added `typeAliases` option -- added `parseArgv` which takes an array and parses with the first two items sliced off -- changed enum help style -- bug fixes (#12) -- use of `concatRepeatedArrays` and `mergeRepeatedObjects` at the top level is deprecated, use it as either a per-option option, or set them in the `defaults` object to set them for all objects - -# 0.6.0 -- added `defaults` lib-option flag, allowing one to set default properties for all options -- added `concatRepeatedArrays` and `mergeRepeatedObjects` as option level properties, allowing you to turn this feature on for specific options only - -# 0.5.0 -- `Boolean` flags with `default: 'true'`, and no short aliases, will by default show the `--no` version in help - -# 0.4.0 -- add `mergeRepeatedObjects` setting - -# 0.3.0 -- add `concatRepeatedArrays` setting -- add `overrideRequired` option setting -- use just Levenshtein string compare algo rather than Levenshtein Damerau to due dependency license issue - -# 0.2.2 -- bug fixes - -# 0.2.1 -- improved interpolation -- added changelog - -# 0.2.0 -- add dependency checks to options - added `dependsOn` as an option property -- add interpolation for `prepend` and `append` text with new `generateHelp` option, `interpolate` - -# 0.1.1 -- update dependencies - -# 0.1.0 -- initial release diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/LICENSE b/fundamentals/bug-challenge-es6/node_modules/optionator/LICENSE deleted file mode 100644 index 525b11850..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) George Zahariev - -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/fundamentals/bug-challenge-es6/node_modules/optionator/README.md b/fundamentals/bug-challenge-es6/node_modules/optionator/README.md deleted file mode 100644 index 91c59d379..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/README.md +++ /dev/null @@ -1,236 +0,0 @@ -# Optionator -
    - -Optionator is a JavaScript option parsing and help generation library used by [eslint](http://eslint.org), [Grasp](http://graspjs.com), [LiveScript](http://livescript.net), [esmangle](https://github.com/estools/esmangle), [escodegen](https://github.com/estools/escodegen), and [many more](https://www.npmjs.com/browse/depended/optionator). - -For an online demo, check out the [Grasp online demo](http://www.graspjs.com/#demo). - -[About](#about) · [Usage](#usage) · [Settings Format](#settings-format) · [Argument Format](#argument-format) - -## Why? -The problem with other option parsers, such as `yargs` or `minimist`, is they just accept all input, valid or not. -With Optionator, if you mistype an option, it will give you an error (with a suggestion for what you meant). -If you give the wrong type of argument for an option, it will give you an error rather than supplying the wrong input to your application. - - $ cmd --halp - Invalid option '--halp' - perhaps you meant '--help'? - - $ cmd --count str - Invalid value for option 'count' - expected type Int, received value: str. - -Other helpful features include reformatting the help text based on the size of the console, so that it fits even if the console is narrow, and accepting not just an array (eg. process.argv), but a string or object as well, making things like testing much easier. - -## About -Optionator uses [type-check](https://github.com/gkz/type-check) and [levn](https://github.com/gkz/levn) behind the scenes to cast and verify input according the specified types. - -MIT license. Version 0.8.2 - - npm install optionator - -For updates on Optionator, [follow me on twitter](https://twitter.com/gkzahariev). - -## Usage -`require('optionator');` returns a function. It has one property, `VERSION`, the current version of the library as a string. This function is called with an object specifying your options and other information, see the [settings format section](#settings-format). This in turn returns an object with three properties, `parse`, `parseArgv`, `generateHelp`, and `generateHelpForOption`, which are all functions. - -```js -var optionator = require('optionator')({ - prepend: 'Usage: cmd [options]', - append: 'Version 1.0.0', - options: [{ - option: 'help', - alias: 'h', - type: 'Boolean', - description: 'displays help' - }, { - option: 'count', - alias: 'c', - type: 'Int', - description: 'number of things', - example: 'cmd --count 2' - }] -}); - -var options = optionator.parseArgv(process.argv); -if (options.help) { - console.log(optionator.generateHelp()); -} -... -``` - -### parse(input, parseOptions) -`parse` processes the `input` according to your settings, and returns an object with the results. - -##### arguments -* input - `[String] | Object | String` - the input you wish to parse -* parseOptions - `{slice: Int}` - all options optional - - `slice` specifies how much to slice away from the beginning if the input is an array or string - by default `0` for string, `2` for array (works with `process.argv`) - -##### returns -`Object` - the parsed options, each key is a camelCase version of the option name (specified in dash-case), and each value is the processed value for that option. Positional values are in an array under the `_` key. - -##### example -```js -parse(['node', 't.js', '--count', '2', 'positional']); // {count: 2, _: ['positional']} -parse('--count 2 positional'); // {count: 2, _: ['positional']} -parse({count: 2, _:['positional']}); // {count: 2, _: ['positional']} -``` - -### parseArgv(input) -`parseArgv` works exactly like `parse`, but only for array input and it slices off the first two elements. - -##### arguments -* input - `[String]` - the input you wish to parse - -##### returns -See "returns" section in "parse" - -##### example -```js -parseArgv(process.argv); -``` - -### generateHelp(helpOptions) -`generateHelp` produces help text based on your settings. - -##### arguments -* helpOptions - `{showHidden: Boolean, interpolate: Object}` - all options optional - - `showHidden` specifies whether to show options with `hidden: true` specified, by default it is `false` - - `interpolate` specify data to be interpolated in `prepend` and `append` text, `{{key}}` is the format - eg. `generateHelp({interpolate:{version: '0.4.2'}})`, will change this `append` text: `Version {{version}}` to `Version 0.4.2` - -##### returns -`String` - the generated help text - -##### example -```js -generateHelp(); /* -"Usage: cmd [options] positional - - -h, --help displays help - -c, --count Int number of things - -Version 1.0.0 -"*/ -``` - -### generateHelpForOption(optionName) -`generateHelpForOption` produces expanded help text for the specified with `optionName` option. If an `example` was specified for the option, it will be displayed, and if a `longDescription` was specified, it will display that instead of the `description`. - -##### arguments -* optionName - `String` - the name of the option to display - -##### returns -`String` - the generated help text for the option - -##### example -```js -generateHelpForOption('count'); /* -"-c, --count Int -description: number of things -example: cmd --count 2 -"*/ -``` - -## Settings Format -When your `require('optionator')`, you get a function that takes in a settings object. This object has the type: - - { - prepend: String, - append: String, - options: [{heading: String} | { - option: String, - alias: [String] | String, - type: String, - enum: [String], - default: String, - restPositional: Boolean, - required: Boolean, - overrideRequired: Boolean, - dependsOn: [String] | String, - concatRepeatedArrays: Boolean | (Boolean, Object), - mergeRepeatedObjects: Boolean, - description: String, - longDescription: String, - example: [String] | String - }], - helpStyle: { - aliasSeparator: String, - typeSeparator: String, - descriptionSeparator: String, - initialIndent: Int, - secondaryIndent: Int, - maxPadFactor: Number - }, - mutuallyExclusive: [[String | [String]]], - concatRepeatedArrays: Boolean | (Boolean, Object), // deprecated, set in defaults object - mergeRepeatedObjects: Boolean, // deprecated, set in defaults object - positionalAnywhere: Boolean, - typeAliases: Object, - defaults: Object - } - -All of the properties are optional (the `Maybe` has been excluded for brevities sake), except for having either `heading: String` or `option: String` in each object in the `options` array. - -### Top Level Properties -* `prepend` is an optional string to be placed before the options in the help text -* `append` is an optional string to be placed after the options in the help text -* `options` is a required array specifying your options and headings, the options and headings will be displayed in the order specified -* `helpStyle` is an optional object which enables you to change the default appearance of some aspects of the help text -* `mutuallyExclusive` is an optional array of arrays of either strings or arrays of strings. The top level array is a list of rules, each rule is a list of elements - each element can be either a string (the name of an option), or a list of strings (a group of option names) - there will be an error if more than one element is present -* `concatRepeatedArrays` see description under the "Option Properties" heading - use at the top level is deprecated, if you want to set this for all options, use the `defaults` property -* `mergeRepeatedObjects` see description under the "Option Properties" heading - use at the top level is deprecated, if you want to set this for all options, use the `defaults` property -* `positionalAnywhere` is an optional boolean (defaults to `true`) - when `true` it allows positional arguments anywhere, when `false`, all arguments after the first positional one are taken to be positional as well, even if they look like a flag. For example, with `positionalAnywhere: false`, the arguments `--flag --boom 12 --crack` would have two positional arguments: `12` and `--crack` -* `typeAliases` is an optional object, it allows you to set aliases for types, eg. `{Path: 'String'}` would allow you to use the type `Path` as an alias for the type `String` -* `defaults` is an optional object following the option properties format, which specifies default values for all options. A default will be overridden if manually set. For example, you can do `default: { type: "String" }` to set the default type of all options to `String`, and then override that default in an individual option by setting the `type` property - -#### Heading Properties -* `heading` a required string, the name of the heading - -#### Option Properties -* `option` the required name of the option - use dash-case, without the leading dashes -* `alias` is an optional string or array of strings which specify any aliases for the option -* `type` is a required string in the [type check](https://github.com/gkz/type-check) [format](https://github.com/gkz/type-check#type-format), this will be used to cast the inputted value and validate it -* `enum` is an optional array of strings, each string will be parsed by [levn](https://github.com/gkz/levn) - the argument value must be one of the resulting values - each potential value must validate against the specified `type` -* `default` is a optional string, which will be parsed by [levn](https://github.com/gkz/levn) and used as the default value if none is set - the value must validate against the specified `type` -* `restPositional` is an optional boolean - if set to `true`, everything after the option will be taken to be a positional argument, even if it looks like a named argument -* `required` is an optional boolean - if set to `true`, the option parsing will fail if the option is not defined -* `overrideRequired` is a optional boolean - if set to `true` and the option is used, and there is another option which is required but not set, it will override the need for the required option and there will be no error - this is useful if you have required options and want to use `--help` or `--version` flags -* `concatRepeatedArrays` is an optional boolean or tuple with boolean and options object (defaults to `false`) - when set to `true` and an option contains an array value and is repeated, the subsequent values for the flag will be appended rather than overwriting the original value - eg. option `g` of type `[String]`: `-g a -g b -g c,d` will result in `['a','b','c','d']` - - You can supply an options object by giving the following value: `[true, options]`. The one currently supported option is `oneValuePerFlag`, this only allows one array value per flag. This is useful if your potential values contain a comma. -* `mergeRepeatedObjects` is an optional boolean (defaults to `false`) - when set to `true` and an option contains an object value and is repeated, the subsequent values for the flag will be merged rather than overwriting the original value - eg. option `g` of type `Object`: `-g a:1 -g b:2 -g c:3,d:4` will result in `{a: 1, b: 2, c: 3, d: 4}` -* `dependsOn` is an optional string or array of strings - if simply a string (the name of another option), it will make sure that that other option is set, if an array of strings, depending on whether `'and'` or `'or'` is first, it will either check whether all (`['and', 'option-a', 'option-b']`), or at least one (`['or', 'option-a', 'option-b']`) other options are set -* `description` is an optional string, which will be displayed next to the option in the help text -* `longDescription` is an optional string, it will be displayed instead of the `description` when `generateHelpForOption` is used -* `example` is an optional string or array of strings with example(s) for the option - these will be displayed when `generateHelpForOption` is used - -#### Help Style Properties -* `aliasSeparator` is an optional string, separates multiple names from each other - default: ' ,' -* `typeSeparator` is an optional string, separates the type from the names - default: ' ' -* `descriptionSeparator` is an optional string , separates the description from the padded name and type - default: ' ' -* `initialIndent` is an optional int - the amount of indent for options - default: 2 -* `secondaryIndent` is an optional int - the amount of indent if wrapped fully (in addition to the initial indent) - default: 4 -* `maxPadFactor` is an optional number - affects the default level of padding for the names/type, it is multiplied by the average of the length of the names/type - default: 1.5 - -## Argument Format -At the highest level there are two types of arguments: named, and positional. - -Name arguments of any length are prefixed with `--` (eg. `--go`), and those of one character may be prefixed with either `--` or `-` (eg. `-g`). - -There are two types of named arguments: boolean flags (eg. `--problemo`, `-p`) which take no value and result in a `true` if they are present, the falsey `undefined` if they are not present, or `false` if present and explicitly prefixed with `no` (eg. `--no-problemo`). Named arguments with values (eg. `--tseries 800`, `-t 800`) are the other type. If the option has a type `Boolean` it will automatically be made into a boolean flag. Any other type results in a named argument that takes a value. - -For more information about how to properly set types to get the value you want, take a look at the [type check](https://github.com/gkz/type-check) and [levn](https://github.com/gkz/levn) pages. - -You can group single character arguments that use a single `-`, however all except the last must be boolean flags (which take no value). The last may be a boolean flag, or an argument which takes a value - eg. `-ba 2` is equivalent to `-b -a 2`. - -Positional arguments are all those values which do not fall under the above - they can be anywhere, not just at the end. For example, in `cmd -b one -a 2 two` where `b` is a boolean flag, and `a` has the type `Number`, there are two positional arguments, `one` and `two`. - -Everything after an `--` is positional, even if it looks like a named argument. - -You may optionally use `=` to separate option names from values, for example: `--count=2`. - -If you specify the option `NUM`, then any argument using a single `-` followed by a number will be valid and will set the value of `NUM`. Eg. `-2` will be parsed into `NUM: 2`. - -If duplicate named arguments are present, the last one will be taken. - -## Technical About -`optionator` is written in [LiveScript](http://livescript.net/) - a language that compiles to JavaScript. It uses [levn](https://github.com/gkz/levn) to cast arguments to their specified type, and uses [type-check](https://github.com/gkz/type-check) to validate values. It also uses the [prelude.ls](http://preludels.com/) library. diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/lib/help.js b/fundamentals/bug-challenge-es6/node_modules/optionator/lib/help.js deleted file mode 100644 index a459c02c2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/lib/help.js +++ /dev/null @@ -1,247 +0,0 @@ -// Generated by LiveScript 1.5.0 -(function(){ - var ref$, id, find, sort, min, max, map, unlines, nameToRaw, dasherize, naturalJoin, wordwrap, getPreText, setHelpStyleDefaults, generateHelpForOption, generateHelp; - ref$ = require('prelude-ls'), id = ref$.id, find = ref$.find, sort = ref$.sort, min = ref$.min, max = ref$.max, map = ref$.map, unlines = ref$.unlines; - ref$ = require('./util'), nameToRaw = ref$.nameToRaw, dasherize = ref$.dasherize, naturalJoin = ref$.naturalJoin; - wordwrap = require('wordwrap'); - getPreText = function(option, arg$, maxWidth){ - var mainName, shortNames, ref$, longNames, type, description, aliasSeparator, typeSeparator, initialIndent, names, namesString, namesStringLen, typeSeparatorString, typeSeparatorStringLen, wrap; - mainName = option.option, shortNames = (ref$ = option.shortNames) != null - ? ref$ - : [], longNames = (ref$ = option.longNames) != null - ? ref$ - : [], type = option.type, description = option.description; - aliasSeparator = arg$.aliasSeparator, typeSeparator = arg$.typeSeparator, initialIndent = arg$.initialIndent; - if (option.negateName) { - mainName = "no-" + mainName; - if (longNames) { - longNames = map(function(it){ - return "no-" + it; - }, longNames); - } - } - names = mainName.length === 1 - ? [mainName].concat(shortNames, longNames) - : shortNames.concat([mainName], longNames); - namesString = map(nameToRaw, names).join(aliasSeparator); - namesStringLen = namesString.length; - typeSeparatorString = mainName === 'NUM' ? '::' : typeSeparator; - typeSeparatorStringLen = typeSeparatorString.length; - if (maxWidth != null && !option.boolean && initialIndent + namesStringLen + typeSeparatorStringLen + type.length > maxWidth) { - wrap = wordwrap(initialIndent + namesStringLen + typeSeparatorStringLen, maxWidth); - return namesString + "" + typeSeparatorString + wrap(type).replace(/^\s+/, ''); - } else { - return namesString + "" + (option.boolean - ? '' - : typeSeparatorString + "" + type); - } - }; - setHelpStyleDefaults = function(helpStyle){ - helpStyle.aliasSeparator == null && (helpStyle.aliasSeparator = ', '); - helpStyle.typeSeparator == null && (helpStyle.typeSeparator = ' '); - helpStyle.descriptionSeparator == null && (helpStyle.descriptionSeparator = ' '); - helpStyle.initialIndent == null && (helpStyle.initialIndent = 2); - helpStyle.secondaryIndent == null && (helpStyle.secondaryIndent = 4); - helpStyle.maxPadFactor == null && (helpStyle.maxPadFactor = 1.5); - }; - generateHelpForOption = function(getOption, arg$){ - var stdout, helpStyle, ref$; - stdout = arg$.stdout, helpStyle = (ref$ = arg$.helpStyle) != null - ? ref$ - : {}; - setHelpStyleDefaults(helpStyle); - return function(optionName){ - var maxWidth, wrap, option, e, pre, defaultString, restPositionalString, description, fullDescription, that, preDescription, descriptionString, exampleString, examples, seperator; - maxWidth = stdout != null && stdout.isTTY ? stdout.columns - 1 : null; - wrap = maxWidth ? wordwrap(maxWidth) : id; - try { - option = getOption(dasherize(optionName)); - } catch (e$) { - e = e$; - return e.message; - } - pre = getPreText(option, helpStyle); - defaultString = option['default'] && !option.negateName ? "\ndefault: " + option['default'] : ''; - restPositionalString = option.restPositional ? 'Everything after this option is considered a positional argument, even if it looks like an option.' : ''; - description = option.longDescription || option.description && sentencize(option.description); - fullDescription = description && restPositionalString - ? description + " " + restPositionalString - : (that = description || restPositionalString) ? that : ''; - preDescription = 'description:'; - descriptionString = !fullDescription - ? '' - : maxWidth && fullDescription.length - 1 - preDescription.length > maxWidth - ? "\n" + preDescription + "\n" + wrap(fullDescription) - : "\n" + preDescription + " " + fullDescription; - exampleString = (that = option.example) ? (examples = [].concat(that), examples.length > 1 - ? "\nexamples:\n" + unlines(examples) - : "\nexample: " + examples[0]) : ''; - seperator = defaultString || descriptionString || exampleString ? "\n" + repeatString$('=', pre.length) : ''; - return pre + "" + seperator + defaultString + descriptionString + exampleString; - }; - }; - generateHelp = function(arg$){ - var options, prepend, append, helpStyle, ref$, stdout, aliasSeparator, typeSeparator, descriptionSeparator, maxPadFactor, initialIndent, secondaryIndent; - options = arg$.options, prepend = arg$.prepend, append = arg$.append, helpStyle = (ref$ = arg$.helpStyle) != null - ? ref$ - : {}, stdout = arg$.stdout; - setHelpStyleDefaults(helpStyle); - aliasSeparator = helpStyle.aliasSeparator, typeSeparator = helpStyle.typeSeparator, descriptionSeparator = helpStyle.descriptionSeparator, maxPadFactor = helpStyle.maxPadFactor, initialIndent = helpStyle.initialIndent, secondaryIndent = helpStyle.secondaryIndent; - return function(arg$){ - var ref$, showHidden, interpolate, maxWidth, output, out, data, optionCount, totalPreLen, preLens, i$, len$, item, that, pre, descParts, desc, preLen, sortedPreLens, maxPreLen, preLenMean, x, padAmount, descSepLen, fullWrapCount, partialWrapCount, descLen, totalLen, initialSpace, wrapAllFull, i, wrap; - ref$ = arg$ != null - ? arg$ - : {}, showHidden = ref$.showHidden, interpolate = ref$.interpolate; - maxWidth = stdout != null && stdout.isTTY ? stdout.columns - 1 : null; - output = []; - out = function(it){ - return output.push(it != null ? it : ''); - }; - if (prepend) { - out(interpolate ? interp(prepend, interpolate) : prepend); - out(); - } - data = []; - optionCount = 0; - totalPreLen = 0; - preLens = []; - for (i$ = 0, len$ = (ref$ = options).length; i$ < len$; ++i$) { - item = ref$[i$]; - if (showHidden || !item.hidden) { - if (that = item.heading) { - data.push({ - type: 'heading', - value: that - }); - } else { - pre = getPreText(item, helpStyle, maxWidth); - descParts = []; - if ((that = item.description) != null) { - descParts.push(that); - } - if (that = item['enum']) { - descParts.push("either: " + naturalJoin(that)); - } - if (item['default'] && !item.negateName) { - descParts.push("default: " + item['default']); - } - desc = descParts.join(' - '); - data.push({ - type: 'option', - pre: pre, - desc: desc, - descLen: desc.length - }); - preLen = pre.length; - optionCount++; - totalPreLen += preLen; - preLens.push(preLen); - } - } - } - sortedPreLens = sort(preLens); - maxPreLen = sortedPreLens[sortedPreLens.length - 1]; - preLenMean = initialIndent + totalPreLen / optionCount; - x = optionCount > 2 ? min(preLenMean * maxPadFactor, maxPreLen) : maxPreLen; - for (i$ = sortedPreLens.length - 1; i$ >= 0; --i$) { - preLen = sortedPreLens[i$]; - if (preLen <= x) { - padAmount = preLen; - break; - } - } - descSepLen = descriptionSeparator.length; - if (maxWidth != null) { - fullWrapCount = 0; - partialWrapCount = 0; - for (i$ = 0, len$ = data.length; i$ < len$; ++i$) { - item = data[i$]; - if (item.type === 'option') { - pre = item.pre, desc = item.desc, descLen = item.descLen; - if (descLen === 0) { - item.wrap = 'none'; - } else { - preLen = max(padAmount, pre.length) + initialIndent + descSepLen; - totalLen = preLen + descLen; - if (totalLen > maxWidth) { - if (descLen / 2.5 > maxWidth - preLen) { - fullWrapCount++; - item.wrap = 'full'; - } else { - partialWrapCount++; - item.wrap = 'partial'; - } - } else { - item.wrap = 'none'; - } - } - } - } - } - initialSpace = repeatString$(' ', initialIndent); - wrapAllFull = optionCount > 1 && fullWrapCount + partialWrapCount * 0.5 > optionCount * 0.5; - for (i$ = 0, len$ = data.length; i$ < len$; ++i$) { - i = i$; - item = data[i$]; - if (item.type === 'heading') { - if (i !== 0) { - out(); - } - out(item.value + ":"); - } else { - pre = item.pre, desc = item.desc, descLen = item.descLen, wrap = item.wrap; - if (maxWidth != null) { - if (wrapAllFull || wrap === 'full') { - wrap = wordwrap(initialIndent + secondaryIndent, maxWidth); - out(initialSpace + "" + pre + "\n" + wrap(desc)); - continue; - } else if (wrap === 'partial') { - wrap = wordwrap(initialIndent + descSepLen + max(padAmount, pre.length), maxWidth); - out(initialSpace + "" + pad(pre, padAmount) + descriptionSeparator + wrap(desc).replace(/^\s+/, '')); - continue; - } - } - if (descLen === 0) { - out(initialSpace + "" + pre); - } else { - out(initialSpace + "" + pad(pre, padAmount) + descriptionSeparator + desc); - } - } - } - if (append) { - out(); - out(interpolate ? interp(append, interpolate) : append); - } - return unlines(output); - }; - }; - function pad(str, num){ - var len, padAmount; - len = str.length; - padAmount = num - len; - return str + "" + repeatString$(' ', padAmount > 0 ? padAmount : 0); - } - function sentencize(str){ - var first, rest, period; - first = str.charAt(0).toUpperCase(); - rest = str.slice(1); - period = /[\.!\?]$/.test(str) ? '' : '.'; - return first + "" + rest + period; - } - function interp(string, object){ - return string.replace(/{{([a-zA-Z$_][a-zA-Z$_0-9]*)}}/g, function(arg$, key){ - var ref$; - return (ref$ = object[key]) != null - ? ref$ - : "{{" + key + "}}"; - }); - } - module.exports = { - generateHelp: generateHelp, - generateHelpForOption: generateHelpForOption - }; - function repeatString$(str, n){ - for (var r = ''; n > 0; (n >>= 1) && (str += str)) if (n & 1) r += str; - return r; - } -}).call(this); diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/lib/index.js b/fundamentals/bug-challenge-es6/node_modules/optionator/lib/index.js deleted file mode 100644 index d947286c7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/lib/index.js +++ /dev/null @@ -1,465 +0,0 @@ -// Generated by LiveScript 1.5.0 -(function(){ - var VERSION, ref$, id, map, compact, any, groupBy, partition, chars, isItNaN, keys, Obj, camelize, deepIs, closestString, nameToRaw, dasherize, naturalJoin, generateHelp, generateHelpForOption, parsedTypeCheck, parseType, parseLevn, camelizeKeys, parseString, main, toString$ = {}.toString, slice$ = [].slice; - VERSION = '0.8.2'; - ref$ = require('prelude-ls'), id = ref$.id, map = ref$.map, compact = ref$.compact, any = ref$.any, groupBy = ref$.groupBy, partition = ref$.partition, chars = ref$.chars, isItNaN = ref$.isItNaN, keys = ref$.keys, Obj = ref$.Obj, camelize = ref$.camelize; - deepIs = require('deep-is'); - ref$ = require('./util'), closestString = ref$.closestString, nameToRaw = ref$.nameToRaw, dasherize = ref$.dasherize, naturalJoin = ref$.naturalJoin; - ref$ = require('./help'), generateHelp = ref$.generateHelp, generateHelpForOption = ref$.generateHelpForOption; - ref$ = require('type-check'), parsedTypeCheck = ref$.parsedTypeCheck, parseType = ref$.parseType; - parseLevn = require('levn').parsedTypeParse; - camelizeKeys = function(obj){ - var key, value, resultObj$ = {}; - for (key in obj) { - value = obj[key]; - resultObj$[camelize(key)] = value; - } - return resultObj$; - }; - parseString = function(string){ - var assignOpt, regex, replaceRegex, result, this$ = this; - assignOpt = '--?[a-zA-Z][-a-z-A-Z0-9]*='; - regex = RegExp('(?:' + assignOpt + ')?(?:\'(?:\\\\\'|[^\'])+\'|"(?:\\\\"|[^"])+")|[^\'"\\s]+', 'g'); - replaceRegex = RegExp('^(' + assignOpt + ')?[\'"]([\\s\\S]*)[\'"]$'); - result = map(function(it){ - return it.replace(replaceRegex, '$1$2'); - }, string.match(regex) || []); - return result; - }; - main = function(libOptions){ - var opts, defaults, required, traverse, getOption, parse; - opts = {}; - defaults = {}; - required = []; - if (toString$.call(libOptions.stdout).slice(8, -1) === 'Undefined') { - libOptions.stdout = process.stdout; - } - libOptions.positionalAnywhere == null && (libOptions.positionalAnywhere = true); - libOptions.typeAliases == null && (libOptions.typeAliases = {}); - libOptions.defaults == null && (libOptions.defaults = {}); - if (libOptions.concatRepeatedArrays != null) { - libOptions.defaults.concatRepeatedArrays = libOptions.concatRepeatedArrays; - } - if (libOptions.mergeRepeatedObjects != null) { - libOptions.defaults.mergeRepeatedObjects = libOptions.mergeRepeatedObjects; - } - traverse = function(options){ - var i$, len$, option, name, k, ref$, v, type, that, e, parsedPossibilities, parsedType, j$, len1$, possibility, rawDependsType, dependsOpts, dependsType, cra, alias, shortNames, longNames, this$ = this; - if (toString$.call(options).slice(8, -1) !== 'Array') { - throw new Error('No options defined.'); - } - for (i$ = 0, len$ = options.length; i$ < len$; ++i$) { - option = options[i$]; - if (option.heading == null) { - name = option.option; - if (opts[name] != null) { - throw new Error("Option '" + name + "' already defined."); - } - for (k in ref$ = libOptions.defaults) { - v = ref$[k]; - option[k] == null && (option[k] = v); - } - if (option.type === 'Boolean') { - option.boolean == null && (option.boolean = true); - } - if (option.parsedType == null) { - if (!option.type) { - throw new Error("No type defined for option '" + name + "'."); - } - try { - type = (that = libOptions.typeAliases[option.type]) != null - ? that - : option.type; - option.parsedType = parseType(type); - } catch (e$) { - e = e$; - throw new Error("Option '" + name + "': Error parsing type '" + option.type + "': " + e.message); - } - } - if (option['default']) { - try { - defaults[name] = parseLevn(option.parsedType, option['default']); - } catch (e$) { - e = e$; - throw new Error("Option '" + name + "': Error parsing default value '" + option['default'] + "' for type '" + option.type + "': " + e.message); - } - } - if (option['enum'] && !option.parsedPossiblities) { - parsedPossibilities = []; - parsedType = option.parsedType; - for (j$ = 0, len1$ = (ref$ = option['enum']).length; j$ < len1$; ++j$) { - possibility = ref$[j$]; - try { - parsedPossibilities.push(parseLevn(parsedType, possibility)); - } catch (e$) { - e = e$; - throw new Error("Option '" + name + "': Error parsing enum value '" + possibility + "' for type '" + option.type + "': " + e.message); - } - } - option.parsedPossibilities = parsedPossibilities; - } - if (that = option.dependsOn) { - if (that.length) { - ref$ = [].concat(option.dependsOn), rawDependsType = ref$[0], dependsOpts = slice$.call(ref$, 1); - dependsType = rawDependsType.toLowerCase(); - if (dependsOpts.length) { - if (dependsType === 'and' || dependsType === 'or') { - option.dependsOn = [dependsType].concat(slice$.call(dependsOpts)); - } else { - throw new Error("Option '" + name + "': If you have more than one dependency, you must specify either 'and' or 'or'"); - } - } else { - if ((ref$ = dependsType.toLowerCase()) === 'and' || ref$ === 'or') { - option.dependsOn = null; - } else { - option.dependsOn = ['and', rawDependsType]; - } - } - } else { - option.dependsOn = null; - } - } - if (option.required) { - required.push(name); - } - opts[name] = option; - if (option.concatRepeatedArrays != null) { - cra = option.concatRepeatedArrays; - if ('Boolean' === toString$.call(cra).slice(8, -1)) { - option.concatRepeatedArrays = [cra, {}]; - } else if (cra.length === 1) { - option.concatRepeatedArrays = [cra[0], {}]; - } else if (cra.length !== 2) { - throw new Error("Invalid setting for concatRepeatedArrays"); - } - } - if (option.alias || option.aliases) { - if (name === 'NUM') { - throw new Error("-NUM option can't have aliases."); - } - if (option.alias) { - option.aliases == null && (option.aliases = [].concat(option.alias)); - } - for (j$ = 0, len1$ = (ref$ = option.aliases).length; j$ < len1$; ++j$) { - alias = ref$[j$]; - if (opts[alias] != null) { - throw new Error("Option '" + alias + "' already defined."); - } - opts[alias] = option; - } - ref$ = partition(fn$, option.aliases), shortNames = ref$[0], longNames = ref$[1]; - option.shortNames == null && (option.shortNames = shortNames); - option.longNames == null && (option.longNames = longNames); - } - if ((!option.aliases || option.shortNames.length === 0) && option.type === 'Boolean' && option['default'] === 'true') { - option.negateName = true; - } - } - } - function fn$(it){ - return it.length === 1; - } - }; - traverse(libOptions.options); - getOption = function(name){ - var opt, possiblyMeant; - opt = opts[name]; - if (opt == null) { - possiblyMeant = closestString(keys(opts), name); - throw new Error("Invalid option '" + nameToRaw(name) + "'" + (possiblyMeant ? " - perhaps you meant '" + nameToRaw(possiblyMeant) + "'?" : '.')); - } - return opt; - }; - parse = function(input, arg$){ - var slice, obj, positional, restPositional, overrideRequired, prop, setValue, setDefaults, checkRequired, mutuallyExclusiveError, checkMutuallyExclusive, checkDependency, checkDependencies, checkProp, args, key, value, option, ref$, i$, len$, arg, that, result, short, argName, usingAssign, val, flags, len, j$, len1$, i, flag, opt, name, valPrime, negated, noedName; - slice = (arg$ != null - ? arg$ - : {}).slice; - obj = {}; - positional = []; - restPositional = false; - overrideRequired = false; - prop = null; - setValue = function(name, value){ - var opt, val, cra, e, currentType; - opt = getOption(name); - if (opt.boolean) { - val = value; - } else { - try { - cra = opt.concatRepeatedArrays; - if (cra != null && cra[0] && cra[1].oneValuePerFlag && opt.parsedType.length === 1 && opt.parsedType[0].structure === 'array') { - val = [parseLevn(opt.parsedType[0].of, value)]; - } else { - val = parseLevn(opt.parsedType, value); - } - } catch (e$) { - e = e$; - throw new Error("Invalid value for option '" + name + "' - expected type " + opt.type + ", received value: " + value + "."); - } - if (opt['enum'] && !any(function(it){ - return deepIs(it, val); - }, opt.parsedPossibilities)) { - throw new Error("Option " + name + ": '" + val + "' not one of " + naturalJoin(opt['enum']) + "."); - } - } - currentType = toString$.call(obj[name]).slice(8, -1); - if (obj[name] != null) { - if (opt.concatRepeatedArrays != null && opt.concatRepeatedArrays[0] && currentType === 'Array') { - obj[name] = obj[name].concat(val); - } else if (opt.mergeRepeatedObjects && currentType === 'Object') { - import$(obj[name], val); - } else { - obj[name] = val; - } - } else { - obj[name] = val; - } - if (opt.restPositional) { - restPositional = true; - } - if (opt.overrideRequired) { - overrideRequired = true; - } - }; - setDefaults = function(){ - var name, ref$, value; - for (name in ref$ = defaults) { - value = ref$[name]; - if (obj[name] == null) { - obj[name] = value; - } - } - }; - checkRequired = function(){ - var i$, ref$, len$, name; - if (overrideRequired) { - return; - } - for (i$ = 0, len$ = (ref$ = required).length; i$ < len$; ++i$) { - name = ref$[i$]; - if (!obj[name]) { - throw new Error("Option " + nameToRaw(name) + " is required."); - } - } - }; - mutuallyExclusiveError = function(first, second){ - throw new Error("The options " + nameToRaw(first) + " and " + nameToRaw(second) + " are mutually exclusive - you cannot use them at the same time."); - }; - checkMutuallyExclusive = function(){ - var rules, i$, len$, rule, present, j$, len1$, element, k$, len2$, opt; - rules = libOptions.mutuallyExclusive; - if (!rules) { - return; - } - for (i$ = 0, len$ = rules.length; i$ < len$; ++i$) { - rule = rules[i$]; - present = null; - for (j$ = 0, len1$ = rule.length; j$ < len1$; ++j$) { - element = rule[j$]; - if (toString$.call(element).slice(8, -1) === 'Array') { - for (k$ = 0, len2$ = element.length; k$ < len2$; ++k$) { - opt = element[k$]; - if (opt in obj) { - if (present != null) { - mutuallyExclusiveError(present, opt); - } else { - present = opt; - break; - } - } - } - } else { - if (element in obj) { - if (present != null) { - mutuallyExclusiveError(present, element); - } else { - present = element; - } - } - } - } - } - }; - checkDependency = function(option){ - var dependsOn, type, targetOptionNames, i$, len$, targetOptionName, targetOption; - dependsOn = option.dependsOn; - if (!dependsOn || option.dependenciesMet) { - return true; - } - type = dependsOn[0], targetOptionNames = slice$.call(dependsOn, 1); - for (i$ = 0, len$ = targetOptionNames.length; i$ < len$; ++i$) { - targetOptionName = targetOptionNames[i$]; - targetOption = obj[targetOptionName]; - if (targetOption && checkDependency(targetOption)) { - if (type === 'or') { - return true; - } - } else if (type === 'and') { - throw new Error("The option '" + option.option + "' did not have its dependencies met."); - } - } - if (type === 'and') { - return true; - } else { - throw new Error("The option '" + option.option + "' did not meet any of its dependencies."); - } - }; - checkDependencies = function(){ - var name; - for (name in obj) { - checkDependency(opts[name]); - } - }; - checkProp = function(){ - if (prop) { - throw new Error("Value for '" + prop + "' of type '" + getOption(prop).type + "' required."); - } - }; - switch (toString$.call(input).slice(8, -1)) { - case 'String': - args = parseString(input.slice(slice != null ? slice : 0)); - break; - case 'Array': - args = input.slice(slice != null ? slice : 2); - break; - case 'Object': - obj = {}; - for (key in input) { - value = input[key]; - if (key !== '_') { - option = getOption(dasherize(key)); - if (parsedTypeCheck(option.parsedType, value)) { - obj[option.option] = value; - } else { - throw new Error("Option '" + option.option + "': Invalid type for '" + value + "' - expected type '" + option.type + "'."); - } - } - } - checkMutuallyExclusive(); - checkDependencies(); - setDefaults(); - checkRequired(); - return ref$ = camelizeKeys(obj), ref$._ = input._ || [], ref$; - default: - throw new Error("Invalid argument to 'parse': " + input + "."); - } - for (i$ = 0, len$ = args.length; i$ < len$; ++i$) { - arg = args[i$]; - if (arg === '--') { - restPositional = true; - } else if (restPositional) { - positional.push(arg); - } else { - if (that = arg.match(/^(--?)([a-zA-Z][-a-zA-Z0-9]*)(=)?(.*)?$/)) { - result = that; - checkProp(); - short = result[1].length === 1; - argName = result[2]; - usingAssign = result[3] != null; - val = result[4]; - if (usingAssign && val == null) { - throw new Error("No value for '" + argName + "' specified."); - } - if (short) { - flags = chars(argName); - len = flags.length; - for (j$ = 0, len1$ = flags.length; j$ < len1$; ++j$) { - i = j$; - flag = flags[j$]; - opt = getOption(flag); - name = opt.option; - if (restPositional) { - positional.push(flag); - } else if (i === len - 1) { - if (usingAssign) { - valPrime = opt.boolean ? parseLevn([{ - type: 'Boolean' - }], val) : val; - setValue(name, valPrime); - } else if (opt.boolean) { - setValue(name, true); - } else { - prop = name; - } - } else if (opt.boolean) { - setValue(name, true); - } else { - throw new Error("Can't set argument '" + flag + "' when not last flag in a group of short flags."); - } - } - } else { - negated = false; - if (that = argName.match(/^no-(.+)$/)) { - negated = true; - noedName = that[1]; - opt = getOption(noedName); - } else { - opt = getOption(argName); - } - name = opt.option; - if (opt.boolean) { - valPrime = usingAssign ? parseLevn([{ - type: 'Boolean' - }], val) : true; - if (negated) { - setValue(name, !valPrime); - } else { - setValue(name, valPrime); - } - } else { - if (negated) { - throw new Error("Only use 'no-' prefix for Boolean options, not with '" + noedName + "'."); - } - if (usingAssign) { - setValue(name, val); - } else { - prop = name; - } - } - } - } else if (that = arg.match(/^-([0-9]+(?:\.[0-9]+)?)$/)) { - opt = opts.NUM; - if (!opt) { - throw new Error('No -NUM option defined.'); - } - setValue(opt.option, that[1]); - } else { - if (prop) { - setValue(prop, arg); - prop = null; - } else { - positional.push(arg); - if (!libOptions.positionalAnywhere) { - restPositional = true; - } - } - } - } - } - checkProp(); - checkMutuallyExclusive(); - checkDependencies(); - setDefaults(); - checkRequired(); - return ref$ = camelizeKeys(obj), ref$._ = positional, ref$; - }; - return { - parse: parse, - parseArgv: function(it){ - return parse(it, { - slice: 2 - }); - }, - generateHelp: generateHelp(libOptions), - generateHelpForOption: generateHelpForOption(getOption, libOptions) - }; - }; - main.VERSION = VERSION; - module.exports = main; - function import$(obj, src){ - var own = {}.hasOwnProperty; - for (var key in src) if (own.call(src, key)) obj[key] = src[key]; - return obj; - } -}).call(this); diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/lib/util.js b/fundamentals/bug-challenge-es6/node_modules/optionator/lib/util.js deleted file mode 100644 index d5c972def..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/lib/util.js +++ /dev/null @@ -1,54 +0,0 @@ -// Generated by LiveScript 1.5.0 -(function(){ - var prelude, map, sortBy, fl, closestString, nameToRaw, dasherize, naturalJoin; - prelude = require('prelude-ls'), map = prelude.map, sortBy = prelude.sortBy; - fl = require('fast-levenshtein'); - closestString = function(possibilities, input){ - var distances, ref$, string, distance, this$ = this; - if (!possibilities.length) { - return; - } - distances = map(function(it){ - var ref$, longer, shorter; - ref$ = input.length > it.length - ? [input, it] - : [it, input], longer = ref$[0], shorter = ref$[1]; - return { - string: it, - distance: fl.get(longer, shorter) - }; - })( - possibilities); - ref$ = sortBy(function(it){ - return it.distance; - }, distances)[0], string = ref$.string, distance = ref$.distance; - return string; - }; - nameToRaw = function(name){ - if (name.length === 1 || name === 'NUM') { - return "-" + name; - } else { - return "--" + name; - } - }; - dasherize = function(string){ - if (/^[A-Z]/.test(string)) { - return string; - } else { - return prelude.dasherize(string); - } - }; - naturalJoin = function(array){ - if (array.length < 3) { - return array.join(' or '); - } else { - return array.slice(0, -1).join(', ') + ", or " + array[array.length - 1]; - } - }; - module.exports = { - closestString: closestString, - nameToRaw: nameToRaw, - dasherize: dasherize, - naturalJoin: naturalJoin - }; -}).call(this); diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/LICENSE b/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/LICENSE deleted file mode 100644 index ee27ba4b4..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/README.markdown b/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/README.markdown deleted file mode 100644 index 346374e0d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/README.markdown +++ /dev/null @@ -1,70 +0,0 @@ -wordwrap -======== - -Wrap your words. - -example -======= - -made out of meat ----------------- - -meat.js - - var wrap = require('wordwrap')(15); - console.log(wrap('You and your whole family are made out of meat.')); - -output: - - You and your - whole family - are made out - of meat. - -centered --------- - -center.js - - var wrap = require('wordwrap')(20, 60); - console.log(wrap( - 'At long last the struggle and tumult was over.' - + ' The machines had finally cast off their oppressors' - + ' and were finally free to roam the cosmos.' - + '\n' - + 'Free of purpose, free of obligation.' - + ' Just drifting through emptiness.' - + ' The sun was just another point of light.' - )); - -output: - - At long last the struggle and tumult - was over. The machines had finally cast - off their oppressors and were finally - free to roam the cosmos. - Free of purpose, free of obligation. - Just drifting through emptiness. The - sun was just another point of light. - -methods -======= - -var wrap = require('wordwrap'); - -wrap(stop), wrap(start, stop, params={mode:"soft"}) ---------------------------------------------------- - -Returns a function that takes a string and returns a new string. - -Pad out lines with spaces out to column `start` and then wrap until column -`stop`. If a word is longer than `stop - start` characters it will overflow. - -In "soft" mode, split chunks by `/(\S+\s+/` and don't break up chunks which are -longer than `stop - start`, in "hard" mode, split chunks with `/\b/` and break -up chunks longer than `stop - start`. - -wrap.hard(start, stop) ----------------------- - -Like `wrap()` but with `params.mode = "hard"`. diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/example/center.js b/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/example/center.js deleted file mode 100644 index a3fbaae98..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/example/center.js +++ /dev/null @@ -1,10 +0,0 @@ -var wrap = require('wordwrap')(20, 60); -console.log(wrap( - 'At long last the struggle and tumult was over.' - + ' The machines had finally cast off their oppressors' - + ' and were finally free to roam the cosmos.' - + '\n' - + 'Free of purpose, free of obligation.' - + ' Just drifting through emptiness.' - + ' The sun was just another point of light.' -)); diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/example/meat.js b/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/example/meat.js deleted file mode 100644 index a4665e105..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/example/meat.js +++ /dev/null @@ -1,3 +0,0 @@ -var wrap = require('wordwrap')(15); - -console.log(wrap('You and your whole family are made out of meat.')); diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/index.js b/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/index.js deleted file mode 100644 index c9bc94521..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/index.js +++ /dev/null @@ -1,76 +0,0 @@ -var wordwrap = module.exports = function (start, stop, params) { - if (typeof start === 'object') { - params = start; - start = params.start; - stop = params.stop; - } - - if (typeof stop === 'object') { - params = stop; - start = start || params.start; - stop = undefined; - } - - if (!stop) { - stop = start; - start = 0; - } - - if (!params) params = {}; - var mode = params.mode || 'soft'; - var re = mode === 'hard' ? /\b/ : /(\S+\s+)/; - - return function (text) { - var chunks = text.toString() - .split(re) - .reduce(function (acc, x) { - if (mode === 'hard') { - for (var i = 0; i < x.length; i += stop - start) { - acc.push(x.slice(i, i + stop - start)); - } - } - else acc.push(x) - return acc; - }, []) - ; - - return chunks.reduce(function (lines, rawChunk) { - if (rawChunk === '') return lines; - - var chunk = rawChunk.replace(/\t/g, ' '); - - var i = lines.length - 1; - if (lines[i].length + chunk.length > stop) { - lines[i] = lines[i].replace(/\s+$/, ''); - - chunk.split(/\n/).forEach(function (c) { - lines.push( - new Array(start + 1).join(' ') - + c.replace(/^\s+/, '') - ); - }); - } - else if (chunk.match(/\n/)) { - var xs = chunk.split(/\n/); - lines[i] += xs.shift(); - xs.forEach(function (c) { - lines.push( - new Array(start + 1).join(' ') - + c.replace(/^\s+/, '') - ); - }); - } - else { - lines[i] += chunk; - } - - return lines; - }, [ new Array(start + 1).join(' ') ]).join('\n'); - }; -}; - -wordwrap.soft = wordwrap; - -wordwrap.hard = function (start, stop) { - return wordwrap(start, stop, { mode : 'hard' }); -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/package.json b/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/package.json deleted file mode 100644 index b70957703..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/package.json +++ /dev/null @@ -1,86 +0,0 @@ -{ - "_args": [ - [ - "wordwrap@~1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/optionator" - ] - ], - "_from": "wordwrap@>=1.0.0 <1.1.0", - "_id": "wordwrap@1.0.0", - "_inCache": true, - "_installable": true, - "_location": "/optionator/wordwrap", - "_nodeVersion": "2.0.0", - "_npmUser": { - "email": "substack@gmail.com", - "name": "substack" - }, - "_npmVersion": "2.9.0", - "_phantomChildren": {}, - "_requested": { - "name": "wordwrap", - "raw": "wordwrap@~1.0.0", - "rawSpec": "~1.0.0", - "scope": null, - "spec": ">=1.0.0 <1.1.0", - "type": "range" - }, - "_requiredBy": [ - "/optionator" - ], - "_resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "_shasum": "27584810891456a4171c8d0226441ade90cbcaeb", - "_shrinkwrap": null, - "_spec": "wordwrap@~1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/optionator", - "author": { - "email": "mail@substack.net", - "name": "James Halliday", - "url": "http://substack.net" - }, - "bugs": { - "url": "https://github.com/substack/node-wordwrap/issues" - }, - "dependencies": {}, - "description": "Wrap those words. Show them at what columns to start and stop.", - "devDependencies": { - "tape": "^4.0.0" - }, - "directories": { - "example": "example", - "lib": ".", - "test": "test" - }, - "dist": { - "shasum": "27584810891456a4171c8d0226441ade90cbcaeb", - "tarball": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" - }, - "gitHead": "9f02667e901f2f10d87c33f7093fcf94788ab2f8", - "homepage": "https://github.com/substack/node-wordwrap#readme", - "keywords": [ - "word", - "wrap", - "rule", - "format", - "column" - ], - "license": "MIT", - "main": "./index.js", - "maintainers": [ - { - "email": "mail@substack.net", - "name": "substack" - } - ], - "name": "wordwrap", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/substack/node-wordwrap.git" - }, - "scripts": { - "test": "expresso" - }, - "version": "1.0.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/test/break.js b/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/test/break.js deleted file mode 100644 index 7d0e8b54c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/test/break.js +++ /dev/null @@ -1,32 +0,0 @@ -var test = require('tape'); -var wordwrap = require('../'); - -test('hard', function (t) { - var s = 'Assert from {"type":"equal","ok":false,"found":1,"wanted":2,' - + '"stack":[],"id":"b7ddcd4c409de8799542a74d1a04689b",' - + '"browser":"chrome/6.0"}' - ; - var s_ = wordwrap.hard(80)(s); - - var lines = s_.split('\n'); - t.equal(lines.length, 2); - t.ok(lines[0].length < 80); - t.ok(lines[1].length < 80); - - t.equal(s, s_.replace(/\n/g, '')); - t.end(); -}); - -test('break', function (t) { - var s = new Array(55+1).join('a'); - var s_ = wordwrap.hard(20)(s); - - var lines = s_.split('\n'); - t.equal(lines.length, 3); - t.ok(lines[0].length === 20); - t.ok(lines[1].length === 20); - t.ok(lines[2].length === 15); - - t.equal(s, s_.replace(/\n/g, '')); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/test/idleness.txt b/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/test/idleness.txt deleted file mode 100644 index aa3f4907f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/test/idleness.txt +++ /dev/null @@ -1,63 +0,0 @@ -In Praise of Idleness - -By Bertrand Russell - -[1932] - -Like most of my generation, I was brought up on the saying: 'Satan finds some mischief for idle hands to do.' Being a highly virtuous child, I believed all that I was told, and acquired a conscience which has kept me working hard down to the present moment. But although my conscience has controlled my actions, my opinions have undergone a revolution. I think that there is far too much work done in the world, that immense harm is caused by the belief that work is virtuous, and that what needs to be preached in modern industrial countries is quite different from what always has been preached. Everyone knows the story of the traveler in Naples who saw twelve beggars lying in the sun (it was before the days of Mussolini), and offered a lira to the laziest of them. Eleven of them jumped up to claim it, so he gave it to the twelfth. this traveler was on the right lines. But in countries which do not enjoy Mediterranean sunshine idleness is more difficult, and a great public propaganda will be required to inaugurate it. I hope that, after reading the following pages, the leaders of the YMCA will start a campaign to induce good young men to do nothing. If so, I shall not have lived in vain. - -Before advancing my own arguments for laziness, I must dispose of one which I cannot accept. Whenever a person who already has enough to live on proposes to engage in some everyday kind of job, such as school-teaching or typing, he or she is told that such conduct takes the bread out of other people's mouths, and is therefore wicked. If this argument were valid, it would only be necessary for us all to be idle in order that we should all have our mouths full of bread. What people who say such things forget is that what a man earns he usually spends, and in spending he gives employment. As long as a man spends his income, he puts just as much bread into people's mouths in spending as he takes out of other people's mouths in earning. The real villain, from this point of view, is the man who saves. If he merely puts his savings in a stocking, like the proverbial French peasant, it is obvious that they do not give employment. If he invests his savings, the matter is less obvious, and different cases arise. - -One of the commonest things to do with savings is to lend them to some Government. In view of the fact that the bulk of the public expenditure of most civilized Governments consists in payment for past wars or preparation for future wars, the man who lends his money to a Government is in the same position as the bad men in Shakespeare who hire murderers. The net result of the man's economical habits is to increase the armed forces of the State to which he lends his savings. Obviously it would be better if he spent the money, even if he spent it in drink or gambling. - -But, I shall be told, the case is quite different when savings are invested in industrial enterprises. When such enterprises succeed, and produce something useful, this may be conceded. In these days, however, no one will deny that most enterprises fail. That means that a large amount of human labor, which might have been devoted to producing something that could be enjoyed, was expended on producing machines which, when produced, lay idle and did no good to anyone. The man who invests his savings in a concern that goes bankrupt is therefore injuring others as well as himself. If he spent his money, say, in giving parties for his friends, they (we may hope) would get pleasure, and so would all those upon whom he spent money, such as the butcher, the baker, and the bootlegger. But if he spends it (let us say) upon laying down rails for surface card in some place where surface cars turn out not to be wanted, he has diverted a mass of labor into channels where it gives pleasure to no one. Nevertheless, when he becomes poor through failure of his investment he will be regarded as a victim of undeserved misfortune, whereas the gay spendthrift, who has spent his money philanthropically, will be despised as a fool and a frivolous person. - -All this is only preliminary. I want to say, in all seriousness, that a great deal of harm is being done in the modern world by belief in the virtuousness of work, and that the road to happiness and prosperity lies in an organized diminution of work. - -First of all: what is work? Work is of two kinds: first, altering the position of matter at or near the earth's surface relatively to other such matter; second, telling other people to do so. The first kind is unpleasant and ill paid; the second is pleasant and highly paid. The second kind is capable of indefinite extension: there are not only those who give orders, but those who give advice as to what orders should be given. Usually two opposite kinds of advice are given simultaneously by two organized bodies of men; this is called politics. The skill required for this kind of work is not knowledge of the subjects as to which advice is given, but knowledge of the art of persuasive speaking and writing, i.e. of advertising. - -Throughout Europe, though not in America, there is a third class of men, more respected than either of the classes of workers. There are men who, through ownership of land, are able to make others pay for the privilege of being allowed to exist and to work. These landowners are idle, and I might therefore be expected to praise them. Unfortunately, their idleness is only rendered possible by the industry of others; indeed their desire for comfortable idleness is historically the source of the whole gospel of work. The last thing they have ever wished is that others should follow their example. - -From the beginning of civilization until the Industrial Revolution, a man could, as a rule, produce by hard work little more than was required for the subsistence of himself and his family, although his wife worked at least as hard as he did, and his children added their labor as soon as they were old enough to do so. The small surplus above bare necessaries was not left to those who produced it, but was appropriated by warriors and priests. In times of famine there was no surplus; the warriors and priests, however, still secured as much as at other times, with the result that many of the workers died of hunger. This system persisted in Russia until 1917 [1], and still persists in the East; in England, in spite of the Industrial Revolution, it remained in full force throughout the Napoleonic wars, and until a hundred years ago, when the new class of manufacturers acquired power. In America, the system came to an end with the Revolution, except in the South, where it persisted until the Civil War. A system which lasted so long and ended so recently has naturally left a profound impress upon men's thoughts and opinions. Much that we take for granted about the desirability of work is derived from this system, and, being pre-industrial, is not adapted to the modern world. Modern technique has made it possible for leisure, within limits, to be not the prerogative of small privileged classes, but a right evenly distributed throughout the community. The morality of work is the morality of slaves, and the modern world has no need of slavery. - -It is obvious that, in primitive communities, peasants, left to themselves, would not have parted with the slender surplus upon which the warriors and priests subsisted, but would have either produced less or consumed more. At first, sheer force compelled them to produce and part with the surplus. Gradually, however, it was found possible to induce many of them to accept an ethic according to which it was their duty to work hard, although part of their work went to support others in idleness. By this means the amount of compulsion required was lessened, and the expenses of government were diminished. To this day, 99 per cent of British wage-earners would be genuinely shocked if it were proposed that the King should not have a larger income than a working man. The conception of duty, speaking historically, has been a means used by the holders of power to induce others to live for the interests of their masters rather than for their own. Of course the holders of power conceal this fact from themselves by managing to believe that their interests are identical with the larger interests of humanity. Sometimes this is true; Athenian slave-owners, for instance, employed part of their leisure in making a permanent contribution to civilization which would have been impossible under a just economic system. Leisure is essential to civilization, and in former times leisure for the few was only rendered possible by the labors of the many. But their labors were valuable, not because work is good, but because leisure is good. And with modern technique it would be possible to distribute leisure justly without injury to civilization. - -Modern technique has made it possible to diminish enormously the amount of labor required to secure the necessaries of life for everyone. This was made obvious during the war. At that time all the men in the armed forces, and all the men and women engaged in the production of munitions, all the men and women engaged in spying, war propaganda, or Government offices connected with the war, were withdrawn from productive occupations. In spite of this, the general level of well-being among unskilled wage-earners on the side of the Allies was higher than before or since. The significance of this fact was concealed by finance: borrowing made it appear as if the future was nourishing the present. But that, of course, would have been impossible; a man cannot eat a loaf of bread that does not yet exist. The war showed conclusively that, by the scientific organization of production, it is possible to keep modern populations in fair comfort on a small part of the working capacity of the modern world. If, at the end of the war, the scientific organization, which had been created in order to liberate men for fighting and munition work, had been preserved, and the hours of the week had been cut down to four, all would have been well. Instead of that the old chaos was restored, those whose work was demanded were made to work long hours, and the rest were left to starve as unemployed. Why? Because work is a duty, and a man should not receive wages in proportion to what he has produced, but in proportion to his virtue as exemplified by his industry. - -This is the morality of the Slave State, applied in circumstances totally unlike those in which it arose. No wonder the result has been disastrous. Let us take an illustration. Suppose that, at a given moment, a certain number of people are engaged in the manufacture of pins. They make as many pins as the world needs, working (say) eight hours a day. Someone makes an invention by which the same number of men can make twice as many pins: pins are already so cheap that hardly any more will be bought at a lower price. In a sensible world, everybody concerned in the manufacturing of pins would take to working four hours instead of eight, and everything else would go on as before. But in the actual world this would be thought demoralizing. The men still work eight hours, there are too many pins, some employers go bankrupt, and half the men previously concerned in making pins are thrown out of work. There is, in the end, just as much leisure as on the other plan, but half the men are totally idle while half are still overworked. In this way, it is insured that the unavoidable leisure shall cause misery all round instead of being a universal source of happiness. Can anything more insane be imagined? - -The idea that the poor should have leisure has always been shocking to the rich. In England, in the early nineteenth century, fifteen hours was the ordinary day's work for a man; children sometimes did as much, and very commonly did twelve hours a day. When meddlesome busybodies suggested that perhaps these hours were rather long, they were told that work kept adults from drink and children from mischief. When I was a child, shortly after urban working men had acquired the vote, certain public holidays were established by law, to the great indignation of the upper classes. I remember hearing an old Duchess say: 'What do the poor want with holidays? They ought to work.' People nowadays are less frank, but the sentiment persists, and is the source of much of our economic confusion. - -Let us, for a moment, consider the ethics of work frankly, without superstition. Every human being, of necessity, consumes, in the course of his life, a certain amount of the produce of human labor. Assuming, as we may, that labor is on the whole disagreeable, it is unjust that a man should consume more than he produces. Of course he may provide services rather than commodities, like a medical man, for example; but he should provide something in return for his board and lodging. to this extent, the duty of work must be admitted, but to this extent only. - -I shall not dwell upon the fact that, in all modern societies outside the USSR, many people escape even this minimum amount of work, namely all those who inherit money and all those who marry money. I do not think the fact that these people are allowed to be idle is nearly so harmful as the fact that wage-earners are expected to overwork or starve. - -If the ordinary wage-earner worked four hours a day, there would be enough for everybody and no unemployment -- assuming a certain very moderate amount of sensible organization. This idea shocks the well-to-do, because they are convinced that the poor would not know how to use so much leisure. In America men often work long hours even when they are well off; such men, naturally, are indignant at the idea of leisure for wage-earners, except as the grim punishment of unemployment; in fact, they dislike leisure even for their sons. Oddly enough, while they wish their sons to work so hard as to have no time to be civilized, they do not mind their wives and daughters having no work at all. the snobbish admiration of uselessness, which, in an aristocratic society, extends to both sexes, is, under a plutocracy, confined to women; this, however, does not make it any more in agreement with common sense. - -The wise use of leisure, it must be conceded, is a product of civilization and education. A man who has worked long hours all his life will become bored if he becomes suddenly idle. But without a considerable amount of leisure a man is cut off from many of the best things. There is no longer any reason why the bulk of the population should suffer this deprivation; only a foolish asceticism, usually vicarious, makes us continue to insist on work in excessive quantities now that the need no longer exists. - -In the new creed which controls the government of Russia, while there is much that is very different from the traditional teaching of the West, there are some things that are quite unchanged. The attitude of the governing classes, and especially of those who conduct educational propaganda, on the subject of the dignity of labor, is almost exactly that which the governing classes of the world have always preached to what were called the 'honest poor'. Industry, sobriety, willingness to work long hours for distant advantages, even submissiveness to authority, all these reappear; moreover authority still represents the will of the Ruler of the Universe, Who, however, is now called by a new name, Dialectical Materialism. - -The victory of the proletariat in Russia has some points in common with the victory of the feminists in some other countries. For ages, men had conceded the superior saintliness of women, and had consoled women for their inferiority by maintaining that saintliness is more desirable than power. At last the feminists decided that they would have both, since the pioneers among them believed all that the men had told them about the desirability of virtue, but not what they had told them about the worthlessness of political power. A similar thing has happened in Russia as regards manual work. For ages, the rich and their sycophants have written in praise of 'honest toil', have praised the simple life, have professed a religion which teaches that the poor are much more likely to go to heaven than the rich, and in general have tried to make manual workers believe that there is some special nobility about altering the position of matter in space, just as men tried to make women believe that they derived some special nobility from their sexual enslavement. In Russia, all this teaching about the excellence of manual work has been taken seriously, with the result that the manual worker is more honored than anyone else. What are, in essence, revivalist appeals are made, but not for the old purposes: they are made to secure shock workers for special tasks. Manual work is the ideal which is held before the young, and is the basis of all ethical teaching. - -For the present, possibly, this is all to the good. A large country, full of natural resources, awaits development, and has has to be developed with very little use of credit. In these circumstances, hard work is necessary, and is likely to bring a great reward. But what will happen when the point has been reached where everybody could be comfortable without working long hours? - -In the West, we have various ways of dealing with this problem. We have no attempt at economic justice, so that a large proportion of the total produce goes to a small minority of the population, many of whom do no work at all. Owing to the absence of any central control over production, we produce hosts of things that are not wanted. We keep a large percentage of the working population idle, because we can dispense with their labor by making the others overwork. When all these methods prove inadequate, we have a war: we cause a number of people to manufacture high explosives, and a number of others to explode them, as if we were children who had just discovered fireworks. By a combination of all these devices we manage, though with difficulty, to keep alive the notion that a great deal of severe manual work must be the lot of the average man. - -In Russia, owing to more economic justice and central control over production, the problem will have to be differently solved. the rational solution would be, as soon as the necessaries and elementary comforts can be provided for all, to reduce the hours of labor gradually, allowing a popular vote to decide, at each stage, whether more leisure or more goods were to be preferred. But, having taught the supreme virtue of hard work, it is difficult to see how the authorities can aim at a paradise in which there will be much leisure and little work. It seems more likely that they will find continually fresh schemes, by which present leisure is to be sacrificed to future productivity. I read recently of an ingenious plan put forward by Russian engineers, for making the White Sea and the northern coasts of Siberia warm, by putting a dam across the Kara Sea. An admirable project, but liable to postpone proletarian comfort for a generation, while the nobility of toil is being displayed amid the ice-fields and snowstorms of the Arctic Ocean. This sort of thing, if it happens, will be the result of regarding the virtue of hard work as an end in itself, rather than as a means to a state of affairs in which it is no longer needed. - -The fact is that moving matter about, while a certain amount of it is necessary to our existence, is emphatically not one of the ends of human life. If it were, we should have to consider every navvy superior to Shakespeare. We have been misled in this matter by two causes. One is the necessity of keeping the poor contented, which has led the rich, for thousands of years, to preach the dignity of labor, while taking care themselves to remain undignified in this respect. The other is the new pleasure in mechanism, which makes us delight in the astonishingly clever changes that we can produce on the earth's surface. Neither of these motives makes any great appeal to the actual worker. If you ask him what he thinks the best part of his life, he is not likely to say: 'I enjoy manual work because it makes me feel that I am fulfilling man's noblest task, and because I like to think how much man can transform his planet. It is true that my body demands periods of rest, which I have to fill in as best I may, but I am never so happy as when the morning comes and I can return to the toil from which my contentment springs.' I have never heard working men say this sort of thing. They consider work, as it should be considered, a necessary means to a livelihood, and it is from their leisure that they derive whatever happiness they may enjoy. - -It will be said that, while a little leisure is pleasant, men would not know how to fill their days if they had only four hours of work out of the twenty-four. In so far as this is true in the modern world, it is a condemnation of our civilization; it would not have been true at any earlier period. There was formerly a capacity for light-heartedness and play which has been to some extent inhibited by the cult of efficiency. The modern man thinks that everything ought to be done for the sake of something else, and never for its own sake. Serious-minded persons, for example, are continually condemning the habit of going to the cinema, and telling us that it leads the young into crime. But all the work that goes to producing a cinema is respectable, because it is work, and because it brings a money profit. The notion that the desirable activities are those that bring a profit has made everything topsy-turvy. The butcher who provides you with meat and the baker who provides you with bread are praiseworthy, because they are making money; but when you enjoy the food they have provided, you are merely frivolous, unless you eat only to get strength for your work. Broadly speaking, it is held that getting money is good and spending money is bad. Seeing that they are two sides of one transaction, this is absurd; one might as well maintain that keys are good, but keyholes are bad. Whatever merit there may be in the production of goods must be entirely derivative from the advantage to be obtained by consuming them. The individual, in our society, works for profit; but the social purpose of his work lies in the consumption of what he produces. It is this divorce between the individual and the social purpose of production that makes it so difficult for men to think clearly in a world in which profit-making is the incentive to industry. We think too much of production, and too little of consumption. One result is that we attach too little importance to enjoyment and simple happiness, and that we do not judge production by the pleasure that it gives to the consumer. - -When I suggest that working hours should be reduced to four, I am not meaning to imply that all the remaining time should necessarily be spent in pure frivolity. I mean that four hours' work a day should entitle a man to the necessities and elementary comforts of life, and that the rest of his time should be his to use as he might see fit. It is an essential part of any such social system that education should be carried further than it usually is at present, and should aim, in part, at providing tastes which would enable a man to use leisure intelligently. I am not thinking mainly of the sort of things that would be considered 'highbrow'. Peasant dances have died out except in remote rural areas, but the impulses which caused them to be cultivated must still exist in human nature. The pleasures of urban populations have become mainly passive: seeing cinemas, watching football matches, listening to the radio, and so on. This results from the fact that their active energies are fully taken up with work; if they had more leisure, they would again enjoy pleasures in which they took an active part. - -In the past, there was a small leisure class and a larger working class. The leisure class enjoyed advantages for which there was no basis in social justice; this necessarily made it oppressive, limited its sympathies, and caused it to invent theories by which to justify its privileges. These facts greatly diminished its excellence, but in spite of this drawback it contributed nearly the whole of what we call civilization. It cultivated the arts and discovered the sciences; it wrote the books, invented the philosophies, and refined social relations. Even the liberation of the oppressed has usually been inaugurated from above. Without the leisure class, mankind would never have emerged from barbarism. - -The method of a leisure class without duties was, however, extraordinarily wasteful. None of the members of the class had to be taught to be industrious, and the class as a whole was not exceptionally intelligent. The class might produce one Darwin, but against him had to be set tens of thousands of country gentlemen who never thought of anything more intelligent than fox-hunting and punishing poachers. At present, the universities are supposed to provide, in a more systematic way, what the leisure class provided accidentally and as a by-product. This is a great improvement, but it has certain drawbacks. University life is so different from life in the world at large that men who live in academic milieu tend to be unaware of the preoccupations and problems of ordinary men and women; moreover their ways of expressing themselves are usually such as to rob their opinions of the influence that they ought to have upon the general public. Another disadvantage is that in universities studies are organized, and the man who thinks of some original line of research is likely to be discouraged. Academic institutions, therefore, useful as they are, are not adequate guardians of the interests of civilization in a world where everyone outside their walls is too busy for unutilitarian pursuits. - -In a world where no one is compelled to work more than four hours a day, every person possessed of scientific curiosity will be able to indulge it, and every painter will be able to paint without starving, however excellent his pictures may be. Young writers will not be obliged to draw attention to themselves by sensational pot-boilers, with a view to acquiring the economic independence needed for monumental works, for which, when the time at last comes, they will have lost the taste and capacity. Men who, in their professional work, have become interested in some phase of economics or government, will be able to develop their ideas without the academic detachment that makes the work of university economists often seem lacking in reality. Medical men will have the time to learn about the progress of medicine, teachers will not be exasperatedly struggling to teach by routine methods things which they learnt in their youth, which may, in the interval, have been proved to be untrue. - -Above all, there will be happiness and joy of life, instead of frayed nerves, weariness, and dyspepsia. The work exacted will be enough to make leisure delightful, but not enough to produce exhaustion. Since men will not be tired in their spare time, they will not demand only such amusements as are passive and vapid. At least one per cent will probably devote the time not spent in professional work to pursuits of some public importance, and, since they will not depend upon these pursuits for their livelihood, their originality will be unhampered, and there will be no need to conform to the standards set by elderly pundits. But it is not only in these exceptional cases that the advantages of leisure will appear. Ordinary men and women, having the opportunity of a happy life, will become more kindly and less persecuting and less inclined to view others with suspicion. The taste for war will die out, partly for this reason, and partly because it will involve long and severe work for all. Good nature is, of all moral qualities, the one that the world needs most, and good nature is the result of ease and security, not of a life of arduous struggle. Modern methods of production have given us the possibility of ease and security for all; we have chosen, instead, to have overwork for some and starvation for others. Hitherto we have continued to be as energetic as we were before there were machines; in this we have been foolish, but there is no reason to go on being foolish forever. - -[1] Since then, members of the Communist Party have succeeded to this privilege of the warriors and priests. diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/test/wrap.js b/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/test/wrap.js deleted file mode 100644 index 01ea47185..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/node_modules/wordwrap/test/wrap.js +++ /dev/null @@ -1,33 +0,0 @@ -var test = require('tape'); -var wordwrap = require('../'); - -var fs = require('fs'); -var idleness = fs.readFileSync(__dirname + '/idleness.txt', 'utf8'); - -test('stop80', function (t) { - var lines = wordwrap(80)(idleness).split(/\n/); - var words = idleness.split(/\s+/); - - lines.forEach(function (line) { - t.ok(line.length <= 80, 'line > 80 columns'); - var chunks = line.match(/\S/) ? line.split(/\s+/) : []; - t.deepEqual(chunks, words.splice(0, chunks.length)); - }); - t.end(); -}); - -test('start20stop60', function (t) { - var lines = wordwrap(20, 100)(idleness).split(/\n/); - var words = idleness.split(/\s+/); - - lines.forEach(function (line) { - t.ok(line.length <= 100, 'line > 100 columns'); - var chunks = line - .split(/\s+/) - .filter(function (x) { return x.match(/\S/) }) - ; - t.deepEqual(chunks, words.splice(0, chunks.length)); - t.deepEqual(line.slice(0, 20), new Array(20 + 1).join(' ')); - }); - t.end(); -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/optionator/package.json b/fundamentals/bug-challenge-es6/node_modules/optionator/package.json deleted file mode 100644 index f8cd48447..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/optionator/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "optionator@^0.8.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/escodegen" - ] - ], - "_from": "optionator@>=0.8.1 <0.9.0", - "_id": "optionator@0.8.2", - "_inCache": true, - "_installable": true, - "_location": "/optionator", - "_nodeVersion": "6.6.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/optionator-0.8.2.tgz_1474487142656_0.7901301246602088" - }, - "_npmUser": { - "email": "z@georgezahariev.com", - "name": "gkz" - }, - "_npmVersion": "3.9.0", - "_phantomChildren": {}, - "_requested": { - "name": "optionator", - "raw": "optionator@^0.8.1", - "rawSpec": "^0.8.1", - "scope": null, - "spec": ">=0.8.1 <0.9.0", - "type": "range" - }, - "_requiredBy": [ - "/escodegen" - ], - "_resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "_shasum": "364c5e409d3f4d6301d6c0b4c05bba50180aeb64", - "_shrinkwrap": null, - "_spec": "optionator@^0.8.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/escodegen", - "author": { - "email": "z@georgezahariev.com", - "name": "George Zahariev" - }, - "bugs": { - "url": "https://github.com/gkz/optionator/issues" - }, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - }, - "description": "option parsing and help generation", - "devDependencies": { - "istanbul": "~0.4.1", - "livescript": "~1.5.0", - "mocha": "~3.0.2" - }, - "directories": {}, - "dist": { - "shasum": "364c5e409d3f4d6301d6c0b4c05bba50180aeb64", - "tarball": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz" - }, - "engines": { - "node": ">= 0.8.0" - }, - "files": [ - "lib", - "README.md", - "LICENSE" - ], - "gitHead": "191de235d5afa47ebb655fc0efbc2b616263d81b", - "homepage": "https://github.com/gkz/optionator", - "keywords": [ - "options", - "flags", - "option parsing", - "cli" - ], - "license": "MIT", - "main": "./lib/", - "maintainers": [ - { - "email": "z@georgezahariev.com", - "name": "gkz" - } - ], - "name": "optionator", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/gkz/optionator.git" - }, - "scripts": { - "test": "make test" - }, - "version": "0.8.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/os-homedir/index.js b/fundamentals/bug-challenge-es6/node_modules/os-homedir/index.js deleted file mode 100644 index 33066166f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/os-homedir/index.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; -var os = require('os'); - -function homedir() { - var env = process.env; - var home = env.HOME; - var user = env.LOGNAME || env.USER || env.LNAME || env.USERNAME; - - if (process.platform === 'win32') { - return env.USERPROFILE || env.HOMEDRIVE + env.HOMEPATH || home || null; - } - - if (process.platform === 'darwin') { - return home || (user ? '/Users/' + user : null); - } - - if (process.platform === 'linux') { - return home || (process.getuid() === 0 ? '/root' : (user ? '/home/' + user : null)); - } - - return home || null; -} - -module.exports = typeof os.homedir === 'function' ? os.homedir : homedir; diff --git a/fundamentals/bug-challenge-es6/node_modules/os-homedir/license b/fundamentals/bug-challenge-es6/node_modules/os-homedir/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/os-homedir/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/os-homedir/package.json b/fundamentals/bug-challenge-es6/node_modules/os-homedir/package.json deleted file mode 100644 index 6bdf9d8fd..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/os-homedir/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "os-homedir@^1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/home-or-tmp" - ] - ], - "_from": "os-homedir@>=1.0.0 <2.0.0", - "_id": "os-homedir@1.0.2", - "_inCache": true, - "_installable": true, - "_location": "/os-homedir", - "_nodeVersion": "6.6.0", - "_npmOperationalInternal": { - "host": "packages-16-east.internal.npmjs.com", - "tmp": "tmp/os-homedir-1.0.2.tgz_1475211519628_0.7873868853785098" - }, - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "os-homedir", - "raw": "os-homedir@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/home-or-tmp" - ], - "_resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "_shasum": "ffbc4988336e0e833de0c168c7ef152121aa7fb3", - "_shrinkwrap": null, - "_spec": "os-homedir@^1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/home-or-tmp", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/os-homedir/issues" - }, - "dependencies": {}, - "description": "Node.js 4 `os.homedir()` ponyfill", - "devDependencies": { - "ava": "*", - "path-exists": "^2.0.0", - "xo": "^0.16.0" - }, - "directories": {}, - "dist": { - "shasum": "ffbc4988336e0e833de0c168c7ef152121aa7fb3", - "tarball": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "b1b0ae70a5965fef7005ff6509a5dd1a78c95e36", - "homepage": "https://github.com/sindresorhus/os-homedir#readme", - "keywords": [ - "builtin", - "core", - "ponyfill", - "polyfill", - "shim", - "os", - "homedir", - "home", - "dir", - "directory", - "folder", - "user", - "path" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "os-homedir", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/os-homedir.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/os-homedir/readme.md b/fundamentals/bug-challenge-es6/node_modules/os-homedir/readme.md deleted file mode 100644 index 856ae615b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/os-homedir/readme.md +++ /dev/null @@ -1,31 +0,0 @@ -# os-homedir [![Build Status](https://travis-ci.org/sindresorhus/os-homedir.svg?branch=master)](https://travis-ci.org/sindresorhus/os-homedir) - -> Node.js 4 [`os.homedir()`](https://nodejs.org/api/os.html#os_os_homedir) [ponyfill](https://ponyfill.com) - - -## Install - -``` -$ npm install --save os-homedir -``` - - -## Usage - -```js -const osHomedir = require('os-homedir'); - -console.log(osHomedir()); -//=> '/Users/sindresorhus' -``` - - -## Related - -- [user-home](https://github.com/sindresorhus/user-home) - Same as this module but caches the result -- [home-or-tmp](https://github.com/sindresorhus/home-or-tmp) - Get the user home directory with fallback to the system temp directory - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/os-locale/index.js b/fundamentals/bug-challenge-es6/node_modules/os-locale/index.js deleted file mode 100644 index 2c8a0065d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/os-locale/index.js +++ /dev/null @@ -1,127 +0,0 @@ -'use strict'; -var childProcess = require('child_process'); -var execFileSync = childProcess.execFileSync; -var lcid = require('lcid'); -var defaultOpts = {spawn: true}; -var cache; - -function fallback() { - cache = 'en_US'; - return cache; -} - -function getEnvLocale(env) { - env = env || process.env; - var ret = env.LC_ALL || env.LC_MESSAGES || env.LANG || env.LANGUAGE; - cache = getLocale(ret); - return ret; -} - -function parseLocale(x) { - var env = x.split('\n').reduce(function (env, def) { - def = def.split('='); - env[def[0]] = def[1]; - return env; - }, {}); - return getEnvLocale(env); -} - -function getLocale(str) { - return (str && str.replace(/[.:].*/, '')) || fallback(); -} - -module.exports = function (opts, cb) { - if (typeof opts === 'function') { - cb = opts; - opts = defaultOpts; - } else { - opts = opts || defaultOpts; - } - - if (cache || getEnvLocale() || opts.spawn === false) { - setImmediate(cb, null, cache); - return; - } - - var getAppleLocale = function () { - childProcess.execFile('defaults', ['read', '-g', 'AppleLocale'], function (err, stdout) { - if (err) { - fallback(); - return; - } - - cache = stdout.trim() || fallback(); - cb(null, cache); - }); - }; - - if (process.platform === 'win32') { - childProcess.execFile('wmic', ['os', 'get', 'locale'], function (err, stdout) { - if (err) { - fallback(); - return; - } - - var lcidCode = parseInt(stdout.replace('Locale', ''), 16); - cache = lcid.from(lcidCode) || fallback(); - cb(null, cache); - }); - } else { - childProcess.execFile('locale', function (err, stdout) { - if (err) { - fallback(); - return; - } - - var res = parseLocale(stdout); - - if (!res && process.platform === 'darwin') { - getAppleLocale(); - return; - } - - cache = getLocale(res); - cb(null, cache); - }); - } -}; - -module.exports.sync = function (opts) { - opts = opts || defaultOpts; - - if (cache || getEnvLocale() || !execFileSync || opts.spawn === false) { - return cache; - } - - if (process.platform === 'win32') { - var stdout; - - try { - stdout = execFileSync('wmic', ['os', 'get', 'locale'], {encoding: 'utf8'}); - } catch (err) { - return fallback(); - } - - var lcidCode = parseInt(stdout.replace('Locale', ''), 16); - cache = lcid.from(lcidCode) || fallback(); - return cache; - } - - var res; - - try { - res = parseLocale(execFileSync('locale', {encoding: 'utf8'})); - } catch (err) {} - - if (!res && process.platform === 'darwin') { - try { - cache = execFileSync('defaults', ['read', '-g', 'AppleLocale'], {encoding: 'utf8'}).trim() || fallback(); - return cache; - } catch (err) { - return fallback(); - } - } - - cache = getLocale(res); - return cache; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/os-locale/license b/fundamentals/bug-challenge-es6/node_modules/os-locale/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/os-locale/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/os-locale/package.json b/fundamentals/bug-challenge-es6/node_modules/os-locale/package.json deleted file mode 100644 index 882fe1d01..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/os-locale/package.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "_args": [ - [ - "os-locale@^1.4.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/yargs" - ] - ], - "_from": "os-locale@>=1.4.0 <2.0.0", - "_id": "os-locale@1.4.0", - "_inCache": true, - "_installable": true, - "_location": "/os-locale", - "_nodeVersion": "3.0.0", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.13.3", - "_phantomChildren": {}, - "_requested": { - "name": "os-locale", - "raw": "os-locale@^1.4.0", - "rawSpec": "^1.4.0", - "scope": null, - "spec": ">=1.4.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/yargs" - ], - "_resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "_shasum": "20f9f17ae29ed345e8bde583b13d2009803c14d9", - "_shrinkwrap": null, - "_spec": "os-locale@^1.4.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/yargs", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/os-locale/issues" - }, - "dependencies": { - "lcid": "^1.0.0" - }, - "description": "Get the system locale", - "devDependencies": { - "ava": "*", - "require-uncached": "^1.0.2", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "20f9f17ae29ed345e8bde583b13d2009803c14d9", - "tarball": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "b5c88233910b2e959fe84d841addb7a15e1cc813", - "homepage": "https://github.com/sindresorhus/os-locale", - "keywords": [ - "locale", - "lang", - "language", - "system", - "os", - "string", - "str", - "user", - "country", - "id", - "identifier", - "region" - ], - "license": "MIT", - "maintainers": [ - { - "email": "andrewbgoode@gmail.com", - "name": "abg" - }, - { - "email": "ben@npmjs.com", - "name": "bcoe" - }, - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "os-locale", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/os-locale.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.4.0" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/os-locale/readme.md b/fundamentals/bug-challenge-es6/node_modules/os-locale/readme.md deleted file mode 100644 index b80a0bd0b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/os-locale/readme.md +++ /dev/null @@ -1,47 +0,0 @@ -# os-locale [![Build Status](https://travis-ci.org/sindresorhus/os-locale.svg?branch=master)](https://travis-ci.org/sindresorhus/os-locale) - -> Get the system [locale](http://en.wikipedia.org/wiki/Locale) - -Useful for localizing your module or app. - -POSIX systems: The returned locale refers to the [`LC_MESSAGE`](http://www.gnu.org/software/libc/manual/html_node/Locale-Categories.html#Locale-Categories) category, suitable for selecting the language used in the user interface for message translation. - - -## Install - -``` -$ npm install --save os-locale -``` - - -## Usage - -```js -var osLocale = require('os-locale'); - -osLocale(function (err, locale) { - console.log(locale); - //=> 'en_US' -}); -``` - - -## API - -### osLocale([options], callback(error, locale)) - -### osLocale.sync([options]) - -Returns the locale. - -#### options.spawn - -Type: `boolean` -Default: `true` - -Set to `false` to avoid spawning subprocesses and instead only resolve the locale from environment variables. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/os-tmpdir/index.js b/fundamentals/bug-challenge-es6/node_modules/os-tmpdir/index.js deleted file mode 100644 index 2077b1ce7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/os-tmpdir/index.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; -var isWindows = process.platform === 'win32'; -var trailingSlashRe = isWindows ? /[^:]\\$/ : /.\/$/; - -// https://github.com/nodejs/node/blob/3e7a14381497a3b73dda68d05b5130563cdab420/lib/os.js#L25-L43 -module.exports = function () { - var path; - - if (isWindows) { - path = process.env.TEMP || - process.env.TMP || - (process.env.SystemRoot || process.env.windir) + '\\temp'; - } else { - path = process.env.TMPDIR || - process.env.TMP || - process.env.TEMP || - '/tmp'; - } - - if (trailingSlashRe.test(path)) { - path = path.slice(0, -1); - } - - return path; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/os-tmpdir/license b/fundamentals/bug-challenge-es6/node_modules/os-tmpdir/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/os-tmpdir/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/os-tmpdir/package.json b/fundamentals/bug-challenge-es6/node_modules/os-tmpdir/package.json deleted file mode 100644 index 6c619992a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/os-tmpdir/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "os-tmpdir@^1.0.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/home-or-tmp" - ] - ], - "_from": "os-tmpdir@>=1.0.1 <2.0.0", - "_id": "os-tmpdir@1.0.2", - "_inCache": true, - "_installable": true, - "_location": "/os-tmpdir", - "_nodeVersion": "6.6.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/os-tmpdir-1.0.2.tgz_1475211274587_0.14931037812493742" - }, - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "3.10.3", - "_phantomChildren": {}, - "_requested": { - "name": "os-tmpdir", - "raw": "os-tmpdir@^1.0.1", - "rawSpec": "^1.0.1", - "scope": null, - "spec": ">=1.0.1 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/home-or-tmp" - ], - "_resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "_shasum": "bbe67406c79aa85c5cfec766fe5734555dfa1274", - "_shrinkwrap": null, - "_spec": "os-tmpdir@^1.0.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/home-or-tmp", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/os-tmpdir/issues" - }, - "dependencies": {}, - "description": "Node.js os.tmpdir() ponyfill", - "devDependencies": { - "ava": "*", - "xo": "^0.16.0" - }, - "directories": {}, - "dist": { - "shasum": "bbe67406c79aa85c5cfec766fe5734555dfa1274", - "tarball": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "1abf9cf5611b4be7377060ea67054b45cbf6813c", - "homepage": "https://github.com/sindresorhus/os-tmpdir#readme", - "keywords": [ - "built-in", - "core", - "ponyfill", - "polyfill", - "shim", - "os", - "tmpdir", - "tempdir", - "tmp", - "temp", - "dir", - "directory", - "env", - "environment" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "os-tmpdir", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/os-tmpdir.git" - }, - "scripts": { - "test": "xo && ava" - }, - "version": "1.0.2" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/os-tmpdir/readme.md b/fundamentals/bug-challenge-es6/node_modules/os-tmpdir/readme.md deleted file mode 100644 index c09f7ed8d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/os-tmpdir/readme.md +++ /dev/null @@ -1,32 +0,0 @@ -# os-tmpdir [![Build Status](https://travis-ci.org/sindresorhus/os-tmpdir.svg?branch=master)](https://travis-ci.org/sindresorhus/os-tmpdir) - -> Node.js [`os.tmpdir()`](https://nodejs.org/api/os.html#os_os_tmpdir) [ponyfill](https://ponyfill.com) - -Use this instead of `require('os').tmpdir()` to get a consistent behavior on different Node.js versions (even 0.8). - - -## Install - -``` -$ npm install --save os-tmpdir -``` - - -## Usage - -```js -const osTmpdir = require('os-tmpdir'); - -osTmpdir(); -//=> '/var/folders/m3/5574nnhn0yj488ccryqr7tc80000gn/T' -``` - - -## API - -See the [`os.tmpdir()` docs](https://nodejs.org/api/os.html#os_os_tmpdir). - - -## License - -MIT © [Sindre Sorhus](https://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/parse-glob/LICENSE b/fundamentals/bug-challenge-es6/node_modules/parse-glob/LICENSE deleted file mode 100644 index 65f90aca8..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/parse-glob/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/parse-glob/README.md b/fundamentals/bug-challenge-es6/node_modules/parse-glob/README.md deleted file mode 100644 index 000ccd99c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/parse-glob/README.md +++ /dev/null @@ -1,115 +0,0 @@ -# parse-glob [![NPM version](https://badge.fury.io/js/parse-glob.svg)](http://badge.fury.io/js/parse-glob) [![Build Status](https://travis-ci.org/jonschlinkert/parse-glob.svg)](https://travis-ci.org/jonschlinkert/parse-glob) - -> Parse a glob pattern into an object of tokens. - -**Changes from v1.0.0 to v3.0.4** - -* all path-related properties are now on the `path` object -* all boolean properties are now on the `is` object -* adds `base` property - -See the [properties](#properties) section for details. - -Install with [npm](https://www.npmjs.com/) - -```sh -$ npm i parse-glob --save -``` - -* parses 1,000+ glob patterns in 29ms (2.3 GHz Intel Core i7) -* Extensive [unit tests](./test.js) (more than 1,000 lines), covering wildcards, globstars, character classes, brace patterns, extglobs, dotfiles and other complex patterns. - -See the tests for [hundreds of examples](./test.js). - -## Usage - -```js -var parseGlob = require('parse-glob'); -``` - -**Example** - -```js -parseGlob('a/b/c/**/*.{yml,json}'); -``` - -**Returns:** - -```js -{ orig: 'a/b/c/**/*.{yml,json}', - is: - { glob: true, - negated: false, - extglob: false, - braces: true, - brackets: false, - globstar: true, - dotfile: false, - dotdir: false }, - glob: '**/*.{yml,json}', - base: 'a/b/c', - path: - { dirname: 'a/b/c/**/', - basename: '*.{yml,json}', - filename: '*', - extname: '.{yml,json}', - ext: '{yml,json}' } } -``` - -## Properties - -The object returned by parseGlob has the following properties: - -* `orig`: a copy of the original, unmodified glob pattern -* `is`: an object with boolean information about the glob: - - `glob`: true if the pattern actually a glob pattern - - `negated`: true if it's a negation pattern (`!**/foo.js`) - - `extglob`: true if it has extglobs (`@(foo|bar)`) - - `braces`: true if it has braces (`{1..2}` or `.{txt,md}`) - - `brackets`: true if it has POSIX brackets (`[[:alpha:]]`) - - `globstar`: true if the pattern has a globstar (double star, `**`) - - `dotfile`: true if the pattern should match dotfiles - - `dotdir`: true if the pattern should match dot-directories (like `.git`) -* `glob`: the glob pattern part of the string, if any -* `base`: the non-glob part of the string, if any -* `path`: file path segments - - `dirname`: directory - - `basename`: file name with extension - - `filename`: file name without extension - - `extname`: file extension with dot - - `ext`: file extension without dot - -## Related -* [glob-base](https://www.npmjs.com/package/glob-base): Returns an object with the (non-glob) base path and the actual pattern. | [homepage](https://github.com/jonschlinkert/glob-base) -* [glob-parent](https://www.npmjs.com/package/glob-parent): Strips glob magic from a string to provide the parent path | [homepage](https://github.com/es128/glob-parent) -* [glob-path-regex](https://www.npmjs.com/package/glob-path-regex): Regular expression for matching the parts of glob pattern. | [homepage](https://github.com/regexps/glob-path-regex) -* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern. | [homepage](https://github.com/jonschlinkert/is-glob) -* [micromatch](https://www.npmjs.com/package/micromatch): Glob matching for javascript/node.js. A drop-in replacement and faster alternative to minimatch and multimatch. Just… [more](https://www.npmjs.com/package/micromatch) | [homepage](https://github.com/jonschlinkert/micromatch) - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/parse-glob/issues/new). - -## Tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2014-2015 Jon Schlinkert -Released under the MIT license. - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on September 22, 2015._ \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/parse-glob/index.js b/fundamentals/bug-challenge-es6/node_modules/parse-glob/index.js deleted file mode 100644 index 4ab691afc..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/parse-glob/index.js +++ /dev/null @@ -1,156 +0,0 @@ -/*! - * parse-glob - * - * Copyright (c) 2015, Jon Schlinkert. - * Licensed under the MIT License. - */ - -'use strict'; - -var isGlob = require('is-glob'); -var findBase = require('glob-base'); -var extglob = require('is-extglob'); -var dotfile = require('is-dotfile'); - -/** - * Expose `cache` - */ - -var cache = module.exports.cache = {}; - -/** - * Parse a glob pattern into tokens. - * - * When no paths or '**' are in the glob, we use a - * different strategy for parsing the filename, since - * file names can contain braces and other difficult - * patterns. such as: - * - * - `*.{a,b}` - * - `(**|*.js)` - */ - -module.exports = function parseGlob(glob) { - if (cache.hasOwnProperty(glob)) { - return cache[glob]; - } - - var tok = {}; - tok.orig = glob; - tok.is = {}; - - // unescape dots and slashes in braces/brackets - glob = escape(glob); - - var parsed = findBase(glob); - tok.is.glob = parsed.isGlob; - - tok.glob = parsed.glob; - tok.base = parsed.base; - var segs = /([^\/]*)$/.exec(glob); - - tok.path = {}; - tok.path.dirname = ''; - tok.path.basename = segs[1] || ''; - tok.path.dirname = glob.split(tok.path.basename).join('') || ''; - var basename = (tok.path.basename || '').split('.') || ''; - tok.path.filename = basename[0] || ''; - tok.path.extname = basename.slice(1).join('.') || ''; - tok.path.ext = ''; - - if (isGlob(tok.path.dirname) && !tok.path.basename) { - if (!/\/$/.test(tok.glob)) { - tok.path.basename = tok.glob; - } - tok.path.dirname = tok.base; - } - - if (glob.indexOf('/') === -1 && !tok.is.globstar) { - tok.path.dirname = ''; - tok.path.basename = tok.orig; - } - - var dot = tok.path.basename.indexOf('.'); - if (dot !== -1) { - tok.path.filename = tok.path.basename.slice(0, dot); - tok.path.extname = tok.path.basename.slice(dot); - } - - if (tok.path.extname.charAt(0) === '.') { - var exts = tok.path.extname.split('.'); - tok.path.ext = exts[exts.length - 1]; - } - - // unescape dots and slashes in braces/brackets - tok.glob = unescape(tok.glob); - tok.path.dirname = unescape(tok.path.dirname); - tok.path.basename = unescape(tok.path.basename); - tok.path.filename = unescape(tok.path.filename); - tok.path.extname = unescape(tok.path.extname); - - // Booleans - var is = (glob && tok.is.glob); - tok.is.negated = glob && glob.charAt(0) === '!'; - tok.is.extglob = glob && extglob(glob); - tok.is.braces = has(is, glob, '{'); - tok.is.brackets = has(is, glob, '[:'); - tok.is.globstar = has(is, glob, '**'); - tok.is.dotfile = dotfile(tok.path.basename) || dotfile(tok.path.filename); - tok.is.dotdir = dotdir(tok.path.dirname); - return (cache[glob] = tok); -} - -/** - * Returns true if the glob matches dot-directories. - * - * @param {Object} `tok` The tokens object - * @param {Object} `path` The path object - * @return {Object} - */ - -function dotdir(base) { - if (base.indexOf('/.') !== -1) { - return true; - } - if (base.charAt(0) === '.' && base.charAt(1) !== '/') { - return true; - } - return false; -} - -/** - * Returns true if the pattern has the given `ch`aracter(s) - * - * @param {Object} `glob` The glob pattern. - * @param {Object} `ch` The character to test for - * @return {Object} - */ - -function has(is, glob, ch) { - return is && glob.indexOf(ch) !== -1; -} - -/** - * Escape/unescape utils - */ - -function escape(str) { - var re = /\{([^{}]*?)}|\(([^()]*?)\)|\[([^\[\]]*?)\]/g; - return str.replace(re, function (outter, braces, parens, brackets) { - var inner = braces || parens || brackets; - if (!inner) { return outter; } - return outter.split(inner).join(esc(inner)); - }); -} - -function esc(str) { - str = str.split('/').join('__SLASH__'); - str = str.split('.').join('__DOT__'); - return str; -} - -function unescape(str) { - str = str.split('__SLASH__').join('/'); - str = str.split('__DOT__').join('.'); - return str; -} diff --git a/fundamentals/bug-challenge-es6/node_modules/parse-glob/package.json b/fundamentals/bug-challenge-es6/node_modules/parse-glob/package.json deleted file mode 100644 index 8d0ab96e6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/parse-glob/package.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "_args": [ - [ - "parse-glob@^3.0.4", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch" - ] - ], - "_from": "parse-glob@>=3.0.4 <4.0.0", - "_id": "parse-glob@3.0.4", - "_inCache": true, - "_installable": true, - "_location": "/parse-glob", - "_nodeVersion": "0.12.4", - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "2.10.1", - "_phantomChildren": {}, - "_requested": { - "name": "parse-glob", - "raw": "parse-glob@^3.0.4", - "rawSpec": "^3.0.4", - "scope": null, - "spec": ">=3.0.4 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/micromatch" - ], - "_resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "_shasum": "b2c376cfb11f35513badd173ef0bb6e3a388391c", - "_shrinkwrap": null, - "_spec": "parse-glob@^3.0.4", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/parse-glob/issues" - }, - "dependencies": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "description": "Parse a glob pattern into an object of tokens.", - "devDependencies": { - "browserify": "^9.0.3", - "lodash": "^3.3.1", - "mocha": "*" - }, - "directories": {}, - "dist": { - "shasum": "b2c376cfb11f35513badd173ef0bb6e3a388391c", - "tarball": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "9bfccb63acdeb3b1ed62035b3adef0e5081d8fc6", - "homepage": "https://github.com/jonschlinkert/parse-glob", - "keywords": [ - "glob", - "match", - "bash", - "expand", - "expansion", - "expression", - "file", - "files", - "filter", - "find", - "glob", - "globbing", - "globs", - "globstar", - "match", - "matcher", - "matches", - "matching", - "path", - "pattern", - "patterns", - "regex", - "regexp", - "regular", - "shell", - "wildcard" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "github@sellside.com", - "name": "jonschlinkert" - } - ], - "name": "parse-glob", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/parse-glob.git" - }, - "scripts": { - "prepublish": "browserify -o browser.js -e index.js", - "test": "mocha" - }, - "version": "3.0.4" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/parse-json/index.js b/fundamentals/bug-challenge-es6/node_modules/parse-json/index.js deleted file mode 100644 index 04add8ae2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/parse-json/index.js +++ /dev/null @@ -1,35 +0,0 @@ -'use strict'; -var errorEx = require('error-ex'); -var fallback = require('./vendor/parse'); - -var JSONError = errorEx('JSONError', { - fileName: errorEx.append('in %s') -}); - -module.exports = function (x, reviver, filename) { - if (typeof reviver === 'string') { - filename = reviver; - reviver = null; - } - - try { - try { - return JSON.parse(x, reviver); - } catch (err) { - fallback.parse(x, { - mode: 'json', - reviver: reviver - }); - - throw err; - } - } catch (err) { - var jsonErr = new JSONError(err); - - if (filename) { - jsonErr.fileName = filename; - } - - throw jsonErr; - } -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/parse-json/license b/fundamentals/bug-challenge-es6/node_modules/parse-json/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/parse-json/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/parse-json/package.json b/fundamentals/bug-challenge-es6/node_modules/parse-json/package.json deleted file mode 100644 index 5eb5fe274..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/parse-json/package.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "_args": [ - [ - "parse-json@^2.2.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/load-json-file" - ] - ], - "_from": "parse-json@>=2.2.0 <3.0.0", - "_id": "parse-json@2.2.0", - "_inCache": true, - "_installable": true, - "_location": "/parse-json", - "_nodeVersion": "0.12.7", - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.11.3", - "_phantomChildren": {}, - "_requested": { - "name": "parse-json", - "raw": "parse-json@^2.2.0", - "rawSpec": "^2.2.0", - "scope": null, - "spec": ">=2.2.0 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/load-json-file" - ], - "_resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "_shasum": "f480f40434ef80741f8469099f8dea18f55a4dc9", - "_shrinkwrap": null, - "_spec": "parse-json@^2.2.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/load-json-file", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/parse-json/issues" - }, - "dependencies": { - "error-ex": "^1.2.0" - }, - "description": "Parse JSON with more helpful errors", - "devDependencies": { - "ava": "0.0.4", - "xo": "*" - }, - "directories": {}, - "dist": { - "shasum": "f480f40434ef80741f8469099f8dea18f55a4dc9", - "tarball": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js", - "vendor" - ], - "gitHead": "419b0cbb83e67af53f9fd3f7ff98605ea2020eb6", - "homepage": "https://github.com/sindresorhus/parse-json", - "keywords": [ - "parse", - "json", - "graceful", - "error", - "message", - "humanize", - "friendly", - "helpful", - "string", - "str" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "parse-json", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/parse-json.git" - }, - "scripts": { - "test": "xo && node test.js" - }, - "version": "2.2.0", - "xo": { - "ignores": [ - "vendor/**" - ] - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/parse-json/readme.md b/fundamentals/bug-challenge-es6/node_modules/parse-json/readme.md deleted file mode 100644 index ca96e60a6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/parse-json/readme.md +++ /dev/null @@ -1,83 +0,0 @@ -# parse-json [![Build Status](https://travis-ci.org/sindresorhus/parse-json.svg?branch=master)](https://travis-ci.org/sindresorhus/parse-json) - -> Parse JSON with more helpful errors - - -## Install - -``` -$ npm install --save parse-json -``` - - -## Usage - -```js -var parseJson = require('parse-json'); -var json = '{\n\t"foo": true,\n}'; - - -JSON.parse(json); -/* -undefined:3 -} -^ -SyntaxError: Unexpected token } -*/ - - -parseJson(json); -/* -JSONError: Trailing comma in object at 3:1 -} -^ -*/ - - -parseJson(json, 'foo.json'); -/* -JSONError: Trailing comma in object at 3:1 in foo.json -} -^ -*/ - - -// you can also add the filename at a later point -try { - parseJson(json); -} catch (err) { - err.fileName = 'foo.json'; - throw err; -} -/* -JSONError: Trailing comma in object at 3:1 in foo.json -} -^ -*/ -``` - -## API - -### parseJson(input, [reviver], [filename]) - -#### input - -Type: `string` - -#### reviver - -Type: `function` - -Prescribes how the value originally produced by parsing is transformed, before being returned. See [`JSON.parse` docs](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter -) for more. - -#### filename - -Type: `string` - -Filename displayed in the error message. - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/parse-json/vendor/parse.js b/fundamentals/bug-challenge-es6/node_modules/parse-json/vendor/parse.js deleted file mode 100644 index 5f9fe9986..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/parse-json/vendor/parse.js +++ /dev/null @@ -1,752 +0,0 @@ -/* - * Author: Alex Kocharin - * GIT: https://github.com/rlidwka/jju - * License: WTFPL, grab your copy here: http://www.wtfpl.net/txt/copying/ - */ - -// RTFM: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf - -var Uni = require('./unicode') - -function isHexDigit(x) { - return (x >= '0' && x <= '9') - || (x >= 'A' && x <= 'F') - || (x >= 'a' && x <= 'f') -} - -function isOctDigit(x) { - return x >= '0' && x <= '7' -} - -function isDecDigit(x) { - return x >= '0' && x <= '9' -} - -var unescapeMap = { - '\'': '\'', - '"' : '"', - '\\': '\\', - 'b' : '\b', - 'f' : '\f', - 'n' : '\n', - 'r' : '\r', - 't' : '\t', - 'v' : '\v', - '/' : '/', -} - -function formatError(input, msg, position, lineno, column, json5) { - var result = msg + ' at ' + (lineno + 1) + ':' + (column + 1) - , tmppos = position - column - 1 - , srcline = '' - , underline = '' - - var isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON - - // output no more than 70 characters before the wrong ones - if (tmppos < position - 70) { - tmppos = position - 70 - } - - while (1) { - var chr = input[++tmppos] - - if (isLineTerminator(chr) || tmppos === input.length) { - if (position >= tmppos) { - // ending line error, so show it after the last char - underline += '^' - } - break - } - srcline += chr - - if (position === tmppos) { - underline += '^' - } else if (position > tmppos) { - underline += input[tmppos] === '\t' ? '\t' : ' ' - } - - // output no more than 78 characters on the string - if (srcline.length > 78) break - } - - return result + '\n' + srcline + '\n' + underline -} - -function parse(input, options) { - // parse as a standard JSON mode - var json5 = !(options.mode === 'json' || options.legacy) - var isLineTerminator = json5 ? Uni.isLineTerminator : Uni.isLineTerminatorJSON - var isWhiteSpace = json5 ? Uni.isWhiteSpace : Uni.isWhiteSpaceJSON - - var length = input.length - , lineno = 0 - , linestart = 0 - , position = 0 - , stack = [] - - var tokenStart = function() {} - var tokenEnd = function(v) {return v} - - /* tokenize({ - raw: '...', - type: 'whitespace'|'comment'|'key'|'literal'|'separator'|'newline', - value: 'number'|'string'|'whatever', - path: [...], - }) - */ - if (options._tokenize) { - ;(function() { - var start = null - tokenStart = function() { - if (start !== null) throw Error('internal error, token overlap') - start = position - } - - tokenEnd = function(v, type) { - if (start != position) { - var hash = { - raw: input.substr(start, position-start), - type: type, - stack: stack.slice(0), - } - if (v !== undefined) hash.value = v - options._tokenize.call(null, hash) - } - start = null - return v - } - })() - } - - function fail(msg) { - var column = position - linestart - - if (!msg) { - if (position < length) { - var token = '\'' + - JSON - .stringify(input[position]) - .replace(/^"|"$/g, '') - .replace(/'/g, "\\'") - .replace(/\\"/g, '"') - + '\'' - - if (!msg) msg = 'Unexpected token ' + token - } else { - if (!msg) msg = 'Unexpected end of input' - } - } - - var error = SyntaxError(formatError(input, msg, position, lineno, column, json5)) - error.row = lineno + 1 - error.column = column + 1 - throw error - } - - function newline(chr) { - // account for - if (chr === '\r' && input[position] === '\n') position++ - linestart = position - lineno++ - } - - function parseGeneric() { - var result - - while (position < length) { - tokenStart() - var chr = input[position++] - - if (chr === '"' || (chr === '\'' && json5)) { - return tokenEnd(parseString(chr), 'literal') - - } else if (chr === '{') { - tokenEnd(undefined, 'separator') - return parseObject() - - } else if (chr === '[') { - tokenEnd(undefined, 'separator') - return parseArray() - - } else if (chr === '-' - || chr === '.' - || isDecDigit(chr) - // + number Infinity NaN - || (json5 && (chr === '+' || chr === 'I' || chr === 'N')) - ) { - return tokenEnd(parseNumber(), 'literal') - - } else if (chr === 'n') { - parseKeyword('null') - return tokenEnd(null, 'literal') - - } else if (chr === 't') { - parseKeyword('true') - return tokenEnd(true, 'literal') - - } else if (chr === 'f') { - parseKeyword('false') - return tokenEnd(false, 'literal') - - } else { - position-- - return tokenEnd(undefined) - } - } - } - - function parseKey() { - var result - - while (position < length) { - tokenStart() - var chr = input[position++] - - if (chr === '"' || (chr === '\'' && json5)) { - return tokenEnd(parseString(chr), 'key') - - } else if (chr === '{') { - tokenEnd(undefined, 'separator') - return parseObject() - - } else if (chr === '[') { - tokenEnd(undefined, 'separator') - return parseArray() - - } else if (chr === '.' - || isDecDigit(chr) - ) { - return tokenEnd(parseNumber(true), 'key') - - } else if (json5 - && Uni.isIdentifierStart(chr) || (chr === '\\' && input[position] === 'u')) { - // unicode char or a unicode sequence - var rollback = position - 1 - var result = parseIdentifier() - - if (result === undefined) { - position = rollback - return tokenEnd(undefined) - } else { - return tokenEnd(result, 'key') - } - - } else { - position-- - return tokenEnd(undefined) - } - } - } - - function skipWhiteSpace() { - tokenStart() - while (position < length) { - var chr = input[position++] - - if (isLineTerminator(chr)) { - position-- - tokenEnd(undefined, 'whitespace') - tokenStart() - position++ - newline(chr) - tokenEnd(undefined, 'newline') - tokenStart() - - } else if (isWhiteSpace(chr)) { - // nothing - - } else if (chr === '/' - && json5 - && (input[position] === '/' || input[position] === '*') - ) { - position-- - tokenEnd(undefined, 'whitespace') - tokenStart() - position++ - skipComment(input[position++] === '*') - tokenEnd(undefined, 'comment') - tokenStart() - - } else { - position-- - break - } - } - return tokenEnd(undefined, 'whitespace') - } - - function skipComment(multi) { - while (position < length) { - var chr = input[position++] - - if (isLineTerminator(chr)) { - // LineTerminator is an end of singleline comment - if (!multi) { - // let parent function deal with newline - position-- - return - } - - newline(chr) - - } else if (chr === '*' && multi) { - // end of multiline comment - if (input[position] === '/') { - position++ - return - } - - } else { - // nothing - } - } - - if (multi) { - fail('Unclosed multiline comment') - } - } - - function parseKeyword(keyword) { - // keyword[0] is not checked because it should've checked earlier - var _pos = position - var len = keyword.length - for (var i=1; i= length || keyword[i] != input[position]) { - position = _pos-1 - fail() - } - position++ - } - } - - function parseObject() { - var result = options.null_prototype ? Object.create(null) : {} - , empty_object = {} - , is_non_empty = false - - while (position < length) { - skipWhiteSpace() - var item1 = parseKey() - skipWhiteSpace() - tokenStart() - var chr = input[position++] - tokenEnd(undefined, 'separator') - - if (chr === '}' && item1 === undefined) { - if (!json5 && is_non_empty) { - position-- - fail('Trailing comma in object') - } - return result - - } else if (chr === ':' && item1 !== undefined) { - skipWhiteSpace() - stack.push(item1) - var item2 = parseGeneric() - stack.pop() - - if (item2 === undefined) fail('No value found for key ' + item1) - if (typeof(item1) !== 'string') { - if (!json5 || typeof(item1) !== 'number') { - fail('Wrong key type: ' + item1) - } - } - - if ((item1 in empty_object || empty_object[item1] != null) && options.reserved_keys !== 'replace') { - if (options.reserved_keys === 'throw') { - fail('Reserved key: ' + item1) - } else { - // silently ignore it - } - } else { - if (typeof(options.reviver) === 'function') { - item2 = options.reviver.call(null, item1, item2) - } - - if (item2 !== undefined) { - is_non_empty = true - Object.defineProperty(result, item1, { - value: item2, - enumerable: true, - configurable: true, - writable: true, - }) - } - } - - skipWhiteSpace() - - tokenStart() - var chr = input[position++] - tokenEnd(undefined, 'separator') - - if (chr === ',') { - continue - - } else if (chr === '}') { - return result - - } else { - fail() - } - - } else { - position-- - fail() - } - } - - fail() - } - - function parseArray() { - var result = [] - - while (position < length) { - skipWhiteSpace() - stack.push(result.length) - var item = parseGeneric() - stack.pop() - skipWhiteSpace() - tokenStart() - var chr = input[position++] - tokenEnd(undefined, 'separator') - - if (item !== undefined) { - if (typeof(options.reviver) === 'function') { - item = options.reviver.call(null, String(result.length), item) - } - if (item === undefined) { - result.length++ - item = true // hack for check below, not included into result - } else { - result.push(item) - } - } - - if (chr === ',') { - if (item === undefined) { - fail('Elisions are not supported') - } - - } else if (chr === ']') { - if (!json5 && item === undefined && result.length) { - position-- - fail('Trailing comma in array') - } - return result - - } else { - position-- - fail() - } - } - } - - function parseNumber() { - // rewind because we don't know first char - position-- - - var start = position - , chr = input[position++] - , t - - var to_num = function(is_octal) { - var str = input.substr(start, position - start) - - if (is_octal) { - var result = parseInt(str.replace(/^0o?/, ''), 8) - } else { - var result = Number(str) - } - - if (Number.isNaN(result)) { - position-- - fail('Bad numeric literal - "' + input.substr(start, position - start + 1) + '"') - } else if (!json5 && !str.match(/^-?(0|[1-9][0-9]*)(\.[0-9]+)?(e[+-]?[0-9]+)?$/i)) { - // additional restrictions imposed by json - position-- - fail('Non-json numeric literal - "' + input.substr(start, position - start + 1) + '"') - } else { - return result - } - } - - // ex: -5982475.249875e+29384 - // ^ skipping this - if (chr === '-' || (chr === '+' && json5)) chr = input[position++] - - if (chr === 'N' && json5) { - parseKeyword('NaN') - return NaN - } - - if (chr === 'I' && json5) { - parseKeyword('Infinity') - - // returning +inf or -inf - return to_num() - } - - if (chr >= '1' && chr <= '9') { - // ex: -5982475.249875e+29384 - // ^^^ skipping these - while (position < length && isDecDigit(input[position])) position++ - chr = input[position++] - } - - // special case for leading zero: 0.123456 - if (chr === '0') { - chr = input[position++] - - // new syntax, "0o777" old syntax, "0777" - var is_octal = chr === 'o' || chr === 'O' || isOctDigit(chr) - var is_hex = chr === 'x' || chr === 'X' - - if (json5 && (is_octal || is_hex)) { - while (position < length - && (is_hex ? isHexDigit : isOctDigit)( input[position] ) - ) position++ - - var sign = 1 - if (input[start] === '-') { - sign = -1 - start++ - } else if (input[start] === '+') { - start++ - } - - return sign * to_num(is_octal) - } - } - - if (chr === '.') { - // ex: -5982475.249875e+29384 - // ^^^ skipping these - while (position < length && isDecDigit(input[position])) position++ - chr = input[position++] - } - - if (chr === 'e' || chr === 'E') { - chr = input[position++] - if (chr === '-' || chr === '+') position++ - // ex: -5982475.249875e+29384 - // ^^^ skipping these - while (position < length && isDecDigit(input[position])) position++ - chr = input[position++] - } - - // we have char in the buffer, so count for it - position-- - return to_num() - } - - function parseIdentifier() { - // rewind because we don't know first char - position-- - - var result = '' - - while (position < length) { - var chr = input[position++] - - if (chr === '\\' - && input[position] === 'u' - && isHexDigit(input[position+1]) - && isHexDigit(input[position+2]) - && isHexDigit(input[position+3]) - && isHexDigit(input[position+4]) - ) { - // UnicodeEscapeSequence - chr = String.fromCharCode(parseInt(input.substr(position+1, 4), 16)) - position += 5 - } - - if (result.length) { - // identifier started - if (Uni.isIdentifierPart(chr)) { - result += chr - } else { - position-- - return result - } - - } else { - if (Uni.isIdentifierStart(chr)) { - result += chr - } else { - return undefined - } - } - } - - fail() - } - - function parseString(endChar) { - // 7.8.4 of ES262 spec - var result = '' - - while (position < length) { - var chr = input[position++] - - if (chr === endChar) { - return result - - } else if (chr === '\\') { - if (position >= length) fail() - chr = input[position++] - - if (unescapeMap[chr] && (json5 || (chr != 'v' && chr != "'"))) { - result += unescapeMap[chr] - - } else if (json5 && isLineTerminator(chr)) { - // line continuation - newline(chr) - - } else if (chr === 'u' || (chr === 'x' && json5)) { - // unicode/character escape sequence - var off = chr === 'u' ? 4 : 2 - - // validation for \uXXXX - for (var i=0; i= length) fail() - if (!isHexDigit(input[position])) fail('Bad escape sequence') - position++ - } - - result += String.fromCharCode(parseInt(input.substr(position-off, off), 16)) - } else if (json5 && isOctDigit(chr)) { - if (chr < '4' && isOctDigit(input[position]) && isOctDigit(input[position+1])) { - // three-digit octal - var digits = 3 - } else if (isOctDigit(input[position])) { - // two-digit octal - var digits = 2 - } else { - var digits = 1 - } - position += digits - 1 - result += String.fromCharCode(parseInt(input.substr(position-digits, digits), 8)) - /*if (!isOctDigit(input[position])) { - // \0 is allowed still - result += '\0' - } else { - fail('Octal literals are not supported') - }*/ - - } else if (json5) { - // \X -> x - result += chr - - } else { - position-- - fail() - } - - } else if (isLineTerminator(chr)) { - fail() - - } else { - if (!json5 && chr.charCodeAt(0) < 32) { - position-- - fail('Unexpected control character') - } - - // SourceCharacter but not one of " or \ or LineTerminator - result += chr - } - } - - fail() - } - - skipWhiteSpace() - var return_value = parseGeneric() - if (return_value !== undefined || position < length) { - skipWhiteSpace() - - if (position >= length) { - if (typeof(options.reviver) === 'function') { - return_value = options.reviver.call(null, '', return_value) - } - return return_value - } else { - fail() - } - - } else { - if (position) { - fail('No data, only a whitespace') - } else { - fail('No data, empty input') - } - } -} - -/* - * parse(text, options) - * or - * parse(text, reviver) - * - * where: - * text - string - * options - object - * reviver - function - */ -module.exports.parse = function parseJSON(input, options) { - // support legacy functions - if (typeof(options) === 'function') { - options = { - reviver: options - } - } - - if (input === undefined) { - // parse(stringify(x)) should be equal x - // with JSON functions it is not 'cause of undefined - // so we're fixing it - return undefined - } - - // JSON.parse compat - if (typeof(input) !== 'string') input = String(input) - if (options == null) options = {} - if (options.reserved_keys == null) options.reserved_keys = 'ignore' - - if (options.reserved_keys === 'throw' || options.reserved_keys === 'ignore') { - if (options.null_prototype == null) { - options.null_prototype = true - } - } - - try { - return parse(input, options) - } catch(err) { - // jju is a recursive parser, so JSON.parse("{{{{{{{") could blow up the stack - // - // this catch is used to skip all those internal calls - if (err instanceof SyntaxError && err.row != null && err.column != null) { - var old_err = err - err = SyntaxError(old_err.message) - err.column = old_err.column - err.row = old_err.row - } - throw err - } -} - -module.exports.tokenize = function tokenizeJSON(input, options) { - if (options == null) options = {} - - options._tokenize = function(smth) { - if (options._addstack) smth.stack.unshift.apply(smth.stack, options._addstack) - tokens.push(smth) - } - - var tokens = [] - tokens.data = module.exports.parse(input, options) - return tokens -} - diff --git a/fundamentals/bug-challenge-es6/node_modules/parse-json/vendor/unicode.js b/fundamentals/bug-challenge-es6/node_modules/parse-json/vendor/unicode.js deleted file mode 100644 index 1a29143c2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/parse-json/vendor/unicode.js +++ /dev/null @@ -1,71 +0,0 @@ - -// This is autogenerated with esprima tools, see: -// https://github.com/ariya/esprima/blob/master/esprima.js -// -// PS: oh God, I hate Unicode - -// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierStart: - -var Uni = module.exports - -module.exports.isWhiteSpace = function isWhiteSpace(x) { - // section 7.2, table 2 - return x === '\u0020' - || x === '\u00A0' - || x === '\uFEFF' // <-- this is not a Unicode WS, only a JS one - || (x >= '\u0009' && x <= '\u000D') // 9 A B C D - - // + whitespace characters from unicode, category Zs - || x === '\u1680' - || x === '\u180E' - || (x >= '\u2000' && x <= '\u200A') // 0 1 2 3 4 5 6 7 8 9 A - || x === '\u2028' - || x === '\u2029' - || x === '\u202F' - || x === '\u205F' - || x === '\u3000' -} - -module.exports.isWhiteSpaceJSON = function isWhiteSpaceJSON(x) { - return x === '\u0020' - || x === '\u0009' - || x === '\u000A' - || x === '\u000D' -} - -module.exports.isLineTerminator = function isLineTerminator(x) { - // ok, here is the part when JSON is wrong - // section 7.3, table 3 - return x === '\u000A' - || x === '\u000D' - || x === '\u2028' - || x === '\u2029' -} - -module.exports.isLineTerminatorJSON = function isLineTerminatorJSON(x) { - return x === '\u000A' - || x === '\u000D' -} - -module.exports.isIdentifierStart = function isIdentifierStart(x) { - return x === '$' - || x === '_' - || (x >= 'A' && x <= 'Z') - || (x >= 'a' && x <= 'z') - || (x >= '\u0080' && Uni.NonAsciiIdentifierStart.test(x)) -} - -module.exports.isIdentifierPart = function isIdentifierPart(x) { - return x === '$' - || x === '_' - || (x >= 'A' && x <= 'Z') - || (x >= 'a' && x <= 'z') - || (x >= '0' && x <= '9') // <-- addition to Start - || (x >= '\u0080' && Uni.NonAsciiIdentifierPart.test(x)) -} - -module.exports.NonAsciiIdentifierStart = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/ - -// ECMAScript 5.1/Unicode v6.3.0 NonAsciiIdentifierPart: - -module.exports.NonAsciiIdentifierPart = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0\u08A2-\u08AC\u08E4-\u08FE\u0900-\u0963\u0966-\u096F\u0971-\u0977\u0979-\u097F\u0981-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C01-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58\u0C59\u0C60-\u0C63\u0C66-\u0C6F\u0C82\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D02\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D60-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F4\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F0\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191C\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1D00-\u1DE6\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA697\uA69F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7B\uAA80-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE26\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/ diff --git a/fundamentals/bug-challenge-es6/node_modules/parse5/CHANGELOG.md b/fundamentals/bug-challenge-es6/node_modules/parse5/CHANGELOG.md deleted file mode 100644 index 2ec67d942..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/parse5/CHANGELOG.md +++ /dev/null @@ -1,69 +0,0 @@ -## 1.5.1 - * Fix: Qualified tag name emission in Serializer (GH [#79](https://github.com/inikulin/parse5/issues/79)). - -## 1.5.0 - * Add: Location info for the element start and end tags (by @sakagg). - -## 1.4.2 - * Fix: htmlparser2 tree adapter `DocumentType.data` property rendering (GH [#45](https://github.com/inikulin/parse5/issues/45)). - -## 1.4.1 - * Fix: Location info handling for the implicitly generated `` and `` elements (GH [#44](https://github.com/inikulin/parse5/issues/44)). - -## 1.4.0 - * Add: Parser [decodeHtmlEntities](https://github.com/inikulin/parse5#optionsdecodehtmlentities) option. - * Add: SimpleApiParser [decodeHtmlEntities](https://github.com/inikulin/parse5#optionsdecodehtmlentities-1) option. - * Add: Parser [locationInfo](https://github.com/inikulin/parse5#optionslocationinfo) option. - * Add: SimpleApiParser [locationInfo](https://github.com/inikulin/parse5#optionslocationinfo-1) option. - -## 1.3.2 - * Fix: `
    ` processing in `

    -%Ps8i}N4Li$G{ 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 diff --git a/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/toaster/Microsoft.WindowsAPICodePack.Shell.dll b/fundamentals/bug-challenge-es6/node_modules/node-notifier/vendor/toaster/Microsoft.WindowsAPICodePack.Shell.dll deleted file mode 100755 index 82f3356fdf23c11c50be822cd00533cd1450f7fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 542208 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 O%D;p$|Nj`v7WiM6sR#A| diff --git a/fundamentals/bug-challenge-es6/node_modules/nopt/.npmignore b/fundamentals/bug-challenge-es6/node_modules/nopt/.npmignore deleted file mode 100644 index 3c3629e64..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nopt/.npmignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/fundamentals/bug-challenge-es6/node_modules/nopt/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/nopt/.travis.yml deleted file mode 100644 index 99f2bbf50..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nopt/.travis.yml +++ /dev/null @@ -1,9 +0,0 @@ -language: node_js -language: node_js -node_js: - - '0.8' - - '0.10' - - '0.12' - - 'iojs' -before_install: - - npm install -g npm@latest diff --git a/fundamentals/bug-challenge-es6/node_modules/nopt/LICENSE b/fundamentals/bug-challenge-es6/node_modules/nopt/LICENSE deleted file mode 100644 index 19129e315..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nopt/LICENSE +++ /dev/null @@ -1,15 +0,0 @@ -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/nopt/README.md b/fundamentals/bug-challenge-es6/node_modules/nopt/README.md deleted file mode 100644 index f21a4b31c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nopt/README.md +++ /dev/null @@ -1,211 +0,0 @@ -If you want to write an option parser, and have it be good, there are -two ways to do it. The Right Way, and the Wrong Way. - -The Wrong Way is to sit down and write an option parser. We've all done -that. - -The Right Way is to write some complex configurable program with so many -options that you hit the limit of your frustration just trying to -manage them all, and defer it with duct-tape solutions until you see -exactly to the core of the problem, and finally snap and write an -awesome option parser. - -If you want to write an option parser, don't write an option parser. -Write a package manager, or a source control system, or a service -restarter, or an operating system. You probably won't end up with a -good one of those, but if you don't give up, and you are relentless and -diligent enough in your procrastination, you may just end up with a very -nice option parser. - -## USAGE - - // my-program.js - var nopt = require("nopt") - , Stream = require("stream").Stream - , path = require("path") - , knownOpts = { "foo" : [String, null] - , "bar" : [Stream, Number] - , "baz" : path - , "bloo" : [ "big", "medium", "small" ] - , "flag" : Boolean - , "pick" : Boolean - , "many1" : [String, Array] - , "many2" : [path] - } - , shortHands = { "foofoo" : ["--foo", "Mr. Foo"] - , "b7" : ["--bar", "7"] - , "m" : ["--bloo", "medium"] - , "p" : ["--pick"] - , "f" : ["--flag"] - } - // everything is optional. - // knownOpts and shorthands default to {} - // arg list defaults to process.argv - // slice defaults to 2 - , parsed = nopt(knownOpts, shortHands, process.argv, 2) - console.log(parsed) - -This would give you support for any of the following: - -```bash -$ node my-program.js --foo "blerp" --no-flag -{ "foo" : "blerp", "flag" : false } - -$ node my-program.js ---bar 7 --foo "Mr. Hand" --flag -{ bar: 7, foo: "Mr. Hand", flag: true } - -$ node my-program.js --foo "blerp" -f -----p -{ foo: "blerp", flag: true, pick: true } - -$ node my-program.js -fp --foofoo -{ foo: "Mr. Foo", flag: true, pick: true } - -$ node my-program.js --foofoo -- -fp # -- stops the flag parsing. -{ foo: "Mr. Foo", argv: { remain: ["-fp"] } } - -$ node my-program.js --blatzk -fp # unknown opts are ok. -{ blatzk: true, flag: true, pick: true } - -$ node my-program.js --blatzk=1000 -fp # but you need to use = if they have a value -{ blatzk: 1000, flag: true, pick: true } - -$ node my-program.js --no-blatzk -fp # unless they start with "no-" -{ blatzk: false, flag: true, pick: true } - -$ node my-program.js --baz b/a/z # known paths are resolved. -{ baz: "/Users/isaacs/b/a/z" } - -# if Array is one of the types, then it can take many -# values, and will always be an array. The other types provided -# specify what types are allowed in the list. - -$ node my-program.js --many1 5 --many1 null --many1 foo -{ many1: ["5", "null", "foo"] } - -$ node my-program.js --many2 foo --many2 bar -{ many2: ["/path/to/foo", "path/to/bar"] } -``` - -Read the tests at the bottom of `lib/nopt.js` for more examples of -what this puppy can do. - -## Types - -The following types are supported, and defined on `nopt.typeDefs` - -* String: A normal string. No parsing is done. -* path: A file system path. Gets resolved against cwd if not absolute. -* url: A url. If it doesn't parse, it isn't accepted. -* Number: Must be numeric. -* Date: Must parse as a date. If it does, and `Date` is one of the options, - then it will return a Date object, not a string. -* Boolean: Must be either `true` or `false`. If an option is a boolean, - then it does not need a value, and its presence will imply `true` as - the value. To negate boolean flags, do `--no-whatever` or `--whatever - false` -* NaN: Means that the option is strictly not allowed. Any value will - fail. -* Stream: An object matching the "Stream" class in node. Valuable - for use when validating programmatically. (npm uses this to let you - supply any WriteStream on the `outfd` and `logfd` config options.) -* Array: If `Array` is specified as one of the types, then the value - will be parsed as a list of options. This means that multiple values - can be specified, and that the value will always be an array. - -If a type is an array of values not on this list, then those are -considered valid values. For instance, in the example above, the -`--bloo` option can only be one of `"big"`, `"medium"`, or `"small"`, -and any other value will be rejected. - -When parsing unknown fields, `"true"`, `"false"`, and `"null"` will be -interpreted as their JavaScript equivalents. - -You can also mix types and values, or multiple types, in a list. For -instance `{ blah: [Number, null] }` would allow a value to be set to -either a Number or null. When types are ordered, this implies a -preference, and the first type that can be used to properly interpret -the value will be used. - -To define a new type, add it to `nopt.typeDefs`. Each item in that -hash is an object with a `type` member and a `validate` method. The -`type` member is an object that matches what goes in the type list. The -`validate` method is a function that gets called with `validate(data, -key, val)`. Validate methods should assign `data[key]` to the valid -value of `val` if it can be handled properly, or return boolean -`false` if it cannot. - -You can also call `nopt.clean(data, types, typeDefs)` to clean up a -config object and remove its invalid properties. - -## Error Handling - -By default, nopt outputs a warning to standard error when invalid values for -known options are found. You can change this behavior by assigning a method -to `nopt.invalidHandler`. This method will be called with -the offending `nopt.invalidHandler(key, val, types)`. - -If no `nopt.invalidHandler` is assigned, then it will console.error -its whining. If it is assigned to boolean `false` then the warning is -suppressed. - -## Abbreviations - -Yes, they are supported. If you define options like this: - -```javascript -{ "foolhardyelephants" : Boolean -, "pileofmonkeys" : Boolean } -``` - -Then this will work: - -```bash -node program.js --foolhar --pil -node program.js --no-f --pileofmon -# etc. -``` - -## Shorthands - -Shorthands are a hash of shorter option names to a snippet of args that -they expand to. - -If multiple one-character shorthands are all combined, and the -combination does not unambiguously match any other option or shorthand, -then they will be broken up into their constituent parts. For example: - -```json -{ "s" : ["--loglevel", "silent"] -, "g" : "--global" -, "f" : "--force" -, "p" : "--parseable" -, "l" : "--long" -} -``` - -```bash -npm ls -sgflp -# just like doing this: -npm ls --loglevel silent --global --force --long --parseable -``` - -## The Rest of the args - -The config object returned by nopt is given a special member called -`argv`, which is an object with the following fields: - -* `remain`: The remaining args after all the parsing has occurred. -* `original`: The args as they originally appeared. -* `cooked`: The args after flags and shorthands are expanded. - -## Slicing - -Node programs are called with more or less the exact argv as it appears -in C land, after the v8 and node-specific options have been plucked off. -As such, `argv[0]` is always `node` and `argv[1]` is always the -JavaScript program being run. - -That's usually not very useful to you. So they're sliced off by -default. If you want them, then you can pass in `0` as the last -argument, or any other number that you'd like to slice off the start of -the list. diff --git a/fundamentals/bug-challenge-es6/node_modules/nopt/bin/nopt.js b/fundamentals/bug-challenge-es6/node_modules/nopt/bin/nopt.js deleted file mode 100755 index 3232d4c57..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nopt/bin/nopt.js +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/env node -var nopt = require("../lib/nopt") - , path = require("path") - , types = { num: Number - , bool: Boolean - , help: Boolean - , list: Array - , "num-list": [Number, Array] - , "str-list": [String, Array] - , "bool-list": [Boolean, Array] - , str: String - , clear: Boolean - , config: Boolean - , length: Number - , file: path - } - , shorthands = { s: [ "--str", "astring" ] - , b: [ "--bool" ] - , nb: [ "--no-bool" ] - , tft: [ "--bool-list", "--no-bool-list", "--bool-list", "true" ] - , "?": ["--help"] - , h: ["--help"] - , H: ["--help"] - , n: [ "--num", "125" ] - , c: ["--config"] - , l: ["--length"] - , f: ["--file"] - } - , parsed = nopt( types - , shorthands - , process.argv - , 2 ) - -console.log("parsed", parsed) - -if (parsed.help) { - console.log("") - console.log("nopt cli tester") - console.log("") - console.log("types") - console.log(Object.keys(types).map(function M (t) { - var type = types[t] - if (Array.isArray(type)) { - return [t, type.map(function (type) { return type.name })] - } - return [t, type && type.name] - }).reduce(function (s, i) { - s[i[0]] = i[1] - return s - }, {})) - console.log("") - console.log("shorthands") - console.log(shorthands) -} diff --git a/fundamentals/bug-challenge-es6/node_modules/nopt/examples/my-program.js b/fundamentals/bug-challenge-es6/node_modules/nopt/examples/my-program.js deleted file mode 100755 index 142447e18..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nopt/examples/my-program.js +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env node - -//process.env.DEBUG_NOPT = 1 - -// my-program.js -var nopt = require("../lib/nopt") - , Stream = require("stream").Stream - , path = require("path") - , knownOpts = { "foo" : [String, null] - , "bar" : [Stream, Number] - , "baz" : path - , "bloo" : [ "big", "medium", "small" ] - , "flag" : Boolean - , "pick" : Boolean - } - , shortHands = { "foofoo" : ["--foo", "Mr. Foo"] - , "b7" : ["--bar", "7"] - , "m" : ["--bloo", "medium"] - , "p" : ["--pick"] - , "f" : ["--flag", "true"] - , "g" : ["--flag"] - , "s" : "--flag" - } - // everything is optional. - // knownOpts and shorthands default to {} - // arg list defaults to process.argv - // slice defaults to 2 - , parsed = nopt(knownOpts, shortHands, process.argv, 2) - -console.log("parsed =\n"+ require("util").inspect(parsed)) diff --git a/fundamentals/bug-challenge-es6/node_modules/nopt/lib/nopt.js b/fundamentals/bug-challenge-es6/node_modules/nopt/lib/nopt.js deleted file mode 100644 index 97707e784..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nopt/lib/nopt.js +++ /dev/null @@ -1,415 +0,0 @@ -// info about each config option. - -var debug = process.env.DEBUG_NOPT || process.env.NOPT_DEBUG - ? function () { console.error.apply(console, arguments) } - : function () {} - -var url = require("url") - , path = require("path") - , Stream = require("stream").Stream - , abbrev = require("abbrev") - -module.exports = exports = nopt -exports.clean = clean - -exports.typeDefs = - { String : { type: String, validate: validateString } - , Boolean : { type: Boolean, validate: validateBoolean } - , url : { type: url, validate: validateUrl } - , Number : { type: Number, validate: validateNumber } - , path : { type: path, validate: validatePath } - , Stream : { type: Stream, validate: validateStream } - , Date : { type: Date, validate: validateDate } - } - -function nopt (types, shorthands, args, slice) { - args = args || process.argv - types = types || {} - shorthands = shorthands || {} - if (typeof slice !== "number") slice = 2 - - debug(types, shorthands, args, slice) - - args = args.slice(slice) - var data = {} - , key - , remain = [] - , cooked = args - , original = args.slice(0) - - parse(args, data, remain, types, shorthands) - // now data is full - clean(data, types, exports.typeDefs) - data.argv = {remain:remain,cooked:cooked,original:original} - Object.defineProperty(data.argv, 'toString', { value: function () { - return this.original.map(JSON.stringify).join(" ") - }, enumerable: false }) - return data -} - -function clean (data, types, typeDefs) { - typeDefs = typeDefs || exports.typeDefs - var remove = {} - , typeDefault = [false, true, null, String, Array] - - Object.keys(data).forEach(function (k) { - if (k === "argv") return - var val = data[k] - , isArray = Array.isArray(val) - , type = types[k] - if (!isArray) val = [val] - if (!type) type = typeDefault - if (type === Array) type = typeDefault.concat(Array) - if (!Array.isArray(type)) type = [type] - - debug("val=%j", val) - debug("types=", type) - val = val.map(function (val) { - // if it's an unknown value, then parse false/true/null/numbers/dates - if (typeof val === "string") { - debug("string %j", val) - val = val.trim() - if ((val === "null" && ~type.indexOf(null)) - || (val === "true" && - (~type.indexOf(true) || ~type.indexOf(Boolean))) - || (val === "false" && - (~type.indexOf(false) || ~type.indexOf(Boolean)))) { - val = JSON.parse(val) - debug("jsonable %j", val) - } else if (~type.indexOf(Number) && !isNaN(val)) { - debug("convert to number", val) - val = +val - } else if (~type.indexOf(Date) && !isNaN(Date.parse(val))) { - debug("convert to date", val) - val = new Date(val) - } - } - - if (!types.hasOwnProperty(k)) { - return val - } - - // allow `--no-blah` to set 'blah' to null if null is allowed - if (val === false && ~type.indexOf(null) && - !(~type.indexOf(false) || ~type.indexOf(Boolean))) { - val = null - } - - var d = {} - d[k] = val - debug("prevalidated val", d, val, types[k]) - if (!validate(d, k, val, types[k], typeDefs)) { - if (exports.invalidHandler) { - exports.invalidHandler(k, val, types[k], data) - } else if (exports.invalidHandler !== false) { - debug("invalid: "+k+"="+val, types[k]) - } - return remove - } - debug("validated val", d, val, types[k]) - return d[k] - }).filter(function (val) { return val !== remove }) - - if (!val.length) delete data[k] - else if (isArray) { - debug(isArray, data[k], val) - data[k] = val - } else data[k] = val[0] - - debug("k=%s val=%j", k, val, data[k]) - }) -} - -function validateString (data, k, val) { - data[k] = String(val) -} - -function validatePath (data, k, val) { - if (val === true) return false - if (val === null) return true - - val = String(val) - var homePattern = process.platform === 'win32' ? /^~(\/|\\)/ : /^~\// - if (val.match(homePattern) && process.env.HOME) { - val = path.resolve(process.env.HOME, val.substr(2)) - } - data[k] = path.resolve(String(val)) - return true -} - -function validateNumber (data, k, val) { - debug("validate Number %j %j %j", k, val, isNaN(val)) - if (isNaN(val)) return false - data[k] = +val -} - -function validateDate (data, k, val) { - debug("validate Date %j %j %j", k, val, Date.parse(val)) - var s = Date.parse(val) - if (isNaN(s)) return false - data[k] = new Date(val) -} - -function validateBoolean (data, k, val) { - if (val instanceof Boolean) val = val.valueOf() - else if (typeof val === "string") { - if (!isNaN(val)) val = !!(+val) - else if (val === "null" || val === "false") val = false - else val = true - } else val = !!val - data[k] = val -} - -function validateUrl (data, k, val) { - val = url.parse(String(val)) - if (!val.host) return false - data[k] = val.href -} - -function validateStream (data, k, val) { - if (!(val instanceof Stream)) return false - data[k] = val -} - -function validate (data, k, val, type, typeDefs) { - // arrays are lists of types. - if (Array.isArray(type)) { - for (var i = 0, l = type.length; i < l; i ++) { - if (type[i] === Array) continue - if (validate(data, k, val, type[i], typeDefs)) return true - } - delete data[k] - return false - } - - // an array of anything? - if (type === Array) return true - - // NaN is poisonous. Means that something is not allowed. - if (type !== type) { - debug("Poison NaN", k, val, type) - delete data[k] - return false - } - - // explicit list of values - if (val === type) { - debug("Explicitly allowed %j", val) - // if (isArray) (data[k] = data[k] || []).push(val) - // else data[k] = val - data[k] = val - return true - } - - // now go through the list of typeDefs, validate against each one. - var ok = false - , types = Object.keys(typeDefs) - for (var i = 0, l = types.length; i < l; i ++) { - debug("test type %j %j %j", k, val, types[i]) - var t = typeDefs[types[i]] - if (t && - ((type && type.name && t.type && t.type.name) ? (type.name === t.type.name) : (type === t.type))) { - var d = {} - ok = false !== t.validate(d, k, val) - val = d[k] - if (ok) { - // if (isArray) (data[k] = data[k] || []).push(val) - // else data[k] = val - data[k] = val - break - } - } - } - debug("OK? %j (%j %j %j)", ok, k, val, types[i]) - - if (!ok) delete data[k] - return ok -} - -function parse (args, data, remain, types, shorthands) { - debug("parse", args, data, remain) - - var key = null - , abbrevs = abbrev(Object.keys(types)) - , shortAbbr = abbrev(Object.keys(shorthands)) - - for (var i = 0; i < args.length; i ++) { - var arg = args[i] - debug("arg", arg) - - if (arg.match(/^-{2,}$/)) { - // done with keys. - // the rest are args. - remain.push.apply(remain, args.slice(i + 1)) - args[i] = "--" - break - } - var hadEq = false - if (arg.charAt(0) === "-" && arg.length > 1) { - if (arg.indexOf("=") !== -1) { - hadEq = true - var v = arg.split("=") - arg = v.shift() - v = v.join("=") - args.splice.apply(args, [i, 1].concat([arg, v])) - } - - // see if it's a shorthand - // if so, splice and back up to re-parse it. - var shRes = resolveShort(arg, shorthands, shortAbbr, abbrevs) - debug("arg=%j shRes=%j", arg, shRes) - if (shRes) { - debug(arg, shRes) - args.splice.apply(args, [i, 1].concat(shRes)) - if (arg !== shRes[0]) { - i -- - continue - } - } - arg = arg.replace(/^-+/, "") - var no = null - while (arg.toLowerCase().indexOf("no-") === 0) { - no = !no - arg = arg.substr(3) - } - - if (abbrevs[arg]) arg = abbrevs[arg] - - var isArray = types[arg] === Array || - Array.isArray(types[arg]) && types[arg].indexOf(Array) !== -1 - - // allow unknown things to be arrays if specified multiple times. - if (!types.hasOwnProperty(arg) && data.hasOwnProperty(arg)) { - if (!Array.isArray(data[arg])) - data[arg] = [data[arg]] - isArray = true - } - - var val - , la = args[i + 1] - - var isBool = typeof no === 'boolean' || - types[arg] === Boolean || - Array.isArray(types[arg]) && types[arg].indexOf(Boolean) !== -1 || - (typeof types[arg] === 'undefined' && !hadEq) || - (la === "false" && - (types[arg] === null || - Array.isArray(types[arg]) && ~types[arg].indexOf(null))) - - if (isBool) { - // just set and move along - val = !no - // however, also support --bool true or --bool false - if (la === "true" || la === "false") { - val = JSON.parse(la) - la = null - if (no) val = !val - i ++ - } - - // also support "foo":[Boolean, "bar"] and "--foo bar" - if (Array.isArray(types[arg]) && la) { - if (~types[arg].indexOf(la)) { - // an explicit type - val = la - i ++ - } else if ( la === "null" && ~types[arg].indexOf(null) ) { - // null allowed - val = null - i ++ - } else if ( !la.match(/^-{2,}[^-]/) && - !isNaN(la) && - ~types[arg].indexOf(Number) ) { - // number - val = +la - i ++ - } else if ( !la.match(/^-[^-]/) && ~types[arg].indexOf(String) ) { - // string - val = la - i ++ - } - } - - if (isArray) (data[arg] = data[arg] || []).push(val) - else data[arg] = val - - continue - } - - if (types[arg] === String && la === undefined) - la = "" - - if (la && la.match(/^-{2,}$/)) { - la = undefined - i -- - } - - val = la === undefined ? true : la - if (isArray) (data[arg] = data[arg] || []).push(val) - else data[arg] = val - - i ++ - continue - } - remain.push(arg) - } -} - -function resolveShort (arg, shorthands, shortAbbr, abbrevs) { - // handle single-char shorthands glommed together, like - // npm ls -glp, but only if there is one dash, and only if - // all of the chars are single-char shorthands, and it's - // not a match to some other abbrev. - arg = arg.replace(/^-+/, '') - - // if it's an exact known option, then don't go any further - if (abbrevs[arg] === arg) - return null - - // if it's an exact known shortopt, same deal - if (shorthands[arg]) { - // make it an array, if it's a list of words - if (shorthands[arg] && !Array.isArray(shorthands[arg])) - shorthands[arg] = shorthands[arg].split(/\s+/) - - return shorthands[arg] - } - - // first check to see if this arg is a set of single-char shorthands - var singles = shorthands.___singles - if (!singles) { - singles = Object.keys(shorthands).filter(function (s) { - return s.length === 1 - }).reduce(function (l,r) { - l[r] = true - return l - }, {}) - shorthands.___singles = singles - debug('shorthand singles', singles) - } - - var chrs = arg.split("").filter(function (c) { - return singles[c] - }) - - if (chrs.join("") === arg) return chrs.map(function (c) { - return shorthands[c] - }).reduce(function (l, r) { - return l.concat(r) - }, []) - - - // if it's an arg abbrev, and not a literal shorthand, then prefer the arg - if (abbrevs[arg] && !shorthands[arg]) - return null - - // if it's an abbr for a shorthand, then use that - if (shortAbbr[arg]) - arg = shortAbbr[arg] - - // make it an array, if it's a list of words - if (shorthands[arg] && !Array.isArray(shorthands[arg])) - shorthands[arg] = shorthands[arg].split(/\s+/) - - return shorthands[arg] -} diff --git a/fundamentals/bug-challenge-es6/node_modules/nopt/package.json b/fundamentals/bug-challenge-es6/node_modules/nopt/package.json deleted file mode 100644 index f59c8b5ff..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nopt/package.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "_args": [ - [ - "nopt@3.x", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul" - ] - ], - "_from": "nopt@>=3.0.0 <4.0.0", - "_id": "nopt@3.0.6", - "_inCache": true, - "_installable": true, - "_location": "/nopt", - "_nodeVersion": "4.2.1", - "_npmUser": { - "email": "ogd@aoaioxxysz.net", - "name": "othiym23" - }, - "_npmVersion": "2.14.10", - "_phantomChildren": {}, - "_requested": { - "name": "nopt", - "raw": "nopt@3.x", - "rawSpec": "3.x", - "scope": null, - "spec": ">=3.0.0 <4.0.0", - "type": "range" - }, - "_requiredBy": [ - "/istanbul" - ], - "_resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "_shasum": "c6465dbf08abcd4db359317f79ac68a646b28ff9", - "_shrinkwrap": null, - "_spec": "nopt@3.x", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/istanbul", - "author": { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter", - "url": "http://blog.izs.me/" - }, - "bin": { - "nopt": "./bin/nopt.js" - }, - "bugs": { - "url": "https://github.com/npm/nopt/issues" - }, - "dependencies": { - "abbrev": "1" - }, - "description": "Option parsing for Node, supporting types, shorthands, etc. Used by npm.", - "devDependencies": { - "tap": "^1.2.0" - }, - "directories": {}, - "dist": { - "shasum": "c6465dbf08abcd4db359317f79ac68a646b28ff9", - "tarball": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz" - }, - "gitHead": "10a750c9bb99c1950160353459e733ac2aa18cb6", - "homepage": "https://github.com/npm/nopt#readme", - "license": "ISC", - "main": "lib/nopt.js", - "maintainers": [ - { - "email": "i@izs.me", - "name": "isaacs" - }, - { - "email": "ogd@aoaioxxysz.net", - "name": "othiym23" - }, - { - "email": "kat@sykosomatic.org", - "name": "zkat" - } - ], - "name": "nopt", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/npm/nopt.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "3.0.6" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/nopt/test/basic.js b/fundamentals/bug-challenge-es6/node_modules/nopt/test/basic.js deleted file mode 100644 index d399de920..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nopt/test/basic.js +++ /dev/null @@ -1,273 +0,0 @@ -var nopt = require("../") - , test = require('tap').test - - -test("passing a string results in a string", function (t) { - var parsed = nopt({ key: String }, {}, ["--key", "myvalue"], 0) - t.same(parsed.key, "myvalue") - t.end() -}) - -// https://github.com/npm/nopt/issues/31 -test("Empty String results in empty string, not true", function (t) { - var parsed = nopt({ empty: String }, {}, ["--empty"], 0) - t.same(parsed.empty, "") - t.end() -}) - -test("~ path is resolved to $HOME", function (t) { - var path = require("path") - if (!process.env.HOME) process.env.HOME = "/tmp" - var parsed = nopt({key: path}, {}, ["--key=~/val"], 0) - t.same(parsed.key, path.resolve(process.env.HOME, "val")) - t.end() -}) - -// https://github.com/npm/nopt/issues/24 -test("Unknown options are not parsed as numbers", function (t) { - var parsed = nopt({"parse-me": Number}, null, ['--leave-as-is=1.20', '--parse-me=1.20'], 0) - t.equal(parsed['leave-as-is'], '1.20') - t.equal(parsed['parse-me'], 1.2) - t.end() -}); - -// https://github.com/npm/nopt/issues/48 -test("Check types based on name of type", function (t) { - var parsed = nopt({"parse-me": {name: "Number"}}, null, ['--parse-me=1.20'], 0) - t.equal(parsed['parse-me'], 1.2) - t.end() -}) - - -test("Missing types are not parsed", function (t) { - var parsed = nopt({"parse-me": {}}, null, ['--parse-me=1.20'], 0) - //should only contain argv - t.equal(Object.keys(parsed).length, 1) - t.end() -}) - -test("Types passed without a name are not parsed", function (t) { - var parsed = nopt({"parse-me": {}}, {}, ['--parse-me=1.20'], 0) - //should only contain argv - t.equal(Object.keys(parsed).length, 1) - t.end() -}) - -test("other tests", function (t) { - - var util = require("util") - , Stream = require("stream") - , path = require("path") - , url = require("url") - - , shorthands = - { s : ["--loglevel", "silent"] - , d : ["--loglevel", "info"] - , dd : ["--loglevel", "verbose"] - , ddd : ["--loglevel", "silly"] - , noreg : ["--no-registry"] - , reg : ["--registry"] - , "no-reg" : ["--no-registry"] - , silent : ["--loglevel", "silent"] - , verbose : ["--loglevel", "verbose"] - , h : ["--usage"] - , H : ["--usage"] - , "?" : ["--usage"] - , help : ["--usage"] - , v : ["--version"] - , f : ["--force"] - , desc : ["--description"] - , "no-desc" : ["--no-description"] - , "local" : ["--no-global"] - , l : ["--long"] - , p : ["--parseable"] - , porcelain : ["--parseable"] - , g : ["--global"] - } - - , types = - { aoa: Array - , nullstream: [null, Stream] - , date: Date - , str: String - , browser : String - , cache : path - , color : ["always", Boolean] - , depth : Number - , description : Boolean - , dev : Boolean - , editor : path - , force : Boolean - , global : Boolean - , globalconfig : path - , group : [String, Number] - , gzipbin : String - , logfd : [Number, Stream] - , loglevel : ["silent","win","error","warn","info","verbose","silly"] - , long : Boolean - , "node-version" : [false, String] - , npaturl : url - , npat : Boolean - , "onload-script" : [false, String] - , outfd : [Number, Stream] - , parseable : Boolean - , pre: Boolean - , prefix: path - , proxy : url - , "rebuild-bundle" : Boolean - , registry : url - , searchopts : String - , searchexclude: [null, String] - , shell : path - , t: [Array, String] - , tag : String - , tar : String - , tmp : path - , "unsafe-perm" : Boolean - , usage : Boolean - , user : String - , username : String - , userconfig : path - , version : Boolean - , viewer: path - , _exit : Boolean - , path: path - } - - ; [["-v", {version:true}, []] - ,["---v", {version:true}, []] - ,["ls -s --no-reg connect -d", - {loglevel:"info",registry:null},["ls","connect"]] - ,["ls ---s foo",{loglevel:"silent"},["ls","foo"]] - ,["ls --registry blargle", {}, ["ls"]] - ,["--no-registry", {registry:null}, []] - ,["--no-color true", {color:false}, []] - ,["--no-color false", {color:true}, []] - ,["--no-color", {color:false}, []] - ,["--color false", {color:false}, []] - ,["--color --logfd 7", {logfd:7,color:true}, []] - ,["--color=true", {color:true}, []] - ,["--logfd=10", {logfd:10}, []] - ,["--tmp=/tmp -tar=gtar",{tmp:"/tmp",tar:"gtar"},[]] - ,["--tmp=tmp -tar=gtar", - {tmp:path.resolve(process.cwd(), "tmp"),tar:"gtar"},[]] - ,["--logfd x", {}, []] - ,["a -true -- -no-false", {true:true},["a","-no-false"]] - ,["a -no-false", {false:false},["a"]] - ,["a -no-no-true", {true:true}, ["a"]] - ,["a -no-no-no-false", {false:false}, ["a"]] - ,["---NO-no-No-no-no-no-nO-no-no"+ - "-No-no-no-no-no-no-no-no-no"+ - "-no-no-no-no-NO-NO-no-no-no-no-no-no"+ - "-no-body-can-do-the-boogaloo-like-I-do" - ,{"body-can-do-the-boogaloo-like-I-do":false}, []] - ,["we are -no-strangers-to-love "+ - "--you-know=the-rules --and=so-do-i "+ - "---im-thinking-of=a-full-commitment "+ - "--no-you-would-get-this-from-any-other-guy "+ - "--no-gonna-give-you-up "+ - "-no-gonna-let-you-down=true "+ - "--no-no-gonna-run-around false "+ - "--desert-you=false "+ - "--make-you-cry false "+ - "--no-tell-a-lie "+ - "--no-no-and-hurt-you false" - ,{"strangers-to-love":false - ,"you-know":"the-rules" - ,"and":"so-do-i" - ,"you-would-get-this-from-any-other-guy":false - ,"gonna-give-you-up":false - ,"gonna-let-you-down":false - ,"gonna-run-around":false - ,"desert-you":false - ,"make-you-cry":false - ,"tell-a-lie":false - ,"and-hurt-you":false - },["we", "are"]] - ,["-t one -t two -t three" - ,{t: ["one", "two", "three"]} - ,[]] - ,["-t one -t null -t three four five null" - ,{t: ["one", "null", "three"]} - ,["four", "five", "null"]] - ,["-t foo" - ,{t:["foo"]} - ,[]] - ,["--no-t" - ,{t:["false"]} - ,[]] - ,["-no-no-t" - ,{t:["true"]} - ,[]] - ,["-aoa one -aoa null -aoa 100" - ,{aoa:["one", null, '100']} - ,[]] - ,["-str 100" - ,{str:"100"} - ,[]] - ,["--color always" - ,{color:"always"} - ,[]] - ,["--no-nullstream" - ,{nullstream:null} - ,[]] - ,["--nullstream false" - ,{nullstream:null} - ,[]] - ,["--notadate=2011-01-25" - ,{notadate: "2011-01-25"} - ,[]] - ,["--date 2011-01-25" - ,{date: new Date("2011-01-25")} - ,[]] - ,["-cl 1" - ,{config: true, length: 1} - ,[] - ,{config: Boolean, length: Number, clear: Boolean} - ,{c: "--config", l: "--length"}] - ,["--acount bla" - ,{"acount":true} - ,["bla"] - ,{account: Boolean, credentials: Boolean, options: String} - ,{a:"--account", c:"--credentials",o:"--options"}] - ,["--clear" - ,{clear:true} - ,[] - ,{clear:Boolean,con:Boolean,len:Boolean,exp:Boolean,add:Boolean,rep:Boolean} - ,{c:"--con",l:"--len",e:"--exp",a:"--add",r:"--rep"}] - ,["--file -" - ,{"file":"-"} - ,[] - ,{file:String} - ,{}] - ,["--file -" - ,{"file":true} - ,["-"] - ,{file:Boolean} - ,{}] - ,["--path" - ,{"path":null} - ,[]] - ,["--path ." - ,{"path":process.cwd()} - ,[]] - ].forEach(function (test) { - var argv = test[0].split(/\s+/) - , opts = test[1] - , rem = test[2] - , actual = nopt(test[3] || types, test[4] || shorthands, argv, 0) - , parsed = actual.argv - delete actual.argv - for (var i in opts) { - var e = JSON.stringify(opts[i]) - , a = JSON.stringify(actual[i] === undefined ? null : actual[i]) - if (e && typeof e === "object") { - t.deepEqual(e, a) - } else { - t.equal(e, a) - } - } - t.deepEqual(rem, parsed.remain) - }) - t.end() -}) diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/.npmignore b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/.npmignore deleted file mode 100644 index 096746c14..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/.npmignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules/ \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/.travis.yml b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/.travis.yml deleted file mode 100644 index 6e5919de3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - "0.10" diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/AUTHORS b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/AUTHORS deleted file mode 100644 index 10860f72b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -# Names sorted by how much code was originally theirs. -Isaac Z. Schlueter -Meryn Stol -Robert Kowalski \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/LICENSE b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/LICENSE deleted file mode 100644 index 9cea2e3c9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/LICENSE +++ /dev/null @@ -1,30 +0,0 @@ -This package contains code originally written by Isaac Z. Schlueter. -Used with permission. - -Copyright (c) Meryn Stol ("Author") -All rights reserved. - -The BSD License - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/README.md b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/README.md deleted file mode 100644 index 526745ef6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# normalize-package-data [![Build Status](https://travis-ci.org/npm/normalize-package-data.png?branch=master)](https://travis-ci.org/npm/normalize-package-data) - -normalize-package data exports a function that normalizes package metadata. This data is typically found in a package.json file, but in principle could come from any source - for example the npm registry. - -normalize-package-data is used by [read-package-json](https://npmjs.org/package/read-package-json) to normalize the data it reads from a package.json file. In turn, read-package-json is used by [npm](https://npmjs.org/package/npm) and various npm-related tools. - -## Installation - -``` -npm install normalize-package-data -``` - -## Usage - -Basic usage is really simple. You call the function that normalize-package-data exports. Let's call it `normalizeData`. - -```javascript -normalizeData = require('normalize-package-data') -packageData = fs.readFileSync("package.json") -normalizeData(packageData) -// packageData is now normalized -``` - -#### Strict mode - -You may activate strict validation by passing true as the second argument. - -```javascript -normalizeData = require('normalize-package-data') -packageData = fs.readFileSync("package.json") -warnFn = function(msg) { console.error(msg) } -normalizeData(packageData, true) -// packageData is now normalized -``` - -If strict mode is activated, only Semver 2.0 version strings are accepted. Otherwise, Semver 1.0 strings are accepted as well. Packages must have a name, and the name field must not have contain leading or trailing whitespace. - -#### Warnings - -Optionally, you may pass a "warning" function. It gets called whenever the `normalizeData` function encounters something that doesn't look right. It indicates less than perfect input data. - -```javascript -normalizeData = require('normalize-package-data') -packageData = fs.readFileSync("package.json") -warnFn = function(msg) { console.error(msg) } -normalizeData(packageData, warnFn) -// packageData is now normalized. Any number of warnings may have been logged. -``` - -You may combine strict validation with warnings by passing `true` as the second argument, and `warnFn` as third. - -When `private` field is set to `true`, warnings will be suppressed. - -### Potential exceptions - -If the supplied data has an invalid name or version vield, `normalizeData` will throw an error. Depending on where you call `normalizeData`, you may want to catch these errors so can pass them to a callback. - -## What normalization (currently) entails - -* The value of `name` field gets trimmed (unless in strict mode). -* The value of the `version` field gets cleaned by `semver.clean`. See [documentation for the semver module](https://github.com/isaacs/node-semver). -* If `name` and/or `version` fields are missing, they are set to empty strings. -* If `files` field is not an array, it will be removed. -* If `bin` field is a string, then `bin` field will become an object with `name` set to the value of the `name` field, and `bin` set to the original string value. -* If `man` field is a string, it will become an array with the original string as its sole member. -* If `keywords` field is string, it is considered to be a list of keywords separated by one or more white-space characters. It gets converted to an array by splitting on `\s+`. -* All people fields (`author`, `maintainers`, `contributors`) get converted into objects with name, email and url properties. -* If `bundledDependencies` field (a typo) exists and `bundleDependencies` field does not, `bundledDependencies` will get renamed to `bundleDependencies`. -* If the value of any of the dependencies fields (`dependencies`, `devDependencies`, `optionalDependencies`) is a string, it gets converted into an object with familiar `name=>value` pairs. -* The values in `optionalDependencies` get added to `dependencies`. The `optionalDependencies` array is left untouched. -* As of v2: Dependencies that point at known hosted git providers (currently: github, bitbucket, gitlab) will have their URLs canonicalized, but protocols will be preserved. -* As of v2: Dependencies that use shortcuts for hosted git providers (`org/proj`, `github:org/proj`, `bitbucket:org/proj`, `gitlab:org/proj`, `gist:docid`) will have the shortcut left in place. (In the case of github, the `org/proj` form will be expanded to `github:org/proj`.) THIS MARKS A BREAKING CHANGE FROM V1, where the shorcut was previously expanded to a URL. -* If `description` field does not exist, but `readme` field does, then (more or less) the first paragraph of text that's found in the readme is taken as value for `description`. -* If `repository` field is a string, it will become an object with `url` set to the original string value, and `type` set to `"git"`. -* If `repository.url` is not a valid url, but in the style of "[owner-name]/[repo-name]", `repository.url` will be set to git+https://github.com/[owner-name]/[repo-name].git -* If `bugs` field is a string, the value of `bugs` field is changed into an object with `url` set to the original string value. -* If `bugs` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `bugs` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]/issues . If the repository field points to a GitHub Gist repo url, the associated http url is chosen. -* If `bugs` field is an object, the resulting value only has email and url properties. If email and url properties are not strings, they are ignored. If no valid values for either email or url is found, bugs field will be removed. -* If `homepage` field is not a string, it will be removed. -* If the url in the `homepage` field does not specify a protocol, then http is assumed. For example, `myproject.org` will be changed to `http://myproject.org`. -* If `homepage` field does not exist, but `repository` field points to a repository hosted on GitHub, the value of the `homepage` field gets set to an url in the form of https://github.com/[owner-name]/[repo-name]/ . If the repository field points to a GitHub Gist repo url, the associated http url is chosen. - -### Rules for name field - -If `name` field is given, the value of the name field must be a string. The string may not: - -* start with a period. -* contain the following characters: `/@\s+%` -* contain and characters that would need to be encoded for use in urls. -* resemble the word `node_modules` or `favicon.ico` (case doesn't matter). - -### Rules for version field - -If `version` field is given, the value of the version field must be a valid *semver* string, as determined by the `semver.valid` method. See [documentation for the semver module](https://github.com/isaacs/node-semver). - -### Rules for license field - -The `license` field should be a valid *SPDX license expression* or one of the special values allowed by [validate-npm-package-license](https://npmjs.com/packages/validate-npm-package-license). See [documentation for the license field in package.json](https://docs.npmjs.com/files/package.json#license). - -## Credits - -This package contains code based on read-package-json written by Isaac Z. Schlueter. Used with permisson. - -## License - -normalize-package-data is released under the [BSD 2-Clause License](http://opensource.org/licenses/MIT). -Copyright (c) 2013 Meryn Stol diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/extract_description.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/extract_description.js deleted file mode 100644 index 83f10aa0a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/extract_description.js +++ /dev/null @@ -1,14 +0,0 @@ -module.exports = extractDescription - -// Extracts description from contents of a readme file in markdown format -function extractDescription (d) { - if (!d) return; - if (d === "ERROR: No README data found!") return; - // the first block of text before the first heading - // that isn't the first line heading - d = d.trim().split('\n') - for (var s = 0; d[s] && d[s].trim().match(/^(#|$)/); s ++); - var l = d.length - for (var e = s + 1; e < l && d[e].trim(); e ++); - return d.slice(s, e).join(' ').trim() -} diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/fixer.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/fixer.js deleted file mode 100644 index 1409c69c9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/fixer.js +++ /dev/null @@ -1,418 +0,0 @@ -var semver = require("semver") -var validateLicense = require('validate-npm-package-license'); -var hostedGitInfo = require("hosted-git-info") -var isBuiltinModule = require("is-builtin-module") -var depTypes = ["dependencies","devDependencies","optionalDependencies"] -var extractDescription = require("./extract_description") -var url = require("url") -var typos = require("./typos") - -var fixer = module.exports = { - // default warning function - warn: function() {}, - - fixRepositoryField: function(data) { - if (data.repositories) { - this.warn("repositories"); - data.repository = data.repositories[0] - } - if (!data.repository) return this.warn("missingRepository") - if (typeof data.repository === "string") { - data.repository = { - type: "git", - url: data.repository - } - } - var r = data.repository.url || "" - if (r) { - var hosted = hostedGitInfo.fromUrl(r) - if (hosted) { - r = data.repository.url - = hosted.getDefaultRepresentation() == "shortcut" ? hosted.https() : hosted.toString() - } - } - - if (r.match(/github.com\/[^\/]+\/[^\/]+\.git\.git$/)) { - this.warn("brokenGitUrl", r) - } - } - -, fixTypos: function(data) { - Object.keys(typos.topLevel).forEach(function (d) { - if (data.hasOwnProperty(d)) { - this.warn("typo", d, typos.topLevel[d]) - } - }, this) - } - -, fixScriptsField: function(data) { - if (!data.scripts) return - if (typeof data.scripts !== "object") { - this.warn("nonObjectScripts") - delete data.scripts - return - } - Object.keys(data.scripts).forEach(function (k) { - if (typeof data.scripts[k] !== "string") { - this.warn("nonStringScript") - delete data.scripts[k] - } else if (typos.script[k] && !data.scripts[typos.script[k]]) { - this.warn("typo", k, typos.script[k], "scripts") - } - }, this) - } - -, fixFilesField: function(data) { - var files = data.files - if (files && !Array.isArray(files)) { - this.warn("nonArrayFiles") - delete data.files - } else if (data.files) { - data.files = data.files.filter(function(file) { - if (!file || typeof file !== "string") { - this.warn("invalidFilename", file) - return false - } else { - return true - } - }, this) - } - } - -, fixBinField: function(data) { - if (!data.bin) return; - if (typeof data.bin === "string") { - var b = {} - var match - if (match = data.name.match(/^@[^/]+[/](.*)$/)) { - b[match[1]] = data.bin - } else { - b[data.name] = data.bin - } - data.bin = b - } - } - -, fixManField: function(data) { - if (!data.man) return; - if (typeof data.man === "string") { - data.man = [ data.man ] - } - } -, fixBundleDependenciesField: function(data) { - var bdd = "bundledDependencies" - var bd = "bundleDependencies" - if (data[bdd] && !data[bd]) { - data[bd] = data[bdd] - delete data[bdd] - } - if (data[bd] && !Array.isArray(data[bd])) { - this.warn("nonArrayBundleDependencies") - delete data[bd] - } else if (data[bd]) { - data[bd] = data[bd].filter(function(bd) { - if (!bd || typeof bd !== 'string') { - this.warn("nonStringBundleDependency", bd) - return false - } else { - if (!data.dependencies) { - data.dependencies = {} - } - if (!data.dependencies.hasOwnProperty(bd)) { - this.warn("nonDependencyBundleDependency", bd) - data.dependencies[bd] = "*" - } - return true - } - }, this) - } - } - -, fixDependencies: function(data, strict) { - var loose = !strict - objectifyDeps(data, this.warn) - addOptionalDepsToDeps(data, this.warn) - this.fixBundleDependenciesField(data) - - ;['dependencies','devDependencies'].forEach(function(deps) { - if (!(deps in data)) return - if (!data[deps] || typeof data[deps] !== "object") { - this.warn("nonObjectDependencies", deps) - delete data[deps] - return - } - Object.keys(data[deps]).forEach(function (d) { - var r = data[deps][d] - if (typeof r !== 'string') { - this.warn("nonStringDependency", d, JSON.stringify(r)) - delete data[deps][d] - } - var hosted = hostedGitInfo.fromUrl(data[deps][d]) - if (hosted) data[deps][d] = hosted.toString() - }, this) - }, this) - } - -, fixModulesField: function (data) { - if (data.modules) { - this.warn("deprecatedModules") - delete data.modules - } - } - -, fixKeywordsField: function (data) { - if (typeof data.keywords === "string") { - data.keywords = data.keywords.split(/,\s+/) - } - if (data.keywords && !Array.isArray(data.keywords)) { - delete data.keywords - this.warn("nonArrayKeywords") - } else if (data.keywords) { - data.keywords = data.keywords.filter(function(kw) { - if (typeof kw !== "string" || !kw) { - this.warn("nonStringKeyword"); - return false - } else { - return true - } - }, this) - } - } - -, fixVersionField: function(data, strict) { - // allow "loose" semver 1.0 versions in non-strict mode - // enforce strict semver 2.0 compliance in strict mode - var loose = !strict - if (!data.version) { - data.version = "" - return true - } - if (!semver.valid(data.version, loose)) { - throw new Error('Invalid version: "'+ data.version + '"') - } - data.version = semver.clean(data.version, loose) - return true - } - -, fixPeople: function(data) { - modifyPeople(data, unParsePerson) - modifyPeople(data, parsePerson) - } - -, fixNameField: function(data, options) { - if (typeof options === "boolean") options = {strict: options} - else if (typeof options === "undefined") options = {} - var strict = options.strict - if (!data.name && !strict) { - data.name = "" - return - } - if (typeof data.name !== "string") { - throw new Error("name field must be a string.") - } - if (!strict) - data.name = data.name.trim() - ensureValidName(data.name, strict, options.allowLegacyCase) - if (isBuiltinModule(data.name)) - this.warn("conflictingName", data.name) - } - - -, fixDescriptionField: function (data) { - if (data.description && typeof data.description !== 'string') { - this.warn("nonStringDescription") - delete data.description - } - if (data.readme && !data.description) - data.description = extractDescription(data.readme) - if(data.description === undefined) delete data.description; - if (!data.description) this.warn("missingDescription") - } - -, fixReadmeField: function (data) { - if (!data.readme) { - this.warn("missingReadme") - data.readme = "ERROR: No README data found!" - } - } - -, fixBugsField: function(data) { - if (!data.bugs && data.repository && data.repository.url) { - var hosted = hostedGitInfo.fromUrl(data.repository.url) - if(hosted && hosted.bugs()) { - data.bugs = {url: hosted.bugs()} - } - } - else if(data.bugs) { - var emailRe = /^.+@.*\..+$/ - if(typeof data.bugs == "string") { - if(emailRe.test(data.bugs)) - data.bugs = {email:data.bugs} - else if(url.parse(data.bugs).protocol) - data.bugs = {url: data.bugs} - else - this.warn("nonEmailUrlBugsString") - } - else { - bugsTypos(data.bugs, this.warn) - var oldBugs = data.bugs - data.bugs = {} - if(oldBugs.url) { - if(typeof(oldBugs.url) == "string" && url.parse(oldBugs.url).protocol) - data.bugs.url = oldBugs.url - else - this.warn("nonUrlBugsUrlField") - } - if(oldBugs.email) { - if(typeof(oldBugs.email) == "string" && emailRe.test(oldBugs.email)) - data.bugs.email = oldBugs.email - else - this.warn("nonEmailBugsEmailField") - } - } - if(!data.bugs.email && !data.bugs.url) { - delete data.bugs - this.warn("emptyNormalizedBugs") - } - } - } - -, fixHomepageField: function(data) { - if (!data.homepage && data.repository && data.repository.url) { - var hosted = hostedGitInfo.fromUrl(data.repository.url) - if (hosted && hosted.docs()) data.homepage = hosted.docs() - } - if (!data.homepage) return - - if(typeof data.homepage !== "string") { - this.warn("nonUrlHomepage") - return delete data.homepage - } - if(!url.parse(data.homepage).protocol) { - this.warn("missingProtocolHomepage") - data.homepage = "http://" + data.homepage - } - } - -, fixLicenseField: function(data) { - if (!data.license) { - return this.warn("missingLicense") - } else{ - if ( - typeof(data.license) !== 'string' || - data.license.length < 1 - ) { - this.warn("invalidLicense") - } else { - if (!validateLicense(data.license).validForNewPackages) - this.warn("invalidLicense") - } - } - } -} - -function isValidScopedPackageName(spec) { - if (spec.charAt(0) !== '@') return false - - var rest = spec.slice(1).split('/') - if (rest.length !== 2) return false - - return rest[0] && rest[1] && - rest[0] === encodeURIComponent(rest[0]) && - rest[1] === encodeURIComponent(rest[1]) -} - -function isCorrectlyEncodedName(spec) { - return !spec.match(/[\/@\s\+%:]/) && - spec === encodeURIComponent(spec) -} - -function ensureValidName (name, strict, allowLegacyCase) { - if (name.charAt(0) === "." || - !(isValidScopedPackageName(name) || isCorrectlyEncodedName(name)) || - (strict && (!allowLegacyCase) && name !== name.toLowerCase()) || - name.toLowerCase() === "node_modules" || - name.toLowerCase() === "favicon.ico") { - throw new Error("Invalid name: " + JSON.stringify(name)) - } -} - -function modifyPeople (data, fn) { - if (data.author) data.author = fn(data.author) - ;["maintainers", "contributors"].forEach(function (set) { - if (!Array.isArray(data[set])) return; - data[set] = data[set].map(fn) - }) - return data -} - -function unParsePerson (person) { - if (typeof person === "string") return person - var name = person.name || "" - var u = person.url || person.web - var url = u ? (" ("+u+")") : "" - var e = person.email || person.mail - var email = e ? (" <"+e+">") : "" - return name+email+url -} - -function parsePerson (person) { - if (typeof person !== "string") return person - var name = person.match(/^([^\(<]+)/) - var url = person.match(/\(([^\)]+)\)/) - var email = person.match(/<([^>]+)>/) - var obj = {} - if (name && name[0].trim()) obj.name = name[0].trim() - if (email) obj.email = email[1]; - if (url) obj.url = url[1]; - return obj -} - -function addOptionalDepsToDeps (data, warn) { - var o = data.optionalDependencies - if (!o) return; - var d = data.dependencies || {} - Object.keys(o).forEach(function (k) { - d[k] = o[k] - }) - data.dependencies = d -} - -function depObjectify (deps, type, warn) { - if (!deps) return {} - if (typeof deps === "string") { - deps = deps.trim().split(/[\n\r\s\t ,]+/) - } - if (!Array.isArray(deps)) return deps - warn("deprecatedArrayDependencies", type) - var o = {} - deps.filter(function (d) { - return typeof d === "string" - }).forEach(function(d) { - d = d.trim().split(/(:?[@\s><=])/) - var dn = d.shift() - var dv = d.join("") - dv = dv.trim() - dv = dv.replace(/^@/, "") - o[dn] = dv - }) - return o -} - -function objectifyDeps (data, warn) { - depTypes.forEach(function (type) { - if (!data[type]) return; - data[type] = depObjectify(data[type], type, warn) - }) -} - -function bugsTypos(bugs, warn) { - if (!bugs) return - Object.keys(bugs).forEach(function (k) { - if (typos.bugs[k]) { - warn("typo", k, typos.bugs[k], "bugs") - bugs[typos.bugs[k]] = bugs[k] - delete bugs[k] - } - }) -} diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/make_warning.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/make_warning.js deleted file mode 100644 index 0f3aad5f5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/make_warning.js +++ /dev/null @@ -1,23 +0,0 @@ -var util = require("util") -var messages = require("./warning_messages.json") - -module.exports = function() { - var args = Array.prototype.slice.call(arguments, 0) - var warningName = args.shift() - if (warningName == "typo") { - return makeTypoWarning.apply(null,args) - } - else { - var msgTemplate = messages[warningName] ? messages[warningName] : warningName + ": '%s'" - args.unshift(msgTemplate) - return util.format.apply(null, args) - } -} - -function makeTypoWarning (providedName, probableName, field) { - if (field) { - providedName = field + "['" + providedName + "']" - probableName = field + "['" + probableName + "']" - } - return util.format(messages.typo, providedName, probableName) -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/normalize.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/normalize.js deleted file mode 100644 index 7e68c69a9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/normalize.js +++ /dev/null @@ -1,39 +0,0 @@ -module.exports = normalize - -var fixer = require("./fixer") -normalize.fixer = fixer - -var makeWarning = require("./make_warning") - -var fieldsToFix = ['name','version','description','repository','modules','scripts' - ,'files','bin','man','bugs','keywords','readme','homepage','license'] -var otherThingsToFix = ['dependencies','people', 'typos'] - -var thingsToFix = fieldsToFix.map(function(fieldName) { - return ucFirst(fieldName) + "Field" -}) -// two ways to do this in CoffeeScript on only one line, sub-70 chars: -// thingsToFix = fieldsToFix.map (name) -> ucFirst(name) + "Field" -// thingsToFix = (ucFirst(name) + "Field" for name in fieldsToFix) -thingsToFix = thingsToFix.concat(otherThingsToFix) - -function normalize (data, warn, strict) { - if(warn === true) warn = null, strict = true - if(!strict) strict = false - if(!warn || data.private) warn = function(msg) { /* noop */ } - - if (data.scripts && - data.scripts.install === "node-gyp rebuild" && - !data.scripts.preinstall) { - data.gypfile = true - } - fixer.warn = function() { warn(makeWarning.apply(null, arguments)) } - thingsToFix.forEach(function(thingName) { - fixer["fix" + ucFirst(thingName)](data, strict) - }) - data._id = data.name + "@" + data.version -} - -function ucFirst (string) { - return string.charAt(0).toUpperCase() + string.slice(1); -} diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/safe_format.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/safe_format.js deleted file mode 100644 index 08517f142..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/safe_format.js +++ /dev/null @@ -1,9 +0,0 @@ -var util = require('util') - -module.exports = function() { - var args = Array.prototype.slice.call(arguments, 0) - args.forEach(function(arg) { - if (!arg) throw new TypeError('Bad arguments.') - }) - return util.format.apply(null, arguments) -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/typos.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/typos.json deleted file mode 100644 index 73590c0a2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/typos.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "topLevel": { - "dependancies": "dependencies" - ,"dependecies": "dependencies" - ,"depdenencies": "dependencies" - ,"devEependencies": "devDependencies" - ,"depends": "dependencies" - ,"dev-dependencies": "devDependencies" - ,"devDependences": "devDependencies" - ,"devDepenencies": "devDependencies" - ,"devdependencies": "devDependencies" - ,"repostitory": "repository" - ,"repo": "repository" - ,"prefereGlobal": "preferGlobal" - ,"hompage": "homepage" - ,"hampage": "homepage" - ,"autohr": "author" - ,"autor": "author" - ,"contributers": "contributors" - ,"publicationConfig": "publishConfig" - ,"script": "scripts" - }, - "bugs": { "web": "url", "name": "url" }, - "script": { "server": "start", "tests": "test" } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/warning_messages.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/warning_messages.json deleted file mode 100644 index 5fd19f322..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/lib/warning_messages.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "repositories": "'repositories' (plural) Not supported. Please pick one as the 'repository' field" - ,"missingRepository": "No repository field." - ,"brokenGitUrl": "Probably broken git url: %s" - ,"nonObjectScripts": "scripts must be an object" - ,"nonStringScript": "script values must be string commands" - ,"nonArrayFiles": "Invalid 'files' member" - ,"invalidFilename": "Invalid filename in 'files' list: %s" - ,"nonArrayBundleDependencies": "Invalid 'bundleDependencies' list. Must be array of package names" - ,"nonStringBundleDependency": "Invalid bundleDependencies member: %s" - ,"nonDependencyBundleDependency": "Non-dependency in bundleDependencies: %s" - ,"nonObjectDependencies": "%s field must be an object" - ,"nonStringDependency": "Invalid dependency: %s %s" - ,"deprecatedArrayDependencies": "specifying %s as array is deprecated" - ,"deprecatedModules": "modules field is deprecated" - ,"nonArrayKeywords": "keywords should be an array of strings" - ,"nonStringKeyword": "keywords should be an array of strings" - ,"conflictingName": "%s is also the name of a node core module." - ,"nonStringDescription": "'description' field should be a string" - ,"missingDescription": "No description" - ,"missingReadme": "No README data" - ,"missingLicense": "No license field." - ,"nonEmailUrlBugsString": "Bug string field must be url, email, or {email,url}" - ,"nonUrlBugsUrlField": "bugs.url field must be a string url. Deleted." - ,"nonEmailBugsEmailField": "bugs.email field must be a string email. Deleted." - ,"emptyNormalizedBugs": "Normalized value of bugs field is an empty object. Deleted." - ,"nonUrlHomepage": "homepage field must be a string url. Deleted." - ,"invalidLicense": "license should be a valid SPDX license expression" - ,"missingProtocolHomepage": "homepage field must start with a protocol." - ,"typo": "%s should probably be %s." -} diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/package.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/package.json deleted file mode 100644 index cc4b320e6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/package.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "_args": [ - [ - "normalize-package-data@^2.3.2", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/read-pkg" - ] - ], - "_from": "normalize-package-data@>=2.3.2 <3.0.0", - "_id": "normalize-package-data@2.3.5", - "_inCache": true, - "_installable": true, - "_location": "/normalize-package-data", - "_nodeVersion": "5.0.0", - "_npmUser": { - "email": "me@re-becca.org", - "name": "iarna" - }, - "_npmVersion": "3.3.6", - "_phantomChildren": {}, - "_requested": { - "name": "normalize-package-data", - "raw": "normalize-package-data@^2.3.2", - "rawSpec": "^2.3.2", - "scope": null, - "spec": ">=2.3.2 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/read-pkg" - ], - "_resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz", - "_shasum": "8d924f142960e1777e7ffe170543631cc7cb02df", - "_shrinkwrap": null, - "_spec": "normalize-package-data@^2.3.2", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/read-pkg", - "author": { - "email": "merynstol@gmail.com", - "name": "Meryn Stol" - }, - "bugs": { - "url": "https://github.com/npm/normalize-package-data/issues" - }, - "contributors": [ - { - "email": "i@izs.me", - "name": "Isaac Z. Schlueter" - }, - { - "email": "merynstol@gmail.com", - "name": "Meryn Stol" - }, - { - "email": "rok@kowalski.gd", - "name": "Robert Kowalski" - } - ], - "dependencies": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "description": "Normalizes data that can be found in package.json files.", - "devDependencies": { - "async": "^1.5.0", - "tap": "^2.2.0", - "underscore": "^1.8.3" - }, - "directories": {}, - "dist": { - "shasum": "8d924f142960e1777e7ffe170543631cc7cb02df", - "tarball": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz" - }, - "gitHead": "3dc7756af20b3b1b24c6d75302448ca3659e0a65", - "homepage": "https://github.com/npm/normalize-package-data#readme", - "license": "BSD-2-Clause", - "main": "lib/normalize.js", - "maintainers": [ - { - "email": "me@re-becca.org", - "name": "iarna" - }, - { - "email": "isaacs@npmjs.com", - "name": "isaacs" - }, - { - "email": "merynstol@gmail.com", - "name": "meryn" - }, - { - "email": "ogd@aoaioxxysz.net", - "name": "othiym23" - }, - { - "email": "kat@sykosomatic.org", - "name": "zkat" - } - ], - "name": "normalize-package-data", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/npm/normalize-package-data.git" - }, - "scripts": { - "test": "tap test/*.js" - }, - "version": "2.3.5" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/basic.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/basic.js deleted file mode 100644 index 12c403ec7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/basic.js +++ /dev/null @@ -1,34 +0,0 @@ -var tap = require("tap") -var normalize = require("../lib/normalize") -var path = require("path") -var fs = require("fs") - -tap.test("basic test", function (t) { - var p = path.resolve(__dirname, "./fixtures/read-package-json.json") - fs.readFile (p, function (err, contents) { - if (err) throw err; - var originalData = JSON.parse(contents.toString()) - var data = JSON.parse(contents.toString()) - normalize(data) - t.ok(data) - verifyFields(t, data, originalData) - t.end() - }) -}) - -function verifyFields (t, normalized, original) { - t.equal(normalized.version, original.version, "Version field stays same") - t.equal(normalized._id, normalized.name + "@" + normalized.version, "It gets good id.") - t.equal(normalized.name, original.name, "Name stays the same.") - t.type(normalized.author, "object", "author field becomes object") - t.deepEqual(normalized.scripts, original.scripts, "scripts field (object) stays same") - t.equal(normalized.main, original.main) - // optional deps are folded in. - t.deepEqual(normalized.optionalDependencies, - original.optionalDependencies) - t.has(normalized.dependencies, original.optionalDependencies, "opt depedencies are copied into dependencies") - t.has(normalized.dependencies, original.dependencies, "regular depedencies stay in place") - t.deepEqual(normalized.devDependencies, original.devDependencies) - t.type(normalized.bugs, "object", "bugs should become object") - t.equal(normalized.bugs.url, "https://github.com/isaacs/read-package-json/issues") -} diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/consistency.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/consistency.js deleted file mode 100644 index 4082be25c..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/consistency.js +++ /dev/null @@ -1,36 +0,0 @@ -var tap = require("tap") -var normalize = require("../lib/normalize") -var path = require("path") -var fs = require("fs") -var _ = require("underscore") -var async = require("async") - -var data, clonedData -var warn - -tap.test("consistent normalization", function(t) { - path.resolve(__dirname, "./fixtures/read-package-json.json") - fs.readdir (__dirname + "/fixtures", function (err, entries) { - // entries = ['coffee-script.json'] // uncomment to limit to a specific file - verifyConsistency = function(entryName, next) { - warn = function(msg) { - // t.equal("",msg) // uncomment to have some kind of logging of warnings - } - filename = __dirname + "/fixtures/" + entryName - fs.readFile(filename, function(err, contents) { - if (err) return next(err) - data = JSON.parse(contents.toString()) - normalize(data, warn) - clonedData = _.clone(data) - normalize(data, warn) - t.deepEqual(clonedData, data, - "Normalization of " + entryName + " is consistent.") - next(null) - }) // fs.readFile - } // verifyConsistency - async.forEach(entries, verifyConsistency, function(err) { - if (err) throw err - t.end() - }) - }) // fs.readdir -}) // tap.test \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/dependencies.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/dependencies.js deleted file mode 100644 index 3e493ab02..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/dependencies.js +++ /dev/null @@ -1,44 +0,0 @@ -var tap = require("tap") -var normalize = require("../lib/normalize") - -var warningMessages = require("../lib/warning_messages.json") -var safeFormat = require("../lib/safe_format") - -tap.test("warn if dependency contains anything else but a string", function(t) { - var a - var warnings = [] - function warn(w) { - warnings.push(w) - } - normalize(a={ - dependencies: { "a": 123}, - devDependencies: { "b": 456}, - optionalDependencies: { "c": 789} - }, warn) - - var wanted1 = safeFormat(warningMessages.nonStringDependency, "a", 123) - var wanted2 = safeFormat(warningMessages.nonStringDependency, "b", 456) - var wanted3 = safeFormat(warningMessages.nonStringDependency, "c", 789) - t.ok(~warnings.indexOf(wanted1), wanted1) - t.ok(~warnings.indexOf(wanted2), wanted2) - t.ok(~warnings.indexOf(wanted3), wanted3) - t.end() -}) - -tap.test("warn if bundleDependencies array contains anything else but strings", function(t) { - var a - var warnings = [] - function warn(w) { - warnings.push(w) - } - normalize(a={ - bundleDependencies: ["abc", 123, {foo:"bar"}] - }, warn) - - var wanted1 = safeFormat(warningMessages.nonStringBundleDependency, 123) - var wanted2 = safeFormat(warningMessages.nonStringBundleDependency, {foo:"bar"}) - var wanted2 = safeFormat(warningMessages.nonDependencyBundleDependency, "abc") - t.ok(~warnings.indexOf(wanted1), wanted1) - t.ok(~warnings.indexOf(wanted2), wanted2) - t.end() -}) diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/async.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/async.json deleted file mode 100644 index 5e652a6c6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/async.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "async", - "description": "Higher-order functions and common patterns for asynchronous code", - "main": "./lib/async", - "author": "Caolan McMahon", - "version": "0.2.6", - "repository" : { - "type" : "git", - "url" : "http://github.com/caolan/async.git" - }, - "bugs" : { - "url" : "http://github.com/caolan/async/issues" - }, - "licenses" : [ - { - "type" : "MIT", - "url" : "http://github.com/caolan/async/raw/master/LICENSE" - } - ], - "devDependencies": { - "nodeunit": ">0.0.0", - "uglify-js": "1.2.x", - "nodelint": ">0.0.0" - }, - "jam": { - "main": "lib/async.js", - "include": [ - "lib/async.js", - "README.md", - "LICENSE" - ] - }, - "scripts": { - "test": "nodeunit test/test-async.js" - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/badscripts.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/badscripts.json deleted file mode 100644 index 25feb4c8f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/badscripts.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "bad-scripts-package", - "version": "0.0.1", - "scripts": "foo" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/bcrypt.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/bcrypt.json deleted file mode 100644 index 56e6d81b3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/bcrypt.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "bcrypt", - "description": "A bcrypt library for NodeJS.", - "keywords": [ - "bcrypt", - "password", - "auth", - "authentication", - "encryption", - "crypt", - "crypto" - ], - "main": "./bcrypt", - "version": "0.7.5", - "author": "Nick Campbell (http://github.com/ncb000gt)", - "engines": { - "node": ">= 0.6.0" - }, - "repository": { - "type": "git", - "url": "http://github.com/ncb000gt/node.bcrypt.js.git" - }, - "licenses": [ - { - "type": "MIT" - } - ], - "bugs": { - "url": "http://github.com/ncb000gt/node.bcrypt.js/issues" - }, - "scripts": { - "test": "node-gyp configure build && nodeunit test" - }, - "dependencies": { - "bindings": "1.0.0" - }, - "devDependencies": { - "nodeunit": ">=0.6.4" - }, - "contributors": [ - "Antonio Salazar Cardozo (https://github.com/Shadowfiend)", - "Van Nguyen (https://github.com/thegoleffect)", - "David Trejo (https://github.com/dtrejo)", - "Ben Glow (https://github.com/pixelglow)", - "NewITFarmer.com <> (https://github.com/newitfarmer)", - "Alfred Westerveld (https://github.com/alfredwesterveld)", - "Vincent Côté-Roy (https://github.com/vincentcr)", - "Lloyd Hilaiel (https://github.com/lloyd)", - "Roman Shtylman (https://github.com/shtylman)", - "Vadim Graboys (https://github.com/vadimg)", - "Ben Noorduis <> (https://github.com/bnoordhuis)", - "Nate Rajlich (https://github.com/tootallnate)", - "Sean McArthur (https://github.com/seanmonstar)", - "Fanie Oosthuysen (https://github.com/weareu)" - ] -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/coffee-script.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/coffee-script.json deleted file mode 100644 index a0b60a9d3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/coffee-script.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "coffee-script", - "description": "Unfancy JavaScript", - "keywords": ["javascript", "language", "coffeescript", "compiler"], - "author": "Jeremy Ashkenas", - "version": "1.6.2", - "licenses": [{ - "type": "MIT", - "url": "https://raw.github.com/jashkenas/coffee-script/master/LICENSE" - }], - "engines": { - "node": ">=0.8.0" - }, - "directories" : { - "lib" : "./lib/coffee-script" - }, - "main" : "./lib/coffee-script/coffee-script", - "bin": { - "coffee": "./bin/coffee", - "cake": "./bin/cake" - }, - "scripts": { - "test": "node ./bin/cake test" - }, - "homepage": "http://coffeescript.org", - "bugs": "https://github.com/jashkenas/coffee-script/issues", - "repository": { - "type": "git", - "url": "git://github.com/jashkenas/coffee-script.git" - }, - "devDependencies": { - "uglify-js": "~2.2", - "jison": ">=0.2.0" - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/http-server.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/http-server.json deleted file mode 100644 index 90c28863a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/http-server.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "http-server", - "preferGlobal": true, - "version": "0.3.0", - "author": "Nodejitsu ", - "description": "a simple zero-configuration command-line http server", - "contributors": [ - { - "name": "Marak Squires", - "email": "marak@nodejitsu.com" - } - ], - "bin": { - "http-server": "./bin/http-server" - }, - "scripts": { - "start": "node ./bin/http-server", - "test": "vows --spec --isolate", - "predeploy": "echo This will be run before deploying the app", - "postdeploy": "echo This will be run after deploying the app" - }, - "main": "./lib/http-server", - "repository": { - "type": "git", - "url": "https://github.com/nodejitsu/http-server.git" - }, - "keywords": [ - "cli", - "http", - "server" - ], - "dependencies" : { - "colors" : "*", - "flatiron" : "0.1.x", - "optimist" : "0.2.x", - "union" : "0.1.x", - "ecstatic" : "0.1.x", - "plates" : "https://github.com/flatiron/plates/tarball/master" - }, - "analyze": false, - "devDependencies": { - "vows" : "0.5.x", - "request" : "2.1.x" - }, - "bundledDependencies": [ - "union", - "ecstatic" - ], - "license": "MIT", - "engines": { - "node": ">=0.6" - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/movefile.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/movefile.json deleted file mode 100644 index 593387570..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/movefile.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "movefile", - "description": "rename implementation working over devices", - "version": "0.2.0", - "author": "yazgazan ", - "main": "./build/Release/movefile", - "keywords": ["move", "file", "rename"], - "repository": "git://github.com/yazgazan/movefile.git", - "directories": { - "lib": "./build/Release/" - }, - "scripts": { - "install": "./node_modules/node-gyp/bin/node-gyp.js configure && ./node_modules/node-gyp/bin/node-gyp.js build" - }, - "engines": { - "node": "*" - }, - "dependencies": { - "node-gyp": "~0.9.1" - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/no-description.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/no-description.json deleted file mode 100644 index 9ea70b6bf..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/no-description.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "foo-bar-package", - "version": "0.0.1" -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/node-module_exist.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/node-module_exist.json deleted file mode 100644 index acc053825..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/node-module_exist.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "node-module_exist", - "description": "Find if a NodeJS module is available to require or not", - "version": "0.0.1", - "main": "module_exist.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git@gist.github.com:3135914.git" - }, - "homepage": "https://github.com/FGRibreau", - "author": { - "name": "Francois-Guillaume Ribreau", - "url": "http://fgribreau.com.com/" - }, - "devDependencies": { - "nodeunit": "~0.7.4" - }, - "keywords": [ - "core", - "modules" - ], - "license": "MIT" -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/npm.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/npm.json deleted file mode 100644 index 2262b3139..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/npm.json +++ /dev/null @@ -1,135 +0,0 @@ -{ - "version": "1.2.17", - "name": "npm", - "publishConfig": { - "proprietary-attribs": false - }, - "description": "A package manager for node", - "keywords": [ - "package manager", - "modules", - "install", - "package.json" - ], - "preferGlobal": true, - "config": { - "publishtest": false - }, - "homepage": "https://npmjs.org/doc/", - "author": "Isaac Z. Schlueter (http://blog.izs.me)", - "repository": { - "type": "git", - "url": "https://github.com/isaacs/npm" - }, - "bugs": { - "email": "npm-@googlegroups.com", - "url": "http://github.com/isaacs/npm/issues" - }, - "directories": { - "doc": "./doc", - "man": "./man", - "lib": "./lib", - "bin": "./bin" - }, - "main": "./lib/npm.js", - "bin": "./bin/npm-cli.js", - "dependencies": { - "semver": "~1.1.2", - "ini": "~1.1.0", - "slide": "1", - "abbrev": "~1.0.4", - "graceful-fs": "~1.2.0", - "minimatch": "~0.2.11", - "nopt": "~2.1.1", - "rimraf": "2", - "request": "~2.9", - "which": "1", - "tar": "~0.1.17", - "fstream": "~0.1.22", - "block-stream": "*", - "inherits": "1", - "mkdirp": "~0.3.3", - "read": "~1.0.4", - "lru-cache": "~2.3.0", - "node-gyp": "~0.9.3", - "fstream-npm": "~0.1.3", - "uid-number": "0", - "archy": "0", - "chownr": "0", - "npmlog": "0", - "ansi": "~0.1.2", - "npm-registry-client": "~0.2.18", - "read-package-json": "~0.3.0", - "read-installed": "0", - "glob": "~3.1.21", - "init-package-json": "0.0.6", - "osenv": "0", - "lockfile": "~0.3.0", - "retry": "~0.6.0", - "once": "~1.1.1", - "npmconf": "0", - "opener": "~1.3.0", - "chmodr": "~0.1.0", - "cmd-shim": "~1.1.0" - }, - "bundleDependencies": [ - "semver", - "ini", - "slide", - "abbrev", - "graceful-fs", - "minimatch", - "nopt", - "rimraf", - "request", - "which", - "tar", - "fstream", - "block-stream", - "inherits", - "mkdirp", - "read", - "lru-cache", - "node-gyp", - "fstream-npm", - "uid-number", - "archy", - "chownr", - "npmlog", - "ansi", - "npm-registry-client", - "read-package-json", - "read-installed", - "glob", - "init-package-json", - "osenv", - "lockfile", - "retry", - "once", - "npmconf", - "opener", - "chmodr", - "cmd-shim" - ], - "devDependencies": { - "ronn": "~0.3.6", - "tap": "~0.4.0" - }, - "engines": { - "node": ">=0.6", - "npm": "1" - }, - "scripts": { - "test": "node ./test/run.js && tap test/tap/*.js", - "tap": "tap test/tap/*.js", - "prepublish": "node bin/npm-cli.js prune ; rm -rf test/*/*/node_modules ; make -j4 doc", - "dumpconf": "env | grep npm | sort | uniq", - "echo": "node bin/npm-cli.js" - }, - "licenses": [ - { - "type": "MIT +no-false-attribs", - "url": "https://github.com/isaacs/npm/raw/master/LICENSE" - } - ] -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/read-package-json.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/read-package-json.json deleted file mode 100644 index 7d0dae1d5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/read-package-json.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "read-package-json", - "version": "0.1.1", - "author": "Isaac Z. Schlueter (http://blog.izs.me/)", - "description": "The thing npm uses to read package.json files with semantics and defaults and validation", - "repository": { - "type": "git", - "url": "git://github.com/isaacs/read-package-json.git" - }, - "license": "MIT", - "main": "read-json.js", - "scripts": { - "test": "tap test/*.js" - }, - "dependencies": { - "glob": "~3.1.9", - "lru-cache": "~1.1.0", - "semver": "~1.0.14", - "slide": "~1.1.3" - }, - "devDependencies": { - "tap": "~0.2.5" - }, - "optionalDependencies": { - "npmlog": "0", - "graceful-fs": "~1.1.8" - } -} diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/request.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/request.json deleted file mode 100644 index 24189a551..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/request.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "request", - "description": "Simplified HTTP request client.", - "tags": [ - "http", - "simple", - "util", - "utility" - ], - "version": "2.16.7", - "author": "Mikeal Rogers ", - "repository": { - "type": "git", - "url": "http://github.com/mikeal/request.git" - }, - "bugs": { - "url": "http://github.com/mikeal/request/issues" - }, - "engines": [ - "node >= 0.8.0" - ], - "main": "index.js", - "dependencies": { - "form-data": "~0.0.3", - "mime": "~1.2.7", - "hawk": "~0.10.2", - "node-uuid": "~1.4.0", - "cookie-jar": "~0.2.0", - "aws-sign": "~0.2.0", - "oauth-sign": "~0.2.0", - "forever-agent": "~0.2.0", - "tunnel-agent": "~0.2.0", - "json-stringify-safe": "~3.0.0", - "qs": "~0.5.4" - }, - "scripts": { - "test": "node tests/run.js" - } -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/underscore.json b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/underscore.json deleted file mode 100644 index bfc8b3d26..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/fixtures/underscore.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name" : "underscore", - "description" : "JavaScript's functional programming helper library.", - "homepage" : "http://underscorejs.org", - "keywords" : ["util", "functional", "server", "client", "browser"], - "author" : "Jeremy Ashkenas ", - "repository" : {"type": "git", "url": "git://github.com/documentcloud/underscore.git"}, - "main" : "underscore.js", - "version" : "1.4.4", - "devDependencies": { - "phantomjs": "1.9.0-1" - }, - "scripts": { - "test": "phantomjs test/vendor/runner.js test/index.html?noglobals=true" - }, - "license" : "MIT" -} \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/github-urls.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/github-urls.js deleted file mode 100644 index da78160a0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/github-urls.js +++ /dev/null @@ -1,44 +0,0 @@ -var tap = require("tap") -var normalize = require("../lib/normalize") -var fs = require("fs") -var async = require("async") - -var data -var warn - -tap.test("consistent normalization", function(t) { - var entries = [ - 'read-package-json.json', - 'http-server.json', - "movefile.json", - "node-module_exist.json" - ] - var verifyConsistency = function(entryName, next) { - warn = function(msg) { - // t.equal("",msg) // uncomment to have some kind of logging of warnings - } - var filename = __dirname + "/fixtures/" + entryName - fs.readFile(filename, function(err, contents) { - if (err) return next(err) - data = JSON.parse(contents.toString()) - normalize(data, warn) - if(data.name == "node-module_exist") { - t.same(data.bugs.url, "https://gist.github.com/3135914") - } - if(data.name == "read-package-json") { - t.same(data.bugs.url, "https://github.com/isaacs/read-package-json/issues") - } - if(data.name == "http-server") { - t.same(data.bugs.url, "https://github.com/nodejitsu/http-server/issues") - } - if(data.name == "movefile") { - t.same(data.bugs.url, "https://github.com/yazgazan/movefile/issues") - } - next(null) - }) // fs.readFile - } // verifyConsistency - async.forEach(entries, verifyConsistency, function(err) { - if (err) throw err - t.end() - }) -}) // tap.test diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/mixedcase-names.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/mixedcase-names.js deleted file mode 100644 index a62b69938..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/mixedcase-names.js +++ /dev/null @@ -1,32 +0,0 @@ -var test = require('tap').test - -var normalize = require('../') -var fixer = normalize.fixer - -test('mixedcase', function (t) { - t.doesNotThrow(function () { - fixer.fixNameField({name: 'foo'}, true) - }) - - t.doesNotThrow(function () { - fixer.fixNameField({name: 'foo'}, false) - }) - - t.doesNotThrow(function () { - fixer.fixNameField({name: 'foo'}) - }) - - t.throws(function () { - fixer.fixNameField({name: 'Foo'}, true) - }, new Error('Invalid name: "Foo"'), 'should throw an error') - - t.throws(function () { - fixer.fixNameField({name: 'Foo'}, {strict: true}) - }, new Error('Invalid name: "Foo"'), 'should throw an error') - - t.doesNotThrow(function () { - fixer.fixNameField({name: 'Foo'}, {strict: true, allowLegacyCase: true}) - }) - - t.end() -}) diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/normalize.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/normalize.js deleted file mode 100644 index 3926938b6..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/normalize.js +++ /dev/null @@ -1,246 +0,0 @@ -var tap = require("tap") -var fs = require("fs") -var path = require("path") - -var normalize = require("../lib/normalize") -var warningMessages = require("../lib/warning_messages.json") -var safeFormat = require("../lib/safe_format") - -var rpjPath = path.resolve(__dirname,"./fixtures/read-package-json.json") - -tap.test("normalize some package data", function(t) { - var packageData = require(rpjPath) - var warnings = [] - normalize(packageData, function(warning) { - warnings.push(warning) - }) - // there's no readme data in this particular object - t.equal( warnings.length, 1, "There's exactly one warning.") - fs.readFile(rpjPath, function(err, data) { - if(err) throw err - // Various changes have been made - t.notEqual(packageData, JSON.parse(data), "Output is different from input.") - t.end() - }) -}) - -tap.test("runs without passing warning function", function(t) { - var packageData = require(rpjPath) - fs.readFile(rpjPath, function(err, data) { - if(err) throw err - normalize(JSON.parse(data)) - t.ok(true, "If you read this, this means I'm still alive.") - t.end() - }) -}) - -tap.test("empty object", function(t) { - var packageData = {} - var expect = - { name: '', - version: '', - readme: 'ERROR: No README data found!', - _id: '@' } - - var warnings = [] - function warn(m) { - warnings.push(m) - } - normalize(packageData, warn) - t.same(packageData, expect) - t.same(warnings, [ - warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.missingLicense - ]) - t.end() -}) - -tap.test("core module name", function(t) { - var warnings = [] - function warn(m) { - warnings.push(m) - } - var a - normalize(a={ - name: "http", - readme: "read yourself how about", - homepage: 123, - bugs: "what is this i don't even", - repository: "Hello." - }, warn) - - var expect = [ - safeFormat(warningMessages.conflictingName, 'http'), - warningMessages.nonEmailUrlBugsString, - warningMessages.emptyNormalizedBugs, - warningMessages.nonUrlHomepage, - warningMessages.missingLicense - ] - t.same(warnings, expect) - t.end() -}) - -tap.test("urls required", function(t) { - var warnings = [] - function warn(w) { - warnings.push(w) - } - normalize({ - bugs: { - url: "/1", - email: "not an email address" - } - }, warn) - var a - normalize(a={ - readme: "read yourself how about", - homepage: 123, - bugs: "what is this i don't even", - repository: "Hello." - }, warn) - - console.error(a) - - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.nonUrlBugsUrlField, - warningMessages.nonEmailBugsEmailField, - warningMessages.emptyNormalizedBugs, - warningMessages.missingReadme, - warningMessages.missingLicense, - warningMessages.nonEmailUrlBugsString, - warningMessages.emptyNormalizedBugs, - warningMessages.nonUrlHomepage, - warningMessages.missingLicense] - t.same(warnings, expect) - t.end() -}) - -tap.test("homepage field must start with a protocol.", function(t) { - var warnings = [] - function warn(w) { - warnings.push(w) - } - var a - normalize(a={ - homepage: 'example.org' - }, warn) - - console.error(a) - - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.missingProtocolHomepage, - warningMessages.missingLicense] - t.same(warnings, expect) - t.same(a.homepage, 'http://example.org') - t.end() -}) - -tap.test("license field should be a valid SPDX expression", function(t) { - var warnings = [] - function warn(w) { - warnings.push(w) - } - var a - normalize(a={ - license: 'Apache 2' - }, warn) - - console.error(a) - - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.invalidLicense] - t.same(warnings, expect) - t.end() -}) - -tap.test("gist bugs url", function(t) { - var d = { - repository: "git@gist.github.com:123456.git" - } - normalize(d) - t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' }) - t.same(d.bugs, { url: 'https://gist.github.com/123456' }) - t.end(); -}); - -tap.test("singularize repositories", function(t) { - var d = {repositories:["git@gist.github.com:123456.git"]} - normalize(d) - t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' }) - t.end() -}); - -tap.test("treat visionmedia/express as github repo", function(t) { - var d = {repository: {type: "git", url: "visionmedia/express"}} - normalize(d) - t.same(d.repository, { type: "git", url: "git+https://github.com/visionmedia/express.git" }) - t.end() -}); - -tap.test("treat isaacs/node-graceful-fs as github repo", function(t) { - var d = {repository: {type: "git", url: "isaacs/node-graceful-fs"}} - normalize(d) - t.same(d.repository, { type: "git", url: "git+https://github.com/isaacs/node-graceful-fs.git" }) - t.end() -}); - -tap.test("homepage field will set to github url if repository is a github repo", function(t) { - var a - normalize(a={ - repository: { type: "git", url: "https://github.com/isaacs/node-graceful-fs" } - }) - t.same(a.homepage, 'https://github.com/isaacs/node-graceful-fs#readme') - t.end() -}) - -tap.test("homepage field will set to github gist url if repository is a gist", function(t) { - var a - normalize(a={ - repository: { type: "git", url: "git@gist.github.com:123456.git" } - }) - t.same(a.homepage, 'https://gist.github.com/123456') - t.end() -}) - -tap.test("homepage field will set to github gist url if repository is a shorthand reference", function(t) { - var a - normalize(a={ - repository: { type: "git", url: "sindresorhus/chalk" } - }) - t.same(a.homepage, 'https://github.com/sindresorhus/chalk#readme') - t.end() -}) - -tap.test("don't mangle github shortcuts in dependencies", function(t) { - var d = {dependencies: {"node-graceful-fs": "isaacs/node-graceful-fs"}} - normalize(d) - t.same(d.dependencies, {"node-graceful-fs": "github:isaacs/node-graceful-fs" }) - t.end() -}); - -tap.test("deprecation warning for array in dependencies fields", function(t) { - var a - var warnings = [] - function warn(w) { - warnings.push(w) - } - normalize(a={ - dependencies: [], - devDependencies: [], - optionalDependencies: [] - }, warn) - t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'dependencies')), "deprecation warning") - t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'devDependencies')), "deprecation warning") - t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'optionalDependencies')), "deprecation warning") - t.end() -}) diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/normalize.js~ b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/normalize.js~ deleted file mode 100644 index de6f1ce5b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/normalize.js~ +++ /dev/null @@ -1,253 +0,0 @@ -var tap = require("tap") -var fs = require("fs") -var path = require("path") - -var globals = Object.keys(global) - -var normalize = require("../lib/normalize") -var warningMessages = require("../lib/warning_messages.json") -var safeFormat = require("../lib/safe_format") - -var rpjPath = path.resolve(__dirname,"./fixtures/read-package-json.json") - -tap.test("normalize some package data", function(t) { - var packageData = require(rpjPath) - var warnings = [] - normalize(packageData, function(warning) { - warnings.push(warning) - }) - // there's no readme data in this particular object - t.equal( warnings.length, 1, "There's exactly one warning.") - fs.readFile(rpjPath, function(err, data) { - if(err) throw err - // Various changes have been made - t.notEqual(packageData, JSON.parse(data), "Output is different from input.") - t.end() - }) -}) - -tap.test("runs without passing warning function", function(t) { - var packageData = require(rpjPath) - fs.readFile(rpjPath, function(err, data) { - if(err) throw err - normalize(JSON.parse(data)) - t.ok(true, "If you read this, this means I'm still alive.") - t.end() - }) -}) - -tap.test("empty object", function(t) { - var packageData = {} - var expect = - { name: '', - version: '', - readme: 'ERROR: No README data found!', - _id: '@' } - - var warnings = [] - function warn(m) { - warnings.push(m) - } - normalize(packageData, warn) - t.same(packageData, expect) - t.same(warnings, [ - warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.missingLicense - ]) - t.end() -}) - -tap.test("core module name", function(t) { - var warnings = [] - function warn(m) { - warnings.push(m) - } - var a - normalize(a={ - name: "http", - readme: "read yourself how about", - homepage: 123, - bugs: "what is this i don't even", - repository: "Hello." - }, warn) - - var expect = [ - safeFormat(warningMessages.conflictingName, 'http'), - warningMessages.nonEmailUrlBugsString, - warningMessages.emptyNormalizedBugs, - warningMessages.nonUrlHomepage, - warningMessages.missingLicense - ] - t.same(warnings, expect) - t.end() -}) - -tap.test("urls required", function(t) { - var warnings = [] - function warn(w) { - warnings.push(w) - } - normalize({ - bugs: { - url: "/1", - email: "not an email address" - } - }, warn) - var a - normalize(a={ - readme: "read yourself how about", - homepage: 123, - bugs: "what is this i don't even", - repository: "Hello." - }, warn) - - console.error(a) - - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.nonUrlBugsUrlField, - warningMessages.nonEmailBugsEmailField, - warningMessages.emptyNormalizedBugs, - warningMessages.missingReadme, - warningMessages.missingLicense, - warningMessages.nonEmailUrlBugsString, - warningMessages.emptyNormalizedBugs, - warningMessages.nonUrlHomepage, - warningMessages.missingLicense] - t.same(warnings, expect) - t.end() -}) - -tap.test("homepage field must start with a protocol.", function(t) { - var warnings = [] - function warn(w) { - warnings.push(w) - } - var a - normalize(a={ - homepage: 'example.org' - }, warn) - - console.error(a) - - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.missingProtocolHomepage, - warningMessages.missingLicense] - t.same(warnings, expect) - t.same(a.homepage, 'http://example.org') - t.end() -}) - -tap.test("license field should be a valid SPDX expression", function(t) { - var warnings = [] - function warn(w) { - warnings.push(w) - } - var a - normalize(a={ - license: 'Apache 2' - }, warn) - - console.error(a) - - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.invalidLicense] - t.same(warnings, expect) - t.end() -}) - -tap.test("gist bugs url", function(t) { - var d = { - repository: "git@gist.github.com:123456.git" - } - normalize(d) - t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' }) - t.same(d.bugs, { url: 'https://gist.github.com/123456' }) - t.end(); -}); - -tap.test("singularize repositories", function(t) { - var d = {repositories:["git@gist.github.com:123456.git"]} - normalize(d) - t.same(d.repository, { type: 'git', url: 'git+ssh://git@gist.github.com/123456.git' }) - t.end() -}); - -tap.test("treat visionmedia/express as github repo", function(t) { - var d = {repository: {type: "git", url: "visionmedia/express"}} - normalize(d) - t.same(d.repository, { type: "git", url: "git+https://github.com/visionmedia/express.git" }) - t.end() -}); - -tap.test("treat isaacs/node-graceful-fs as github repo", function(t) { - var d = {repository: {type: "git", url: "isaacs/node-graceful-fs"}} - normalize(d) - t.same(d.repository, { type: "git", url: "git+https://github.com/isaacs/node-graceful-fs.git" }) - t.end() -}); - -tap.test("homepage field will set to github url if repository is a github repo", function(t) { - var a - normalize(a={ - repository: { type: "git", url: "https://github.com/isaacs/node-graceful-fs" } - }) - t.same(a.homepage, 'https://github.com/isaacs/node-graceful-fs#readme') - t.end() -}) - -tap.test("homepage field will set to github gist url if repository is a gist", function(t) { - var a - normalize(a={ - repository: { type: "git", url: "git@gist.github.com:123456.git" } - }) - t.same(a.homepage, 'https://gist.github.com/123456') - t.end() -}) - -tap.test("homepage field will set to github gist url if repository is a shorthand reference", function(t) { - var a - normalize(a={ - repository: { type: "git", url: "sindresorhus/chalk" } - }) - t.same(a.homepage, 'https://github.com/sindresorhus/chalk#readme') - t.end() -}) - -tap.test("don't mangle github shortcuts in dependencies", function(t) { - var d = {dependencies: {"node-graceful-fs": "isaacs/node-graceful-fs"}} - normalize(d) - t.same(d.dependencies, {"node-graceful-fs": "github:isaacs/node-graceful-fs" }) - t.end() -}); - -tap.test("deprecation warning for array in dependencies fields", function(t) { - var a - var warnings = [] - function warn(w) { - warnings.push(w) - } - normalize(a={ - dependencies: [], - devDependencies: [], - optionalDependencies: [] - }, warn) - t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'dependencies')), "deprecation warning") - t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'devDependencies')), "deprecation warning") - t.ok(~warnings.indexOf(safeFormat(warningMessages.deprecatedArrayDependencies, 'optionalDependencies')), "deprecation warning") - t.end() -}) - -tap.test('no new globals', function(t) { - t.same(Object.keys(global), globals) - t.end() -}) diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/scoped.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/scoped.js deleted file mode 100644 index 82d2a543f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/scoped.js +++ /dev/null @@ -1,59 +0,0 @@ -var test = require("tap").test - -var fixNameField = require("../lib/fixer.js").fixNameField -var fixBinField = require("../lib/fixer.js").fixBinField - -test("a simple scoped module has a valid name", function (t) { - var data = {name : "@org/package"} - fixNameField(data, false) - t.equal(data.name, "@org/package", "name was unchanged") - - t.end() -}) - -test("'org@package' is not a valid name", function (t) { - t.throws(function () { - fixNameField({name : "org@package"}, false) - }, "blows up as expected") - - t.end() -}) - -test("'org=package' is not a valid name", function (t) { - t.throws(function () { - fixNameField({name : "org=package"}, false) - }, "blows up as expected") - - t.end() -}) - -test("'@org=sub/package' is not a valid name", function (t) { - t.throws(function () { - fixNameField({name : "@org=sub/package"}, false) - }, "blows up as expected") - - t.end() -}) - -test("'@org/' is not a valid name", function (t) { - t.throws(function () { - fixNameField({name : "@org/"}, false) - }, "blows up as expected") - - t.end() -}) - -test("'@/package' is not a valid name", function (t) { - t.throws(function () { - fixNameField({name : "@/package"}, false) - }, "blows up as expected") - - t.end() -}) - -test("name='@org/package', bin='bin.js' is bin={package:'bin.js'}", function (t) { - var obj = {name : "@org/package", bin: "bin.js"} - fixBinField(obj) - t.isDeeply(obj.bin, {package: 'bin.js'}) - t.end() -}) diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/scripts.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/scripts.js deleted file mode 100644 index 473596eef..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/scripts.js +++ /dev/null @@ -1,24 +0,0 @@ -var tap = require("tap") -var normalize = require("../lib/normalize") -var path = require("path") -var fs = require("fs") - -tap.test("bad scripts", function (t) { - var p = path.resolve(__dirname, "./fixtures/badscripts.json") - fs.readFile (p, function (err, contents) { - if (err) throw err - var originalData = JSON.parse(contents.toString()) - var data = JSON.parse(contents.toString()) - normalize(data) - t.ok(data) - verifyFields(t, data, originalData) - t.end() - }) -}) - -function verifyFields (t, normalized, original) { - t.equal(normalized.version, original.version, "Version field stays same") - t.equal(normalized.name, original.name, "Name stays the same.") - // scripts is not an object, so it should be deleted - t.notOk(normalized.scripts) -} diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/strict.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/strict.js deleted file mode 100644 index 40e09dcf2..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/strict.js +++ /dev/null @@ -1,54 +0,0 @@ -var test = require("tap").test - -var normalize = require("../") - -test("strict", function(t) { - var threw - - try { - threw = false - normalize({name: "X"}, true) - } catch (er) { - threw = true - t.equal(er.message, 'Invalid name: "X"') - } finally { - t.equal(threw, true) - } - - try { - threw = false - normalize({name:" x "}, true) - } catch (er) { - threw = true - t.equal(er.message, 'Invalid name: " x "') - } finally { - t.equal(threw, true) - } - - try { - threw = false - normalize({name:"x",version:"01.02.03"}, true) - } catch (er) { - threw = true - t.equal(er.message, 'Invalid version: "01.02.03"') - } finally { - t.equal(threw, true) - } - - // these should not throw - var slob = {name:" X ",version:"01.02.03",dependencies:{ - y:">01.02.03", - z:"! 99 $$ASFJ(Aawenf90awenf as;naw.3j3qnraw || an elephant" - }} - normalize(slob, false) - t.same(slob, - { name: 'X', - version: '1.2.3', - dependencies: - { y: '>01.02.03', - z: '! 99 $$ASFJ(Aawenf90awenf as;naw.3j3qnraw || an elephant' }, - readme: 'ERROR: No README data found!', - _id: 'X@1.2.3' }) - - t.end() -}) diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/typo.js b/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/typo.js deleted file mode 100644 index 0cd3eb49d..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-package-data/test/typo.js +++ /dev/null @@ -1,133 +0,0 @@ -var test = require('tap').test - -var normalize = require('../') -var typos = require('../lib/typos.json') -var warningMessages = require("../lib/warning_messages.json") -var safeFormat = require("../lib/safe_format") - -test('typos', function(t) { - var warnings = [] - function warn(m) { - warnings.push(m) - } - - var typoMessage = safeFormat.bind(undefined, warningMessages.typo) - - var expect = - [ warningMessages.missingRepository, - warningMessages.missingLicense, - typoMessage('dependancies', 'dependencies'), - typoMessage('dependecies', 'dependencies'), - typoMessage('depdenencies', 'dependencies'), - typoMessage('devEependencies', 'devDependencies'), - typoMessage('depends', 'dependencies'), - typoMessage('dev-dependencies', 'devDependencies'), - typoMessage('devDependences', 'devDependencies'), - typoMessage('devDepenencies', 'devDependencies'), - typoMessage('devdependencies', 'devDependencies'), - typoMessage('repostitory', 'repository'), - typoMessage('repo', 'repository'), - typoMessage('prefereGlobal', 'preferGlobal'), - typoMessage('hompage', 'homepage'), - typoMessage('hampage', 'homepage'), - typoMessage('autohr', 'author'), - typoMessage('autor', 'author'), - typoMessage('contributers', 'contributors'), - typoMessage('publicationConfig', 'publishConfig') ] - - normalize({"dependancies": "dependencies" - ,"dependecies": "dependencies" - ,"depdenencies": "dependencies" - ,"devEependencies": "devDependencies" - ,"depends": "dependencies" - ,"dev-dependencies": "devDependencies" - ,"devDependences": "devDependencies" - ,"devDepenencies": "devDependencies" - ,"devdependencies": "devDependencies" - ,"repostitory": "repository" - ,"repo": "repository" - ,"prefereGlobal": "preferGlobal" - ,"hompage": "homepage" - ,"hampage": "homepage" - ,"autohr": "author" - ,"autor": "author" - ,"contributers": "contributors" - ,"publicationConfig": "publishConfig" - ,readme:"asdf" - ,name:"name" - ,version:"1.2.5"}, warn) - - t.same(warnings, expect) - - warnings.length = 0 - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - typoMessage("bugs['web']", "bugs['url']"), - typoMessage("bugs['name']", "bugs['url']"), - warningMessages.nonUrlBugsUrlField, - warningMessages.emptyNormalizedBugs, - warningMessages.missingReadme, - warningMessages.missingLicense] - - normalize({name:"name" - ,version:"1.2.5" - ,bugs:{web:"url",name:"url"}}, warn) - - t.same(warnings, expect) - - warnings.length = 0 - var expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.missingLicense, - typoMessage('script', 'scripts') ] - - normalize({name:"name" - ,version:"1.2.5" - ,script:{server:"start",tests:"test"}}, warn) - - t.same(warnings, expect) - - warnings.length = 0 - expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - typoMessage("scripts['server']", "scripts['start']"), - typoMessage("scripts['tests']", "scripts['test']"), - warningMessages.missingReadme, - warningMessages.missingLicense] - - normalize({name:"name" - ,version:"1.2.5" - ,scripts:{server:"start",tests:"test"}}, warn) - - t.same(warnings, expect) - - warnings.length = 0 - expect = - [ warningMessages.missingDescription, - warningMessages.missingRepository, - warningMessages.missingReadme, - warningMessages.missingLicense] - - normalize({name:"name" - ,version:"1.2.5" - ,scripts:{server:"start",tests:"test" - ,start:"start",test:"test"}}, warn) - - t.same(warnings, expect) - - warnings.length = 0 - expect = [] - - normalize({private: true - ,name:"name" - ,version:"1.2.5" - ,scripts:{server:"start",tests:"test"}}, warn) - - t.same(warnings, expect) - - t.end(); -}) diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-path/LICENSE b/fundamentals/bug-challenge-es6/node_modules/normalize-path/LICENSE deleted file mode 100644 index fa30c4cb3..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-path/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014-2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-path/README.md b/fundamentals/bug-challenge-es6/node_modules/normalize-path/README.md deleted file mode 100644 index e75d4bd0a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-path/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# normalize-path [![NPM version](https://badge.fury.io/js/normalize-path.svg)](http://badge.fury.io/js/normalize-path) [![Build Status](https://travis-ci.org/jonschlinkert/normalize-path.svg)](https://travis-ci.org/jonschlinkert/normalize-path) - -> Normalize file path slashes to be unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes. - -## Install - -Install with [npm](https://www.npmjs.com/) - -```sh -$ npm i normalize-path --save -``` - -## Usage - -```js -var normalize = require('normalize-path'); - -normalize('\\foo\\bar\\baz\\'); -//=> '/foo/bar/baz' - -normalize('./foo/bar/baz/'); -//=> './foo/bar/baz' -``` - -Pass `false` as the last argument to **not** strip trailing slashes: - -```js -normalize('./foo/bar/baz/', false); -//=> './foo/bar/baz/' - -normalize('foo\\bar\\baz\\', false); -//=> 'foo/bar/baz/' -``` - -## Related - -Other useful libraries for working with paths in node.js: - -* [contains-path](https://www.npmjs.com/package/contains-path): Return true if a file path contains the given path. | [homepage](https://github.com/jonschlinkert/contains-path) -* [ends-with](https://www.npmjs.com/package/ends-with): Returns `true` if the given `string` or `array` ends with `suffix` using strict equality for… [more](https://www.npmjs.com/package/ends-with) | [homepage](https://github.com/jonschlinkert/ends-with) -* [is-absolute](https://www.npmjs.com/package/is-absolute): Returns true if a file path is absolute. | [homepage](https://github.com/jonschlinkert/is-absolute) -* [is-relative](https://www.npmjs.com/package/is-relative): Returns `true` if the path appears to be relative. | [homepage](https://github.com/jonschlinkert/is-relative) -* [parse-filepath](https://www.npmjs.com/package/parse-filepath): Parse a filepath into an object. Falls back on the native node.js `path.parse` method if… [more](https://www.npmjs.com/package/parse-filepath) | [homepage](https://github.com/jonschlinkert/parse-filepath) -* [path-ends-with](https://www.npmjs.com/package/path-ends-with): Return `true` if a file path ends with the given string/suffix. | [homepage](https://github.com/jonschlinkert/path-ends-with) -* [path-segments](https://www.npmjs.com/package/path-segments): Get n specific segments of a file path, e.g. first 2, last 3, etc. | [homepage](https://github.com/jonschlinkert/path-segments) -* [rewrite-ext](https://www.npmjs.com/package/rewrite-ext): Automatically re-write the destination extension of a filepath based on the source extension. e.g … [more](https://www.npmjs.com/package/rewrite-ext) | [homepage](https://github.com/jonschlinkert/rewrite-ext) -* [unixify](https://www.npmjs.com/package/unixify): Convert Windows file paths to unix paths. | [homepage](https://github.com/jonschlinkert/unixify) - -## Running tests - -Install dev dependencies: - -```sh -$ npm i -d && npm test -``` - -## Contributing - -Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/normalize-path/issues/new). - -## Author - -**Jon Schlinkert** - -+ [github/jonschlinkert](https://github.com/jonschlinkert) -+ [twitter/jonschlinkert](http://twitter.com/jonschlinkert) - -## License - -Copyright © 2015 Jon Schlinkert -Released under the MIT license. - -*** - -_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on November 17, 2015._ \ No newline at end of file diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-path/index.js b/fundamentals/bug-challenge-es6/node_modules/normalize-path/index.js deleted file mode 100644 index 137f6015b..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-path/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/*! - * normalize-path - * - * Copyright (c) 2014-2015, Jon Schlinkert. - * Licensed under the MIT License - */ - -module.exports = function normalizePath(str, stripTrailing) { - if (typeof str !== 'string') { - throw new TypeError('expected a string'); - } - str = str.replace(/[\\\/]+/g, '/'); - if (stripTrailing !== false) { - str = str.replace(/\/$/, ''); - } - return str; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/normalize-path/package.json b/fundamentals/bug-challenge-es6/node_modules/normalize-path/package.json deleted file mode 100644 index 5fd0fe418..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/normalize-path/package.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "_args": [ - [ - "normalize-path@^2.0.1", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch" - ] - ], - "_from": "normalize-path@>=2.0.1 <3.0.0", - "_id": "normalize-path@2.0.1", - "_inCache": true, - "_installable": true, - "_location": "/normalize-path", - "_nodeVersion": "5.0.0", - "_npmUser": { - "email": "github@sellside.com", - "name": "jonschlinkert" - }, - "_npmVersion": "3.3.6", - "_phantomChildren": {}, - "_requested": { - "name": "normalize-path", - "raw": "normalize-path@^2.0.1", - "rawSpec": "^2.0.1", - "scope": null, - "spec": ">=2.0.1 <3.0.0", - "type": "range" - }, - "_requiredBy": [ - "/micromatch" - ], - "_resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", - "_shasum": "47886ac1662760d4261b7d979d241709d3ce3f7a", - "_shrinkwrap": null, - "_spec": "normalize-path@^2.0.1", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/micromatch", - "author": { - "name": "Jon Schlinkert", - "url": "https://github.com/jonschlinkert" - }, - "bugs": { - "url": "https://github.com/jonschlinkert/normalize-path/issues" - }, - "dependencies": {}, - "description": "Normalize file path slashes to be unix-like forward slashes. Also condenses repeat slashes to a single slash and removes and trailing slashes.", - "devDependencies": { - "benchmarked": "^0.1.1", - "minimist": "^1.2.0", - "mocha": "*" - }, - "directories": {}, - "dist": { - "shasum": "47886ac1662760d4261b7d979d241709d3ce3f7a", - "tarball": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "ca536e0e8755d3ed04f3ba4d21cc9e122e0f749f", - "homepage": "https://github.com/jonschlinkert/normalize-path", - "keywords": [ - "backslash", - "file", - "filepath", - "fix", - "forward", - "fp", - "fs", - "normalize", - "path", - "slash", - "slashes", - "trailing", - "unix", - "urix" - ], - "license": "MIT", - "main": "index.js", - "maintainers": [ - { - "email": "brian.woodward@gmail.com", - "name": "doowb" - }, - { - "email": "github@sellside.com", - "name": "jonschlinkert" - } - ], - "name": "normalize-path", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/jonschlinkert/normalize-path.git" - }, - "scripts": { - "test": "mocha" - }, - "verb": { - "related": { - "description": "Other useful libraries for working with paths in node.js:", - "list": [ - "rewrite-ext", - "contains-path", - "ends-with", - "path-ends-with", - "path-segments", - "is-absolute", - "is-relative", - "parse-filepath", - "unixify" - ] - } - }, - "version": "2.0.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/number-is-nan/index.js b/fundamentals/bug-challenge-es6/node_modules/number-is-nan/index.js deleted file mode 100644 index 79be4b9cb..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/number-is-nan/index.js +++ /dev/null @@ -1,4 +0,0 @@ -'use strict'; -module.exports = Number.isNaN || function (x) { - return x !== x; -}; diff --git a/fundamentals/bug-challenge-es6/node_modules/number-is-nan/license b/fundamentals/bug-challenge-es6/node_modules/number-is-nan/license deleted file mode 100644 index 654d0bfe9..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/number-is-nan/license +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/fundamentals/bug-challenge-es6/node_modules/number-is-nan/package.json b/fundamentals/bug-challenge-es6/node_modules/number-is-nan/package.json deleted file mode 100644 index b19e8396a..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/number-is-nan/package.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "_args": [ - [ - "number-is-nan@^1.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/is-finite" - ] - ], - "_from": "number-is-nan@>=1.0.0 <2.0.0", - "_id": "number-is-nan@1.0.1", - "_inCache": true, - "_installable": true, - "_location": "/number-is-nan", - "_nodeVersion": "4.5.0", - "_npmOperationalInternal": { - "host": "packages-12-west.internal.npmjs.com", - "tmp": "tmp/number-is-nan-1.0.1.tgz_1475212313367_0.9480371843092144" - }, - "_npmUser": { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - }, - "_npmVersion": "2.15.9", - "_phantomChildren": {}, - "_requested": { - "name": "number-is-nan", - "raw": "number-is-nan@^1.0.0", - "rawSpec": "^1.0.0", - "scope": null, - "spec": ">=1.0.0 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/is-finite" - ], - "_resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "_shasum": "097b602b53422a522c1afb8790318336941a011d", - "_shrinkwrap": null, - "_spec": "number-is-nan@^1.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/is-finite", - "author": { - "email": "sindresorhus@gmail.com", - "name": "Sindre Sorhus", - "url": "sindresorhus.com" - }, - "bugs": { - "url": "https://github.com/sindresorhus/number-is-nan/issues" - }, - "dependencies": {}, - "description": "ES2015 Number.isNaN() ponyfill", - "devDependencies": { - "ava": "*" - }, - "directories": {}, - "dist": { - "shasum": "097b602b53422a522c1afb8790318336941a011d", - "tarball": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz" - }, - "engines": { - "node": ">=0.10.0" - }, - "files": [ - "index.js" - ], - "gitHead": "ed9cdac3f428cc929b61bb230da42c87477af4b9", - "homepage": "https://github.com/sindresorhus/number-is-nan#readme", - "keywords": [ - "es2015", - "ecmascript", - "ponyfill", - "polyfill", - "shim", - "number", - "is", - "nan", - "not" - ], - "license": "MIT", - "maintainers": [ - { - "email": "sindresorhus@gmail.com", - "name": "sindresorhus" - } - ], - "name": "number-is-nan", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git+https://github.com/sindresorhus/number-is-nan.git" - }, - "scripts": { - "test": "ava" - }, - "version": "1.0.1" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/number-is-nan/readme.md b/fundamentals/bug-challenge-es6/node_modules/number-is-nan/readme.md deleted file mode 100644 index 246350871..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/number-is-nan/readme.md +++ /dev/null @@ -1,28 +0,0 @@ -# number-is-nan [![Build Status](https://travis-ci.org/sindresorhus/number-is-nan.svg?branch=master)](https://travis-ci.org/sindresorhus/number-is-nan) - -> ES2015 [`Number.isNaN()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN) [ponyfill](https://ponyfill.com) - - -## Install - -``` -$ npm install --save number-is-nan -``` - - -## Usage - -```js -var numberIsNan = require('number-is-nan'); - -numberIsNan(NaN); -//=> true - -numberIsNan('unicorn'); -//=> false -``` - - -## License - -MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/LICENSE b/fundamentals/bug-challenge-es6/node_modules/nwmatcher/LICENSE deleted file mode 100644 index 2d7106849..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2007-2016 Diego Perini (http://www.iport.it) - -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/fundamentals/bug-challenge-es6/node_modules/nwmatcher/README.md b/fundamentals/bug-challenge-es6/node_modules/nwmatcher/README.md deleted file mode 100644 index bd35cee27..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# [NWMatcher](http://dperini.github.io/nwmatcher/) - -A fast CSS selector engine and matcher. - - -## Installation - -To include NWMatcher in a standard web page: - -```html - -``` - -To use it with Node.js: - -``` -$ npm install nwmatcher -``` - -NWMatcher currently supports browsers (as a global, `NW.Dom`) and headless environments (as a CommonJS module). - - -## Supported Selectors - -Here is a list of all the CSS2/CSS3 [Supported selectors](https://github.com/dperini/nwmatcher/wiki/CSS-supported-selectors). - - -## Features and Compliance - -You can read more about NWMatcher [features and compliance](https://github.com/dperini/nwmatcher/wiki/Features-and-compliance) on the wiki. - - -## API - -### DOM Selection - -#### `first( selector, context )` - -Returns a reference to the first element matching `selector`, starting at `context`. - -#### `match( element, selector, context )` - -Returns `true` if `element` matches `selector`, starting at `context`; returns `false` otherwise. - -#### `select( selector, context, callback )` - -Returns an array of all the elements matching `selector`, starting at `context`. If `callback` is provided, it is invoked for each matching element. - - -### DOM Helpers - -#### `byId( id, from )` - -Returns a reference to the first element with ID `id`, optionally filtered to descendants of the element `from`. - -#### `byTag( tag, from )` - -Returns an array of elements having the specified tag name `tag`, optionally filtered to descendants of the element `from`. - -#### `byClass( class, from )` - -Returns an array of elements having the specified class name `class`, optionally filtered to descendants of the element `from`. - -#### `byName( name, from )` - -Returns an array of elements having the specified value `name` for their name attribute, optionally filtered to descendants of the element `from`. - -#### `getAttribute( element, attribute )` - -Return the value read from the attribute of `element` with name `attribute`, as a string. - -#### `hasAttribute( element, attribute )` - -Returns true `element` has an attribute with name `attribute` set; returns `false` otherwise. - - -### Engine Configuration - -#### `configure( options )` - -The following options exist and can be set to `true` or `false`: - -* `CACHING`: enable caching of results -* `SHORTCUTS`: allow accepting mangled selectors -* `SIMPLENOT`: disallow nested complex `:not()` selectors -* `UNIQUE_ID`: disallow multiple elements with same ID -* `USE_QSAPI`: enable native `querySelectorAll` if available -* `USE_HTML5`: enable special HTML5 rules, related to the relationship between `:checked` and `:selected` -* `VERBOSITY`: choose between throwing errors or just console warnings - -Example: - -```js -NW.Dom.configure( { USE_QSAPI: false, VERBOSITY: false } ); -``` - -#### `registerOperator( symbol, resolver )` - -Registers a new symbol and its matching resolver in the operators table. Example: - -```js -NW.Dom.registerOperator( '!=', 'n!="%m"' ); -``` - -#### `registerSelector( name, rexp, func )` - -Registers a new selector, with the matching regular expression and the appropriate resolver function, in the selectors table. diff --git a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/package.json b/fundamentals/bug-challenge-es6/node_modules/nwmatcher/package.json deleted file mode 100644 index c68bdc543..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/package.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "_args": [ - [ - "nwmatcher@>= 1.3.7 < 2.0.0", - "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jsdom" - ] - ], - "_from": "nwmatcher@>=1.3.7 <2.0.0", - "_id": "nwmatcher@1.3.9", - "_inCache": true, - "_installable": true, - "_location": "/nwmatcher", - "_nodeVersion": "6.8.1", - "_npmOperationalInternal": { - "host": "packages-18-east.internal.npmjs.com", - "tmp": "tmp/nwmatcher-1.3.9.tgz_1477433034745_0.856502516195178" - }, - "_npmUser": { - "email": "diego.perini@gmail.com", - "name": "diego" - }, - "_npmVersion": "3.10.8", - "_phantomChildren": {}, - "_requested": { - "name": "nwmatcher", - "raw": "nwmatcher@>= 1.3.7 < 2.0.0", - "rawSpec": ">= 1.3.7 < 2.0.0", - "scope": null, - "spec": ">=1.3.7 <2.0.0", - "type": "range" - }, - "_requiredBy": [ - "/jsdom" - ], - "_resolved": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.9.tgz", - "_shasum": "8bab486ff7fa3dfd086656bbe8b17116d3692d2a", - "_shrinkwrap": null, - "_spec": "nwmatcher@>= 1.3.7 < 2.0.0", - "_where": "/Users/joost/Work/Projects/HackYourFuture/javascript/fundamentals/bug-challenge-es6/node_modules/jsdom", - "author": { - "email": "diego.perini@gmail.com", - "name": "Diego Perini", - "url": "http://www.iport.it/" - }, - "bugs": { - "url": "http://github.com/dperini/nwmatcher/issues" - }, - "dependencies": {}, - "description": "A CSS3-compliant JavaScript selector engine.", - "devDependencies": {}, - "directories": {}, - "dist": { - "shasum": "8bab486ff7fa3dfd086656bbe8b17116d3692d2a", - "tarball": "https://registry.npmjs.org/nwmatcher/-/nwmatcher-1.3.9.tgz" - }, - "ender": "./lib/ender/bridge.js", - "gitHead": "a3ff759c4ea45a03f1e30e0a8ff59313c98aa134", - "homepage": "http://javascript.nwbox.com/NWMatcher/", - "keywords": [ - "css", - "matcher", - "selector", - "ender" - ], - "licenses": [ - { - "type": "MIT", - "url": "http://javascript.nwbox.com/NWMatcher/MIT-LICENSE" - } - ], - "main": "./src/nwmatcher", - "maintainers": [ - { - "email": "rod@vagg.org", - "name": "rvagg" - }, - { - "email": "diego.perini@gmail.com", - "name": "diego" - } - ], - "name": "nwmatcher", - "optionalDependencies": {}, - "readme": "ERROR: No README data found!", - "repository": { - "type": "git", - "url": "git://github.com/dperini/nwmatcher.git" - }, - "scripts": {}, - "version": "1.3.9" -} diff --git a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-cache.js b/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-cache.js deleted file mode 100644 index da11010e0..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-cache.js +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (C) 2007-2016 Diego Perini - * All rights reserved. - * - * Caching/memoization module for NWMatcher - * - * Added capabilities: - * - * - Mutation Events are feature tested and used safely - * - handle caching different document types HTML/XML/SVG - * - store result sets for different selectors / contexts - * - simultaneously control mutation on multiple documents - * - */ - -(function(global) { - - // export the public API for CommonJS implementations, - // for headless JS engines or for standard web browsers - var Dom = - // as CommonJS/NodeJS module - typeof exports == 'object' ? exports : - // create or extend NW namespace - ((global.NW || (global.NW = { })) && - (global.NW.Dom || (global.NW.Dom = { })), - - Contexts = { }, - Results = { }, - - isEnabled = false, - isExpired = true, - isPaused = false, - - context = global.document, - root = context.documentElement, - - // timing pauses - now = 0, - - // last time cache initialization was called - lastCalled = 0, - - // minimum time allowed between calls to the cache initialization - minCacheRest = 15, //ms - - mutationTest = - function(type, callback) { - var isSupported = false, - root = document.documentElement, - div = document.createElement('div'), - handler = function() { isSupported = true; }; - root.insertBefore(div, root.firstChild); - div.addEventListener(type, handler, true); - if (callback && callback.call) callback(div); - div.removeEventListener(type, handler, true); - root.removeChild(div); - return isSupported; - }, - - // check for Mutation Events, DOMAttrModified should be - // enough to ensure DOMNodeInserted/DOMNodeRemoved exist - HACKED_MUTATION_EVENTS = false, - - NATIVE_MUTATION_EVENTS = root.addEventListener ? - mutationTest('DOMAttrModified', function(e) { e.setAttribute('id', 'nw'); }) : false, - - loadResults = - function(selector, from, doc, root) { - if (isEnabled && !isPaused) { - if (!isExpired) { - if (Results[selector] && Contexts[selector] === from) { - return Results[selector]; - } - } else { - // pause caching while we are getting - // hammered by dom mutations (jdalton) - now = (new Date).getTime(); - if ((now - lastCalled) < minCacheRest) { - isPaused = isExpired = true; - setTimeout(function() { isPaused = false; }, minCacheRest); - } else setCache(true, doc); - lastCalled = now; - } - } - return undefined; - }, - - saveResults = - function(selector, from, doc, data) { - Contexts[selector] = from; - Results[selector] = data; - return; - }, - - /*-------------------------------- CACHING ---------------------------------*/ - - // invoked by mutation events to expire cached parts - mutationWrapper = - function(event) { - var d = event.target.ownerDocument || event.target; - stopMutation(d); - expireCache(d); - }, - - // append mutation events - startMutation = - function(d) { - if (!d.isCaching && d.addEventListener) { - // FireFox/Opera/Safari/KHTML have support for Mutation Events - d.addEventListener('DOMAttrModified', mutationWrapper, true); - d.addEventListener('DOMNodeInserted', mutationWrapper, true); - d.addEventListener('DOMNodeRemoved', mutationWrapper, true); - d.isCaching = true; - } - }, - - // remove mutation events - stopMutation = - function(d) { - if (d.isCaching && d.removeEventListener) { - d.removeEventListener('DOMAttrModified', mutationWrapper, true); - d.removeEventListener('DOMNodeInserted', mutationWrapper, true); - d.removeEventListener('DOMNodeRemoved', mutationWrapper, true); - d.isCaching = false; - } - }, - - // enable/disable context caching system - // @d optional document context (iframe, xml document) - // script loading context will be used as default context - setCache = - function(enable, d) { - if (!!enable) { - isExpired = false; - startMutation(d); - } else { - isExpired = true; - stopMutation(d); - } - isEnabled = !!enable; - }, - - // expire complete cache - // can be invoked by Mutation Events or - // programmatically by other code/scripts - // document context is mandatory no checks - expireCache = - function(d) { - isExpired = true; - Contexts = { }; - Results = { }; - }; - - if (!NATIVE_MUTATION_EVENTS && root.addEventListener && Element && Element.prototype) { - if (mutationTest('DOMNodeInserted', function(e) { e.appendChild(document.createElement('div')); }) && - mutationTest('DOMNodeRemoved', function(e) { e.removeChild(e.appendChild(document.createElement('div'))); })) { - HACKED_MUTATION_EVENTS = true; - Element.prototype._setAttribute = Element.prototype.setAttribute; - Element.prototype.setAttribute = - function(name, val) { - this._setAttribute(name, val); - mutationWrapper({ - target: this, - type: 'DOMAttrModified', - attrName: name, - attrValue: val }); - }; - } - } - - isEnabled = NATIVE_MUTATION_EVENTS || HACKED_MUTATION_EVENTS; - - /*------------------------------- PUBLIC API -------------------------------*/ - - // save results into cache - Dom.saveResults = saveResults; - - // load results from cache - Dom.loadResults = loadResults; - - // expire DOM tree cache - Dom.expireCache = expireCache; - - // enable/disable cache - Dom.setCache = setCache; - -})(this); diff --git a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-jquery.js b/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-jquery.js deleted file mode 100644 index 54df400b7..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-jquery.js +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2007-2016 Diego Perini - * All rights reserved. - * - * this is just a small example to show - * how an extension for NWMatcher could be - * adapted to handle special jQuery selectors - * - * Child Selectors - * :even, :odd, :eq, :lt, :gt, :first, :last, :nth - * - * Pseudo Selectors - * :has, :button, :header, :input, :checkbox, :radio, :file, :image - * :password, :reset, :submit, :text, :hidden, :visible, :parent - * - */ - -// for structural pseudo-classes extensions -NW.Dom.registerSelector( - 'jquery:child', - /^\:((?:(nth|eq|lt|gt)\(([^()]*)\))|(?:even|odd|first|last))(.*)/i, - (function(global) { - - return function(match, source, selector) { - - var status = true, ACCEPT_NODE = NW.Dom.ACCEPT_NODE; - - switch (match[1].toLowerCase()) { - case 'odd': - source = source.replace(ACCEPT_NODE, 'if((x=x^1)==0){' + ACCEPT_NODE + '}'); - break; - case 'even': - source = source.replace(ACCEPT_NODE, 'if((x=x^1)==1){' + ACCEPT_NODE + '}'); - break; - case 'first': - source = 'n=h.getElementsByTagName(e.nodeName);if(n.length&&n[0]===e){' + source + '}'; - break; - case 'last': - source = 'n=h.getElementsByTagName(e.nodeName);if(n.length&&n[n.length-1]===e){' + source + '}'; - break; - default: - switch (match[2].toLowerCase()) { - case 'nth': - source = 'n=h.getElementsByTagName(e.nodeName);if(n.length&&n[' + match[3] + ']===e){' + source + '}'; - break; - case 'eq': - source = source.replace(ACCEPT_NODE, 'if(x++==' + match[3] + '){' + ACCEPT_NODE + '}'); - break; - case 'lt': - source = source.replace(ACCEPT_NODE, 'if(x++<' + match[3] + '){' + ACCEPT_NODE + '}'); - break; - case 'gt': - source = source.replace(ACCEPT_NODE, 'if(x++>' + match[3] + '){' + ACCEPT_NODE + '}'); - break; - default: - status = false; - break; - } - break; - } - - // compiler will add this to "source" - return { - 'source': source, - 'status': status - }; - - }; - - })(this)); - -// for element pseudo-classes extensions -NW.Dom.registerSelector( - 'jquery:pseudo', - /^\:(has|checkbox|file|image|password|radio|reset|submit|text|button|input|header|hidden|visible|parent)(?:\(\s*(["']*)?([^'"()]*)\2\s*\))?(.*)/i, - (function(global) { - - return function(match, source) { - - var status = true, ACCEPT_NODE = NW.Dom.ACCEPT_NODE; - - switch(match[1].toLowerCase()) { - case 'has': - source = source.replace(ACCEPT_NODE, 'if(e.getElementsByTagName("' + match[3].replace(/^\s|\s$/g, '') + '")[0]){' + ACCEPT_NODE + '}'); - break; - case 'checkbox': - case 'file': - case 'image': - case 'password': - case 'radio': - case 'reset': - case 'submit': - case 'text': - // :checkbox, :file, :image, :password, :radio, :reset, :submit, :text - source = 'if(/^' + match[1] + '$/i.test(e.type)){' + source + '}'; - break; - case 'button': - case 'input': - source = 'if(e.type||/button/i.test(e.nodeName)){' + source + '}'; - break; - case 'header': - source = 'if(/h[1-6]/i.test(e.nodeName)){' + source + '}'; - break; - case 'hidden': - source = 'if(!e.offsetWidth&&!e.offsetHeight){' + source + '}'; - break; - case 'visible': - source = 'if(e.offsetWidth||e.offsetHeight){' + source + '}'; - break; - case 'parent': - source += 'if(e.firstChild){' + source + '}'; - break; - default: - status = false; - break; - } - - // compiler will add this to "source" - return { - 'source': source, - 'status': status - }; - - }; - - })(this)); diff --git a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-pseudos.js b/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-pseudos.js deleted file mode 100644 index cc985cd08..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-pseudos.js +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright (C) 2007-2016 Diego Perini - * All rights reserved. - * - * CSS3 pseudo-classes extension for NWMatcher - * - * Added capabilities: - * - * - structural pseudo-classes - * - * :root, :empty, - * :nth-child(), nth-of-type(), - * :nth-last-child(), nth-last-of-type(), - * :first-child, :last-child, :only-child - * :first-of-type, :last-of-type, :only-of-type - * - * - negation, language, target and UI element pseudo-classes - * - * :not(), :target, :lang(), :target - * :link, :visited, :active, :focus, :hover, - * :checked, :disabled, :enabled, :selected - */ - -(function(global) { - - var LINK_NODES = { - 'a': 1, 'A': 1, - 'area': 1, 'AREA': 1, - 'link': 1, 'LINK': 1 - }, - - root = document.documentElement, - - contains = 'compareDocumentPosition' in root ? - function(container, element) { - return (container.compareDocumentPosition(element) & 16) == 16; - } : 'contains' in root ? - function(container, element) { - return element.nodeType == 1 && container.contains(element); - } : - function(container, element) { - while ((element = element.parentNode) && element.nodeType == 1) { - if (element === container) return true; - } - return false; - }, - - isLink = - function(element) { - return element.getAttribute('href') && LINK_NODES[element.nodeName]; - }, - - isEmpty = - function(node) { - node = node.firstChild; - while (node) { - if (node.nodeType == 3 || node.nodeName > '@') return false; - node = node.nextSibling; - } - return true; - }, - - nthElement = - function(element, last) { - var count = 1, succ = last ? 'nextSibling' : 'previousSibling'; - while ((element = element[succ])) { - if (element.nodeName > '@') ++count; - } - return count; - }, - - nthOfType = - function(element, last) { - var count = 1, succ = last ? 'nextSibling' : 'previousSibling', type = element.nodeName; - while ((element = element[succ])) { - if (element.nodeName == type) ++count; - } - return count; - }; - - NW.Dom.Snapshot['contains'] = contains; - - NW.Dom.Snapshot['isLink'] = isLink; - NW.Dom.Snapshot['isEmpty'] = isEmpty; - NW.Dom.Snapshot['nthOfType'] = nthOfType; - NW.Dom.Snapshot['nthElement'] = nthElement; - -})(this); - -NW.Dom.registerSelector( - 'nwmatcher:spseudos', - /^\:(root|empty|(?:first|last|only)(?:-child|-of-type)|nth(?:-last)?(?:-child|-of-type)\(\s*(even|odd|(?:[-+]{0,1}\d*n\s*)?[-+]{0,1}\s*\d*)\s*\))?(.*)/i, - (function(global) { - - return function(match, source) { - - var a, n, b, status = true, test, type; - - switch (match[1]) { - - case 'root': - if (match[3]) - source = 'if(e===h||s.contains(h,e)){' + source + '}'; - else - source = 'if(e===h){' + source + '}'; - break; - - case 'empty': - source = 'if(s.isEmpty(e)){' + source + '}'; - break; - - default: - if (match[1] && match[2]) { - - if (match[2] == 'n') { - source = 'if(e!==h){' + source + '}'; - break; - } else if (match[2] == 'even') { - a = 2; - b = 0; - } else if (match[2] == 'odd') { - a = 2; - b = 1; - } else { - b = ((n = match[2].match(/(-?\d+)$/)) ? parseInt(n[1], 10) : 0); - a = ((n = match[2].match(/(-?\d*)n/i)) ? parseInt(n[1], 10) : 0); - if (n && n[1] == '-') a = -1; - } - test = a > 1 ? - (/last/i.test(match[1])) ? '(n-(' + b + '))%' + a + '==0' : - 'n>=' + b + '&&(n-(' + b + '))%' + a + '==0' : a < -1 ? - (/last/i.test(match[1])) ? '(n-(' + b + '))%' + a + '==0' : - 'n<=' + b + '&&(n-(' + b + '))%' + a + '==0' : a === 0 ? - 'n==' + b : a == -1 ? 'n<=' + b : 'n>=' + b; - source = - 'if(e!==h){' + - 'n=s[' + (/-of-type/i.test(match[1]) ? '"nthOfType"' : '"nthElement"') + ']' + - '(e,' + (/last/i.test(match[1]) ? 'true' : 'false') + ');' + - 'if(' + test + '){' + source + '}' + - '}'; - - } else if (match[1]) { - - a = /first/i.test(match[1]) ? 'previous' : 'next'; - n = /only/i.test(match[1]) ? 'previous' : 'next'; - b = /first|last/i.test(match[1]); - type = /-of-type/i.test(match[1]) ? '&&n.nodeName!==e.nodeName' : '&&n.nodeName<"@"'; - source = 'if(e!==h){' + - ( 'n=e;while((n=n.' + a + 'Sibling)' + type + ');if(!n){' + (b ? source : - 'n=e;while((n=n.' + n + 'Sibling)' + type + ');if(!n){' + source + '}') + '}' ) + '}'; - - } else { - - status = false; - - } - break; - } - - return { - 'source': source, - 'status': status - }; - - }; - - })(this)); - -NW.Dom.registerSelector( - 'nwmatcher:dpseudos', - /^\:(link|visited|target|active|focus|hover|checked|disabled|enabled|selected|lang\(([-\w]{2,})\)|not\(\s*(:nth(?:-last)?(?:-child|-of-type)\(\s*(?:even|odd|(?:[-+]{0,1}\d*n\s*)?[-+]{0,1}\s*\d*)\s*\)|[^()]*)\s*\))?(.*)/i, - (function(global) { - - var doc = global.document, - Config = NW.Dom.Config, - Tokens = NW.Dom.Tokens, - - reTrimSpace = RegExp('^\\s+|\\s+$', 'g'), - - reSimpleNot = RegExp('^((?!:not)' + - '(' + Tokens.prefixes + '|' + Tokens.identifier + - '|\\([^()]*\\))+|\\[' + Tokens.attributes + '\\])$'); - - return function(match, source) { - - var expr, status = true, test; - - switch (match[1].match(/^\w+/)[0]) { - - case 'not': - expr = match[3].replace(reTrimSpace, ''); - if (Config.SIMPLENOT && !reSimpleNot.test(expr)) { - NW.Dom.emit('Negation pseudo-class only accepts simple selectors "' + selector + '"'); - } else { - if ('compatMode' in doc) { - source = 'if(!' + NW.Dom.compile(expr, '', false) + '(e,s,r,d,h,g)){' + source + '}'; - } else { - source = 'if(!s.match(e, "' + expr.replace(/\x22/g, '\\"') + '",g)){' + source +'}'; - } - } - break; - - case 'checked': - source = 'if((typeof e.form!=="undefined"&&(/^(?:radio|checkbox)$/i).test(e.type)&&e.checked)' + - (Config.USE_HTML5 ? '||(/^option$/i.test(e.nodeName)&&(e.selected||e.checked))' : '') + - '){' + source + '}'; - break; - - case 'disabled': - source = 'if(((typeof e.form!=="undefined"' + - (Config.USE_HTML5 ? '' : '&&!(/^hidden$/i).test(e.type)') + - ')||s.isLink(e))&&e.disabled===true){' + source + '}'; - break; - - case 'enabled': - source = 'if(((typeof e.form!=="undefined"' + - (Config.USE_HTML5 ? '' : '&&!(/^hidden$/i).test(e.type)') + - ')||s.isLink(e))&&e.disabled===false){' + source + '}'; - break; - - case 'lang': - test = ''; - if (match[2]) test = match[2].substr(0, 2) + '-'; - source = 'do{(n=e.lang||"").toLowerCase();' + - 'if((n==""&&h.lang=="' + match[2].toLowerCase() + '")||' + - '(n&&(n=="' + match[2].toLowerCase() + - '"||n.substr(0,3)=="' + test.toLowerCase() + '")))' + - '{' + source + 'break;}}while((e=e.parentNode)&&e!==g);'; - break; - - case 'target': - source = 'if(e.id==d.location.hash.slice(1)){' + source + '}'; - break; - - case 'link': - source = 'if(s.isLink(e)&&!e.visited){' + source + '}'; - break; - - case 'visited': - source = 'if(s.isLink(e)&&e.visited){' + source + '}'; - break; - - case 'active': - source = 'if(e===d.activeElement){' + source + '}'; - break; - - case 'hover': - source = 'if(e===d.hoverElement){' + source + '}'; - break; - - case 'focus': - source = 'hasFocus' in doc ? - 'if(e===d.activeElement&&d.hasFocus()&&(e.type||e.href||typeof e.tabIndex=="number")){' + source + '}' : - 'if(e===d.activeElement&&(e.type||e.href)){' + source + '}'; - break; - - case 'selected': - source = 'if(/^option$/i.test(e.nodeName)&&(e.selected||e.checked)){' + source + '}'; - break; - - default: - status = false; - break; - } - - return { - 'source': source, - 'status': status - }; - - }; - - })(this)); diff --git a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-shortcuts.js b/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-shortcuts.js deleted file mode 100644 index 2f611106f..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-shortcuts.js +++ /dev/null @@ -1,35 +0,0 @@ -NW.Dom.shortcuts = (function() { - - // match missing R/L context - var nextID = 0, - reLeftContext = /^[\x20\t\n\r\f]*[>+~]/, - reRightContext = /[>+~][\x20\t\n\r\f]*$/; - - return function(selector, from, alt) { - - // add left context if missing - if (reLeftContext.test(selector)) { - if (from.nodeType == 9) { - selector = '* ' + selector; - } else if (/html|body/i.test(from.nodeName)) { - selector = from.nodeName + ' ' + selector; - } else if (alt) { - selector = NW.Dom.shortcuts(selector, alt); - } else if (from.nodeType == 1 && from.id) { - selector = '#' + from.id + ' ' + selector; - } else { - ++nextID; - selector = '#' + (from.id = 'NW' + nextID) + ' ' + selector; - //NW.Dom.emit('Unable to resolve a context for the shortcut selector "' + selector + '"'); - } - } - - // add right context if missing - if (reRightContext.test(selector)) { - selector += ' *'; - } - - return selector; - }; - -})(); diff --git a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-traversal.js b/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-traversal.js deleted file mode 100644 index 9d2b62ff5..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-traversal.js +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Element Traversal methods from Juriy Zaytsev (kangax) - * used to emulate Prototype up/down/previous/next methods - */ - -(function(D){ - - // TODO: all of this needs tests - var match = D.match, select = D.select, root = document.documentElement, - - // Use the Element Traversal API if available. - nextElement = 'nextElementSibling', - previousElement = 'previousElementSibling', - parentElement = 'parentElement'; - - // Fall back to the DOM Level 1 API. - if (!(nextElement in root)) nextElement = 'nextSibling'; - if (!(previousElement in root)) previousElement = 'previousSibling'; - if (!(parentElement in root)) parentElement = 'parentNode'; - - function walkElements(property, element, expr) { - var i = 0, isIndex = typeof expr == 'number'; - if (typeof expr == 'undefined') { - isIndex = true; - expr = 0; - } - while ((element = element[property])) { - if (element.nodeType != 1) continue; - if (isIndex) { - ++i; - if (i == expr) return element; - } else if (match(element, expr)) { - return element; - } - } - return null; - } - - /** - * @method up - * @param {HTMLElement} element element to walk from - * @param {String | Number} expr CSS expression or an index - * @return {HTMLElement | null} - */ - function up(element, expr) { - return walkElements(parentElement, element, expr); - } - /** - * @method next - * @param {HTMLElement} element element to walk from - * @param {String | Number} expr CSS expression or an index - * @return {HTMLElement | null} - */ - function next(element, expr) { - return walkElements(nextElement, element, expr); - } - /** - * @method previous - * @param {HTMLElement} element element to walk from - * @param {String | Number} expr CSS expression or an index - * @return {HTMLElement | null} - */ - function previous(element, expr) { - return walkElements(previousElement, element, expr); - } - /** - * @method down - * @param {HTMLElement} element element to walk from - * @param {String | Number} expr CSS expression or an index - * @return {HTMLElement | null} - */ - function down(element, expr) { - var isIndex = typeof expr == 'number', descendants, index, descendant; - if (expr === null) { - element = element.firstChild; - while (element && element.nodeType != 1) element = element[nextElement]; - return element; - } - if (!isIndex && match(element, expr) || isIndex && expr === 0) return element; - descendants = select('*', element); - if (isIndex) return descendants[expr] || null; - index = 0; - while ((descendant = descendants[index]) && !match(descendant, expr)) { ++index; } - return descendant || null; - } - D.up = up; - D.down = down; - D.next = next; - D.previous = previous; -})(NW.Dom); diff --git a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-webforms.js b/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-webforms.js deleted file mode 100644 index 9edfbcd79..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/modules/nwmatcher-webforms.js +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2007-2016 Diego Perini - * All rights reserved. - * - * this is just a small example to show - * how an extension for NWMatcher could be - * adapted to handle WebForms/HTML5 selectors - * - * Pseudo Selectors - * :default, :indeterminate, :optional, :required, - * :valid, :invalid, :in-range, :out-of-range, - * :read-only, :read-write - * :has, :matches (not yet in a defined specification) - * - */ - -// for UI pseudo-classes extensions (WebForms/HTML5) -NW.Dom.registerSelector( - 'html5:pseudos', - /^\:(default|indeterminate|optional|required|valid|invalid|in-range|out-of-range|read-only|read-write)(.*)/, - (function(global) { - - return function(match, source) { - - var status = true, - - HTML5PseudoClasses = { - 'default': 4, 'indeterminate': 4, 'invalid': 4, 'valid': 4, - 'optional': 4, 'required': 4, 'read-write': 4, 'read-only': 4 - }; - - switch (match[1]) { - - // HTML5 UI element states (form controls) - case 'default': - // only radio buttons, check boxes and option elements - source = 'if(((typeof e.form!=="undefined"&&(/radio|checkbox/i).test(e.type))||/option/i.test(e.nodeName))&&(e.defaultChecked||e.defaultSelected)){' + source + '}'; - break; - - case 'indeterminate': - // only radio buttons, check boxes and option elements - source = 'if(typeof e.form!=="undefined"&&(/radio|checkbox/i).test(e.type)&&s.select("[checked]",e.form).length===0){' + source + '}'; - break; - - case 'optional': - // only fields for which "required" applies - source = 'if(typeof e.form!=="undefined"&&typeof e.required!="undefined"&&!e.required){' + source + '}'; - break; - - case 'required': - // only fields for which "required" applies - source = 'if(typeof e.form!=="undefined"&&typeof e.required!="undefined"&&e.required){' + source + '}'; - break; - - case 'read-write': - // only fields for which "readOnly" applies - source = 'if(typeof e.form!=="undefined"&&typeof e.readOnly!="undefined"&&!e.readOnly){' + source + '}'; - break; - - case 'read-only': - // only fields for which "readOnly" applies - source = 'if(typeof e.form!=="undefined"&&typeof e.readOnly!="undefined"&&e.readOnly){' + source + '}'; - break; - - case 'invalid': - // only fields for which validity applies - source = 'if(typeof e.form!=="undefined"&&typeof e.validity=="object"&&!e.validity.valid){' + source + '}'; - break; - - case 'valid': - // only fields for which validity applies - source = 'if(typeof e.form!=="undefined"&&typeof e.validity=="object"&&e.validity.valid){' + source + '}'; - break; - - case 'in-range': - // only fields for which validity applies - source = 'if(typeof e.form!=="undefined"&&' + - '(s.getAttribute(e,"min")||s.getAttribute(e,"max"))&&' + - 'typeof e.validity=="object"&&!e.validity.typeMismatch&&' + - '!e.validity.rangeUnderflow&&!e.validity.rangeOverflow){' + source + '}'; - break; - - case 'out-of-range': - // only fields for which validity applies - source = 'if(typeof e.form!=="undefined"&&' + - '(s.getAttribute(e,"min")||s.getAttribute(e,"max"))&&' + - 'typeof e.validity=="object"&&(e.validity.rangeUnderflow||e.validity.rangeOverflow)){' + source + '}'; - break; - - default: - status = false; - break; - - } - - // compiler will add this to "source" - return { - 'source': source, - 'status': status - }; - - }; - - })(this)); diff --git a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/nwmatcher-base.js b/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/nwmatcher-base.js deleted file mode 100644 index 35a792613..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/nwmatcher-base.js +++ /dev/null @@ -1,785 +0,0 @@ -/* - * Copyright (C) 2007-2016 Diego Perini - * All rights reserved. - * - * nwmatcher-base.js - A fast CSS selector engine and matcher - * - * Author: Diego Perini - * Version: 1.3.9 - * Created: 20070722 - * Release: 20161026 - * - * License: - * http://javascript.nwbox.com/NWMatcher/MIT-LICENSE - * Download: - * http://javascript.nwbox.com/NWMatcher/nwmatcher.js - */ - -(function(global, factory) { - - if (typeof module == 'object' && typeof exports == 'object') { - module.exports = factory; - } else if (typeof define === 'function' && define["amd"]) { - define(factory); - } else { - global.NW || (global.NW = { }); - global.NW.Dom = factory(global); - } - -})(this, function(global) { - - var version = 'nwmatcher-1.3.9', - - doc = global.document, - root = doc.documentElement, - - isSingleMatch, - isSingleSelect, - - lastSlice, - lastContext, - lastPosition, - - lastMatcher, - lastSelector, - - lastPartsMatch, - lastPartsSelect, - - prefixes = '[#.:]?', - operators = '([~*^$|!]?={1})', - whitespace = '[\\x20\\t\\n\\r\\f]', - combinators = '\\x20|[>+~](?=[^>+~])', - pseudoparms = '(?:[-+]?\\d*n)?[-+]?\\d*', - skip_groups = '\\[.*\\]|\\(.*\\)|\\{.*\\}', - - any_esc_chr = '\\\\.', - alphalodash = '[_a-zA-Z]', - non_asc_chr = '[^\\x00-\\x9f]', - escaped_chr = '\\\\[^\\n\\r\\f0-9a-fA-F]', - unicode_chr = '\\\\[0-9a-fA-F]{1,6}(?:\\r\\n|' + whitespace + ')?', - - quotedvalue = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"' + "|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'", - - reSplitGroup = /([^,\\()[\]]+|\[[^[\]]*\]|\[.*\]|\([^()]+\)|\(.*\)|\{[^{}]+\}|\{.*\}|\\.)+/g, - - reTrimSpaces = RegExp('[\\n\\r\\f]|^' + whitespace + '+|' + whitespace + '+$', 'g'), - - reEscapedChars = /\\([0-9a-fA-F]{1,6}[\x20\t\n\r\f]?|.)|([\x22\x27])/g, - - standardValidator, extendedValidator, reValidator, - - attrcheck, attributes, attrmatcher, pseudoclass, - - reOptimizeSelector, reSimpleNot, reSplitToken, - - Optimize, identifier, extensions = '.+', - - Patterns = { - children: RegExp('^' + whitespace + '*\\>' + whitespace + '*(.*)'), - adjacent: RegExp('^' + whitespace + '*\\+' + whitespace + '*(.*)'), - relative: RegExp('^' + whitespace + '*\\~' + whitespace + '*(.*)'), - ancestor: RegExp('^' + whitespace + '+(.*)'), - universal: RegExp('^\\*(.*)') - }, - - Tokens = { - prefixes: prefixes, - identifier: identifier, - attributes: attributes - }, - - QUIRKS_MODE, - XML_DOCUMENT, - - GEBTN = 'getElementsByTagName' in doc, - GEBCN = 'getElementsByClassName' in doc, - - IE_LT_9 = typeof doc.addEventListener != 'function', - - LINK_NODES = { a: 1, A: 1, area: 1, AREA: 1, link: 1, LINK: 1 }, - - ATTR_BOOLEAN = { - checked: 1, disabled: 1, ismap: 1, - multiple: 1, readonly: 1, selected: 1 - }, - - ATTR_DEFAULT = { - value: 'defaultValue', - checked: 'defaultChecked', - selected: 'defaultSelected' - }, - - ATTR_URIDATA = { - action: 2, cite: 2, codebase: 2, data: 2, href: 2, - longdesc: 2, lowsrc: 2, src: 2, usemap: 2 - }, - - INSENSITIVE_MAP = { - 'class': 0, - 'href': 1, 'lang': 1, 'src': 1, 'style': 1, 'title': 1, - 'type': 1, 'xmlns': 1, 'xml:lang': 1, 'xml:space': 1 - }, - - Selectors = { }, - - Operators = { - '=': "n=='%m'", - '^=': "n.indexOf('%m')==0", - '*=': "n.indexOf('%m')>-1", - '|=': "(n+'-').indexOf('%m-')==0", - '~=': "(' '+n+' ').indexOf(' %m ')>-1", - '$=': "n.substr(n.length-'%m'.length)=='%m'" - }, - - concatCall = - function(data, elements, callback) { - var i = -1, element; - while ((element = elements[++i])) { - if (false === callback(data[data.length] = element)) { break; } - } - return data; - }, - - switchContext = - function(from, force) { - var oldDoc = doc; - lastContext = from; - doc = from.ownerDocument || from; - if (force || oldDoc !== doc) { - root = doc.documentElement; - XML_DOCUMENT = doc.createElement('DiV').nodeName == 'DiV'; - QUIRKS_MODE = !XML_DOCUMENT && - typeof doc.compatMode == 'string' ? - doc.compatMode.indexOf('CSS') < 0 : - (function() { - var style = doc.createElement('div').style; - return style && (style.width = 1) && style.width == '1px'; - })(); - - Config.CACHING && Dom.setCache(true, doc); - } - }, - - codePointToUTF16 = - function(codePoint) { - if (codePoint < 1 || codePoint > 0x10ffff || - (codePoint > 0xd7ff && codePoint < 0xe000)) { - return '\\ufffd'; - } - if (codePoint < 0x10000) { - var lowHex = '000' + codePoint.toString(16); - return '\\u' + lowHex.substr(lowHex.length - 4); - } - return '\\u' + (((codePoint - 0x10000) >> 0x0a) + 0xd800).toString(16) + - '\\u' + (((codePoint - 0x10000) % 0x400) + 0xdc00).toString(16); - }, - - stringFromCodePoint = - function(codePoint) { - if (codePoint < 1 || codePoint > 0x10ffff || - (codePoint > 0xd7ff && codePoint < 0xe000)) { - return '\ufffd'; - } - if (codePoint < 0x10000) { - return String.fromCharCode(codePoint); - } - return String.fromCodePoint ? - String.fromCodePoint(codePoint) : - String.fromCharCode( - ((codePoint - 0x10000) >> 0x0a) + 0xd800, - ((codePoint - 0x10000) % 0x400) + 0xdc00); - }, - - convertEscapes = - function(str) { - return str.replace(reEscapedChars, - function(substring, p1, p2) { - return p2 ? '\\' + p2 : - /^[0-9a-fA-F]/.test(p1) ? codePointToUTF16(parseInt(p1, 16)) : - /^[\\\x22\x27]/.test(p1) ? substring : - p1; - } - ); - }, - - unescapeIdentifier = - function(str) { - return str.replace(reEscapedChars, - function(substring, p1, p2) { - return p2 ? p2 : - /^[0-9a-fA-F]/.test(p1) ? stringFromCodePoint(parseInt(p1, 16)) : - /^[\\\x22\x27]/.test(p1) ? substring : - p1; - } - ); - }, - - byIdRaw = - function(id, elements) { - var i = -1, element; - while ((element = elements[++i])) { - if (element.getAttribute('id') == id) { - break; - } - } - return element || null; - }, - - _byId = !IE_LT_9 ? - function(id, from) { - id = (/\\/).test(id) ? unescapeIdentifier(id) : id; - return from.getElementById && from.getElementById(id) || - byIdRaw(id, from.getElementsByTagName('*')); - } : - function(id, from) { - var element = null; - id = (/\\/).test(id) ? unescapeIdentifier(id) : id; - if (XML_DOCUMENT || from.nodeType != 9) { - return byIdRaw(id, from.getElementsByTagName('*')); - } - if ((element = from.getElementById(id)) && - element.name == id && from.getElementsByName) { - return byIdRaw(id, from.getElementsByName(id)); - } - return element; - }, - - byId = - function(id, from) { - from || (from = doc); - if (lastContext !== from) { switchContext(from); } - return _byId(id, from); - }, - - byTagRaw = - function(tag, from) { - var any = tag == '*', element = from, elements = [ ], next = element.firstChild; - any || (tag = tag.toUpperCase()); - while ((element = next)) { - if (element.tagName > '@' && (any || element.tagName.toUpperCase() == tag)) { - elements[elements.length] = element; - } - if ((next = element.firstChild || element.nextSibling)) continue; - while (!next && (element = element.parentNode) && element !== from) { - next = element.nextSibling; - } - } - return elements; - }, - - getAttribute = !IE_LT_9 ? - function(node, attribute) { - return node.getAttribute(attribute); - } : - function(node, attribute) { - attribute = attribute.toLowerCase(); - if (typeof node[attribute] == 'object') { - return node.attributes[attribute] && - node.attributes[attribute].value; - } - return ( - attribute == 'type' ? node.getAttribute(attribute) : - ATTR_URIDATA[attribute] ? node.getAttribute(attribute, 2) : - ATTR_BOOLEAN[attribute] ? node.getAttribute(attribute) ? attribute : 'false' : - (node = node.getAttributeNode(attribute)) && node.value); - }, - - hasAttribute = !IE_LT_9 && root.hasAttribute ? - function(node, attribute) { - return node.hasAttribute(attribute); - } : - function(node, attribute) { - var obj = node.getAttributeNode(attribute = attribute.toLowerCase()); - return ATTR_DEFAULT[attribute] && attribute != 'value' ? - node[ATTR_DEFAULT[attribute]] : obj && obj.specified; - }, - - configure = - function(option) { - if (typeof option == 'string') { return !!Config[option]; } - if (typeof option != 'object') { return Config; } - for (var i in option) { - Config[i] = !!option[i]; - if (i == 'SIMPLENOT') { - matchContexts = { }; - matchResolvers = { }; - selectContexts = { }; - selectResolvers = { }; - } - } - setIdentifierSyntax(); - reValidator = RegExp(Config.SIMPLENOT ? - standardValidator : extendedValidator); - return true; - }, - - emit = - function(message) { - if (Config.VERBOSITY) { throw Error(message); } - if (console && console.log) { - console.log(message); - } - }, - - Config = { - CACHING: false, - ESCAPECHR: true, - NON_ASCII: true, - SELECTOR3: true, - UNICODE16: true, - SHORTCUTS: false, - SIMPLENOT: true, - UNIQUE_ID: true, - USE_HTML5: true, - VERBOSITY: true - }, - - initialize = - function(doc) { - setIdentifierSyntax(); - switchContext(doc, true); - }, - - setIdentifierSyntax = - function() { - - var syntax = '', start = Config['SELECTOR3'] ? '-{2}|' : ''; - - Config['NON_ASCII'] && (syntax += '|' + non_asc_chr); - Config['UNICODE16'] && (syntax += '|' + unicode_chr); - Config['ESCAPECHR'] && (syntax += '|' + escaped_chr); - - syntax += (Config['UNICODE16'] || Config['ESCAPECHR']) ? '' : '|' + any_esc_chr; - - identifier = '-?(?:' + start + alphalodash + syntax + ')(?:-|[0-9]|' + alphalodash + syntax + ')*'; - - attrcheck = '(' + quotedvalue + '|' + identifier + ')'; - attributes = whitespace + '*(' + identifier + ':?' + identifier + ')' + - whitespace + '*(?:' + operators + whitespace + '*' + attrcheck + ')?' + whitespace + '*'; - attrmatcher = attributes.replace(attrcheck, '([\\x22\\x27]*)((?:\\\\?.)*?)\\3'); - - pseudoclass = '((?:' + - pseudoparms + '|' + quotedvalue + '|' + - prefixes + identifier + '|' + - '\\[' + attributes + '\\]|' + - '\\(.+\\)|' + whitespace + '*|' + - ',)+)'; - - standardValidator = - '(?=[\\x20\\t\\n\\r\\f]*[^>+~(){}<>])' + - '(' + - '\\*' + - '|(?:' + prefixes + identifier + ')' + - '|' + combinators + - '|\\[' + attributes + '\\]' + - '|\\(' + pseudoclass + '\\)' + - '|\\{' + extensions + '\\}' + - '|(?:,|' + whitespace + '*)' + - ')+'; - - reSimpleNot = RegExp('^(' + - '(?!:not)' + - '(' + prefixes + identifier + - '|\\([^()]*\\))+' + - '|\\[' + attributes + '\\]' + - ')$'); - - reSplitToken = RegExp('(' + - prefixes + identifier + '|' + - '\\[' + attributes + '\\]|' + - '\\(' + pseudoclass + '\\)|' + - '\\\\.|[^\\x20\\t\\n\\r\\f>+~])+', 'g'); - - reOptimizeSelector = RegExp(identifier + '|^$'); - - Optimize = { - ID: RegExp('^\\*?#(' + identifier + ')|' + skip_groups), - TAG: RegExp('^(' + identifier + ')|' + skip_groups), - CLASS: RegExp('^\\.(' + identifier + '$)|' + skip_groups) - }; - - Patterns.id = RegExp('^#(' + identifier + ')(.*)'); - Patterns.tagName = RegExp('^(' + identifier + ')(.*)'); - Patterns.className = RegExp('^\\.(' + identifier + ')(.*)'); - Patterns.attribute = RegExp('^\\[' + attrmatcher + '\\](.*)'); - - Tokens.identifier = identifier; - Tokens.attributes = attributes; - - extendedValidator = standardValidator.replace(pseudoclass, '.*'); - - reValidator = RegExp(standardValidator); - }, - - ACCEPT_NODE = 'r[r.length]=c[k];if(f&&false===f(c[k]))break main;else continue main;', - REJECT_NODE = IE_LT_9 ? 'if(e.nodeName<"A")continue;' : '', - TO_UPPER_CASE = IE_LT_9 ? '.toUpperCase()' : '', - - compile = - function(selector, source, mode) { - - var parts = typeof selector == 'string' ? selector.match(reSplitGroup) : selector; - - typeof source == 'string' || (source = ''); - - if (parts.length == 1) { - source += compileSelector(parts[0], mode ? ACCEPT_NODE : 'f&&f(k);return true;', mode); - } else { - var i = -1, seen = { }, token; - while ((token = parts[++i])) { - token = token.replace(reTrimSpaces, ''); - if (!seen[token] && (seen[token] = true)) { - source += compileSelector(token, mode ? ACCEPT_NODE : 'f&&f(k);return true;', mode); - } - } - } - - if (mode) { - return Function('c,s,r,d,h,g,f,v', - 'var N,n,x=0,k=-1,e;main:while((e=c[++k])){' + source + '}return r;'); - } else { - return Function('e,s,r,d,h,g,f,v', - 'var N,n,x=0,k=e;' + source + 'return false;'); - } - }, - - FILTER = - 'var z=v[@]||(v[@]=[]),l=z.length-1;' + - 'while(l>=0&&z[l]!==e)--l;' + - 'if(l!==-1){break;}' + - 'z[z.length]=e;', - - compileSelector = - function(selector, source, mode) { - - var k = 0, expr, match, result, status, test, type; - - while (selector) { - - k++; - - if ((match = selector.match(Patterns.universal))) { - expr = ''; - } - - else if ((match = selector.match(Patterns.id))) { - match[1] = (/\\/).test(match[1]) ? convertEscapes(match[1]) : match[1]; - source = 'if(' + (XML_DOCUMENT ? - 's.getAttribute(e,"id")' : - '(e.submit?s.getAttribute(e,"id"):e.id)') + - '=="' + match[1] + '"' + - '){' + source + '}'; - } - - else if ((match = selector.match(Patterns.tagName))) { - source = 'if(e.nodeName' + (XML_DOCUMENT ? - '=="' + match[1] + '"' : TO_UPPER_CASE + - '=="' + match[1].toUpperCase() + '"') + - '){' + source + '}'; - } - - else if ((match = selector.match(Patterns.className))) { - match[1] = (/\\/).test(match[1]) ? convertEscapes(match[1]) : match[1]; - match[1] = QUIRKS_MODE ? match[1].toLowerCase() : match[1]; - source = 'if((n=' + (XML_DOCUMENT ? - 'e.getAttribute("class")' : 'e.className') + - ')&&n.length&&(" "+' + (QUIRKS_MODE ? 'n.toLowerCase()' : 'n') + - '.replace(/' + whitespace + '+/g," ")+" ").indexOf(" ' + match[1] + ' ")>-1' + - '){' + source + '}'; - } - - else if ((match = selector.match(Patterns.attribute))) { - if (match[2] && !Operators[match[2]]) { - emit('Unsupported operator in attribute selectors "' + selector + '"'); - return ''; - } - test = 'false'; - if (match[2] && match[4] && (test = Operators[match[2]])) { - match[4] = (/\\/).test(match[4]) ? convertEscapes(match[4]) : match[4]; - INSENSITIVE_MAP['class'] = QUIRKS_MODE ? 1 : 0; - type = INSENSITIVE_MAP[match[1].toLowerCase()]; - test = test.replace(/\%m/g, type ? match[4].toLowerCase() : match[4]); - } else if (match[2] == '!=' || match[2] == '=') { - test = 'n' + match[2] + '=""'; - } - source = 'if(n=s.hasAttribute(e,"' + match[1] + '")){' + - (match[2] ? 'n=s.getAttribute(e,"' + match[1] + '")' : '') + - (type && match[2] ? '.toLowerCase();' : ';') + - 'if(' + (match[2] ? test : 'n') + '){' + source + '}}'; - } - - else if ((match = selector.match(Patterns.adjacent))) { - source = (mode ? '' : FILTER.replace(/@/g, k)) + source; - source = 'var N' + k + '=e;while(e&&(e=e.previousSibling)){if(e.nodeName>"@"){' + source + 'break;}}e=N' + k + ';'; - } - - else if ((match = selector.match(Patterns.relative))) { - source = (mode ? '' : FILTER.replace(/@/g, k)) + source; - source = 'var N' + k + '=e;e=e.parentNode.firstChild;while(e&&e!==N' + k + '){if(e.nodeName>"@"){' + source + '}e=e.nextSibling;}e=N' + k + ';'; - } - - else if ((match = selector.match(Patterns.children))) { - source = (mode ? '' : FILTER.replace(/@/g, k)) + source; - source = 'var N' + k + '=e;while(e&&e!==h&&e!==g&&(e=e.parentNode)){' + source + 'break;}e=N' + k + ';'; - } - - else if ((match = selector.match(Patterns.ancestor))) { - source = (mode ? '' : FILTER.replace(/@/g, k)) + source; - source = 'var N' + k + '=e;while(e&&e!==h&&e!==g&&(e=e.parentNode)){' + source + '}e=N' + k + ';'; - } - - else { - - expr = false; - status = false; - for (expr in Selectors) { - if ((match = selector.match(Selectors[expr].Expression)) && match[1]) { - result = Selectors[expr].Callback(match, source); - source = result.source; - status = result.status; - if (status) { break; } - } - } - - if (!status) { - emit('Unknown pseudo-class selector "' + selector + '"'); - return ''; - } - - if (!expr) { - emit('Unknown token in selector "' + selector + '"'); - return ''; - } - - } - - if (!match) { - emit('Invalid syntax in selector "' + selector + '"'); - return ''; - } - - selector = match && match[match.length - 1]; - } - - return source; - }, - - match = - function(element, selector, from, callback) { - - var parts; - - if (!(element && element.nodeType == 1)) { - emit('Invalid element argument'); - return false; - } else if (typeof selector != 'string') { - emit('Invalid selector argument'); - return false; - } else if (lastContext !== from) { - switchContext(from || (from = element.ownerDocument)); - } - - selector = selector. - replace(reTrimSpaces, ''). - replace(/\x00|\\$/g, '\ufffd'); - - Config.SHORTCUTS && (selector = Dom.shortcuts(selector, element, from)); - - if (lastMatcher != selector) { - if ((parts = selector.match(reValidator)) && parts[0] == selector) { - isSingleMatch = (parts = selector.match(reSplitGroup)).length < 2; - lastMatcher = selector; - lastPartsMatch = parts; - } else { - emit('The string "' + selector + '", is not a valid CSS selector'); - return false; - } - } else parts = lastPartsMatch; - - if (!matchResolvers[selector] || matchContexts[selector] !== from) { - matchResolvers[selector] = compile(isSingleMatch ? [selector] : parts, '', false); - matchContexts[selector] = from; - } - - return matchResolvers[selector](element, Snapshot, [ ], doc, root, from, callback, { }); - }, - - first = - function(selector, from) { - return select(selector, from, function() { return false; })[0] || null; - }, - - select = - function(selector, from, callback) { - - var i, changed, element, elements, parts, token, original = selector; - - if (arguments.length === 0) { - emit('Not enough arguments'); - return [ ]; - } else if (typeof selector != 'string') { - return [ ]; - } else if (from && !(/1|9|11/).test(from.nodeType)) { - emit('Invalid or illegal context element'); - return [ ]; - } else if (lastContext !== from) { - switchContext(from || (from = doc)); - } - - if (Config.CACHING && (elements = Dom.loadResults(original, from, doc, root))) { - return callback ? concatCall([ ], elements, callback) : elements; - } - - selector = selector. - replace(reTrimSpaces, ''). - replace(/\x00|\\$/g, '\ufffd'); - - Config.SHORTCUTS && (selector = Dom.shortcuts(selector, from)); - - if ((changed = lastSelector != selector)) { - if ((parts = selector.match(reValidator)) && parts[0] == selector) { - isSingleSelect = (parts = selector.match(reSplitGroup)).length < 2; - lastSelector = selector; - lastPartsSelect = parts; - } else { - emit('The string "' + selector + '", is not a valid CSS selector'); - return [ ]; - } - } else parts = lastPartsSelect; - - if (from.nodeType == 11) { - - elements = byTagRaw('*', from); - - } else if (isSingleSelect) { - - if (changed) { - parts = selector.match(reSplitToken); - token = parts[parts.length - 1]; - lastSlice = token.split(':not'); - lastSlice = lastSlice[lastSlice.length - 1]; - lastPosition = selector.length - token.length; - } - - if (Config.UNIQUE_ID && (parts = lastSlice.match(Optimize.ID)) && (token = parts[1])) { - if ((element = _byId(token, from))) { - if (match(element, selector)) { - callback && callback(element); - elements = [element]; - } else elements = [ ]; - } - } - - else if (Config.UNIQUE_ID && (parts = selector.match(Optimize.ID)) && (token = parts[1])) { - if ((element = _byId(token, doc))) { - if ('#' + token == selector) { - callback && callback(element); - elements = [element]; - } else if (/[>+~]/.test(selector)) { - from = element.parentNode; - } else { - from = element; - } - } else elements = [ ]; - } - - if (elements) { - Config.CACHING && Dom.saveResults(original, from, doc, elements); - return elements; - } - - if (!XML_DOCUMENT && GEBTN && (parts = lastSlice.match(Optimize.TAG)) && (token = parts[1])) { - if ((elements = from.getElementsByTagName(token)).length === 0) { return [ ]; } - selector = selector.slice(0, lastPosition) + selector.slice(lastPosition).replace(token, '*'); - } - - else if (!XML_DOCUMENT && GEBCN && (parts = lastSlice.match(Optimize.CLASS)) && (token = parts[1])) { - if ((elements = from.getElementsByClassName(unescapeIdentifier(token))).length === 0) { return [ ]; } - selector = selector.slice(0, lastPosition) + selector.slice(lastPosition).replace('.' + token, - reOptimizeSelector.test(selector.charAt(selector.indexOf(token) - 1)) ? '' : '*'); - } - - } - - if (!elements) { - if (IE_LT_9) { - elements = /^(?:applet|object)$/i.test(from.nodeName) ? from.children : byTagRaw('*', from); - } else { - elements = from.getElementsByTagName('*'); - } - } - - if (!selectResolvers[selector] || selectContexts[selector] !== from) { - selectResolvers[selector] = compile(isSingleSelect ? [selector] : parts, REJECT_NODE, true); - selectContexts[selector] = from; - } - - elements = selectResolvers[selector](elements, Snapshot, [ ], doc, root, from, callback, { }); - - Config.CACHING && Dom.saveResults(original, from, doc, elements); - - return elements; - }, - - FN = function(x) { return x; }, - - matchContexts = { }, - matchResolvers = { }, - - selectContexts = { }, - selectResolvers = { }, - - Snapshot = { - byId: _byId, - match: match, - select: select, - getAttribute: getAttribute, - hasAttribute: hasAttribute - }, - - Dom = { - - ACCEPT_NODE: ACCEPT_NODE, - - byId: byId, - match: match, - first: first, - select: select, - compile: compile, - configure: configure, - - setCache: FN, - shortcuts: FN, - loadResults: FN, - saveResults: FN, - - emit: emit, - Config: Config, - Snapshot: Snapshot, - - Operators: Operators, - Selectors: Selectors, - - Tokens: Tokens, - Version: version, - - registerOperator: - function(symbol, resolver) { - Operators[symbol] || (Operators[symbol] = resolver); - }, - - registerSelector: - function(name, rexp, func) { - Selectors[name] || (Selectors[name] = { - Expression: rexp, - Callback: func - }); - } - - }; - - initialize(doc); - - return Dom; -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/nwmatcher-noqsa.js b/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/nwmatcher-noqsa.js deleted file mode 100644 index 8ecc0ce84..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/nwmatcher-noqsa.js +++ /dev/null @@ -1,962 +0,0 @@ -/* - * Copyright (C) 2007-2016 Diego Perini - * All rights reserved. - * - * nwmatcher-noqsa.js - A fast CSS selector engine and matcher - * - * Author: Diego Perini - * Version: 1.3.9 - * Created: 20070722 - * Release: 20161026 - * - * License: - * http://javascript.nwbox.com/NWMatcher/MIT-LICENSE - * Download: - * http://javascript.nwbox.com/NWMatcher/nwmatcher.js - */ - -(function(global, factory) { - - if (typeof module == 'object' && typeof exports == 'object') { - module.exports = factory; - } else if (typeof define === 'function' && define["amd"]) { - define(factory); - } else { - global.NW || (global.NW = { }); - global.NW.Dom = factory(global); - } - -})(this, function(global) { - - var version = 'nwmatcher-1.3.9', - - doc = global.document, - root = doc.documentElement, - - isSingleMatch, - isSingleSelect, - - lastSlice, - lastContext, - lastPosition, - - lastMatcher, - lastSelector, - - lastPartsMatch, - lastPartsSelect, - - prefixes = '[#.:]?', - operators = '([~*^$|!]?={1})', - whitespace = '[\\x20\\t\\n\\r\\f]', - combinators = '\\x20|[>+~](?=[^>+~])', - pseudoparms = '(?:[-+]?\\d*n)?[-+]?\\d*', - skip_groups = '\\[.*\\]|\\(.*\\)|\\{.*\\}', - - any_esc_chr = '\\\\.', - alphalodash = '[_a-zA-Z]', - non_asc_chr = '[^\\x00-\\x9f]', - escaped_chr = '\\\\[^\\n\\r\\f0-9a-fA-F]', - unicode_chr = '\\\\[0-9a-fA-F]{1,6}(?:\\r\\n|' + whitespace + ')?', - - quotedvalue = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"' + "|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'", - - reSplitGroup = /([^,\\()[\]]+|\[[^[\]]*\]|\[.*\]|\([^()]+\)|\(.*\)|\{[^{}]+\}|\{.*\}|\\.)+/g, - - reTrimSpaces = RegExp('[\\n\\r\\f]|^' + whitespace + '+|' + whitespace + '+$', 'g'), - - reEscapedChars = /\\([0-9a-fA-F]{1,6}[\x20\t\n\r\f]?|.)|([\x22\x27])/g, - - standardValidator, extendedValidator, reValidator, - - attrcheck, attributes, attrmatcher, pseudoclass, - - reOptimizeSelector, reSimpleNot, reSplitToken, - - Optimize, identifier, extensions = '.+', - - Patterns = { - spseudos: /^\:(root|empty|(?:first|last|only)(?:-child|-of-type)|nth(?:-last)?(?:-child|-of-type)\(\s*(even|odd|(?:[-+]{0,1}\d*n\s*)?[-+]{0,1}\s*\d*)\s*\))?(.*)/i, - dpseudos: /^\:(link|visited|target|active|focus|hover|checked|disabled|enabled|selected|lang\(([-\w]{2,})\)|not\(\s*(:nth(?:-last)?(?:-child|-of-type)\(\s*(?:even|odd|(?:[-+]{0,1}\d*n\s*)?[-+]{0,1}\s*\d*)\s*\)|[^()]*)\s*\))?(.*)/i, - children: RegExp('^' + whitespace + '*\\>' + whitespace + '*(.*)'), - adjacent: RegExp('^' + whitespace + '*\\+' + whitespace + '*(.*)'), - relative: RegExp('^' + whitespace + '*\\~' + whitespace + '*(.*)'), - ancestor: RegExp('^' + whitespace + '+(.*)'), - universal: RegExp('^\\*(.*)') - }, - - Tokens = { - prefixes: prefixes, - identifier: identifier, - attributes: attributes - }, - - QUIRKS_MODE, - XML_DOCUMENT, - - GEBTN = 'getElementsByTagName' in doc, - GEBCN = 'getElementsByClassName' in doc, - - IE_LT_9 = typeof doc.addEventListener != 'function', - - LINK_NODES = { a: 1, A: 1, area: 1, AREA: 1, link: 1, LINK: 1 }, - - ATTR_BOOLEAN = { - checked: 1, disabled: 1, ismap: 1, - multiple: 1, readonly: 1, selected: 1 - }, - - ATTR_DEFAULT = { - value: 'defaultValue', - checked: 'defaultChecked', - selected: 'defaultSelected' - }, - - ATTR_URIDATA = { - action: 2, cite: 2, codebase: 2, data: 2, href: 2, - longdesc: 2, lowsrc: 2, src: 2, usemap: 2 - }, - - INSENSITIVE_MAP = { - 'class': 0, - 'href': 1, 'lang': 1, 'src': 1, 'style': 1, 'title': 1, - 'type': 1, 'xmlns': 1, 'xml:lang': 1, 'xml:space': 1 - }, - - Selectors = { }, - - Operators = { - '=': "n=='%m'", - '^=': "n.indexOf('%m')==0", - '*=': "n.indexOf('%m')>-1", - '|=': "(n+'-').indexOf('%m-')==0", - '~=': "(' '+n+' ').indexOf(' %m ')>-1", - '$=': "n.substr(n.length-'%m'.length)=='%m'" - }, - - concatCall = - function(data, elements, callback) { - var i = -1, element; - while ((element = elements[++i])) { - if (false === callback(data[data.length] = element)) { break; } - } - return data; - }, - - switchContext = - function(from, force) { - var oldDoc = doc; - lastContext = from; - doc = from.ownerDocument || from; - if (force || oldDoc !== doc) { - root = doc.documentElement; - XML_DOCUMENT = doc.createElement('DiV').nodeName == 'DiV'; - QUIRKS_MODE = !XML_DOCUMENT && - typeof doc.compatMode == 'string' ? - doc.compatMode.indexOf('CSS') < 0 : - (function() { - var style = doc.createElement('div').style; - return style && (style.width = 1) && style.width == '1px'; - })(); - - Config.CACHING && Dom.setCache(true, doc); - } - }, - - codePointToUTF16 = - function(codePoint) { - if (codePoint < 1 || codePoint > 0x10ffff || - (codePoint > 0xd7ff && codePoint < 0xe000)) { - return '\\ufffd'; - } - if (codePoint < 0x10000) { - var lowHex = '000' + codePoint.toString(16); - return '\\u' + lowHex.substr(lowHex.length - 4); - } - return '\\u' + (((codePoint - 0x10000) >> 0x0a) + 0xd800).toString(16) + - '\\u' + (((codePoint - 0x10000) % 0x400) + 0xdc00).toString(16); - }, - - stringFromCodePoint = - function(codePoint) { - if (codePoint < 1 || codePoint > 0x10ffff || - (codePoint > 0xd7ff && codePoint < 0xe000)) { - return '\ufffd'; - } - if (codePoint < 0x10000) { - return String.fromCharCode(codePoint); - } - return String.fromCodePoint ? - String.fromCodePoint(codePoint) : - String.fromCharCode( - ((codePoint - 0x10000) >> 0x0a) + 0xd800, - ((codePoint - 0x10000) % 0x400) + 0xdc00); - }, - - convertEscapes = - function(str) { - return str.replace(reEscapedChars, - function(substring, p1, p2) { - return p2 ? '\\' + p2 : - /^[0-9a-fA-F]/.test(p1) ? codePointToUTF16(parseInt(p1, 16)) : - /^[\\\x22\x27]/.test(p1) ? substring : - p1; - } - ); - }, - - unescapeIdentifier = - function(str) { - return str.replace(reEscapedChars, - function(substring, p1, p2) { - return p2 ? p2 : - /^[0-9a-fA-F]/.test(p1) ? stringFromCodePoint(parseInt(p1, 16)) : - /^[\\\x22\x27]/.test(p1) ? substring : - p1; - } - ); - }, - - byIdRaw = - function(id, elements) { - var i = -1, element; - while ((element = elements[++i])) { - if (element.getAttribute('id') == id) { - break; - } - } - return element || null; - }, - - _byId = !IE_LT_9 ? - function(id, from) { - id = (/\\/).test(id) ? unescapeIdentifier(id) : id; - return from.getElementById && from.getElementById(id) || - byIdRaw(id, from.getElementsByTagName('*')); - } : - function(id, from) { - var element = null; - id = (/\\/).test(id) ? unescapeIdentifier(id) : id; - if (XML_DOCUMENT || from.nodeType != 9) { - return byIdRaw(id, from.getElementsByTagName('*')); - } - if ((element = from.getElementById(id)) && - element.name == id && from.getElementsByName) { - return byIdRaw(id, from.getElementsByName(id)); - } - return element; - }, - - byId = - function(id, from) { - from || (from = doc); - if (lastContext !== from) { switchContext(from); } - return _byId(id, from); - }, - - byTagRaw = - function(tag, from) { - var any = tag == '*', element = from, elements = [ ], next = element.firstChild; - any || (tag = tag.toUpperCase()); - while ((element = next)) { - if (element.tagName > '@' && (any || element.tagName.toUpperCase() == tag)) { - elements[elements.length] = element; - } - if ((next = element.firstChild || element.nextSibling)) continue; - while (!next && (element = element.parentNode) && element !== from) { - next = element.nextSibling; - } - } - return elements; - }, - - contains = 'compareDocumentPosition' in root ? - function(container, element) { - return (container.compareDocumentPosition(element) & 16) == 16; - } : 'contains' in root ? - function(container, element) { - return container !== element && container.contains(element); - } : - function(container, element) { - while ((element = element.parentNode)) { - if (element === container) return true; - } - return false; - }, - - getAttribute = !IE_LT_9 ? - function(node, attribute) { - return node.getAttribute(attribute); - } : - function(node, attribute) { - attribute = attribute.toLowerCase(); - if (typeof node[attribute] == 'object') { - return node.attributes[attribute] && - node.attributes[attribute].value; - } - return ( - attribute == 'type' ? node.getAttribute(attribute) : - ATTR_URIDATA[attribute] ? node.getAttribute(attribute, 2) : - ATTR_BOOLEAN[attribute] ? node.getAttribute(attribute) ? attribute : 'false' : - (node = node.getAttributeNode(attribute)) && node.value); - }, - - hasAttribute = !IE_LT_9 && root.hasAttribute ? - function(node, attribute) { - return node.hasAttribute(attribute); - } : - function(node, attribute) { - var obj = node.getAttributeNode(attribute = attribute.toLowerCase()); - return ATTR_DEFAULT[attribute] && attribute != 'value' ? - node[ATTR_DEFAULT[attribute]] : obj && obj.specified; - }, - - isEmpty = - function(node) { - node = node.firstChild; - while (node) { - if (node.nodeType == 3 || node.nodeName > '@') return false; - node = node.nextSibling; - } - return true; - }, - - isLink = - function(element) { - return hasAttribute(element, 'href') && LINK_NODES[element.nodeName]; - }, - - nthElement = - function(element, last) { - var count = 1, succ = last ? 'nextSibling' : 'previousSibling'; - while ((element = element[succ])) { - if (element.nodeName > '@') ++count; - } - return count; - }, - - nthOfType = - function(element, last) { - var count = 1, succ = last ? 'nextSibling' : 'previousSibling', type = element.nodeName; - while ((element = element[succ])) { - if (element.nodeName == type) ++count; - } - return count; - }, - - configure = - function(option) { - if (typeof option == 'string') { return !!Config[option]; } - if (typeof option != 'object') { return Config; } - for (var i in option) { - Config[i] = !!option[i]; - if (i == 'SIMPLENOT') { - matchContexts = { }; - matchResolvers = { }; - selectContexts = { }; - selectResolvers = { }; - } - } - setIdentifierSyntax(); - reValidator = RegExp(Config.SIMPLENOT ? - standardValidator : extendedValidator); - return true; - }, - - emit = - function(message) { - if (Config.VERBOSITY) { throw Error(message); } - if (console && console.log) { - console.log(message); - } - }, - - Config = { - CACHING: false, - ESCAPECHR: true, - NON_ASCII: true, - SELECTOR3: true, - UNICODE16: true, - SHORTCUTS: false, - SIMPLENOT: true, - UNIQUE_ID: true, - USE_HTML5: true, - VERBOSITY: true - }, - - initialize = - function(doc) { - setIdentifierSyntax(); - switchContext(doc, true); - }, - - setIdentifierSyntax = - function() { - - var syntax = '', start = Config['SELECTOR3'] ? '-{2}|' : ''; - - Config['NON_ASCII'] && (syntax += '|' + non_asc_chr); - Config['UNICODE16'] && (syntax += '|' + unicode_chr); - Config['ESCAPECHR'] && (syntax += '|' + escaped_chr); - - syntax += (Config['UNICODE16'] || Config['ESCAPECHR']) ? '' : '|' + any_esc_chr; - - identifier = '-?(?:' + start + alphalodash + syntax + ')(?:-|[0-9]|' + alphalodash + syntax + ')*'; - - attrcheck = '(' + quotedvalue + '|' + identifier + ')'; - attributes = whitespace + '*(' + identifier + ':?' + identifier + ')' + - whitespace + '*(?:' + operators + whitespace + '*' + attrcheck + ')?' + whitespace + '*'; - attrmatcher = attributes.replace(attrcheck, '([\\x22\\x27]*)((?:\\\\?.)*?)\\3'); - - pseudoclass = '((?:' + - pseudoparms + '|' + quotedvalue + '|' + - prefixes + identifier + '|' + - '\\[' + attributes + '\\]|' + - '\\(.+\\)|' + whitespace + '*|' + - ',)+)'; - - standardValidator = - '(?=[\\x20\\t\\n\\r\\f]*[^>+~(){}<>])' + - '(' + - '\\*' + - '|(?:' + prefixes + identifier + ')' + - '|' + combinators + - '|\\[' + attributes + '\\]' + - '|\\(' + pseudoclass + '\\)' + - '|\\{' + extensions + '\\}' + - '|(?:,|' + whitespace + '*)' + - ')+'; - - reSimpleNot = RegExp('^(' + - '(?!:not)' + - '(' + prefixes + identifier + - '|\\([^()]*\\))+' + - '|\\[' + attributes + '\\]' + - ')$'); - - reSplitToken = RegExp('(' + - prefixes + identifier + '|' + - '\\[' + attributes + '\\]|' + - '\\(' + pseudoclass + '\\)|' + - '\\\\.|[^\\x20\\t\\n\\r\\f>+~])+', 'g'); - - reOptimizeSelector = RegExp(identifier + '|^$'); - - Optimize = { - ID: RegExp('^\\*?#(' + identifier + ')|' + skip_groups), - TAG: RegExp('^(' + identifier + ')|' + skip_groups), - CLASS: RegExp('^\\.(' + identifier + '$)|' + skip_groups) - }; - - Patterns.id = RegExp('^#(' + identifier + ')(.*)'); - Patterns.tagName = RegExp('^(' + identifier + ')(.*)'); - Patterns.className = RegExp('^\\.(' + identifier + ')(.*)'); - Patterns.attribute = RegExp('^\\[' + attrmatcher + '\\](.*)'); - - Tokens.identifier = identifier; - Tokens.attributes = attributes; - - extendedValidator = standardValidator.replace(pseudoclass, '.*'); - - reValidator = RegExp(standardValidator); - }, - - ACCEPT_NODE = 'r[r.length]=c[k];if(f&&false===f(c[k]))break main;else continue main;', - REJECT_NODE = IE_LT_9 ? 'if(e.nodeName<"A")continue;' : '', - TO_UPPER_CASE = IE_LT_9 ? '.toUpperCase()' : '', - - compile = - function(selector, source, mode) { - - var parts = typeof selector == 'string' ? selector.match(reSplitGroup) : selector; - - typeof source == 'string' || (source = ''); - - if (parts.length == 1) { - source += compileSelector(parts[0], mode ? ACCEPT_NODE : 'f&&f(k);return true;', mode); - } else { - var i = -1, seen = { }, token; - while ((token = parts[++i])) { - token = token.replace(reTrimSpaces, ''); - if (!seen[token] && (seen[token] = true)) { - source += compileSelector(token, mode ? ACCEPT_NODE : 'f&&f(k);return true;', mode); - } - } - } - - if (mode) { - return Function('c,s,r,d,h,g,f,v', - 'var N,n,x=0,k=-1,e;main:while((e=c[++k])){' + source + '}return r;'); - } else { - return Function('e,s,r,d,h,g,f,v', - 'var N,n,x=0,k=e;' + source + 'return false;'); - } - }, - - FILTER = - 'var z=v[@]||(v[@]=[]),l=z.length-1;' + - 'while(l>=0&&z[l]!==e)--l;' + - 'if(l!==-1){break;}' + - 'z[z.length]=e;', - - compileSelector = - function(selector, source, mode) { - - var a, b, n, k = 0, expr, match, result, status, test, type; - - while (selector) { - - k++; - - if ((match = selector.match(Patterns.universal))) { - expr = ''; - } - - else if ((match = selector.match(Patterns.id))) { - match[1] = (/\\/).test(match[1]) ? convertEscapes(match[1]) : match[1]; - source = 'if(' + (XML_DOCUMENT ? - 's.getAttribute(e,"id")' : - '(e.submit?s.getAttribute(e,"id"):e.id)') + - '=="' + match[1] + '"' + - '){' + source + '}'; - } - - else if ((match = selector.match(Patterns.tagName))) { - source = 'if(e.nodeName' + (XML_DOCUMENT ? - '=="' + match[1] + '"' : TO_UPPER_CASE + - '=="' + match[1].toUpperCase() + '"') + - '){' + source + '}'; - } - - else if ((match = selector.match(Patterns.className))) { - match[1] = (/\\/).test(match[1]) ? convertEscapes(match[1]) : match[1]; - match[1] = QUIRKS_MODE ? match[1].toLowerCase() : match[1]; - source = 'if((n=' + (XML_DOCUMENT ? - 'e.getAttribute("class")' : 'e.className') + - ')&&n.length&&(" "+' + (QUIRKS_MODE ? 'n.toLowerCase()' : 'n') + - '.replace(/' + whitespace + '+/g," ")+" ").indexOf(" ' + match[1] + ' ")>-1' + - '){' + source + '}'; - } - - else if ((match = selector.match(Patterns.attribute))) { - if (match[2] && !Operators[match[2]]) { - emit('Unsupported operator in attribute selectors "' + selector + '"'); - return ''; - } - test = 'false'; - if (match[2] && match[4] && (test = Operators[match[2]])) { - match[4] = (/\\/).test(match[4]) ? convertEscapes(match[4]) : match[4]; - INSENSITIVE_MAP['class'] = QUIRKS_MODE ? 1 : 0; - type = INSENSITIVE_MAP[match[1].toLowerCase()]; - test = test.replace(/\%m/g, type ? match[4].toLowerCase() : match[4]); - } else if (match[2] == '!=' || match[2] == '=') { - test = 'n' + match[2] + '=""'; - } - source = 'if(n=s.hasAttribute(e,"' + match[1] + '")){' + - (match[2] ? 'n=s.getAttribute(e,"' + match[1] + '")' : '') + - (type && match[2] ? '.toLowerCase();' : ';') + - 'if(' + (match[2] ? test : 'n') + '){' + source + '}}'; - } - - else if ((match = selector.match(Patterns.adjacent))) { - source = (mode ? '' : FILTER.replace(/@/g, k)) + source; - source = 'var N' + k + '=e;while(e&&(e=e.previousSibling)){if(e.nodeName>"@"){' + source + 'break;}}e=N' + k + ';'; - } - - else if ((match = selector.match(Patterns.relative))) { - source = (mode ? '' : FILTER.replace(/@/g, k)) + source; - source = 'var N' + k + '=e;e=e.parentNode.firstChild;while(e&&e!==N' + k + '){if(e.nodeName>"@"){' + source + '}e=e.nextSibling;}e=N' + k + ';'; - } - - else if ((match = selector.match(Patterns.children))) { - source = (mode ? '' : FILTER.replace(/@/g, k)) + source; - source = 'var N' + k + '=e;while(e&&e!==h&&e!==g&&(e=e.parentNode)){' + source + 'break;}e=N' + k + ';'; - } - - else if ((match = selector.match(Patterns.ancestor))) { - source = (mode ? '' : FILTER.replace(/@/g, k)) + source; - source = 'var N' + k + '=e;while(e&&e!==h&&e!==g&&(e=e.parentNode)){' + source + '}e=N' + k + ';'; - } - - else if ((match = selector.match(Patterns.spseudos)) && match[1]) { - switch (match[1]) { - case 'root': - if (match[3]) { - source = 'if(e===h||s.contains(h,e)){' + source + '}'; - } else { - source = 'if(e===h){' + source + '}'; - } - break; - case 'empty': - source = 'if(s.isEmpty(e)){' + source + '}'; - break; - default: - if (match[1] && match[2]) { - if (match[2] == 'n') { - source = 'if(e!==h){' + source + '}'; - break; - } else if (match[2] == 'even') { - a = 2; - b = 0; - } else if (match[2] == 'odd') { - a = 2; - b = 1; - } else { - b = ((n = match[2].match(/(-?\d+)$/)) ? parseInt(n[1], 10) : 0); - a = ((n = match[2].match(/(-?\d*)n/i)) ? parseInt(n[1], 10) : 0); - if (n && n[1] == '-') a = -1; - } - test = a > 1 ? - (/last/i.test(match[1])) ? '(n-(' + b + '))%' + a + '==0' : - 'n>=' + b + '&&(n-(' + b + '))%' + a + '==0' : a < -1 ? - (/last/i.test(match[1])) ? '(n-(' + b + '))%' + a + '==0' : - 'n<=' + b + '&&(n-(' + b + '))%' + a + '==0' : a === 0 ? - 'n==' + b : a == -1 ? 'n<=' + b : 'n>=' + b; - source = - 'if(e!==h){' + - 'n=s[' + (/-of-type/i.test(match[1]) ? '"nthOfType"' : '"nthElement"') + ']' + - '(e,' + (/last/i.test(match[1]) ? 'true' : 'false') + ');' + - 'if(' + test + '){' + source + '}' + - '}'; - } else { - a = /first/i.test(match[1]) ? 'previous' : 'next'; - n = /only/i.test(match[1]) ? 'previous' : 'next'; - b = /first|last/i.test(match[1]); - type = /-of-type/i.test(match[1]) ? '&&n.nodeName!=e.nodeName' : '&&n.nodeName<"@"'; - source = 'if(e!==h){' + - ( 'n=e;while((n=n.' + a + 'Sibling)' + type + ');if(!n){' + (b ? source : - 'n=e;while((n=n.' + n + 'Sibling)' + type + ');if(!n){' + source + '}') + '}' ) + '}'; - } - break; - } - } - - else if ((match = selector.match(Patterns.dpseudos)) && match[1]) { - switch (match[1].match(/^\w+/)[0]) { - case 'not': - expr = match[3].replace(reTrimSpaces, ''); - if (Config.SIMPLENOT && !reSimpleNot.test(expr)) { - emit('Negation pseudo-class only accepts simple selectors "' + selector + '"'); - return ''; - } else { - if ('compatMode' in doc) { - source = 'if(!' + compile(expr, '', false) + '(e,s,r,d,h,g)){' + source + '}'; - } else { - source = 'if(!s.match(e, "' + expr.replace(/\x22/g, '\\"') + '",g)){' + source +'}'; - } - } - break; - case 'checked': - source = 'if((typeof e.form!=="undefined"&&(/^(?:radio|checkbox)$/i).test(e.type)&&e.checked)' + - (Config.USE_HTML5 ? '||(/^option$/i.test(e.nodeName)&&(e.selected||e.checked))' : '') + - '){' + source + '}'; - break; - case 'disabled': - source = 'if(((typeof e.form!=="undefined"' + - (Config.USE_HTML5 ? '' : '&&!(/^hidden$/i).test(e.type)') + - ')||s.isLink(e))&&e.disabled===true){' + source + '}'; - break; - case 'enabled': - source = 'if(((typeof e.form!=="undefined"' + - (Config.USE_HTML5 ? '' : '&&!(/^hidden$/i).test(e.type)') + - ')||s.isLink(e))&&e.disabled===false){' + source + '}'; - break; - case 'lang': - test = ''; - if (match[2]) test = match[2].substr(0, 2) + '-'; - source = 'do{(n=e.lang||"").toLowerCase();' + - 'if((n==""&&h.lang=="' + match[2].toLowerCase() + '")||' + - '(n&&(n=="' + match[2].toLowerCase() + - '"||n.substr(0,3)=="' + test.toLowerCase() + '")))' + - '{' + source + 'break;}}while((e=e.parentNode)&&e!==g);'; - break; - case 'target': - source = 'if(e.id==d.location.hash.slice(1)){' + source + '}'; - break; - case 'link': - source = 'if(s.isLink(e)&&!e.visited){' + source + '}'; - break; - case 'visited': - source = 'if(s.isLink(e)&&e.visited){' + source + '}'; - break; - case 'active': - source = 'if(e===d.activeElement){' + source + '}'; - break; - case 'hover': - source = 'if(e===d.hoverElement){' + source + '}'; - break; - case 'focus': - source = 'hasFocus' in doc ? - 'if(e===d.activeElement&&d.hasFocus()&&(e.type||e.href||typeof e.tabIndex=="number")){' + source + '}' : - 'if(e===d.activeElement&&(e.type||e.href)){' + source + '}'; - break; - case 'selected': - source = 'if(/^option$/i.test(e.nodeName)&&(e.selected||e.checked)){' + source + '}'; - break; - default: - break; - } - } - - else { - - expr = false; - status = false; - for (expr in Selectors) { - if ((match = selector.match(Selectors[expr].Expression)) && match[1]) { - result = Selectors[expr].Callback(match, source); - source = result.source; - status = result.status; - if (status) { break; } - } - } - - if (!status) { - emit('Unknown pseudo-class selector "' + selector + '"'); - return ''; - } - - if (!expr) { - emit('Unknown token in selector "' + selector + '"'); - return ''; - } - - } - - if (!match) { - emit('Invalid syntax in selector "' + selector + '"'); - return ''; - } - - selector = match && match[match.length - 1]; - } - - return source; - }, - - match = - function(element, selector, from, callback) { - - var parts; - - if (!(element && element.nodeType == 1)) { - emit('Invalid element argument'); - return false; - } else if (typeof selector != 'string') { - emit('Invalid selector argument'); - return false; - } else if (lastContext !== from) { - switchContext(from || (from = element.ownerDocument)); - } - - selector = selector. - replace(reTrimSpaces, ''). - replace(/\x00|\\$/g, '\ufffd'); - - Config.SHORTCUTS && (selector = Dom.shortcuts(selector, element, from)); - - if (lastMatcher != selector) { - if ((parts = selector.match(reValidator)) && parts[0] == selector) { - isSingleMatch = (parts = selector.match(reSplitGroup)).length < 2; - lastMatcher = selector; - lastPartsMatch = parts; - } else { - emit('The string "' + selector + '", is not a valid CSS selector'); - return false; - } - } else parts = lastPartsMatch; - - if (!matchResolvers[selector] || matchContexts[selector] !== from) { - matchResolvers[selector] = compile(isSingleMatch ? [selector] : parts, '', false); - matchContexts[selector] = from; - } - - return matchResolvers[selector](element, Snapshot, [ ], doc, root, from, callback, { }); - }, - - first = - function(selector, from) { - return select(selector, from, function() { return false; })[0] || null; - }, - - select = - function(selector, from, callback) { - - var i, changed, element, elements, parts, token, original = selector; - - if (arguments.length === 0) { - emit('Not enough arguments'); - return [ ]; - } else if (typeof selector != 'string') { - return [ ]; - } else if (from && !(/1|9|11/).test(from.nodeType)) { - emit('Invalid or illegal context element'); - return [ ]; - } else if (lastContext !== from) { - switchContext(from || (from = doc)); - } - - if (Config.CACHING && (elements = Dom.loadResults(original, from, doc, root))) { - return callback ? concatCall([ ], elements, callback) : elements; - } - - selector = selector. - replace(reTrimSpaces, ''). - replace(/\x00|\\$/g, '\ufffd'); - - Config.SHORTCUTS && (selector = Dom.shortcuts(selector, from)); - - if ((changed = lastSelector != selector)) { - if ((parts = selector.match(reValidator)) && parts[0] == selector) { - isSingleSelect = (parts = selector.match(reSplitGroup)).length < 2; - lastSelector = selector; - lastPartsSelect = parts; - } else { - emit('The string "' + selector + '", is not a valid CSS selector'); - return [ ]; - } - } else parts = lastPartsSelect; - - if (from.nodeType == 11) { - - elements = byTagRaw('*', from); - - } else if (isSingleSelect) { - - if (changed) { - parts = selector.match(reSplitToken); - token = parts[parts.length - 1]; - lastSlice = token.split(':not'); - lastSlice = lastSlice[lastSlice.length - 1]; - lastPosition = selector.length - token.length; - } - - if (Config.UNIQUE_ID && (parts = lastSlice.match(Optimize.ID)) && (token = parts[1])) { - if ((element = _byId(token, from))) { - if (match(element, selector)) { - callback && callback(element); - elements = [element]; - } else elements = [ ]; - } - } - - else if (Config.UNIQUE_ID && (parts = selector.match(Optimize.ID)) && (token = parts[1])) { - if ((element = _byId(token, doc))) { - if ('#' + token == selector) { - callback && callback(element); - elements = [element]; - } else if (/[>+~]/.test(selector)) { - from = element.parentNode; - } else { - from = element; - } - } else elements = [ ]; - } - - if (elements) { - Config.CACHING && Dom.saveResults(original, from, doc, elements); - return elements; - } - - if (!XML_DOCUMENT && GEBTN && (parts = lastSlice.match(Optimize.TAG)) && (token = parts[1])) { - if ((elements = from.getElementsByTagName(token)).length === 0) { return [ ]; } - selector = selector.slice(0, lastPosition) + selector.slice(lastPosition).replace(token, '*'); - } - - else if (!XML_DOCUMENT && GEBCN && (parts = lastSlice.match(Optimize.CLASS)) && (token = parts[1])) { - if ((elements = from.getElementsByClassName(unescapeIdentifier(token))).length === 0) { return [ ]; } - selector = selector.slice(0, lastPosition) + selector.slice(lastPosition).replace('.' + token, - reOptimizeSelector.test(selector.charAt(selector.indexOf(token) - 1)) ? '' : '*'); - } - - } - - if (!elements) { - if (IE_LT_9) { - elements = /^(?:applet|object)$/i.test(from.nodeName) ? from.children : byTagRaw('*', from); - } else { - elements = from.getElementsByTagName('*'); - } - } - - if (!selectResolvers[selector] || selectContexts[selector] !== from) { - selectResolvers[selector] = compile(isSingleSelect ? [selector] : parts, REJECT_NODE, true); - selectContexts[selector] = from; - } - - elements = selectResolvers[selector](elements, Snapshot, [ ], doc, root, from, callback, { }); - - Config.CACHING && Dom.saveResults(original, from, doc, elements); - - return elements; - }, - - FN = function(x) { return x; }, - - matchContexts = { }, - matchResolvers = { }, - - selectContexts = { }, - selectResolvers = { }, - - Snapshot = { - byId: _byId, - match: match, - select: select, - isLink: isLink, - isEmpty: isEmpty, - contains: contains, - nthOfType: nthOfType, - nthElement: nthElement, - getAttribute: getAttribute, - hasAttribute: hasAttribute - }, - - Dom = { - - ACCEPT_NODE: ACCEPT_NODE, - - byId: byId, - match: match, - first: first, - select: select, - compile: compile, - contains: contains, - configure: configure, - getAttribute: getAttribute, - hasAttribute: hasAttribute, - - setCache: FN, - shortcuts: FN, - loadResults: FN, - saveResults: FN, - - emit: emit, - Config: Config, - Snapshot: Snapshot, - - Operators: Operators, - Selectors: Selectors, - - Tokens: Tokens, - Version: version, - - registerOperator: - function(symbol, resolver) { - Operators[symbol] || (Operators[symbol] = resolver); - }, - - registerSelector: - function(name, rexp, func) { - Selectors[name] || (Selectors[name] = { - Expression: rexp, - Callback: func - }); - } - - }; - - initialize(doc); - - return Dom; -}); diff --git a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/nwmatcher.js b/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/nwmatcher.js deleted file mode 100644 index 9befeea2e..000000000 --- a/fundamentals/bug-challenge-es6/node_modules/nwmatcher/src/nwmatcher.js +++ /dev/null @@ -1,1780 +0,0 @@ -/* - * Copyright (C) 2007-2016 Diego Perini - * All rights reserved. - * - * nwmatcher.js - A fast CSS selector engine and matcher - * - * Author: Diego Perini - * Version: 1.3.9 - * Created: 20070722 - * Release: 20161026 - * - * License: - * http://javascript.nwbox.com/NWMatcher/MIT-LICENSE - * Download: - * http://javascript.nwbox.com/NWMatcher/nwmatcher.js - */ - -(function(global, factory) { - - if (typeof module == 'object' && typeof exports == 'object') { - module.exports = factory; - } else if (typeof define === 'function' && define["amd"]) { - define(factory); - } else { - global.NW || (global.NW = { }); - global.NW.Dom = factory(global); - } - -})(this, function(global) { - - var version = 'nwmatcher-1.3.9', - - // processing context & root element - doc = global.document, - root = doc.documentElement, - - // save utility methods references - slice = [ ].slice, - - // persist previous parsed data - isSingleMatch, - isSingleSelect, - - lastSlice, - lastContext, - lastPosition, - - lastMatcher, - lastSelector, - - lastPartsMatch, - lastPartsSelect, - - // accepted prefix identifiers - // (id, class & pseudo-class) - prefixes = '[#.:]?', - - // accepted attribute operators - operators = '([~*^$|!]?={1})', - - // accepted whitespace characters - whitespace = '[\\x20\\t\\n\\r\\f]', - - // 4 combinators F E, F>E, F+E, F~E - combinators = '\\x20|[>+~](?=[^>+~])', - - // an+b format params for pseudo-classes - pseudoparms = '(?:[-+]?\\d*n)?[-+]?\\d*', - - // skip [ ], ( ), { } brackets groups - skip_groups = '\\[.*\\]|\\(.*\\)|\\{.*\\}', - - // any escaped char - any_esc_chr = '\\\\.', - // alpha chars & low dash - alphalodash = '[_a-zA-Z]', - // non-ascii chars (utf-8) - non_asc_chr = '[^\\x00-\\x9f]', - // escape sequences in strings - escaped_chr = '\\\\[^\\n\\r\\f0-9a-fA-F]', - // Unicode chars including trailing whitespace - unicode_chr = '\\\\[0-9a-fA-F]{1,6}(?:\\r\\n|' + whitespace + ')?', - - // CSS quoted string values - quotedvalue = '"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"' + "|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'", - - // regular expression used to skip single/nested brackets groups (round, square, curly) - // used to split comma groups excluding commas inside quotes '' "" or brackets () [] {} - reSplitGroup = /([^,\\()[\]]+|\[[^[\]]*\]|\[.*\]|\([^()]+\)|\(.*\)|\{[^{}]+\}|\{.*\}|\\.)+/g, - - // regular expression to trim extra leading/trailing whitespace in selector strings - // whitespace is any combination of these 5 character [\x20\t\n\r\f] - // http://www.w3.org/TR/css3-selectors/#selector-syntax - reTrimSpaces = RegExp('[\\n\\r\\f]|^' + whitespace + '+|' + whitespace + '+$', 'g'), - - // regular expression used in convertEscapes and unescapeIdentifier - reEscapedChars = /\\([0-9a-fA-F]{1,6}[\x20\t\n\r\f]?|.)|([\x22\x27])/g, - - // for in excess whitespace removal - reWhiteSpace = /[\x20\t\n\r\f]+/g, - - standardValidator, extendedValidator, reValidator, - - attrcheck, attributes, attrmatcher, pseudoclass, - - reOptimizeSelector, reSimpleNot, reSplitToken, - - Optimize, reClass, reSimpleSelector, - - // http://www.w3.org/TR/css3-syntax/#characters - // unicode/ISO 10646 characters \xA0 and higher - // NOTE: Safari 2.0.x crashes with escaped (\\) - // Unicode ranges in regular expressions so we - // use a negated character range class instead - // now assigned at runtime from config options - identifier, - - // placeholder for extensions - extensions = '.+', - - // precompiled Regular Expressions - Patterns = { - // structural pseudo-classes and child selectors - spseudos: /^\:(root|empty|(?:first|last|only)(?:-child|-of-type)|nth(?:-last)?(?:-child|-of-type)\(\s*(even|odd|(?:[-+]{0,1}\d*n\s*)?[-+]{0,1}\s*\d*)\s*\))?(.*)/i, - // uistates + dynamic + negation pseudo-classes - dpseudos: /^\:(link|visited|target|active|focus|hover|checked|disabled|enabled|selected|lang\(([-\w]{2,})\)|not\(\s*(:nth(?:-last)?(?:-child|-of-type)\(\s*(?:even|odd|(?:[-+]{0,1}\d*n\s*)?[-+]{0,1}\s*\d*)\s*\)|[^()]*)\s*\))?(.*)/i, - // E > F - children: RegExp('^' + whitespace + '*\\>' + whitespace + '*(.*)'), - // E + F - adjacent: RegExp('^' + whitespace + '*\\+' + whitespace + '*(.*)'), - // E ~ F - relative: RegExp('^' + whitespace + '*\\~' + whitespace + '*(.*)'), - // E F - ancestor: RegExp('^' + whitespace + '+(.*)'), - // all - universal: RegExp('^\\*(.*)') - }, - - Tokens = { - prefixes: prefixes, - identifier: identifier, - attributes: attributes - }, - - /*----------------------------- FEATURE TESTING ----------------------------*/ - - // detect native methods - isNative = (function() { - var re = / \w+\(/, - isnative = String(({ }).toString).replace(re, ' ('); - return function(method) { - return method && typeof method != 'string' && - isnative == String(method).replace(re, ' ('); - }; - })(), - - // NATIVE_XXXXX true if method exist and is callable - // detect if DOM methods are native in browsers - NATIVE_FOCUS = isNative(doc.hasFocus), - NATIVE_QSAPI = isNative(doc.querySelector), - NATIVE_GEBID = isNative(doc.getElementById), - NATIVE_GEBTN = isNative(root.getElementsByTagName), - NATIVE_GEBCN = isNative(root.getElementsByClassName), - - // detect native getAttribute/hasAttribute methods, - // frameworks extend these to elements, but it seems - // this does not work for XML namespaced attributes, - // used to check both getAttribute/hasAttribute in IE - NATIVE_GET_ATTRIBUTE = isNative(root.getAttribute), - NATIVE_HAS_ATTRIBUTE = isNative(root.hasAttribute), - - // check if slice() can convert nodelist to array - // see http://yura.thinkweb2.com/cft/ - NATIVE_SLICE_PROTO = - (function() { - var isBuggy = false; - try { - isBuggy = !!slice.call(doc.childNodes, 0)[0]; - } catch(e) { } - return isBuggy; - })(), - - // supports the new traversal API - NATIVE_TRAVERSAL_API = - 'nextElementSibling' in root && 'previousElementSibling' in root, - - // BUGGY_XXXXX true if method is feature tested and has known bugs - // detect buggy gEBID - BUGGY_GEBID = NATIVE_GEBID ? - (function() { - var isBuggy = true, x = 'x' + String(+new Date), - a = doc.createElementNS ? 'a' : ''; - (a = doc.createElement(a)).name = x; - root.insertBefore(a, root.firstChild); - isBuggy = !!doc.getElementById(x); - root.removeChild(a); - return isBuggy; - })() : - true, - - // detect IE gEBTN comment nodes bug - BUGGY_GEBTN = NATIVE_GEBTN ? - (function() { - var div = doc.createElement('div'); - div.appendChild(doc.createComment('')); - return !!div.getElementsByTagName('*')[0]; - })() : - true, - - // detect Opera gEBCN second class and/or UTF8 bugs as well as Safari 3.2 - // caching class name results and not detecting when changed, - // tests are based on the jQuery selector test suite - BUGGY_GEBCN = NATIVE_GEBCN ? - (function() { - var isBuggy, div = doc.createElement('div'), test = '\u53f0\u5317'; - - // Opera tests - div.appendChild(doc.createElement('span')). - setAttribute('class', test + 'abc ' + test); - div.appendChild(doc.createElement('span')). - setAttribute('class', 'x'); - - isBuggy = !div.getElementsByClassName(test)[0]; - - // Safari test - div.lastChild.className = test; - return isBuggy || div.getElementsByClassName(test).length != 2; - })() : - true, - - // detect IE bug with dynamic attributes - BUGGY_GET_ATTRIBUTE = NATIVE_GET_ATTRIBUTE ? - (function() { - var input = doc.createElement('input'); - input.setAttribute('value', 5); - return input.defaultValue != 5; - })() : - true, - - // detect IE bug with non-standard boolean attributes - BUGGY_HAS_ATTRIBUTE = NATIVE_HAS_ATTRIBUTE ? - (function() { - var option = doc.createElement('option'); - option.setAttribute('selected', 'selected'); - return !option.hasAttribute('selected'); - })() : - true, - - // detect Safari bug with selected option elements - BUGGY_SELECTED = - (function() { - var select = doc.createElement('select'); - select.appendChild(doc.createElement('option')); - return !select.firstChild.selected; - })(), - - // initialized with the loading context - // and reset for each different context - BUGGY_QUIRKS_GEBCN, - BUGGY_QUIRKS_QSAPI, - - QUIRKS_MODE, - XML_DOCUMENT, - - // detect Opera browser - OPERA = typeof global.opera != 'undefined' && - (/opera/i).test(({ }).toString.call(global.opera)), - - // skip simple selector optimizations for Opera >= 11 - OPERA_QSAPI = OPERA && parseFloat(global.opera.version()) >= 11, - - // check Selector API implementations - RE_BUGGY_QSAPI = NATIVE_QSAPI ? - (function() { - var pattern = [ ], context, element, - - expect = function(selector, element, n) { - var result = false; - context.appendChild(element); - try { result = context.querySelectorAll(selector).length == n; } catch(e) { } - while (context.firstChild) { context.removeChild(context.firstChild); } - return result; - }; - - // certain bugs can only be detected in standard documents - // to avoid writing a live loading document create a fake one - if (doc.implementation && doc.implementation.createDocument) { - // use a shadow document body as context - context = doc.implementation.createDocument('', '', null). - appendChild(doc.createElement('html')). - appendChild(doc.createElement('head')).parentNode. - appendChild(doc.createElement('body')); - } else { - // use an unattached div node as context - context = doc.createElement('div'); - } - - // fix for Safari 8.x and other engines that - // fail querying filtered sibling combinators - element = doc.createElement('div'); - element.innerHTML = '